<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3085503166137311106</id><updated>2025-08-26T13:42:23.947-04:00</updated><category term="Being Grad Students"/><category term="SQLite"/><title type='text'>Things I Like</title><subtitle type='html'>Things I’ve learned or found useful over the years. </subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://b010.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-4794349965775202431</id><published>2024-12-29T04:49:00.004-05:00</published><updated>2024-12-29T04:51:44.127-05:00</updated><title type='text'>How to link to a file or folder in Apple Notes on Mac?</title><content type='html'>Step 1: In Finder, select the file (or folder) you want to link to, then press Option + Command + C to copy the path of that file (or folder).&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Step 2: In Notes, click Edit &amp;gt; Add Link. In the“Linked to:” field, type “file://” then press Command+V to paste the copied pathname.&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/4794349965775202431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/4794349965775202431'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2024/12/how-to-link-to-file-or-folder-in-apple.html' title='How to link to a file or folder in Apple Notes on Mac?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-7522469396885295014</id><published>2022-12-17T19:22:00.007-05:00</published><updated>2022-12-17T19:30:20.328-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students"/><title type='text'>Wrinkle-resistant machine-washable fabric placemats</title><content type='html'>&lt;p&gt;It surprised me that it was really hard to find &lt;b&gt;fabric&lt;/b&gt; placemats that were&amp;nbsp;&lt;b&gt;machine washable &lt;/b&gt;AND&lt;b&gt; do not wrinkle easily&lt;/b&gt;. (Try searching for it and you&#39;ll see.) Eventually, I found it, from &lt;a href=&quot;https://www.etsy.com/shop/BeginninginSTL&quot; target=&quot;_blank&quot;&gt;BeginninginSTL&lt;/a&gt; on Etsy!!&amp;nbsp;Impressively, every placemat was hand-made and shipped from St Louis, Missouri. &lt;a href=&quot;https://www.etsy.com/listing/1156923971/stain-and-wrinkle-resistant-polyester&quot; target=&quot;_blank&quot;&gt;Here&#39;s a direct link to one&lt;/a&gt; of the placemat designs. The secret is in the fabric—polyester—which doesn&#39;t wrinkle as easily as other materials like cotton. Also, the seller/creator has chosen a variety of fabrics that can go well with different settings. ⭐⭐⭐⭐⭐&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh-vGrBdiRSKrN1HVn-GiXdSVCFOnI6zoMhhCFYuCQ3-iR4A5kQ698LScze99RhaVq-DkpZcdQJgCr6qvi4BiHud3ndvq4vmfQGxq_KdkqoVzq4ERLfRtS0eMLirreLg5LHiCOfiQEQrY-KJOfzONiZ1lKQUadKzUGHC4bHHNjCXQe_oPttN9YAzpIMtg&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;2248&quot; data-original-width=&quot;3520&quot; height=&quot;410&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh-vGrBdiRSKrN1HVn-GiXdSVCFOnI6zoMhhCFYuCQ3-iR4A5kQ698LScze99RhaVq-DkpZcdQJgCr6qvi4BiHud3ndvq4vmfQGxq_KdkqoVzq4ERLfRtS0eMLirreLg5LHiCOfiQEQrY-KJOfzONiZ1lKQUadKzUGHC4bHHNjCXQe_oPttN9YAzpIMtg=w640-h410&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/7522469396885295014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/7522469396885295014'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2022/12/wrinkle-resistant-machine-washable.html' title='Wrinkle-resistant machine-washable fabric placemats'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEh-vGrBdiRSKrN1HVn-GiXdSVCFOnI6zoMhhCFYuCQ3-iR4A5kQ698LScze99RhaVq-DkpZcdQJgCr6qvi4BiHud3ndvq4vmfQGxq_KdkqoVzq4ERLfRtS0eMLirreLg5LHiCOfiQEQrY-KJOfzONiZ1lKQUadKzUGHC4bHHNjCXQe_oPttN9YAzpIMtg=s72-w640-h410-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-5029535706266613485</id><published>2021-07-06T18:50:00.007-04:00</published><updated>2021-07-27T16:58:20.402-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students"/><title type='text'>Best Easy Delicious Desserts for Potluck Party</title><content type='html'>As a student, I used to dread going to potluck parties because I didn&#39;t like how my home-cook dishes (I did like seeing friends at the parties though!). They&#39;re just not appealing --- didn&#39;t taste good or look good (I would gladly eat them, but just worried about scaring my friends...).&lt;br /&gt;
&lt;br /&gt;
One day, I decided that I had to fix this --- to learn to make one thing that I could bring. Something that&#39;s delicious, easy to make, *and* unlikely that other people would bring.&lt;br /&gt;
&lt;br /&gt;&lt;a href=&quot;http://images.media-allrecipes.com/global/recipes/small/94068.jpg&quot; style=&quot;clear: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;223&quot; src=&quot;http://images.media-allrecipes.com/global/recipes/small/94068.jpg&quot; width=&quot;223&quot; /&gt;&lt;/a&gt;So I found this 5-star&amp;nbsp;&lt;a href=&quot;http://allrecipes.com/recipe/brownie-chocolate-chip-cheesecake/detail.aspx&quot;&gt;Brownie Chocolate Chip Cheesecake&lt;/a&gt; recipe.&lt;br /&gt;
It needs very few ingredients, and you basically just mix them together, and it tastes &lt;b&gt;fantastic&lt;/b&gt;. Brownie bottom layer, plus cream cheese top layer filled with chocolate chips. Yummy. None of my friends could resist. (Mr. V, you should try it, but don&#39;t eat so much. Watch your tummy.)&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;clear: both;&quot;&gt;
&lt;/div&gt;
&lt;a href=&quot;http://www.amazon.com/gp/product/B000237FSA/ref=as_li_ss_il?ie=UTF8&amp;amp;tag=posbl0e-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B000237FSA&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;171&quot; src=&quot;http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL110_&amp;amp;ASIN=B000237FSA&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=posbl0e-20&amp;amp;ServiceVersion=20070822&quot; width=&quot;190&quot; /&gt;&lt;/a&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://www.assoc-amazon.com/e/ir?t=posbl0e-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B000237FSA&quot; style=&quot;border: none; margin: 0px;&quot; width=&quot;1&quot; /&gt;
And I&#39;m using this springform pan (Nordic Ware Springform Pan 10 Cup, 9 Inch). Sturdy and doesn&#39;t leak. Hasn&#39;t failed me for years!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://images.media-allrecipes.com/global/recipes/small/92941.jpg&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;172&quot; src=&quot;http://images.media-allrecipes.com/global/recipes/small/92941.jpg&quot; width=&quot;172&quot; /&gt;&lt;/a&gt;This Christmas, I learned another recipe: Rice Krispies Treat.&amp;nbsp;It needs only 3 ingredients, and 10 min to make (really 10 min, unlike other recipes that lie). Delicious. A good dessert to make when I don&#39;t have much time. There&#39;s &lt;a href=&quot;http://allrecipes.com/recipe/kelloggs-rice-krispies-treats-original/&quot;&gt;Kellogg&#39;s version&lt;/a&gt;, but I like my friend&#39;s ingredient proportion better:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;1/4 cup butter&lt;/li&gt;
&lt;li&gt;4 cups marshmallows&lt;/li&gt;
&lt;li&gt;5 cups Rice Kripies cereal&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.amazon.com/gp/product/B004CFY55A/ref=as_li_ss_il?ie=UTF8&amp;amp;tag=posbl0e-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B004CFY55A&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;139&quot; src=&quot;http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL110_&amp;amp;ASIN=B004CFY55A&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=posbl0e-20&amp;amp;ServiceVersion=20070822&quot; width=&quot;139&quot; /&gt;&lt;/a&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://www.assoc-amazon.com/e/ir?t=posbl0e-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B004CFY55A&quot; style=&quot;border: none; margin: 0px;&quot; width=&quot;1&quot; /&gt;
I use one of these nicely-built pyrex containers (3 QT) to hold the rice krispies.
&lt;br /&gt;
&lt;br /&gt;
&lt;script charset=&quot;utf-8&quot; src=&quot;http://ws.amazon.com/widgets/q?rt=tf_mfw&amp;amp;ServiceVersion=20070822&amp;amp;MarketPlace=US&amp;amp;ID=V20070822/US/posbl0e-20/8001/ca71a7fe-a2c8-4974-9956-cc26f295cc85&quot; type=&quot;text/javascript&quot;&gt; &lt;/script&gt; &lt;noscript&gt;&lt;A HREF=&quot;http://ws.amazon.com/widgets/q?rt=tf_mfw&amp;ServiceVersion=20070822&amp;MarketPlace=US&amp;ID=V20070822%2FUS%2Fposbl0e-20%2F8001%2Fca71a7fe-a2c8-4974-9956-cc26f295cc85&amp;Operation=NoScript&quot;&gt;Amazon.com Widgets&lt;/A&gt;&lt;/noscript&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/5029535706266613485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/5029535706266613485'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2012/01/desserts-for-potluck-party.html' title='Best Easy Delicious Desserts for Potluck Party'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-3009405123229719833</id><published>2021-07-05T16:44:00.003-04:00</published><updated>2021-07-09T16:16:39.541-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students"/><title type='text'>Simple healthy meal in 1 minute. No cleaning needed!</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkbiR0OeJ3_GeSv2DEpYDEgdjMgvOiSbBsCbfsRuoW4ZT2WblBRiPtM60W4fywyGJ2gPMZnnEJnE7Nvt4Tzu27cnKE4CIFzCJCS83HhcWSaE5Kg_94AXd3wyHSjWEodJrI15-OYEB502PJ/s1280/sheet-pan-vegi-salmon.jpeg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1280&quot; data-original-width=&quot;941&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkbiR0OeJ3_GeSv2DEpYDEgdjMgvOiSbBsCbfsRuoW4ZT2WblBRiPtM60W4fywyGJ2gPMZnnEJnE7Nvt4Tzu27cnKE4CIFzCJCS83HhcWSaE5Kg_94AXd3wyHSjWEodJrI15-OYEB502PJ/w294-h400/sheet-pan-vegi-salmon.jpeg&quot; title=&quot;One-pan meal&quot; width=&quot;294&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Being a PhD student often means having little time to cook, or thinking about what to cook, making trips to grocery stores, hauling home whatever I&#39;ve bought, deciding on when to cook it (e.g., which day of the week, is it for lunch or dinner?), how much time I need to prepare and cook the food. And finally, cleaning all the cooking utensils!! Argh...&lt;p&gt;&lt;/p&gt;&lt;p&gt;My friends and I often end up eating out, which can really add up (most grad students live paycheck to paycheck), and &lt;a href=&quot;https://www.webmd.com/diet/news/20200129/eating-out-a-recipe-for-poor-nutrition-study-finds#1&quot; target=&quot;_blank&quot;&gt;more importantly it&#39;s often not healthy, and you often have no idea what ingredients they use.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;It took awhile for me to learn, but I finally found the ultimate way to cook healthy meals where prep work is (literally) 1 minute, and there is no cooking utensils or pans to clean!!&lt;/p&gt;&lt;p&gt;The secret is cooking everything &lt;b&gt;using a single &quot;sheet pan&quot; and put everything you want to cook on it&lt;/b&gt;. And that&#39;s it! (We assume you have an oven, which is often the case for apartments and houses that grad students living in the US.)&amp;nbsp;&lt;/p&gt;&lt;p&gt;Here&#39;s how it works:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;Pick/buy whatever sheet pan that you want to use. &lt;/b&gt;Your food actually won&#39;t be touching this pan, so its exact material is not very relevant. But if you want to use the pan for cooking other things (e.g., bake cookies) then you&#39;ll want to research it a bit (which is out of scope of this post!).&lt;/li&gt;&lt;li&gt;&lt;b&gt;Lay a piece of parchment paper on the pan.&lt;/b&gt; Since the paper is non-stick, when you&#39;re done cooking, you just throw it away. No need to clean the pan!! Parchment paper usually comes in a roll or as sheets. You can use either here, because our main goal is to simply use it to separate the food from the pan. Some people recommends aluminum foil, which can also works, but your food can stick to the foil.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Put whatever proteins (e.g., chicken thigh, pork chop, fish filet) and whatever frozen vegetables you want on the pan, and sprinkle whatever oil and spices on top.&lt;/b&gt; This part is really up to you. As shown in the picture, I usually buy different kinds of big bags of mixed frozen veggies (you&#39;ll surely find them at your local groceries), and you don&#39;t need to thaw them. Jump dump them directly on the pan. Main reasons are that &lt;a href=&quot;https://www.theguardian.com/lifeandstyle/2017/may/01/are-frozen-fruit-and-vegetables-as-good-for-you-as-fresh&quot; target=&quot;_blank&quot;&gt;they last pretty much forever, already &quot;chopped up&quot; (i.e., YOU don&#39;t need to do it) and there&#39;s no difference in terms of nutrition &amp;nbsp;when compared to their &quot;fresh&quot; version (and sometimes even better!), and usually cheaper than &quot;fresh&quot; versions (which may not be very fresh after all because they can be in transit for days or weeks!).&lt;/a&gt;&amp;nbsp;I usually sprinkle some olive oil, salt, black pepper, and chili flakes. But again, it&#39;s really up to you. Experiment and find the tastes that you like (since you&#39;re the one eating it)! An a quick note --- &lt;a href=&quot;https://www.today.com/food/should-you-rinse-raw-chicken-ina-garten-debunks-cooking-myth-t125376&quot; target=&quot;_blank&quot;&gt;it may not be a good idea to wash raw chicken because washing can easily spread germs to utensils and other food&lt;/a&gt; (i.e., you can just put the chicken directly on the pan).&lt;/li&gt;&lt;li&gt;&lt;b&gt;Put your pan of food in oven and bake&lt;/b&gt; at &lt;a href=&quot;https://www.utm.utoronto.ca/health/sites/files/health/public/shared/pdfs/How%20To%20Cook%20-%20Chicken%2C%20Pork%2C%20Fish.pdf&quot; target=&quot;_blank&quot;&gt;a temperature and for enough time that will thoroughly cook the protein&lt;/a&gt;&amp;nbsp;which&amp;nbsp;depend on the size and thickness of your protein, and the temperature accuracy of your oven. For the salmon in the picture, I used 400F and baked for 20min. Don&#39;t worry if you don&#39;t get the temperature and timing right the first few times. Think of this as a learning process. And you will eventually get it!&lt;/li&gt;&lt;li&gt;&lt;b&gt;Then pull your cooked masterpiece out of oven and plate it and eat!&lt;/b&gt; Throw away the parchment paper. No need to clean the pan (unless you&#39;ve dripped food or oil on it). Yay!&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;As you now can tell, the main &quot;cooking&quot; time is really spent on pulling out the pan, placing parchment paper, dump the protein and frozen veggies on the pan, &lt;b&gt;all can be done in under a minute&lt;/b&gt;! Enjoy!&lt;/p&gt;&lt;p&gt;Another important benefit, as the title of this post says, your meal is &quot;healthy&quot;. You know what your ingredients are and you know the cooking process.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/3009405123229719833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/3009405123229719833'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2021/07/simplest-healthy-meal-in-1-minute-and.html' title='Simple healthy meal in 1 minute. No cleaning needed!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkbiR0OeJ3_GeSv2DEpYDEgdjMgvOiSbBsCbfsRuoW4ZT2WblBRiPtM60W4fywyGJ2gPMZnnEJnE7Nvt4Tzu27cnKE4CIFzCJCS83HhcWSaE5Kg_94AXd3wyHSjWEodJrI15-OYEB502PJ/s72-w294-h400-c/sheet-pan-vegi-salmon.jpeg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-296320204951077772</id><published>2021-07-04T12:17:00.005-04:00</published><updated>2021-07-09T21:54:17.403-04:00</updated><title type='text'>Best mobile standing desk for small space</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7BLO7NbNkSYKAUgkN5yfhlY_AYC2dgg6shvai8kcftaeurw4yp_CfaBkhJTEnvBy8o2mKjfVf2PknRpSTtLOkUrPkcAbgXKoic_L7HxR-qTcddyZ2vSS4VaR9ejgFs9ZBVNboF9138pdM/s1500/A728A969-BC7F-4EBF-B396-A81AA86DA27A.jpeg&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1500&quot; data-original-width=&quot;1036&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7BLO7NbNkSYKAUgkN5yfhlY_AYC2dgg6shvai8kcftaeurw4yp_CfaBkhJTEnvBy8o2mKjfVf2PknRpSTtLOkUrPkcAbgXKoic_L7HxR-qTcddyZ2vSS4VaR9ejgFs9ZBVNboF9138pdM/s320/A728A969-BC7F-4EBF-B396-A81AA86DA27A.jpeg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Living in a small apartment means often thinking about how to use space efficiently. I like “mobile” furniture (i.e., on wheels) that I can easily move around when needed, say when I want to re-organize my place, or when I just want a change of scenery when working.&lt;p&gt;&lt;/p&gt;&lt;p&gt;As I get older, sitting in front a computer all day is starting to give me muscle aches. It’s time to investigate standing desks! Very quickly, I found most standing desks are rather large and they are NOT mobile (i.e., no wheels to roll on). After a lot of detective work, I finally found a &lt;a href=&quot;https://www.amazon.com/Seville-Classics-Pneumatic-Sit-Stand-Height-Adjustable/dp/B08YJ8TXRQ?th=1&quot; target=&quot;_blank&quot;&gt;small height-adjustable standing desk&lt;/a&gt; that I can easily roll around!&lt;/p&gt;&lt;p&gt;Have been using it for a few years, almost every day. My computer setup is simple: a small laptop connected to a monitor, wireless mouse, and wireless keyboard. All fit nicely on the desk; just enough space for me. The desk is overall very sturdy; the wheels roll smoothly, and the center pillar supporting the table top is solid. Overall, very happy.&amp;nbsp;&lt;/p&gt;&lt;p&gt;This desk is particularly useful for remote work where I can move it around my place to pretty much anywhere I want!&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/296320204951077772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/296320204951077772'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2021/07/small-mobile-standing-desk-for-small.html' title='Best mobile standing desk for small space'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7BLO7NbNkSYKAUgkN5yfhlY_AYC2dgg6shvai8kcftaeurw4yp_CfaBkhJTEnvBy8o2mKjfVf2PknRpSTtLOkUrPkcAbgXKoic_L7HxR-qTcddyZ2vSS4VaR9ejgFs9ZBVNboF9138pdM/s72-c/A728A969-BC7F-4EBF-B396-A81AA86DA27A.jpeg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-8721665576754706153</id><published>2021-07-04T11:39:00.002-04:00</published><updated>2023-03-10T21:19:15.832-05:00</updated><title type='text'>Convert PNG/JPG to EPS on a Mac for free, without creating a huge file</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://imagemagick.org/image/wizard.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;800&quot; data-original-width=&quot;602&quot; height=&quot;320&quot; src=&quot;https://imagemagick.org/image/wizard.png&quot; width=&quot;241&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;The command for converting PNG/JPG to EPS are:&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;convert temp.png -compress lzw eps2:temp.eps&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;convert temp.jpg -compress jpeg eps2:temp.eps&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;convert&lt;/span&gt; command comes from the&amp;nbsp;&lt;a href=&quot;http://www.imagemagick.org/&quot; target=&quot;_blank&quot;&gt;imagemagick&lt;/a&gt;&amp;nbsp;package available on Mac, Windows, Linux, and iOS.&lt;br /&gt;
&lt;br /&gt;
If you type only&amp;nbsp;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;convert temp.png temp.eps&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;, it&#39;s gonna create the EPS file&amp;nbsp;&lt;b&gt;without&lt;/b&gt; compression, creating a &lt;b&gt;huge&lt;/b&gt; file.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/8721665576754706153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/8721665576754706153'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2013/01/convert-pngjpg-to-eps-on-mac-without.html' title='Convert PNG/JPG to EPS on a Mac for free, without creating a huge file'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-2570676259538687090</id><published>2021-07-04T11:18:00.004-04:00</published><updated>2021-07-06T15:35:14.213-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students"/><title type='text'>Using steamer instead of iron for wrinkles on clothes</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTbhyphenhyphen39ABIVxQQNQo3gZR5WKqanTNJmYoWjG80a29X3I4u2P2oBrHG6UMz9lYTA8wOWqeRUH3gcbUtvbJs4XQiJT_7An8JxOHQ1HhK09qMvgULErYBunAE6vWteaGTTuzFWu8yRMDM50Rn/s1252/7FE4554C-D845-4EC4-873C-26CF5F1BB5C8.jpeg&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1252&quot; data-original-width=&quot;316&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTbhyphenhyphen39ABIVxQQNQo3gZR5WKqanTNJmYoWjG80a29X3I4u2P2oBrHG6UMz9lYTA8wOWqeRUH3gcbUtvbJs4XQiJT_7An8JxOHQ1HhK09qMvgULErYBunAE6vWteaGTTuzFWu8yRMDM50Rn/s320/7FE4554C-D845-4EC4-873C-26CF5F1BB5C8.jpeg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&lt;b&gt;No one likes to iron clothes.&lt;/b&gt; It takes so much effort and space. Clearing space in my small apartment so I could open up the ironing board was already a chore. Then needed to wait for the iron to warm up. All I wanted is to just iron one shirt!&lt;div&gt;&lt;br /&gt;
It’s only after a while that I learned of a much better alternative — using a steamer instead! Which uses hot steam to loosen wrinkles.&amp;nbsp;No ironing board needed. It&#39;s fast to heat up the steam (and it only uses water). It has a small footprint. And since it stands upright, you can hang clothes on it. Plus, you can use it to sterilize curtains and other things. Handy!&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I picked the &lt;a href=&quot;https://www.amazon.com/dp/B000B6QCAA/ref=cm_sw_em_r_mt_dp_WZ34CBMJ976YA6WDCDP1&quot; target=&quot;_blank&quot;&gt;consumer model from the Jiffy brand&lt;/a&gt;&amp;nbsp;with metal “head” (vs plastic head). I like that it’s super sturdy (have it for more than 15 years) and still looks like new (which is in fact not too surprising since there aren’t any moving parts; its main purpose is to boil water and dispense the steam in a controlled manner). I looked up that its a reputable brand and have been making steamers since 1940 in USA.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I wish I knew about steamers sooner, because it’s such a time and space saver! I rarely use the iron any more, the only times I use it is when I need sharp creases on pants, which is extremely rare. The steamer is one of the things that I use almost every (work) day. Before I leave home, I can just pull out the clothes I want to wear, steam them all in less than a minute and I’m good to go!&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/2570676259538687090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/2570676259538687090'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2012/01/steamer-instead-of-iron-being-grad.html' title='Using steamer instead of iron for wrinkles on clothes'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTbhyphenhyphen39ABIVxQQNQo3gZR5WKqanTNJmYoWjG80a29X3I4u2P2oBrHG6UMz9lYTA8wOWqeRUH3gcbUtvbJs4XQiJT_7An8JxOHQ1HhK09qMvgULErYBunAE6vWteaGTTuzFWu8yRMDM50Rn/s72-c/7FE4554C-D845-4EC4-873C-26CF5F1BB5C8.jpeg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-5727103061027023047</id><published>2014-03-29T20:49:00.008-04:00</published><updated>2021-07-06T15:37:43.770-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students"/><title type='text'>How to lighten up a dim room with minimal effort and cost</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifcXKWBUL8oxbctxsAjyesKuSvmQIRxq8LaW37X9B1vjnNwMc-GCn7k6x0GSo4kZzyBOy5OuEDijuE02LmozeeBBk82LAj84lklw339s7zItLZFO9IlrW6jB655wlKq97q9G8t_PzmsOGQ/s578/51x6N7UtRXL._AC_SL1050_.jpg&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;575&quot; data-original-width=&quot;578&quot; height=&quot;199&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifcXKWBUL8oxbctxsAjyesKuSvmQIRxq8LaW37X9B1vjnNwMc-GCn7k6x0GSo4kZzyBOy5OuEDijuE02LmozeeBBk82LAj84lklw339s7zItLZFO9IlrW6jB655wlKq97q9G8t_PzmsOGQ/w200-h199/51x6N7UtRXL._AC_SL1050_.jpg&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Get one of these &lt;a href=&quot;https://www.amazon.com/s?k=socket+splitter&quot; target=&quot;_blank&quot;&gt;socket splitter&lt;/a&gt;&amp;nbsp;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://ir-na.amazon-adsystem.com/e/ir?t=posbl0e-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B00976SSV6&quot; style=&quot;border: none; margin: 0px;&quot; width=&quot;1&quot; /&gt;to your floor lamp, then add a bulb, to double the brightness! There are now actually many variations, with as many as 1-to-4 split!&amp;nbsp;&lt;br /&gt;

</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/5727103061027023047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/5727103061027023047'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2014/03/how-to-lighten-up-dim-room-with-minimal.html' title='How to lighten up a dim room with minimal effort and cost'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifcXKWBUL8oxbctxsAjyesKuSvmQIRxq8LaW37X9B1vjnNwMc-GCn7k6x0GSo4kZzyBOy5OuEDijuE02LmozeeBBk82LAj84lklw339s7zItLZFO9IlrW6jB655wlKq97q9G8t_PzmsOGQ/s72-w200-h199-c/51x6N7UtRXL._AC_SL1050_.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-8867828708707809947</id><published>2013-10-13T02:27:00.003-04:00</published><updated>2021-07-03T17:35:56.444-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students"/><title type='text'>Template for beautiful Latex table</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAxongIk5TQNf2XIQV0tuQcaRkSrpMWj-QaCBBy9x81KqJDEustUOW6HoqXwvgXZeOPvpDIzYSB2L6OEqhJybLPjFr2IkxuRCHyNbYBdYMdNbgiuQJ-7iW2B3BBKrQmSsOspFREFQ7-Cjw/s540/table.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;326&quot; data-original-width=&quot;540&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAxongIk5TQNf2XIQV0tuQcaRkSrpMWj-QaCBBy9x81KqJDEustUOW6HoqXwvgXZeOPvpDIzYSB2L6OEqhJybLPjFr2IkxuRCHyNbYBdYMdNbgiuQJ-7iW2B3BBKrQmSsOspFREFQ7-Cjw/s320/table.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Latex source copied from&lt;br /&gt;
&lt;a href=&quot;http://www.latextemplates.com/template/professional-table&quot;&gt;http://www.latextemplates.com/template/professional-table&lt;/a&gt;&lt;br /&gt;
Great, general design tips from Markus&lt;br /&gt;
&lt;a href=&quot;http://www.inf.ethz.ch/personal/markusp/teaching/guides/guide-tables.pdf&quot;&gt;http://www.inf.ethz.ch/personal/markusp/teaching/guides/guide-tables.pdf&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br /&gt;
% Professional Table&lt;br /&gt;
% LaTeX Template&lt;br /&gt;
% Version 1.0 (11/10/12)&lt;br /&gt;
%&lt;br /&gt;
% This template has been downloaded from:&lt;br /&gt;
% http://www.LaTeXTemplates.com&lt;br /&gt;
%&lt;br /&gt;
% License:&lt;br /&gt;
% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/)&lt;br /&gt;
%&lt;br /&gt;
% Note: to use this table in another LaTeX document, you will need to copy&lt;br /&gt;
% the \usepackage{booktabs} line to the new document and paste it before&lt;br /&gt;
% \begin{document}. The table itself can then be pasted anywhere in the new&lt;br /&gt;
% document.&lt;br /&gt;
%&lt;br /&gt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&lt;br /&gt;
&lt;br /&gt;
\documentclass{article}&lt;br /&gt;
&lt;br /&gt;
\usepackage{booktabs} % Allows the use of \toprule, \midrule and \bottomrule in tables for horizontal lines&lt;br /&gt;
&lt;br /&gt;
\begin{document}&lt;br /&gt;
&lt;br /&gt;
\begin{table} % Add the following just after the closing bracket on this line to specify a position for the table on the page: [h], [t], [b] or [p] - these mean: here, top, bottom and on a separate page, respectively&lt;br /&gt;
\centering % Centers the table on the page, comment out to left-justify&lt;br /&gt;
\begin{tabular}{l c c c c c} % The final bracket specifies the number of columns in the table along with left and right borders which are specified using vertical bars (|); each column can be left, right or center-justified using l, r or c. To specify a precise width, use p{width}, e.g. p{5cm}&lt;br /&gt;
\toprule % Top horizontal line&lt;br /&gt;
&amp;amp; \multicolumn{5}{c}{Growth Media} \\ % Amalgamating several columns into one cell is done using the \multicolumn command as seen on this line&lt;br /&gt;
\cmidrule(l){2-6} % Horizontal line spanning less than the full width of the table - you can add (r) or (l) just before the opening curly bracket to shorten the rule on the left or right side&lt;br /&gt;
Strain &amp;amp; 1 &amp;amp; 2 &amp;amp; 3 &amp;amp; 4 &amp;amp; 5\\ % Column names row&lt;br /&gt;
\midrule % In-table horizontal line&lt;br /&gt;
GDS1002 &amp;amp; 0.962 &amp;amp; 0.821 &amp;amp; 0.356 &amp;amp; 0.682 &amp;amp; 0.801\\ % Content row 1&lt;br /&gt;
NWN652 &amp;amp; 0.981 &amp;amp; 0.891 &amp;amp; 0.527 &amp;amp; 0.574 &amp;amp; 0.984\\ % Content row 2&lt;br /&gt;
PPD234 &amp;amp; 0.915 &amp;amp; 0.936 &amp;amp; 0.491 &amp;amp; 0.276 &amp;amp; 0.965\\ % Content row 3&lt;br /&gt;
JSB126 &amp;amp; 0.828 &amp;amp; 0.827 &amp;amp; 0.528 &amp;amp; 0.518 &amp;amp; 0.926\\ % Content row 4&lt;br /&gt;
JSB724 &amp;amp; 0.916 &amp;amp; 0.933 &amp;amp; 0.482 &amp;amp; 0.644 &amp;amp; 0.937\\ % Content row 5&lt;br /&gt;
\midrule % In-table horizontal line&lt;br /&gt;
\midrule % In-table horizontal line&lt;br /&gt;
Average Rate &amp;amp; 0.920 &amp;amp; 0.882 &amp;amp; 0.477 &amp;amp; 0.539 &amp;amp; 0.923\\ % Summary/total row&lt;br /&gt;
\bottomrule % Bottom horizontal line&lt;br /&gt;
\end{tabular}&lt;br /&gt;
\caption{Table caption text} % Table caption, can be commented out if no caption is required&lt;br /&gt;
\label{tab:template} % A label for referencing this table elsewhere, references are used in text as \ref{label}&lt;br /&gt;
\end{table}&lt;br /&gt;
&lt;br /&gt;
A reference to Table \ref{tab:template}.&lt;br /&gt;
&lt;br /&gt;
\end{document}&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/8867828708707809947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/8867828708707809947'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2013/10/template-for-beautiful-latex-table.html' title='Template for beautiful Latex table'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAxongIk5TQNf2XIQV0tuQcaRkSrpMWj-QaCBBy9x81KqJDEustUOW6HoqXwvgXZeOPvpDIzYSB2L6OEqhJybLPjFr2IkxuRCHyNbYBdYMdNbgiuQJ-7iW2B3BBKrQmSsOspFREFQ7-Cjw/s72-c/table.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-6705489159559302160</id><published>2013-09-13T21:09:00.003-04:00</published><updated>2021-07-03T17:20:29.364-04:00</updated><title type='text'>My favorite Doodle alternative</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSlzDpTY_qjDbF-2EFVL2ObIHLSNGlYbjVdMRWZ3h8GhH89IqB-XXg7ihA15vRTUEzDtdslTwN0k-9HAk8KfmqEPpRZTkSBuHGXrxjeENt0zMvc1YK-BILhWcIA0KixMMMoZO9XOGvJr7H/s415/Screen+Shot+2021-07-03+at+5.19.48+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;415&quot; data-original-width=&quot;296&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSlzDpTY_qjDbF-2EFVL2ObIHLSNGlYbjVdMRWZ3h8GhH89IqB-XXg7ihA15vRTUEzDtdslTwN0k-9HAk8KfmqEPpRZTkSBuHGXrxjeENt0zMvc1YK-BILhWcIA0KixMMMoZO9XOGvJr7H/s320/Screen+Shot+2021-07-03+at+5.19.48+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Doodle is great for intersecting calendars with collaborators to come up with times for meetings.&lt;br /&gt;
&lt;br /&gt;
However it doesn&#39;t provide a fast way to quickly mark time slots for &quot;yes&quot; or &quot;no&quot;.&lt;br /&gt;
I&#39;ve participated in Doodle poll that have over 100 slots for me check! Just imagine how tedious it is &amp;nbsp;having to check off each one...&lt;br /&gt;
&lt;br /&gt;
My new favorite is &lt;a href=&quot;http://when2meet.com/&quot;&gt;when2meet.com&lt;/a&gt; Excellent user interface! Super simple to use.&lt;br /&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/6705489159559302160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/6705489159559302160'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2013/09/my-favorite-doodle-alternative.html' title='My favorite Doodle alternative'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSlzDpTY_qjDbF-2EFVL2ObIHLSNGlYbjVdMRWZ3h8GhH89IqB-XXg7ihA15vRTUEzDtdslTwN0k-9HAk8KfmqEPpRZTkSBuHGXrxjeENt0zMvc1YK-BILhWcIA0KixMMMoZO9XOGvJr7H/s72-c/Screen+Shot+2021-07-03+at+5.19.48+PM.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-1545764482045091834</id><published>2013-04-13T01:54:00.001-04:00</published><updated>2013-04-13T01:54:52.973-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students"/><title type='text'>Must read for PhD students</title><content type='html'>Probably the best few minutes you will spend in your PhD life. Life-changing advice!&lt;br /&gt;
&lt;a href=&quot;http://www.cs.berkeley.edu/~pattrsn/talks/BadCareer.pdf&quot; target=&quot;_blank&quot;&gt;How to have a bad career in research/academia&lt;/a&gt; by Prof. David Patterson</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/1545764482045091834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/1545764482045091834'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2013/04/must-read-for-phd-students.html' title='Must read for PhD students'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-8221450300097091992</id><published>2013-03-29T02:27:00.004-04:00</published><updated>2013-03-29T02:27:47.733-04:00</updated><title type='text'>Automatically fix EPS bounding box on Mac, using ps2eps</title><content type='html'></content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/8221450300097091992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/8221450300097091992'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2013/03/automatically-fix-eps-bounding-box-on.html' title='Automatically fix EPS bounding box on Mac, using ps2eps'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-7380651899699602597</id><published>2013-01-14T22:57:00.004-05:00</published><updated>2025-02-06T15:28:37.482-05:00</updated><title type='text'>Shell script to import MySQL dumpfile into SQLite</title><content type='html'>&lt;!--Download shell script:&amp;nbsp;&lt;a href=&quot;http://poloclub.gatech.edu/downloads/mysql2sqlite.sh&quot; target=&quot;_blank&quot;&gt;mysql2sqlite.sh&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;--&gt;

