<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>flame.org</title>
  <link href="http://blog.flame.org/atom.xml" rel="self"/>
  <link href="http://blog.flame.org"/>
  <updated>2014-06-29T16:31:13-05:00</updated>
  <id>http://blog.flame.org</id>
  
  <author>
    <name>Michael Graff</name>
    <email>explorer@flame.org</email>
  </author>
  
  
  <entry>
    <title>D-Star First Impressions</title>
    <link href="http://blog.flame.org/2014/06/29/dstar-first-impressions.html"/>
   <updated>2014-06-29T00:00:00-05:00</updated>
   <id>http://blog.flame.org/2014/06/29/dstar-first-impressions</id>
   <content type="html">&lt;h1 id=&quot;background&quot;&gt;Background&lt;/h1&gt;

&lt;p&gt;I (KF5RJQ) bought a D-Star capable radio, the ID-51A, last week. As a new user, I thought it might be useful to describe my first impressions of the D-Star system.&lt;/p&gt;

&lt;p&gt;I’ll try to keep snarky comments to myself.&lt;/p&gt;

&lt;p&gt;Oh who am I kidding. I’ll be snarky as usual.&lt;/p&gt;

&lt;p&gt;I will rank each experience with a score, which indicates my “out of box” happiness with that part of the “D-Star experience.”&lt;/p&gt;

&lt;h1 id=&quot;buying_the_radio&quot;&gt;Buying the Radio&lt;/h1&gt;

&lt;p&gt;Score: 80% happy.&lt;/p&gt;

&lt;p&gt;Purchasing the radio was of course the first step. This part worked quite well. All I had to do is fork over a lot of cash. As usual, there was as little in the box as the manufacturer could manage and still make it usable. I was actually shocked I didn’t have to buy the belt clip, as that was the only part of the package that isn’t strictly necessary.&lt;/p&gt;

&lt;p&gt;The battery was partially charged, so I was able to use it on the way back. Almost. Sort of. Kinda.&lt;/p&gt;

&lt;h1 id=&quot;finding_a_repeater&quot;&gt;Finding a Repeater&lt;/h1&gt;

&lt;p&gt;Score: 80% happy.&lt;/p&gt;

&lt;p&gt;This part was also quite easy, as the ID-51A has a list of repeaters programmed into it. Unfortunately, they had names like “San Jose.” In fact, there were two “San Jose” entries, two “San Francisco” entries, etc. After some fiddling, I did mange to connect to one of the San Jose ones, WD6BAY I believe it was.&lt;/p&gt;

&lt;p&gt;While I don’t want to make this into a review of the ID-51A, I will say it is dissapointing that it won’t update without manual intervention and a computer. It seems like we have a digital mode that could be used to transmit a low bandwidth stream of new repeater data between or inside a voice stream. It also would be nice if the radio could hold a few tens of thousands of memories, organized by geographic location. It’s disappointing that the radio’s memory can’t even hold all the US repeaters, let alone the world’s. Sure, eventually that list could outgrow even the 10,000 I propose, but by that time, my radio would likely need replacing anyway.&lt;/p&gt;

&lt;h1 id=&quot;awesome_digital_audio&quot;&gt;Awesome Digital Audio&lt;/h1&gt;

&lt;p&gt;Score: 50% happy.&lt;/p&gt;

&lt;p&gt;Selecting the San Jose repeater got me there, mostly. Later, I found out I actually needed to program repeaters into regular memory to make things work out better, like using the gateway. Perhaps this is still user error. However, I was able to transmit locally, and even had a short QSO.&lt;/p&gt;

&lt;p&gt;For a system that proports “crystal clear digital audio,” I will say I was not impressed. It sounded like everyone was talking down a long tunnel, and I was at the other end listening at the emergency exit door with a plastic cup. Sure, I could hear no background noise. It gets full marks on the “full quieting” score card, but the voice quality was not at all “crystal clear” from my point of view.&lt;/p&gt;

&lt;p&gt;Perhaps to some old dude it sounds better, but I have rather good ears. I hear what people call “a good MP3 encoding” of songs, and cringe. To me, the audio quality is not at all worthy of the price paid to use a proprietary audio encoding. I know there are better, and many of them open source, which means no $150 DV-Dongles. But, once again, I digress.&lt;/p&gt;

&lt;p&gt;I also hate that the D-Star community has started calling the frequent audio mangling as “R2D2.” R2D2 is cute. You’re poking a stick in his eye (well, camera) each time you refer to the annoyingly frequent corruption of human speech with his name. I prefer to call this “speaking Martian” since clearly Martians would be ugly, and probably sound a lot like D-Star does when it’s corrupting voice.&lt;/p&gt;

&lt;h1 id=&quot;registering_my_callsign&quot;&gt;Registering My Callsign&lt;/h1&gt;

&lt;p&gt;Score: 0% happy. Seriously.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;The only thing registration does is make it harder to use a very expensive radio in a rather expensive hobby that is suffering from diminishing numbers due to high death-based attrition. If you want more D-Star (and amateur operators) in general, &lt;strong&gt;make it easier not harder&lt;/strong&gt; to get on the air, and make the experience wonderful, not sucktastic. Don’t put up stupid road-blocks. The FCC makes enough of those. Don’t add more.&lt;/p&gt;

&lt;h2 id=&quot;rant&quot;&gt;Rant&lt;/h2&gt;

&lt;p&gt;This is a stupid step. It really, really is. It’s nothing more than a way for people who likely say they want less government every day to install themselves into a permission chain to make my first experience on D-Star suck.&lt;/p&gt;

&lt;p&gt;And when did we go back to the 1970s? “Enter a single space in this field” – for real? Come on, this is 2014. I’m sure the computer can put a damned space in there for me. “Pad out callsigns with spaces if they are too short” – WTF? Was this system designed by a goldfish flopping on a keyboard?&lt;/p&gt;

&lt;p&gt;Oh, and I am bound forever to the repeater I choose to use. How smart! It’s not like repeaters ever go down and never return. It’s not like all this stuff doesn’t go into a global trust database. Surely we can store passwords securely and let me update my data securely. I do it all the time in web application development.&lt;/p&gt;

&lt;p&gt;But of course, I’m not actually bound to that repeater. I can request… somehow… to be removed and re-register myself. That was so much fun, I’d want to do it again and again! And imagine the fun caused by every repeater operator to also be a system administrator, and perform reliable backups so when their hard drive dies from being put in a dusty, dirty, hot place near a repeater installation, they won’t make my D-Star usage another level of hell.&lt;/p&gt;

&lt;h2 id=&quot;bullshit_reasons_for_a_bullshit_step&quot;&gt;Bullshit Reasons for a Bullshit Step.&lt;/h2&gt;

&lt;p&gt;Why do we need to register a callsign to use the gateway and reflector system? Let me list the reasons I’ve been told so far:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is an authentication step, and necessary to protect the network.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It in no way authenticates or verifies anything, other than I can fill out a web form. I don’t have to click anything in the email I get, so I could have entered some random callsign, a fake email address, and I would likely still get accepted and stored in the system.&lt;/p&gt;

&lt;p&gt;I don’t have to put something special (other than my callsign) into my radio. It’s not like I enter a digital certificate that securely binds my identity to my callsign, or to my radio.&lt;/p&gt;

&lt;p&gt;I could just as easily put your callsign in my radio, and transmit. The thing that prevents me from doing that are the FCC rules. The registration system does not do this.&lt;/p&gt;

&lt;p&gt;Do you think someone who is going to interfere with D-Star (stolen radio, or just a bored ass-hat) would not do this? If you really think registration is an authentication or security step, you need to do some research in what those words mean.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clubs should be able to say who uses their system.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;They already do, without registration.&lt;/p&gt;

&lt;p&gt;I have to find some repeater that will accept me. Each club has its own rules, and most of them say “go away” in various words to those who are not in their club. Sure, they run the repeater, and they can control who uses it, you say.&lt;/p&gt;

&lt;p&gt;But that’s not what registration does. It makes it so someone other than FCC has to tell me it’s OK to use my radio. If I start transmitting on some club repeater, they can tell me to stop. If I don’t, they have other options. The have in fact the same options as they had before D-Star: they can complain about my transmissions to the proper authorities.&lt;/p&gt;

&lt;p&gt;Perhaps they can un-register me. But, if I’m the kind of person who would not respect a request to not use a repeater, do you think I’d not do the actions in (1) above and just be an asshole?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It’s just how D-Star works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We can change that. We could just make it so gateways automatically authenticate people on their first transmission. Or, even if I had to go to a web site to register, we could make it not take hours to days.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It’s part of the agreement to use D-Star with Icom (or the Japanese)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Who knows, this claim might be true, but it is still bullshit. If we run a US-Trust server which is not run by Icom nor the Japanese, then we should have control over its content.&lt;/p&gt;

&lt;h1 id=&quot;learning_curve&quot;&gt;Learning Curve&lt;/h1&gt;

&lt;p&gt;Score: As an “end user”: 60%.&lt;/p&gt;

