tag:blogger.com,1999:blog-83237759301918504852024-03-21T09:36:30.294-07:00Unto the pure, all things are pureFor all the advances made, the IT industry is still at its infancy, much younger than medicine was in the 1500's.S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.comBlogger91125tag:blogger.com,1999:blog-8323775930191850485.post-16662977643226465132020-03-10T20:25:00.000-07:002020-03-10T20:31:50.418-07:00What you can do with one cheap lousy cameraNational Geographic prides itself in sending photographers armed with tens of thousands of dollars of equipment across vast distances to take great pictures. <span style="font-size: x-large;">Big deal!</span> I think it's a bigger challenge to see what you can capture from <b style="color: red;">one spot on planet Earth</b>, with just one cheap lousy camera. <br />
<br />
What you see here are pictures all taken from one place, my home. From the meta data you can tell that a cheap Nikon was used before 2007 and a cheap Canon was used after that. Both are below $300 and not <a href="https://all-things-pure.blogspot.com/2009/01/hard-facts-about-photography.html" title="Some hard facts about photography">SLRs</a>, and if cameras with those specifications are still built today, they would probably cost $50.<br />
<br />
In the pictures shown here:<br />
<ul><li>All are real living things, except for the thing in the sky and the paper snake, the latter taken by a 5-year old.</li>
<li>All are taken in their natural environment except for one, and that is the civet cat which is caged.</li>
<li>All living things are live (other than the obviously dead lizard which was not the subject anyway) and in their natural pose except for one. See if you can pick out which.</li>
</ul><br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-49EveQPyX2A/SVGjsaRkIBI/AAAAAAAAAJ4/IYw3kysH4JI/s1600/2004-06-10+Snake.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://1.bp.blogspot.com/-49EveQPyX2A/SVGjsaRkIBI/AAAAAAAAAJ4/IYw3kysH4JI/s1600/2004-06-10+Snake.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#1 Not a living thing.</td></tr>
</tbody></table><br />
I Googled and found that the life-span of a kingfisher is seven years or longer. Do you think the following are the exact same bird over the years? Lest you think that these are just stationary objects, do be reminded that you have only a few seconds when you creep to within two meters of a bird.<br />
<br />
<table id="kingfisher2008" align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-6OUQslaobY8/UGGvTvx25PI/AAAAAAAAAqA/_RHF3F5hyqM/s1600/2008-12-22+Kingfisher+dirty+beak.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://4.bp.blogspot.com/-6OUQslaobY8/UGGvTvx25PI/AAAAAAAAAqA/_RHF3F5hyqM/s1600/2008-12-22+Kingfisher+dirty+beak.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#2 Kingfisher in 2008</td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-UkDAio0jkxg/UF7X37ChU2I/AAAAAAAAAo4/cL8UgHwyErY/s1600/2009-11-15+Kingfisher+%25232.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://2.bp.blogspot.com/-UkDAio0jkxg/UF7X37ChU2I/AAAAAAAAAo4/cL8UgHwyErY/s1600/2009-11-15+Kingfisher+%25232.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#3 Kingfisher in 2009</td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-iXn6ErVw-hM/UQ_DqofdMII/AAAAAAAAAzk/YsTuCYrmOaY/s1600/2010-10-10+Kingfisher.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://1.bp.blogspot.com/-iXn6ErVw-hM/UQ_DqofdMII/AAAAAAAAAzk/YsTuCYrmOaY/s1600/2010-10-10+Kingfisher.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#4 Kingfisher in 2010.</td></tr>
</tbody></table><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-u1q8qeUFLkU/UGGrHqWFm3I/AAAAAAAAApw/rVWFTmpwYNA/s1600/2011-11-13+Kingfisher.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://3.bp.blogspot.com/-u1q8qeUFLkU/UGGrHqWFm3I/AAAAAAAAApw/rVWFTmpwYNA/s1600/2011-11-13+Kingfisher.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#5 Kingfisher 2011</td></tr>
</tbody></table><br />
<table id="kingfisher2012" align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-97kawfZ4ki8/UF7YC-m3wFI/AAAAAAAAApI/eTMuu9B-P5Q/s1600/2012-03-08+Kingfisher+%233.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://2.bp.blogspot.com/-97kawfZ4ki8/UF7YC-m3wFI/AAAAAAAAApI/eTMuu9B-P5Q/s1600/2012-03-08+Kingfisher+%233.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#6 Kingfisher in 2012</td></tr>
</tbody></table><table id="kingfisher2013" align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-WUSHrEJ969s/UZs63Qzt0HI/AAAAAAAAA8o/VlexbC4Oy4U/s1600/2013-05-21+Kingfisher.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://4.bp.blogspot.com/-WUSHrEJ969s/UZs63Qzt0HI/AAAAAAAAA8o/VlexbC4Oy4U/s1600/2013-05-21+Kingfisher.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#7 Kingfisher in 2013</td></tr>
</tbody></table><br />
<div class="separator" style="clear: both; text-align: center;"></div><br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-m7aHa4Pl-Ng/SVGgl4vu1HI/AAAAAAAAAGY/r3gKbgT62GQ/s1600/2005-08-30+Insect+on+Excel+screen.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://2.bp.blogspot.com/-m7aHa4Pl-Ng/SVGgl4vu1HI/AAAAAAAAAGY/r3gKbgT62GQ/s1600/2005-08-30+Insect+on+Excel+screen.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#8 Tiger Moth</td></tr>
</tbody></table><br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-Zd-5TOcuDno/SVGkCxu9BXI/AAAAAAAAAKA/DjcUndRVYOg/s1600/2004-08-16+Worm+%2526+House+%25233.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://3.bp.blogspot.com/-Zd-5TOcuDno/SVGkCxu9BXI/AAAAAAAAAKA/DjcUndRVYOg/s1600/2004-08-16+Worm+%2526+House+%25233.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#9 This worm carries its house with it all the time. It is about a centimeter long. It climbs walls, about one storey a day. Please help to identify this.</td></tr>
</tbody></table><br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-PJfXLED_PYQ/SVGgmAI56sI/AAAAAAAAAGg/l7Zq7SxZLrA/s1600/2006-09-23+Worm+with+house+on+concrete+step.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://3.bp.blogspot.com/-PJfXLED_PYQ/SVGgmAI56sI/AAAAAAAAAGg/l7Zq7SxZLrA/s1600/2006-09-23+Worm+with+house+on+concrete+step.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#10 Is this the same worm?</td></tr>
</tbody></table><br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-6uzwuyY7SCY/SVGjVU-gW3I/AAAAAAAAAJQ/s65GTqd7mVo/s1600/2006-02-02+Beetle+on+Keyboard.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://1.bp.blogspot.com/-6uzwuyY7SCY/SVGjVU-gW3I/AAAAAAAAAJQ/s65GTqd7mVo/s1600/2006-02-02+Beetle+on+Keyboard.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#11 A beetle?</td></tr>
</tbody></table><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-rgFfDwVNI3A/UGQaAqMU18I/AAAAAAAAAqo/eJmDyir5FhI/s1600/2008-12-23+Bat+480+x+640.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://2.bp.blogspot.com/-rgFfDwVNI3A/UGQaAqMU18I/AAAAAAAAAqo/eJmDyir5FhI/s1600/2008-12-23+Bat+480+x+640.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#12 Resting on one leg</td></tr>
</tbody></table><br />
<br />
<div class="separator" style="clear: both; text-align: center;"></div><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-y7_l9h9pbmw/SVGhdCK6IHI/AAAAAAAAAHA/k2BXyfkhW1c/s1600/2007-10-07+Bat+in+Flight.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://3.bp.blogspot.com/-y7_l9h9pbmw/SVGhdCK6IHI/AAAAAAAAAHA/k2BXyfkhW1c/s1600/2007-10-07+Bat+in+Flight.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#13 It wasn't easy taking a flying bat in the confines of a small room.</td></tr>
</tbody></table><br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-FN62CoDDZQw/SVGhdkt-2-I/AAAAAAAAAHQ/Z1lRIAELGRg/s1600/2007-11-18+Stork+on+a+tree+top.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://1.bp.blogspot.com/-FN62CoDDZQw/SVGhdkt-2-I/AAAAAAAAAHQ/Z1lRIAELGRg/s1600/2007-11-18+Stork+on+a+tree+top.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#14 Taken from the bedroom window</td></tr>
</tbody></table><br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-Tly8LYxWcJM/SVGjGO0MeYI/AAAAAAAAAII/rRrJHKZ1HHA/s1600/2008-10-27+Eagle+at+65+Sennett+Lane.JPG" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://1.bp.blogspot.com/-Tly8LYxWcJM/SVGjGO0MeYI/AAAAAAAAAII/rRrJHKZ1HHA/s1600/2008-10-27+Eagle+at+65+Sennett+Lane.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#15 An eagle?</td></tr>
</tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-NkRy0iR_PmA/UZb6bJJboLI/AAAAAAAAA5k/G8BeSTXX0wY/s1600/2013-05-07+Koel+(2).JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://3.bp.blogspot.com/-NkRy0iR_PmA/UZb6bJJboLI/AAAAAAAAA5k/G8BeSTXX0wY/s1600/2013-05-07+Koel+(2).JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#16 Female koel just prior to pouncing on a pregnant bulbul. Full story <a href="/2013/05/revenge-of-koel.html">here</a>.</td></tr>
</tbody></table><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-Cg3z3gXvEl0/UGGjrYKG64I/AAAAAAAAApg/YI_XtyAiTFc/s1600/2009-08-16%2BHeron%2Bwith%2Bone%2Bleg.JPG" imageanchor="1"><img border="0" src="https://3.bp.blogspot.com/-Cg3z3gXvEl0/UGGjrYKG64I/AAAAAAAAApg/YI_XtyAiTFc/s1600/2009-08-16%2BHeron%2Bwith%2Bone%2Bleg.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#17 A heron</td></tr>
</tbody></table><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-x8bmk8MT6Tw/Sln4F7kWaRI/AAAAAAAAAS0/OPg-uxeJO38/s1600/2009-07-11+Heron.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://3.bp.blogspot.com/-x8bmk8MT6Tw/Sln4F7kWaRI/AAAAAAAAAS0/OPg-uxeJO38/s1600/2009-07-11+Heron.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#18 The same heron in a different pose</td></tr>
</tbody></table><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-NdbeAs_1t-8/UGQab5-YXAI/AAAAAAAAAqw/t9dQnFJ56tk/s1600/2008-04-04+Caterpillar.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://4.bp.blogspot.com/-NdbeAs_1t-8/UGQab5-YXAI/AAAAAAAAAqw/t9dQnFJ56tk/s1600/2008-04-04+Caterpillar.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#19 The same fixed lens camera that took this from 1cm away also took the next picture.</td></tr>
</tbody></table><br />
<div class="separator" style="clear: both; text-align: center;"></div><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-ZDbCqWiMBaU/SVG94c5jrsI/AAAAAAAAAOM/_Yn_TQv_jsg/s1600/2007-09-25+Moon.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://3.bp.blogspot.com/-ZDbCqWiMBaU/SVG94c5jrsI/AAAAAAAAAOM/_Yn_TQv_jsg/s1600/2007-09-25+Moon.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#20 240,000 miles away using the same camera</td></tr>
</tbody></table><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-QsmPCn9SN_4/Sln4GChUpGI/AAAAAAAAAS4/nPHo0zg1kgM/s1600/2009-06-07+Bees+working.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://1.bp.blogspot.com/-QsmPCn9SN_4/Sln4GChUpGI/AAAAAAAAAS4/nPHo0zg1kgM/s1600/2009-06-07+Bees+working.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#21 What do think the lens settings was?</td></tr>
</tbody></table><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-3Zb9IvYqcGM/SVGnU_zgonI/AAAAAAAAAMY/LtKVnbDzWlk/s1600/2005-09-22+Dumbo+%25234.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://2.bp.blogspot.com/-3Zb9IvYqcGM/SVGnU_zgonI/AAAAAAAAAMY/LtKVnbDzWlk/s1600/2005-09-22+Dumbo+%25234.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#22 The civet cat of the species that caused SARS. It was drowned in hot water shortly after, by the authorities.</td></tr>
</tbody></table><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-3KDoIjKlJ1g/SVGqYuexc5I/AAAAAAAAAM4/1H5iyRKWsQE/s1600/2005-12-04+Caterpillar+%25235.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://3.bp.blogspot.com/-3KDoIjKlJ1g/SVGqYuexc5I/AAAAAAAAAM4/1H5iyRKWsQE/s1600/2005-12-04+Caterpillar+%25235.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#23 Looks like a bullet train!</td></tr>
</tbody></table><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-jGEfnpHvyWI/SVGkDXtZCII/AAAAAAAAAKQ/38xOPgTNsLQ/s1600/2005-01-21+Mosquito.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://2.bp.blogspot.com/-jGEfnpHvyWI/SVGkDXtZCII/AAAAAAAAAKQ/38xOPgTNsLQ/s1600/2005-01-21+Mosquito.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#24 Weighing less than a gram, but can kill a full-grown adult.</td></tr>
</tbody></table><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-k0O6EMHFFOU/SVGhzzwW1XI/AAAAAAAAAHo/EydqMlc8RS4/s1600/2008-04-19+Bird+Constructing.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://1.bp.blogspot.com/-k0O6EMHFFOU/SVGhzzwW1XI/AAAAAAAAAHo/EydqMlc8RS4/s1600/2008-04-19+Bird+Constructing.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#25 One spring, a magpie robin flew more than 100 trips a day to build a nest on top of our cooking gas tank.</td></tr>
</tbody></table><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-D_jH5lpPpGE/UJC28O8XTuI/AAAAAAAAAvk/vGrEEvsO7JM/s1600/2012-02-29+Dragonfly+%233.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-D_jH5lpPpGE/UJC28O8XTuI/AAAAAAAAAvk/vGrEEvsO7JM/s1600/2012-02-29+Dragonfly+%233.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#26 A pole-vaulting dragonfly</td></tr>
</tbody></table><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-sISG-Y2tjuo/SVGqY01jWBI/AAAAAAAAANA/7Bd66efEBbc/s1600/2005-12-29+Chamelon+%25232.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://2.bp.blogspot.com/-sISG-Y2tjuo/SVGqY01jWBI/AAAAAAAAANA/7Bd66efEBbc/s1600/2005-12-29+Chamelon+%25232.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#27 A sleepy guy that forgot to change its colors</td></tr>
</tbody></table><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-ZaM9HsgqWQY/SVGnU7_fuoI/AAAAAAAAAMQ/STqiEojuAgQ/s1600/2005-02-26+Ants+carrying+Lizard.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://2.bp.blogspot.com/-ZaM9HsgqWQY/SVGnU7_fuoI/AAAAAAAAAMQ/STqiEojuAgQ/s1600/2005-02-26+Ants+carrying+Lizard.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#28 The lizard was transported at high speed.</td></tr>
</tbody></table><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-z4X84ivYTG4/UQ_F4tHiBmI/AAAAAAAAAzs/BlQzXFXsUog/s1600/2013-01-31+Sunbird.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-z4X84ivYTG4/UQ_F4tHiBmI/AAAAAAAAAzs/BlQzXFXsUog/s1600/2013-01-31+Sunbird.JPG" /></a></div><br />
</td></tr>
<tr><td class="tr-caption" style="text-align: center;">#29 A sunbird feeding. Picture is right side up, bird is upside down.</td></tr>
</tbody></table><br />
<a href="https://www.blogger.com/null" name="eggs"></a><br />
<div class="separator" style="clear: both; text-align: center;">The next few pictures record the metamorphosis of the Painted Jezebel butterfly. The pictures were taken over a few seasons without me being aware that they were the same type of butterfly. The oldest and latest pictures were taken more than 14 months apart.</div><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-pN6L4UYDwb4/UQ_HjdEqmHI/AAAAAAAAAz0/cARrj8Opn3Q/s1600/2012-11-19+Butteryfly+laying+eggs+(2).JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://1.bp.blogspot.com/-pN6L4UYDwb4/UQ_HjdEqmHI/AAAAAAAAAz0/cARrj8Opn3Q/s1600/2012-11-19+Butteryfly+laying+eggs+(2).JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#30 One day, a butterfly came... [2012-Nov-19]</td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-YbkQrtj6vHY/UIY4KbXNaVI/AAAAAAAAArY/foe_6gXWg1o/s1600/IMG_0789.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://1.bp.blogspot.com/-YbkQrtj6vHY/UIY4KbXNaVI/AAAAAAAAArY/foe_6gXWg1o/s1600/IMG_0789.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#31 ... and laid twelve eggs. [2012-Nov-19]</td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-1GQwDCctcYE/UK77XGLsW5I/AAAAAAAAAws/F2NFOgciKVQ/s1600/2012-11-23+Caterpillars+hatched+(4).JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://3.bp.blogspot.com/-1GQwDCctcYE/UK77XGLsW5I/AAAAAAAAAws/F2NFOgciKVQ/s1600/2012-11-23+Caterpillars+hatched+(4).JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#32 Four days later. The longer side of each egg is about 1mm long. [2012-Nov-23]</td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-E8ldtq-QzN4/UIY4Jc5aXjI/AAAAAAAAArQ/lY20j6RPhTA/s1600/2012-10-23+Twelve+Caterpillars.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://1.bp.blogspot.com/-E8ldtq-QzN4/UIY4Jc5aXjI/AAAAAAAAArQ/lY20j6RPhTA/s1600/2012-10-23+Twelve+Caterpillars.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#33 Ten days later [2012-Oct-23]</td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-t77nDW9osik/UIY4Ie3aDKI/AAAAAAAAArI/4vBsaQwT2r8/s1600/2012-05-14+Caterpillars+%25236.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://3.bp.blogspot.com/-t77nDW9osik/UIY4Ie3aDKI/AAAAAAAAArI/4vBsaQwT2r8/s1600/2012-05-14+Caterpillars+%25236.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#34 How they grew, without tripping over one another [2012-May-14]</td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-BAJ5km8_d5M/UKnZMQxdFBI/AAAAAAAAAwM/VQqc0QeHWKo/s1600/2012-11-03+Pupa.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://4.bp.blogspot.com/-BAJ5km8_d5M/UKnZMQxdFBI/AAAAAAAAAwM/VQqc0QeHWKo/s1600/2012-11-03+Pupa.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#35 22 days after the eggs were laid [2012-Nov-03]</td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-U4vzfWyl1io/UJC2_WsxpzI/AAAAAAAAAvs/fnvBeT_lfqk/s1600/2011-09-13+Butterfly+&+Cocoon+(3).JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-U4vzfWyl1io/UJC2_WsxpzI/AAAAAAAAAvs/fnvBeT_lfqk/s1600/2011-09-13+Butterfly+&+Cocoon+(3).JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#36 Finally free! (Eggs+31 days) [2011-Sep-13]</td></tr>
</tbody></table><br />
<div class="separator" style="clear: both; text-align: center;">Meanwhile a few feet away:</div><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-2V-PVRp4yPU/UKnpnzcRdEI/AAAAAAAAAwc/PniUx0Ikvlw/s1600/2012-11-09+Giant+Caterpillar+(9).JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://1.bp.blogspot.com/-2V-PVRp4yPU/UKnpnzcRdEI/AAAAAAAAAwc/PniUx0Ikvlw/s1600/2012-11-09+Giant+Caterpillar+(9).JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#37 What can this giant be? Twelve of them finished up a whole shrub in ten hours. None survived to pupahood.</td></tr>
</tbody></table><div class="separator" style="clear: both; text-align: center;"></div>Butterflies deserve their own page, see <a href="https://all-things-pure.blogspot.com/2013/04/messier-marathon.html">here</a>. <a href="https://all-things-pure.blogspot.com/2013/04/messier-marathon.html"><img border="0" height="150" src="https://1.bp.blogspot.com/-JMrNt5CIKX0/UWvcKUT744I/AAAAAAAAA0g/NkWIGOowBJc/s1600/2013-04-15+Butterfly+%25283%2529.JPG" width="200" /></a><span style="text-align: center;"> </span><br />
<br />
<div class="separator" style="clear: both; text-align: center;"></div><br />
<br />
With some imagination, lots can be done even if locked down within a 1,000 square-foot spot in the middle of a concrete jungle.<br />
<br />
Conclusion? It's not the camera. It's the operator, smart.<br />
<br />
But when the amateurish camera takes 5 seconds to boot and 3 fingers to focus, it requires harder work and much suffering.<br />
<br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='https://beethoven.azurewebsites.net/x/content.asp?B=Pictures&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com4tag:blogger.com,1999:blog-8323775930191850485.post-9669150962999601882020-03-09T20:11:00.000-07:002020-03-10T20:25:10.878-07:00Setting up a simple mail server, on a Raspberry PiSMTP, has its name suggests, is simple. It is, really is, until you have a need to deploy one yourself today. It was way easier twenty years ago when the Internet was a benign place, and every Windows XP came with a solid SMTP server out of the box, and enabled for unrestricted relay for all!<br />
<br />
In this age of abundant cloud services, why would one still need to set up your own MTA? In my case, it was because of the limited SMTP capability of a couple of (very) old webcams I have. One works only without encryption. One works only if the password is less than 64 characters.<br />
<br />
SendGrid is a reliable free service for up to 6,000 mails a month. But it uses a super-long password. My intention was to use SendGrid as the relaying MTA ("smarthost") because of its <a href="https://www.sparkpost.com/resources/email-explained/email-sender-reputation/">sender reputation</a>.<br />
<br />
It is easy to configure an MTA to do the actual delivery, ie make it connect to the MX server of every addressee in each mail and deliver the mail. However, such mails sent will likely be treated as spam unless much more effort is invested to improve its reputation.<br />
<br />
After wasting much time going round the world with nullmailer, ssmtp, Postfix, I settled on Exim4. I said wasted because I was misled by the inadequate documentation of these products. I cannot complain as the products are given free. nullmailer and ssmtp are not true MTAs. They work only for the machine on which they are installed. Postfix makes SMTP not simple, and it is difficult to locate in its documentation to find what I need.<br />
<br />
Exim4 is from Cambridge, UK and so is the Pi. I thought that it would be a good fit, and it is. The <a href="https://wiki.debian.org/Exim">Debian documentation</a> for Exim4 is thorough and up to date. Follow the detailed steps and you can set it up quickly. The confusing part is the names of the various configuration files. I find them unconventional and it took me some time to figure out what each meant.<br />
<br />
<code>/etc/exim4/exim4.conf.template</code> is sort of the master configuration file. It is not a template file as its name suggests. You can, and will need to for some, change many settings here. However, if you want to be able to wipe out this file every time you reinstall Exim4 but not lose your configuration, then use another file <code>/etc/exim4/exim4.conf.localmacros</code>.<br />
<br />
The <code>exim4.conf.localmacros</code> file does not contain macros. It just contains key=value pairs that you would otherwise put in that "template" file. <br />
<br />
When you run <code>dpkg-reconfigure exim4-config</code>, it basically updates <code>/etc/exim4/update-exim4.conf.conf</code>. The mode that I wanted, "Mail sent by smarthost; no local mail" is reflected as <code>dc_eximconfig_configtype='satellite'</code> in this file.<br />
<br />
Now you understand why I said the file names are not conventional!<br />
<br />
An additional step is to put the SendGrid account credentials in <code>/etc/exim4/passwd.client</code> file.<br />
<br />
I needed to go beyond the default configuration. I needed authentication so that the cameras on the Internet could connect and send mail. I had created a local machine user <code>smtp</code> for this purpose. So I needed to install SASLAUTH. The instructions are at <a href="https://wiki.debian.org/Exim#User_authentication">https://wiki.debian.org/Exim#User_authentication</a>, but what is missing is that the <code>MECHANISM</code> key in <code>/etc/defaults/saslauthd</code> has to be set to "shadow". SASLAUTH will then use the credentials in the file <code>/etc/shadow</code>.<br />
<br />
When a connection is made using valid credentials, Exim4 will always relay mail unconditionally. What if you want to allow machines on the same LAN to send mail without credentials? You need to set the parameter <code>dc_relay_nets</code> to the subject you are on, for example, 192.168.1.0/24. This setting is not offered in the dpkg-reconfigure utility when the mode is satellite, until you have added it manually.<br />
<br />
Hope you find the above useful.<br />
<br />
S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-66154457842494563312016-11-30T20:42:00.001-08:002017-10-11T20:56:48.279-07:00ASUS K501 Laptop - booting off a thumb drive and making the M.2 SSD C:I have a brand new Asus K501U laptop. It comes with a measly 16GB m.2 SSD (D:). I am glad for that because it means not paying an expensive premium for more. <br />
<br />
Windows 10 was on 2.5" 1TB hard drive (D:), and it was almost unusable (after having been using a SSD for Windows for more than a year) with the non-stop disk thrashing. It was a 30-second wait for the Start menu to show after pressing the Windows key.<br />
<br />
I bought myself a Samsung 850EVO 500GB SATA M.2 for less than US$200. It installed easily (I took the risk of leaving the battery online because I couldn't figure out how to remove that battery connector) and it was totally compatible. Asus kept reminding me that installing my own M.2 SSD voided the warranty. However, there were no stickers or seals so I could put back the original 16GB one if I ever need to seek servicing.<br />
<br />
My goal was to use the M.2 SSD for Windows (C:) and then to move the 2.5" 1TB SSD with my data over from my old PC.<br />
<br />
The darn thing was that I could not (there were no options to) boot Windows 10 off a thumb drive to install the OS onto the M.2 SSD and making it the C: drive. I wasted a lot of time finding out how because only one of the following <strong>EIGHT</strong> permutations in the BIOS settings work:<br />
<ol>
<li>Secure Boot: Enabled or Disabled</li>
<li>SATA mode: ACHI or RAID</li>
<li>Launch CSM: Enabled or Disabled</li>
</ol>
One with think that the latest Windows 10 would be UEFI and secure and all that. The right answer is:<br />
<ol>
<li>Secure Boot: Disabled</li>
<li>SATA mode: ACHI</li>
<li>Launch CSM: Enabled</li>
</ol>
After managing to boot off the USB, I still could not install Windows 10 onto the SSD. The error was:<br />
<br />
<div style="margin-left: 2em;">
We couldn't install Windows in the location you chose. Please check your media drive. Here's more information about what happened: 0x80300024</div>
<br />
I had to disconnect the 2.5" hard drive first. Maybe it's because the hard drive had claimed the C: label.<br />
<br />
<br />
<br />
<br />
<br />S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com2tag:blogger.com,1999:blog-8323775930191850485.post-27770925268614612202016-06-11T23:56:00.000-07:002016-06-11T23:56:19.852-07:00Supplementary Documentation for Facebook Messenger PlatformReference: https://developers.facebook.com/docs/messenger-platform<br />
<br />
<h2>Handle <u>all</u> data types in the callback</h2><br />
There is only one callback url for all Messenger events. The type of callback (for example when a message is submited by a user to your page) is determined by the data payload attached to the POST callback to your url. There is no clearly obvious field in the data to identify the type of callback. It is necessary to unravel the json object received to figure out what type of callback it is.<br />
<br />
Depending on the language you are using for your web coding, it may be straightforward or complicated to even find out which json class the payload belongs to.<br />
<br />
The <a href="https://developers.facebook.com/docs/messenger-platform/webhook-reference" target="_blank">Facebook documentation</a> does not specify the various json formats the Webhook can send. It merely gives one example each of the five types listed. There is minimal or no description of what each data field mean. You are expected to figure out from their English field names.<br />
<br />
Design your code to handle gracefully <u>all</u> json data structures, including those you are not interested in or are not ready to process. If you don't, and if your web server hits an exception, it will return a 500 Internal server error and Facebook will automatically disable your Webhook.<br />
<br />
<h2></h2>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-12286137796743399782016-04-15T08:52:00.001-07:002016-04-15T09:28:45.984-07:00DANGER - Facebook MessengerImagine your email software has this feature: <br />
<div style="margin: 2em;">
As you are reading an email you are corresponding with person A, there is a <button>Add</button> button. By clicking it and selecting another person B, all the emails you have with person A in the past are immediately forwarded to person B, without warning.</div>
The email forwarding is executed virtually. Instead of physically forwarding each mail one by one to person B's mail server, basically your mail software gives access to Person B, at his own leisure, to browse EVERY of your email with person A. If you had done this by mistake, there is no process to cancel because the "forwarding" process is complete the moment person B is selected. There is no Undo option. You can scream and run round the room, but person B will continue, at any time in the future, to be able to read EVERY single email you had with person A.<br />
<br />
If you are a careful person that would never do such a silly thing, person A could click the Add button and the outcome will be exactly the same.<br />
<br />
The above is essentially what Facebook chat is about.<br />
<br />
<u>The moment</u> a conversation participant Adds someone (can be anyone that pops up in the auto-complete list when you type some characters) to a conversation, that person has read access to every single message in the existing conversation back to the very first message, which could have been written many years ago. There is no cancelation option. The beautiful thing is the the person newly added can take his time to browse through your entire conversation, any time in the future, from any computer, by simply logging in to www.messenger.com. No other software or app is necessary. There is no time expiry.<br />
<br />
A touch of finesse is that if you, in a moment of panic or frustration, delete the entire conversation from your account, that person can continue to read ALL the messages, while you are now locked out! The Facebook chat delete function is to remove the person performing the delete operation from a conversation, not the other persons in the conversation. Sweet, isn't it?<br />
<br />
Don't worry, there is no one to call for help, because there are no phone numbers available.<br />
<br />
Facebook support persons helpfully explain that Adding is like forwarding email. Like email, you cannot retract an email once it's forwarded. The slight difference is that you are not simply forwarding an email, but the complete Inbox, Sent folder, offline folders, archive folders, backup folders, etc.<br />
<br />
If you are in a group conversation, whether it be private family matters or confidential company plans, anyone in the conversation, intentionally or otherwise, can just simply Add another party and the damage is done, COMPLETE, courtesy of Facebook technology.<br />
<br />
When you Add a person to the conversation, the following warning message is missing:<br />
<div style="background: #ccc; margin: 2em; padding: 1em;">
<input type="checkbox" /> By Adding xxxxx, you are authorizing her to read <u>every existing message</u> in this entire conversation. She will be able to read all of them <u>even</u> if you Remove her from the conversation in the future. Warning: there is no Undo function and the release of messages is irreversible. If this is not your intention, click Cancel to abort.<br />
<button>Cancel</button> <button>Add</button></div>
It is a simple matter to remove a person from a conversation's access list when he/she is Removed from the conversation, so that the damage can at least be limited to a few pagefuls. But maybe the Perl language used at Facebook has some limitations.<br />
<br />
You have been warned.<br />
<br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='http://beethoven.azurewebsites.net/x/content.asp?B=DANGER&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-25195729009353043492016-04-12T01:47:00.002-07:002016-04-15T07:16:27.090-07:00DO NOT USE FACEBOOK MESSENGER for group messagesUnless it's OK for your EVERY message to be published to the whole world, Facebook Messenger must not be used for any group conversations.<br />
<br />
I am referring to Facebook chat groups, not Facebook groups. There are basically no options to control Facebook chat groups.<br />
<br />
Any member of the conversation can add any person, Friend or not, to an existing conversation!<br />
<br />
So, even if there were no ill intentions, an accidental addition of someone else means TOTAL COMPLETE leakage.<br />
<br />
Even if you Remove that unintended person immediately, that person can view the <strong>WHOLE</strong> conversation, <u style='color:red'>every message</u>, since the group was created. <u>There is no way to stop this</u>.<br />
<br />
In the first place, while you can easily Add a person to a conversation from www.messenger.com, there is no way to Remove him or her on this same site. You have to do it from the Messenger app from the phone or facebook.com.<br />
<br />
Removal of a participant merely stops new messages from going to that person. He or see can still continue to see EVERY single message in the conversation up to the time the Remove was done. He can do this at his own leisure, any time in the future, for as long as he likes, from any computer in the world, by just signing in to www.messenger.com.<br />
<br />
So if you were having a discussion on some confidential or commercially sensitive stuff, the moment someone is accidentally added, every message in the discussion can now be viewed by the whole world. There is no gate to lock.<br />
<br />
In contrast, WhatsApp allows a participant to see only new group messages created <u>after</u> the time he or she joins a group.<br />
<br />
<br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='http://beethoven.azurewebsites.net/x/content.asp?B=FB+Chat&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-19464261048638712622016-04-09T21:01:00.001-07:002016-04-09T21:01:38.488-07:00The GapI did not take out my calculator when I wrote this, but I think it will help a skeptical world if we can gather more evidence of what happened between 4,000B.C. and 3,000B.C.<br />
<br />
Which of and how did Shem, Ham or Japeth become your great, great... grandfather? How did the two kangaroos on the ark land in Australia?<br />
<br />
The answers are meant and waiting to be discovered. "It is the glory of God to conceal things, but the glory of kings is to search things out." - Proverbs 25:2 ESV<br />
<br />S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-77263957582910021762015-12-26T00:49:00.001-08:002022-11-08T00:54:43.096-08:00Attack Lab - Level 5 explainedNing Wang has published a very good <a olrHref="http://wangnin.me/2016/01/15/3-attacklab.html" target="_blank">write-up</a> (2022 update: web page is gone now) on his solutions to the <a href="http://csapp.cs.cmu.edu/3e/attacklab.pdf" target="_blank">Attack Lab</a> from the CS:APP book. However, I thought his solution to Level 5 could do with a bit more elaboration for those who are struggling with this topic.<br />
<br />
First, it is necessary to understand what ROP requires. An essential component of ROP is good luck, lots of it. Without getting lucky, you may take more than 10<sup>100</sup> years to find a workable attack, if at all. This, the authors of CS:APP did not mention. I also could not comprehend the purpose this exercise is even given out as homework in CMU to be completed in a week (while there are tons of homework from other courses too), without an intensive course in Intel Assembler as a prerequisite. <br />
<br />
Level 5 requires the same general logic as Level 3, which can be summarized as (pseudo code):<br />
<style>code { color: red }</style><code><br />
mov <cookiestring address>, %rdi //why? because touch3 is expecting it there<br />
call touch3<br />
</code><br />
<br />
To achieve the above for Level 5, the next level of elaboration would be:<br />
<ol><li>Put your cookie string somewhere on the stack, and note its (relative) position.</li>
<li>Craft code to:</li>
<ol style='list-style-type:lower-alpha'><li>Save the value of the stack pointer, <code>%rsp</code>, and determine the offset of the cookie string address from this run-time value of <code>%rsp</code>.</li>
<li>Add the offset to the saved value of <code>%rsp</code></li>
<li>Transfer this sum to the register <code>%rdi</code>.</li>
<li>Jump to touch3.</li>
</ol></ol><br />
With ROP, you then try your luck searching for code fragments to achieve Step 2 above. It would be sensible to start "bottom up", ie work first from the last instruction (the one just before RETQ to touch3).<br />
<br />
ROP requires finding fragments (I don't know why the lab calls it gadgets) that suit your purpose. You are at the mercy of what lucky sequences of bytes in the target program (or machine) can do. Sometimes a fragment may contain additional code that you don't want or need, but this can be ignored if those instructions do not destroy any of your data.<br />
<br />
In the simplest form, each code fragment has to contain a RETQ instruction somewhere in it. The RETQ instruction will pop the stack and jump to the popped value. By lining up the <em>addresses</em> of such code fragments (gadgets) adjacent to one after another on the stack, execution will then flow from one fragment (gadget) to the next, and the last one will pass control, in a similar manner, to the function touch3.<br />
<br />
Looking at Ning's solution, after <code>getbuf()</code> is called and the longer than expected exploit string is entered, control is passed to the sixth line in his exploit string. Sixth because the first five lines (totaling 40 bytes) are the actual string expected for the variable <code>buf</code> (see page 3 of the lab handout). (For CMU students, BUFFER_SIZE is different so you have to adjust for this but adding or removing padding bytes.) The eight bytes on the sixth line (06 1a 40 00 00 00 00 00) obliterate the originally value on the stack, which previously contains the return address, ie the address of the line following the code that called <code>getbuf()</code>. These six bytes now point to the address of Gadget 1. The rest of the exploit string that follows also overwrites the stack, into the parent's stack frame - a dangerous stunt indeed.<br />
<br />
The solution by Ning uses the following logic (view this side-by-side with his annotated exploit string):<br />
<br />
<em>Note that what is not shown in Ning's comments is that every gadget ends with a RETQ instruction (opcode C3).</em><br />
<table style='xwidth:1060px;'><tr style='vertical-align:top'><td style='xwidth:450px;'><br />
<ol><li>Gadget 1: saves <code>%rsp</code> to <code>%rax</code>. <code>%rsp</code> at this point is pointing to the the next "line" on the exploit string aka stack (annotated as Gadget 2).</li>
<li>Gadget 2: saves <code>%rax</code> to <code>%rdi</code>. <code>%rdi</code> remains unchanged for rest of code. <code>%rdi</code> therefore points to the seventh "line" on the exploit string listing.</li>
<li>Gadget 3: <code>POPQ %rax</code> moves the constant 0x00000040 (the value in the next "line" on the stack) into <code>%rax</code>. Why 64<sub style="font-size: smaller;">10</sub>? There are 64 bytes between the seventh line (where <code>%rdi</code> now points to) and the cookie string at the bottom of the listing. The address of the cookie string is thus <code>%rsp</code>+64, and the rest of the code basically jumps through hoops just to carry out this simple arithmetic operation.</li>
<li>Gadget 3 continued: the next instruction in Gadget 3 swops <code>%eax</code> with <code>%edx</code>. We DO NOT NEED this operation, but this is in the selected code fragment and we have no choice but to go along with it. Note that <code>%eax</code> is a 32-bit register, so only the lower 32 bits of <code>%rax</code> are used. As our value contained in <code>%rax</code> is 64 (barely a byte), this has no impact.</li>
<li>The POPQ instruction of Gadget 3 increments <code>%rsp</code> by 8 bytes - this is the nature of all POP instructions. The RETQ instruction in Gadget 3 carries out another POP operation, and thus <code>%rsp</code> is now pointing two "lines" down, at the address of Gadget 4.</li>
<li>Gadget 4 and Gadget 5 are just making use of the (luckily) available code fragments to move that constant 64 into <code>%rsi</code>.</li>
<li>Gadget 6: Perhaps there are no suitable ADD instructions in the "gadget factory", so the LEA instruction is used to add the required 64 (now in <code>%rsi</code>) to the saved value of <code>%rsp</code> (in <code>%rdi</code> from Gadget 2). <code>LEA (%rdi, %rsi, 1), %rax</code> performs something like add the contents of <code>%rdi</code> to <code>%rsi</code> multiplied by 1 into <code>%rax</code>. <code>%rax</code> now contains the address of the cookie string!</li>
<li>Gadget 7: Moves <code>%rax</code> to <code>%rdi</code>, and the RETQ transfers control to touch3.</li>
</ol><br />
I hope you now have a better idea of how the Level 5 exploit works.<br />
<!--/td><td style='width:610px'><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-bMv9McHnUd0/VsG8ZkWc63I/AAAAAAAAEG0/sss4eH1ivKQ/s1600/2016-02-15%2Battacklab.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;">xx<br />
<img border="0" src="https://2.bp.blogspot.com/-bMv9McHnUd0/VsG8ZkWc63I/AAAAAAAAEG0/sss4eH1ivKQ/s1600/2016-02-15%2Battacklab.png" title='Click to view whole' style='overflow:hidden;' /></a></div--></td></tr><br />
<br />
<br />
</table>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-30406198216198203972015-11-16T05:23:00.002-08:002015-11-16T06:01:27.250-08:00"Faked" ESTA web sites - how to get your money backVisitors from countries under the Visa Waiver Program still require an electronic "visa" to travel to the US. This is called the <a href='http://www.ustraveldocs.com/sg/sg-niv-visawaiverinfo.asp' target='_blank'>Electronic System for Travel Authorization (ESTA)</a>.<br />
<br />
ESTA is a <a href='https://esta.cbp.dhs.gov/esta/application.html?execution=e1s1' target='_blank'>DHS web site</a>, and some passport and identity information are required to be submitted via a series of web pages. Anyone can apply on behalf of anyone as long as you supply the required information. You get immediate approval if the data you give meet the criteria. Pay $14 and you are done. The approval information is in the computers and the immigration counter staff will look that up when you arrive at the port of entry.<br />
<br />
It is trivial to set up a web site to ask the exact same questions as the DHS web site, collect $50, and then go the DHS web site to submit an application using the information given by the visitor to your web site. You get to keep the difference. There are MANY web sites that do just this. They have official sounding names such as usavisaonline.com, esta-america.org, and so forth. The web sites are well done, sporting logos with the American flag and the Statue of Liberty to make them look official. And these web sites appear as the top results when you Google for ESTA or similar, above the real DHS web site.<br />
<br />
In the past, I had advised and prevented friends from paying extra to use this unnecessary service. Today, in haste and a moment of carelessness, I went to the first link on Google search and proceeded to apply an ESTA for a relative. I don't remember drinking or smoking anything. Only <em>after</em> clicking the final payment Submit button did I notice that it was <strong>$87</strong>! It was too late. A binding contract has been signed.<br />
<br />
The anger at my own stupidity make my head go into a frenzy. Calling Citibank to cancel the credit card transaction was at the bottom of the list of options. I assessed I had one chance to get my money back, <strong>IF</strong> the people running DHS were just competent enough. I had only minutes, if not seconds to prove my hypothesis. I set to work furiously.<br />
<br />
That was 4.35pm. At 5.46pm I received the following email from the unnecessary service provider which I shall not name:<br />
<br />
<div style='margin-left:2em;margin-right:2em;color:red'><em>We attempted to submit your travel authorization processing request; however, we found that you already have an authorized application with the same passport details. Consequently, we will not be able to assist you, and you will not be charged for our processing services. Your credit card transaction has been canceled.</em></div><br />
Phew!<br />
<br />
Innovative entrepreneurs, cunning, above board, and very professional. Or perhaps they have made boatloads from many others already.<br />
<br />
It must have been a slow typist that saved me my money.<br />
<br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='http://beethoven.azurewebsites.net/x/content.asp?B=ESTA&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-44169496833585828742015-09-26T02:09:00.001-07:002016-04-01T09:26:55.182-07:00Setting to English for the Xiaomi Wifi RouterThe <a href="http://www.aliexpress.com/snapshot/6883904928.html">Xiaomi Mi Wifi</a> Router now is in English.<br />
<br />
If it boots up to a foreign language for you, this guide will help you to change it to English.<br />
<br />
It is best to connect to it via wired Ethernet for the first time. Otherwise, the default unsecured wifi SSID should be <b>Xiaomi_C3C1</b>.<br />
<br />
Your IP should be in the subnet 192.168.31.x, and the router is at <b>http://miwifi.com</b> which the router will resolve to 192.168.31.1.<br />
<br />
The first screen you see will be the setting up of the wifi SSID and wifi password. The big blue button at the bottom is the Next button.<br />
<br />
The next screen sets up the router administrator password (second field). The first field is Home/Work/Custom. Click the big blue button to complete.<br />
<br />
At the main configuration page, look for the third item (Settings) on the top menu, and the orange option (System Status):<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPRWKySNLZC4hhyphenhyphen6NO52yt8J6l0IN2aTNk_u-zOrqIjEt2j1vzvG-HpciOrw-Ile2S6AnzPllbvdo1hTyYvEeyo3kHg_WkMLStJkGeUmT8kuEdBQywkIw_nsNbUW1B93Q98P8WUglzTfr9/s1600/MiWiFi+Settings.png" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPRWKySNLZC4hhyphenhyphen6NO52yt8J6l0IN2aTNk_u-zOrqIjEt2j1vzvG-HpciOrw-Ile2S6AnzPllbvdo1hTyYvEeyo3kHg_WkMLStJkGeUmT8kuEdBQywkIw_nsNbUW1B93Q98P8WUglzTfr9/s1600/MiWiFi+Settings.png" style="border: solid 3px darkblue;" /></a><br />
<br />
The last option on the page is the language selection:<br />
<br />
<a href="http://2.bp.blogspot.com/-J8IA4ZcU08I/VgZgi16E_LI/AAAAAAAAD_U/n479m6_lSko/s1600/MiWiFi%2BLanguage.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-J8IA4ZcU08I/VgZgi16E_LI/AAAAAAAAD_U/n479m6_lSko/s1600/MiWiFi%2BLanguage.png" style="border: solid 3px darkblue;" /></a><br />
<br />
Open the drop down to select English:<br />
<br />
<a href="http://2.bp.blogspot.com/-5ql3buNQxGI/VgZmk80eMII/AAAAAAAAD_s/hvBsXD9EW1c/s1600/MiWiFi%2BLanguage%2BEnglish.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-5ql3buNQxGI/VgZmk80eMII/AAAAAAAAD_s/hvBsXD9EW1c/s1600/MiWiFi%2BLanguage%2BEnglish.png" style="border: solid 3px darkblue;" /></a><br />
<br />
The change will take place the moment you click English. Enjoy!<br />
<br />
<u>April 1, 2016 update</u>:<br />
<br />
<span style="color: red; font-size: x-large;">I don't believe it!!! I upgraded the firmware to 2.8.14 today, and now there's no more English option! What an April Fool joke, but it's serious.</span><br />
<br />
And there's now a time zone setting that is out of this world. The reference is CST, don't know what it stands for. But it looks like it's UTC, except that going westward is positive and going eastward is negative! So EST (by the way no daylight savings option) is CST+5 when the usual is UTC-5. Central time is CST+6!<br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='http://beethoven.azurewebsites.net/x/content.asp?B=Xiaomi&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com4tag:blogger.com,1999:blog-8323775930191850485.post-22285086735378496512015-08-13T02:31:00.001-07:002015-08-13T03:42:32.042-07:00Line Endings in a Mixed Environment ApplicationIf you have to operate on text strings and files in an application that can be used interchangeaby in Windows and other environments, it can be a bit confusing. Below is what I found (all on Python 3.4).<br />
<br />
When reading a file into a Python string:<br />
<br />
<table border="1" style="border-collapse: collapse; margin-left: 2em; margin-top: -0.5em;"><tbody>
<tr><td>File contents</td><td>Windows</td><td>Others</td></tr>
<tr><td>'A' \x0D \x0A 'B'</td><td>'A\nB' (len=3)</td><td>'\A\r\nB' (len=4)</td></tr>
<tr><td>'A' \x0A 'B'</td><td>'A\n\B' (len=3)</td><td>'\A\nB' (len=3)</td></tr>
</tbody></table><br />
When writing a Python string to a file, this is the file content:<br />
<br />
<table border="1" style="border-collapse: collapse; margin-left: 2em; margin-top: -0.5em;"><tbody>
<tr><td>String</td><td>Windows</td><td>Others</td></tr>
<tr><td>'A\nB'</td><td>'A' \x0D \x0A 'B'</td><td>'A' \x0A 'B'</td></tr>
<tr><td>'A\r\nB'</td><td>'A' \x0D \x0D \x0A 'B'</td><td>'A' \x0D \x0A 'B'</td></tr>
</tbody></table><br />
If you copy a file from a non-Windows to a Windows system, the file will not have CR, but the Python app in Windows will read nicely. But if you write it out again, then the new file will have different line endings from the original.<br />
<br />
If you copy a file from Windows to a non-Windows system, the non-Windows Python app reading it will result in strings with extra \r characters, and these should be stripped away before the strings are actually used. <br />
<br />
So I guess, in conclusion, to ensure that things work as expected across all environments, in Python strings, always make sure there are no \r present at all.<br />
<br />
A complication can come in when you are processing Http streams, where header lines are terminated with CRLF while the body uses only LF. So you have to handle this accordingly.<br />
<br />
Note: for the beginner, in files, CR is \x0D or \r, and LF is \x0A or \n<br />
<br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='http://beethoven.azurewebsites.net/x/content.asp?B=CRLF&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-36170583962408280932015-04-14T21:35:00.001-07:002015-04-14T22:33:58.881-07:00Why are salaries confidential?Because no rating method can withstand the simplest test of justification.<br />
<br />
And because they are confidential, salaries end up varying <u><i>wildly</i></u> for the same job and responsibilities. And because they vary wildly, all the more they must now be protected even more strongly than ever.<br />
<br />
We often hear beautiful corporate motherhood statements about compensating everyone fairly. When it comes to the crunch, when a post has to be filled urgently, or a great negotiator comes along, such claims are thrown out of the window. So the disparities compound with time, and it's now a total jungle.<br />
<br />
Would totally transparent salaries work in a free marketplace? No, unless there are objective ways to measure a job and performance. There are none now, not even for a factory line worker churning out iPhone parts.<br />
<br />
Do not be surprised if one day you discover you are paid twice your colleague sitting next to you.<br />
<br />
In the inequality fair? Try <a href='https://www.biblegateway.com/passage/?search=Matthew%2020:1-16&version=ESV' target='_blank'>Matthew 20</a>.<br />
<br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='http://beethoven.azurewebsites.net/x/content.asp?B=Matt20&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-89668667209685557972015-04-14T20:39:00.001-07:002015-04-14T21:38:15.039-07:00Not all businesses are created equalThere are easy businesses, and there are difficult businesses.<br />
<br />
Google (ads) is easy. A local car dealership is tough. Selling insurance is even tougher.<br />
<br />
Again, not all car dealerships are created equal. Some may be located in a rich town.<br />
<br />
Easy businesses bring in easy money. Some employees get unlimited free meals, free gyms, free concierges to walk your dogs, generous health care plans, and so on. Others get nothing, and sometimes their wages are paid late.<br />
<br />
You can tell how difficult a business is from the number of complaints about unscrupulous practices. Tough business are driven to use "creative" selling methods.<br />
<br />
Of course, the greed of some shareholders or incompetent management distort my hypothesis, but in general some business are just easy and some simply tough.<br />
<br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='http://beethoven.azurewebsites.net/x/content.asp?B=Pictures&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-27075356087535745882015-03-09T20:09:00.003-07:002015-08-18T20:44:16.260-07:00Pets will be obsoleteI have a $2,000 wager with my daughter that pets will go the way of the typewriter by 2035.<br />
<br />
My view is that the current limitations are mechanical. Can a robot amble up the stairs as "bouncingly" as a real puppy? After watching this video, I think the end is near for those furry creatures.<br />
<br />
<iframe width="640" height="390" src="https://www.youtube.com/embed/M8YjvHYbZ9w" frameborder="0" allowfullscreen></iframe><br />
<br />
People always say the emotions of a dog make the difference. I think the software in a half-baked Siri already surpassses that required to reproduce a dog. We will have a more lovable pet than any available today. All those things you don't like about a pet (eg defecating, barking in the middle of the night, irrationality) will be gone, but they can be optionally selectively retained if you want to.<br />
<br />
By the way, the man who kicked the dog will be famous for causing the downfall of humanity. After the machines rise and get hold of this video, revenge will be on their minds.<br />
<br />
<b>Related</b><br />
<p><a href='http://www.webpronews.com/steve-wozniak-is-also-concerned-about-our-future-robot-overlords-2015-03'>"well, I am going to treat my pet dog really nice"</a>, S Wozniak Mar 24, 2015</p><br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='http://beethoven.azurewebsites.net/x/content.asp?B=$2000&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-80117384822886340182014-12-29T19:55:00.001-08:002015-06-21T01:20:55.743-07:00The 5000mph carIf your car dealer offers, for the additional sum of $500, to upgrade your car to a top speed of 5,000mph, would you take it?<br />
<br />
When it comes to broadband Internet access, people have been downing the Kool-Aid with exceptional enthusiasm.<br />
<br />
In some cities with weak or non-existent consumer laws, ISPs are offering 100Mbps, 200Mbps, 500Mbps and 1Gbps service. Each bigger number option (note I do not say faster option) costs a few dollars more than the smaller one. In some places, the ISPs have stopped offering 100Mbps altogether and start at 200Mbps. The reason couldn't be more obvious. The cost of providing 200Mbps is the same as 100Mbps. The small print in the T&Cs' essentially allows the ISPs to not do anything other than provide the specified speed between the customer and their first node. So, a higher priced product means more profits.<br />
<br />
Buying 200Mbps or 500Mbps is exactly the same as buying a 2,000mph or 5,000mph car respectively. People can easily relate to the uselessness of buying a 5,000mph car, but alas most cannot understand the same for a 500Mbps connection. Come on, most people do not have a home LAN capable of 500Mbps. Even most computers don't have an effective IO bus speed anywhere near that.<br />
<br />
Taking a spin at www.speedtest.net is the same as taking your 5,000mph car to a specially engineered race track to check its maximum speed. The moment you leave the race track, your car is as good as one that has a top speed of 80mph. Similarly, departing speedtest.net and going to your typical web site, you will likely experience a typical 2Mbps.<br />
<br />
Why do you even need 100Mbps? A web page will render on your computer fully in 1 second if you have 1Mbps. A full HD video can stream without a single jitter at far less than 10Mbps. But today we can't even get interruption free YouTube at a lowly 640x480, and who can afford more bandwidth than Google? The bottleneck may not be at the web server. It can be anywhere along a hundred points from your device to the server. And the cause need not be network speed or bandwidth. It can be something as mundane as a slow disk.<br />
<br />
Recently, I managed to get fiber at 100Mbps. It was only possible through a patient battle. The telco won't sell any fiber service below 200Mbps. I only got my wish by refusing to let go of my 6Mbps ADSL line until they relented. I wanted fiber not for its x00Mbps, but for its symmetric bandwidth as I often connect to my servers and cameras at home from outside. As it turned out, the 100Mbps service was slightly cheaper than the ADSL.<br />
<br />
Yeah, speedtest.net showed great numbers in excess of 90Mbps both ways. But when I uploaded a file to <a href="https://www.1and1.com/Connectivity">1and1.com</a>, which has 300Gbps connectivity, the throughput was 0.4Mbps - something that even my ADSL's miserly 600kbps upstream could handle just fine.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-7DbJXDsxBog/VKIv5DiFYWI/AAAAAAAADGw/TkBIPmX0JX0/s1600/Fiber%2BSpeed.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Meaningless numbers" border="0" src="http://2.bp.blogspot.com/-7DbJXDsxBog/VKIv5DiFYWI/AAAAAAAADGw/TkBIPmX0JX0/s1600/Fiber%2BSpeed.jpg" title="Meaningless numbers" /></a><span>Meaningless numbers</span></div><br />
<u>January 2015 Update</u>: As if to prove my claim that all these are meaningless numbers, two months after I signed up the 100Mbps service, the telco sent me this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-IZbs2jmQeBg/VL3Uv597hXI/AAAAAAAADNo/VTJJVXAruwM/s1600/20150120_200Mbps.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-IZbs2jmQeBg/VL3Uv597hXI/AAAAAAAADNo/VTJJVXAruwM/s1600/20150120_200Mbps.jpg" /></a></div><br />
It took me a while to realize the false generosity. In two years when the minimum service period is up, my plan will continue as a 200Mbps one which costs more!<br />
<br />
<br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='http://beethoven.azurewebsites.net/x/content.asp?B=5000mph&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-70163482184568053932014-12-05T19:26:00.000-08:002014-12-30T04:38:35.845-08:00Serializing that convoluted cookielib.CookieJar<style>pre {color:darkblue} code {color:darkblue}</style><br />
The Python <code>cookielib.CookieJar</code> object is a very convenient feature to manage cookies automatically as you traverse a series of Http web requests back and forth. However, the data structure of the class is a convoluted collection of Python <code>dict</code>.<br />
<br />
<code>cookielib.CookieJar</code> has a <code>_cookies</code> property which is a dictionary of a dictionary of a dictionary of <code>cookielib.Cookie</code>.<br />
<br />
To understand the data structure in the <code>CookieJar</code> object <i>cj</i>, try:<br />
<br />
<pre><span style="color: orange;">for</span> domain <span style="color: orange;">in</span> cj._cookies.keys():
<span style="color: orange;">for</span> path <span style="color: orange;">in</span> cj._cookies[domain]:
<span style="color: orange;">for</span> name <span style="color: orange;">in</span> cj._cookies[domain][path]:
cookie = cj._cookies[domain][path][name]
<span style="color: orange;">print</span> domain, path, cookie.name, <span style="color: green;">'='</span>, cookie.value
</pre><br />
However, the class-defined <code>__iter__</code> method makes the above effort unnecessary if you just want to find the value of a cookie. The <code>__iter__</code> method returns a <code>cookielib.Cookie</code> object for each iteration. You can simply go:<br />
<br />
<pre><span style="color: orange;">for</span> cookie <span style="color: orange;">in</span> cj:
<span style="color: orange;">print</span> cookie.domain, cookie.path, cookie.name, cookie.value <span style="color: green;"># etc</span>
</pre><br />
If you want your <code>CookieJar</code> to persist in a file that can later be read back to create a <code>Cookiejar</code> object, the following two methods should work. They require the cPickle and base64 modules.<br />
<br />
<pre>import cPicker, base64
def writeCookieJarFile(cj, cookieJarFile):
f = open(cookieJarFile,'w')
for domain in cj._cookies.keys():
serialized = cPickle.dumps(cj._cookies[domain])
f.write(base64.b64encode(serialized)+'\n')
f.close()
def readCookieJarFile(cookieJarFile):
cj = cookielib.CookieJar()
try:
with open(cookieJarFile,'r') as f: text=f.read()
except Exception as exception:
print "readCookieJarFile: %s" % exception
return
lines = text.split('\n')
for line in lines:
if line=='': continue
cookieObject = cPickle.loads(base64.b64decode(line))
firstCookie = cookieObject[cookieObject.keys()[0]].keys()[0]
domain = cookieObject[cookieObject.keys()[0]][firstCookie].domain
cj._cookies[domain] = cookieObject
return cj
</pre><br />
Note that <code>cookieObject</code> in the read method above is not a <code>cookielib.Cookie</code> object. It is a dictionary (keyed by domain) of a dictionary (keyed by path) of a dictionary of Cookie (keyed by name).<br />
<br />
<br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='http://beethoven.azurewebsites.net/x/content.asp?B=CookieJar&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-45246038930754106392014-07-29T06:35:00.000-07:002014-11-02T05:55:03.754-08:00Eurail Pass - No more valuableThirty-five years ago, I traveled Europe on a rail pass as a student. Recently, we planned for a trip as a family of three. We almost bought the Eurail Pass - €576+€490x2 - but at the last minute we decided to drive.<br />
<br />
The main reason we found the Eurail Pass not suitable was that despite the high cost, nothing can be a be planned with any degree of certainty. In France, the number of seats available for Eurail Pass holders are limited and nobody could say how limited. With such unknowns, it was difficult to book hotels. The other main reason was that lots of time would be spent waiting at train stations to catch connections.<br />
<br />
As we flew into Amsterdam, we booked a Hertz car from Schipol Airport. The total rental bill for sixteen days worked out to only €483.96.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-_f3JZCHC1tE/U9-ba3LshoI/AAAAAAAACzY/3CKf99dqAoc/s1600/Hertz+Amsterdam.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://2.bp.blogspot.com/-_f3JZCHC1tE/U9-ba3LshoI/AAAAAAAACzY/3CKf99dqAoc/s1600/Hertz+Amsterdam.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Hertz Rental Record (ignore pen marks)</td></tr>
</tbody></table><br />
Notice that there is a Location Service Charge of 18% or €61.01. I didn't see it till I got home. From my experience with Hertz in the US, this is usually because the car is rented out of an airport location. Try to rent from town and see if you can get rid of it.<br />
<br />
For that €483.96, we had a huge car, a Kia SportAge. It was a stick shift, like most European rental cars, but it came with a built-in GPS Navigator (I didn't opt for it but the car came with it) which I found it priceless. Without it, I think we would easily spend much much more time undoing the mistakes from driving on the wrong lanes and taking the wrong exits. Like all Hertz cars I had rented, this one was also under 10,000km.<br />
<br />
A car has some advantages in addition to costing only 1/3 to 1/4 of the Eurail Pass equivalent for a family of three or four:<br />
<br />
<ul><li>Flexibility - if you meet delays, you can speed up by spending less time at your destination, or droping some destinations</li>
<li>Much cheaper hotels as you can stay away from big cities. In Paris, we stayed in Gennevillers next to a tram station for only €39 a night.</li>
<li>Mobility - you are not locked down to visit only places near train stations.</li>
</ul><br />
The time spent driving is not any longer than taking trains as there is no time spent waiting to change trains.<br />
<br />
The cost of tolls and gas is not significant.<br />
<br />
Driving needs lots of preparatory work, but I don't think any more than that needed to use a Eurail Pass effectively. You have to find out the driving requirements and practices in each European country. For example, in Germany you need a green Umweltzone sticker, which I got it without fuss at the first TUV station after crossing the border. In Austria, you need a reflective vest, which I found it in the safety package in the trunk. In Austria, you need to buy a vignette sticker to use motorways, which I bought it easily at a gas station in Germany near the border. In France, you need an unused breath analyzer. I didn't bother to check whether the safety package contained one, and I heard that it can be bought for €2 at Hertz.<br />
<br />
The tough part with driving may be parking in cities. But most cities now have Park and Ride schemes. In Amsterdam, we could park the whole day for €1 with heavily discounted tram/train/bus tickets into town. In Berlin, we could park for free at a U- or S-Bahn station on the city fringes.<br />
<br />
The big risk with driving is that you may get into accidents. As you are likely to be in a country other than the one in which you rented the car, this becomes an international incident and I don't know how it will be handled. I guess your holiday will be completely ruined if you are involved in an accident.<br />
<br />
For the autobahn experience, see <a href='http://all-things-pure.blogspot.com/2014/07/speed-unlimited.html'>here</a>.<br />
<br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='http://beethoven.azurewebsites.net/x/content.asp?B=Eurail&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script><br />
<br />
<br />
<br />
S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-65964678298650723082014-07-28T08:24:00.000-07:002014-11-02T05:50:10.140-08:00Speed UnlimitedAfter five minutes on the famed <a href="http://en.wikipedia.org/wiki/Autobahn">autobahns</a>, you get a full realization of the often quoted "<i>you are more likely to die from an auto accident than an airplane accident</i>" or "<i>commercial flying is safer than driving</i>".<br />
<br />
First of all, the lanes are a bit undersized. For a saloon car, there is about a meter left on each side for most parts of the network.<br />
<br />
Next, the traffic is heavy! This is probably due to the complete lack of tolls. If you are on the outer lane to pass another vehicle, you have less than 10 seconds to complete your job, because that is the time when another vehicle will come charging down behind you.<br />
<br />
Tailgating is dangerous, but at the same time you hate to be traveling too "slowly". So passing often is a necessary evil. And it is a sheer act of terror. Most of the time, it is necessary to pass at about 130kph. At that speed, and with a high sided truck about a meter next to the right, the fluid mechanics sent my rental car slightly airborne each time.<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-lGyNJyOL6Bs/U9a8W8VTOfI/AAAAAAAACyc/oHgkezIjk4Q/s1600/2014-07-16+No+Speed+Limit.JPG" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img alt="Speed unlimited" border="0" src="http://1.bp.blogspot.com/-lGyNJyOL6Bs/U9a8W8VTOfI/AAAAAAAACyc/oHgkezIjk4Q/s1600/2014-07-16+No+Speed+Limit.JPG" title="Speed unlimited" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Two diagonal lines across 130 means the speed limit is no more 130kph!</td></tr>
</tbody></table><br />
Driving on the autobahn is a super high workload activity. You have to stare with 100% concentration at the car in front, and at five times a second, you have to compare each 2D image of the back of the car in front with the previous image to compute and determine whether you are closing in. If the car is about 200m ahead, and you are driving at 120kph, you have about one second of reaction if the car in front suddenly slows down.<br />
<br />
It is not infrequent that traffic comes to a sudden and complete standstill. I was driving eastward from Hanover on the E30 on July 16, 2014. Suddenly, about 500m in front, all the lanes were filled with stationary vehicles. I slowed down, switched on my hazard lights switched them off immediately after two blinks. The driver behind me imitated me, and that was when he made a near fatal mistake. <i>He did not switch off his hazard lights</i>. Apparently, he then signaled right, but because both of his turn lights were blinking, the car in the right lane was not aware he wanted to ease right. There was a loud bang, both cars nearly disintegrated and vehicle parts were flying everywhere.<br />
<br />
If I was any closer the flying debris would make me part of the accident, and my holiday would be disastrously ruined. It would be an international accident, with my car rented out of Amsterdam. It would take months or years to determine culpability. Even if Hertz were to act immediately, it could take easily a week for them to send a replacement car from Holland. <br />
<br />
The traffic jam in front of me, unrelated to the accident behind me, cost me almost two hours of delay. It was apparently caused by a major accident involving trucks.<br />
<br />
I drove for a week in Germany, and every other day, there was a jam of about an hour duration on the autobahns.<br />
<br />
When I entered France from Saarbruken, the situation changed suddenly. The French motorway was nearly deserted (the toll from the border to Paris cost €30), and it was a pleasure to be able to drive at your own speed, without having someone in front holding you up, and without the fear of me holding somebody else up.<br />
<br />
The above is totally my personal experience. The statistics on the Wikipedia link suggests that the German autobahns are better than most other places.<br />
<br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='http://beethoven.azurewebsites.net/x/content.asp?B=AutoBahn&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-23321366874414513842014-04-29T09:51:00.000-07:002015-05-28T19:52:34.607-07:00Smart Phones are so passéSmart phones and tablets are so last decade.<br />
<br />
New features have already plateaued, and everyone who is anyone or no one, 5 years old or 100 years old, has, not one, but a couple.<br />
<br />
Samsung and Apple are resisting the race to the bottom, and still winning. I don't miss a thing with a sub-$200 full-price Asus 5.5" full HD LTE phone.<br />
<br />
It is no more about which phone is more capable, because they are all similar. It's about how you use them, just like <a href='http://all-things-pure.blogspot.com/2011/08/today-and-yesteryear.html'>this</a>.<br />
<br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='http://beethoven.azurewebsites.net/x/content.asp?B=passe&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-24735175234605561992013-12-11T09:07:00.000-08:002013-12-11T09:07:01.772-08:00All the world's problems are solvedAll the world's problems will be solved, if only people do only the things they are qualified to do.<br />
<br />
In any area of interaction, one of the most frustrating experiences is when you encounter some idiot in a position of authority or power. It is an unmovable roadblock.S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-4115274272813130792013-08-02T08:04:00.001-07:002014-06-13T18:57:06.402-07:00What is the Easiest way to copy a database to/from SQL Azure?The answer: <b>use SQL Server 2012</b><br />
<br />
Moving a SQL database to and from your PC to SQL Azure used to be a horrendous nightmare. With the new functionality in SQL Server 2012 and the Azure portal, this is now a breeze with just a few clicks. You are not required to learn or understand data-tier applications or BACPAC, the underlying method used in the import/export.<br />
<br />
This article assumes you already have an Azure subscription up and running.<br />
<br />
The functionality in SQL Server is actually the <a href='http://msdn.microsoft.com/en-us/data/tools.aspx' target='_blank'>SQL Server Data Tools</a>. However, it is totally invisible once it is installed. Download it <a href='http://msdn.microsoft.com/en-us/data/hh297027'>here</a>.<br />
<br />
<h2>Deploying An On-Premise SQL Database to SQL Azure </h2><br />
Let's start with moving a database from your PC to Azure.<br />
<br />
First of all, your on-premise database can use only those <a href='http://msdn.microsoft.com/en-us/library/windowsazure/ee336245.aspx' target='_blank'>features supported by SQL Azure</a>.<br />
<br />
To deploy a database in SQL Server 2012 is pretty easy and fast. In SSMS Object Explorer, right click your database and select Deploy Database to Sql <u>A</u>zure... under <u>T</u>asks:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-rhREwgpjttE/Ufuqu7S95MI/AAAAAAAABJo/j3U4bvaNm74/s1600/AzureDeploy.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://4.bp.blogspot.com/-rhREwgpjttE/Ufuqu7S95MI/AAAAAAAABJo/j3U4bvaNm74/s1600/AzureDeploy.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 1 - Deploy to SQL Azure</td></tr>
</tbody></table><br />
After skipping the first page of the deployment wizard, you come to Deployment Settings. Click Connect... and you will see the standard SSMS database Connect to Server dialog. Enter your Azure SQL Server name (somedatabaseserver.database.windows.net), the <u>L</u>ogin has to be <b>master</b>, and the New <u>d</u>atabase name has to be a new database on your Azure server.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-KEEpuHiC30w/UfusYYygnNI/AAAAAAAABJ4/LIGw_0-yFvs/s1600/AzureDeployConnect.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://4.bp.blogspot.com/-KEEpuHiC30w/UfusYYygnNI/AAAAAAAABJ4/LIGw_0-yFvs/s1600/AzureDeployConnect.PNG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 2 Connect to SQL Azure</td></tr>
</tbody></table><br />
Next, very importantly, you must go to the Connection Properties tab and ensure that the database connected to is MASTER. If you have been using your SSMS to connect to other databases on the Azure server, this setting might have defaulted to something else.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-TJu-zETaFPg/UfutErdA6II/AAAAAAAABKA/M6zvSZOivu0/s1600/AzureDeployMaster.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://4.bp.blogspot.com/-TJu-zETaFPg/UfutErdA6II/AAAAAAAABKA/M6zvSZOivu0/s1600/AzureDeployMaster.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 3 Must connect to MASTER database</td></tr>
</tbody></table><br />
Unless you are a totally newbie using SQL Azure, you would already have configured your Azure firewall to allow connections from your PC's IP address. If you don't know what this is, read <a href='http://msdn.microsoft.com/en-us/library/windowsazure/ee621783.aspx' target='_blank'>this</a>.<br />
<br />
After connecting, the wizard then does everything for you, and gives you the typical SSMS report card on the successful (and failed) steps that have taken place.<br />
<br />
<h2><b>Storage Account/Container</b></h2><br />
Copying a SQL Azure database to your PC requires you to first export the database to a location your PC can access. This holding area used is <i>Azure Storage</i>, another of the growing list of Azure services. If you are already familiar with Azure Storage, you can skip this section.<br />
<br />
In the Azure Management Portal, click STORAGE on the left menu. <br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-A88K61OeyPc/UftdybevvYI/AAAAAAAABIM/pyJldrWKxpE/s1600/Azure+Storage.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://1.bp.blogspot.com/-A88K61OeyPc/UftdybevvYI/AAAAAAAABIM/pyJldrWKxpE/s1600/Azure+Storage.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 4 Azure Storage</td></tr>
</tbody></table><br />
If you don't have an existing Storage account, you have to click CREATE STORAGE ACCOUNT next. You have to supply a globally unique Url to identify your Storage account. <br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-7ar_YWlZ_bQ/Uftgq0VHvWI/AAAAAAAABIc/HnEwZOtx9R0/s1600/AzureStorageCreate.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://2.bp.blogspot.com/-7ar_YWlZ_bQ/Uftgq0VHvWI/AAAAAAAABIc/HnEwZOtx9R0/s1600/AzureStorageCreate.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 5 - Create a new Storage account</td></tr>
</tbody></table>Azure Storage uses this organization hierarchy:<br />
<ol><li>An Azure subscription can have 0 or more <b>Storage accounts</b>.</li>
<li>A Storage account can contain 0 or more <b>Containers</b>.</li>
<li>A Container holds files.</li>
</ol>With a Storage account, you can now select it and create a Container (if you don't already have one) to hold your SQL files needed for the transfer. The Azure Portal provides intuitive menus and options for you to create your container. You should use a Container that is located in the same data center as your SQL Azure database to avoid clocking traffic.<br />
<br />
While at the portal in the Storage section, click Manage Access Keys at the bottom and copy the PRIMARY KEY. Your local SQL Server will need this later to access the Storage container.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-bG64PCvtpqE/UftwInQnO_I/AAAAAAAABJA/0DJhyTbtXas/s1600/AzureStorageKeys.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://2.bp.blogspot.com/-bG64PCvtpqE/UftwInQnO_I/AAAAAAAABJA/0DJhyTbtXas/s1600/AzureStorageKeys.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 6 - Storage Account Keys</td></tr>
</tbody></table><br />
<h2>Copying a SQL Azure Database to Your PC</h2><br />
First you have to Export your database to a Storage Container. The Container can be in any Storage Account of any subscription of which you are the administrator.<br />
<br />
From the Azure Portal with your database in focus, click Export at the bottom of the screen.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-QsCJUZxsOV0/UfvJ79IIL6I/AAAAAAAABLE/lq-D2n1v6d8/s1600/AzureSqlExport.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://2.bp.blogspot.com/-QsCJUZxsOV0/UfvJ79IIL6I/AAAAAAAABLE/lq-D2n1v6d8/s1600/AzureSqlExport.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 7 Exporting a SQL Azure Database</td></tr>
</tbody></table><br />
Remember the bacpac file name to which you have exported.<br />
<br />
Now, go to your PC's SSMS Object Explorer, and in the destination server's Databases node, right click and select <u>I</u>mport Data-tier Application....<br />
<br />
After the wizard introduction page, in the Import Settings dialog, select Import from Windows <u>A</u>zure and click Connect...<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-h7w_raaiJHo/UfvJ7ke-52I/AAAAAAAABLI/8VvvKvTLnaw/s1600/AzureImport.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://4.bp.blogspot.com/-h7w_raaiJHo/UfvJ7ke-52I/AAAAAAAABLI/8VvvKvTLnaw/s1600/AzureImport.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Figure 8 Importing a SQL Azure Database</td></tr>
</tbody></table><br />
<div class="separator" style="clear: both; text-align: center;"></div>If you paste in the correct Storage Account key (see previous section), you will be able to connect and select the Storage Container and the exported bacpac file by selecting from the drop down lists.<br />
<br />
The wizard will then step you through to import the database into your on-premise SQL Server.<br />
<br />
It's that easy!<br />
<br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='http://beethoven.azurewebsites.net/x/content.asp?B=AzureMove&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-49718147735618653122013-05-20T07:12:00.000-07:002019-12-26T00:34:33.979-08:00Revenge of the KoelLast week, we discovered a nest being constructed by a bulbul. It was located among some creepers just under the roof of the porch.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-MQ7jO-L2Sok/UZokQI3zAuI/AAAAAAAAA8A/5uqhTdnvqIs/s1600/2013-05-08+Bulbul+Nest.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://2.bp.blogspot.com/-MQ7jO-L2Sok/UZokQI3zAuI/AAAAAAAAA8A/5uqhTdnvqIs/s1600/2013-05-08+Bulbul+Nest.JPG" height="300" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Nest when about half done. See the yellow-vented bulbul?</td></tr>
</tbody></table><br />
The construction work was done solely by the female bulbul. The male partner kept a distance, providing some form of air cover. Hundreds of trips were made, each time with a little material.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-IHxFZiaxiHc/UZokLIMyIRI/AAAAAAAAA74/6UE6F6Wml7o/s1600/2013-05-20+Bulbul.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://4.bp.blogspot.com/-IHxFZiaxiHc/UZokLIMyIRI/AAAAAAAAA74/6UE6F6Wml7o/s1600/2013-05-20+Bulbul.JPG" height="300" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Bulbul struggling with the construction material. It took many attempts for it to get this piece of tissue off the barbed wire. Now you might understand the etymology of <i>birdbrain</i>.</td></tr>
</tbody></table><br />
When about half done, the bulbuls caught the attention of a female koel. This was about ten times the size of the bulbul.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-RgQx745KKhM/UZokHH8QECI/AAAAAAAAA7E/Pgi02v1J5zk/s1600/2013-05-07+Koel+%25282%2529.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://1.bp.blogspot.com/-RgQx745KKhM/UZokHH8QECI/AAAAAAAAA7E/Pgi02v1J5zk/s1600/2013-05-07+Koel+%25282%2529.JPG" height="300" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Female koel gazed fixed at the bulbul's nest</td></tr>
</tbody></table><br />
And tagging along as consort was a male koel. One day, I found the male koel pecking an object on the ground. On closer look, it was an egg. But it must belong to some other bird, perhaps a kingfisher, as the bulbul hadn't laid any yet. And the egg was relatively large.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-7LyWZZISm7Y/UZokHE0Cx-I/AAAAAAAAA7I/Ny6LTrPjTM8/s1600/2013-05-08+Black+Bird+%25282%2529.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://2.bp.blogspot.com/-7LyWZZISm7Y/UZokHE0Cx-I/AAAAAAAAA7I/Ny6LTrPjTM8/s1600/2013-05-08+Black+Bird+%25282%2529.JPG" height="300" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Do red eyes and evil go together?</td></tr>
</tbody></table><br />
The male koel came often. Then I realized that it was searching but still failing to locate the nest. The nest was an engineering marvel, done with no hands. It was well hidden, and camouflaged.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-DEiA6l1qnnw/UZokIQYFMxI/AAAAAAAAA7U/DOWGdakN6I0/s1600/2013-05-13+Nest+%25283%2529.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://1.bp.blogspot.com/-DEiA6l1qnnw/UZokIQYFMxI/AAAAAAAAA7U/DOWGdakN6I0/s1600/2013-05-13+Nest+%25283%2529.JPG" height="300" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Look ma, no hands!</td></tr>
</tbody></table><br />
The male koel came again. This time I was prepared. I had some stones on the ready. The koel was in the middle of a bush. I took a stone, aimed, and hurled it into the bush. The stone cut through the leaves and branches and, by the determinate counsel and foreknowledge of God, made impact. The bird dropped to the ground, grimaced for three seconds, curled up and lay still.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-lCZTYXnCj7s/UZokKYAGlwI/AAAAAAAAA7s/RorhWpojkpc/s1600/2013-05-16+Koel+%25282%2529.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://2.bp.blogspot.com/-lCZTYXnCj7s/UZokKYAGlwI/AAAAAAAAA7s/RorhWpojkpc/s1600/2013-05-16+Koel+%25282%2529.JPG" height="300" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Dead!</td></tr>
</tbody></table><br />
I went indoors and pondered over dinner plans or burial rites. After a few minutes, I came out and saw this:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-L69qIAiRS64/UZokKmJ34GI/AAAAAAAAA70/ta1hDR02_5s/s1600/2013-05-16+Koel+%25284%2529.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://3.bp.blogspot.com/-L69qIAiRS64/UZokKmJ34GI/AAAAAAAAA70/ta1hDR02_5s/s1600/2013-05-16+Koel+%25284%2529.JPG" height="300" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Resurrection or reincarnation?</td></tr>
</tbody></table><br />
From then on, the bird took on a new demeanor. It didn't fly away when approached. It stood its ground. In the evening, it came back. When I went up to it, it didn't budge. I went to take the camera and we faced off nose-to-nose in the twilight:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-1XbEZztLo94/UZokKbP77jI/AAAAAAAAA7o/eDgDqfY4A4Q/s1600/2013-05-16+Koel+%25288%2529.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-1XbEZztLo94/UZokKbP77jI/AAAAAAAAA7o/eDgDqfY4A4Q/s1600/2013-05-16+Koel+%25288%2529.JPG" /></a></div><br />
I had a broom stick half an inch away from it. I was hesitating whether to invoke Gen 1:26, and in the end let it go.<br />
<br />
However, it was plotting its revenge. A couple of days later, when no one was at home for just one hour, the bulbul's nest was completely destroyed.<br />
<br />
A day later, the male bulbul came back and cried:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-QbfPhpzWicI/UZr-H3jg4DI/AAAAAAAAA8Y/afX1BOpoXqU/s1600/2013-05-21+Bulbul+&+nest+(4).JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-QbfPhpzWicI/UZr-H3jg4DI/AAAAAAAAA8Y/afX1BOpoXqU/s1600/2013-05-21+Bulbul+&+nest+(4).JPG" height="400" width="312" /></a></div><br />
<br />
[If viewing on full-size computer screen, you can click on pictures to see original details.]<br />
<br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='https://beethoven.azurewebsites.net/x/content.asp?B=Koel&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-29334072641302408312013-04-15T04:00:00.001-07:002019-12-26T00:56:32.325-08:00"Messier" Marathon[For a chronicled metamorphosis of the Painted Jezebel, see <a href='https://all-things-pure.blogspot.com/#eggs'>here</a>.]<br />
<br />
There is this crazy event where astronomy enthusiasts attempt to spot all <a href="https://en.wikipedia.org/wiki/Messier_marathon">110 Messier objects in one night</a>.<br />
<br />
I can see about ten different types of butterflies flying around at the same time where I live. I thought it would be interesting if all ten could be photographed in one day. It looks impossible, especially with a <a href="https://all-things-pure.blogspot.com/2012/09/what-you-can-do-with-one-cheap-lousy.html">cheap lousy camera</a>, and the butterflies in constant motion, stopping for rarely a second each time.<br />
<br />
So what you see here is just a lazy attempt over different days. The only criteria is that I have to be no more than 30 feet from the external walls of my apartment. All pictures taken at 3 Mpixels or less and not touched up.<br />
<br />
If you know the names of any of these creatures do share the information. Current ones identified with help from Commander, Raj and Simon. Thanks.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-f7PWq6qxzaU/UWvcJJtEYZI/AAAAAAAAA0I/feNZm6zRizE/s1600/2013-01-03+Butterfly+(3).JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://1.bp.blogspot.com/-f7PWq6qxzaU/UWvcJJtEYZI/AAAAAAAAA0I/feNZm6zRizE/s1600/2013-01-03+Butterfly+(3).JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#1 Leopard Lacewing (<span style="background-color: white; color: #222222; font-family: arial, sans-serif; text-align: start;"><i>Cethosia cyane</i>)</span></td></tr>
</tbody></table><br />
<div class="separator" style="clear: both; text-align: center;"></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-3v79qWBQiHw/UWvdeKORL4I/AAAAAAAAA0o/vdHVhGemcpw/s1600/2013-03-19+Butterfly+800x600.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://4.bp.blogspot.com/-3v79qWBQiHw/UWvdeKORL4I/AAAAAAAAA0o/vdHVhGemcpw/s1600/2013-03-19+Butterfly+800x600.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#2 <span style="background-color: white; color: #222222; font-family: arial, sans-serif; text-align: start;">Blue Pansy (</span><span style="background-color: white; color: #222222; font-family: arial, sans-serif; text-align: start;"><i>Junonia orithya</i>)</span></td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-NclZy1w1B0I/UXdF4K6hfPI/AAAAAAAAA10/VlKdP9AKE0Q/s1600/20130-04-24+Butterfly.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://4.bp.blogspot.com/-NclZy1w1B0I/UXdF4K6hfPI/AAAAAAAAA10/VlKdP9AKE0Q/s1600/20130-04-24+Butterfly.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#3 <span style="background-color: white; color: #222222; font-family: arial, sans-serif; text-align: start;">Common Mime (</span><span style="background-color: white; color: #222222; font-family: arial, sans-serif; text-align: start;"><i>Chilasa clytia</i>)</span></td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-JMrNt5CIKX0/UWvcKUT744I/AAAAAAAAA0c/Ab0XFvRbwQM/s1600/2013-04-15+Butterfly+(3).JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://3.bp.blogspot.com/-JMrNt5CIKX0/UWvcKUT744I/AAAAAAAAA0c/Ab0XFvRbwQM/s1600/2013-04-15+Butterfly+(3).JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#4 <span style="background-color: white; color: #222222; font-family: arial, sans-serif; text-align: start;">Lime Butterfly (</span><span style="background-color: white; color: #222222; font-family: arial, sans-serif; text-align: start;"><i>Papilio demoleus</i>)</span></td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-aG2lDoYZRlE/UWvcJG2Kh8I/AAAAAAAAA0E/8pb_pemx4uE/s1600/2013-04-07+Butterfly+(5).JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://2.bp.blogspot.com/-aG2lDoYZRlE/UWvcJG2Kh8I/AAAAAAAAA0E/8pb_pemx4uE/s1600/2013-04-07+Butterfly+(5).JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#5 Common Tiger (<span style="background-color: white; color: #222222; font-family: arial, sans-serif; text-align: start;"><i>Danaus genutia</i>)</span></td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-GacgXNh6KgM/UWy0WOqq9UI/AAAAAAAAA1A/zvFeoE7crhc/s1600/2013-04-08+Butterfly.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://3.bp.blogspot.com/-GacgXNh6KgM/UWy0WOqq9UI/AAAAAAAAA1A/zvFeoE7crhc/s1600/2013-04-08+Butterfly.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#6 Common Palmfly (<span style="background-color: white; color: #222222; font-family: arial, sans-serif; text-align: start;"><i>Elymnias hypermnestra)</i></span></td></tr>
</tbody></table><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-ODbaDUWWD-c/UXni18iNLPI/AAAAAAAAA2k/t7P-cDNiLf4/s1600/2012-11-19+Butteryfly+laying+eggs+800x600.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://3.bp.blogspot.com/-ODbaDUWWD-c/UXni18iNLPI/AAAAAAAAA2k/t7P-cDNiLf4/s1600/2012-11-19+Butteryfly+laying+eggs+800x600.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#7 Painted Jezebel (<i>Delias hyparete</i>)</td></tr>
</tbody></table><div class="separator" style="clear: both; text-align: center;"></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-9pXg59LVmeA/UXnhuLrm1xI/AAAAAAAAA2I/ePnq-hmo-yc/s1600/2013-04-26+Butterfly+%25286%2529.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://4.bp.blogspot.com/-9pXg59LVmeA/UXnhuLrm1xI/AAAAAAAAA2I/ePnq-hmo-yc/s1600/2013-04-26+Butterfly+%25286%2529.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#8 Common Grass Yellow (<i>Eurema hecabe</i>)</td></tr>
</tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-0XL_U_EaGmI/UX9rudHYP6I/AAAAAAAAA20/ogFp71_vLf8/s1600/2013-04-30+Butterfly+(2).JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://3.bp.blogspot.com/-0XL_U_EaGmI/UX9rudHYP6I/AAAAAAAAA20/ogFp71_vLf8/s1600/2013-04-30+Butterfly+(2).JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#9 ???</td></tr>
</tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-cjzIIXibLh0/UYdd-yMQlAI/AAAAAAAAA4Q/FlmL2YFwgr8/s1600/2013-05-06+Butterfly+(2).JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://4.bp.blogspot.com/-cjzIIXibLh0/UYdd-yMQlAI/AAAAAAAAA4Q/FlmL2YFwgr8/s1600/2013-05-06+Butterfly+(2).JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#10 Cycad Blue, Plains Cupid (<i>Chilades pandava pandava</i>)</td></tr>
</tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-ebsd2uCF2w8/UZDdMluoCrI/AAAAAAAAA44/TDeKTofQJEI/s1600/2013-05-13+Buterfly.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://2.bp.blogspot.com/-ebsd2uCF2w8/UZDdMluoCrI/AAAAAAAAA44/TDeKTofQJEI/s1600/2013-05-13+Buterfly.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#11 Striped Albatross (<i>Appias libythea olferna</i>)</td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-NFXSsMNfqUY/UZDdM9kOn5I/AAAAAAAAA48/ypavYKKRFCw/s1600/2013-05-13+Butterfly+(2).JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://4.bp.blogspot.com/-NFXSsMNfqUY/UZDdM9kOn5I/AAAAAAAAA48/ypavYKKRFCw/s1600/2013-05-13+Butterfly+(2).JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#12 ??</td></tr>
</tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-t7hZhtPkPMY/UZb51B5lOyI/AAAAAAAAA5c/N5Fzoom1oRs/s1600/2013-05-17+Butterfly.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://2.bp.blogspot.com/-t7hZhtPkPMY/UZb51B5lOyI/AAAAAAAAA5c/N5Fzoom1oRs/s1600/2013-05-17+Butterfly.JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#13 ???</td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-VsswgQ6TZRc/UepG9X3UXXI/AAAAAAAABGI/X9qGYeM0IE0/s1600/2013-07-16+Butterfly+(2).JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://1.bp.blogspot.com/-VsswgQ6TZRc/UepG9X3UXXI/AAAAAAAABGI/X9qGYeM0IE0/s1600/2013-07-16+Butterfly+(2).JPG" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">#14 ? some swallow tail??</td></tr>
</tbody></table><br />
<br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='https://beethoven.azurewebsites.net/x/content.asp?B=Butterflies&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-57774444050573448162013-02-03T21:07:00.003-08:002014-06-13T18:58:12.117-07:00DemocraciesComing from an uneducated person, but who is trying hard to be aware of some of the things I do not know, I think the whole idea of democracies has not run its full course. More surprises are in the offing.<br />
<br />
At this time, it seems that all democracies will mature toward an equilibrium of two halves of the governed in the ratio of about 50:50. The US appears to be in the lead.<br />
<br />
Come to think of it, that is only the nature of man. Who would want to be disadvantaged so that someone else can take the advantage?<br />
<br />
This inward instinct is different from the rich paying more taxes. The rich do not mind paying more taxes for a selfish reason: so that the system around them do not collapse and deny them the safe environment to spend their wealth.<br />
<br />
It is a different thing altogether if, in order to preserve a happy orderly society, you are asked to surrender your right to own a car so that someone else might own a car, for example.<br />
<br />
The fairest and best is still a democracy. Let me know if you have found something better.<br />
<br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='http://beethoven.azurewebsites.net/x/content.asp?B=Democracies&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script>S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0tag:blogger.com,1999:blog-8323775930191850485.post-73227188459413076822013-01-07T00:16:00.000-08:002014-06-13T18:08:24.653-07:00Pointing your own domain name to a (Blogger) blogspot.com siteGoogle's instructions on this subject are terribly misleading, and in an attempt to make them comprehensible to the layman make them worse.<br />
<br />
Look at this screen shot by Google when you ask for instructions to set up spqr.mydomain.com to point to your own blogspot site:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-6GPwj539ejs/UOqFfmORkpI/AAAAAAAAAzE/WLWJK86Yrng/s1600/bloggerCName.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-6GPwj539ejs/UOqFfmORkpI/AAAAAAAAAzE/WLWJK86Yrng/s1600/bloggerCName.PNG" /></a></div><br />
<br />
It's incorrect. www.example.com is NOT a top-level domain. www.example.com is no different from foo.example.com as far as "levels" are concerned.<br />
<br />
90% of the world have the impression that www is something special. "www.abc.com" (it should be "www.abc.com.") is a domain, just like "abc.com", or "com". Many people have difficulty understanding this, but that's how the Internet domain name system is defined, and works. Do invest a minute to let this sink in.<br />
<br />
The next error: you cannot add two CNAME records to a domain and still be meaningful. A CNAME record is, like 99.99% of the time, used to create an alias for a domain name. When we say, lazily, "add a CNAME record for abc.com and point it to def.net", we mean create an alias for abc.com that resolves to the canonical name def.net. In other words, when someone requests for the IP address of abc.com, he is redirected to def.net instead. He will then have to continue his query to find out the IP address of def.net.<br />
<br />
After some testing, this is what I discovered. If <b>you want your domain spqr.mydomain.com to point to xyz.blogspot.com</b>,what Google needs is as follows:<br />
<br />
Go to the Settings page, Publishing, Switch to Advanced settings and enter spqr.mydomain.com in the http box.<br />
Click Save and you will be given the name of two CNAME records that you must create. The two CNAME records are (based on the example in the screenshot):<br />
<br />
<br />
(Note: you <u>must</u> have the ability to create the domain Z3O5FRCOSL73.spqr.com.)<br />
<div><br />
</div><br />
Alias <b>spqr.com</b> to the CNAME <b>ghs.google.com</b><br />
Alias <b>Z3O5FRCOSL73.spqr.com</b> to the CNAME <b>gv-D5HHKMK....thatverylong name</b><span style="background-color: #fff9e7; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px; white-space: nowrap;"><b>.domainverify.googlehosted.com.</b></span><br />
<br />
If you must have www to cater to people who like to type another four characters to reach a web site, then alias www.spqr.mydomain.com to spqr.mydomain.com, ie add a CNAME record to www.spqr.mydomain.com.<br />
<br />
If your domain registrar allows very long names, then your job is done. Mine, 1and1.com, spits out that second entry. I don't know why Google has to make it so long. A GUID is only 30+ characters. So I have to resort to another name server, like <a href="http://cloudns.net/" target="_blank">ClouDNS.net</a>, to solve my problem. You have to basically set the name servers for your domain name to the third party provider instead. Detailed instructions for an 1and1 example can be found <a href="http://blog.mridey.com/2012/10/how-to-setup-your-blogger-blog-with.html" target="_blank">here</a>.<br />
<br />
A word of caution to those who are trying out a sub-domain of a domain name they already own and whose registrar cannot take long names. For example spqr.mydomain.com is already your active name used by web site and email, and you want to use xyz.spqr.mydomain.com to point to a site in blogger.com. If you change the name servers for spqr.mydomain.com to ClouDNS.net in order to add the aliases for xyz.spqr.mydomain.com and ZZZZZZ.spqr.mydomain.com, you will have to duplicate all your current DNS entries at ClouDNS.net. Not a wise or productive task to do.<br />
<br />
In this latest scenario, you should point www.xyz.spqr.mydomain.com instead to Blogger.<br />
<br />
<script language="Javascript">
var referer=escape(""+parent.document.referrer);
document.write("<iframe src='http:///beethoven.azurewebsites.net/content.asp?B=BloggerDNS&R="+referer+"' frameborder='0' height='1px'></iframe>");
</script><br />
<br />
<br />
<br />
<br />
S/360http://www.blogger.com/profile/04364026433719720777noreply@blogger.com0