&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;# Adaptation of Igor&#39;s StackOverflow answer on&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;# http://stackoverflow.com/questions/489277/script-to-convert-mysql-dump-sql-file-into-format-that-can-be-imported-into-sqli&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;#!/bin/sh&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;if [ &quot;x$1&quot; == &quot;x&quot; ]; then&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;echo &quot;&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;echo &quot;Usage: $0 &lt;mysql dump=&quot;dump&quot; filename=&quot;filename&quot;&gt;&quot;&lt;/mysql&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;echo &quot;This is a shell script that imports a MySQL dumpfile into an SQLite database.&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;echo &quot;Tested on a Mac with OS X 10.8.2 (late 2012)&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;echo &quot;Creates 3 output files.&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;echo &quot;1) out.db &amp;nbsp;-- SQLite database created from the MySQL dumpfile&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;echo &quot;2) out.sql -- a cleaned-up version of the MySQL dumpfile, readable by SQLite&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;echo &quot;3) out.err -- SQLite&#39;s error messages generated during importation&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;echo &quot;&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;exit&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;fi&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;cat $1 |&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;# delete the lines containing &quot;KEY&quot;, &quot;UNIQUE KEY&quot;, &quot;PRIMARY KEY&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;grep -v &#39; KEY &quot;&#39; |&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;grep -v &#39; UNIQUE KEY &quot;&#39; |&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;grep -v &#39; PRIMARY KEY &#39; |&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;# use sed to substitute mysql-specific keywords with general SQL keywords that sqlite knows&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;# tell sed to read the text as unicode text, by specifying LANG=en-US.UTF-8&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;LANG=en-US.UTF-8 sed &#39;/^SET/d&#39; |&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;LANG=en-US.UTF-8 sed &#39;s/ unsigned / /g&#39; |&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;LANG=en-US.UTF-8 sed &#39;s/ auto_increment,/,/g&#39; |&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;LANG=en-US.UTF-8 sed &#39;s/ auto_increment/ primary key autoincrement/g&#39; |&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;LANG=en-US.UTF-8 sed &#39;s/ smallint([0-9]*) / integer /g&#39; |&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;LANG=en-US.UTF-8 sed &#39;s/ tinyint([0-9]*) / integer /g&#39; |&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;LANG=en-US.UTF-8 sed &#39;s/ int([0-9]*) / integer /g&#39; |&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;LANG=en-US.UTF-8 sed &#39;s/ character set [^ ]* / /g&#39; |&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;LANG=en-US.UTF-8 sed &#39;s/ enum([^)]*) / varchar(255) /g&#39; |&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;LANG=en-US.UTF-8 sed &#39;s/ on update [^,]*//g&#39; |&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;LANG=en-US.UTF-8 sed &#39;s/UNLOCK TABLES;//g&#39; |&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;LANG=en-US.UTF-8 sed &#39;s/LOCK TABLES `[a-zA-Z0-9]*` WRITE;//g&#39; |&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;# tell perl to read the text as unicode text, by specifying -C&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;perl -C -e &#39;local $/;$_=&amp;lt;&amp;gt;;s/,\n\)/\n\)/gs;print &quot;begin;\n&quot;;print;print &quot;commit;\n&quot;&#39; |&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;perl -C -pe &#39;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; if (/^(INSERT.+?)\(/) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;$a=$1;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;s/\\&#39;\&#39;&#39;/&#39;\&#39;\&#39;&#39;/g;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;s/\\n/\n/g;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;s/\),\(/\);\n$a\(/g;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;nbsp; &#39; &amp;gt; out.sql&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;# import the cleaned-up version of mysql dump into out.db sqlite database&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;# errors saved to out.err&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;cat out.sql | sqlite3 out.db &amp;amp;&amp;gt; out.err&lt;/span&gt;&lt;br /&gt;