&lt;p&gt;I get the “your callsign”, “my callsign”, “RPT1”, and “RPT2” stuff. It seems to work well enough for QSOs. I have yet to target a specific user’s callsign, so I don’t know how well that part of it works, nor have I tried to transmit out a remote repeater without using a common reflector.&lt;/p&gt;

&lt;p&gt;My 40% reduction here is because we are still hacking in something that should damned well be done better. The destination “callsign” field is overridden to mean “callsign”, “repeater command”, and “broadcast.”&lt;/p&gt;

&lt;p&gt;It would be far more logical to me to put the repeater’s callsign in the “your callsign” field, and then have a way to send it command strings. But no, we don’t do it that way. Perhaps that’s too advanced for 1970s technology.&lt;/p&gt;

&lt;p&gt;Oh, and “UR?” and “RPT?” seem to mean different things. For instance, each time I transmit to my now local repeater’s gateway as RPT2, I get the “RPT?” error. But my transmission goes through! So, is “RPT?” an error or is it not? Who the hell knows. It’s a system built by goldfish.&lt;/p&gt;

&lt;h2 id=&quot;teaching_bad_habits&quot;&gt;Teaching Bad Habits&lt;/h2&gt;

&lt;p&gt;There appears to be a common trick of “quick-keying” to mean anything from “check in on this net” to “I would like to interrupt the current QSO.”&lt;/p&gt;

&lt;p&gt;I feel this is a very bad habit. Sure, my radio happily says the callsign. However, when mobile, do you think I’m safer by having to look at my radio and catch a callsign as it scrolls by?&lt;/p&gt;

&lt;p&gt;We should not abandon current strategies for saying “I have additional info” or “comment” or whatnot. Other digital modes may work by just transmitting your callsign to interrupt a QSO in progress, but this is digital &lt;em&gt;voice&lt;/em&gt; and the digital part should augment, not replace, the voice.&lt;/p&gt;

&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;For a system built on 1970s technology by goldfish flopping around on a keyboard, it’s a great system. I think they should have hired a cat to do the QA by eating the goldfish.&lt;/p&gt;

&lt;p&gt;I think we could have better than D-Star.&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>WWDC 14 URLs</title>
    <link href="http://blog.flame.org/2014/06/10/wwdc14.html"/>
   <updated>2014-06-10T00:00:00-05:00</updated>
   <id>http://blog.flame.org/2014/06/10/wwdc14</id>
   <content type="html">&lt;p&gt;Here’s a cut-and-pastable list of all the URLs for both SD, HD, and PDF formats for the Apple WWDC 14 presentations, extracted from &lt;a href=&quot;https://developer.apple.com/videos/wwdc/2014/&quot;&gt;Apple’s Site&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note that these are intentionally NOT clickable. They’re intended to be used in a download script.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

