tag:blogger.com,1999:blog-98814832024-03-13T17:24:49.171-05:00k0emt's random access bearThoughts on software development and technology.Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.comBlogger113125tag:blogger.com,1999:blog-9881483.post-41686607214674452322020-03-18T23:27:00.001-05:002020-03-18T23:27:04.076-05:00BIOS upgrade Lenovo Flex-14IWLEarlier this year, I picked up a quad core i5 Lenovo Flex-14IWL with 16G of RAM and loaded it with <a href="https://system76.com/pop">Pop!_OS</a>. Everything works great on it except for the fingerprint reader. I was checking the Lenovo website and discovered that there was a <a href="https://pcsupport.lenovo.com/us/en/products/laptops-and-netbooks/flex-series/flex-14iwl/downloads/DS528383">BIOS update</a> available for my laptop. Unfortunately, the only way to apply the update is to run an application in Windows. Here's how I got the update done.<br />
<h3>
Some background</h3>
To install Pop!_OS I had to reconfigure the BIOS to disable the Intel RST setting and switch from UEFI boot to Legacy. Windows 10 and the BIOS updater only run under the UEFI system.<br />
<h3>
The Windows 10 Install</h3>
Having rebuilt quite a few Windows 10 machines I have experience with installing Windows 10 from a USB flash drive. However, what I was after this time is to install and run Windows from an external drive. The planned target device was a 500G 7200rpm 2.5" HDD that was put into a USB 3.0 enclosure. To do this work, I used a Lenovo Thinkpad Yoga S1 running Windows 10. I was able to follow an <a href="https://www.pcmag.com/how-to/how-to-run-windows-10-from-a-usb-drive">article to image Windows 10</a> using <a href="https://rufus.ie/">Rufus</a>. Here is an article that explained how to <a href="https://www.trishtech.com/2019/03/how-to-install-windows-or-linux-from-external-usb-hard-drive-using-rufus/">target an external USB 3.0 HDD with Rufus.</a> So, key settings were to specify the HDD, use the Windows 10 ISO, Windows to go installation, Windows Home selected, and GPT/UEFI format.<br />
<br />
Once Rufus finished its work, I copied over the <a href="https://pcsupport.lenovo.com/us/en/products/laptops-and-netbooks/flex-series/flex-14iwl/downloads/DS528383">BIOS update</a> file to the external drive.<br />
<h3>
Windows 10 Install and BIOS update</h3>
Get a paper clip. Bend it open. With the laptop powered off. Take the end and insert it in the hole on the right side of the laptop near the power button. This will give you a menu you can use to get into BIOS settings. You'll need to switch things back to using UEFI and allow USB boot. Once that is done, reboot the machine with the external USB HDD plugged in. It should boot up to Windows 10. Have fun going through the Windows 10 install. When drivers finish installing and the machine isn't churning any more, you can go ahead and run the BIOS update you downloaded. It will first extract the application and then you can run it. Make sure the laptop is plugged in when you do this. When it seems like the process is done and you have a black screen, WAIT. The computer will eventually reboot. Once, everything has completed you can shut down Windows. Hold onto the external HDD for possible future updates.<br />
<br />
<h3>
Flipping back</h3>
Now, get your paper clip again, disable Intel RST and set to Legacy boot. Enjoy Linux again.Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-1520333554119763742019-11-19T22:51:00.000-06:002019-11-19T22:51:19.353-06:00A day without the smartwatch -- tech experimentI have a couple of watches that I wore regularly before getting my current smartwatch. The battery in one of them has gone dead and the other uses solar power. So, I keep it out where it can get some light. Feeling a bit nostalgic, I decided to wear it yesterday. That meant giving up my "fitness" tracking for the day.... and all of the reminders that go with it.<br />
<br />
I found that I was able to do more deep thinking / concentrating work. The vibrating watch alerts weren't there. Besides, the fitness tracking, I did miss the awareness of having received a text message. Overall, I felt like it was a good change up.<br />
<br />
Today, when I went back to the smartwatch, I went into my app settings and dialed back notifications on the apps that I felt were the most egregious interruptors. Overall, this made for a better day today.<br />
<br />
What tech experiments can you do in your life?Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-56842979903087923222016-09-23T17:13:00.000-05:002016-11-02T16:35:34.990-05:00Presentation Creation ProcessToday I was asked how I go about creating a technical presentation. This is my process.<br />
<br />
First, take notes (either in an <a href="http://soloso.blogspot.com/2014/05/engineers-notebook.html">Engineering Journal</a> or with OneNote) when learning a technology or skill. Pay attention to your internal questions and to the stumbling points you run across. After you have learned or acquired the skill reflect and consider what were the important concepts, what mis-conceptions did you have along the way and what could be common problems?<br />
<br />
Next, mind map out the topics that you intend to cover in your presentation and consider relationships between the topics. Sometimes, you may opt to include that mind map with the published materials. <a href="https://www.literatureandlatte.com/scapple.php">Scapple</a> is a nice straight forward and affordable tool for creating mind maps.<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://github.com/k0emt/introduction-to-d3/raw/master/Introduction%20to%20d3.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="304" src="https://github.com/k0emt/introduction-to-d3/raw/master/Introduction%20to%20d3.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Example Mind Map from d3.js presentation</td></tr>
</tbody></table>
Then consider the relationships between the content in the mind map. Think about the presentation order. Consider if there is a way to frame the material in a story or a give it some context. Then work on the presentation deck. Strive to create a deck that has just enough material on the slide to help move the presentation forward.<br />
<br />
Then practice. Practice delivery and timing on your own. Then try to present the material internally at work, then at a local group(s) and finally at conference(s). Every time you do a presentation solicit feedback and adapt the presentation. Sometimes, the presentation has to be adapted real time because of the environment. A relaxed room of 20 people is very different then a conference hall with several hundred people in it. By the time you are presenting at a conference you will have invested a lot of time in learning and internalizing the material as well as the presentation.Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-59103412963543627962016-03-19T21:12:00.004-05:002016-03-24T09:05:17.666-05:00Experimenting with mongoDB's new $lookup featureTo familiarize myself with the new <a href="https://docs.mongodb.org/manual/reference/operator/aggregation/lookup/">$lookup</a> feature of mongoDB I did some experimenting.<br />
<br />
I tried a couple of different document structures and companion aggregation queries. I based my experiment around the idea of having orders that have keys into related items detail documents.<br />
<br />
After seeing the results of some of the aggregations at this point (parallel arrays) I felt like either you'll have to do more manipulation with the aggregation framework to get what you are after, or you'll need to write some code. I think I'd rather just write code. Where the result set out of a SQL join seems smooth, for these types of scenarios the $lookup operator just seems clunky.<br />
<br />
In an actual implementation I think I would prefer to see a variant of either of the last two types of documents that includes price in the document. Product prices do change. For example, sale prices, promotions, etc. Include the price in the order and you won't need to use the $lookup.<br />
<br />
Use my code below, posted as a gist, as a jumping off point for your own experimenting.<br />
<br />
<script src="https://gist.github.com/k0emt/2caecdba57cbb06f4f91.js"></script><br />
<br />Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-20891251672320600392015-11-21T20:54:00.001-06:002015-11-21T20:54:45.454-06:00Working with ethernet<br />
<div class="page" title="Page 1">
<div class="layoutArea">
<div class="column">
<h2>
<span style="font-family: "calibri"; font-size: 12.000000pt; font-weight: 700;">Pre-fabricated Cables and Testing
</span></h2>
<span style="font-family: "calibri"; font-size: 12.000000pt;">Start off by grabbing one of the blue cables (mostly CAT6) that you have
laying around. They are usually provided when you purchase a router or
switch. You’ll use this cable to see the output of the tester when it is
hooked up to a good cable. The lights on both parts proceed in linear
sequence 1 through 8. Feel free to use these cables to connect between a
local switch and devices. Don’t run these cables through the house.
</span><br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsVAQ8jUIZPYT82Un3X4afkGrWx70ZWFayqiy7iRvn28zVeXX6b0_Bz4SjaOfpjyE6H17Ab3G_Ji_CPXHOma-ECDyVnhXr0nT4jPvsdoOzz4hTGcda_A7_yOcsb-D_Odho-EJp8w/s1600/network_continuity_tester.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="184" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsVAQ8jUIZPYT82Un3X4afkGrWx70ZWFayqiy7iRvn28zVeXX6b0_Bz4SjaOfpjyE6H17Ab3G_Ji_CPXHOma-ECDyVnhXr0nT4jPvsdoOzz4hTGcda_A7_yOcsb-D_Odho-EJp8w/s200/network_continuity_tester.png" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="background-color: white; color: #44546a; font-family: "calibri"; font-size: 12px; font-style: italic; text-align: start;">Figure 1. Ethernet continuity tester. Image source: <br />http://www.networktechinc.com/nti/images/items/tester-cable.jpg</span></td></tr>
</tbody></table>
<span style="font-family: "calibri"; font-size: 12.000000pt;"><br /></span>
<br />
<h2>
<span style="font-family: "calibri"; font-size: 12.000000pt; font-weight: 700;">Wire on the spool
</span></h2>
<span style="font-family: "calibri"; font-size: 12.000000pt;">When purchasing the gray/beige CAT 5 or 6 cable at the store, make sure
that it is PLENUM rated for running through homes. With these cables,
you can read the print on the side of the cable and see a UL<br />
designation.
</span><br />
<h2>
<span style="font-family: "calibri"; font-size: 12.000000pt; font-weight: 700;">Crimping
</span></h2>
<span style="font-family: "calibri"; font-size: 12.000000pt;">Look at the pre-made cables and Figure 2. Notice that the ordering<br />
of the inner striped Green and striped Blue wires is different than the outer Orange and Brown wires. When
inserting the wires into the connector make sure that they are going all the way to the end of the connector.
When you crimp, you are pushing little metal teeth into the wire at the very end.
</span><br />
<span style="font-family: "calibri"; font-size: 12.000000pt;"><br /></span>
<span style="font-family: "calibri"; font-size: 12.000000pt;">Don’t over trim the cable jacket. It is compressed by a plastic piece during the crimping to help hold
everything in place.
</span><br />
<span style="font-family: "calibri"; font-size: 12.000000pt;"><br /></span>
<span style="font-family: "calibri"; font-size: 12.000000pt;">The crimper is designed so that when you start crimping it doesn’t release until you’ve compressed everything
all the way.
</span><br />
<span style="font-family: "calibri"; font-size: 12.000000pt;"><br /></span>
<span style="font-family: "calibri"; font-size: 12.000000pt;">Test that the connector was successfully installed with the continuity tester.
</span></div>
</div>
<div class="layoutArea">
<div class="column">
<span style="background-color: rgb(100.000000%, 100.000000%, 100.000000%); color: rgb(26.666670% , 32.941180% , 41.568630%); font-family: "calibri"; font-size: 9.000000pt; font-style: italic;"><br /></span>
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdqLgIeQxX59ijupU-lYNMw5VSx18YScvOmiC4JG5_dznD8Kt9wu6Dhyphenhyphenw-Q0QRN1ZO1ghG7m_osJ_n0p70JXIFJfnyKn0l1jYM7v49cbddNLSjr4C03A5DadliOARMrK4rtQrW0Q/s1600/RJ45.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdqLgIeQxX59ijupU-lYNMw5VSx18YScvOmiC4JG5_dznD8Kt9wu6Dhyphenhyphenw-Q0QRN1ZO1ghG7m_osJ_n0p70JXIFJfnyKn0l1jYM7v49cbddNLSjr4C03A5DadliOARMrK4rtQrW0Q/s320/RJ45.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="color: #44546a; font-family: "calibri"; font-size: 12px; font-style: italic; text-align: start;">Figure 2. RJ45 Connector<br />Image source: http://www.telcodepot.com/images/ricky-cat5e-jack.jpg </span></td></tr>
</tbody></table>
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv4SobArToSHB9OO2Mp3aOdpB-TW-LwqUQ1yC5pHhc2DfuslLJXTzbDrDQKRFcOOLLsyGZYbO1Hh55VTht9B11CIcWRcaike9kG03BTh-N6chXrbHflfIcmwpMDd2fVmB3wK6q_g/s1600/RJ45_crimper.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv4SobArToSHB9OO2Mp3aOdpB-TW-LwqUQ1yC5pHhc2DfuslLJXTzbDrDQKRFcOOLLsyGZYbO1Hh55VTht9B11CIcWRcaike9kG03BTh-N6chXrbHflfIcmwpMDd2fVmB3wK6q_g/s200/RJ45_crimper.png" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Modular plug crimper</td></tr>
</tbody></table>
<span style="background-color: rgb(100.000000%, 100.000000%, 100.000000%); color: rgb(26.666670% , 32.941180% , 41.568630%); font-family: "calibri"; font-size: 9.000000pt; font-style: italic;"><br /></span>
</div>
</div>
<div class="layoutArea">
<div class="column">
<span style="color: rgb(26.666670% , 32.941180% , 41.568630%); font-family: "calibri"; font-size: 9.000000pt; font-style: italic;"><br /></span>
</div>
</div>
</div>
Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-82044931580311956842015-10-28T00:29:00.001-05:002015-11-04T23:03:01.406-06:00HP DM1 revitalized<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsje8Mjt3v0PjSciIpXDkIRQ6IaSh7HCwR_sId3ASZwTFGjITRUcyQD4ASAte_3dlRq_xlWa0ChUZlNhT1NTKyTtHGLbVLwWyE3fDQPYkC3w26r5UdGh3hOZhxhWR9_pG0jRZgAg/s1600/hp_dm1-3025dx.jpg" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsje8Mjt3v0PjSciIpXDkIRQ6IaSh7HCwR_sId3ASZwTFGjITRUcyQD4ASAte_3dlRq_xlWa0ChUZlNhT1NTKyTtHGLbVLwWyE3fDQPYkC3w26r5UdGh3hOZhxhWR9_pG0jRZgAg/s1600/hp_dm1-3025dx.jpg" /></a><br />
<br />
A couple of years ago I picked up an HP DM1-3025DX as a fun little affordable Windows 7 portable computer. It came stock with an AMD E-350 dual core processor, an 11" 720P display, a speedy 7200rpm 250G HD, 3G of RAM, web cam, HDMI and VGA output. It also has 802.11n, gigabit ethernet and bluetooth.<br />
<h1>
<a class="anchor" href="https://www.blogger.com/blogger.g?blogID=9881483#hardware-upgrades" id="hardware-upgrades" name="hardware-upgrades"></a>Hardware upgrades</h1>
I upgraded the computer to 8G of RAM and a Seagate 1TB hybrid drive that I had left over from another project.<br />
<h1>
<a class="anchor" href="https://www.blogger.com/blogger.g?blogID=9881483#windows-10" id="windows-10" name="windows-10"></a>Windows 10</h1>
I recently upgraded the DM1 to Windows 10. All the devices worked as expected post upgrade. My only complaint was with the background updating. Whenever it was running the CPU and disk usage would spike. This was with the factory HD. I was surprised by how much disk activity there was. With the HD being a 7200rpm drive it should have been fast enough. So, other than being a bit slower than I care for it was an okay experience.<br />
<h1>
<a class="anchor" href="https://www.blogger.com/blogger.g?blogID=9881483#linux-mint" id="linux-mint" name="linux-mint"></a>Linux Mint</h1>
There were a number of reasons I chose to try Linux Mint on this laptop<br />
<ul>
<li>The just okay performance of Windows 10</li>
<li>I already have a powerful Windows 10 laptop</li>
<li>I don't have a computer running Linux natively</li>
<li>I don't care for the Ubuntu interface</li>
<li>I do like the clean Linux Mint Cinnamon UI</li>
</ul>
<h2>
<a class="anchor" href="https://www.blogger.com/blogger.g?blogID=9881483#the-installation" id="the-installation" name="the-installation"></a>The installation</h2>
I reset the Windows 10 installation to "new". I then removed that hard disk and replaced it with a Seagate 1TB hybrid drive.<br />
<br />
Working on a Windows machine, I downloaded the ISO image from the <a href="http://www.linuxmint.com/">Linux Mint website</a> Then I picked up a copy of <a href="http://rufus.akeo.ie/">rufus</a> for "burning" the ISO to a USB thumb drive. Next, I had to drop into the CMOS settings and reconfigure the boot order allowing for boot from USB.<br />
<br />
Post installation, all of the laptop devices seemed to work properly except for Bluetooth. Research points to this potentially being a problem with this particular release of Mint.<br />
<br />
I used a Logitech Anywhere MX mouse with this computer. I had previously paired the mouse and dongle under Windows. I did some research and found that there is software for working with the unifying dongles.<br />
<h2>
<a class="anchor" href="https://www.blogger.com/blogger.g?blogID=9881483#software-installed-on-top-of-the-base-install" id="software-installed-on-top-of-the-base-install" name="software-installed-on-top-of-the-base-install"></a>Software Installed on top of the base install</h2>
<ul>
<li>Atom w/Markdown extension</li>
<li>Google Hangout - has a bug that leaves the camera active post chat</li>
<li>cheese - because I needed a way to turn off the camera</li>
<li>Flash for Firefox</li>
<li>slack</li>
<li>mongodb w/developer settings</li>
<li>git</li>
<li>node.js</li>
</ul>
<h2>
<a class="anchor" href="https://www.blogger.com/blogger.g?blogID=9881483#observations" id="observations" name="observations"></a>Observations</h2>
It did seem like the computer took a long time to boot with Mint. However, I've observed the same behavior on other more powerful computers running Linux.<br />
<br />
PDF viewing was slow when I was viewing some rather large PDFs of graphic novels. Rendering and scrolling was painfully slow. However, when viewing more "normal" type PDFs like a one page hand out or a 100+ page text the performance was acceptable. <br />
<br />
Web browsing and rendering of more complicated sites was slow.<br />
<br />
Atom performed acceptably with Python as well as Markdown with preview.<br />
<br />
Overall, I found the Linux experience enticing. I feel that I would rather use the laptop with Linux than Windows 10. This configuration is a pretty good balance of a don't worry about it on the go laptop. However, this form factor and sub-optimal performance does leave me longing for a laptop like what I envision the second generation retina MacBook will be like. Although, <i>that</i> will cost significantly more!<br />
<br />
<h2>
Update</h2>
Well, while Linux was enticing the overall experience/performance wasn't good enough to keep me hooked. So, I thought I would continue the experiment and finish off with an apples to apples comparison with Windows. I did a fresh load of Windows 10 on the Seagate hybrid drive. This configuration performs much better than the earlier configuration. I tested the Windows installation with Firefox, Atom.io, node.js, Python, git and mongoDB. The machine is still not a power house. However, it is acceptable performance. Also, the boot time is much faster than it was for Linux. At least for now, I will be keeping the machine configured with Windows 10.Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-58951551470776637352015-08-10T23:09:00.002-05:002015-08-10T23:09:52.675-05:00mongoexport json format UTF-8 charactersSo, you just did an export of your mongoDB database into a JSON formatted file called <span style="font-family: Courier New, Courier, monospace;">exported.json</span>. In part, you did this because you have this crazy idea of using the JSON with another application. Then you see some strange stuff in the URL fields you exported. Specifically, you see stuff like <span style="font-family: Consolas;">\u0026</span> in them. These are actually UTF-8 codes for the % (percent) symbol. If you want to work the exported data back around to the stored format, you’ll want to check out Python’s json library. I’ve included a starting point below.<br />
<br />
<pre><span style="font-family: Courier New, Courier, monospace;">import json</span>
<span style="font-family: Courier New, Courier, monospace;">f = open('exported.json')</span>
<span style="font-family: Courier New, Courier, monospace;">for line in f:</span>
<span style="font-family: Courier New, Courier, monospace;">print json.loads(line),</span>
<span style="font-family: Courier New, Courier, monospace;">f.close()</span>
</pre>
Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-31443291431550121232015-01-09T14:17:00.001-06:002015-01-09T14:17:43.202-06:00Show, don’t tell<p>I recently read an article about writing techniques that talked about “showing” the reader what was happening versus “telling” them. An example of telling a story is: “it was bitterly cold outside.” Or we could show the reader: “I braced myself as I headed outside. Exiting the building I hear the rope on the flag slapping against the pole. The straining flag appears to glow with the sun behind it. My body reflexively shivers when the next wind gust hits. I chose the wrong jacket.” This same principle of show, don’t tell can be applied to business and IT. </p> <p>As an example, you could say we’re experience great growth year over year or you could show a simple graphic and let people draw their own conclusions. In this graphic I also draw from the viewpoint of less is more. There are no axis, scales or excess colors and labels as they don’t bring any value. The graphic simply shows a value of 20 for 2013 and 40 for 2014. My challenge to you is to think where you can apply show, don’t tell in your own writing, presentations and applications.</p> <p><a href="http://lh6.ggpht.com/-x-Qs0UIZ6p8/VLA3Yy3Oy7I/AAAAAAAAAuw/XmwmHfQyxtA/s1600-h/image%25255B3%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://lh3.ggpht.com/-x_VvQW2yGeM/VLA3Zizc1kI/AAAAAAAAAu0/WOMs5i9Y_04/image_thumb%25255B1%25255D.png?imgmax=800" width="252" height="195"></a></p> Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com1tag:blogger.com,1999:blog-9881483.post-87842634126903746572014-12-31T14:30:00.001-06:002014-12-31T14:30:12.701-06:00Sony Flip 15 upgrade<p>I have a SONY Flip 15 convertible tablet (SVF15N17CXB) that I use primarily for contract work that requires a PC. It is a very nice machine with an i7, 8G of RAM and switching discrete/integrated graphics adapter. When I purchased it in early 2014 the two things it was lacking were an SSD and an active stylus. I quickly remedied the lack of stylus. It did come with a 1 TB hybrid fusion drive which I reasoned I would evaluate while SSDs continue to evolve. I used this configuration for the better part of a year. I noticed that most often observed slowness came back to I/O bound processes – the hard drive light was flickering a lot and the performance tab in task manager confirmed it. So, with the last minute renewal of tax credits on business asset purchases I decided to upgrade the machine.</p> <p>I had originally picked out a Samsung 840 EVO at 512G. Since then the 850 line up was introduced. Based on my observed hard drive usage I decided to go with the faster, but slimmer (in capacity) 850 PRO in 256G.</p> <p>I figured if I am going to go through the work of opening the machine up, I would upgrade the RAM at the same time. I went with 16GB of Crucial Ballistix that is also faster than the stock RAM. Since, the hard drive I’m pulling out is a 1TB drive I picked up a USB 3.0 enclosure with UASP support so I can use it as an external drive.</p> <p><a href="http://lh6.ggpht.com/-BpxyGjjYgJM/VKRcxTZooxI/AAAAAAAAAt8/XQSgZgOEGRY/s1600-h/20141230_195310141_iOS%25255B4%25255D.jpg"><img title="20141230_195310141_iOS" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="20141230_195310141_iOS" src="http://lh5.ggpht.com/-uIPomL7pLG8/VKRcyBb8ruI/AAAAAAAAAuE/qyrgQswQgVQ/20141230_195310141_iOS_thumb%25255B2%25255D.jpg?imgmax=800" width="589" height="277"></a></p> <p>Upgrading the Flip 15 is not for the faint of heart. It is ultrabookish in form factor. What that means is no easy access panels. You get lots of screws with some of them hidden under rubber feet and a cover you have to pry off. I found the <a href="https://www.youtube.com/watch?v=b9qiu_q9cl8">tear down in this video</a> very useful. My tip is to start prying the cover off by the power connector. Continue loosening the cover all the way around. Slide the cover off by moving it away from the head phones connector.</p> <p><a href="http://lh6.ggpht.com/-NZno4tg6vTI/VKRczhUHNlI/AAAAAAAAAuM/gu7PiNOFo3w/s1600-h/20141231_021332939_iOS%25255B3%25255D.jpg"><img title="20141231_021332939_iOS" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="20141231_021332939_iOS" src="http://lh6.ggpht.com/-gPWVPowpZl8/VKRc0jhHlkI/AAAAAAAAAuU/kB53hziOrFc/20141231_021332939_iOS_thumb%25255B1%25255D.jpg?imgmax=800" width="599" height="316"></a></p> <p>In the picture above you can see the new memory in place in the lower middle of the picture. The SSD is under the silver and gold colored ribbons in the lower right of the picture. I did not utilize some of the existing foil/plastic shielding that was on the original case. It appeared that it was primarily there as an insulator between exposed components on the HDD circuit board and the rest of the machine. The SSD has no exposed parts. It an all plastic case. I did reuse the adhesive wrapper/shield on the bottom portion of the drive as it is also used to secure the drive cable connector.</p> <p>Since installation of the new parts, the machines performance is much snappier. Windows 8.1 Pro launches in ~4 seconds from a cold boot. Development environments start up much faster. Overall, much less time is spent waiting on the machine.</p> Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-12221819262250137732014-12-22T21:39:00.001-06:002014-12-22T21:39:39.779-06:00Today’s digital notebook experience<p>Let me start at the beginning. I usually like to start in the middle or at the end, much to the chagrin of friends and family.</p> <p>We have tried to replicate the notebook digitally—mostly successfully. Let’s consider a few aspects of the digital notebook experience:</p> <ul> <li>The physical manifestation of work. The lack of the concrete. The feeling of impermanence. This can be overcome by making a hard copy. But that just doesn’t make sense.</li> <li>Instant access. Today’s technology with instant on tablets and software like OneNote are addressing this. And now with the cloud we can often access the same notebook from multiple platforms.</li> <li>Search. In a physical journal we can quickly and intuitively find content. This seems to be a more difficult task with the digital notebook. However, with a digital notebook you can use search against handwriting and simulate flipping through pages.</li> <li>Poor vendor marketing of the active stylus. In my experience, you must have an active digitizer to do good note taking or drawing. With the exception of Microsoft Surface Pro and Samsung, even when a device has the capability the vendors are failing to identify the feature. For instance the Sony split and HP Split X2s offers an active stylus option but you don’t really see that marketed well. On top of that, many people don’t understand the difference between a $40 active stylus and a $5 capacitive stylus from the check out line. </li> <li>Pressure sensitivity. With the active stylus this has greatly improved.</li> <li>Palm rejection. This used to be a horrible issue on the dual technology capacitive touch and active stylus systems. However, this has been mostly resolved. I’ve used tablets from HP and Sony that this isn’t an issue.</li> <li>The experience of the feeling of the pen or pencil moving across the paper is gone. <em>There is something magical about the feeling of a pen or pencil on paper. </em>Today’s active stylus typically has a very slick feel during use. A long time ago, Cross made a stylus insert for their pens. This was in the day of Palm Pilots. It had a really nice feel to it. It came very close to the feel of pen on paper. I have seen no modern equivalent.</li></ul> <p>The digital notebook experience has come a long way. With the wide spread adoption of tablet computing I really hope we continue to see advancement in the active digitizer field. I would hate to see the technology lose to the far inferior capacitive touch only stylus.</p> Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-55354153172757341582014-11-16T20:51:00.001-06:002014-11-16T20:51:29.555-06:00Spike exploration: sftp, zip, config and Windows Service<p>I did a spike exploration to find out what is involved in creating a Windows Service with event logging. I also wanted to find out what is involved in working with sftp, zip and configuration with C#. The code is available on github: <a title="https://github.com/k0emt/sftp-windows-service-spike" href="https://github.com/k0emt/sftp-windows-service-spike">https://github.com/k0emt/sftp-windows-service-spike</a></p> <h2>sftp</h2> <p>In order to test the sftp code I set up a Linux VM in the Azure cloud environment and created a user account on it.</p> <p>I use the ssh component from <a title="http://sshnet.codeplex.com/" href="http://sshnet.codeplex.com/">http://sshnet.codeplex.com/</a> for sftp. It is very straight forward to use this component. The key for sftp is to use the <font face="Consolas">SftpClient</font> class. Upload a file with the <font face="Consolas">UploadFile</font> method. The sample code is in the ConsoleSftp projects Program.cs: <a title="https://github.com/k0emt/sftp-windows-service-spike/blob/clean/ConsoleSftp/Program.cs" href="https://github.com/k0emt/sftp-windows-service-spike/blob/clean/ConsoleSftp/Program.cs">https://github.com/k0emt/sftp-windows-service-spike/blob/clean/ConsoleSftp/Program.cs</a></p> <h2>zip</h2> <p>Use System.IO.Compression for creating/expanding zip files. <p>To use the ZipFile class, you must reference the System.IO.Compression.FileSystem assembly in your project. <p><a href="http://msdn.microsoft.com/en-us/library/system.io.compression.zipfile(v=vs.110).aspx">http://msdn.microsoft.com/en-us/library/system.io.compression.zipfile(v=vs.110).aspx</a> <p>I use <font face="Consolas">ZipFile.CreateFromDirectory</font> in the code above to zip an entire directory before sending it over sftp. <h2>configuration</h2> <p><font face="Consolas">ConfigurationManager</font> is the class that is used for working with application settings.</p> <p><a title="http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings(v=vs.110).aspx" href="http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings(v=vs.110).aspx">http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings(v=vs.110).aspx</a> <p>I used it in the service code to pull in a setting called user: <a title="https://github.com/k0emt/sftp-windows-service-spike/blob/clean/TransferService/TransferService.cs" href="https://github.com/k0emt/sftp-windows-service-spike/blob/clean/TransferService/TransferService.cs">https://github.com/k0emt/sftp-windows-service-spike/blob/clean/TransferService/<strong>TransferService</strong>.cs</a> <p>In order for this to come together, you must create an app.config file in your project and change the property setting in Visual Studio to tell it to deploy when the project is built. <a title="https://github.com/k0emt/sftp-windows-service-spike/blob/clean/TransferService/App.config" href="https://github.com/k0emt/sftp-windows-service-spike/blob/clean/TransferService/App.config">https://github.com/k0emt/sftp-windows-service-spike/blob/clean/TransferService/App.config</a> <h2>Windows service with event logging</h2> <p>Create a Windows Service by choosing the Windows Service project template.</p> <p>The Windows Service code must be installed and uninstalled. It is possible to create an installer/uninstaller. I opted to use the command line for this spike.</p> <p><a href="http://msdn.microsoft.com/en-us/library/y817hyb6(v=vs.110).aspx">http://msdn.microsoft.com/en-us/library/y817hyb6(v=vs.110).aspx</a> <p><a href="http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx">http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx</a> <p>I went here to learn about Service Methods – that is the kind of events to which the service can respond. You can use the Visual Studio designer to enable the events you want handle. Then you’ll need to code the events. For this spike code I have it make an entry in the event log for each event type that is triggered. <p><a href="http://msdn.microsoft.com/en-us/library/System.ServiceProcess.ServiceBase_methods(v=vs.110).aspx">http://msdn.microsoft.com/en-us/library/System.ServiceProcess.ServiceBase_methods(v=vs.110).aspx</a> <h2><font style="font-weight: normal">Installing and Uninstalling the service</font></h2> <p><a href="http://msdn.microsoft.com/en-us/library/sd8zc8ha(v=vs.110).aspx">http://msdn.microsoft.com/en-us/library/sd8zc8ha(v=vs.110).aspx</a> <p>Install with <font face="Consolas">installutil.exe TransferService.exe</font></p> <p><a href="http://lh6.ggpht.com/-ckrrcbQqL0k/VGlilyvFkII/AAAAAAAAAso/lNGH5Q5DhCQ/s1600-h/image%25255B6%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://lh5.ggpht.com/-HpeZo2dROCs/VGlinH2Tx4I/AAAAAAAAAsw/Fi5iCXGKXXw/image_thumb%25255B2%25255D.png?imgmax=800" width="668" height="402"></a></p> <p>Go to Windows Services to see that the installed service is running. See, the <font face="Consolas">Spike Transfer Service</font> below.</p> <p><a href="http://lh5.ggpht.com/-3L-4cfOUAZE/VGlin8a8ddI/AAAAAAAAAs0/Zjw7sSAcPY4/s1600-h/image%25255B11%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://lh4.ggpht.com/-zLMRTAWJZS0/VGlioqZA67I/AAAAAAAAAtA/Xj8JkDHXV9g/image_thumb%25255B5%25255D.png?imgmax=800" width="664" height="147"></a></p> <p>Uninstalling with <font face="Consolas">installutil.exe /u TransferService.exe</font></p> <p><a href="http://lh6.ggpht.com/-c3sudS3ycWw/VGlippliFAI/AAAAAAAAAtI/Wlb69Pr6b_o/s1600-h/image%25255B7%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://lh4.ggpht.com/-VAfQOevq1CE/VGliqdD9X2I/AAAAAAAAAtQ/vBlLVu7_nQk/image_thumb%25255B3%25255D.png?imgmax=800" width="664" height="260"></a></p> <h2>Event Logging</h2> <p>For event logging a new <font face="Consolas">EventLog</font> is created. An event source must be created and the source has to be wired up to the <font face="Consolas">EventLog. </font></p> <p>Once this is done, the <font face="Consolas">WriteEntry </font><font face="Consolas">method </font>can be used for writing to the event log.</p> <p>You can go to the system event log panel to see where the events have been logged.</p> <p><a href="http://lh6.ggpht.com/-NMIT8lhd9i4/VGliq8FZiJI/AAAAAAAAAtU/u8LjAVnz_i8/s1600-h/image%25255B15%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://lh4.ggpht.com/-s5AACfvgSgM/VGlir_LPy2I/AAAAAAAAAtg/q1gW7r6S6PQ/image_thumb%25255B7%25255D.png?imgmax=800" width="662" height="470"></a></p> <h2>Summary</h2> <p>Overall, I was pleasantly surprised with the ease of accomplishing the spikes target tasks. There was also decent documentation and examples available.</p> Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-15281540914627747642014-07-16T16:47:00.001-05:002014-07-23T22:50:02.921-05:00Oracle SQL Developer Date/Time formatOne of the most super annoying things about Oracle SQL developer is that it defaults to a not so useful (at least to me) date format along the lines of 15-NOV-11. I prefer to see something helpful like an <a href="http://en.wikipedia.org/wiki/ISO_8601">ISO 8601 format</a>ted date/time.<br />
<br />
The solution is to, in Oracle SQL Developer, go to: <span style="font-family: Arial,Helvetica,sans-serif;">Tools > Preferences</span>.<br />
<br />
Then in the Preferences dialog, select <span style="font-family: Arial,Helvetica,sans-serif;">Database </span>and drill down to <span style="font-family: Arial,Helvetica,sans-serif;">NLS</span>.<br />
<br />
In the NLS parameters you'll be able to set the Date Format to:<br />
<span style="font-family: "Courier New",Courier,monospace;">YYYY-MM-DD"T"HH24.MI.SSFFTZR"Z"</span><br />
<br />
I have found that on some systems, you may need to use a setting like: <span style="font-family: "Courier New",Courier,monospace;"> </span><br />
<span style="font-family: "Courier New",Courier,monospace;">YYYY-MM-DD HH24.MI.SS</span><br />
<br />
<img alt="" height="393" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAAKwCAIAAAD1GjtvAAAgAElEQVR4nOy9eXBTZ57vffp935p6+07dqltTPVO33qq+mc7MhHSHJelggrsJd/rOnewLkISE0GnCBOhOgLAk6YaQDA5gDAkhTdx0d5ok0LiJ2UxuA14wtvEq29r3Xecc7TqrdkuW7PD+8RwdHUlHi40Njv1861OUdPScR8eSOM9Hv+eRhAwPD/f09LS0tFy8ePH06dN//OMfjx07duTIkcOHD9fV1R08ePDAgQP79+/fBwMDAwMDAzNnsn///tra2sOHDx89evT48eNffPFFY2MjMjw83NbW1tjY+Pvf//7AgQPbt29fNOezkGdhERYtWninDxIGBgYGBuY2ZMOGDb/+9a+PHDnypz/9Cblx48ZXX3117NixDz74ANx8+vTpsXJJZ1K25Z3NuFju9EF9+5KGgZmKpG5jRmG+PZncU1zJS+72nCFFB5pJZ+2j/3Z7Drts1j76b+Pj46dPnwZusHnz5traWqS5ufn48eMffPDB97///YaGhkQiEQ6H2VtLUJBQ8YSLJyJItFxit5CynVeSyK2lxONQmBKPZ16CE88tPu95YcqFnkzK9jonQk/y0bt9oXJDZkIIEsjEn4mvZLwl45lI3LcWV8k4byF4uWCClG1cOhXeb4njLPGHFHtwij2k4HkRfWbBs8+/SMBrhn8V8S8t8EoDLz/w36RwVCoxAOWdlqdkaJhEUqnUy//+r2Gd0t98iWy5RLVeolovMa2Xgq2Xgq1NkdamaGtTvLVppLUp0dqUaL0w2noh1XohXYRUwdXR1guJ1guJ1qaR1qZ4a1O0tSnS2hRsbQq2XmJaubsjWy75my+FdcqX//1fU6nUyMhIKpVqaGj4/ve/v3nzZuTcuXOgxtDQ0BCPx29xnCgrCpPzhmJP4a3owpSYxG1zhVmmCznjXwWZhmF39mQ6h/7JhyoImZtCdRDag6hAlJaGiQrELXrDdNvDhARiStShwmaFBzlV6lDoDcIthd7Aq4PwdVWoDozAHkRHKNFBZ4ocYMJJpVIv/tu/BlUy/1/P+f96jvjrOfKv56jLjczlxuDlxvDlxsiVxuiVxpErjYkMoxOB32vkSmP0SmPkSmP4cmPwciNzuZG63Ej+9Rzx13PgroMq2Yv/9q+pVAoMi8lksqGhYdGiRcgXX3zx2muv3X///clkchKDjTCVOEHpcVT0QSwc1OPlMpJJse2it+ZlCksRIDPHKibtFmVzGyQDZgZm0j5RWiP8YildjZioXkyiSjEh8yhtFVPlHGXf91eYSu639HFOyBJ4UchLsWKDaMkBqEMl9QbRcapwbKpwGJqmpFKp1T9bFpQNui80+C40+C80EBcayKYGqqmBbWoIXjodvHQ6cul09NLp+KXTI1+fTnx9OvH1n0eLkPj6z8ncq4mvT498fTp+6XT00unIpdOgQ7apgWpqIJsaiAsN/gsNvgsN7gsNQdng6p8t46UBHNv999+P1NfXg3UMkUhkcoNE3payllB2cBVVhLyrk8tIueQZA5/brAsTNYaJ6sJ0GMPtLE7AzLTcShGi9MxFMXuYWmmYtDrMEGkAmUJ1qKRNieOckDoUe2xFjaGEN/DqwL+0CtUBnKxEvaH0IDV9lpCXVCr1/PJqarDPeeaE+8wJ91cnvF+d8H91gmg8QTWeoBpPsI0ngo0nwo0noo0noo1/ijf+KZHhD7vefW71JsAfdr0ruiXe+Kdo45+ijSfCjSeCjSfYTLdE4wn/Vye8X51wf3XCfeaE88wJarDv+eXVQmkYGRk5ffo0cuTIkUWLFqXT6VsfNoTPQeWWUOyxmxIJKExCLNPnDdPqCrNDF6A3zLLcSr2ByE0Jb6ik3nB7qg5lveE21xumSh2cFRQeSh/kFKpDsSe3xCqH0t4QLLK+4Y6rQyqVWvWTKrKvC/2yHvuyHvuy3vVlvftkvfdkvf9kPXGynjpZT52sZ09+Gjz5afjkp9GTn0ZPHgM8t3rTzUyeW73p+Nu/ydsSPXksevLT8MlPgyc/ZU9+CroiTtb7T9Z7T9a7T9a7MneKfllP9nWt+kmVUBpisVg6nUbq6uoWLVo0NjZWOBhgmK+tTfH226deeunwY4/tWrr01SVL1ixb9vILL7zR3S3xeLylH3TRx1r0cb+VmoGoBPAqUOLWYrvk3VHeoc4cY7jjrjCFugDVYZZlEoUH0XkKoTpMWhom6g0TlYYJCcS02sOE1iJMbUocZOXeUEnVobD8UGKB5K1PVYjaw3S4Ap9UKvXs4oXejhbTsTrzsTrLsTr7sTpH/UGs/qCzvtZdX+utr/XX1xL1tUR9LV1fy9TXsvX7g/X7g/X767fvyLME4eX67TvY+v1MfS2d2d1fX+utr3XX1zrra7H6g476g/ZjdZZjdeZjdaZjdd6OlmcXL8yThvHxcWTfvn3FpOE3vzm7ceOJffvOnzvXq1BYdTrnhQs97733h1Wrtj7wwBOXLl2lKCqUu3ABjHzCB1poBsUsYRIFg4kKQTKZFN3IJ1Gk3jA5b5hRujDlxjAdrgC9YTZlEtIwiZWS0ycQ0ycNt64OldiDs0AgbkUIKt99oupQzB7KeoNovUF0tkLoDZWUHMq+AZ5ub0ilUk8/cJ/72hXdRx8YPvrA9NEHlo8+sH681/bxXuzjvc6je91H97o/2ev/ZK//k73kJ3upT/ZSn+xlMtS/uU3oClljeHMbk2lMZnZ3f7LXfXSv8+he7OO9to/3Wj/ea/noA9NHHxg++kD30Qfua1eefuA+EWnYu3cvkIbCc/dLL/1h48YT+/dfOHu2Ryo1q1TY2bPde/b8fuXKLfff//hdd1XZ7fbCB7rwsS6UhrxMrsYwaYEoLROF6pAnCndcBe7gAD+Txx6Yb1Fu5VMVopYwfbWECj1gckJwi2N5iWAFKd2+klRyv8WOs6xnVCgTxZ7T0uowVWskiznEFCaVSj258F5n89fq2j3a2j362j3G2j2mut3mut32ut3Yod3Ow7udH+72frjb++HuwIe7iQ93Ex/upgR8umXrc6s38X/Fc6s3fbplK7gJNA5kdnd+uNt5eDd2aLfj0G7Lod2mut3Gg3v0B/doD+5R1+5xtnz95MJ7RaTh/fffLyEN779/ccuWz1988fDjj+9auvTVqqoXFy9+oarqxf/1v7bedVfVV181BoOhYDAUCoX5R1jwyNqbViJ8Vl1yAEPgKZahwwiCIMjhoXh8JB7n3/SP5CEqD6KUyMhIIpFIJhKg0sDD30tWdATSEA2HIxWQ5wQlEApBaYAHVAg/0oszHbpA01MMRdGQ2QdJUmKQBMERCBAAvz8gxOfzA7xenxCPxzsR8rSgFC6XexI4na5KwHHnpMEwvCRFU0QyKqVsYyAJhceZt50HyEMhQB6ECOoQ+c+pUB58Pj94tRSaQ94SSZpmBOfDIC8PQn/IPZFnz/BglKuQCUnDsu/9rfrTD68++XDzUw+3PvXwtace7nzqpz3P/LT/mZ8OPlM9/Gy1fEW1ZkW1dkW1YUW1aUW1OZcPn1/13OpNvDk9t3rTh8+v4m81rag2rKjWrqjWrKiWr6gefrZ68Jnq/md+2vPMss6nll176uHWpx5ufurhq08+rP70w2Xf+9tUKhWNxnjGx8eR9957b9GiRemxMYZl83jppT+cPSuVy3GSjNy8edNqJb7+Wvnhh23r1n3x6qsn77qr6qvGRjYYDIZCQeGjG4mEI5FINBqJ2i+uRFY2OaLRWFRyCEGQQ4PihYYchg4jyKpLaDwWj+d5hZhmZEb3EY6ycxpCMxAWKoS6EIuPxOLxWCwejcWjsVg0GotEY5FoDPxp4UgkHA6HxDwgKE6IIzP2s2KUEYJgkA0G2YLnqBTgK4BKwVYA15iiK4fOAQwStwhJEZBZSoAghfgDBIc/4OPx+b0ZPF5fBq/bI8TD43JPBJfbWQoX7rwVnBheEgxHJw/mQCcGynML3aKV3ItYbygmcr+cVeQ+LDjuxJ1O4SPJyYTL5QQOkXn63G6P4Kn3ejxe8PLw+nxeoJjAOAMEeIGBVx1JUSRFgXNUoUAw3Fk3c3IWnM9D4RyygwIY+EonGi1LKpX66d99V/lJ3V8feejyow9dffShlkcfan90SdfjS3oer+p//EHJEw9Kn3xQ+eSD6icf1D75oOHJB40CDq9a8dzqTXkVmudWbzq8agVoYHjyQe2TD6qffFD55IPSJx+UPPFg/+MP9jxe1fX4kvZHl7Q8+lDzow9defShy488pPqk7qd/991UKiV0mvHxcWTPnj0LFy5Kp9OFb/JeeukPv/1tU2vrsN3uSSaTajXW0NBfV/f16tVHV606dNddVWfOfFVQ2gElByBiQBrskUgUVB04gRASyyc2eCjXLnifEPMMboAfiRXUIXiNKGESXAO+fRwYQzzGHw94IgWlBd4MCkZ9flzPwogAhnMBBSM9U3oIB++/Kxm5p2S0pmjwv2uKRgiSIMm8QWJCZEcUyGzBFxDIgT/g8we8AkXgLSHXD7xuj5cfNgpH+kmM7mWGdtyJ4U4Uv5UBHi87otsd6C3gsNkrpWxvZXYHlGxpd4jeS3ZHIQ4H6kDRAu3A8t0C59wiRyZcLuFTz/sEkAmP1+vxer1eH5jA8Pn9fn/AHwgEAkSAIAKgskVS/OkOnD/5t1X8mZk/q+eUfkOhYN5bx3BElMqK05FwODI6mvrp3/0X1ScHLz9SfeXRpc2PLW19fGn74w91Pf5QzxNL+p+okjxZJX2qSvlUlebpKu3TVYanq4xPLwYcfm7Fc6s3oZnkXT783Arj04sNT1dpn67SPF2lfKpK+lSV5Mmq/ieqep5Y0vXEQ+2PP9T6+NLmx5ZeeWzp5UeqVb+t++nf/ZfRVCocifKMjY0j77777oKFC9PpNEHSebz00h+++KLz6lWJRKJQq9USieLw4TPvv//n55//6OWXf3fXXVUNZ85Q3GAWZJggw4LhEwyrkWDYdmElsuKiPRSOhIBAXLSH7ZdWIqvqDq1CEKROEo1IDvHzF3WSmPDqyiZHxH6Jn99YeckRjcXsl1Yhqw4dWoUgyGFJLC5oflgSi8diQ4cQ5NChw5ltQ6BcERvKbEFWXUJHYvFhwX5D0Vg8GkObVmUOYzAWjsbC0WgoEg2Fo6FwJBiKBEPhYDDMBsNsMEizQZoN0gxL8dAsRWevkgxLMgzJMCSdD8FBEzRNUEKYAAcdoOgAmYM/B8pPUn4ii68opC9A+gKk9xbxE14/4Zl6Ahy+LO6K8Lu9fhdkRuIWo+xeTo+vGLjbi7u9mMuDuTyo012IA3c5cJcDd9qx4qC4EFtpHJi1NHbUMnkcZltJrPbKMZXBZrSUouzupqI7AgQtcxubANb8u8gcuU34V1isdosN4ABYbQ6r3WG1owAbwAHAbChmRzHu2cRwO4Y7MKcDc6IA3Ik6XajThTldmNONu9y4y+N0eZxur9PtdXm8Lo8PvCzBOcfrD/j8hA8oLEH6CTJAUgGSIigqe37mTuAsyZ3ngwCayQwHbJBmQwwbYoIlCFdCcnT0J9/7r5rjH15esbx5xfKWFcvbVy7vWLW8a9Xy3lXLB1YtH1q1XLpqufL55ernl2tfeNjwwsPGF5YBnlu9yZrJc6s3HV79fN4W4wvLDC88rH3hYfXzy5XPL5euWj60avnAquW9q5Z3rVresWp5+8rlLSuWN69YfnnFcs3xD3/yvf+aHB1lQ2GesbExZPfu3fMXLEyl0oWjBZiekMkwMD1BkpGzZ6XHjnUinyH/75d/88Br953+y5kAyQQomqAYgmZJhqWYzMMXDLFB6/kVyIqLNjYUDlovrkBWXrBGQramFQiCrGyyRKIhW9MKZOUFWzQciYYlhxDk0IDwQkRShyB1kmg4Eg3bmlYiKy/aotaLKxEEWXnREY7ErE2rkJWXrNFYJBqTHEKQQ4OR6GAdgiDIIUkU+Meqi/ZYRHIYQVZddMQjMQB6cRWy8hIaicUj0aE6BKmTxAYOIcihoXA0ForEQpFYMBwNhiNsKAKeRToYotkQxQYpJkgyQZJmCZolaMZPAugCGB9B5+EFBHgogIfHDyABbh5fFhcHkcXL4cwnkMUTcHkCzgnj53Bz4JMFqwgfh4sDLY8XdXpRp9cBuROgxXAVMLGePXZcAOa2YW4b5rKiAhxOSwazHc+Ame2Y2cZhygHNw2gtgcNodRgsJbAbzHaD2a6fJDa9KR9dFuvEMFq1pbBoDRZNAdo8ynRi1RotoCseHaDgvnJvBVjzyRy8nscMsBl4LAC7kcdqN1rtJqvDZEVNVtRkQ80cmNmOWeyYxc6LHW514FbUaUOddhSIo8uBuRy4G8WBa3owlwdzeXG3F3cDPQXKG3D7CI+P8PhJrx+Mg5QvQPm4d2i0P/tejglQDJGFJSgWWEWGoAhMeRLJ0WX/8N80n33avOaJ1jVPXFvzxPU1T3Suebx7zeN9ax8b+PkjQ688InvlEcUrj2jWPaJZ94h+3SOGDIdffon/KqfDL78kukW/jttR8cojslceGXrlkYGfP9K39rHuNY93rnn8+ponrq15onXNE81rntB89umyf/hvieQoxYZ40kAa7pu/YDSVLhh1CDA90dYmBdMTdrunoaG/ru7/IJ8hddE1//eJ/+vk6b94A5QvAMZFxk8yAYoluEcnRLGWsyuyCyEP9EXYUIS1XFyBrDxvibChiOmCYJ0kgiDIyvPWCNtfhyB1veEIO3Ao91akdiBqurgSWdlkCkfZsP18/t5N5oikFkFqB6LBSDQYGaxFkFpJrK8OQeoGg5EYh+3Sitz9Vly0s+Fobx2y4qKdCUWZUIQORqhgmGTDBBMimFCADvrpoJ9ifRTjJRkvSbsDjDtAu/wACuAE+LLgPgr3kbiPxL0cmFdw2UMUgnoI1E2g7gCPA+Di8TtcfrsQZxZbFl8+uM/m9FkngDcLnsUyabBSmLN4ckA5TEVxm1C3yeE2Qm4N0y2ClmRCB2N3GbI4DTanPguus2awYFoOVGtGNTk4NGaH2lQMu9pkVxvtaqNdVRSbymhTGWwqg00pjjUHfXkU+Viy6DjkE8Ys15nl2iyyfEwcGhHkWh5zCfJ6k+eTbSPXmrPbdTxmhTgWhY57BJQc3GOlMvDY1MYsGqNdY8qiNdl1ZofO7NBZHDqLQ29x6K0OvRXVWzGDFTMC7JjRjpvsuMmBmx0ui8NlQV1W1G3F3FbMY8M8Ntxrx712p8/h8qEuP+r2Y54A5gngngDuDeBgQPQRLh/p8pNuP+X2U+4A5QnQHATtIWgvwXCQjJdkfCQ7OUYSyf/53/9e+5fP219/uX3j6usbV9/45eruX63u+9Xq/tdfGHr9BenrL8g3v6De8rx6y/P6rav0W1eZtq4yF8FUcBXsAnaXb35B+voLQ6+/0P/6C32/Wt39q9U3frn6+sbV7RtXt7/+svYvn//P//4PI4lRPxXkSaXHkLVr1/7wvgXJ0ZSDH58ygOmJ5ubBvOkJ5DPkXXLlFudjyGfId7/4G6efcgUod4B74Hwk66dYPxUM0OavnkWeOWchmRDJhig2TLFh2nTxWWTlWVOYZsOG8yuRFRcNbJgOhulgmAqG6WCY7qtDkLqe7IUIHYyABnQwwu0SjNBB29kVyLPnbTRoEIrQoSgTkhxAkAP9UUZwuecgghyUMKEoh+XSs8jKc9YoE44y4SgdilLBKBWM0EF74woEQZB9vZEAE/LTIR8d9JJBL8F6CNZNMK4A4wrQTj+N+yjMS6FeyuEhhdjdRB42N2FzAQI2V8AKcHJYnAGL08+B+825mDCfCc9ixH1GjMcLMABQEfSoJwfHhHCLYM9BdwtoC7GJoLG5NTZXDlaXxupSF8WptjrVFqcKUhx1MaxTSPFnh6fMceIqM64UB1OYMIUJUxhReRaH3OCQGRwyg11msEv1AJtUZ5PqbMPlsQ7rrMNa67DWOiSOZUhrGdLkM5jFXB61CBIOkwgqk0RlGpgYRg6lOP1KA2BAiCoPowi5/UiURonSWLA711LCozIABlVGgASgNkrUxkGAyjSoNg0J0ZiHBUi1Fh6Z1iLTWWQ6q0xnleuscr1Vrrcq9DaFwaYAJscJn0NldKh4RzQ7NGZUa8a0FkxrxTjjtOF6m9NgdxrtLqPdZXK4TKjbjHosmMeCe624z8q93fLbnH6by293BezugMNNoOCtnZfEAD4S85E4eIvop3Du3SPt9NPOQAmYQlwBxhVgYiPJFfN+oLp4rve9HTfe2njjrY19b2/oe3vD4Nsbhn/9mmLXa6pdr2l2vaZ7d71uz3rTe+tN76+3vL/eWgRLwVXT++tN763X7Vmv27Nes/s11e7XFLtfG/7Na4PvbOh7Z0PfOxtuvL3xxtsbe9/foWo6t2LeD+KJpJtg3AQLGE2PIatff/fe+xYkRlMW3J9H3qcntFrP2bPSTz/tRD5DNuOPvWJa/pT8wWW9937nT9+R2FW4j3L6aVeAdgcYD8F4CNZLmv/yLPJ0o8VHBf10KECHAkyIMF58Bln5lTFMMGHCePEZBHnmnJVgwll66hCkrosJE8zAPgRBDgwIb9WdW4k8e1HHX0ZWfmUKE2yYZCMEGyFZyX4E2d8bIYOCy711CILs74uQQYCtcQWCrGjSB6NkMEKwkQATDjDhABMJMJGOAwhyYMBDhdxkyEWwzgCL+xncz6A+GvXRDi9td9NWN2lxkRYXaXESZidhdhImnCdgBGABIxYw5ODXC9ChAJ8e9ekADp/O4dNyeLV2r9bu1eRh86ptHiEqgFWIW2V1Kwux5KAogyuLOYt8mpGZXTJTIU6ZySnlMWYZzgcfNuLDBo4hiIDhSjBOFYVPTe7TVNEThA0ZsCF9lkE9NqhHB3WoRIdKdA6J1iHROgY47AMae7/G3q+x9attfRxWDlWWXnEsvUpxepSWHqWZQyFOt8I0GeQ8RiE3ALLJYegCSIuh75LqO6X6Tqm+Kw+ZEEMxbkh59Dek+hsyIYZumeGGsI2Mo5vD2C0zdsuNPXJjj9wAyFzl6JUbexUmQJ/C1Kc09SnN/QCVeYDDMqC2SAAa66Ama3gZEbQP6+xSnV2qt8sMDnkWVGFElSZMZQbgagsOpFljdWltbp3Nrbdzb58MqNeIeo2o14T5TJjPhHHv6CzOgMUZsLoIq4uwukibm4eye4TQDm95UCE+OjqSrP35S18ePGBoPDX84V7J/nckNTukNTsU+3Yo9+/QHtihPbDdcGC7sW67uW6b9dA266GtaHGwAmyHttoObbPUbTPVbTce2K47sF13YIdq/w7lvh2ymh2DNTsG978j/XCvsfHUlwcP1P78pehIEvMzPKOpNLL6jXfn/WhBYjRlxP1GLIdjx9tfeeX3b7/95y+/7NBq0evXtUeOfP3yy/uRz5BXTMuflj+4rPeHC1rvuqvp75HPEIPDg/po0C8eYJwB1kWYTj+DPNVo9lIhLxXyUSEfHfIbLjyNrDhjCPmpkJ8KaRoFcwXPXtBQIV/PQQQ52EmH/HTI33NQMI1Q10mHNWdXIs9e1DBhPxP2M9Yzz2Zvfvqczc9IPkCQfT0RPxPhLweYiPZcdj3lGVMkYLr4jGBW4y+GcMeBzLVnLijIsIsI4YEg5mdRP+vwMXYvY/PQVg9tcVNmF2V0kQacNOCEHiP0GKEDoAEdGtAK0DgCGkdAgwY0qF/j4FAD7H613a+y+3iUNh6vwuZVWLPIeSweWQFSi0dqFuKWmt3DeZhyGCqDi8OYw3AuQxNncCJIDIU4JQbnAI8+S38OOIcO79fhfZAM/ZWjn0KcYmTvq7KDx/q0WJ8W69VivVq0V4P2aNAejaNHzdGtdnSr7d0q+w2V/YbKdkNp6xLB2qW0dimsXQprpwiWToWlU16UDrlZBBmP6fokkPIY82gHDE8OQ/uw4VohQwB9Hu3DpTEUAnprHzK0D+k5BLtcHzZcHwa3Zhg2XM/BeH3Y2CE1COmUGjtlxk6ZsQsgN3bJTTd4FKZuhblbYe7OCFyv0tKr4uhTWYAd9gM01gGNbUBjH9DYB7X2QR341zGkcwzpHMMGdNiASg2ozIgB5CZcbsYVZqfS4lJaXCqrW21zq20ejd2jdXi1Dq+Of2uH+vg3fgY8YMQJo5MwOUkOF2kGuCmzm7Jw0FbPBHCTIQfufmbBvX94b7fy6teujmZX29eutq+9bV/72r72tX9NXG8iO5rIjia6o4npaGInDtPRRHdwnRDXm3ztX/vavva2fQ3uyNXRrLz69R/e2/3MgnsdTreHCtu9DE8ylUZefOPde360YCSZ0qMBPRrIvAP261C/RI3Vftjwwov7n35m7yOP/Gbp0lcXL37xgR+vQD5DnpI/+HDvvQvb/gfyGfI3n/0/f/zyL599+RdOrHw06mMwP+MMsE4i6CKCbjIE8FC5kLkU3pq57M0SFoGeKBEeDx320BEPFXZTYRcZdhJhnAihgSDqDzp8rN3HWL2MxUObXbTJSRmclB4ndRihxQgtRqgdGdCA2hFQOwIqHntAZQ8o7X6AwpZFbvPLrT651SfjsfikFp/U4gUMW7zDZo4hDs+QyTNk8gwWIDHyuCVG96DRPWh0g8sSgwgDpXBx6ItjcPXfInoR+krSq+NxAnp4tDl0Z8E5NBw35jzdlaCdcpxi5LbRlH2asBsa7IYa68qCdqnRLhXapUI7VY5OlaNT6ehQOjqU9g6lvUNhv66wX1fYrits1+W263Jbu9zWLre2y63tsqJck1nykRZibitkOA9TJbQKGRJiLKQFMFg5hkKaBw3NEiF6IS15DOYh0iGHBJC/S+ugIcuQoXXQ0JZL66ChbSgL5zTDxmu8/XAKZbouNV2XmTo4zJ0yc6fc3Ck3d8nNXQpLl8JyA6C0dCut3Uprj8rao7L2qmx9anuf2p4pO9n6NfZ+rWNA65BwxSoUVLCGDRiokElNTpnJKTe55GYXqLkqrR6l1aOyeVU2r9ruVdt9artP49v/b48AACAASURBVPBpUb8W9YP3ijqMewOpxwk9Thpw0oiTRicFMDkpk4suxOwuit1DeUmmfv1LGx+895l7vv/MPd9/dt5dK+/9x1U//MFz9939/H13vzD/n1cv+JcXF97z0qJ71iyat2bRvLWA++etvT9zYdG8tYvmrVk07+Xcq2sWzXtp0T0vLrxn9YJ/eWH+Pz9/393P3Xf3qh/+YOW9//jsvLvA3W188N769S/5SBb10lYPIyRHGrS5b5QBMpOzrVf2+Zmm33/5Vf2Jhk//dLr+8wbkM+Thnh8uaP0f3/nsO8c/bzj+RcMfT50xuyiLm7J5aLuXsfsYh59F/SwWCOJE0EmEXCSHuwgusnybAsLiUAWIbfRwFyJuKuIiI04yjBNhjAihgaDDH7T7gjYfa/GyZg9jdNEGF6V3Ujqc0uKkBiPVKKlGCaWDUDkIlYNQClDYAwA5wBaQ2wIyDr/UmmUYYPENCRg0Z5GYvRwmr8TkHcil3wjwDGTo5zGI05ePOx99UXoBhilCX5QeUXTubp27W+fK4wZAm6UrizOLhqMTosk+GuJopwNXSXKeozw6Nc5ODd6pwTvVInSosQ4V1qHCrqvQ6yr0uhK9rkTblWi70tGucLQrHNcU9mty+zW5vU1u45CVoVVm5ZAWw9JSjGEe84RoHjY3DwFMxbg6OAmMxbgiARjyuJrHoJD8Tpp5JMaCxoarwFQGDdlmBc7ROpgjRpwnCezqmhRgviY1t8s4rsvM1+WWDh6FBVSMuHqS0npDaetWcfSo7N1qe4/a3qO296rtfVpHn9bRr0X7ddiADpPoMYkelxjwQSM+BKbPTC6pySU1u2Vmt8zikVs8oOgLisEqu09l96sdfjXqV6OglkxoUUKLkToATupxSu+k9E7KkIU2OGmjKweTm4fJw0mGQ/FkWcLTiYsKWzxMHgkgDf/yowUjybQGJQQENGhALcTBoXEEkM8Q5DPkO58h9Z83/O7zBj1OGpyU0UUBe7J6GBsoZWTUAQ0EgT3gRMhJcuB5EPk4C7bgJL97eCqIOKkIToYxIowRYZQIOQIhuz9k8wWt3qDFy5o8rMnNGFyM3kXrnLTWSWtwSo1RSpRUooTSQSgchMJBKuyknIOQCZDaCamNkNqIYVuAwxoYyjBo9Q9aOCQZBsw8vn6AiaPP5OvLXO43evvE6DV6ew0i9OTjEUFflG5RDLdGsW4F3ChE57mhc3cV0Klzd2pz6Mji4tC4OjSu6xAN91AURTvduAvIPkGiZI7cmUXN0a52tqvxdhXHNRV2TYldU2JtSrRNwdGqcLTKs7TI7RyyYtiaAdJiWJul1qvFGBZiqZArw5YrQwBzUQbNlyeGqTwSgPGvuVzOY1CISD9XJKYrYu2v5GDiGMq3meZBU/OQ6eqQ6SovScMm3qhapTyWNqmlTWZp46tBoIAkt16XW68rrNcVtg6FrUNp61DaOpW2TqW9i5u0st9Q2bvVjm6NoxtMb2nRXi3ap0X7dFifDhvQ4wMGXGJwSozOQaNr0OQaAvO5YNrX4pVZvTKrT27zyW1+hd2vsAeU9oDSEVChhDqDBiO1GKnFKS1O6QBOWuek9UJctN7FGHjcIhjLwxbDlIdnikmkxoTSQArg7IF/OLKleAehcRCfnmioP9FQ/3mDDiN1OKXHKYOTMjpB1YWxuBmLh7V6WZuXtftYu491+IMOfxANFMdfMYWN8zoJhIpCZAiEUSKMBsKOAOcKQBcs3pDZw5o9rNHDGtyM3snonLQOp7U4rcEoFUapUEqJkkoHKQdkdIEzBhshsxFSGym1kxljIIZtxLCVGOIIDFoDgxYOSYYBc4A3hn6AiaNPiNEnSq/R12sQoSeHQnvw9uhL0V0awy1QtnO9t1vvvVGIzntD5+kSo1Pn6dTm0MGRGZw0HNfnNh2VIzLATxuVHdJ1jTsrQGqOdmAPKme7ynlNhV9T4teUeJsSa1NibQqsTYG1KlAOOcDRApCJYm+R2Zt5pIVkBeJqCYYB1gq5Mmy9MsRjKcqg5cqg5XJFTMQwJOa/Skx5XC4kxxXyejBdlgB7EGmcNYZB85VB8xWJ6UpBXaR50HR1yAzI1F2AN1hahi2t0ixtUmubzNoms16TWa/JrO3cDJSNm5NS2DoUdjBX1am0d6ocXSrHDZXjhgosf3F0q9EeNdqjRXu0WK+WWzHTp8MH9M4BsILK6B40uodM7mGTZ9jskZq9UotXZvHJrD65zS+3+UE5GXhDZpQk1SipwSgtRgFv0OK0DsCpA8PhArAGHnc+JbSgLBP3hmDlJFJjyEtb3v2XHy0YGU1rMFIMAqDGBAIBlAIjgVjpcFKHc6UYrvDipk1uxuxhLF7G4mWtXsbqZWxe1uZj7T7WVgwvw+EriZcFXRXsLrwazL0ctPkz5F62ZjB7WbOXNXlYo5s1uBm9i9E7aZ2T1jhpNU6pMUqFUiqMUmKkEs0Yg4OUOUi+rpBbYADVhYwu2ACBQSuHBACMweIH9FsyxpChD2Dy95l8vbmA2kOvyddrFKEnH28+og6R4ZaEYEq5UYjec0Pv6RKjU+/p1OXQweHmEIxS1+cqkxzUdbeRcgeT+Vtc17XZCkq7BhQenNfU+DUVR5sKa1NhQCBalRl1UDhaAHJR7EKaAbJicGWJq4Vw9lC8JlGEK1LrFeAQoAJRjCHL5TKYK2XQfHnQ/NdBkygipYUhIfm98X5QuMsVHmHVIZfmIVMzmK/hkZpbpGYwAdQqtbTKONpk1ja59VqGdoUNcF1hu660XQcLXFT2TpW9U2XvUjsANwAaNFty0GG9OqxPh/Xp8X49PmBwDhhdEqNLYnIPmtxDZs+w2TNs8UqtXpnVJ7P55Daf3J7xBoeg3oARaoxUY6QG5+oNWieldXLSoHPSOhetc/HSwOhdjN7N6guMQcQbPBNjUlWEAkXwisBLw8Li0sCpg1rcG/iCDKcOOield1J6F2Vw0UY3mLZhTG7GDPAwFg9jLos7869gx+xNhRs9jNnNggqB2cPyG03ZLazJw5q94pdN4IF2s6A0pHcxOietxWkNTmswWo3RoMCgQCklRikclNxBcbrgIGV2UmYnpTzC6kJ+gYHgkQAsxIAlwNNvzqEPYPL3mfy9BfQAjP4eo783lx6OQm/IkF+ByNI9U7mRR6bw0FVAp97bqcunQ+ftyAqEp0PHFyE81+c8HRNCd1uo+Hg4e9C4r2vc7Rp3u8bVrna1q13X1M5rauc1lfOaytmmwttUeJsSb1NirUqsVcHRokBbFGiLvCyOFrmjmUdWSI5GXOWRCilZkyjgitR2ZRhgLc+Q9cqQtZxAlIPzhlLklxZyXCG/K/HJFGAVHCYw53Jl0HwlU2DIqTQMW64OW5p5BGtHeHUA9YZCdch4g61DRB3QG2q0W412awBYjxbr0WG94KM6erxP7wRLwiVGt8AbvMMWr9Tik4LV62BJO1jB5giABW0qUG/ASDVGaTBKg9NagJPWORkOF5PxBlbvYktIg8HNGt3BLJ4JM6ESgjjFpOGeHy0cGU1rcVKIaL0hH5S/TGqzVQeu8MAtA8lZ90GZ3JSxOAaAi4fMALoqAW1w0QY3LbLdLYaLyVygM9LHyaDWSWtxWo1TajwzHwEKDBipcJAKB5VTZsixB0KaqTRkvcHGr2MQSIOFkFgyxQZrIEcdeISVBgG9gCIm0Wvy9xbUJHqLFySKVyZmHN15GHzFShFdgEKZ0Hs7QTUityZxmwbCGUxn5ehvCxUfT15lQlh7aM/UHq6pcUHtARPWHtqUWJsSbQUoSuDgKVmicFRQn7BVgkAgKqtPVFKZKItgEqREWeLKcGm4ZRm5fpDLsPnKsPkqj9AVcmsM3NyEVGgM5haZOVtskFva5BbOGBTW9gwZY7B1qGwdKhswhk5BsQEYQ48W7dGiPTqsVyAN/Xq834APGJwSo0tidA2a3ENm95DFM2zxDFu8w4J6g8LuVzj8oNigRAmVoNigxilNptIA4HTBzeizyxdYg4c1lK8cTEQIxMoDxTBPHHFpKD1Pwc1WiJQcshMWgtpDViAykLoiaHnwArBcuO1E7tXc9tmrYHopc9nJTzhxT6oGXMBpYIicK3DLFygFSihRUpEjCmAmgtMFqZ0ErjAM4GYicoyBn5XIrGPwZyYmiupCUWMoVnUw+Xomrgt3XAVuyRuMvhKzGBV5A1SHSdjDTPKGDt4bdHmTF2JzFkWmLdrKS0OOPUxAGoRMRBpyvaECe5gSaciZ+Cg/qVGJOvACUUoduIkJcXXIfLqE9wazqDdw6qDIqgPwBl4dOlX2TpWD94aujDfwkxSg2NDLFRs4bxgwOiVG16DRLVAHEW9QCLxBhfLeQHKDS5435KhDpq5Qxh4mWEiYNnXIkwZuHC0HqcFJNU5yj0suGowEDfj2WjxnkM7rJ9sbT7Y3QhSVAHXuZcFVUoWRKpxU4SS4qgZXMQ4lRqpwEtQPlGCxAkoqwQQEX1dASQVKytHcioKDkDlIKY+dHOaMgRy2EcM2cshODtmJITu/joEYBHCzEiWrCxn6Cug1i9CTxQ/ozUOsIJGrGt8yugvJCMSNArqMvi5DDp0GX6fBm0/GJzogWbWqmMLHc8qp7Eg69N4OvadDzwnQdR239KFd62rXgsKDq13jvKZxgsmLNjXOzVyosFaAMg9UlBaAQhSuFNEsL4aYT5QjM+UhtnIiwxWp7QpYDzEJRGY9LJcrI184pEKyKiPeGLQXVh2GzfwnSpqlWUCxoVlmbZZZsx9w5bzB2iqztsn5SQrbtczihnaF7brSDuhQ8ZMUGXXQoDc0aLcW7dZiPdrsJEWvHu/V4316Z7/B2W905a1vyHiDTwomKcDiBkdA4SCUKKFECSVGqjAwnFFqnNLgtCYjDbw38CWHjD1w0pBRB4EceEtR0gZClWP2VUq+NAgHdX8wToZLEpoYRChOlG4TFBIThShO7q3xDIVbhNvjgYrxZ/4tho+HzcfLxr1srAxMzMvEPGwujDjuCriVfb9l0FEe1+SgcnDOYVwTZdKP+a09R4U4qaiTipQAp8I4KQIGIMIYEZoMgTyCeZT61NjkYYviZx3fTlA/i/oZAaw4ARYNsBjAn7mQCy6EYJ1EUIgLwH8zEJWPhwrzZL8VkIn4eNion4362WiAjQaCMR4iM9Jx4x03XI6Q4RGqkAgHHUmUIloGpijJW4SKJMpIA08gGP/yL+fWvb4dAoFAIBDIHOTPjRfyvCEjDfctHBlNa50UDxWOr3t9OwMDAwMDAwMzJ7Pu9e1MNAmlAQYGBgYGBqZM1r2+nYklzf4QTyI1hry0lZMGnYviocLxdW9AaYCBgYGBgZmjWffGdjaWtPhDFn/IEghZAqFEagxZ8+aeXGmgdS6aCo+8+saOO33AMDAwMDAwMHcmr76xg40lLYEwTzI1hqzZlpEGN6V3U3o3rXfTVGTk1c1QGmBgYGBgYOZoXt28g40nLUSYJ5EeQ17evmfe/IUjqbTeQ/NQkZH1W6A0wMDAwMDAzNGs37KDjSetZIQnmR5D1u54D0oDDAwMDAwMjDBFpGHne/PmL0xAaYCBgYGBgYHJBEiDjYzwJNNjyM/feh9Ig8FD6TNQkTiUBhgYGBgYmDmbjDSEeZLpMeSVt3lpIA0e0uAhDB6CisTXb952pw8YBgYGBgYG5s5k/eZtbDxhI4I8yfQY8so778+7b0FiNG1wETx0OLb+jQlIg0ajafhzw4eHPjyw7wBk1vDhoQ9PfXlKOiylKCrvGb9582belpqamtIvkps3b968efObKc34VGdsSpOe0qSmIaNTmuSUJjGlGZmGxKc0sSlNdEoTmdKEpyGhKU1wSsNOaSofl28969/YxsYS1gBry5BMjSE///V/zrtvQWI0ZXD5DU4OOhxb/8bWSjoNBAJNF5uO/+64SqmKRqM3YWZREomE2WxuPNP42R8/M5vNwuf9JpQGKA1QGqA0QGmY5dKwlY2N2Pw0TzKVRp7d+M69981PjKZMTi8PE46+9vqWsj1SFHXyi5MXzl1IJBJ3dHSDmd6YzeZPPv5Er9fzT/1NKA1QGqA0QGmA0jCrpeG117cEY3GHn+RJptLIz372sx/eNz85mrI6vTxsOLrxjfLS0HG9o+HPDel0unCYSafTx48fv/vuu+++++6urq6bN292dXWBq8ePHxfdpTAIgkzdwAdzS/F4PMc+OYahGHjqb0JpgNIApQFKA5SGWS0NG9/YEo7FcT/JM5pKI7t27frR/PnJ0RTq9qFun8Ptc7h9wUj0l5u3lu6OJMmjR46GgiHRMcZmsy1duvT8+fMrV6788Y9//Itf/OInP/nJypUrz58/v3Tp0o6OjvHx8bIDFZSGGRXJgOTUl6fAs38TSgOUBigNUBqgNMxqafjl5q2ReNxNUDyj6TSya9eu++YvGE2lXD4/Tzgae2Prm6W7G+gfONd4TnR0CQQCu3fv3rVr15NPPrls2bKVmSxbtuzJJ5/ctWvXunXr7HZ72VEKSsOMyvj4+PHfHQeLG25+G6RhzPzxUgRBkI1Xx8agNEBpgNIApQFKw4TyxtY3Y/GRAEXzpIA0zF+wIJVO+wIETzQW37qtzKcnzn51ViFXFA4tTqfzP/7jPz766KOtW7cuW7bs0KFDO3fubGhoeO2114A3vPzyyytWrHjiiSesVmvpUQpKw0xLT3dP08UmZuqkYdz8cTWSk+qPzeVEgdun+mPzzJQG85Gl4G9ZesSUSpnAtQ1X+YvIhqupXBu4uiHnMdhwNZWC0gClAUoDlIY7Kw1bt22LJxIUy/Kkx8aQXbt2LVy4MJ1OkyTFE4/Ht20v89PYf/j9H1iGLRxXDh8+fPDgwaGhoa1bt94tlpfXvvz6G288/PDDW7dujcViJYYoKA0zLT6v73f1v2OmXhqqPzaPf/PNN80bEQRBkI3Ns0MahKZQTBoyG5ceMaX4q0uPmKA0QGmA0gCl4c5Kw7bt2xOJZDAYCoY4xjhpWLQonU7TDMMzMjKyY+fO0t0dOnhodHS0cFxZu3ZtU1PT8PDQ+fPnDx069PjjT9x9992XL1++++67//P9/wQb33jj9ccee+zRRx81Go0lhigoDTMtyWSyrraOmTZpGB/ntWGcvyyoQYx/8803BbWJjVfSV3NbLv3YPCaUho38zRuvjo+Pj42Jtx8fH8/raekR89jYWDp368araSAH3NaNV8WlYenSpciGq+WkQeAMKV4jNkBpgNIApQFKw52Whh07dyaTyXAkwsNJw6JFi8bGxoSHlUgkdpaThgP7DoiOKw8++GBtbe3TTz01b968ZcuWPfXUU7w07Nu373//+7/fc889ixcvfvjhhxcsWCCRSEoMUVAaZmAO7DvATKM0ZJRgY/P4ePPG6o/N4+PffPNNjksUVBrGxq5uXPqxeWxsfHw8ZyTnpAFcEd5QpD24vPSIOZ0GY//SI+aMMWy8mk6n05wPAG8oJw1HjmxANlytTBoykmISm5iA0gClAUoDlIbbLw07d+4cHR0VvhLGx8ez0iD82xKJxFtvvVW6u2KVhh/807987/6ff/d///Y7a65/94XT3/v37T/453mXL18W3d7W1lZifILSMNOSnOZKQ7EZikzVAXhCqekJfuT/2DyWNz3Bj/HF2mccI1tLyBpAxgzyrpaanlh6xHR1A7LhSJnpiVSONvDuAKUBSgOUBigNd1Ya3nrrrTLSwKcSaSi2puHv71+NrGr7SkK9+IUT+Y0D2Rf4+ye2X758udj2EkMUlIaZloA/MK1rGoSVBkGBgU9RacifcCgnDeLtC7ZuvJo/88HfUJE0pK5uQJYuLbcQknMC4WrIDVehNEBpgNIApWEmSIPwdXVL0nCm4YxOqyscV/72fx9C1g++eNKNvIsjtRTySfxvt125fPlyse0lhigoDTMtA/0DF85fYG7LmoZcNShVaeDcAIz7FVQairXnF0Km+aWMG69WUlooLg1ZEygmDVc35HxWgmsvNk8BpQFKA5QGKA23IgETzRRLQ1dn1+W/igz5i57fg+wwIe+5kToG+W0C+eM397xad/ny5WLbSwxRUBpmWr78/EuVSsXclk9PCC8XawakIaeEIDQCgTQI5aBYe/PHS8HKxzHh8gZeAczcnEX66kbQrOyaBlMqaw3FpQHJfnQi01q8FAGlAUoDlAYoDbcxUywNbrf7t0d/my74Qujjf/zT9x5/57vbrn/nk9B39wx+7/marTve6u7uLra9xBAF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" width="400" /> <br />
<br />
References:<br />
<br />
<a href="http://stackoverflow.com/questions/8134493/how-can-i-set-a-custom-date-time-format-in-oracle-sql-developer">http://stackoverflow.com/questions/8134493/how-can-i-set-a-custom-date-time-format-in-oracle-sql-developer</a><br />
<br />
<a href="http://orastory.wordpress.com/2007/05/15/dates-timestamps-and-iso-8601/">http://orastory.wordpress.com/2007/05/15/dates-timestamps-and-iso-8601/</a>Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-6047914426739231762014-06-08T16:58:00.001-05:002014-06-08T17:00:45.702-05:00git: purging the lurking big file<p>I was just working with an old repository where I had inadvertently committed a large file ~300MB. I subsequently removed it, but not in a way that took it out of history. I discovered it when I went to push to GitHub and it complained. These are the steps I used to get rid of the file:</p> <ul> <li><font face="Consolas">git filter-branch --prune-empty -f --index-filter 'git rm -rf --cached --ignore-unmatch source/spikes/mo_offender_fak930.txt'<br>-tag-name-filter cat -- --all</font></li><font face="Consolas"> <li>git update-ref -d refs/original/refs/heads/master</li> <li>git reflog expire --expire=now –all</li> <li>git gc --prune=now</li></ul> <p></font>Here are some pages I found useful to figure this all out:</p> <p><a title="http://stackoverflow.com/questions/6017987/is-there-a-way-in-git-to-list-all-deleted-files-in-the-repository" href="http://stackoverflow.com/questions/6017987/is-there-a-way-in-git-to-list-all-deleted-files-in-the-repository">http://stackoverflow.com/questions/6017987/is-there-a-way-in-git-to-list-all-deleted-files-in-the-repository</a></p> <p><a title="http://stackoverflow.com/questions/2100907/how-to-remove-delete-a-large-file-from-commit-history-in-git-repository" href="http://stackoverflow.com/questions/2100907/how-to-remove-delete-a-large-file-from-commit-history-in-git-repository">http://stackoverflow.com/questions/2100907/how-to-remove-delete-a-large-file-from-commit-history-in-git-repository</a></p> <p><a title="http://naleid.com/blog/2012/01/17/finding-and-purging-big-files-from-git-history" href="http://naleid.com/blog/2012/01/17/finding-and-purging-big-files-from-git-history">http://naleid.com/blog/2012/01/17/finding-and-purging-big-files-from-git-history</a></p> Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-62511521196203232532014-05-11T19:41:00.000-05:002014-05-12T07:37:41.313-05:00Engineer's Notebook<div class="p1">
I record daily activities, notes, thoughts, diagrams, ideas, some reference material and special insights in their own paper notebooks. If you were going to jot something down on a scratchpad, put it in here. Document who you were collaborating with. Why? When I am in stand up meetings or talking with customers I go the paper route because I can simply open up the journal and write. Also, it is less intimidating and error prone than having a computer between you and the people you’re talking with.<br />
<br /></div>
<div class="p2">
Use a pen. Erasing and re-writing is too much work and will slow you down. Simply, draw a line through the erroneous material and continue on.<br />
<br /></div>
<div class="p2">
When it comes to choosing a paper journal it is a very personal decision. Many people like the <i>Moleskine</i> line of journals. <i>Ecosystem</i> makes similar more colorful journals of the same format. The things to consider when choosing a journal are:</div>
<ul class="ul1">
<li class="li1">Size. Will I have it with me when I need it?</li>
<li class="li1">Do I want one that lays flat?</li>
<li class="li1">Does it utilize a closure of some kind? Will it be a pain to open and close?</li>
<li class="li1">Does it have a pocket in the back for small papers? Do I care about that?</li>
<li class="li1">Do I want plain, ruled or grid paper?</li>
<li class="li1">Do I want a few pages or lots of pages?</li>
</ul>
<div class="p2">
Personally, I use a journal that is made by <i>Miquelrius</i>. It is about 6 inches wide by 8 inches tall and about an inch thick. It has rounded corners and the pages are grid ruled. Having the grid rule makes it easy to sketch out design ideas. Another nice thing about this page size is that you can easily “scrapbook” in index cards or ever so slightly trimmed down print outs.<br />
</div>
<div class="p2">
Create a margin on the outside of every page. Put a date in the margin when you start a new entry. You may want to add the time as well. Some days there isn’t much to note and I’ll continue on the page with the next day. In that case I draw a horizontal line between days to make it more visible. The margin can be used for icon style call outs, indicating action/todo items, work partners, work times and post activity summaries or thoughts.<br />
<br /></div>
<div class="p2">
It is my experience that page flags get caught on things and torn up. Bookmarks fall out and get lost. Therefore, I recommend using <i>Book Darts—</i>small metal pieces that can be used to mark your page and point to a specific line.</div>
<div class="p2">
With so many thoughts and notes recorded in your journal you’ll want to add your contact information inside the front cover with an offer of reward if returned.<br />
<br /></div>
<div class="p2">
I’ve experience quite a few benefits from keeping this journal. For example:</div>
<ul class="ul1">
<li class="li1">Meeting action items and decisions documented and easily formally distributed.</li>
<li class="li1">Look at back at project notes from years ago and see what was done and why.</li>
<li class="li1">Able to reproduce work flow for prior infrequent work.</li>
<li class="li1">Able to identify collaborators for project work.</li>
<li class="li1">Identify when software was installed on a machine and what versions.</li>
</ul>
<div class="p1">
<b>OneNote</b></div>
<div class="p2">
For long term, shared electronic notes I utilize OneNote. It is available on a wide variety of platforms now. Notebooks can be local only on some platforms or synced to the cloud. It lets you bring together your project notes into a portfolio style view.</div>
<div class="p3">
<br /></div>
<div class="p2">
OneNote provides numerous ways for getting information into it:</div>
<ul class="ul1">
<li class="li1">Typed and handwritten notes (it supports inking!)</li>
<li class="li1">Custom screen capture feature</li>
<li class="li1">Insert a picture from a file or camera! (Use the camera to bring in notes from your journal.)</li>
<li class="li1">On Windows OneNote can OCR your inked writing, handwriting or print inside of images for search.</li>
<li class="li1">Print to OneNote</li>
<li class="li1">Drop in documents</li>
<li class="li1">Link to web pages</li>
<li class="li1">Voice notes</li>
<li class="li1">Drawings by hand and assisted</li>
</ul>
<div class="p5">
<b>Compartmentalize</b></div>
<div class="p1">
<span class="s1"><b><span class="Apple-tab-span"> </span></b></span>I would also suggest that you not use a single journal for all your needs. Use one for work, one for the research you do outside of work. In addition, consider a free form journal for capturing personal thoughts, events and accomplishments.</div>
<div class="p4">
<br /></div>
<div class="p5">
<b>Summary</b></div>
There are many good reasons to start and maintain an Engineer's Notebook. Get a journal today and start the habit!Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-74356813914466832662014-03-30T16:08:00.000-05:002014-04-04T13:28:40.326-05:00Strata 2014 Retrospective<h2>
<span style="font-size: medium;">Introduction</span></h2>
<span style="font-size: medium;">This year I was fortunate enough to be able to attend the Strata conference put on by O’Reilly and Associates. I started this retrospective by doing a SWOT analysis of my experience. I then expand with some logistics info and take away research ideas.</span><br />
<span style="font-size: medium;">I had high expectations for this conference given its marketing. The last conference of this caliber that I had attended was ÜberConf.</span><br />
<h2>
<span style="font-size: medium;">Strengths</span></h2>
<ul>
<li><span style="font-size: medium;">The chairs in the session rooms were comfortable.</span></li>
<li><span style="font-size: medium;">Healthy snack options were available at breaks.</span></li>
<li><span style="font-size: medium;">Sponsored sessions were identified on the agenda.</span></li>
<li><span style="font-size: medium;">There were lots of vendors at the expo.</span></li>
<li><span style="font-size: medium;">Most if not all vendors had technical people on hand.</span></li>
<li><span style="font-size: medium;">Mobile app had maps and schedule.</span></li>
<li><span style="font-size: medium;">They did provide a daily print out of the session schedule and map.</span></li>
</ul>
<h2>
<span style="font-size: medium;">Weaknesses</span></h2>
<ul>
<li><span style="font-size: medium;">The mobile app was more frustrating than useful. It was always wanting to update.</span></li>
<li><span style="font-size: medium;">Being registered in the directory means you’ll start getting spam before the conference even starts.</span></li>
<li><span style="font-size: medium;">Navigating the website to find specific session information was difficult. Easier to find it through Google.</span></li>
<li><span style="font-size: medium;">This is not an inexpensive conference to attend in terms of conference cost, travel and hotel expense.</span></li>
<li><span style="font-size: medium;">Full day workshop</span></li>
<ul>
<li><span style="font-size: medium;">Late notice on software to pre-install</span></li>
<li><span style="font-size: medium;">Not enough AC outlets</span></li>
<li><span style="font-size: medium;">No tables!</span></li>
</ul>
</ul>
<span style="font-size: medium;">Unless they address the logistics issues of the workshop environment I can not recommend attending one.</span><br />
<h2>
<span style="font-size: medium;">Opportu</span><span style="font-size: medium;">nities</span></h2>
<ul>
<li><span style="font-size: medium;">From key notes, sessions and the vendors you get to learn about what tools/processes the future holds.</span></li>
<li><span style="font-size: medium;">Discern what tools/processes people are using now.</span></li>
<li><span style="font-size: medium;">Talk with other attendees about the work they are doing and the approaches they are taking to it.</span></li>
<li><span style="font-size: medium;">Some insights I had are:</span></li>
<ul>
<li><span style="font-size: medium;">Many are using Python and Julia for ETL.</span></li>
<li><span style="font-size: medium;">R is being used for analysis.</span></li>
<li><span style="font-size: medium;">Data people are starting to think about discuss data patterns. Such as <a href="http://www.slideshare.net/AbeGong/gong-stratasidekickpattern">the Side Kick Pattern</a> presented by Abe Gong (<a href="https://twitter.com/abegong">@AbeGong</a>) a Data Scientist from Jawbone.</span></li>
</ul>
</ul>
<h2>
<span style="font-size: medium;">Threats (or why wouldn’t I want to attend)</span></h2>
<ul>
<li><span style="font-size: medium;">Fundamentals are potentially better learned with targeted training.</span></li>
<li><span style="font-size: medium;">Attending this conference could prevent you from attending another more relevant conference.</span></li>
<li><span style="font-size: medium;">The target audience for this conference is narrow. People that identify with big data, data science and business intelligence are well served by this conference.</span></li>
</ul>
<span style="font-size: medium;">When attending it helps to have specific questions or problems you are looking to solve. This gives you a good context when choosing sessions and meeting with vendors. (There are lots of vendors!)</span><br />
<h2>
<span style="font-size: medium;">Internet</span></h2>
<span style="font-size: medium;">The conference wireless was acceptable for as many people that were using it. <span style="font-size: medium;">Internet in the hotel lobby was very good. There is wired internet available in the hotel room for free. I did not have an opportunity to use it. There is also pay to use wireless available in the room.</span></span><br />
<h2>
<span style="font-size: medium;">Research</span></h2>
<span style="font-size: medium;">I came away from the conference with much I want to research and experiment with and people to connect.</span><br />
<h3>
Tools and Libraries</h3>
<ul>
<li><span style="font-size: medium;"><a href="http://scikit-learn.org/stable/">scikit-learn.org</a></span></li>
<li><span style="font-size: medium;"><a href="https://wakari.io/">wakari.io</a> web based Python data analysis</span></li>
<li><span style="font-size: medium;"><a href="https://store.continuum.io/cshop/anaconda/">Anaconda</a> Scientific Python development environment</span></li>
<ul>
<li><span style="font-size: medium;">Getting IPython set up by hand is a pain—Anaconda is a must on Windows machines.</span></li>
</ul>
<li><span style="font-size: medium;"><a href="http://pandas.pydata.org/">Pandas</a> Python data analysis library</span></li>
<li><span style="font-size: medium;"><a href="http://www.microsoft.com/en-us/powerbi/">Microsoft PowerBI</a> (Office 365)</span></li>
<li><span style="font-size: medium;"><a href="http://d3js.org/">D3.js</a></span></li>
<li><span style="font-size: medium;"><a href="http://www.r-project.org/">The R programming language</a></span></li>
<li><span style="font-size: medium;"><a href="http://www.pentaho.com/">Pentaho</a>, <a href="http://www.tableausoftware.com/">Tableau</a> and other BI tools</span></li>
<li><span style="font-size: medium;"><a href="http://hadoop.apache.org/">Hadoop</a></span></li>
<li><span style="font-size: medium;"><a href="http://www.aerospike.com/">Aerospike</a></span></li>
</ul>
<h3>
Techniques</h3>
<ul>
<li><span style="font-size: medium;">Adjacency Matrix</span></li>
<li><span style="font-size: medium;">pivot and fold operations</span></li>
<li><span style="font-size: medium;">hexagonal binning</span></li>
<li><span style="font-size: medium;">use visualization for data quality checks</span></li>
<li><span style="font-size: medium;">confusion matrix</span></li>
<li><span style="font-size: medium;">predictive modeling fundamentals</span></li>
<li><span style="font-size: medium;">machine learning</span></li>
<li><span style="font-size: medium;">The work of <a href="http://en.wikipedia.org/wiki/John_Tukey">John Tukey</a> (Statistics)</span></li>
</ul>
<h3>
Speakers</h3>
<ul>
<li><span style="font-size: medium;">Abe Gong (<a href="https://twitter.com/abegong">@AbeGong</a>) Jawbone Sidekick pattern</span></li>
<li><span style="font-size: medium;">Monica Rogati (<a href="https://twitter.com/mrogati">@mrogati</a>) Jawbone UP</span></li>
<li><span style="font-size: medium;">Emil Eifrem (<a href="https://twitter.com/emileifrem">@emileifrem</a>) Neo4j</span></li>
<li><span style="font-size: medium;">Wes McKinney (<a href="https://twitter.com/wesmckinn">@wesmckinn</a>) Pandas creator</span></li>
<li><span style="font-size: medium;">Joe Hellerstein (<a href="https://twitter.com/joe_hellerstein">@joe_hellerstein</a>)</span></li>
<li><span style="font-size: medium;">Jeffrey Heer (<a href="https://twitter.com/jeffrey_heer">@jeffrey_heer</a>)</span></li>
</ul>
<span style="font-size: medium;">Joe and Jeffrey presented: <a href="http://strataconf.com/strata2014/public/schedule/detail/32956">Data Transformation: Skills of the Agile Data Wrangler</a></span><br />
<ul>
<li><span style="font-size: medium;"><a href="http://www.cs.washington.edu/people/faculty/magda">Magda Balazinska</a></span><span style="font-size: medium;"></span></li>
</ul>
<span style="font-size: medium;">Can we make big data management easier? Her 3 research threads are: effective, easier and cost effective.</span><br />
<h2>
<span style="font-size: medium;">Summary</span></h2>
<span style="font-size: medium;">I came away with a better appreciation of what constitutes data science, the skills needed, the tools utilized and the vendors in the different areas. If I attend again in the future I would likely skip the workshop day. I would do additional prep working thinking about specific questions I may have for the technical people that the vendors make available.</span>Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-16477573216497451382014-03-11T20:58:00.000-05:002014-05-02T20:15:27.223-05:00Tips for working with the MongoDB aggregation framework<ol>
<li><span style="font-size: medium;"><span style="font-family: inherit;"> <span style="font-size: medium;"><span style="font-family: inherit;">Review the data. </span></span><br />
<span style="font-size: medium;"><span style="font-family: inherit;"> <span style="font-size: medium;"><span style="font-family: inherit;">What are the data types? What is the structure? What do the values mean?</span> </span></span></span></span></span> </li>
<li> <span style="font-size: medium;"><span style="font-family: inherit;">Build out the query one stage at a time.</span> </span><br />
</li>
<li> <span style="font-size: medium;"><span style="font-family: inherit;">Start with one pipeline operation and a limit operation at the end. Review that you are getting the results you expect. Keep the limit operation in place as you add operations. Verify expected behavior every step of the way.</span> </span><br />
</li>
<li> <span style="font-family: inherit;"><span style="font-size: medium;">Remove the limit operation as the last step .</span></span> </li>
</ol>
<span style="font-size: medium;"><span style="font-family: inherit;">The online documentation will be very useful:</span><br />
<span style="font-family: verdana, sans-serif;"><a href="http://docs.mongodb.org/manual/aggregation/"><span style="font-size: small;">http://docs.mongodb.org/manual/aggregation/</span></a></span></span><br />
<span style="font-size: medium;"><span style="font-family: verdana, sans-serif;"><span style="font-size: small;"><a href="http://docs.mongodb.org/manual/core/aggregation-pipeline/">http://docs.mongodb.org/manual/core/aggregation-pipeline/</a></span></span></span><br />
<a href="http://docs.mongodb.org/manual/reference/operator/aggregation/"><span style="font-family: verdana, sans-serif;"><span style="font-size: small;">http://docs.mongodb.org/manual/reference/operator/aggregation/</span></span></a><br />
<br />
<span style="font-family: georgia, times new roman, serif;"><br />
</span> <span style="font-family: inherit;"><span style="font-size: medium;">This reference includes some nice material regarding comparison with standard SQL operations: </span></span><a href="http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/"><span style="font-family: verdana, sans-serif;"><span style="font-size: small;">http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/</span></span></a>Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-54897431734466427672014-03-06T23:22:00.000-06:002014-03-29T17:44:52.127-05:00Understanding US Zip Codes<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhds5AUD6GBGhWik9U-I3o5D3UNNVmahYFbfhGntbIfbVBpDRfSUqjxthRjtIPpmehlposGG2XMXlwII9aCptQAwVBh6F2CUAMY6MH7WPVEzzAXU1_4TIcKQMEcMUsPXeXzCXEYWQ/s1600/zipcodes.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="clear: left; float: left; font-family: Georgia, Times New Roman, serif; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhds5AUD6GBGhWik9U-I3o5D3UNNVmahYFbfhGntbIfbVBpDRfSUqjxthRjtIPpmehlposGG2XMXlwII9aCptQAwVBh6F2CUAMY6MH7WPVEzzAXU1_4TIcKQMEcMUsPXeXzCXEYWQ/s1600/zipcodes.png" /></span></a></div>
<span style="font-family: Georgia, Times New Roman, serif;"><br />
</span> <br />
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit;">In the United States there are States and Provinces. These States and Provinces have Cities. The same city name may be used in different states. For instance, Springfield, MO (Missouri) and Springfield, IL (Illinois). A single city may be covered by more than one zip code. A zip code may span states.</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOPt_eCD4byZZ0Fc4mHziyxDuyRYKCOyUUgk0cafWyid6QYHoV-rcYfowfhepSRwgNLRiOcIlMxXtaqQRNLSh8tSeBM5DCdLtge15_xU_Km3RgT7cyMfqp4fXCaIt_gwZWsd6DBA/s1600/zips.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Georgia, Times New Roman, serif;"></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXZ_xJCPCPbDjw5sBHr3kmO93TW9Olbr-KPR6Cgqcb3SNZw3kTMNiWuA9S5VDxMENi1yLJCN-ZUEkY_YpJ8UUQObR5UZVEXbdvJCUi8pYPffvgw1P0BFj7TarNSAP8MQ895wXsmA/s1600/zips_cropped.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXZ_xJCPCPbDjw5sBHr3kmO93TW9Olbr-KPR6Cgqcb3SNZw3kTMNiWuA9S5VDxMENi1yLJCN-ZUEkY_YpJ8UUQObR5UZVEXbdvJCUi8pYPffvgw1P0BFj7TarNSAP8MQ895wXsmA/s1600/zips_cropped.png" height="370" width="640" /></a></div>
The graphic above shows 13 of the 16 Zip codes that are used for Springfield, MO. For Springfield, IL, different Zip codes are used. Here 7 of Springfield, IL 36 zip codes are shown.<br />
<h4>
Reference</h4>
<a href="http://zipcode.org/">http://zipcode.org/ </a><br />
<a href="http://zipcode.org/city/MO/SPRINGFIELD">http://zipcode.org/city/MO/SPRINGFIELD</a><br />
<a href="http://zipcode.org/city/IL/SPRINGFIELD">http://zipcode.org/city/IL/SPRINGFIELD</a>Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-61647995288682831922014-02-05T00:36:00.001-06:002015-03-18T07:05:12.372-05:00MongoDB M101P Windows 8.1 64bit Installation<span style="font-size: small"><font size="3">This document walks you through installing the tools and libraries needed for the MongoDB M101P course available through </font><a href="http://university.mongodb.com/"><font size="3">university.mongodb.com</font></a></span> <br> <h2><span style="font-size: small"><font size="3">Installing MongoDB</font></span></h2> <p><span style="font-size: small"><font size="3">Go to </font><a href="http://www.mongodb.org/downloads"><font size="3">www.mongodb.org/downloads</font></a></span><br><a href="http://lh6.ggpht.com/-Va0mn6eVYIQ/VQlpl03xiZI/AAAAAAAAAv0/Qh98iUU4MVs/s1600-h/image%25255B2%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://lh6.ggpht.com/-6WFe2uM8TIM/VQlpmu6qteI/AAAAAAAAAv8/0EUfy6asWHU/image_thumb.png?imgmax=800" width="244" height="186"></a><br><font size="3"><span style="font-size: small">Click on the huge green button to download MongoDB in a MSI file.</span><br><span style="font-size: small"><i>(The current version is </i><b>3.0.1</b><i>)</i></span><br><span style="font-size: small">”Unblock” the downloaded MSI by, right clicking on the file and choosing properties. Then hit the unblock button. Then hit Apply, then OK. If you don’t have this that’s okay. Continue on.</span></font></p> <p><a href="http://lh4.ggpht.com/-TCAM2qrK_m4/VQlpnKe6XOI/AAAAAAAAAwE/xtjZaabDibI/s1600-h/image%25255B6%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://lh3.ggpht.com/-7I7ymLGuMRs/VQlpnxhm49I/AAAAAAAAAwM/7h2jd2OQPVo/image_thumb%25255B2%25255D.png?imgmax=800" width="307" height="389"></a></p> <p><font size="3"><span style="font-size: small">Run the downloaded MSI file – you’ll likely have to approve installation</span> <br><span style="font-size: small">I prefer to choose to do a custom install to </span><span style="font-size: small"><span style="font-family: consolas">C:\mongodb</span></span><span style="font-family: consolas"> </span><br><span style="font-size: small">After you have finished installing, y</span><span style="font-size: small">ou should now have<span style="font-family: consolas"> C:\mongodb</span></span> <br><span style="font-size: small">With a subfolder <span style="font-family: consolas">C:\mongodb\bin</span></span> <br><span style="font-size: small">Create a folder <span style="font-family: consolas">C:\data</span></span> <br><span style="font-size: small">Create a subfolder <span style="font-family: consolas">C:\data\db</span></span> </font></p> <h2><span style="font-size: small"><font size="3">Installing Python</font></span></h2><span style="font-size: small"><font size="3">Go to the Python download page: </font></span><a href="http://www.python.org/download"><span style="font-size: small"><font size="3">www.python.org/download</font></span></a> <br><a href="http://lh3.ggpht.com/-TWcNNYj5RFg/UvHbxr_r2DI/AAAAAAAAAmU/q7XBNqVo4ZM/s1600-h/clip_image002%25255B4%25255D.png"><img title="clip_image002" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image002" src="http://lh4.ggpht.com/-1V8y9l4pt1A/UvHbyWGx4LI/AAAAAAAAAmc/_24nTbgTnGk/clip_image002_thumb%25255B1%25255D.png?imgmax=800" width="505" height="215"></a> <br><a href="http://lh4.ggpht.com/-BNCd_0Y0vXM/UvHbyqNUOvI/AAAAAAAAAmg/4_hgcobcLGM/s1600-h/clip_image003%25255B4%25255D.png"><img title="clip_image003" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image003" src="http://lh6.ggpht.com/-US8PpMkTvlk/UvHbzAjMoQI/AAAAAAAAAms/xDkAkZklKdQ/clip_image003_thumb%25255B1%25255D.png?imgmax=800" width="505" height="88"></a> <br><font size="3"><span style="font-size: small">Choose the Python<span style="font-size: small"> <b><span style="font-family: consolas">2.7.9</span></b></span> X86-64 installer. Download and install it. Let it go with the default path of <span style="font-family: consolas">C:\Python27</span></span><br><span style="font-size: small">As of this publication date, the course content is <b><i>not</i></b> compatible with <strike><i><span style="font-size: small">Python 3.x</span></i></strike>. So, don’t get it!</span><br></font> <h2><span style="font-size: small"><font size="3">Setting your path</font></span></h2><font size="3"><span style="font-size: small">If you want to be able to easily run the Python and MongoDB binaries from the command line you need to set your system path.</span><br></font><a href="http://lh4.ggpht.com/-190rnrQcwgs/UvHb0nGI97I/AAAAAAAAAm0/v5LnJDy_1KY/s1600-h/clip_image004%25255B4%25255D.png"><img title="clip_image004" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image004" src="http://lh3.ggpht.com/-N8RZr8moTXE/UvHb1PBtDTI/AAAAAAAAAm8/4m2ofb2I7fQ/clip_image004_thumb%25255B1%25255D.png?imgmax=800" width="488" height="192"></a><br><font size="3"><span style="font-size: small"><span style="font-size: small">Choose <i>System</i></span> </span><br></font><a href="http://lh5.ggpht.com/-a-VJQQETcFc/UvHb1id1s4I/AAAAAAAAAnE/1LI96UFnum0/s1600-h/clip_image005%25255B4%25255D.png"><img title="clip_image005" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image005" src="http://lh5.ggpht.com/-0OWCtbTq188/UvHb2FA3NlI/AAAAAAAAAnM/WiFg1Zxbn9o/clip_image005_thumb%25255B1%25255D.png?imgmax=800" width="479" height="299"></a> <br><font size="3"><span style="font-size: small">Choose <i>Advanced System Settings</i>. Then choose<i> Environment Variables</i> button.</span> <br></font><a href="http://lh4.ggpht.com/-OiHR0frq_ek/UvHb2rak31I/AAAAAAAAAnU/NyBekY9ou00/s1600-h/clip_image006%25255B3%25255D.png"><img title="clip_image006" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image006" src="http://lh5.ggpht.com/-oxVqUhPdDjQ/UvHb21pAD9I/AAAAAAAAAnc/SlDR-o0CEsE/clip_image006_thumb.png?imgmax=800" width="199" height="75"></a> <br><a href="http://lh6.ggpht.com/-ZIbn3f2ZBJY/UvHb3eCzAeI/AAAAAAAAAnk/yg-8zvt1HOY/s1600-h/clip_image007%25255B4%25255D.png"><img title="clip_image007" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image007" src="http://lh3.ggpht.com/-L9yg5QcTZtg/UvHb4AIZ5-I/AAAAAAAAAns/9gVTChFHcv4/clip_image007_thumb%25255B1%25255D.png?imgmax=800" width="357" height="427"></a> <br><font size="3"><span style="font-size: small">Select the System Variables path as shown above. Then click edit. Append this to your system path:<span style="font-family: consolas"> </span></span><br><span style="font-size: small; font-family: consolas">;C:\Python27;C:\Python27\Scripts;C:\mongodb\bin;</span> <br><span style="font-size: small">Don’t miss the leading and trailing semi-colons.</span> <br></font> <h2><span style="font-size: small"><font size="3">Installing PIP</font></span></h2><span style="font-size: small"><font size="3">Go to </font></span><a href="http://www.pip-installer.org/en/latest/installing.html"><span style="font-size: small"><font size="3">http://www.pip-installer.org/en/latest/installing.html</font></span></a><font size="3"><span style="font-size: small"> </span><br><span style="font-size: small">Download <span style="font-family: consolas">get-pip.py</span> I did this by, r</span><span style="font-size: small">ight clicking on the link and choosing, <i>save link as</i> </span><br><span style="font-size: small">Next, open a <span style="font-family: consolas">cmd</span> prompt. You can do this with <<span style="font-family: consolas">windows> + <r></span> then typing <span style="font-family: consolas">cmd <enter></span></span><br></font><span style="font-size: small"><span style="font-family: consolas"><br></span></span><font size="3"><span style="font-size: small">Change to the directory where you downloaded <span style="font-family: consolas">get-pip.py, m</span></span><span style="font-size: small">ost likely <span style="font-family: consolas">C:\users\<i><span style="font-family: georgia">yourName</span></i>\Downloads, and </span></span><span style="font-size: small">run it: </span><br><span style="font-size: small; font-family: consolas">python get-pip.py</span> <br></font><a href="http://lh6.ggpht.com/-H--ldtzxj0M/UvHb4jPOfFI/AAAAAAAAAn0/oLaz1qMzE34/s1600-h/clip_image008%25255B4%25255D.png"><img title="clip_image008" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image008" src="http://lh4.ggpht.com/-ik3d33y4Riw/UvHb5AomYuI/AAAAAAAAAn8/SHIXwPoBems/clip_image008_thumb%25255B1%25255D.png?imgmax=800" width="440" height="135"></a> <br> <h2><span style="font-size: small"><font size="3">Installing pymongo</font></span></h2><span style="font-size: small"><font size="3">Visit </font></span><a href="https://pypi.python.org/pypi/pymongo/#downloads"><span style="font-size: small"><font size="3">https://pypi.python.org/pypi/pymongo/#downloads</font></span></a> <br><a href="http://lh5.ggpht.com/-XT8RacTNTrI/UvHb5zBkfCI/AAAAAAAAAoE/0uZDNSQaK3o/s1600-h/clip_image009%25255B4%25255D.png"><img title="clip_image009" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image009" src="http://lh3.ggpht.com/-kQkd3DIMBEM/UvHb6aNQq-I/AAAAAAAAAoM/eNM2By1Vqlw/clip_image009_thumb%25255B1%25255D.png?imgmax=800" width="533" height="99"></a> <br><font size="3"><span style="font-size: small">Download and run the win-amd64 EXE and run it. <i>The current version is pymongo-2.7</i>.2 (</span><span style="font-size: small"><span style="white-space: nowrap"><a href="https://pypi.python.org/packages/2.7/p/pymongo/pymongo-2.7.2.win-amd64-py2.7.exe#md5=90733c584b72d1c90e783bd8683db9a3">pymongo-2.7.2.win-amd64-py2.7.exe</a></span>).</span> The installer will be blue background with white text and will have a title similar to the following: <br></font><a href="http://lh3.ggpht.com/-XIcPug0c0RI/UvJlcQWPoRI/AAAAAAAAApM/JlxQutJ_Rys/s1600-h/clip_image010%25255B1%25255D.png"><img title="clip_image010" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image010" src="http://lh5.ggpht.com/-NRIq4d0X7aw/UvHb7FZrsZI/AAAAAAAAApU/HDoWHYUxUfc/clip_image010_thumb%25255B1%25255D.png?imgmax=800" width="400" height="84"></a> <br><font size="3"><span style="font-size: small">After installation, run <span style="font-family: consolas">pip list</span> to see that pymongo is installed (should be the new version).</span> <br></font><a href="http://lh4.ggpht.com/-kl-H5Ljdsl8/UvHb7ZUx3aI/AAAAAAAAAog/ZNFqaHprtH0/s1600-h/clip_image011%25255B3%25255D.png"><img title="clip_image011" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image011" src="http://lh6.ggpht.com/-4LZ9Duh-OZk/UvHb73eZWyI/AAAAAAAAAoo/dR9xiXsli10/clip_image011_thumb.png?imgmax=800" width="226" height="86"></a> <br> <h2><span style="font-size: small"><font size="3">Installing bottle</font></span></h2><font size="3"><span style="font-size: small">Use <span style="font-family: consolas">pip</span> to install bottle. Note that we have to use a special option to specify the version of bottle that we want installed.</span><br><span style="font-size: small; font-family: consolas">pip install bottle==0.11.6</span><br></font><a href="http://lh6.ggpht.com/-SN7yZntaRpo/UvHb8NUQg5I/AAAAAAAAAow/wfZu0rSu0-w/s1600-h/clip_image012%25255B4%25255D.png"><img title="clip_image012" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image012" src="http://lh3.ggpht.com/-0fh_ro44Og8/UvHb8yrie-I/AAAAAAAAAo8/xPjJ7vm0V78/clip_image012_thumb%25255B1%25255D.png?imgmax=800" width="422" height="255"></a><br> <h2><span style="font-size: small"><font size="3">Project folder</font></span></h2><font size="3"><span style="font-size: small">Create yourself a project folder such as<span style="font-family: consolas"> C:\Projects\m101p</span></span> <br></font><span style="font-size: small"><br></span><font size="3"><span style="font-size: small">I recommend that you create a subfolder for every weeks course files. So, for the first week you would have <span style="font-family: consolas">C:\Projects\m101p\week1</span></span> <br></font><span style="font-size: small"><span style="font-family: consolas"><br></span></span><span style="font-size: small"><font size="3">Do <b>not</b> put course files in either the <span style="font-family: consolas">mongodb</span> or <span style="font-family: consolas">python27</span> installation folders.</font></span> <h2>Starting MongoDB</h2> <p>I also suggest that you see this gist: <a title="https://gist.github.com/k0emt/10342867" href="https://gist.github.com/k0emt/10342867">https://gist.github.com/k0emt/10342867</a> as a way to start up a development <font face="Consolas">mongod</font> instance.</p> <h2>Stopping MongoDB</h2> <p>Use the <font face="Consolas">mongo</font> shell to properly shutdown <font face="Consolas">mongod</font>. Issue the following commands:</p> <p><font face="Consolas">use admin</font></p> <p><font face="Consolas">db.serverShutdown()</font></p> <p><a href="http://lh5.ggpht.com/-I84IdvG_P_I/VQlpo0pkhTI/AAAAAAAAAwQ/qdPn4paCx1M/s1600-h/image%25255B10%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://lh3.ggpht.com/-1q4UcCsrpkU/VQlpp80GmrI/AAAAAAAAAwc/MYc6yo6m52w/image_thumb%25255B4%25255D.png?imgmax=800" width="558" height="228"></a></p> <p>Subsequent to issuing the commands you will see some error messages. This is normal as the shell just lost connection with the server. You can now use <<span style="font-family: consolas">ctrl> + <d> <font face="Georgia">or type the word <font face="Consolas">exit</font> to quit the shell.</font></span></p> Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com9tag:blogger.com,1999:blog-9881483.post-76399961727367306002014-01-14T22:50:00.005-06:002014-01-14T22:54:04.135-06:00The costs of poor usabilityToday, I am going to share with you a little story about the costs of poor usability. Imagine if you will, that you are going to do the annual renewal for your website. It looks like there might be some alternate lower cost, better feature options available from the vendor now. However, you can't see them because you aren't allowed to "change plan" when you have a balance due. <br />
<h2>
The screw up</h2>
Here's where it gets interesting. So, you think, well I'll just "cancel" this pending charge over here on the billing page. Okay, some generic message about deleting a file or other. Not super clear. Okay, click go. (You're not too worried because there is a different cancel site feature on the website control panel.) Now you try and go back to your website control panel and look at the other plans. Well, it keeps having some sort of unspecified error. Then your domain email disappears. Oh noes! The cancel button on the <i>billing</i> page, actually blew away your <i>entire</i> domain!<br />
<h2>
The recovery</h2>
So, I was able to get in touch with technical support via an 800 number. Not too bad a hold time since it was the middle of the night. He worked with me and we got the website back up. Good thing I had a full local instance of it, because they didn't have anything. They had immediately deleted the full site, logs and backups! I had to go through and manually recreate email accounts. But then I had to wait for users to "activate" their accounts before I could restore their email from the vendors back ups. This entailed about two hours of hold time the following day with less than 30 minutes additional time needed to talk with a tech to finish restoring the email.<br />
<h2>
The costs</h2>
All told, the cost to me ended up being about 2 hours and 15 minutes of hold time and I'm thinking less than 90 minutes of tech time. (I'll try not to dwell on the being on hold for 30 minutes and then having the call dropped.) As a side impact of this was a lost day of productivity.<br />
<br />
The vendor took the hit of paying for an 800 number line for almost 4 hours! Then there was the hit for the tech time of about 2 hours. That's a lot of money.<br />
<br />
Domain users panicked. Will I ever get all of those <i>hundreds</i> of emails back? Will that important email I've been waiting for come in while we're down? They had to spend some time activating their account and waiting for their email box to be restored. <br />
<h2>
Conclusion</h2>
Poor usability costs <i>everyone</i>. Imagine if there had been a very clear warning along the lines of "hey, this operation will DESTROY YOUR ENTIRE DOMAIN!" Then followed up with a confirmation email or text? (I mean we do that for subscribing to an email list. So, it seems like that would be a legit thing to do for canceling an entire domain.) I think a lot of lost time, spent money and pain could have been avoided with better usability.Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-60072235997022797092013-04-12T14:07:00.000-05:002014-06-08T17:01:42.244-05:00Important Information for KCDC MongoDB Workshop<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhX6igBsTJyvW9SiFR8CgJAn1VHorQQQ_EeLqbIBhL24TvMlCmq7r0jTCbiQkOjyHKfHEc-ieWScPGikmyjDK73PtJO5ChsOsvdYR5-GtJY7e-JBkf63393SjtXaAc2shk6rEbqQ/s1600/badtime_xp_no_jdk.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhX6igBsTJyvW9SiFR8CgJAn1VHorQQQ_EeLqbIBhL24TvMlCmq7r0jTCbiQkOjyHKfHEc-ieWScPGikmyjDK73PtJO5ChsOsvdYR5-GtJY7e-JBkf63393SjtXaAc2shk6rEbqQ/s320/badtime_xp_no_jdk.jpg" width="320" /></a></div>
<h2>
TL;DR</h2>
The single most important thing you need to know is that if you show up with a machine that is running Windows XP or a machine that doesn't have a JDK on it, you're gonna have a bad day.<br />
<h2>
Prerequisites for your computer</h2>
OS: Windows 7 or 8, preferably 64bit, Linux or recent OS X<br />
Have a Java SDK 1.7 installed and configured with IDE on machine<br />
<br />
Why? Because we will utilize features that were introduced in MongoDB version 2.2.<br />
<br />
<i>Windows XP and older versions of Linux/OS X</i> <i><b>ARE NOT SUPPORTED</b></i> by MongoDB 2.2+<br />
<h2>
Prerequisites for you</h2>
Review and be familiar with JavaScript Object Notation at http://json.org<br />
Be able to run and use the command prompt / terminal of your OS.<br />
Be able to create code, add a jar/library, compile and run code in your favorite IDE.<br />
<br />
<h2>
Primary Goal</h2>
It is my primary goal that you leave the workshop with a functioning MongoDB environment and knowledge of the fundamentals with the skills to do routine development work.<br />
<h2>
Course Outline</h2>
<br />
<ul>
<li>Introduction and Installation of MongoDB</li>
<li>Schema (Relational and Document Oriented)</li>
<li>Creating, Reading, Updating and Deleting documents (CRUD)</li>
<li>Advanced CRUD - sub documents, arrays, sorting, limiting and other operators</li>
<li>backups</li>
<li>Performance/Indexes</li>
<li>Aggregation Framework</li>
<li>GridFS</li>
<li>Replication</li>
<li>Sharding Overview</li>
<li>Open Lab - Time Permitting</li>
</ul>
Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-11862713045049741042013-02-26T14:47:00.001-06:002013-02-26T15:12:24.972-06:00MongoDB SchemaOne of the major aspects of MongoDB is that it is a document store. You can put anything you want into a document-- it is schema-less. However, in many cases the documents stored in a collection do consist of the same fields. So, in answer to the question, "how do I determine the schema of a collection?" There are a couple options.<br />
<ol><li>Manually/visually inspect the contents of the collection</li>
<li>Use a utility to examine a single document</li>
<li>Use some sort of utility to examine all of the documents in a collection</li>
</ol><h2>Manually inspecting the collection</h2><div>As you can imagine is simply, "using" the database, and doing a <span style="font-family: Courier New, Courier, monospace;">db.collectionName.findOne()</span></div><div>For thoroughness, you'd probably want to examine more than one document. This is where a <span style="font-family: Courier New, Courier, monospace;">db.collectionName.find().pretty() </span>will come in handy.</div><br />
<h2>Use a utility to examine a single document</h2><div>I created a small python utility given a database name and collection name will give you the keys for a document in the collection. This requires you have Python 2.7 and pymongo installed on your computer. I put this in my ~/bin directory and chmod +x it.</div><div><script src="https://gist.github.com/k0emt/4983348.js"></script><br />
</div><div><h2>Use a utility to examine all of the documents in a collection</h2></div><div>Skratch. has a <a href="http://skratchdot.com/projects/mongodb-schema/">cool extension</a> to the MongoShell which examines all of the documents in a collection and tells you how many documents are using the field. Fields can vary in type by document. So, this tool even breaks down the occurrence of the field by type! It is on github at: <a href="https://github.com/skratchdot/mongodb-schema/" style="-webkit-transition: all 0.1s linear 0ms; color: #1d4595; font-size: 1em; line-height: 1em; text-decoration: none; word-wrap: break-word;">https://github.com/skratchdot/mongodb-schema/</a></div>Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-83739305126170085732013-02-13T20:48:00.000-06:002013-02-13T20:48:10.694-06:00MongoDB examples, Replica Set and GridFS<h2>
MongoDB Replica Set with Python example</h2>
I published a short lab on working with MongoDB replica sets in Python on GitHub <a href="https://github.com/k0emt/mongodb_repset_experiment">https://github.com/k0emt/mongodb_repset_experiment</a><br />
<br />
One thing to note is that I included all of the replica set nodes in the connection information. That is because if "regular" primary node was down at the time of initial connection the code would fail.<br />
<br />
The nodes in the replica set will figure out who should be primary and that will happen auto-magically behind the scenes. However, your client code still needs to deal with needing to reconnect.<br />
<br />
Adjust the counters if you want to have the client up and running longer while you experiment.<br />
<h2>
MongoDB GridFS with Java example</h2>
Example code for demonstrating GridFS and the metadata field with Java was also published on GitHub <a href="https://github.com/k0emt/gridfs_example_java">https://github.com/k0emt/gridfs_example_java</a><br />
<br />
By utilizing the metadata field you can keep your document metadata with it.<br />
<br />
<br />Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-12902687001619337462012-09-16T22:41:00.001-05:002012-09-18T00:52:46.174-05:00Tasks, Notes and Contact SyncSo, I finally broke down and got a MacBook Pro with OS X Mountain Lion. My personal machines to date have been Windows, Android and LINUX machines. Because I have a myriad of platforms I have been using Google as the intermediary when it comes to sync. Here are some notes/observations from my experience in trying to get syncing set up for tasks, notes and contacts.<br />
<h2>
Tasks</h2>
Simply put, there is no good sync for Tasks with OS X Mountain Lion. All of the material I've found indicates that there is no way to sync Reminders with Google Tasks. While the account set up says calendar and reminders it simply doesn't work for connecting to Google. Just use Google Tasks via the web browser and the awesome Android <a href="https://play.google.com/store/apps/details?id=org.dayup.gtask&hl=en">gTasks</a> application on your Android Slate/Convertible or phone.<br />
<h2>
Contacts</h2>
When I first set up the contacts sync I was only seeing 35 contacts. I knew this wasn't correct. After looking at the contacts section of GMail I figured out that it was only showing contacts that are tagged with "My Contacts". After adding the "My Contacts" tag to all of my contacts they all started syncing. However, you do lose all of your groups/tags in the contacts app on OSX. They are not removed from GMail.<br />
<br />
I also discovered that a new contact that had been entered on the mac wasn't syncing out to the Google contacts. However, if I created the contact on Google contacts first it would sync out to the mac.<br />
<h2>
Notes</h2>
Notes syncs with GMail notes, not Google Docs (now Drive). After setting up notes, I was experiencing super annoying pauses and loss of focus as the app would frequently sync with Google. At that time I was only syncing with Google for notes. When I turned on sync to iCloud in addition the pauses stopped. Oh, and before you turn off syncing, make sure you have the notes associated with that account saved somewhere else. Notes removes the notes you are no longer syncing!<br />
<br />
After a couple days of using this set up, I made a horrifying discovery. Every one of the syncs that was being done with Google (every few keystrokes) was creating an entirely new mail document. I had dozens of emails which represented the progression of changes in the document! Also, in digging into the configuration, I wasn't really syncing with iCloud for the notes either. When I tried to turn this on through a different control panel it demands that you create an email account that will be associated with your iCloud account. No thanks. I am now not syncing notes either.<br />
<br />
<a href="http://news.cnet.com/8301-33620_3-57485035-278/syncing-notes-from-mountain-lion-macs-to-ios-and-android/">This article had some useful information on setting up notes sync.</a><br />
<h2>
Summary</h2>
I only ended up syncing Contacts when it was all said and done. Unless you are willing to go with a single platform (Apple, Android or Microsoft) you will have sync gyrations to deal with. Having a web based IMAP/calendar provider is a key component to making all the syncing work.<br />
<br />Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-72041843427176350572012-09-14T22:07:00.001-05:002012-09-15T23:07:09.141-05:00Keeping RIM ViableIt is no secret that RIM has lost its huge lead in the smart phone area. Not only have they lost their lead, they are in danger of becoming irrelevant. What can RIM do to not only be viable, but to become a leader again? There are two things they can do: put Android on RIM devices and be the premier provider of sync for contacts and tasks.<br />
<h2>
Android on RIM devices</h2>
I’m sure that I’m not the first person to suggest switching from BB OS to Android. Although, there are some details that I think are important to make this work:<br />
<ul>
<li>Keep the high quality look and feel of the devices</li>
<li>Have Wi-Fi on the phone</li>
<li>Have the killer BlackBerry keyboard.</li>
<li>Have a large screen touch device with a slide out BlackBerry keyboard.</li>
</ul>
Android on the device doesn't mean having a tool or process that can be followed to port an Android app to the BBOS. It means having Android running natively on the device. For my the BlackBerry was never about the OS. The parts of the software I like are the unified settings area, the ability to change to a nice array of fonts and the security. But more important aspects were the quality feel of the device and the signature keyboard and trackball.<br />
<br />
<h2>
Sync for Contacts and Tasks</h2>
This is an area where RIM could really jump in and dominate. With their experience with sync and BlackBerry devices and their experience with infrastructure in the secure messaging area they are uniquely positioned to be able to make this happen. It is amazing that in present day there is still a need for a seamless way to sync contacts and tasks between devices. What would it take for RIM to meet this need? <br />
Provide web applications for viewing and managing contacts and tasks.<br />
Provide sync software for BBOS, iOS, Android, OutLook on Windows and mail/reminders on OS X.Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0tag:blogger.com,1999:blog-9881483.post-21874267916440827312012-06-07T23:47:00.001-05:002012-06-07T23:47:02.289-05:00Where have I been? (MSE ITS Project)<p>I wasn’t as prolific with my posts in 2011 and this year because I was focusing on finishing my Master Software Engineering degree and Intelligent Transportation System (ITS) project.  My project website with full documentation and source can be found here: <a href="http://people.cis.ksu.edu/~bnehl/">http://people.cis.ksu.edu/~bnehl/</a></p> <p>My MSE project takes a Multiagent System approach to the Control of Traffic Signals (MACTS). In additional to control of the local intersection there will be a configuration which incorporates near neighbor coordination. The system was designed with the intent of utilizing distributed cooperating agents. The system goals include minimizing the number of stops, reducing the amount of wait time, reducing travel time, increasing the average speed of travel, reducing fuel consumption and reducing the production of hydrocarbon emissions.</p> <p>The project code interfaces with the Simulation for Urban MObility (SUMO) application.  MACTS was implemented with Python, RabbitMQ and MongoDB.</p> Bryanhttp://www.blogger.com/profile/07738798938101870240noreply@blogger.com0