</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/7380651899699602597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/7380651899699602597'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2013/01/shell-script-to-import-mysql-dumpfile.html' title='Shell script to import MySQL dumpfile into SQLite'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-6844218422200183061</id><published>2012-04-23T16:08:00.001-04:00</published><updated>2012-04-23T16:08:20.416-04:00</updated><title type='text'>PowerPoint Mistakes -- from a usability standpoint</title><content type='html'>I saw a presentation today. Some of its fonts were really tiny.&lt;br /&gt;
That prompted me to google &quot;powerpoint mistakes&quot;. Got many hits, including this funny and informative &lt;a href=&quot;http://www.youtube.com/watch?v=m5Y3P41hr-Q&quot; target=&quot;_blank&quot;&gt;YouTube video&lt;/a&gt; by Don McMillan.&lt;br /&gt;
&lt;br /&gt;
Interestingly, these sources often only tell you &lt;b&gt;what&lt;/b&gt; to, or what not to do, but don&#39;t really tell you &lt;b&gt;why&lt;/b&gt;.&lt;br /&gt;
For example, some would tell you &quot;don&#39;t read the slides&quot;, &quot;use a minimal font size of 24&quot;, &quot;don&#39;t use more than 7 bullets on a slide&quot;, &quot;don&#39;t use dark color text on dark background&quot;, etc.&lt;br /&gt;
&lt;br /&gt;
But what are the common rationale behind all these dos and don&#39;ts?&lt;br /&gt;
&lt;b&gt;Usability&lt;/b&gt; -- that is whether it is easy for your audience to &quot;use&quot; (read, understand, see, etc.) your slides.&lt;br /&gt;
&lt;br /&gt;
If you think about your slides&#39; usability as the first priority, then I expect you can naturally fix many of your slides&#39; problems. For example, you won&#39;t:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;use fonts smaller than 24, because audience in the last row of a room can&#39;t see the text&lt;/li&gt;
&lt;li&gt;use more than 7 bullets, slide gets visually complex, straining your audience&#39;s eyes&lt;/li&gt;
&lt;li&gt;use dark color text on dark background, because your audience will find it hard to read&lt;/li&gt;
&lt;li&gt;read slides, because your audience will find you boring,&lt;/li&gt;
&lt;li&gt;and the list goes on...&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
I think it&#39;s much better to only remember one thing -- the principle of good slide usability -- rather than having to remember a laundry list of dos and don&#39;ts.&lt;br /&gt;
&lt;br /&gt;
Usability is one focus of within the research area of Human-Computer Interaction. I think it also applies to slide design.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/6844218422200183061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/6844218422200183061'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2012/04/powerpoint-mistakes-from-usability.html' title='PowerPoint Mistakes -- from a usability standpoint'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-2788923310563148308</id><published>2012-03-27T23:46:00.001-04:00</published><updated>2012-10-03T14:46:52.631-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SQLite"/><title type='text'>Aggregate bitwise OR in SQLite</title><content type='html'>The following SQL snippet applies bitwise OR on all the values in &lt;b&gt;numbers&lt;/b&gt; table&#39;s &lt;b&gt;value&lt;/b&gt; column. This example supports up to 8 bits; you can easily extend it to support more.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;CREATE TEMP TABLE numbers(value INTEGER);&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;INSERT INTO numbers VALUES(2);&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;INSERT INTO numbers VALUES(3);&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;INSERT INTO numbers VALUES(15);&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;select&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;((sum(value&amp;amp;1)&amp;gt;0) &amp;lt;&amp;lt; 0) +&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;((sum(value&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;2)&amp;gt;0) &amp;lt;&amp;lt; 1) +&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;((sum(value&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;4)&amp;gt;0) &amp;lt;&amp;lt; 2) +&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;((sum(value&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;8)&amp;gt;0) &amp;lt;&amp;lt; 3) +&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;((sum(value&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;16)&amp;gt;0) &amp;lt;&amp;lt; 4) +&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;((sum(value&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;32)&amp;gt;0) &amp;lt;&amp;lt; 5) +&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;((sum(value&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;64)&amp;gt;0) &amp;lt;&amp;lt; 6) +&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;((sum(value&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;128)&amp;gt;0) &amp;lt;&amp;lt; 7)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;from numbers;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;script charset=&quot;utf-8&quot; src=&quot;http://ws.amazon.com/widgets/q?rt=tf_mfw&amp;amp;ServiceVersion=20070822&amp;amp;MarketPlace=US&amp;amp;ID=V20070822/US/posbl0e-20/8001/3c3e78f6-b5c7-4b5c-9f01-8d213f9d64e2&quot; type=&quot;text/javascript&quot;&gt;
 