&lt;h2 id=&quot;the_list&quot;&gt;The List&lt;/h2&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/101xx36lr6smzjo/101/101_hd.mov http://devstreaming.apple.com/videos/wwdc/2014/101xx36lr6smzjo/101/101_sd.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/102xxw2o82y78a4/102/102_hd_platforms_state_of_the_union.mov http://devstreaming.apple.com/videos/wwdc/2014/102xxw2o82y78a4/102/102_platforms_state_of_the_union.pdf http://devstreaming.apple.com/videos/wwdc/2014/102xxw2o82y78a4/102/102_sd_platforms_state_of_the_union.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/103xx8s53gk94hl/103/103_hd_apple_design_awards.mov http://devstreaming.apple.com/videos/wwdc/2014/103xx8s53gk94hl/103/103_sd_apple_design_awards.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/201xx2xfazhzce8/201/201_advanced_topics_in_internationalization.pdf http://devstreaming.apple.com/videos/wwdc/2014/201xx2xfazhzce8/201/201_hd_advanced_topics_in_internationalization.mov http://devstreaming.apple.com/videos/wwdc/2014/201xx2xfazhzce8/201/201_sd_advanced_topics_in_internationalization.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/202xx3ane09vxdz/202/202_hd_whats_new_in_cocoa_touch.mov http://devstreaming.apple.com/videos/wwdc/2014/202xx3ane09vxdz/202/202_sd_whats_new_in_cocoa_touch.mov http://devstreaming.apple.com/videos/wwdc/2014/202xx3ane09vxdz/202/202_whats_new_in_cocoa_touch.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/203xxh9oqtm0piw/203/203_hd_introducing_healthkit.mov http://devstreaming.apple.com/videos/wwdc/2014/203xxh9oqtm0piw/203/203_introducing_healthkit.pdf http://devstreaming.apple.com/videos/wwdc/2014/203xxh9oqtm0piw/203/203_sd_introducing_healthkit.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/204xxhe1lli87dm/204/204_hd_whats_new_in_cocoa.mov http://devstreaming.apple.com/videos/wwdc/2014/204xxhe1lli87dm/204/204_sd_whats_new_in_cocoa.mov http://devstreaming.apple.com/videos/wwdc/2014/204xxhe1lli87dm/204/204_whats_new_in_cocoa.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/205xxqzduadzo14/205/205_creating_extensions_for_ios_and_os_x,_part_1.pdf http://devstreaming.apple.com/videos/wwdc/2014/205xxqzduadzo14/205/205_hd_creating_extensions_for_ios_and_os_x,_part_1.mov http://devstreaming.apple.com/videos/wwdc/2014/205xxqzduadzo14/205/205_sd_creating_extensions_for_ios_and_os_x,_part_1.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/206xxdiurnffagr/206/206_hd_introducing_the_modern_webkit_api.mov http://devstreaming.apple.com/videos/wwdc/2014/206xxdiurnffagr/206/206_introducing_the_modern_webkit_api.pdf http://devstreaming.apple.com/videos/wwdc/2014/206xxdiurnffagr/206/206_sd_introducing_the_modern_webkit_api.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/207xx270npvffao/207/207_accessibility_on_os_x.pdf http://devstreaming.apple.com/videos/wwdc/2014/207xx270npvffao/207/207_hd_accessibility_on_os_x.mov http://devstreaming.apple.com/videos/wwdc/2014/207xx270npvffao/207/207_sd_accessibility_on_os_x.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/208xx42tf0hw3vv/208/208_hd_introducing_cloudkit.mov http://devstreaming.apple.com/videos/wwdc/2014/208xx42tf0hw3vv/208/208_introducing_cloudkit.pdf http://devstreaming.apple.com/videos/wwdc/2014/208xx42tf0hw3vv/208/208_sd_introducing_cloudkit.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/209xxbyg01mfqt8/209/209_adapting_your_app_to_the_new_ui_of_os_x_yosemite.pdf http://devstreaming.apple.com/videos/wwdc/2014/209xxbyg01mfqt8/209/209_hd_adapting_your_app_to_the_new_ui_of_os_x_yosemite.mov http://devstreaming.apple.com/videos/wwdc/2014/209xxbyg01mfqt8/209/209_sd_adapting_your_app_to_the_new_ui_of_os_x_yosemite.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/210xxksa9s9ewsa/210/210_accessibility_on_ios.pdf http://devstreaming.apple.com/videos/wwdc/2014/210xxksa9s9ewsa/210/210_hd_accessibility_on_ios.mov http://devstreaming.apple.com/videos/wwdc/2014/210xxksa9s9ewsa/210/210_sd_accessibility_on_ios.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/211xxmyz80g30i9/211/211_designing_intuitive_user_experiences.pdf http://devstreaming.apple.com/videos/wwdc/2014/211xxmyz80g30i9/211/211_hd_designing_intuitive_user_experiences.mov http://devstreaming.apple.com/videos/wwdc/2014/211xxmyz80g30i9/211/211_sd_designing_intuitive_user_experiences.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/212xxi1kzzkdr54/212/212_hd_storyboards_and_controllers_on_os_x.mov http://devstreaming.apple.com/videos/wwdc/2014/212xxi1kzzkdr54/212/212_sd_storyboards_and_controllers_on_os_x.mov http://devstreaming.apple.com/videos/wwdc/2014/212xxi1kzzkdr54/212/212_storyboards_and_controllers_on_os_x.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/213xxbmca4in9u5/213/213_hd_introducing_homekit.mov http://devstreaming.apple.com/videos/wwdc/2014/213xxbmca4in9u5/213/213_introducing_homekit.pdf http://devstreaming.apple.com/videos/wwdc/2014/213xxbmca4in9u5/213/213_sd_introducing_homekit.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/214xxq2mdbtmp23/214/214_hd_view_controller_advancements_in_ios_8.mov http://devstreaming.apple.com/videos/wwdc/2014/214xxq2mdbtmp23/214/214_sd_view_controller_advancements_in_ios_8.mov http://devstreaming.apple.com/videos/wwdc/2014/214xxq2mdbtmp23/214/214_view_controller_advancements_in_ios_8.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/216xxcnxc6wnkf3/216/216_building_adaptive_apps_with_uikit.pdf http://devstreaming.apple.com/videos/wwdc/2014/216xxcnxc6wnkf3/216/216_hd_building_adaptive_apps_with_uikit.mov http://devstreaming.apple.com/videos/wwdc/2014/216xxcnxc6wnkf3/216/216_sd_building_adaptive_apps_with_uikit.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/217xxsvxdga3rh5/217/217_creating_extensions_for_ios_and_os_x_part_2.pdf http://devstreaming.apple.com/videos/wwdc/2014/217xxsvxdga3rh5/217/217_hd_creating_extensions_for_ios_and_os_x_part_2.mov http://devstreaming.apple.com/videos/wwdc/2014/217xxsvxdga3rh5/217/217_sd_creating_extensions_for_ios_and_os_x_part_2.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/218xx267rleu4n8/218/218_designing_a_great_in-app_purchase_experience.pdf http://devstreaming.apple.com/videos/wwdc/2014/218xx267rleu4n8/218/218_hd_designing_a_great_in-app_purchase_experience.mov http://devstreaming.apple.com/videos/wwdc/2014/218xx267rleu4n8/218/218_sd_designing_a_great_in-app_purchase_experience.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/219xxebl6quoz05/219/219_adopting_handoff_on_ios_and_os_x.pdf http://devstreaming.apple.com/videos/wwdc/2014/219xxebl6quoz05/219/219_hd_adopting_handoff_on_ios_and_os_x.mov http://devstreaming.apple.com/videos/wwdc/2014/219xxebl6quoz05/219/219_sd_adopting_handoff_on_ios_and_os_x.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/220xx01yweszmjv/220/220_adopting_advanced_features_of_the_new_ui_of_os_x_yosemite.pdf http://devstreaming.apple.com/videos/wwdc/2014/220xx01yweszmjv/220/220_hd_adopting_advanced_features_of_the_new_ui_of_os_x_yosemite.mov http://devstreaming.apple.com/videos/wwdc/2014/220xx01yweszmjv/220/220_sd_adopting_advanced_features_of_the_new_ui_of_os_x_yosemite.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/221xxobzcm2j26x/221/221_creating_custom_ios_user_interfaces.pdf http://devstreaming.apple.com/videos/wwdc/2014/221xxobzcm2j26x/221/221_hd_creating_custom_ios_user_interfaces.mov http://devstreaming.apple.com/videos/wwdc/2014/221xxobzcm2j26x/221/221_sd_creating_custom_ios_user_interfaces.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/222xxz9991l36ro/222/222_hd_optimize_your_earning_power_with_iad.mov http://devstreaming.apple.com/videos/wwdc/2014/222xxz9991l36ro/222/222_optimize_your_earning_power_with_iad.pdf http://devstreaming.apple.com/videos/wwdc/2014/222xxz9991l36ro/222/222_sd_optimize_your_earning_power_with_iad.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/223xxp1uag2jn3n/223/223_hd_prototyping_fake_it_till_you_make_it.mov http://devstreaming.apple.com/videos/wwdc/2014/223xxp1uag2jn3n/223/223_prototyping_fake_it_till_you_make_it.pdf http://devstreaming.apple.com/videos/wwdc/2014/223xxp1uag2jn3n/223/223_sd_prototyping_fake_it_till_you_make_it.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/224xxxlsvigdoc0/224/224_core_os_ios_application_architectural_patterns.pdf http://devstreaming.apple.com/videos/wwdc/2014/224xxxlsvigdoc0/224/224_hd_core_os_ios_application_architectural_patterns.mov http://devstreaming.apple.com/videos/wwdc/2014/224xxxlsvigdoc0/224/224_sd_core_os_ios_application_architectural_patterns.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/225xxgzhqylosff/225/225_hd_whats_new_in_core_data.mov http://devstreaming.apple.com/videos/wwdc/2014/225xxgzhqylosff/225/225_sd_whats_new_in_core_data.mov http://devstreaming.apple.com/videos/wwdc/2014/225xxgzhqylosff/225/225_whats_new_in_core_data.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/226xxf6phq7ufzl/226/226_hd_whats_new_in_table_and_collection_views.mov http://devstreaming.apple.com/videos/wwdc/2014/226xxf6phq7ufzl/226/226_sd_whats_new_in_table_and_collection_views.mov http://devstreaming.apple.com/videos/wwdc/2014/226xxf6phq7ufzl/226/226_whats_new_in_table_and_collection_views.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/227xx1g0sa1mhjf/227/227_creating_modern_cocoa_apps.pdf http://devstreaming.apple.com/videos/wwdc/2014/227xx1g0sa1mhjf/227/227_hd_creating_modern_cocoa_apps.mov http://devstreaming.apple.com/videos/wwdc/2014/227xx1g0sa1mhjf/227/227_sd_creating_modern_cocoa_apps.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/228xxnfgueiskhi/228/228_a_look_inside_presentation_controllers.pdf http://devstreaming.apple.com/videos/wwdc/2014/228xxnfgueiskhi/228/228_hd_a_look_inside_presentation_controllers.mov http://devstreaming.apple.com/videos/wwdc/2014/228xxnfgueiskhi/228/228_sd_a_look_inside_presentation_controllers.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/229xx77tq0pmkwo/229/229_advanced_ios_architecture_and_patterns.pdf http://devstreaming.apple.com/videos/wwdc/2014/229xx77tq0pmkwo/229/229_hd_advanced_ios_architecture_and_patterns.mov http://devstreaming.apple.com/videos/wwdc/2014/229xx77tq0pmkwo/229/229_sd_advanced_ios_architecture_and_patterns.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/230xxe44dq1m2da/230/230_hd_making_a_great_first_impression_with_strong_onboarding_design.mov http://devstreaming.apple.com/videos/wwdc/2014/230xxe44dq1m2da/230/230_making_a_great_first_impression_with_strong_onboarding_design.pdf http://devstreaming.apple.com/videos/wwdc/2014/230xxe44dq1m2da/230/230_sd_making_a_great_first_impression_with_strong_onboarding_design.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/231xx9bil1zgee7/231/231_advanced_cloudkit.pdf http://devstreaming.apple.com/videos/wwdc/2014/231xx9bil1zgee7/231/231_hd_advanced_cloudkit.mov http://devstreaming.apple.com/videos/wwdc/2014/231xx9bil1zgee7/231/231_sd_advanced_cloudkit.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/232xxz8gxpbstio/232/232_advanced_user_interfaces_with_collection_views.pdf http://devstreaming.apple.com/videos/wwdc/2014/232xxz8gxpbstio/232/232_hd_advanced_user_interfaces_with_collection_views.mov http://devstreaming.apple.com/videos/wwdc/2014/232xxz8gxpbstio/232/232_sd_advanced_user_interfaces_with_collection_views.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/233xxwktnowwj0u/233/233_hd_sharing_code_between_ios_and_os_x.mov http://devstreaming.apple.com/videos/wwdc/2014/233xxwktnowwj0u/233/233_sd_sharing_code_between_ios_and_os_x.mov http://devstreaming.apple.com/videos/wwdc/2014/233xxwktnowwj0u/233/233_sharing_code_between_ios_and_os_x.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/234xxi5cismq5hn/234/234_building_a_document_based_app.pdf http://devstreaming.apple.com/videos/wwdc/2014/234xxi5cismq5hn/234/234_hd_building_a_document_based_app.mov http://devstreaming.apple.com/videos/wwdc/2014/234xxi5cismq5hn/234/234_sd_building_a_document_based_app.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/235xxsugqo8pxak/235/235_advanced_scrollviews_and_touch_handling_techniques.pdf http://devstreaming.apple.com/videos/wwdc/2014/235xxsugqo8pxak/235/235_hd_advanced_scrollviews_and_touch_handling_techniques.mov http://devstreaming.apple.com/videos/wwdc/2014/235xxsugqo8pxak/235/235_sd_advanced_scrollviews_and_touch_handling_techniques.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/236xxwk3fv82sx2/236/236_building_interruptible_and_responsive_interactions.pdf http://devstreaming.apple.com/videos/wwdc/2014/236xxwk3fv82sx2/236/236_hd_building_interruptible_and_responsive_interactions.mov http://devstreaming.apple.com/videos/wwdc/2014/236xxwk3fv82sx2/236/236_sd_building_interruptible_and_responsive_interactions.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/237xxcyp7vhx2xt/237/237_a_strategy_for_great_work.pdf http://devstreaming.apple.com/videos/wwdc/2014/237xxcyp7vhx2xt/237/237_hd_a_strategy_for_great_work.mov http://devstreaming.apple.com/videos/wwdc/2014/237xxcyp7vhx2xt/237/237_sd_a_strategy_for_great_work.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/301xxu0xo3hhg9h/301/301_affiliate_tools_for_app_developers.pdf http://devstreaming.apple.com/videos/wwdc/2014/301xxu0xo3hhg9h/301/301_hd_affiliate_tools_for_app_developers.mov http://devstreaming.apple.com/videos/wwdc/2014/301xxu0xo3hhg9h/301/301_sd_affiliate_tools_for_app_developers.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/302xxo8xxixuera/302/302_hd_the_new_itunes_connect.mov http://devstreaming.apple.com/videos/wwdc/2014/302xxo8xxixuera/302/302_sd_the_new_itunes_connect.mov http://devstreaming.apple.com/videos/wwdc/2014/302xxo8xxixuera/302/302_the_new_itunes_connect.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/303xxqw0yb14u0r/303/303_hd_optimizing_in-app_purchases.mov http://devstreaming.apple.com/videos/wwdc/2014/303xxqw0yb14u0r/303/303_optimizing_in-app_purchases.pdf http://devstreaming.apple.com/videos/wwdc/2014/303xxqw0yb14u0r/303/303_sd_optimizing_in-app_purchases.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/304xxc65wjxydj8/304/304_creating_great_app_previews.pdf http://devstreaming.apple.com/videos/wwdc/2014/304xxc65wjxydj8/304/304_hd_creating_great_app_previews.mov http://devstreaming.apple.com/videos/wwdc/2014/304xxc65wjxydj8/304/304_sd_creating_great_app_previews.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/305xxjjl70ix0y1/305/305_hd_preventing_unauthorized_purchases_with_receipts.mov http://devstreaming.apple.com/videos/wwdc/2014/305xxjjl70ix0y1/305/305_preventing_unauthorized_purchases_with_receipts.pdf http://devstreaming.apple.com/videos/wwdc/2014/305xxjjl70ix0y1/305/305_sd_preventing_unauthorized_purchases_with_receipts.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/306xxjtg7uz13v0/306/306_hd_javascript_for_automation.mov http://devstreaming.apple.com/videos/wwdc/2014/306xxjtg7uz13v0/306/306_javascript_for_automation.pdf http://devstreaming.apple.com/videos/wwdc/2014/306xxjtg7uz13v0/306/306_sd_javascript_for_automation.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/401xxfkzfrjyb93/401/401_hd_whats_new_in_xcode_6.mov http://devstreaming.apple.com/videos/wwdc/2014/401xxfkzfrjyb93/401/401_sd_whats_new_in_xcode_6.mov http://devstreaming.apple.com/videos/wwdc/2014/401xxfkzfrjyb93/401/401_whats_new_in_xcode_6.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/402xxgg8o88ulsr/402/402_hd_introduction_to_swift.mov http://devstreaming.apple.com/videos/wwdc/2014/402xxgg8o88ulsr/402/402_introduction_to_swift.pdf http://devstreaming.apple.com/videos/wwdc/2014/402xxgg8o88ulsr/402/402_sd_introduction_to_swift.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/403xxksrj0qs8c0/403/403_hd_intermediate_swift.mov http://devstreaming.apple.com/videos/wwdc/2014/403xxksrj0qs8c0/403/403_intermediate_swift.pdf http://devstreaming.apple.com/videos/wwdc/2014/403xxksrj0qs8c0/403/403_sd_intermediate_swift.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/404xxdxsstkaqjb/404/404_advanced_swift.pdf http://devstreaming.apple.com/videos/wwdc/2014/404xxdxsstkaqjb/404/404_hd_advanced_swift.mov http://devstreaming.apple.com/videos/wwdc/2014/404xxdxsstkaqjb/404/404_sd_advanced_swift.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/406xxssvkspk997/406/406_hd_integrating_swift_with_objective_c.mov http://devstreaming.apple.com/videos/wwdc/2014/406xxssvkspk997/406/406_integrating_swift_with_objective_c.pdf http://devstreaming.apple.com/videos/wwdc/2014/406xxssvkspk997/406/406_sd_integrating_swift_with_objective_c.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/407xxptt888z5jv/407/407_hd_swift_interoperability_in_depth.mov http://devstreaming.apple.com/videos/wwdc/2014/407xxptt888z5jv/407/407_sd_swift_interoperability_in_depth.mov http://devstreaming.apple.com/videos/wwdc/2014/407xxptt888z5jv/407/407_swift_interoperability_in_depth.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/408xxcm26svis12/408/408_hd_swift_playgrounds.mov http://devstreaming.apple.com/videos/wwdc/2014/408xxcm26svis12/408/408_sd_swift_playgrounds.mov http://devstreaming.apple.com/videos/wwdc/2014/408xxcm26svis12/408/408_swift_playgrounds.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/409xxfw34pado34/409/409_hd_introduction_to_lldb_and_the_swift_repl.mov http://devstreaming.apple.com/videos/wwdc/2014/409xxfw34pado34/409/409_introduction_to_lldb_and_the_swift_repl.pdf http://devstreaming.apple.com/videos/wwdc/2014/409xxfw34pado34/409/409_sd_introduction_to_lldb_and_the_swift_repl.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/410xx1s19e83i5z/410/410_advanced_swift_debugging_in_lldb.pdf http://devstreaming.apple.com/videos/wwdc/2014/410xx1s19e83i5z/410/410_hd_advanced_swift_debugging_in_lldb.mov http://devstreaming.apple.com/videos/wwdc/2014/410xx1s19e83i5z/410/410_sd_advanced_swift_debugging_in_lldb.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/411xx0xo98zzoor/411/411_hd_whats_new_in_interface_builder.mov http://devstreaming.apple.com/videos/wwdc/2014/411xx0xo98zzoor/411/411_sd_whats_new_in_interface_builder.mov http://devstreaming.apple.com/videos/wwdc/2014/411xx0xo98zzoor/411/411_whats_new_in_interface_builder.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/412xx80au1lrfcn/412/412_hd_localizing_with_xcode_6.mov http://devstreaming.apple.com/videos/wwdc/2014/412xx80au1lrfcn/412/412_localizing_with_xcode_6.pdf http://devstreaming.apple.com/videos/wwdc/2014/412xx80au1lrfcn/412/412_sd_localizing_with_xcode_6.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/413xxr7gdc60u2p/413/413_debugging_in_xcode_6.pdf http://devstreaming.apple.com/videos/wwdc/2014/413xxr7gdc60u2p/413/413_hd_debugging_in_xcode_6.mov http://devstreaming.apple.com/videos/wwdc/2014/413xxr7gdc60u2p/413/413_sd_debugging_in_xcode_6.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/414xx4l5du0f408/414/414_hd_testing_in_xcode_6.mov http://devstreaming.apple.com/videos/wwdc/2014/414xx4l5du0f408/414/414_sd_testing_in_xcode_6.mov http://devstreaming.apple.com/videos/wwdc/2014/414xx4l5du0f408/414/414_testing_in_xcode_6.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/415xx83xkyr55fj/415/415_continuous_integration_with_xcode_6.pdf http://devstreaming.apple.com/videos/wwdc/2014/415xx83xkyr55fj/415/415_hd_continuous_integration_with_xcode_6.mov http://devstreaming.apple.com/videos/wwdc/2014/415xx83xkyr55fj/415/415_sd_continuous_integration_with_xcode_6.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/416xxuit620s53g/416/416_building_modern_frameworks.pdf http://devstreaming.apple.com/videos/wwdc/2014/416xxuit620s53g/416/416_hd_building_modern_frameworks.mov http://devstreaming.apple.com/videos/wwdc/2014/416xxuit620s53g/416/416_sd_building_modern_frameworks.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/417xx2zsyyp8zcs/417/417_hd_whats_new_in_llvm.mov http://devstreaming.apple.com/videos/wwdc/2014/417xx2zsyyp8zcs/417/417_sd_whats_new_in_llvm.mov http://devstreaming.apple.com/videos/wwdc/2014/417xx2zsyyp8zcs/417/417_whats_new_in_llvm.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/418xxtihju1a7v4/418/418_hd_improving_your_app_with_instruments.mov http://devstreaming.apple.com/videos/wwdc/2014/418xxtihju1a7v4/418/418_improving_your_app_with_instruments.pdf http://devstreaming.apple.com/videos/wwdc/2014/418xxtihju1a7v4/418/418_sd_improving_your_app_with_instruments.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/419xxli6f60a6bs/419/419_advanced_graphics_and_animation_performance.pdf http://devstreaming.apple.com/videos/wwdc/2014/419xxli6f60a6bs/419/419_hd_advanced_graphics_and_animation_performance.mov http://devstreaming.apple.com/videos/wwdc/2014/419xxli6f60a6bs/419/419_sd_advanced_graphics_and_animation_performance.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/501xxfo4d68h054/501/501_hd_whats_new_in_core_audio.mov http://devstreaming.apple.com/videos/wwdc/2014/501xxfo4d68h054/501/501_sd_whats_new_in_core_audio.mov http://devstreaming.apple.com/videos/wwdc/2014/501xxfo4d68h054/501/501_whats_new_in_core_audio.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/502xxvo7vov799k/502/502_avaudioengine_in_practice.pdf http://devstreaming.apple.com/videos/wwdc/2014/502xxvo7vov799k/502/502_hd_avaudioengine_in_practice.mov http://devstreaming.apple.com/videos/wwdc/2014/502xxvo7vov799k/502/502_sd_avaudioengine_in_practice.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/503xx50xm4n63qe/503/503_hd_mastering_modern_media_playback.mov http://devstreaming.apple.com/videos/wwdc/2014/503xx50xm4n63qe/503/503_mastering_modern_media_playback.pdf http://devstreaming.apple.com/videos/wwdc/2014/503xx50xm4n63qe/503/503_sd_mastering_modern_media_playback.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/504xx5n1n7eie65/504/504_advanced_media_for_the_web.pdf http://devstreaming.apple.com/videos/wwdc/2014/504xx5n1n7eie65/504/504_hd_advanced_media_for_the_web.mov http://devstreaming.apple.com/videos/wwdc/2014/504xx5n1n7eie65/504/504_sd_advanced_media_for_the_web.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/505xx5j7n7h3a1q/505/505_harnessing_metadata_in_audiovisual_media.pdf http://devstreaming.apple.com/videos/wwdc/2014/505xx5j7n7h3a1q/505/505_hd_harnessing_metadata_in_audiovisual_media.mov http://devstreaming.apple.com/videos/wwdc/2014/505xx5j7n7h3a1q/505/505_sd_harnessing_metadata_in_audiovisual_media.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/506xxeo80e5kykp/506/506_ensuring_continuity_between_your_app_and_web_site.pdf http://devstreaming.apple.com/videos/wwdc/2014/506xxeo80e5kykp/506/506_hd_ensuring_continuity_between_your_app_and_web_site.mov http://devstreaming.apple.com/videos/wwdc/2014/506xxeo80e5kykp/506/506_sd_ensuring_continuity_between_your_app_and_web_site.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/508xxfvaehrll14/508/508_camera_capture_manual_controls.pdf http://devstreaming.apple.com/videos/wwdc/2014/508xxfvaehrll14/508/508_hd_camera_capture_manual_controls.mov http://devstreaming.apple.com/videos/wwdc/2014/508xxfvaehrll14/508/508_sd_camera_capture_manual_controls.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/509xxwli42i4gs6/509/509_creating_3d_interactive_content_with_webgl.pdf http://devstreaming.apple.com/videos/wwdc/2014/509xxwli42i4gs6/509/509_hd_creating_3d_interactive_content_with_webgl.mov http://devstreaming.apple.com/videos/wwdc/2014/509xxwli42i4gs6/509/509_sd_creating_3d_interactive_content_with_webgl.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/510xx6yeo9go0lo/510/510_hd_whats_new_in_iad_workbench.mov http://devstreaming.apple.com/videos/wwdc/2014/510xx6yeo9go0lo/510/510_sd_whats_new_in_iad_workbench.mov http://devstreaming.apple.com/videos/wwdc/2014/510xx6yeo9go0lo/510/510_whats_new_in_iad_workbench.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/511xxegx4yyhbt9/511/511_hd_introducing_the_photos_frameworks.mov http://devstreaming.apple.com/videos/wwdc/2014/511xxegx4yyhbt9/511/511_introducing_the_photos_frameworks.pdf http://devstreaming.apple.com/videos/wwdc/2014/511xxegx4yyhbt9/511/511_sd_introducing_the_photos_frameworks.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/512xxj53iuolu78/512/512_hd_web_inspector_and_modern_javascript.mov http://devstreaming.apple.com/videos/wwdc/2014/512xxj53iuolu78/512/512_sd_web_inspector_and_modern_javascript.mov http://devstreaming.apple.com/videos/wwdc/2014/512xxj53iuolu78/512/512_web_inspector_and_modern_javascript.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/513xxhfudagscto/513/513_direct_access_to_media_encoding_and_decoding.pdf http://devstreaming.apple.com/videos/wwdc/2014/513xxhfudagscto/513/513_hd_direct_access_to_media_encoding_and_decoding.mov http://devstreaming.apple.com/videos/wwdc/2014/513xxhfudagscto/513/513_sd_direct_access_to_media_encoding_and_decoding.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/514xxio5buvlu16/514/514_advances_in_core_image.pdf http://devstreaming.apple.com/videos/wwdc/2014/514xxio5buvlu16/514/514_hd_advances_in_core_image.mov http://devstreaming.apple.com/videos/wwdc/2014/514xxio5buvlu16/514/514_sd_advances_in_core_image.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/515xxv01d9tcg3o/515/515_developing_core_image_filters_for_ios.pdf http://devstreaming.apple.com/videos/wwdc/2014/515xxv01d9tcg3o/515/515_hd_developing_core_image_filters_for_ios.mov http://devstreaming.apple.com/videos/wwdc/2014/515xxv01d9tcg3o/515/515_sd_developing_core_image_filters_for_ios.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/516xxanja9ziaar/516/516_hd_improving_the_accessibility_and_usability_of_complex_web_applications.mov http://devstreaming.apple.com/videos/wwdc/2014/516xxanja9ziaar/516/516_improving_the_accessibility_and_usability_of_complex_web_applications.pdf http://devstreaming.apple.com/videos/wwdc/2014/516xxanja9ziaar/516/516_sd_improving_the_accessibility_and_usability_of_complex_web_applications.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/517xxlpmjgeqazd/517/517_designing_responsive_web_experiences.pdf http://devstreaming.apple.com/videos/wwdc/2014/517xxlpmjgeqazd/517/517_hd_designing_responsive_web_experiences.mov http://devstreaming.apple.com/videos/wwdc/2014/517xxlpmjgeqazd/517/517_sd_designing_responsive_web_experiences.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/601xxu3eg5ttkcj/601/601_harnessing_the_power_of_the_mac_pro_with_opengl_and_opencl.pdf http://devstreaming.apple.com/videos/wwdc/2014/601xxu3eg5ttkcj/601/601_hd_harnessing_the_power_of_the_mac_pro_with_opengl_and_opencl.mov http://devstreaming.apple.com/videos/wwdc/2014/601xxu3eg5ttkcj/601/601_sd_harnessing_the_power_of_the_mac_pro_with_opengl_and_opencl.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/602xx0qpmdkc2ki/602/602_hd_ingredients_of_great_games.mov http://devstreaming.apple.com/videos/wwdc/2014/602xx0qpmdkc2ki/602/602_ingredients_of_great_games.pdf http://devstreaming.apple.com/videos/wwdc/2014/602xx0qpmdkc2ki/602/602_sd_ingredients_of_great_games.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/603xx33n8igr5n1/603/603_hd_working_with_metal_overview.mov http://devstreaming.apple.com/videos/wwdc/2014/603xx33n8igr5n1/603/603_sd_working_with_metal_overview.mov http://devstreaming.apple.com/videos/wwdc/2014/603xx33n8igr5n1/603/603_working_with_metal_overview.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/604xxg7crkljcr8/604/604_hd_working_with_metal_fundamentals.mov http://devstreaming.apple.com/videos/wwdc/2014/604xxg7crkljcr8/604/604_sd_working_with_metal_fundamentals.mov http://devstreaming.apple.com/videos/wwdc/2014/604xxg7crkljcr8/604/604_working_with_metal_fundamentals.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/605xxygcz4pd0h6/605/605_hd_working_with_metal_advanced.mov http://devstreaming.apple.com/videos/wwdc/2014/605xxygcz4pd0h6/605/605_sd_working_with_metal_advanced.mov http://devstreaming.apple.com/videos/wwdc/2014/605xxygcz4pd0h6/605/605_working_with_metal_advanced.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/606xxql3qoibema/606/606_hd_whats_new_in_sprite_kit.mov http://devstreaming.apple.com/videos/wwdc/2014/606xxql3qoibema/606/606_sd_whats_new_in_sprite_kit.mov http://devstreaming.apple.com/videos/wwdc/2014/606xxql3qoibema/606/606_whats_new_in_sprite_kit.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/608xx0tzmkcqkrn/608/608_best_practices_for_building_spritekit_games.pdf http://devstreaming.apple.com/videos/wwdc/2014/608xx0tzmkcqkrn/608/608_hd_best_practices_for_building_spritekit_games.mov http://devstreaming.apple.com/videos/wwdc/2014/608xx0tzmkcqkrn/608/608_sd_best_practices_for_building_spritekit_games.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/609xxkxq1v95fju/609/609_hd_whats_new_in_scenekit.mov http://devstreaming.apple.com/videos/wwdc/2014/609xxkxq1v95fju/609/609_sd_whats_new_in_scenekit.mov http://devstreaming.apple.com/videos/wwdc/2014/610xxc04fgmv80x/610/610_building_a_game_with_scenekit.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/610xxc04fgmv80x/610/610_hd_building_a_game_with_scenekit.mov http://devstreaming.apple.com/videos/wwdc/2014/610xxc04fgmv80x/610/610_sd_building_a_game_with_scenekit.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/611xxblieag1z2a/611/611_designing_for_game_controllers.pdf http://devstreaming.apple.com/videos/wwdc/2014/611xxblieag1z2a/611/611_hd_designing_for_game_controllers.mov http://devstreaming.apple.com/videos/wwdc/2014/611xxblieag1z2a/611/611_sd_designing_for_game_controllers.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/612xxnsoq5fis79/612/612_hd_motion_tracking_with_the_core_motion_framework.mov http://devstreaming.apple.com/videos/wwdc/2014/612xxnsoq5fis79/612/612_motion_tracking_with_the_core_motion_framework.pdf http://devstreaming.apple.com/videos/wwdc/2014/612xxnsoq5fis79/612/612_sd_motion_tracking_with_the_core_motion_framework.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/701xx8n8ca3aq4j/701/701_designing_accessories_for_ios_and_os_x.pdf http://devstreaming.apple.com/videos/wwdc/2014/701xx8n8ca3aq4j/701/701_hd_designing_accessories_for_ios_and_os_x.mov http://devstreaming.apple.com/videos/wwdc/2014/701xx8n8ca3aq4j/701/701_sd_designing_accessories_for_ios_and_os_x.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/702xxvsjwkmhw2e/702/702_hd_managing_apple_devices.mov http://devstreaming.apple.com/videos/wwdc/2014/702xxvsjwkmhw2e/702/702_managing_apple_devices.pdf http://devstreaming.apple.com/videos/wwdc/2014/702xxvsjwkmhw2e/702/702_sd_managing_apple_devices.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/703xx9ich9e8mkn/703/703_hd_whats_new_in_the_accelerate_framework.mov http://devstreaming.apple.com/videos/wwdc/2014/703xx9ich9e8mkn/703/703_sd_whats_new_in_the_accelerate_framework.mov http://devstreaming.apple.com/videos/wwdc/2014/703xx9ich9e8mkn/703/703_whats_new_in_the_accelerate_framework.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/704xx7dmqd5m9l4/704/704_building_apps_for_enterprise_and_education.pdf http://devstreaming.apple.com/videos/wwdc/2014/704xx7dmqd5m9l4/704/704_hd_building_apps_for_enterprise_and_education.mov http://devstreaming.apple.com/videos/wwdc/2014/704xx7dmqd5m9l4/704/704_sd_building_apps_for_enterprise_and_education.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/705xx0r0x0fsaf5/705/705_distributing_enterprise_apps.pdf http://devstreaming.apple.com/videos/wwdc/2014/705xx0r0x0fsaf5/705/705_hd_distributing_enterprise_apps.mov http://devstreaming.apple.com/videos/wwdc/2014/705xx0r0x0fsaf5/705/705_sd_distributing_enterprise_apps.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/706xxjytntg51wd/706/706_hd_whats_new_in_core_location.mov http://devstreaming.apple.com/videos/wwdc/2014/706xxjytntg51wd/706/706_sd_whats_new_in_core_location.mov http://devstreaming.apple.com/videos/wwdc/2014/706xxjytntg51wd/706/706_whats_new_in_core_location.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/707xx1o5tdjnvg9/707/707_hd_whats_new_in_foundation_networking.mov http://devstreaming.apple.com/videos/wwdc/2014/707xx1o5tdjnvg9/707/707_sd_whats_new_in_foundation_networking.mov http://devstreaming.apple.com/videos/wwdc/2014/707xx1o5tdjnvg9/707/707_whats_new_in_foundation_networking.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/708xxvfd08bdof2/708/708_hd_taking_core_location_indoors.mov http://devstreaming.apple.com/videos/wwdc/2014/708xxvfd08bdof2/708/708_sd_taking_core_location_indoors.mov http://devstreaming.apple.com/videos/wwdc/2014/708xxvfd08bdof2/708/708_taking_core_location_indoors.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/709xx1q8hdvo14x/709/709_cross_platform_nearby_networking.pdf http://devstreaming.apple.com/videos/wwdc/2014/709xx1q8hdvo14x/709/709_hd_cross_platform_nearby_networking.mov http://devstreaming.apple.com/videos/wwdc/2014/709xx1q8hdvo14x/709/709_sd_cross_platform_nearby_networking.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/710xxwwk9jiqtu2/710/710_hd_writing_energy_efficient_code_part_1.mov http://devstreaming.apple.com/videos/wwdc/2014/710xxwwk9jiqtu2/710/710_sd_writing_energy_efficient_code_part_1.mov http://devstreaming.apple.com/videos/wwdc/2014/710xxwwk9jiqtu2/710/710_writing_energy_efficient_code_part_1.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/711xx6j5wzufu78/711/711_hd_keychain_and_authentication_with_touch_id.mov http://devstreaming.apple.com/videos/wwdc/2014/711xx6j5wzufu78/711/711_keychain_and_authentication_with_touch_id.pdf http://devstreaming.apple.com/videos/wwdc/2014/711xx6j5wzufu78/711/711_sd_keychain_and_authentication_with_touch_id.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/712xx1pl2u942g2/712/712_hd_writing_energy_efficient_code_part_2.mov http://devstreaming.apple.com/videos/wwdc/2014/712xx1pl2u942g2/712/712_sd_writing_energy_efficient_code_part_2.mov http://devstreaming.apple.com/videos/wwdc/2014/712xx1pl2u942g2/712/712_writing_energy_efficient_code_part_2.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/713xx1il4h4ur9c/713/713_hd_whats_new_in_ios_notifications.mov http://devstreaming.apple.com/videos/wwdc/2014/713xx1il4h4ur9c/713/713_sd_whats_new_in_ios_notifications.mov http://devstreaming.apple.com/videos/wwdc/2014/713xx1il4h4ur9c/713/713_whats_new_in_ios_notifications.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/714xx1h4szxdnyz/714/714_fix_bugs_faster_using_activity_tracing.pdf http://devstreaming.apple.com/videos/wwdc/2014/714xx1h4szxdnyz/714/714_hd_fix_bugs_faster_using_activity_tracing.mov http://devstreaming.apple.com/videos/wwdc/2014/714xx1h4szxdnyz/714/714_sd_fix_bugs_faster_using_activity_tracing.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/715xx4loqo5can9/715/715_hd_user_privacy_in_ios_and_os_x.mov http://devstreaming.apple.com/videos/wwdc/2014/715xx4loqo5can9/715/715_sd_user_privacy_in_ios_and_os_x.mov http://devstreaming.apple.com/videos/wwdc/2014/715xx4loqo5can9/715/715_user_privacy_in_ios_and_os_x.pdf&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/717xxux5eg6f9v4/717/717_hd_kids_and_apps.mov http://devstreaming.apple.com/videos/wwdc/2014/717xxux5eg6f9v4/717/717_kids_and_apps.pdf http://devstreaming.apple.com/videos/wwdc/2014/717xxux5eg6f9v4/717/717_sd_kids_and_apps.mov&lt;/p&gt;