&lt;/script&gt; &lt;noscript&gt;&amp;amp;lt;A HREF=&quot;http://ws.amazon.com/widgets/q?rt=tf_mfw&amp;amp;amp;ServiceVersion=20070822&amp;amp;amp;MarketPlace=US&amp;amp;amp;ID=V20070822%2FUS%2Fposbl0e-20%2F8001%2F3c3e78f6-b5c7-4b5c-9f01-8d213f9d64e2&amp;amp;amp;Operation=NoScript&quot;&amp;amp;gt;Amazon.com Widgets&amp;amp;lt;/A&amp;amp;gt;&lt;/noscript&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/2788923310563148308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/2788923310563148308'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2012/03/aggregate-bitwise-or-in-sqlite.html' title='Aggregate bitwise OR in SQLite'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-1095907194558941578</id><published>2012-01-08T12:59:00.000-05:00</published><updated>2012-01-11T16:48:51.398-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students"/><title type='text'>Choose conferences with nice locations (Being Grad Students)</title><content type='html'>One of the nicest being a grad student is you get to travel, often &quot;for free&quot;, to conference held at great places&amp;nbsp;(e.g., Sydney, Paris, Hong Kong, etc.).&lt;br /&gt;
&lt;br /&gt;
Picking such a conference could motivate you to work hard for a paper. :-) So choose your conference wisely. After all. If you have some good work that you can submit to similar conferences that have comparable reputation/prestige, which conference would you send it to? The nicer one of course.&lt;br /&gt;
&lt;br /&gt;
Just remember to check with you advisor that it&#39;s OK with him/her though.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/1095907194558941578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/1095907194558941578'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2012/01/conference-travel-tips-being-grad.html' title='Choose conferences with nice locations (Being Grad Students)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-7451405287992955436</id><published>2012-01-08T01:00:00.002-05:00</published><updated>2021-07-06T15:43:50.201-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Being Grad Students"/><title type='text'>Cut your own hair (Being Grad Students)</title><content type='html'>When I was little, my father cut my hair. Then I came to the states for grad school -- no one cut my hair anymore!&lt;br /&gt;
&lt;br /&gt;
Going to a hair salon in the US can be so expensive. The costs add up really quickly.&amp;nbsp;So I thought about doing it myself; I remembered my father saying &quot;it&#39;s a piece of cake&quot; cutting my hair. How bad could it be if I did it myself?&lt;br /&gt;
&lt;br /&gt;
Very bad, when I first started, a few years back. I bought a cheap Wahl hair clipper (like &lt;a href=&quot;http://www.amazon.com/gp/product/B000JNQSIQ/ref=as_li_tf_tl?ie=UTF8&amp;amp;tag=posbl0e-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B000JNQSIQ&quot;&gt;this one&lt;/a&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://www.assoc-amazon.com/e/ir?t=posbl0e-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B000JNQSIQ&quot; style=&quot;border: none; margin: 0px;&quot; width=&quot;1&quot; /&gt;), &amp;nbsp;and I hated it, even though it&#39;s a 5 star product.&lt;br /&gt;
1) It has a long cord, which often get in the way&lt;br /&gt;
2) It&#39;s really awkward holding it to cut the side or the back of my head -- just try using your right hand to scratch your left ear from behind your head, and you&#39;ll know what I mean.&lt;br /&gt;
3) It&#39;s a big hassle having to keep changing the &quot;length guides&quot; for different hair lengths.&lt;br /&gt;
&lt;br /&gt;
Apparently, you need something &lt;i&gt;different&lt;/i&gt; when you cut your own hair. I found this&amp;nbsp;&lt;a href=&quot;https://www.amazon.com/Philips-QC5570-13-Degree-Clipper/dp/B00BN1TW7C&quot;&gt;Philips hair clipper&lt;/a&gt;&amp;nbsp;recently, which solved all the above problems!!&lt;br /&gt;
1) It&#39;s cordless&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://www.assoc-amazon.com/e/ir?t=posbl0e-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B004QWVY8A&quot; style=&quot;border: none; margin: 0px;&quot; width=&quot;1&quot; /&gt;.&lt;br /&gt;
2) It has a rotating head, so you can hold it sideway when you cut your hair on the side or the back of your head&lt;br /&gt;
3) It has a &quot;zoom ring&quot; that lets you change the cutting length from 30mm (about 1.18 in) down to super close shave. No need to fiddle with the millions of &quot;length guides&quot;! (Well, technically, there are still two guides, one for the longer lengths, one for shorter lengths.)&lt;br /&gt;
&lt;br /&gt;
I love this clipper. Great for a quick fix.&lt;br /&gt;
&lt;br /&gt;
For those of you (men) who haven&#39;t cut your own hair before. It&#39;s very easy (assuming you use this Philips clipper, and you just want to style your hair a little). Here&#39;s how:&lt;br /&gt;
&lt;br /&gt;
1a) Pick the longest length you want your hair to be (e.g., 30mm), and run the clipper through your whole head.&lt;br /&gt;
1b)&amp;nbsp;If you want to style the top part of your hair (e.g., for parting, or styling), leave that part longer (or don&#39;t cut that at all) for later.&lt;br /&gt;
2) Pick a shorter one (e.g., 25cm) and run it along the areas close to the ear, and the back of your neck.&lt;br /&gt;
3) Repeat step 2, with even shorter length if desired.&amp;nbsp;The key is to &quot;blend&quot; different lengths of hairs.&lt;br /&gt;
4) To add &quot;layers&quot; to your hair (to make your hair more &quot;choppy&quot; and to fine tune it to frame your face), use a pair of scissors, and cut &quot;into&quot; your hair&amp;nbsp;&lt;a href=&quot;http://youtu.be/vqtWeWsAgqI?t=1m50s&quot;&gt;like this&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Of course, if you need a really clean cut, or fancy style, you&#39;ll have to go to a hair salon.&lt;br /&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/7451405287992955436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/7451405287992955436'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2012/01/being-grad-student-cutting-your-own.html' title='Cut your own hair (Being Grad Students)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-8789614347261997502</id><published>2009-05-25T17:53:00.000-04:00</published><updated>2009-06-20T18:23:10.317-04:00</updated><title type='text'>Using BitSet or BitVector to store a set of integers</title><content type='html'>When programming with Java, we typically use HashSet&lt;integer&gt; to store a set of Integer, if we want to keep track of which Integer has been used and which hasn&#39;t. When we need to store millions of Integers, HashSet can be too slow, and it may take up too much memory.&lt;br /&gt;&lt;br /&gt;Java&#39;s BitSet and BitVector from  &lt;a href=&quot;http://acs.lbl.gov/%7Ehoschek/colt/&quot;&gt;COLT&lt;/a&gt; are great alternative; they are MUCH faster and consumes way less memory. For example, to store 20 million integers, both BitSet and BitVector only use about 2.5MB and take only, respectively, 0.67s  and 0.27s (which means BitVector is the fastest) to set and get all of the values once.  using HashSet&lt;integer&gt;, it takes ~962MB, and 6.3s. This is more than 380 times of memory saving, and ~20 times speed up.&lt;br /&gt;&lt;br /&gt;One &quot;disadvantage&quot; for BitVector is that it&#39;s size can&#39;t dynamically scale, but you can always fake it by manually growing or shrinking the set via &lt;tt&gt;setSize(...)&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;I can&#39;t figure out why Java&#39;s HashSet implementation uses so much RAM; I tried to reduce the size to 2 million, and that uses 100MB, approximately 1/10 of the size when having 20 millions. So this means indeed the Java implementation is memory-hungry. I&#39;m sure there&#39;s some way to cut down the memory consumption, but I haven&#39;t spent the time to investigate.&lt;/integer&gt;&lt;/integer&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/8789614347261997502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/8789614347261997502'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2009/05/using-bitvector-to-store-set-of.html' title='Using BitSet or BitVector to store a set of integers'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-2024211075755762718</id><published>2009-05-10T01:29:00.000-04:00</published><updated>2021-07-27T16:51:24.284-04:00</updated><title type='text'>Speed Comparison of:  (1) Java&#39;s built-in HashMap,  (2) Trove&#39;s TIntIntHashMap, and (3) Colt&#39;s OpenIntIntHashMap</title><content type='html'>Finally get to do a comparison among several popular Java HashMap implementations:
&lt;ul&gt;&lt;li&gt;Java&#39;s built-in HashMap&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://trove4j.sourceforge.net/&quot;&gt;Trove&lt;/a&gt;&#39;s implementation for primitive types&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://acs.lbl.gov/%7Ehoschek/colt/&quot;&gt;Colt&lt;/a&gt;&#39;s implementation for primitive types&lt;/li&gt;&lt;/ul&gt;Not too surprisingly, Java&#39;s built-in implementation is the slowest, and consumes the largest amount of memory among the three, since it stores objects instead of primitive types (e.g., instead of storing the number 3 as an int, it stores it as an Integer). What WAS surprisingly, however, was that Colt&#39;s implementation was SO MUCH faster than Java&#39;s implementation. For example, for a int-&amp;gt;int hashmap, running 10,000,000 puts() with Colt took less than &lt;span style=&quot;font-weight: bold;&quot;&gt;1/3&lt;/span&gt; of the time.  Running 10,000,000 gets() took less than &lt;span style=&quot;font-weight: bold;&quot;&gt;1/6&lt;/span&gt;, and 10,000,000 containsKey() less than &lt;span style=&quot;font-weight: bold;&quot;&gt;1/5&lt;/span&gt;! This is some substantial timing saving. This time-saving advantage is still there, even when we use a int-&amp;gt;float[] hashmap.