&lt;p&gt;http://devstreaming.apple.com/videos/wwdc/2014/718xxctf8ley20j/718/718_adopting_airprint.pdf http://devstreaming.apple.com/videos/wwdc/2014/718xxctf8ley20j/718/718_hd_adopting_airprint.mov http://devstreaming.apple.com/videos/wwdc/2014/718xxctf8ley20j/718/718_sd_adopting_airprint.mov&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Welfare</title>
    <link href="http://blog.flame.org/2014/02/25/welfare.html"/>
   <updated>2014-02-25T00:00:00-06:00</updated>
   <id>http://blog.flame.org/2014/02/25/welfare</id>
   <content type="html">&lt;p&gt;There are a lot of people discussing what should happen with welfare, to which I am including housing assistance, food stamps, and other forms of direct-to-the-person assistance. I am also including disability in this group because it is just another form of assistance.&lt;/p&gt;

&lt;h2 id=&quot;my_past&quot;&gt;My Past&lt;/h2&gt;

&lt;p&gt;Many do not know some parts of my past, mostly because I don’t like talking about them. They are what helped shape my opinions on various topics, and defined me in other ways, but parts are quite uncomfortable to discuss.&lt;/p&gt;

&lt;p&gt;I grew up on welfare. My mother worked hard, but could not keep a roof over our heads and put food on the table. She applied for and received a low-rent apartment through assistance programs, food stamps, and the shameful mark I had to personally carry from the time I was 6 years old until I left high school: the dreaded “free lunch program” card of shame.&lt;/p&gt;

&lt;p&gt;I know my mother was happy to get assistance because that meant we could survive. Our family was also poor in general, so little assistance would or could come from them. It’s not like we had rich friends to help us by giving us a room to share in some unused wing of their mansion. Had she not pushed through the then strong social stigma of asking for and receiving assistance, I honestly believe I would not be here today.&lt;/p&gt;

&lt;p&gt;Oh, I’m not sure I’d have starved, but I was well on my way to becoming a criminal. I’d likely be dead or in prison. My mother said I was just hanging out with the wrong crowd, and she was quite right, but I selected the crowd as much as they selected me. I shudder to think what my life would have been had my mother not been as brave and dedicated as she was.&lt;/p&gt;

&lt;h2 id=&quot;the_shame_of_welfare&quot;&gt;The Shame of Welfare&lt;/h2&gt;

&lt;p&gt;Taking a hand-out is shameful. It is hard to accept a hand-out when you think deep down inside you don’t deserve it. It’s unearned. It’s embarrassing. It’s shameful. And it was made so by the system itself, where you have to expose yourself to scrutiny by the social workers. Then you have to pay rent, interacting with the people who know you’re one of their least desirable tenants. Then you have to pay for food with funny money – yes, that was when they printed food stamps on paper – which made everyone around you know you were poor.&lt;/p&gt;