Memory-wise, the primitive implementations from Trove and Colt don&#39;t save us that much. For int-&amp;gt;int hashmap, both Trove and Colt save us about 30% of memory, but for int-&amp;gt;float[] (each float[] value has length 5) save us less than 10%. Nevertheless, there&#39;s still some saving.

Since I need to deal with large data sets, where it&#39;s common to use hashmaps with millions of entries, I&#39;ll use the Colt implementation from now on, for both it&#39;s impressive time saving and (slighly) lower memory consumption.

&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMy9OXtIqeWsBgffm0BMzfwxpKYaJMXR_XF1xBSUtwZIWnui_PAI17s8vQtOlgpUnV_DbyegyRYZiTFHvr2boKhyJzCVinJaW3i853beGYk_IZ2NH_P7qcYZUYt-tMhuOoCmC12Z6DqPPq/s1600-h/speed.gif&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5334069738150841202&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMy9OXtIqeWsBgffm0BMzfwxpKYaJMXR_XF1xBSUtwZIWnui_PAI17s8vQtOlgpUnV_DbyegyRYZiTFHvr2boKhyJzCVinJaW3i853beGYk_IZ2NH_P7qcYZUYt-tMhuOoCmC12Z6DqPPq/s400/speed.gif&quot; style=&quot;cursor: pointer; height: 249px; width: 400px;&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkSGjALLgi8GZxbJj5LbFBK5_HTDJtmtzVhBtZqtyk8P67PAg3MuUCilmXBOZ7DmkMVxejhmj0nHl87MgdWQyYSMdCZi6JPTCaxGUJhuULNt9o-BHwSAu7ShrBO28n3sfkacGalTRQu9qv/s1600-h/memory.gif&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5334072524171906498&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkSGjALLgi8GZxbJj5LbFBK5_HTDJtmtzVhBtZqtyk8P67PAg3MuUCilmXBOZ7DmkMVxejhmj0nHl87MgdWQyYSMdCZi6JPTCaxGUJhuULNt9o-BHwSAu7ShrBO28n3sfkacGalTRQu9qv/s400/memory.gif&quot; style=&quot;cursor: pointer; height: 216px; width: 400px;&quot; /&gt;&lt;/a&gt;