&lt;p&gt;And then came the dreaded free lunch card at school. I had to go ask for it each week. My friends could buy a full month at a time, but I had to go and stand in line, have them check on a list, and hand me a specially colored card that did the same advertisement to all around me as the food stamps did for my mother: here is a poor child.&lt;/p&gt;

&lt;p&gt;Every one of my classmates knew I was a poor child. Some (who were not so poor themselves) were friends anyway, but many teased me for not being able to afford things like fancy notebooks, fancy pencils, or things like new clothes for school.&lt;/p&gt;

&lt;h2 id=&quot;unnecessary_things&quot;&gt;“Unnecessary” Things&lt;/h2&gt;

&lt;p&gt;My mother did save up every penny she could and bought me something not everyone had access to. My grandmother died, and left her a bit of money, which she used to purchase a computer. We’re talking ancient TRS-80 Model I here. Oh, and we had a TV. It was black and white.&lt;/p&gt;

&lt;p&gt;We had to hide these from our welfare social workers, however, because by their terms, these were assets and should be sold. They were right, they were assets. They would have taken them away as unnecessary, but they would be wrong.&lt;/p&gt;

&lt;p&gt;I watched educational TV. I’d even skip school to watch PBS. I learned stuff. I loved learning. I loved reading. I also loved taking the TV apart, but I also put it together again.&lt;/p&gt;

&lt;p&gt;With that computer, I learned to program at a very early age. I sold my first program to a small business at age 12. This was a major turning point in my life, and as I’m very much a computer expert today, was the most critical to where-I-am-now.&lt;/p&gt;

&lt;p&gt;The welfare system would have demanded we starve, or we live homeless, or we sell those things that made it possible to escape the hell we were in.&lt;/p&gt;

&lt;h2 id=&quot;so_what&quot;&gt;So, what?&lt;/h2&gt;

&lt;p&gt;I think I came out quite OK. I am not so full of ego that I believe I did this all by my own efforts. I got help. I got lots of help. I used that help to, today, pay back society in more ways and with larger magnitude than I ever took in the form of welfare.&lt;/p&gt;

&lt;p&gt;The reason I’m sharing this is in reaction to the hatred that is spread all over Facebook and other media sources about drug tests, cutting programs for the takers, and dealing with the minimum wage issue. I’m sharing this part of my darker past because each time someone posts about how wrong it is to let a welfare person live even a bit of a happy life, I become more angry.&lt;/p&gt;

&lt;p&gt;Welfare is not an easy life. It looks like it until you’ve lived on it. Some people will game the system, sure. However, from stats released by the USDA, the rate is a mere 1%. That’s $0.01 for each $1.00 spent on the program. That is very, very low.&lt;/p&gt;

&lt;p&gt;Drug tests are not the answer. Putting 99% of honest welfare recipients through more shameful and more dehumanizing acts to receive assistance won’t save a single penny. It will help fewer people, and it will not reduce the already low fraud rate by very much. It will cause more people to be denied, though, and that is also shameful. Even if some welfare recipient smokes a joint, why does it matter in your life? That small pleasure barely offsets a day’s misery, and it’s cheaper than a movie. Why punish them for something when we let congress members off for cocaine?&lt;/p&gt;

&lt;p&gt;If you want to cut welfare spending, support the increase in minimum wage. Support education for low-income families. Support a way out.&lt;/p&gt;

&lt;p&gt;The reason so many people are “working poor” is because they do not want assistance, but they also want their kids to survive. Raising the minimum wage is the best way to increase tax income and reduce expenditures on welfare at the same time. People would make more, and pay more in taxes. People would make more, and not need assistance. People would make more and not qualify for need-based assistance.&lt;/p&gt;

&lt;p&gt;And most importantly, people could live without as much shame.&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Insulated, Heated Dog House</title>
    <link href="http://blog.flame.org/2013/11/24/dog-house-heating.html"/>
   <updated>2013-11-24T00:00:00-06:00</updated>
   <id>http://blog.flame.org/2013/11/24/dog-house-heating</id>
   <content type="html">&lt;p&gt;We were recently adopted by a dog. In the middle of a minor wind storm, she appeared on our front porch, thin to the bone. We immediately did what we could, and with temperatures in the upper 80s during the day and 70’s at night, we set her up with a temporary shelter.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/dog-temporary-shelter.jpg&quot; alt=&quot;Temporary House of Doom&quot; title=&quot;Temporary shelter&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Our house already has three indoor pets, two cats and an African Grey parrot. We did not know how well she would handle being inside, so we kept her outside while we searched for her owners. We never found them, so after a few weeks it was time to build or buy a more permanent shelter.&lt;/p&gt;

&lt;h2 id=&quot;insulation&quot;&gt;Insulation&lt;/h2&gt;

&lt;p&gt;We bought a quick-and-cheaply-made wooden dog house from Petsmart, which so long as the nights were still warm was perfectly fine. However, as the nights became colder, and we were predicted to have a few days below freezing, it was time to make sure she could stay warm in her outdoor life.&lt;/p&gt;

&lt;p&gt;I went to Home Depot and picked up some 3/4” finished-one-side plywood, some 1/4” finished-one-side plywood, some 3/4” foam insulation, and some construction adhesive.&lt;/p&gt;

&lt;p&gt;First was to make the floor as stable as possible. I covered it with the foam insulation, and then with the 3/4” plywood. Considering the dog house was so flimsy before, this is a major stability upgrade. The rest of the walls and ceiling were covered with insulation, and then in 1/4” plywood.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/dog-house-floor.jpg&quot; alt=&quot;New Floor&quot; title=&quot;New House Floor&quot; /&gt;&lt;/p&gt;

&lt;p&gt;For the door, my lovely wife made a door cover out of some spare canvas we had, about three layers thick. We weighted it down in the corners with some large washers, to keep it from flapping too much in the wind.&lt;/p&gt;

&lt;p&gt;The observed change in temperature was around 12 degrees F when she was inside the house, and it took about an hour to reach that maximum. This seemed pretty consistent down to a starting temperature of 40 F, where she would raise the inside air temperature to 52 F. When it was colder, say 32 F, it rose to about 44 F. If it was windy, it took much longer, and usually only rose about 8 to 10 F.&lt;/p&gt;

&lt;h2 id=&quot;heating&quot;&gt;Heating&lt;/h2&gt;

&lt;p&gt;We were predicted to have several days (and nights) in a row where it was going to be around 24 F, and I do not think her body heat alone would keep up. I opted to add a heat source, but none of the just-buy-it heat sources were ones I thought would work well.&lt;/p&gt;

&lt;p&gt;Her house has a thick foam bed and many blankets, which she rearranges on a regular basis. She currently has a small nest, which works well, and keeps her away from the walls, which while insulated are always cooler than the inside air.&lt;/p&gt;

&lt;p&gt;I selected a 60 watt ceramic heating element from Petsmart, intended to be used as a terrarium heater. I selected 60 watt from the several options mostly because I thought it would more than suffice, and while I could have selected the 100 watt unit, it would increase the chance of a fire should she cover the element up entirely.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/dog-house-heating-element.jpg&quot; alt=&quot;Heating Element&quot; title=&quot;Heating Element&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The wire shield around the element is a double-layer of wire mesh, attached to the ceramic base using cable ties. The top, which had some sharp edges, was wrapped in a few layers of duct tape. I drilled two holes to attach the ceramic bulb holder to the house, and a hole exactly large enough to feed the 120 VAC power feed through the wall.&lt;/p&gt;

&lt;p&gt;There are no exposed wires for her to chew inside the dog house, and the metal cover keeps her and her bedding away from the heating element. The whole thing is mounted low in the house since convection is the only air movement available.&lt;/p&gt;

&lt;p&gt;I did add a standard incandescent light dimmer from Home Depot, so I could select the energy output from 0 W to the full 60 W. I do not yet have the monitoring system (described below) able to turn the unit on and off to maintain a steady temperature, so this crude system is all I have.&lt;/p&gt;

&lt;p&gt;The dimmer is mounted in a 2-gang outdoor box, with weatherproof cover, along with a standard 2-plug outlet to let me power small devices like the monitoring system.&lt;/p&gt;

&lt;p&gt;I set the power output to around 40 watts, which maintains a 18 F rise from the outside air temperature. With her inside, it rises another 10 F or so, bringing the inside temperature to between 52 F and 60 F.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/graph-doghouse-800m.png&quot; alt=&quot;Inside Temp&quot; title=&quot;Inside Temperature&quot; /&gt;&lt;/p&gt;

&lt;p&gt;There are three sensors inside the house, and one outside. The dark green is the outside, and the purple, orange, and light green are sensors at various places inside the dog house, attached to the plywood.&lt;/p&gt;

&lt;p&gt;the “bump” in the graph between 13:30 and 15:45 is where she was inside the house, sleeping. The little bump around 14:45 is where she must have left to take care of some business. The very small blip on the right hand side is where I opened the canvas door flap to check the inside for warmth and safety.&lt;/p&gt;

&lt;h2 id=&quot;monitoring&quot;&gt;Monitoring&lt;/h2&gt;