Here&#39;s the code I used for evaluating int-&amp;gt;float[] hashmap. To get the timing and memory consumption for one implementation, comment out the other two that you DON&#39;T want. You will also need to pass in these arguments to the VM, so enough heap memory will be alocated &quot;-Xms1200M -Xmx1200M&quot;.

&lt;pre&gt;import java.util.HashMap;

import cern.colt.map.OpenIntIntHashMap;
import cern.colt.map.OpenIntObjectHashMap;
import gnu.trove.TIntIntHashMap;
import gnu.trove.TIntObjectHashMap;


public class Compare {
 
 public static void main(String args[]){
  
  System.out.println(&quot;1st line: time used(s)\n2nd line: heap memory used so far(MB)&quot;);
  
  int n = 10000000;
  
  long startTime = System.nanoTime(); 
  long startHeapSize = Runtime.getRuntime().freeMemory();

  
  // BEGIN: benchmark for Java&#39;s built-in hashmap
  System.out.println(&quot;\n===== Java&#39;s built-in HashMap&lt;integer integer=&quot;&quot;&gt; =====&quot;);
  HashMap&lt;integer float=&quot;&quot;&gt; jIntIntMap = new HashMap&lt;integer float=&quot;&quot;&gt;();

  System.out.println(&quot;\n-- &quot; + n + &quot; puts(key, value) --&quot;);
  startTime = System.nanoTime(); 
  for (int i = 0; i &amp;lt; n; i++) { jIntIntMap.put(i,new float[]{0f,1f,2f,3f,4f}); }
  System.out.println( (System.nanoTime() - startTime) / 1000000000.0 );
  System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0  );  
  
  System.out.println(&quot;\n-- &quot; + n + &quot; gets(key) --&quot;);
  startTime = System.nanoTime(); 
  for (int i = 0; i &amp;lt; n; i++) { jIntIntMap.get(i); }
  System.out.println( (System.nanoTime() - startTime) / 1000000000.0 );
  System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0  );  