&lt;p&gt;Being the geeky type I am, I hooked up some temperature monitoring. Chances are most people won’t need to do this, but I wanted to find out just how much her body heat was able to warm her home up, amid her piles of blankets and fairly well insulated house.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/dog-house-electronics.jpg&quot; alt=&quot;Dog House Electronics&quot; title=&quot;Dog House Electronics&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In the upper left is a pill bottle, lid attached to the house, holding the monitoring gear.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;a href=&quot;https://www.sparkfun.com/products/11114&quot;&gt;Arduino Pro Mini 328 - 3.3V/8MHz&lt;/a&gt; Arduino from &lt;a href=&quot;https://www.sparkfun.com/&quot;&gt;Sparkfun Electronics&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;A Xbee 2.4 GHz S2B model Zigbee radio from Digi International (http://www.digi.com/)&lt;/li&gt;

&lt;li&gt;A &lt;a href=&quot;https://www.sparkfun.com/products/8276&quot;&gt;Breakout Board for XBee Module&lt;/a&gt; to make it easy to use the XBee modules without soldering directly, also from Sparkfun Electronics. Don’t forget the &lt;a href=&quot;https://www.sparkfun.com/products/8272&quot;&gt;2mm 10-pin headers!&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Four &lt;a href=&quot;http://www.maximintegrated.com/datasheet/index.mvp/id/2813&quot;&gt;Dallas DS18B20-PAR&lt;/a&gt; One-Wire Digital Thermometer.&lt;/li&gt;

&lt;li&gt;A small &lt;a href=&quot;https://www.sparkfun.com/products/10804&quot;&gt;power supply&lt;/a&gt; that takes the 5 VDC from the wall-wart adapter and converts it into a regulated 3.3 VDC. While the Arduino board has a 3.3 VDC regulator, it cannot supply the current necessary for transmission on the Xbee.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The receiver is a small, low-power-consumption computer that reads the temperature data, and creates graphs. I’ll dedicate a blog posting to this component alone at some point.&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Zigbee Wireless Pool Monitor (of doom!)</title>
    <link href="http://blog.flame.org/2013/05/29/zigbee-pool-monitor.html"/>
   <updated>2013-05-29T00:00:00-05:00</updated>
   <id>http://blog.flame.org/2013/05/29/zigbee-pool-monitor</id>
   <content type="html">&lt;p&gt;This last few weeks, in my copious free time, I started building a wireless pool temperature monitor. Why, you may ask?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I wanted to learn more about wireless communication with a Xbee, which speak Zigbee.&lt;/li&gt;

&lt;li&gt;I wanted to have something to do with the 3.3 V 2650-based “mega” Arduino boards I bought over a year ago.&lt;/li&gt;

&lt;li&gt;I wanted to know when I can go swimming.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/img/graph-2d.png&quot; alt=&quot;Pool Temperature Example&quot; title=&quot;Snapshot of temps on May 29, 2013&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;monitor_station&quot;&gt;Monitor Station&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;a href=&quot;https://www.sparkfun.com/products/10743&quot;&gt;Mega Pro Mini 3.3V&lt;/a&gt; Arduino from &lt;a href=&quot;https://www.sparkfun.com/&quot;&gt;Sparkfun Electronics&lt;/a&gt;. Make certain you get the &lt;a href=&quot;https://www.sparkfun.com/products/10853&quot;&gt;proper connectors!&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;A Xbee 2.4 GHz S2B model Zigbee radio from Digi International (http://www.digi.com/)&lt;/li&gt;

&lt;li&gt;A &lt;a href=&quot;https://www.sparkfun.com/products/8276&quot;&gt;Breakout Board for XBee Module&lt;/a&gt; to make it easy to use the XBee modules without soldering directly, also from Sparkfun Electronics. Don’t forget the &lt;a href=&quot;https://www.sparkfun.com/products/8272&quot;&gt;2mm 10-pin headers!&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Three &lt;a href=&quot;http://www.maximintegrated.com/datasheet/index.mvp/id/2813&quot;&gt;Dallas DS18B20-PAR&lt;/a&gt; One-Wire Digital Thermometer.&lt;/li&gt;

&lt;li&gt;One &lt;a href=&quot;http://www.maximintegrated.com/datasheet/index.mvp/id/2815&quot;&gt;Dallas DS18S20&lt;/a&gt; Digital Thermometer.&lt;/li&gt;

&lt;li&gt;A 2-cell AA-size battery holder. I plan on making this a self-sustaining solar install – eventually, but for now it seems to be running for 6 days on these cells. I do plan on using a DC-DC converter of some sort to drive it off more easily acquired, mainstream solar powered sources.&lt;/li&gt;

&lt;li&gt;Temperature probe assemblies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Arduino, battery, and XBee are inside a waterproof plastic box, with a hole cut on the side with a water-resistant right-angle connector hanging off the side. I am using some reclaimed CAT-3 cable. The DS18S20 is soldered on a small board, right next to the XBee’s adapter, so I can monitor the temperature of the box as well as the pool.&lt;/p&gt;

&lt;p&gt;To build an insanely over-engineered waterproof probe with three sensors, I used some 1.25 inch schedule 40 PVC tubing I had lying around, which was slightly longer than the pool is deep, measured from the top of the pool’s wall. I then cut this in half, and drilled three holes: one near the top of one of the halves, and two holes near both ends of the other. I put these far enough down so I can use a coupler and install an end cap on the in-pool end, and a 90 degree bend on the other.&lt;/p&gt;

&lt;p&gt;I then tapped each hole I drilled, and inserted a stainless steel bolt which is long enough enough into the tube to allow me to epoxy the DS18B20-PAR in place on the end of the bolt. Just to be safe, I also eventually covered this whole mess with silicone.&lt;/p&gt;

&lt;p&gt;After putting on an end-cap, using the coupler to make one long probe, a right-angle and more pipe to bring it over the pool’s top, it is clamped in place, with the wire running to the Arduino box.&lt;/p&gt;

&lt;p&gt;(Pictures coming later, when it’s not raining!)&lt;/p&gt;

&lt;h2 id=&quot;receiver_station&quot;&gt;Receiver Station&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;a href=&quot;https://www.sparkfun.com/products/8687&quot;&gt;XBee Explorer USB&lt;/a&gt; from, you guessed it… Sparkfun Electronics.&lt;/li&gt;

&lt;li&gt;A XBee S2B with an RPSMA antenna connector, which currently houses a small RPSMA antenna I repurposed from an ancient wireless network camera.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is plugged into my laptop currently, but I plan on using a spare wireless router I have on hand, after modifying it to have Ruby (yes, Ruby) installed. It will record data, and transmit it to my off-site host. I hope to let it record enough data that, should the network be down for a few days, nothing is lost.&lt;/p&gt;

&lt;h2 id=&quot;software&quot;&gt;Software&lt;/h2&gt;

&lt;p&gt;The software consists of three primary applications: the Arduino code, which runs on the sensor node; the Ruby code to receive data from the in-house XBee; the code to graph all of this stuff.&lt;/p&gt;

&lt;h3 id=&quot;arduino&quot;&gt;Arduino&lt;/h3&gt;

&lt;p&gt;I am interested in comparing data year-to-year, so a long-duration data store is important. Rather than re-invent the wheel, I chose to use a bit of software I have used often in the past: &lt;a href=&quot;http://oss.oetiker.ch/rrdtool/&quot;&gt;rrdtool&lt;/a&gt;. I have multiple stats that I record, temperature from the 4 external sensors, local and remote RSSI indications, and local and remote voltage, measured from the XBee devices via AT commands.&lt;/p&gt;

&lt;p&gt;The Arduino software is careful to conserve power as much as possible. It lowers the clock down to the slowest setting possible using the system clock pre-scaler. It sleeps, waiting for a timer interrupt to wake it. With the configuration I have, this occurs roughly every 3.5 seconds. I then count these events, and once every 60 seconds or slightly less, the Arduino’s clock is returned to 8 MHz, the one-wire sensors are read, the XBee is awakened from its sleep, and the data is transmitted. Once every 10 minutes or so, the One-Wire bus is re-probed to detect new or missing devices, although I may remove this part, or only do it via remote command, or reset.&lt;/p&gt;

&lt;p&gt;After the transmissions are complete, a short (100ms) delay occurs just to ensure any remote AT commands have made it to the XBee, and it is put to sleep again. The clock is then slowed down, the timer is re-armed, and the Arduino once again sleeps.&lt;/p&gt;

&lt;h3 id=&quot;receiver&quot;&gt;Receiver&lt;/h3&gt;

&lt;p&gt;The receiver is written in Ruby. It opens the USB Explorer, and receives API-formatted packets. Each time a new sensor reading is received, it sends two remote AT requests to ask the remote end its RSSI reading and voltage, and then records the sensor readings to individual RRD files. When the RSSI and voltage reports are received, they are also written to RRD files.&lt;/p&gt;

&lt;h3 id=&quot;grapher&quot;&gt;Grapher&lt;/h3&gt;

&lt;p&gt;The simplest of all! These just use rrdtool to graph the data, in various time scales.&lt;/p&gt;

&lt;h2 id=&quot;coming_soon&quot;&gt;Coming Soon!&lt;/h2&gt;

&lt;p&gt;Real-time graphs. Yay!&lt;/p&gt;</content>
  </entry>
  
</feed>