  System.out.println(&quot;\n-- &quot; + n + &quot; containsKey(key) --&quot;);
  startTime = System.nanoTime(); 
  for (int i = 0; i &amp;lt; n; i++) { jIntIntMap.containsKey(i); }
  System.out.println( (System.nanoTime() - startTime) / 1000000000.0 );
  System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0  );  
  // END  
  
  
  // BEGIN: benchmark for Trove&#39;s TIntIntHashMap
  System.out.println(&quot;\n===== Trove&#39;s TIntIntHashMap =====&quot;);
  TIntObjectHashMap&lt;float&gt; tIntIntMap = new TIntObjectHashMap&lt;float&gt;();

  System.out.println(&quot;\n-- &quot; + n + &quot; puts(key, value) --&quot;);
  startTime = System.nanoTime(); 
  for (int i = 0; i &amp;lt; n; i++) { tIntIntMap.put(i,new float[]{0f,1f,2f,3f,4f}); }
  System.out.println( (System.nanoTime() - startTime) / 1000000000.0 );
  System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0  );  
  
  System.out.println(&quot;\n-- &quot; + n + &quot; gets(key) --&quot;);
  startTime = System.nanoTime(); 
  for (int i = 0; i &amp;lt; n; i++) { tIntIntMap.get(i); }
  System.out.println( (System.nanoTime() - startTime) / 1000000000.0 );
  System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0  );  

  System.out.println(&quot;\n-- &quot; + n + &quot; containsKey(key) --&quot;);
  startTime = System.nanoTime(); 
  for (int i = 0; i &amp;lt; n; i++) { tIntIntMap.containsKey(i); }
  System.out.println( (System.nanoTime() - startTime) / 1000000000.0 );
  System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0  );  
  // END     
  
  // BEGIN: benchmark for Colt&#39;s OpenIntIntHashMap
  System.out.println(&quot;\n===== Colt&#39;s OpenIntIntHashMap =====&quot;);
  OpenIntObjectHashMap cIntIntMap = new OpenIntObjectHashMap();

  System.out.println(&quot;\n-- &quot; + n + &quot; puts(key, value) --&quot;);
  startTime = System.nanoTime(); 
  for (int i = 0; i &amp;lt; n; i++) { cIntIntMap.put(i,new float[]{0f,1f,2f,3f,4f}); }
  System.out.println( (System.nanoTime() - startTime) / 1000000000.0 );
  System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0  );  
  
  System.out.println(&quot;\n-- &quot; + n + &quot; gets(key) --&quot;);
  startTime = System.nanoTime(); 
  for (int i = 0; i &amp;lt; n; i++) { cIntIntMap.get(i); }
  System.out.println( (System.nanoTime() - startTime) / 1000000000.0 );
  System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0  );  

  System.out.println(&quot;\n-- &quot; + n + &quot; containsKey(key) --&quot;);
  startTime = System.nanoTime(); 
  for (int i = 0; i &amp;lt; n; i++) { cIntIntMap.containsKey(i); }
  System.out.println( (System.nanoTime() - startTime) / 1000000000.0 );
  System.out.println( (startHeapSize - Runtime.getRuntime().freeMemory()) /1048576.0  );  
  // END    
  
  
 }

}
&lt;/pre&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/2024211075755762718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/2024211075755762718'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2009/05/speed-comparison-of-1-javas-built-in.html' title='Speed Comparison of:  (1) Java&#39;s built-in HashMap,  (2) Trove&#39;s TIntIntHashMap, and (3) Colt&#39;s OpenIntIntHashMap'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMy9OXtIqeWsBgffm0BMzfwxpKYaJMXR_XF1xBSUtwZIWnui_PAI17s8vQtOlgpUnV_DbyegyRYZiTFHvr2boKhyJzCVinJaW3i853beGYk_IZ2NH_P7qcYZUYt-tMhuOoCmC12Z6DqPPq/s72-c/speed.gif" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-1890711803060151813</id><published>2008-12-03T16:40:00.000-05:00</published><updated>2008-12-03T16:47:18.472-05:00</updated><title type='text'>Embedding web browser in Java application</title><content type='html'>I found this &lt;a href=&quot;http://djproject.sourceforge.net/ns/&quot;&gt;NativeSwing library&lt;/a&gt; an excellent library for embedding a web browser in a Java application, seemingly easier to use and much better documented that &lt;a href=&quot;https://jdic.dev.java.net/&quot;&gt;JDIC&lt;/a&gt;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/1890711803060151813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/1890711803060151813'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2008/12/embedding-web-browser-in-java.html' title='Embedding web browser in Java application'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-4724430920528686149</id><published>2007-06-28T15:11:00.000-04:00</published><updated>2021-07-06T15:44:42.192-04:00</updated><title type='text'>WPF: getting a data-bound data template and the items within it</title><content type='html'>I&#39;m so happy to find out about &lt;a href=&quot;http://west-wind.com/WebLog/posts/78221.aspx&quot;&gt;Rich Strahl&#39;s post on how to get the items within a data template&lt;/a&gt; that is data-bound to, say, a list box.

It turns out the only way to get an item inside a data template is to programmatically go into the UI hierarchy of the template... not elegant at all!
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/4724430920528686149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/4724430920528686149'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2007/06/wpf-getting-data-bound-data-template.html' title='WPF: getting a data-bound data template and the items within it'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-2617929911960170128</id><published>2007-06-27T01:32:00.002-04:00</published><updated>2021-07-06T15:44:51.548-04:00</updated><title type='text'>The best tutorial about data binding in WPF</title><content type='html'>It turns out that Microsoft&#39;s MSDN has &lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/ms752347.aspx&quot;&gt;the best tutorial&lt;/a&gt; around about how to do data binding in WPF. Everything is explained clearly; the diagrams, tables, and examples are just perfect. Double thumbs up. Waaaay better than many other online data binding tutorials.

</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/2617929911960170128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/2617929911960170128'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2007/06/best-tutorial-about-data-binding-in-wpf.html' title='The best tutorial about data binding in WPF'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3085503166137311106.post-2421186432847796797</id><published>2007-06-16T02:59:00.002-04:00</published><updated>2021-07-06T15:45:09.440-04:00</updated><title type='text'>The correct way to repaint a form or control in c#</title><content type='html'>&lt;p&gt;&lt;a name=&quot;remarksToggle&quot;&gt;There are two ways to repaint a form and its contents: &lt;/a&gt;&lt;/p&gt;&lt;a name=&quot;remarksToggle&quot;&gt; &lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a name=&quot;remarksToggle&quot;&gt; &lt;/a&gt;&lt;p&gt;&lt;a name=&quot;remarksToggle&quot;&gt;You can use one of the overloads of the &lt;/a&gt;&lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.invalidate.aspx&quot; onclick=&quot;javascript:Track(&#39;ctl00_LibFrame_ctl16|ctl00_LibFrame_ctl17&#39;,this);&quot;&gt;Invalidate&lt;/a&gt; method with the &lt;b&gt;Update&lt;/b&gt; method. &lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;p&gt;You can call the &lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.refresh.aspx&quot; onclick=&quot;javascript:Track(&#39;ctl00_LibFrame_ctl16|ctl00_LibFrame_ctl18&#39;,this);&quot;&gt;Refresh&lt;/a&gt; method, which forces the control to redraw itself and all its children. This is equivalent to setting the &lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.invalidate.aspx&quot; onclick=&quot;javascript:Track(&#39;ctl00_LibFrame_ctl16|ctl00_LibFrame_ctl19&#39;,this);&quot;&gt;Invalidate&lt;/a&gt; method to &lt;b&gt;true&lt;/b&gt; and using it with &lt;b&gt;Update&lt;/b&gt;.&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The &lt;b style=&quot;font-weight: bold;&quot;&gt;Invalidate&lt;/b&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt; &lt;/span&gt;method governs what gets painted or repainted. The &lt;span style=&quot;font-weight: bold;&quot;&gt;Update&lt;/span&gt; method governs when the painting or repainting occurs. If you use the &lt;b&gt;Invalidate&lt;/b&gt; and &lt;b&gt;Update&lt;/b&gt; methods together rather than calling &lt;span style=&quot;font-weight: bold;&quot;&gt;Refresh&lt;/span&gt;, what gets repainted depends on which overload of &lt;b&gt;Invalidate&lt;/b&gt; you use. The &lt;b&gt;Update&lt;/b&gt; method just forces the control to be painted immediately, but the &lt;b&gt;Invalidate&lt;/b&gt; method governs what gets painted when you call the &lt;b&gt;Update&lt;/b&gt; method.&lt;/p&gt;(Above info quoted from MSDN &lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.update.aspx&quot;&gt;http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.update.aspx&lt;/a&gt;)
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/2421186432847796797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3085503166137311106/posts/default/2421186432847796797'/><link rel='alternate' type='text/html' href='http://b010.blogspot.com/2007/06/correct-way-to-repaint-form-or-control.html' title='The correct way to repaint a form or control in c#'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>