<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-770546387763743871</id><updated>2024-09-08T23:09:54.806-07:00</updated><category term="App Store"/><category term="Milestone"/><category term="iOS"/><category term="iOS 7 music app"/><title type='text'>Random Projects</title><subtitle type='html'>A way for me to keep track of my various projects.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-3206028861250064564</id><published>2013-11-11T05:54:00.001-08:00</published><updated>2013-11-11T05:58:43.196-08:00</updated><title type='text'>Custom UITableViewCells</title><content type='html'>I&#39;ve decided to write a blog post about the best way to create a custom UITableViewCell using a xib. I haven&#39;t been able to find a tutorial that covers all the steps, and since this is a very common thing, I&#39;m going to outline them here.&lt;br /&gt;
&lt;br /&gt;
To start, I&#39;m going to assume you have a project set up, and you have a view controller that contains a UITableView.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhli1zGYG-XFKd3p0IqMmB-UR0_n6TXfBNTfnkOfSiRMeYpzPGwiDdGDObgLrHRZRJYDw6C96Jq1P4K0lAlG2IZblWMO5AfbRbwpmrG923BUI4_dzG_yt_oeDU7X9tbIIILzK4sUXfLXbY/s1600/Step+1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;303&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhli1zGYG-XFKd3p0IqMmB-UR0_n6TXfBNTfnkOfSiRMeYpzPGwiDdGDObgLrHRZRJYDw6C96Jq1P4K0lAlG2IZblWMO5AfbRbwpmrG923BUI4_dzG_yt_oeDU7X9tbIIILzK4sUXfLXbY/s400/Step+1.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
First thing you are going to do is create the cell.&lt;br /&gt;
&lt;br /&gt;
1) Go File &amp;gt; New &amp;gt; File... &amp;gt; Cocoa Touch &amp;gt; Objective-C class.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1ucH1nz96Zv4Z_hWI8jSL6hUWj2amxMr3KOH_1YFnYddxZTlRPnOmhdiloxk7jZ1o2LFMD6o8EK4e9y7f7Q5B40XDaLzyBTRHZy0pYVXid2bXe2GBG9bRyQ_Fno-oXaDeKAXEOlD4KCA/s1600/Step+2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;303&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1ucH1nz96Zv4Z_hWI8jSL6hUWj2amxMr3KOH_1YFnYddxZTlRPnOmhdiloxk7jZ1o2LFMD6o8EK4e9y7f7Q5B40XDaLzyBTRHZy0pYVXid2bXe2GBG9bRyQ_Fno-oXaDeKAXEOlD4KCA/s400/Step+2.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
2) In the &quot;Subclass of&quot; field, type UITableViewCell. In the &quot;Class&quot; field, type the name of your custom cell. Click next, and make sure to include it in your target.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdNK5tJSDZsSJho9Bhl_fE-X61sbHY5o3_b5Zdya1D7MIwHpaMlEGSGg9l3KlvvlFjl_SZn4_x7CWa2iiB4Oy07cf4RdiZtHQ_GbPIVk86owg_jNGk_6SS6MMJ_MWTUlDlKBnrJAJpi2Y/s1600/Step+3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;303&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdNK5tJSDZsSJho9Bhl_fE-X61sbHY5o3_b5Zdya1D7MIwHpaMlEGSGg9l3KlvvlFjl_SZn4_x7CWa2iiB4Oy07cf4RdiZtHQ_GbPIVk86owg_jNGk_6SS6MMJ_MWTUlDlKBnrJAJpi2Y/s400/Step+3.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
3) Once the class file has been added, you can add the .xib. Go File &amp;gt; New &amp;gt; File... &amp;gt; User Interface &amp;gt; View. Make sure to name the view the same as your custom cell&#39;s class name (for organization purposes).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfQ00z3gkbgvywpe5WVbUrx7WpKErCQwDI94eZ6Y34usyj6iRIoTLs2tRIsbvxjblW-viEu656-fYOSrSbVfh4wVveWgUfbsS5JTe0Cmr-H44hFWyaENzKcrK3Rq3WXYH2lxK67zlZk3g/s1600/Step+4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;303&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfQ00z3gkbgvywpe5WVbUrx7WpKErCQwDI94eZ6Y34usyj6iRIoTLs2tRIsbvxjblW-viEu656-fYOSrSbVfh4wVveWgUfbsS5JTe0Cmr-H44hFWyaENzKcrK3Rq3WXYH2lxK67zlZk3g/s400/Step+4.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
4) In the .xib, click on the view, and delete it. Then, from the Object Library (on the bottom right), drag a UITableViewCell onto the canvas.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdvCTxzp5vWP46BpU19gKihmF74Cr0CDqI4uHkRJi0H4PvsgIiuAcBPzTVD2lctmUp4wR9MDMEnydCaqCe8eZsLjah3kOh8fsP0kwqHjdLWa5-Z1xZ7Bf1gyMDqFntM3NvJ1c_aUZsZ2w/s1600/Step+5.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;303&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdvCTxzp5vWP46BpU19gKihmF74Cr0CDqI4uHkRJi0H4PvsgIiuAcBPzTVD2lctmUp4wR9MDMEnydCaqCe8eZsLjah3kOh8fsP0kwqHjdLWa5-Z1xZ7Bf1gyMDqFntM3NvJ1c_aUZsZ2w/s400/Step+5.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
5) Click on the cell in the document tree, then in the Identity Inspector (top right), type your custom cell&#39;s class name in the class field. It should autocomplete to the name.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCknyxC9PIOFvR6SMS8kI6ExXuVHi4hmDFybBI6JKhPm6FvIDMvH9bqfXw0VfgEjCWAdbH3AHCtnoL8Q5zAtoDmogVJgnOGOQvh5c5H3PrYtOors8f04qgj2zJlIjgkJcvdgQtJwnS1IE/s1600/Step+6.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;303&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCknyxC9PIOFvR6SMS8kI6ExXuVHi4hmDFybBI6JKhPm6FvIDMvH9bqfXw0VfgEjCWAdbH3AHCtnoL8Q5zAtoDmogVJgnOGOQvh5c5H3PrYtOors8f04qgj2zJlIjgkJcvdgQtJwnS1IE/s400/Step+6.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
6) In the .xib, click on &quot;File&#39;s Owner&quot;. In the Identity Inspector, set the class to be your View Controller that contains the UITableView.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcyNd4kx1rzUIvBb4SRZzufyXbbxDVIMWNe8oBj8LUG6uni2dpjbIMN24OszRt_Bnf1tFqtNUPaGzgT619HdeJl9TglMe3N8usw8W1lGV0ZloGmNArvdMw6V85X4Qtt2VE9h4PldUT-nw/s1600/Step+7.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;303&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcyNd4kx1rzUIvBb4SRZzufyXbbxDVIMWNe8oBj8LUG6uni2dpjbIMN24OszRt_Bnf1tFqtNUPaGzgT619HdeJl9TglMe3N8usw8W1lGV0ZloGmNArvdMw6V85X4Qtt2VE9h4PldUT-nw/s400/Step+7.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
7) Now, In Assistant Editor mode, switch the second view to your ViewController.m class. It should be located under Automatic in the file tree. If you don&#39;t see it there, try clicking on &quot;File&#39;s Owner&quot; (the yellow cube on the left), and try again.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaTlZGh_Orbe6sXPJEbYNAc6WwzV971qLADLWEb7hHPWlghRI-jtUTcQHmSX3hljmLDT0aMbnW22BJpzwKjE5zCrC-AtpwcMG6cPB-gTkbhSol-Or8QGT9gRoT5RbC_VZDPcdnIRgPqW4/s1600/Step+8.1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;188&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaTlZGh_Orbe6sXPJEbYNAc6WwzV971qLADLWEb7hHPWlghRI-jtUTcQHmSX3hljmLDT0aMbnW22BJpzwKjE5zCrC-AtpwcMG6cPB-gTkbhSol-Or8QGT9gRoT5RbC_VZDPcdnIRgPqW4/s400/Step+8.1.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
8) Connect the UITableViewCell in the .xib to your viewController class as an IBOutlet (control+drag from the cell to your .m file). Make sure to also import your CustomCell.h in ViewController.m.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYBwHDmCIzvvLtWwfJ3TE7JSlG1glcUpf3I6m_0f_bVnCZVvNK1Ts_D7LVvRLzMJY-FttqIzlBEsa4XFebSrlddwefvkcuWzVF9N7mzU1xgLqcuumYkPyepEWiNOQvvJQlFpFx_r752KY/s1600/Step+8.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;303&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYBwHDmCIzvvLtWwfJ3TE7JSlG1glcUpf3I6m_0f_bVnCZVvNK1Ts_D7LVvRLzMJY-FttqIzlBEsa4XFebSrlddwefvkcuWzVF9N7mzU1xgLqcuumYkPyepEWiNOQvvJQlFpFx_r752KY/s400/Step+8.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
9) Customize the UITableViewCell with UILabels, UIImageViews, etc, and make sure to connect everything to CustomCell.h, not the View Controller class. Make sure to add a custom identifier in the Identifier field in the Attributes Inspector. Also, make sure to name your views uniquely. If you were to name your UIImageView &quot;imageView&quot;, the results are unexpected since UITableViewCell already has this property.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCf982Rrsex-5klPl8_jEmENkyZFSad9DViuoTifqSlI8AY6UBDaec_2tt7HkSBRBXcRjwus1P3-9vMKH7wEqcP2dMBQGoH56cSwN92rShE-d0TFQEAD7vgn5SwR5zxCoj7voAVpSpc8I/s1600/Step+9.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;303&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCf982Rrsex-5klPl8_jEmENkyZFSad9DViuoTifqSlI8AY6UBDaec_2tt7HkSBRBXcRjwus1P3-9vMKH7wEqcP2dMBQGoH56cSwN92rShE-d0TFQEAD7vgn5SwR5zxCoj7voAVpSpc8I/s400/Step+9.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0eIy778nNkxqY0Y5bEIvJn2GG39Ea_ZYkH7UFMvveAh6lZsYF6-tu3hhTC6lQPyi20Zr7Gkc892NUWNaGGCbdF4IEExhOtva6BCr1dEqlfYpgi2vOdIrbPsk5S4Q33fHmemsNKhyT9CU/s1600/Step+10.1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;333&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0eIy778nNkxqY0Y5bEIvJn2GG39Ea_ZYkH7UFMvveAh6lZsYF6-tu3hhTC6lQPyi20Zr7Gkc892NUWNaGGCbdF4IEExhOtva6BCr1dEqlfYpgi2vOdIrbPsk5S4Q33fHmemsNKhyT9CU/s400/Step+10.1.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
10) Now, we&#39;re going to make a UINib property to hold on to the nib so that we don&#39;t have to load it for every cell.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgerY4wmEc7VgEKSnegds1gUzv9MLH5wBhX063f7G8SwYlWx4DU4OCr_t0xBpMRNSUyTwZDi7lECImXJVC3tTpRkNY7W1hJAYFFrQaFPBGCnSVRWLnDjU4_czC9djk1r1ERTiM3djoi-so/s1600/Step+11.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgerY4wmEc7VgEKSnegds1gUzv9MLH5wBhX063f7G8SwYlWx4DU4OCr_t0xBpMRNSUyTwZDi7lECImXJVC3tTpRkNY7W1hJAYFFrQaFPBGCnSVRWLnDjU4_czC9djk1r1ERTiM3djoi-so/s400/Step+11.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
11) Now we&#39;re going to implement the two required UITableViewDataSource methods. They should look like this.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdGKzC5IuPe0KmnLA3nkqik_aoL6jFhhCMtr-n4YY_3sU1Xxef7yg83WAJGCy4i8Y6NQ5CVVvAjvmJRcW4qp_dUPqStQ-hs5STAI7b8caOWvZ5WyoDBq7w4zVHy4jS3WburFjSAaYDxaQ/s1600/Step+12.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;312&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdGKzC5IuPe0KmnLA3nkqik_aoL6jFhhCMtr-n4YY_3sU1Xxef7yg83WAJGCy4i8Y6NQ5CVVvAjvmJRcW4qp_dUPqStQ-hs5STAI7b8caOWvZ5WyoDBq7w4zVHy4jS3WburFjSAaYDxaQ/s400/Step+12.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Run your app, and you should get something similar to the image below:&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisoVipUpaDwfkHRUXeV7HQDfT7me6F3clu-Pep0QpzHcOq2KeGKJSzIvz1TjR9scbvcaL7CQJo3aXYN1l7sBlEjL1llSWQnsJdhgMQsR2zc0ZKG4U0hHOC4lEqPAIcCYcXr6TOoeASr0M/s1600/Step+13.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisoVipUpaDwfkHRUXeV7HQDfT7me6F3clu-Pep0QpzHcOq2KeGKJSzIvz1TjR9scbvcaL7CQJo3aXYN1l7sBlEjL1llSWQnsJdhgMQsR2zc0ZKG4U0hHOC4lEqPAIcCYcXr6TOoeASr0M/s640/Step+13.png&quot; width=&quot;340&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/3206028861250064564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2013/11/custom-uitableviewcells.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/3206028861250064564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/3206028861250064564'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2013/11/custom-uitableviewcells.html' title='Custom UITableViewCells'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhli1zGYG-XFKd3p0IqMmB-UR0_n6TXfBNTfnkOfSiRMeYpzPGwiDdGDObgLrHRZRJYDw6C96Jq1P4K0lAlG2IZblWMO5AfbRbwpmrG923BUI4_dzG_yt_oeDU7X9tbIIILzK4sUXfLXbY/s72-c/Step+1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-4370318207715757101</id><published>2013-08-05T20:23:00.001-07:00</published><updated>2013-08-05T20:24:30.343-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iOS 7 music app"/><title type='text'>Sneak Peek at my new Music app</title><content type='html'>I&#39;m working on a new music app that runs on iOS 7. Here&#39;s a few sneak peek screenshots of the app.&amp;nbsp;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxYWynZPmMF-KtzgHHHZz-UkozsS-AQEENosLOZM8tUo6gdrXEb3tZTSENJrUCoyA52UVY7F0btvM2jtPo8sxbIe1moay01fNcJb7FkROe5n6W029IKdpTMX8cmRMtiV8tcbsZ6BA6H0Q/s640/blogger-image--1100526995.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxYWynZPmMF-KtzgHHHZz-UkozsS-AQEENosLOZM8tUo6gdrXEb3tZTSENJrUCoyA52UVY7F0btvM2jtPo8sxbIe1moay01fNcJb7FkROe5n6W029IKdpTMX8cmRMtiV8tcbsZ6BA6H0Q/s640/blogger-image--1100526995.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxYWynZPmMF-KtzgHHHZz-UkozsS-AQEENosLOZM8tUo6gdrXEb3tZTSENJrUCoyA52UVY7F0btvM2jtPo8sxbIe1moay01fNcJb7FkROe5n6W029IKdpTMX8cmRMtiV8tcbsZ6BA6H0Q/s640/blogger-image--1100526995.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3x5HXG4eLYcuz96_Lirdk2KjPvhj2VPhR7TnGPznO1jYDDK7YATfgOhWu2XwD_vYG1ObwfE48_9AswKlqe86k2qRdmQeo9AZd1Jpy27-iFfAaqUrOfSVyoBshJ-zilmXzWGL6pkHC2to/s640/blogger-image--710065199.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3x5HXG4eLYcuz96_Lirdk2KjPvhj2VPhR7TnGPznO1jYDDK7YATfgOhWu2XwD_vYG1ObwfE48_9AswKlqe86k2qRdmQeo9AZd1Jpy27-iFfAaqUrOfSVyoBshJ-zilmXzWGL6pkHC2to/s640/blogger-image--710065199.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJOItBMe91vAwmLhgsmpk0CzDUDzWb1Lr_3MgdCBcPmgfibH1c_11hwZPCTyoeImUC9h1X4YVsfXVNP_QwckI8vQh7hD7wOPbV-eTs3NQvpp-vQmqGgKCQuVPcQt7UBaFxoGck5XIq9r8/s640/blogger-image--1174070392.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJOItBMe91vAwmLhgsmpk0CzDUDzWb1Lr_3MgdCBcPmgfibH1c_11hwZPCTyoeImUC9h1X4YVsfXVNP_QwckI8vQh7hD7wOPbV-eTs3NQvpp-vQmqGgKCQuVPcQt7UBaFxoGck5XIq9r8/s640/blogger-image--1174070392.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6sOuyUEK7H6vh5ZjwG12vqXiYGIcLJImfkqdIkKk0DbGAcjQDWOnKoiCD7A3WXpbKXZgnoM7ay1xIRvPVNdDivdNF1N2XTBjZz1P5hK2PHYAMQT6QeTrTO75LcVW7fHQHJxQOrwpqVKw/s640/blogger-image-1791529069.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6sOuyUEK7H6vh5ZjwG12vqXiYGIcLJImfkqdIkKk0DbGAcjQDWOnKoiCD7A3WXpbKXZgnoM7ay1xIRvPVNdDivdNF1N2XTBjZz1P5hK2PHYAMQT6QeTrTO75LcVW7fHQHJxQOrwpqVKw/s640/blogger-image-1791529069.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/4370318207715757101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2013/08/sneak-peek-at-my-new-music-app.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/4370318207715757101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/4370318207715757101'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2013/08/sneak-peek-at-my-new-music-app.html' title='Sneak Peek at my new Music app'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxYWynZPmMF-KtzgHHHZz-UkozsS-AQEENosLOZM8tUo6gdrXEb3tZTSENJrUCoyA52UVY7F0btvM2jtPo8sxbIe1moay01fNcJb7FkROe5n6W029IKdpTMX8cmRMtiV8tcbsZ6BA6H0Q/s72-c/blogger-image--1100526995.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-1763175304808970170</id><published>2013-06-16T19:24:00.000-07:00</published><updated>2013-07-02T13:51:17.061-07:00</updated><title type='text'>FacePic now in the App Store!</title><content type='html'>The premise of the app is combining pictures from the back and front cameras on your device to create a single image, which can be shared on multiple social networks.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhweJJb5KYunL8hd6H209xGBhL3rZeru_QVyoJoB7QeOoiofpH9XTrFuV7hejHV4xy7B3JWpOGmyjbwTypyrAOS1ktQvPYArJdjQQcFQ6swhLORKKUfK6yu2tsmuDd_KACufCwYIik6_PI/s1600/iOS+Simulator+Screen+shot+Jun+14,+2013,+2.06.56+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhweJJb5KYunL8hd6H209xGBhL3rZeru_QVyoJoB7QeOoiofpH9XTrFuV7hejHV4xy7B3JWpOGmyjbwTypyrAOS1ktQvPYArJdjQQcFQ6swhLORKKUfK6yu2tsmuDd_KACufCwYIik6_PI/s400/iOS+Simulator+Screen+shot+Jun+14,+2013,+2.06.56+PM.png&quot; width=&quot;225&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
The app has a very simple interface, and responds quite quickly. Look for it in the App Store &lt;a href=&quot;https://itunes.apple.com/ca/app/facepic/id661772193?mt=8&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjleLm-I9sNJKebvOG8jQWn05-uCkRQ3Aemz65PCcVR_lm58hMLIN9fIafy1eu4P41QegAIoj9cTCbKUIf_U7b_ioAsqDtR4Y1hPZDo0tGr7UCCQSPSFOEFqmnAz-pPYg_tiz6lj7xEHeU/s1600/iOS+Simulator+Screen+shot+Jun+14,+2013,+2.05.55+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjleLm-I9sNJKebvOG8jQWn05-uCkRQ3Aemz65PCcVR_lm58hMLIN9fIafy1eu4P41QegAIoj9cTCbKUIf_U7b_ioAsqDtR4Y1hPZDo0tGr7UCCQSPSFOEFqmnAz-pPYg_tiz6lj7xEHeU/s400/iOS+Simulator+Screen+shot+Jun+14,+2013,+2.05.55+PM.png&quot; width=&quot;225&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/1763175304808970170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2013/06/facepic-coming-to-app-store-this-week.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/1763175304808970170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/1763175304808970170'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2013/06/facepic-coming-to-app-store-this-week.html' title='FacePic now in the App Store!'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhweJJb5KYunL8hd6H209xGBhL3rZeru_QVyoJoB7QeOoiofpH9XTrFuV7hejHV4xy7B3JWpOGmyjbwTypyrAOS1ktQvPYArJdjQQcFQ6swhLORKKUfK6yu2tsmuDd_KACufCwYIik6_PI/s72-c/iOS+Simulator+Screen+shot+Jun+14,+2013,+2.06.56+PM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-7380931953255584568</id><published>2013-03-02T22:13:00.002-08:00</published><updated>2013-03-02T22:13:41.849-08:00</updated><title type='text'>AirBoard 2.0 Update</title><content type='html'>I&#39;ve completed the 2.0 version of AirBoard. Key features include a new UI, more logic for the second screen display, and support for creating brackets. It&#39;s available in the AppStore right now: &lt;a href=&quot;https://itunes.apple.com/ca/app/air-scoreboard/id570486378?mt=8&quot; target=&quot;_blank&quot;&gt;FULL&lt;/a&gt; or &lt;a href=&quot;https://itunes.apple.com/ca/app/air-scoreboard-free/id574317988?mt=8&quot; target=&quot;_blank&quot;&gt;FREE&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The bracket creator works by setting up matches, and only advancing the tournament once all the matches have been completed. As you go through each match, completing it, the second screen scrolls to the next unplayed match. Eliminated contestants are stored at the bottom of the tableview.&lt;br /&gt;
&lt;br /&gt;
Here&#39;s some screenshots of the app in action:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI-gy9FcKWC4nPy5XA_QkejHvLL9g2GKzok-u-y5qblhMMAumHtqXgYcfgsVjY8kfb32fpjaIIOxMt2_-S0PsvPOh2GYy3jZBk-JfK7gseiG-0xTFjWFHsZRJ_n5OyEIDa9eLHB4VsAhE/s1600/iOS+Simulator+Screen+shot+2013-02-24+7.06.45+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI-gy9FcKWC4nPy5XA_QkejHvLL9g2GKzok-u-y5qblhMMAumHtqXgYcfgsVjY8kfb32fpjaIIOxMt2_-S0PsvPOh2GYy3jZBk-JfK7gseiG-0xTFjWFHsZRJ_n5OyEIDa9eLHB4VsAhE/s400/iOS+Simulator+Screen+shot+2013-02-24+7.06.45+PM.png&quot; width=&quot;225&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnaf1IIpOIwsKIFstcBGMC0ohoRxoexjCpDAQvpgW5dAJS8DUlll1t8acIAZVPDkoOZB3lkGclDhEVwV3qpyfI2xVKSQHhqtC9l_imuPBFu1_3jEBcj3uf0HimpPUQFggSS6QObcoUfDo/s1600/iOS+Simulator+Screen+shot+2013-02-24+7.06.31+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnaf1IIpOIwsKIFstcBGMC0ohoRxoexjCpDAQvpgW5dAJS8DUlll1t8acIAZVPDkoOZB3lkGclDhEVwV3qpyfI2xVKSQHhqtC9l_imuPBFu1_3jEBcj3uf0HimpPUQFggSS6QObcoUfDo/s400/iOS+Simulator+Screen+shot+2013-02-24+7.06.31+PM.png&quot; width=&quot;225&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvmsTwJLdbQ_Z2axDsf9ylDQlp7Fq-7nPIUH_2Gjx_0wiXkqeMwljAT_h_QplZ58ksgvRREmr3U24wvPUxCdcEB7fMkY8TCOC2lJkd6DiSJspHKaFIZa8rFdnQaiFWefsK4aoNzgirX2s/s1600/iOS+Simulator+Screen+shot+2013-02-24+7.03.57+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvmsTwJLdbQ_Z2axDsf9ylDQlp7Fq-7nPIUH_2Gjx_0wiXkqeMwljAT_h_QplZ58ksgvRREmr3U24wvPUxCdcEB7fMkY8TCOC2lJkd6DiSJspHKaFIZa8rFdnQaiFWefsK4aoNzgirX2s/s640/iOS+Simulator+Screen+shot+2013-02-24+7.03.57+PM.png&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/7380931953255584568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2013/03/airboard-20-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/7380931953255584568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/7380931953255584568'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2013/03/airboard-20-update.html' title='AirBoard 2.0 Update'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI-gy9FcKWC4nPy5XA_QkejHvLL9g2GKzok-u-y5qblhMMAumHtqXgYcfgsVjY8kfb32fpjaIIOxMt2_-S0PsvPOh2GYy3jZBk-JfK7gseiG-0xTFjWFHsZRJ_n5OyEIDa9eLHB4VsAhE/s72-c/iOS+Simulator+Screen+shot+2013-02-24+7.06.45+PM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-1814697610960165041</id><published>2013-02-17T15:07:00.001-08:00</published><updated>2013-02-17T15:07:50.801-08:00</updated><title type='text'>AirBoard update coming soon</title><content type='html'>I&#39;ve got an update for my scoreboard app AirBoard coming out soon. This new version supports better rankings, and the ability to turn a leader board into a single elimination bracket. I&#39;m currently working on updating the assets, and once that&#39;s done I&#39;ll be submitting. </content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/1814697610960165041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2013/02/airboard-update-coming-soon.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/1814697610960165041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/1814697610960165041'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2013/02/airboard-update-coming-soon.html' title='AirBoard update coming soon'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-6064633605109913554</id><published>2013-01-21T21:03:00.002-08:00</published><updated>2013-01-21T21:03:36.003-08:00</updated><title type='text'>Hundreds - Next Riddle (59)</title><content type='html'>From my sources online, I determined that this riddle was a&amp;nbsp;Vigenère cipher.&amp;nbsp;Vigenère ciphers are similar to Caesar ciphers, except instead of the contacts 3 character shift, it has a shift that is based on a keyword. The keyword is repeated until it is the same length as the text to encode. &amp;nbsp;i.e. If LEMON was the keyword, you would repeat it like so&lt;br /&gt;
&lt;br /&gt;
LEMONLEMONLEMONLEMON&lt;br /&gt;
&lt;br /&gt;
for a message like&lt;br /&gt;
&lt;br /&gt;
THISISASECRETMESSAGE&lt;br /&gt;
&lt;br /&gt;
Then, you take the location of each letter in the alphabet and add them together to get the new letter (it&#39;s explained more complexly on &lt;a href=&quot;http://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher&quot; target=&quot;_blank&quot;&gt;wikipedia&lt;/a&gt;, but this is what it boils down to). This would produce the following secret message:&lt;br /&gt;
&lt;br /&gt;
ELUGVDEESPCIFARDWMUR&lt;br /&gt;
&lt;br /&gt;
Thus, to decode one of these, you simply need a keyword, and subtract the keyword&#39;s letters from the encoded message&#39;s. This is the ruby script I wrote to do this:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
file = File.new(&lt;span style=&quot;color: #d12f1b;&quot;&gt;&quot;vigenere.txt&quot;&lt;/span&gt;, &lt;span style=&quot;color: #d12f1b;&quot;&gt;&quot;r&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
cypher = file.gets&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
file.close&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px; min-height: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
$key = {}&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
keyword = ARGV[0]&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px; min-height: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #008400; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #d12f1b; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;$letterArray = [&lt;/span&gt;&quot;A&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;B&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;C&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;D&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;E&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;F&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;G&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;H&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;I&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;J&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;K&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;L&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;M&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;N&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;O&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;P&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;Q&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;R&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;S&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;T&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;U&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;V&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;W&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;X&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;Y&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&quot;Z&quot;&lt;span style=&quot;color: black;&quot;&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px; min-height: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
string = &lt;span style=&quot;color: #d12f1b;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
count = &lt;span style=&quot;color: #272ad8;&quot;&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
cypher.each_byte { |i|&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #bb2ca2;&quot;&gt;if&lt;/span&gt;(i.chr == &lt;span style=&quot;color: #d12f1b;&quot;&gt;&quot; &quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; string = string + &lt;span style=&quot;color: #d12f1b;&quot;&gt;&quot; &quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #bb2ca2; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;else&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; keywordLetter = keyword.split(&lt;span style=&quot;color: #272ad8;&quot;&gt;&#39;&#39;&lt;/span&gt;)[count%keyword.length]&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; offset = $letterArray.index(keywordLetter)&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; index = $letterArray.index(i.chr)&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; string = string + $letterArray[(index-offset)%&lt;span style=&quot;color: #272ad8;&quot;&gt;26&lt;/span&gt;]&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; count+=&lt;span style=&quot;color: #272ad8;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #bb2ca2;&quot;&gt;end&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
}&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
puts &lt;span style=&quot;color: #d12f1b;&quot;&gt;&quot;\n&quot;&lt;/span&gt;+string+&lt;span style=&quot;color: #d12f1b;&quot;&gt;&quot;\n\n&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: #d12f1b;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;The script takes a single argument, which is the keyword, and tries to decode the message. With that taken care of, all that was left was to guess the keyword. Judging by the previous messages, the keyword had something to do with a harp or a chord or something. I tried pretty much everything I could think of, and then tried RADIUS after looking at the cipher&#39;s achievements page. The secret message:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times, Times New Roman, serif;&quot;&gt;Being part of a bad riddle that nobody cares about.&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;font-family: Times; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihmKUKswFwKmY601Ao7OxQh2AUF0UDM6T5-542dq06mjFxZPBGoU8YZ0O3HM4v6ki5ufM-lBxc0p-wEmvPWcOoRAeVUxYqpgIlt5OWk5ko4z9xlPd6PZCLkSWFNZRXmBBND7JPHlzkQXg/s1600/IMG_0206.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihmKUKswFwKmY601Ao7OxQh2AUF0UDM6T5-542dq06mjFxZPBGoU8YZ0O3HM4v6ki5ufM-lBxc0p-wEmvPWcOoRAeVUxYqpgIlt5OWk5ko4z9xlPd6PZCLkSWFNZRXmBBND7JPHlzkQXg/s640/IMG_0206.JPG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;font-family: Times; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/6064633605109913554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2013/01/hundreds-next-riddle-59.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/6064633605109913554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/6064633605109913554'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2013/01/hundreds-next-riddle-59.html' title='Hundreds - Next Riddle (59)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihmKUKswFwKmY601Ao7OxQh2AUF0UDM6T5-542dq06mjFxZPBGoU8YZ0O3HM4v6ki5ufM-lBxc0p-wEmvPWcOoRAeVUxYqpgIlt5OWk5ko4z9xlPd6PZCLkSWFNZRXmBBND7JPHlzkQXg/s72-c/IMG_0206.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-2683301250877804014</id><published>2013-01-08T19:45:00.001-08:00</published><updated>2013-01-08T19:45:57.836-08:00</updated><title type='text'>Hundreds - Next Riddle (45)</title><content type='html'>This riddle looked more like the third riddle, where letter substitution was necessary. With my handy script, I began substituting letters for short words until they made sense. Pretty soon the solution popped out: &quot;What do persistence and a golden harp have in common&quot;. Looks like the riddles are related somehow...&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3kaFu3ijwS4uNvU3cK4hqpNN6ww1ChPElmj2wXyIFvmTHdOVUTWQH8zV6mM7F0lxyP2FlqT9GSLNQZ3dzMz0dElnJT1AykL71jpO0vTF8xm4wTLgm0i_jKCCyRi2jG_NkZrwA-m2KymI/s1600/IMG_0127.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3kaFu3ijwS4uNvU3cK4hqpNN6ww1ChPElmj2wXyIFvmTHdOVUTWQH8zV6mM7F0lxyP2FlqT9GSLNQZ3dzMz0dElnJT1AykL71jpO0vTF8xm4wTLgm0i_jKCCyRi2jG_NkZrwA-m2KymI/s640/IMG_0127.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdwVkXrk5vacVYdGdf6D4R8P-eGbTbDN0aZyhEJI86QoNxmFcLFlHSDeY8LPRE_Dv8PUZG0X4sERi6D9cnjxTJO1_Oq0La3dQ030_DWGpSGcHQ58LhgDp6XPayc80n74xTQsw_MHSODuo/s1600/IMG_0128.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdwVkXrk5vacVYdGdf6D4R8P-eGbTbDN0aZyhEJI86QoNxmFcLFlHSDeY8LPRE_Dv8PUZG0X4sERi6D9cnjxTJO1_Oq0La3dQ030_DWGpSGcHQ58LhgDp6XPayc80n74xTQsw_MHSODuo/s640/IMG_0128.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/2683301250877804014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2013/01/hundreds-next-riddle-45.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/2683301250877804014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/2683301250877804014'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2013/01/hundreds-next-riddle-45.html' title='Hundreds - Next Riddle (45)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3kaFu3ijwS4uNvU3cK4hqpNN6ww1ChPElmj2wXyIFvmTHdOVUTWQH8zV6mM7F0lxyP2FlqT9GSLNQZ3dzMz0dElnJT1AykL71jpO0vTF8xm4wTLgm0i_jKCCyRi2jG_NkZrwA-m2KymI/s72-c/IMG_0127.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-364974453188795069</id><published>2013-01-08T19:22:00.001-08:00</published><updated>2013-01-08T19:46:29.891-08:00</updated><title type='text'>Hundreds - Next Riddle (31)</title><content type='html'>The next riddle wasn&#39;t too difficult. I simply went through all the letters one by one and filtered them into columns. Turns out 4 columns is the magic number. Reading down the columns revealed the answer.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDg9IFzCXcaDGaxirZxkP3WxsPXUuCKyoG3XKLNgw7_DAX_9KrH-SZdqs_KxcIsoZipeZ5EAiNwVt2DLbKqIyTUgV1ml_GV7mZgx8rpZuA0WYzv_FaBrGQSukdwHbQEkIbYVaSjC31XTQ/s1600/IMG_0125.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDg9IFzCXcaDGaxirZxkP3WxsPXUuCKyoG3XKLNgw7_DAX_9KrH-SZdqs_KxcIsoZipeZ5EAiNwVt2DLbKqIyTUgV1ml_GV7mZgx8rpZuA0WYzv_FaBrGQSukdwHbQEkIbYVaSjC31XTQ/s640/IMG_0125.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3DFxAfQDIlKu8Hdgn_xXOp6j7Ke2zqfP1eEtU3msGkwm_Ej7XVC0Dxkwq4zdp9KVC3XcGZtnNNA5y8b3CXGk7nRl1gPW6RXDy9z-QJLvxz6OUSjtzaxd19uV4Jw2wZUvXvSVzWCFopoU/s1600/IMG_0126.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3DFxAfQDIlKu8Hdgn_xXOp6j7Ke2zqfP1eEtU3msGkwm_Ej7XVC0Dxkwq4zdp9KVC3XcGZtnNNA5y8b3CXGk7nRl1gPW6RXDy9z-QJLvxz6OUSjtzaxd19uV4Jw2wZUvXvSVzWCFopoU/s640/IMG_0126.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/364974453188795069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2013/01/hundreds-next-riddle.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/364974453188795069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/364974453188795069'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2013/01/hundreds-next-riddle.html' title='Hundreds - Next Riddle (31)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDg9IFzCXcaDGaxirZxkP3WxsPXUuCKyoG3XKLNgw7_DAX_9KrH-SZdqs_KxcIsoZipeZ5EAiNwVt2DLbKqIyTUgV1ml_GV7mZgx8rpZuA0WYzv_FaBrGQSukdwHbQEkIbYVaSjC31XTQ/s72-c/IMG_0125.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-3733877845508834650</id><published>2013-01-07T19:33:00.001-08:00</published><updated>2013-01-07T19:33:20.298-08:00</updated><title type='text'>Hundreds</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5Wp9v99-jopeZ1kC-TRuDQHbVsYD9iiMb-uPdGU5UGrQjwDzhzUeBW1P-4M_o7WQV3Kv0zwphf_BSJSyZL-4LYRvBr-uOwfGUMs01uTaBSL9_TEVh2X_H1DpBkwL74_ptLOyxiBQXyps/s1600/IMG_0183.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5Wp9v99-jopeZ1kC-TRuDQHbVsYD9iiMb-uPdGU5UGrQjwDzhzUeBW1P-4M_o7WQV3Kv0zwphf_BSJSyZL-4LYRvBr-uOwfGUMs01uTaBSL9_TEVh2X_H1DpBkwL74_ptLOyxiBQXyps/s640/IMG_0183.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Hundreds is a neat new game for iOS where you touch floating circles in an effort to bring their total up to 100. throughout the gameplay, random messages will appear on the screen. These messages are riddles and cyphers which you&#39;re expected to solve for the prize of achievements in Game Center. The first one is the only one that&#39;s immediately readable: &quot;A mouse has one snout but a hand has five&quot;. After touching the screen with 5 fingers, the first riddle was solved. Easy enough. The rest of them, however, aren&#39;t even readable.&lt;br /&gt;
&lt;br /&gt;
The second riddle mixed up the letters in each word, so each word had to be unscrambled. There were a few 9 letter words which took a while, but it was eventually solved. &quot;Persistence without patience is a golden harp missing its chord&quot;. So these are probably going to require a bit of patience from here on out.&lt;br /&gt;
&lt;br /&gt;
The third riddle (the furthest I&#39;ve gotten so far) looked like a cypher. Letters looked grouped together alright, but the proper letters were not contained in each word. Being the programmer that I am, I set off &amp;nbsp;writing a script to help me.&lt;br /&gt;
&lt;br /&gt;
I started off with two arrays of letters; one for the keys and one for the values. As I made a guess at a letter key pair, I would remove them from their respective lists, and then randomize the rest of the pairings every second, printing the potential sentence to the screen.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKNuMKQV6NUcELPXDlh772ng7b28AsrILIP88qe21i4PB5y1qj6uXZVgCc74cO08IW-ITbwobtLZ65DTme5zZ5LeNdMuSb2_-xMyL_E8IhCV4h_ZYIFX8ZcYFiND1ELq6h0RYrbBfwUAc/s1600/IMG_0181.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKNuMKQV6NUcELPXDlh772ng7b28AsrILIP88qe21i4PB5y1qj6uXZVgCc74cO08IW-ITbwobtLZ65DTme5zZ5LeNdMuSb2_-xMyL_E8IhCV4h_ZYIFX8ZcYFiND1ELq6h0RYrbBfwUAc/s640/IMG_0181.JPG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
As you can see, this wasn&#39;t going anywhere very fast. But, subbing x for a, o for r, and l for o got me the first four words. Slowly over time, I kept making letter substitutions that seemed logical. The script started to become quite useful in seeing the currently deciphered letters, and possibilities for other letters. Eventually, I reached the end:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLEay8YO7etW80QbV7jVWjrZsqKuPQZLEQWLqoKtOl174W5H-C-iVzMLnORx_GQeVQ3JF1EZKBIAjXh0o1UDff2wwiwlU5emPxwZy_N3gA5_85bINONz5vpTJA9XsKLPfoXrfq845x10M/s1600/IMG_0182.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLEay8YO7etW80QbV7jVWjrZsqKuPQZLEQWLqoKtOl174W5H-C-iVzMLnORx_GQeVQ3JF1EZKBIAjXh0o1UDff2wwiwlU5emPxwZy_N3gA5_85bINONz5vpTJA9XsKLPfoXrfq845x10M/s640/IMG_0182.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
No idea what it means, but it works. Only when I went to input the letters into the game did I realize that the cypher was simply the current letter plus 3. So the script was kind of overkill. But it worked!&lt;br /&gt;
&lt;br /&gt;
Below is the next riddle. I will make another post when I solve that one, but it might take me a bit longer...&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrbxWPHzkocg_e68UvtnvhNsm2ZyFczrR2JfNb2kLzZfx8v_z4c1WR3YnOxp-e14PUiGqapaBLGGRpc2wHKHIX7jqNsM44yr0umGWbnN2cQqCJK1rQRk_pFDoF3KEZ7dhxOaaZ9haL0OY/s1600/IMG_0184.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrbxWPHzkocg_e68UvtnvhNsm2ZyFczrR2JfNb2kLzZfx8v_z4c1WR3YnOxp-e14PUiGqapaBLGGRpc2wHKHIX7jqNsM44yr0umGWbnN2cQqCJK1rQRk_pFDoF3KEZ7dhxOaaZ9haL0OY/s640/IMG_0184.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Here&#39;s the ruby script I wrote quickly. Feel free to use it to make or break cyphers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file = File.new(&quot;cypher.txt&quot;, &quot;r&quot;)&lt;br /&gt;
cypher = file.gets&lt;br /&gt;
file.close&lt;br /&gt;
&lt;br /&gt;
$key = {}&lt;br /&gt;
&lt;br /&gt;
def randomizeKey()&lt;br /&gt;
&amp;nbsp; keyLetters = [&quot;d&quot;,&quot;g&quot;,&quot;h&quot;,&quot;n&quot;,&quot;s&quot;,&quot;t&quot;&quot;v&quot;,&quot;w&quot;,&quot;y&quot;]&lt;br /&gt;
&amp;nbsp; letters = [&quot;b&quot;,&quot;j&quot;,&quot;g&quot;,&quot;k&quot;,&quot;q&quot;,&quot;v&quot;,&quot;w&quot;,&quot;y&quot;,&quot;z&quot;]&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; $key[&quot;x&quot;] = &quot;a&quot;&lt;br /&gt;
&amp;nbsp; $key[&quot;k&quot;] = &quot;n&quot;&lt;br /&gt;
&amp;nbsp; $key[&quot;q&quot;] = &quot;t&quot;&lt;br /&gt;
&amp;nbsp; $key[&quot;e&quot;] = &quot;h&quot;&lt;br /&gt;
&amp;nbsp; $key[&quot;b&quot;] = &quot;e&quot;&lt;br /&gt;
&amp;nbsp; $key[&quot;o&quot;] = &quot;r&quot;&lt;br /&gt;
&amp;nbsp; $key[&quot;l&quot;] = &quot;o&quot;&lt;br /&gt;
&amp;nbsp; $key[&quot;f&quot;] = &quot;i&quot;&lt;br /&gt;
&amp;nbsp; $key[&quot;c&quot;] = &quot;f&quot;&lt;br /&gt;
&amp;nbsp; $key[&quot;r&quot;] = &quot;u&quot;&lt;br /&gt;
&amp;nbsp; $key[&quot;z&quot;] = &quot;c&quot;&lt;br /&gt;
&amp;nbsp; $key[&quot;m&quot;] = &quot;p&quot;&lt;br /&gt;
&amp;nbsp; $key[&quot;p&quot;] = &quot;s&quot;&lt;br /&gt;
&amp;nbsp; $key[&quot;i&quot;] = &quot;l&quot;&lt;br /&gt;
&amp;nbsp; $key[&quot;j&quot;] = &quot;m&quot;&lt;br /&gt;
&amp;nbsp; $key[&quot;u&quot;] = &quot;x&quot;&lt;br /&gt;
&amp;nbsp; $key[&quot;a&quot;] = &quot;d&quot;&lt;br /&gt;
&amp;nbsp; $key[&quot;&quot;] = &quot;&quot;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; while(letters.length &amp;gt; 0)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; keyIndex = rand(keyLetters.length)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; valueIndex = rand(letters.length)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; keyLetter = keyLetters[keyIndex]&lt;br /&gt;
&amp;nbsp; &amp;nbsp; valueLetter = letters[valueIndex]&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; $key[keyLetter] = valueLetter&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; keyLetters.delete_at(keyIndex)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; letters.delete_at(valueIndex)&lt;br /&gt;
&amp;nbsp; end &lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
randomizeKey()&lt;br /&gt;
&lt;br /&gt;
while&lt;br /&gt;
&amp;nbsp; string = &quot;&quot;&lt;br /&gt;
&amp;nbsp; cypher.each_byte { |i|&lt;br /&gt;
&amp;nbsp; &amp;nbsp; if(i.chr == &quot; &quot;)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; string = string + &quot; &quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; else&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; string = string + $key[i.chr]&lt;br /&gt;
&amp;nbsp; &amp;nbsp; end&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&amp;nbsp; puts string&lt;br /&gt;
&amp;nbsp; randomizeKey()&lt;br /&gt;
&amp;nbsp; sleep(1)&lt;br /&gt;
end&lt;br /&gt;
</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/3733877845508834650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2013/01/hundreds.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/3733877845508834650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/3733877845508834650'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2013/01/hundreds.html' title='Hundreds'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5Wp9v99-jopeZ1kC-TRuDQHbVsYD9iiMb-uPdGU5UGrQjwDzhzUeBW1P-4M_o7WQV3Kv0zwphf_BSJSyZL-4LYRvBr-uOwfGUMs01uTaBSL9_TEVh2X_H1DpBkwL74_ptLOyxiBQXyps/s72-c/IMG_0183.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-3585304483194108977</id><published>2012-12-31T17:56:00.001-08:00</published><updated>2012-12-31T17:56:13.104-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="App Store"/><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><category scheme="http://www.blogger.com/atom/ns#" term="Milestone"/><title type='text'>1000 Apps Downloaded!</title><content type='html'>MDF Projects has officially had its 1000th download. The 1000th app was Velocimeter, my speedometer app. It&#39;s been a crazy first year of iOS development, and I&#39;m excited to embark on the second one. Also, Happy New Year!</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/3585304483194108977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2012/12/1000-apps-downloaded.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/3585304483194108977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/3585304483194108977'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2012/12/1000-apps-downloaded.html' title='1000 Apps Downloaded!'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-904248499520620398</id><published>2012-12-29T14:51:00.003-08:00</published><updated>2012-12-29T14:51:52.603-08:00</updated><title type='text'>GKHelper: getting GKPlayer data</title><content type='html'>I&#39;m going to start going over useful methods from my code in order to help people with similar problems, and give myself a form of self assessment. The first method I&#39;m going to go over is the method I use to get GKPlayer objects from player IDs. This code is from my forthcoming turn based Game Center game (name TBD).&lt;br /&gt;
&lt;br /&gt;
For all my Game Center interactions, I have created a singleton manager, named GKHelper. It handles creating the async calls to Game Center, and processes the information when it comes back. It also has several forms of caching to reduce web requests.&lt;br /&gt;
&lt;br /&gt;
GKHelper has a dictionary which it uses to store GKPlayers by playerID. Whenever a GKPlayer object is fetched, it is first stored in this dictionary before being returned. Whenever a GKPlayer is requested via playerID, the dictionary is checked before the request is made. This logic is handled via the following method:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
- (&lt;span style=&quot;color: #703daa;&quot;&gt;GKPlayer&lt;/span&gt;*)playerForPlayerID:(&lt;span style=&quot;color: #703daa;&quot;&gt;NSString&lt;/span&gt;*)playerID {&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #bb2ca2;&quot;&gt;if&lt;/span&gt;(playerID == &lt;span style=&quot;color: #bb2ca2;&quot;&gt;nil&lt;/span&gt; || [playerID &lt;span style=&quot;color: #3d1d81;&quot;&gt;isEqualToString&lt;/span&gt;:&lt;span style=&quot;color: #d12f1b;&quot;&gt;@&quot;&quot;&lt;/span&gt;]) {&lt;/div&gt;
&lt;div style=&quot;color: #bb2ca2; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;return&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;nil&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; }&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #bb2ca2;&quot;&gt;if&lt;/span&gt;(&lt;span style=&quot;color: #bb2ca2;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #4f8187;&quot;&gt;playersDict&lt;/span&gt; == &lt;span style=&quot;color: #bb2ca2;&quot;&gt;nil&lt;/span&gt;) {&lt;/div&gt;
&lt;div style=&quot;color: #703daa; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #bb2ca2;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #4f8187;&quot;&gt;playersDict&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; = [&lt;/span&gt;NSMutableDictionary&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3d1d81;&quot;&gt;dictionary&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;];&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; }&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px; min-height: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #bb2ca2;&quot;&gt;if&lt;/span&gt;([&lt;span style=&quot;color: #bb2ca2;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #4f8187;&quot;&gt;playersDict&lt;/span&gt; &lt;span style=&quot;color: #3d1d81;&quot;&gt;objectForKey&lt;/span&gt;:playerID]) {&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #bb2ca2;&quot;&gt;return&lt;/span&gt; [&lt;span style=&quot;color: #bb2ca2;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #4f8187;&quot;&gt;playersDict&lt;/span&gt; &lt;span style=&quot;color: #3d1d81;&quot;&gt;objectForKey&lt;/span&gt;:playerID];&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; } &lt;span style=&quot;color: #bb2ca2;&quot;&gt;else&lt;/span&gt; {&lt;/div&gt;
&lt;div style=&quot;color: #3d1d81; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; [&lt;/span&gt;&lt;span style=&quot;color: #703daa;&quot;&gt;GKPlayer&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;loadPlayersForIdentifiers&lt;span style=&quot;color: black;&quot;&gt;:[&lt;/span&gt;&lt;span style=&quot;color: #703daa;&quot;&gt;NSArray&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;arrayWithObject&lt;span style=&quot;color: black;&quot;&gt;:playerID] &lt;/span&gt;withCompletionHandler&lt;span style=&quot;color: black;&quot;&gt;:^(&lt;/span&gt;&lt;span style=&quot;color: #703daa;&quot;&gt;NSArray&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; *players, &lt;/span&gt;&lt;span style=&quot;color: #703daa;&quot;&gt;NSError&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; *error) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px; min-height: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #bb2ca2;&quot;&gt;if&lt;/span&gt; (error != &lt;span style=&quot;color: #bb2ca2;&quot;&gt;nil&lt;/span&gt;) {&lt;/div&gt;
&lt;div style=&quot;color: #d12f1b; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #3d1d81;&quot;&gt;NSLog&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;@&quot;Error retrieving player info: %@&quot;&lt;span style=&quot;color: black;&quot;&gt;, error.&lt;/span&gt;&lt;span style=&quot;color: #3d1d81;&quot;&gt;localizedDescription&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;span style=&quot;color: #bb2ca2;&quot;&gt;else&lt;/span&gt; {&lt;/div&gt;
&lt;div style=&quot;color: #008400; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;// Populate players dict&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #bb2ca2;&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #703daa;&quot;&gt;GKPlayer&lt;/span&gt; *player &lt;span style=&quot;color: #bb2ca2;&quot;&gt;in&lt;/span&gt; players) {&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [&lt;span style=&quot;color: #bb2ca2;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #4f8187;&quot;&gt;playersDict&lt;/span&gt; &lt;span style=&quot;color: #3d1d81;&quot;&gt;setObject&lt;/span&gt;:player &lt;span style=&quot;color: #3d1d81;&quot;&gt;forKey&lt;/span&gt;:player.&lt;span style=&quot;color: #703daa;&quot;&gt;playerID&lt;/span&gt;];&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div style=&quot;color: #3d1d81; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [&lt;/span&gt;&lt;span style=&quot;color: #bb2ca2;&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #4f8187;&quot;&gt;delegate&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;performSelectorOnMainThread&lt;span style=&quot;color: black;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bb2ca2;&quot;&gt;@selector&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(playersLoaded) &lt;/span&gt;withObject&lt;span style=&quot;color: black;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bb2ca2;&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;waitUntilDone&lt;span style=&quot;color: black;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #bb2ca2;&quot;&gt;NO&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;];&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; }];&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; }&lt;/div&gt;
&lt;div style=&quot;color: #bb2ca2; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;nil&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
}&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
First, the method checks the playerID to make sure it is valid. Then, it checks the dictionary for the specified player. On the case that it cannot find the player, it begins the async web request for the player data, which it then stores upon return. The delegate is then informed on the main thread (since it may return on a background thread) that the players list has been updated (the delegate usually reloads the data in the tableview). After the web request is sent, the function returns nil indicating the player could not be found. The function will get called a second time upon receiving the player info, and the correct information will be retrieved. This function is costly, however, since the async request takes an array of playerIDs, and we&#39;re only passing in a single ID.&lt;br /&gt;
&lt;br /&gt;
That&#39;s where the next two functions come in.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
- (&lt;span style=&quot;color: #bb2ca2;&quot;&gt;void&lt;/span&gt;)getPlayersForMatch:(&lt;span style=&quot;color: #703daa;&quot;&gt;GKTurnBasedMatch&lt;/span&gt;*)match {&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px; min-height: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #703daa; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;NSMutableArray&lt;span style=&quot;color: black;&quot;&gt; *identifiers = [&lt;/span&gt;NSMutableArray&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3d1d81;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;];&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px; min-height: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #703daa; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #bb2ca2;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;GKTurnBasedParticipant&lt;span style=&quot;color: black;&quot;&gt; *participant &lt;/span&gt;&lt;span style=&quot;color: #bb2ca2;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; match.&lt;/span&gt;participants&lt;span style=&quot;color: black;&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #bb2ca2;&quot;&gt;if&lt;/span&gt;(participant.&lt;span style=&quot;color: #703daa;&quot;&gt;playerID&lt;/span&gt; == &lt;span style=&quot;color: #bb2ca2;&quot;&gt;nil&lt;/span&gt;) {&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #bb2ca2;&quot;&gt;continue&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; [identifiers &lt;span style=&quot;color: #3d1d81;&quot;&gt;addObject&lt;/span&gt;:participant.&lt;span style=&quot;color: #703daa;&quot;&gt;playerID&lt;/span&gt;];&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; }&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px; min-height: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #3d1d81; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp; [&lt;/span&gt;&lt;span style=&quot;color: #703daa;&quot;&gt;GKPlayer&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;loadPlayersForIdentifiers&lt;span style=&quot;color: black;&quot;&gt;:identifiers &lt;/span&gt;withCompletionHandler&lt;span style=&quot;color: black;&quot;&gt;:^(&lt;/span&gt;&lt;span style=&quot;color: #703daa;&quot;&gt;NSArray&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; *players, &lt;/span&gt;&lt;span style=&quot;color: #703daa;&quot;&gt;NSError&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; *error) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px; min-height: 13px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #bb2ca2;&quot;&gt;if&lt;/span&gt; (error != &lt;span style=&quot;color: #bb2ca2;&quot;&gt;nil&lt;/span&gt;) {&lt;/div&gt;
&lt;div style=&quot;color: #d12f1b; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #3d1d81;&quot;&gt;NSLog&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;@&quot;Error retrieving player info: %@&quot;&lt;span style=&quot;color: black;&quot;&gt;, error.&lt;/span&gt;&lt;span style=&quot;color: #3d1d81;&quot;&gt;localizedDescription&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;span style=&quot;color: #bb2ca2;&quot;&gt;else&lt;/span&gt; {&lt;/div&gt;
&lt;div style=&quot;color: #008400; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;// Populate players dict&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #bb2ca2;&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #703daa;&quot;&gt;GKPlayer&lt;/span&gt; *player &lt;span style=&quot;color: #bb2ca2;&quot;&gt;in&lt;/span&gt; players) {&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [&lt;span style=&quot;color: #bb2ca2;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #4f8187;&quot;&gt;playersDict&lt;/span&gt; &lt;span style=&quot;color: #3d1d81;&quot;&gt;setObject&lt;/span&gt;:player &lt;span style=&quot;color: #3d1d81;&quot;&gt;forKey&lt;/span&gt;:player.&lt;span style=&quot;color: #703daa;&quot;&gt;playerID&lt;/span&gt;];&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [&lt;span style=&quot;color: #bb2ca2;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #4f8187;&quot;&gt;delegate&lt;/span&gt; &lt;span style=&quot;color: #31595d;&quot;&gt;playersLoaded&lt;/span&gt;];&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; }];&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
}&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px; min-height: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
- (&lt;span style=&quot;color: #bb2ca2;&quot;&gt;void&lt;/span&gt;)getPlayersForMatches:(&lt;span style=&quot;color: #703daa;&quot;&gt;NSArray&lt;/span&gt;*)matches {&lt;/div&gt;
&lt;div style=&quot;color: #703daa; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;NSMutableArray&lt;span style=&quot;color: black;&quot;&gt; *identifiers = [&lt;/span&gt;NSMutableArray&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3d1d81;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;];&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px; min-height: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #bb2ca2;&quot;&gt;for&lt;/span&gt;(&lt;span style=&quot;color: #703daa;&quot;&gt;GKTurnBasedMatch&lt;/span&gt; *match &lt;span style=&quot;color: #bb2ca2;&quot;&gt;in&lt;/span&gt; matches) {&lt;/div&gt;
&lt;div style=&quot;color: #703daa; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #bb2ca2;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;GKTurnBasedParticipant&lt;span style=&quot;color: black;&quot;&gt; *participant &lt;/span&gt;&lt;span style=&quot;color: #bb2ca2;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; match.&lt;/span&gt;participants&lt;span style=&quot;color: black;&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #bb2ca2;&quot;&gt;if&lt;/span&gt;(participant.&lt;span style=&quot;color: #703daa;&quot;&gt;playerID&lt;/span&gt; == &lt;span style=&quot;color: #bb2ca2;&quot;&gt;nil&lt;/span&gt;) {&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #bb2ca2;&quot;&gt;continue&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [identifiers &lt;span style=&quot;color: #3d1d81;&quot;&gt;addObject&lt;/span&gt;:participant.&lt;span style=&quot;color: #703daa;&quot;&gt;playerID&lt;/span&gt;];&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; }&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px; min-height: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #3d1d81; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp; [&lt;/span&gt;&lt;span style=&quot;color: #703daa;&quot;&gt;GKPlayer&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;loadPlayersForIdentifiers&lt;span style=&quot;color: black;&quot;&gt;:identifiers &lt;/span&gt;withCompletionHandler&lt;span style=&quot;color: black;&quot;&gt;:^(&lt;/span&gt;&lt;span style=&quot;color: #703daa;&quot;&gt;NSArray&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; *players, &lt;/span&gt;&lt;span style=&quot;color: #703daa;&quot;&gt;NSError&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; *error) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px; min-height: 13px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #bb2ca2;&quot;&gt;if&lt;/span&gt; (error != &lt;span style=&quot;color: #bb2ca2;&quot;&gt;nil&lt;/span&gt;) {&lt;/div&gt;
&lt;div style=&quot;color: #d12f1b; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #3d1d81;&quot;&gt;NSLog&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;@&quot;Error retrieving player info: %@&quot;&lt;span style=&quot;color: black;&quot;&gt;, error.&lt;/span&gt;&lt;span style=&quot;color: #3d1d81;&quot;&gt;localizedDescription&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;span style=&quot;color: #bb2ca2;&quot;&gt;else&lt;/span&gt; {&lt;/div&gt;
&lt;div style=&quot;color: #008400; font-family: Menlo; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;// Populate players dict&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #bb2ca2;&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #703daa;&quot;&gt;GKPlayer&lt;/span&gt; *player &lt;span style=&quot;color: #bb2ca2;&quot;&gt;in&lt;/span&gt; players) {&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [&lt;span style=&quot;color: #bb2ca2;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #4f8187;&quot;&gt;playersDict&lt;/span&gt; &lt;span style=&quot;color: #3d1d81;&quot;&gt;setObject&lt;/span&gt;:player &lt;span style=&quot;color: #3d1d81;&quot;&gt;forKey&lt;/span&gt;:player.&lt;span style=&quot;color: #703daa;&quot;&gt;playerID&lt;/span&gt;];&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [&lt;span style=&quot;color: #bb2ca2;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color: #4f8187;&quot;&gt;delegate&lt;/span&gt; &lt;span style=&quot;color: #31595d;&quot;&gt;playersLoaded&lt;/span&gt;];&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
&amp;nbsp;&amp;nbsp; }];&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 11px;&quot;&gt;
}&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
These two functions take a GKTurnBasedMatch, and simply fill up the player dictionary with the GKPlayer objects. The first method I call when a new match is created, and the second method is called when the app is first opened, right after the current matches are loaded. They insure that the loadPlayers method is only called once at app loading, and once per new match. There are a few problems with this setup although.&lt;br /&gt;
&lt;br /&gt;
For one, the latter two methods have no way of communicating with the former method regarding making async web requests. In other words, getPlayersForMatches could be called, immediately followed by playerForPlayerID. This would start two async web requests for the same information, with potentially bad results. There&#39;s also the case where the async web request fails to get a certain GKPlayer for a playerID, but still calls the delegate&#39;s playersLoaded method. Thus, an infinite loop will be formed.&lt;br /&gt;
&lt;br /&gt;
If I ever get around to optimizing these methods, I&#39;ll post the new ones below. Also, make sure to comment if you have any questions. Also, sorry about the code formatting, haven&#39;t figured out how to make it format properly yet...&lt;br /&gt;
&lt;br /&gt;










































































</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/904248499520620398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2012/12/gkhelper-getting-gkplayer-data.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/904248499520620398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/904248499520620398'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2012/12/gkhelper-getting-gkplayer-data.html' title='GKHelper: getting GKPlayer data'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-6827280543060616904</id><published>2012-12-11T20:50:00.000-08:00</published><updated>2012-12-11T20:50:16.779-08:00</updated><title type='text'>Lego Trains are awesome</title><content type='html'>Found my old Lego train, so I set it up around the tree. Here are some pictures.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3OhDNPTpclYeLJsX20xGzBU_yJ-pUwxcfZkPjBzqlQSNcJr_S9ouRGVfgiHXfukL-tVRXoQzTQXeAYq6VCtyi5xDg0Cq_nV7Wlz9GpJx8xD1XIm4GxiHk_fG23X_xlMVxb5U2dcGYNZk/s1600/IMG_0124.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3OhDNPTpclYeLJsX20xGzBU_yJ-pUwxcfZkPjBzqlQSNcJr_S9ouRGVfgiHXfukL-tVRXoQzTQXeAYq6VCtyi5xDg0Cq_nV7Wlz9GpJx8xD1XIm4GxiHk_fG23X_xlMVxb5U2dcGYNZk/s320/IMG_0124.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjODXj95j7yLfhoxQGgp163PdqOslJNLfIgS3jF4QWrhnBwGZ5yPChxrxwNcC6bugM70zYT-_ZDzcV6wEB2DZ7Je5GOcyeR8NiH-lM4h1nzQi1nENHclwOwxVXXahUx92Gm5L8X0XcSS64/s1600/IMG_0123.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjODXj95j7yLfhoxQGgp163PdqOslJNLfIgS3jF4QWrhnBwGZ5yPChxrxwNcC6bugM70zYT-_ZDzcV6wEB2DZ7Je5GOcyeR8NiH-lM4h1nzQi1nENHclwOwxVXXahUx92Gm5L8X0XcSS64/s320/IMG_0123.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEZsRroPLlXfYWdmMpDsDbRQtzvJhhOymmQrNhWYGDHtEizLt-W96RSoLABk2pRtl827XnF5yCobeTDpp0snjiya06m3VzI_lXZnQ_kq5oLNTfn1PLo6ds4fd4DWYG9MjZyDpTpzG2bt4/s1600/IMG_0125.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEZsRroPLlXfYWdmMpDsDbRQtzvJhhOymmQrNhWYGDHtEizLt-W96RSoLABk2pRtl827XnF5yCobeTDpp0snjiya06m3VzI_lXZnQ_kq5oLNTfn1PLo6ds4fd4DWYG9MjZyDpTpzG2bt4/s320/IMG_0125.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyVBrlsoIk6UH_eGKEsIPoVFN5308D8nT8EnC4zo9ZWWBfuvHzF7Hf4VCMnsd8b-OjTNuHXO4rJXjEib1utNKuIGp575BpZucx19oRdEza7knPXICR7tJtZQMld9VSB2jKLuizU1-EUho/s1600/IMG_0126.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyVBrlsoIk6UH_eGKEsIPoVFN5308D8nT8EnC4zo9ZWWBfuvHzF7Hf4VCMnsd8b-OjTNuHXO4rJXjEib1utNKuIGp575BpZucx19oRdEza7knPXICR7tJtZQMld9VSB2jKLuizU1-EUho/s320/IMG_0126.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/6827280543060616904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2012/12/lego-trains-are-awesome.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/6827280543060616904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/6827280543060616904'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2012/12/lego-trains-are-awesome.html' title='Lego Trains are awesome'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3OhDNPTpclYeLJsX20xGzBU_yJ-pUwxcfZkPjBzqlQSNcJr_S9ouRGVfgiHXfukL-tVRXoQzTQXeAYq6VCtyi5xDg0Cq_nV7Wlz9GpJx8xD1XIm4GxiHk_fG23X_xlMVxb5U2dcGYNZk/s72-c/IMG_0124.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-4193133223041845136</id><published>2012-12-11T20:15:00.002-08:00</published><updated>2012-12-11T20:15:57.483-08:00</updated><title type='text'>AirBoard Overview</title><content type='html'>AirBoard is a handy app I made to keep score during&amp;nbsp;spontaneous tournaments that sometimes occur. The app is compatible with an Apple Tv, so when you mirror your iOS device&#39;s screen on the ATV, it shows the overall scoreboard.&lt;br /&gt;
&lt;br /&gt;
This allows you to edit the list on the fly, and the secondary screen will update once you&#39;re finished. I&#39;m planning to add a boatload of features to this app, such as saving a scoreboard, creating a tournament bracket from a scoreboard, and possibly inter-device communication. The UI assets do need an upgrade though...&lt;br /&gt;
&lt;br /&gt;
Another cool feature is the ability to name the scoreboard by typing directly on the navigation bar.&lt;br /&gt;
&lt;br /&gt;
Screenshots below:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYODGkOgeBYEsoGCk2ky8F5M55radg1HlG4wkJ_bWaXUN7q36ejAAsIMFMq-gHPoflkPyZziBjzR1FqGDK-kLqHGQrKPyKG4UFvnK77Uv5cc0EpsoYit6x9L0yCuGnM22fLldjjIY8ADo/s1600/iOS+Simulator+Screen+shot+2012-10-13+9.24.58+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYODGkOgeBYEsoGCk2ky8F5M55radg1HlG4wkJ_bWaXUN7q36ejAAsIMFMq-gHPoflkPyZziBjzR1FqGDK-kLqHGQrKPyKG4UFvnK77Uv5cc0EpsoYit6x9L0yCuGnM22fLldjjIY8ADo/s320/iOS+Simulator+Screen+shot+2012-10-13+9.24.58+PM.png&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqnPlCSGZ5sXyUd6Mw744WwoFi-YImegBAAYpUqoE218BlkzJ7NnNlQ4S4-grpkZpAm_68lniis8B3pThfr5bAIt2GH25z_uUqgwH84ngkQ-6IwiJFPHr5HH4gvHaIwMbkubU7X_wnxkM/s1600/iOS+Simulator+Screen+shot+2012-10-13+9.25.08+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqnPlCSGZ5sXyUd6Mw744WwoFi-YImegBAAYpUqoE218BlkzJ7NnNlQ4S4-grpkZpAm_68lniis8B3pThfr5bAIt2GH25z_uUqgwH84ngkQ-6IwiJFPHr5HH4gvHaIwMbkubU7X_wnxkM/s320/iOS+Simulator+Screen+shot+2012-10-13+9.25.08+PM.png&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/4193133223041845136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2012/12/airboard-overview.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/4193133223041845136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/4193133223041845136'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2012/12/airboard-overview.html' title='AirBoard Overview'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYODGkOgeBYEsoGCk2ky8F5M55radg1HlG4wkJ_bWaXUN7q36ejAAsIMFMq-gHPoflkPyZziBjzR1FqGDK-kLqHGQrKPyKG4UFvnK77Uv5cc0EpsoYit6x9L0yCuGnM22fLldjjIY8ADo/s72-c/iOS+Simulator+Screen+shot+2012-10-13+9.24.58+PM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-3377323208596735023</id><published>2012-11-20T18:47:00.000-08:00</published><updated>2012-11-20T18:47:23.763-08:00</updated><title type='text'>It&#39;s been a while</title><content type='html'>It&#39;s been a long time since I last posted. Since then I&#39;ve added another app, called Air Board.&lt;br /&gt;
&lt;br /&gt;
Air Board is a handy scoreboard app that takes advantage of linking your iOS device to a secondary screen. When connected to an Apple TV, Air Board will show the top players sorted by score. Updates made on the device are reflected on screen with animations. I&#39;ll post some pictures soon.&lt;br /&gt;
&lt;br /&gt;
I&#39;m also working hard on another Game Center based app which will be my best one yet. More info to come.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/3377323208596735023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2012/11/its-been-while.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/3377323208596735023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/3377323208596735023'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2012/11/its-been-while.html' title='It&#39;s been a while'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-1066030149075112041</id><published>2012-09-11T09:23:00.001-07:00</published><updated>2012-09-11T09:23:03.950-07:00</updated><title type='text'>Radians is in the AppStore</title><content type='html'>Radians has been approved by the AppStore, and is available to download. There&#39;s a few updates I want to work on, but the app&#39;s in a pretty good state. The download link is below:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://itunes.apple.com/ca/artist/mdf-projects/id515867092&quot; target=&quot;_blank&quot;&gt;Radians&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/1066030149075112041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2012/09/radians-is-in-appstore.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/1066030149075112041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/1066030149075112041'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2012/09/radians-is-in-appstore.html' title='Radians is in the AppStore'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-8146545194570657796</id><published>2012-09-04T17:57:00.003-07:00</published><updated>2012-09-04T17:57:34.813-07:00</updated><title type='text'>Velocimeter available in the AppStore</title><content type='html'>Velocimeter is a speedometer app I made and uploaded to the AppStore in a few hours. It shows you how fast you&#39;re going, and keeps track of stats like top speed and 0 - 100 time. More features will be added when I have time.&lt;br /&gt;
&lt;br /&gt;
Download the app using the link below!&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://itunes.apple.com/ca/artist/mdf-projects/id515867092&quot; target=&quot;_blank&quot;&gt;Velocimeter&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuuNJRuf4ImSjL3rqyepqeolgSRb-BGQ4DY42Ftkp2Dth9OS3w4jfnHFH6fE_XxBfnMryOHCX-9qYiQicAdVHj4iyqy79KI7txAq7uneE-DZ5f_HUP5cgtL8kde1G2MMAtcfG2BH2wPnw/s1600/iOS+Simulator+Screen+shot+2012-09-04+6.47.07+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuuNJRuf4ImSjL3rqyepqeolgSRb-BGQ4DY42Ftkp2Dth9OS3w4jfnHFH6fE_XxBfnMryOHCX-9qYiQicAdVHj4iyqy79KI7txAq7uneE-DZ5f_HUP5cgtL8kde1G2MMAtcfG2BH2wPnw/s400/iOS+Simulator+Screen+shot+2012-09-04+6.47.07+PM.png&quot; width=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/8146545194570657796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2012/09/velocimeter-available-in-appstore.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/8146545194570657796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/8146545194570657796'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2012/09/velocimeter-available-in-appstore.html' title='Velocimeter available in the AppStore'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuuNJRuf4ImSjL3rqyepqeolgSRb-BGQ4DY42Ftkp2Dth9OS3w4jfnHFH6fE_XxBfnMryOHCX-9qYiQicAdVHj4iyqy79KI7txAq7uneE-DZ5f_HUP5cgtL8kde1G2MMAtcfG2BH2wPnw/s72-c/iOS+Simulator+Screen+shot+2012-09-04+6.47.07+PM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-8777598006940513151</id><published>2012-08-28T05:48:00.000-07:00</published><updated>2012-08-28T05:48:13.010-07:00</updated><title type='text'>Radians has been submitted to the App Store!</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;Radians (the name for my map app) has been submitted to the App Store. It&#39;s not in a completely stable state, but I think it&#39;s ready for public release. There&#39;s still several features I want to add in over the months, so look for updates. I haven&#39;t yet decided the pricing for the app. Pics below.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkwrb_pASbWCThT2FeK_-FMO0wLE7OnWkGb9p1mrt1WQisNfNwbB8SDP1Oe6nPGBOJwWdtoBaFHbUeNKrkyVtHXnBtsp-MGXKzUFyrp5hEhIMF7xOW60BgqjZ9_BwMB43ejNIrxGyjlHM/s1600/iOS+Simulator+Screen+shot+2012-08-28+8.46.36+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkwrb_pASbWCThT2FeK_-FMO0wLE7OnWkGb9p1mrt1WQisNfNwbB8SDP1Oe6nPGBOJwWdtoBaFHbUeNKrkyVtHXnBtsp-MGXKzUFyrp5hEhIMF7xOW60BgqjZ9_BwMB43ejNIrxGyjlHM/s400/iOS+Simulator+Screen+shot+2012-08-28+8.46.36+AM.png&quot; width=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQccNmP9PTlMA70AfNbJWSmssNrL_S0zWgUkPbM_wa3NbKIveafN2b-88BhoMPf34gmesIwfwK3pjtpEYZrYiZ6zBvzJjdNWdF4QKTv6t0n7mNiLRX-sV_vBMkYQ6KHl_DrV6eXaE5N5Q/s1600/iOS+Simulator+Screen+shot+2012-08-28+8.46.41+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQccNmP9PTlMA70AfNbJWSmssNrL_S0zWgUkPbM_wa3NbKIveafN2b-88BhoMPf34gmesIwfwK3pjtpEYZrYiZ6zBvzJjdNWdF4QKTv6t0n7mNiLRX-sV_vBMkYQ6KHl_DrV6eXaE5N5Q/s400/iOS+Simulator+Screen+shot+2012-08-28+8.46.41+AM.png&quot; width=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV6aR65TDKVkiWkrHi9pK0_7HxRhNHfODZxjWKwwncjzXTuoetUTsYGxKWqSLLYofXlgkrzrFQq5FsIR6oJzMO7YR7T29nr4Oiohs6SwoE1jVljHv3sdSLGUVVstfzVhImw9_sTG1C-14/s1600/iOS+Simulator+Screen+shot+2012-08-28+8.46.51+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV6aR65TDKVkiWkrHi9pK0_7HxRhNHfODZxjWKwwncjzXTuoetUTsYGxKWqSLLYofXlgkrzrFQq5FsIR6oJzMO7YR7T29nr4Oiohs6SwoE1jVljHv3sdSLGUVVstfzVhImw9_sTG1C-14/s400/iOS+Simulator+Screen+shot+2012-08-28+8.46.51+AM.png&quot; width=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/8777598006940513151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2012/08/radians-has-been-submitted-to-app-store.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/8777598006940513151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/8777598006940513151'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2012/08/radians-has-been-submitted-to-app-store.html' title='Radians has been submitted to the App Store!'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkwrb_pASbWCThT2FeK_-FMO0wLE7OnWkGb9p1mrt1WQisNfNwbB8SDP1Oe6nPGBOJwWdtoBaFHbUeNKrkyVtHXnBtsp-MGXKzUFyrp5hEhIMF7xOW60BgqjZ9_BwMB43ejNIrxGyjlHM/s72-c/iOS+Simulator+Screen+shot+2012-08-28+8.46.36+AM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-4578934956863709044</id><published>2012-05-30T15:09:00.001-07:00</published><updated>2012-05-30T15:09:25.697-07:00</updated><title type='text'>Mapper Update</title><content type='html'>I&#39;ve had some issues with compiling the Mapper app on my devices, so I rewrote the app in a new project. I&#39;ve also added some pretty sweet features. Hopefully I have a release ready version in a few weeks. Pics to come soon. </content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/4578934956863709044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2012/05/mapper-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/4578934956863709044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/4578934956863709044'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2012/05/mapper-update.html' title='Mapper Update'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-377789578762898076</id><published>2012-04-15T11:07:00.002-07:00</published><updated>2012-04-15T11:07:29.630-07:00</updated><title type='text'>Article Summarization - Update</title><content type='html'>This is my last project of my undergrad, so I&#39;m going to try and get it finished this week. I&#39;ve separated the scripts into a reader and a summarizer. One teaches the algorithm, and the other implements it. I&#39;m slowly growing my corpus day to day. I looked into parsing RSS feeds to increase the corpus size, but I decided I could save more time and retain accuracy by doing it manually. I&#39;m aiming for a corpus that involves 100 articles; right now I&#39;m at 40.&lt;br /&gt;
&lt;br /&gt;
I&#39;m planning on testing different corpus sizes and different algorithms against a grading system of my design. Hopefully I can prove that as the corpus grows, the algorithm gets more effective.&lt;br /&gt;
&lt;br /&gt;
More updates to come.</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/377789578762898076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2012/04/article-summarization-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/377789578762898076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/377789578762898076'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2012/04/article-summarization-update.html' title='Article Summarization - Update'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-3660216423504996671</id><published>2012-04-03T11:06:00.001-07:00</published><updated>2012-04-03T11:06:47.870-07:00</updated><title type='text'>Triple Monitors!</title><content type='html'>I recently purchased an iPad 2 for cheap on eBay, and I&#39;ve been playing with it for a few days. It&#39;s quite fun for games, as well as news with apps like Flipboard. &lt;br /&gt;
&lt;br /&gt;
One of the cooler uses I have for it is as a third monitor for my Air. Using AirDisplay, you can link your iPad as a third monitor. See picture below. &lt;div class=&quot;separator&quot;style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNT1hH31aV9xrlC4OzKvvFX_YElQzdUHv-tagLgU0x8YQfS_TIyJQPcD0NjoSbaLYDNvQwzIYPjx7rj6RwcV9KjmK5fPfVGViMnbXmYEUb65Jb4g82xwvhZi7YzQGpvyqDYB4gw07N9O4/s640/blogger-image-1780470310.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNT1hH31aV9xrlC4OzKvvFX_YElQzdUHv-tagLgU0x8YQfS_TIyJQPcD0NjoSbaLYDNvQwzIYPjx7rj6RwcV9KjmK5fPfVGViMnbXmYEUb65Jb4g82xwvhZi7YzQGpvyqDYB4gw07N9O4/s640/blogger-image-1780470310.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/3660216423504996671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2012/04/triple-monitors.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/3660216423504996671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/3660216423504996671'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2012/04/triple-monitors.html' title='Triple Monitors!'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNT1hH31aV9xrlC4OzKvvFX_YElQzdUHv-tagLgU0x8YQfS_TIyJQPcD0NjoSbaLYDNvQwzIYPjx7rj6RwcV9KjmK5fPfVGViMnbXmYEUb65Jb4g82xwvhZi7YzQGpvyqDYB4gw07N9O4/s72-c/blogger-image-1780470310.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-3993425665171989354</id><published>2012-03-28T07:08:00.001-07:00</published><updated>2012-03-28T07:08:28.457-07:00</updated><title type='text'>Mapper - Update</title><content type='html'>Some major changes have been made to Mapper.&lt;br /&gt;
&lt;br /&gt;
1) Changed the colours of the call and message buttons to green and blue. I didn&#39;t like the red call button anymore. I also changed all the buttons to icons instead of text, that looks much cleaner.&lt;br /&gt;
&lt;br /&gt;
2) Added text messaging functionality. It&#39;s not voice activated like I originally planned, but I can now text whoever&#39;s closest to me. I&#39;m going to put an option on the settings page to set the default message for texts.&lt;br /&gt;
&lt;br /&gt;
3) I added a timer which checks for the closest annotation with a phone number and selects it with animation. Now as I drive, my friends&#39; houses pop up as I drive past them, allowing me to call them with one click. People&#39;s addresses are also represented by a house icon.&lt;br /&gt;
&lt;br /&gt;
4) The parking pin is now automatic. I track the user&#39;s speed, so I set up an enum to determine if the user is driving, potentially parked, or parked. If the user gets to the parked stage, a green pin is dropped where they parked. The car button now allows the user to lock on to this parking spot and their own location, which is useful when trying to get back to your car. Eventually I want to have the parking check run in the background, so it&#39;s always there.&lt;br /&gt;
&lt;br /&gt;
Screenshot below.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikPI3CtT10cJR6FeP_dGBscLGb_7bl4__kRkFmtvX3LCNnSv5zJD2XJzON0j2AW1uisRVWiaV9Et-YAV8kI704_sM424pEAgfzv32M6htKs63QaYoLB74dJP0yhIvRBporRKg1cnsDH2U/s1600/IMG_0186.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikPI3CtT10cJR6FeP_dGBscLGb_7bl4__kRkFmtvX3LCNnSv5zJD2XJzON0j2AW1uisRVWiaV9Et-YAV8kI704_sM424pEAgfzv32M6htKs63QaYoLB74dJP0yhIvRBporRKg1cnsDH2U/s400/IMG_0186.PNG&quot; width=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/3993425665171989354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2012/03/mapper-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/3993425665171989354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/3993425665171989354'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2012/03/mapper-update.html' title='Mapper - Update'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikPI3CtT10cJR6FeP_dGBscLGb_7bl4__kRkFmtvX3LCNnSv5zJD2XJzON0j2AW1uisRVWiaV9Et-YAV8kI704_sM424pEAgfzv32M6htKs63QaYoLB74dJP0yhIvRBporRKg1cnsDH2U/s72-c/IMG_0186.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-1151784114932281938</id><published>2012-03-19T07:01:00.001-07:00</published><updated>2012-03-19T07:01:54.472-07:00</updated><title type='text'>Symposium Today!</title><content type='html'>Here&#39;s a pic of the symposium set up. Woke up bright and early to set things up. &lt;div class=&quot;separator&quot;style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkAV3bfb-fIkz0-ZnyADwf_vGvBzs5_QjpxFYwm0n-UaXEtMMmy2xLIQOfYAZVDORW9XcT5kA_OEIuJZ_PvNZljQ9ug0Ra2DVj7T8mB9HrxFLaEwOXY3CLI8pZkEDd56A8uiK2d9R2m9g/s640/blogger-image--1549666590.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkAV3bfb-fIkz0-ZnyADwf_vGvBzs5_QjpxFYwm0n-UaXEtMMmy2xLIQOfYAZVDORW9XcT5kA_OEIuJZ_PvNZljQ9ug0Ra2DVj7T8mB9HrxFLaEwOXY3CLI8pZkEDd56A8uiK2d9R2m9g/s640/blogger-image--1549666590.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/1151784114932281938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2012/03/symposium-today.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/1151784114932281938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/1151784114932281938'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2012/03/symposium-today.html' title='Symposium Today!'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkAV3bfb-fIkz0-ZnyADwf_vGvBzs5_QjpxFYwm0n-UaXEtMMmy2xLIQOfYAZVDORW9XcT5kA_OEIuJZ_PvNZljQ9ug0Ra2DVj7T8mB9HrxFLaEwOXY3CLI8pZkEDd56A8uiK2d9R2m9g/s72-c/blogger-image--1549666590.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-187242700183195779</id><published>2012-03-17T17:50:00.000-07:00</published><updated>2012-03-17T17:50:37.171-07:00</updated><title type='text'>The Keys to Learning - Update: It Plays!</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;Hooked up the solenoids with the new bracket, and shaved the touch sensor board beneath it. This is the result.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.blogger.com/video.g?token=AD6v5dz5V7Qg-oYwCr5YnsfwhUsGpb2fpT2ui_if7GBAsK7cLnVWWqSL9JEK8F68euR2gRsJNBxa86KgpYHZv3tSHQ&#39; class=&#39;b-hbp-video b-uploaded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/187242700183195779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2012/03/keys-to-learning-update-it-plays.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/187242700183195779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/187242700183195779'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2012/03/keys-to-learning-update-it-plays.html' title='The Keys to Learning - Update: It Plays!'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-7703420310456312534</id><published>2012-03-16T13:02:00.001-07:00</published><updated>2012-03-16T13:02:36.471-07:00</updated><title type='text'>The Keys To Learning - Update</title><content type='html'>With the symposium coming up this Monday, the piano needed to look its best. Below are pics of the first coat of stain. Looks pretty awesome. &lt;div class=&quot;separator&quot;style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSAKtW5-oolfscVok46pVx63I-SjhA2FnNrNgWdue9Hw2AwWrz_aPa-TKojS2PHMqAeGzP0ed4i_fuJYk-mpjzpLviTh9dTLY6JGG__A-oCneYN6UNrBjUEtnPR3kQKmBSgqTkkm0kWDE/s640/blogger-image--1407658350.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSAKtW5-oolfscVok46pVx63I-SjhA2FnNrNgWdue9Hw2AwWrz_aPa-TKojS2PHMqAeGzP0ed4i_fuJYk-mpjzpLviTh9dTLY6JGG__A-oCneYN6UNrBjUEtnPR3kQKmBSgqTkkm0kWDE/s640/blogger-image--1407658350.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvT8QalyPt5jv_v7q5_7ghyk8dNMel6jZoCKdtRyL3MQuBRTxURwSbnBuG8xkRPDQYmxRA4z953yBt0Afl5I_4pKbHw4Z1HfAmDEdcyewlsj9sLXyRkg9htUr9MpJED7ZI60O2NO7cow4/s640/blogger-image--444862707.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvT8QalyPt5jv_v7q5_7ghyk8dNMel6jZoCKdtRyL3MQuBRTxURwSbnBuG8xkRPDQYmxRA4z953yBt0Afl5I_4pKbHw4Z1HfAmDEdcyewlsj9sLXyRkg9htUr9MpJED7ZI60O2NO7cow4/s640/blogger-image--444862707.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/7703420310456312534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2012/03/keys-to-learning-update_16.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/7703420310456312534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/7703420310456312534'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2012/03/keys-to-learning-update_16.html' title='The Keys To Learning - Update'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSAKtW5-oolfscVok46pVx63I-SjhA2FnNrNgWdue9Hw2AwWrz_aPa-TKojS2PHMqAeGzP0ed4i_fuJYk-mpjzpLviTh9dTLY6JGG__A-oCneYN6UNrBjUEtnPR3kQKmBSgqTkkm0kWDE/s72-c/blogger-image--1407658350.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-770546387763743871.post-8762732423367580684</id><published>2012-03-13T11:33:00.001-07:00</published><updated>2012-03-13T11:33:09.379-07:00</updated><title type='text'>The Keys To Learning - Update</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
It&#39;s been a while since I&#39;ve updated on the status of the piano. The outer casing is completed. The whole group has been working together over the past few days to update the software side. The last step on the mechanical side (attaching the solenoids to the frame) will be completed in the next few days. At this point, when the tablet is hooked up to the piano, a user can play a song, and it identifies exactly where they messed up if they made a mistake. Pictures below.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd8em3FiAIHa9R7_CfKSSg9ADo1LdUb4u3RVAe3AAfxtVB7KEsEPtY2cKxQ0raTKpehMrPoVCdZbOccGoWCeAwuEul_49sG08uxs3mJkb9X5u7kVXAhbWguO1MeiQlw6imCHwHhreI_1A/s1600/IMG_0131.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;478&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd8em3FiAIHa9R7_CfKSSg9ADo1LdUb4u3RVAe3AAfxtVB7KEsEPtY2cKxQ0raTKpehMrPoVCdZbOccGoWCeAwuEul_49sG08uxs3mJkb9X5u7kVXAhbWguO1MeiQlw6imCHwHhreI_1A/s640/IMG_0131.JPG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Hooking up the touch sensors to the Arduino so it can tell what was played&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHW1yNvxR5nsNINbibxxhy7zMKTyYFxcF06vQw8xfD5oflCyR520a8Ghprb4BHk3dxMqjOB7zNITFj_uL1BNlL4FRLPWM4x-wifTO-rB0zs_Img9IRKQBo7xZ-V07MvOWd-sQ9Y0UUtws/s1600/K2LUI.tiff&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;388&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHW1yNvxR5nsNINbibxxhy7zMKTyYFxcF06vQw8xfD5oflCyR520a8Ghprb4BHk3dxMqjOB7zNITFj_uL1BNlL4FRLPWM4x-wifTO-rB0zs_Img9IRKQBo7xZ-V07MvOWd-sQ9Y0UUtws/s640/K2LUI.tiff&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;The new UI designed my Rohit Rajan and myself. And yes, that is the Song of Time from Zelda.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvALkFUfi7yYdjudYcxZGQGwumeFwCYu20BMRi1f13Dqfy8kBNnM889D4ajM0FZbVd9zAFmjbz8vLiqmroWB11DPs4wJC3dIknZdvlW_b0bA0lJokKJxV0wWCSXPdXpkJJeZVIksgTSY0/s1600/IMG_0139.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;478&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvALkFUfi7yYdjudYcxZGQGwumeFwCYu20BMRi1f13Dqfy8kBNnM889D4ajM0FZbVd9zAFmjbz8vLiqmroWB11DPs4wJC3dIknZdvlW_b0bA0lJokKJxV0wWCSXPdXpkJJeZVIksgTSY0/s640/IMG_0139.JPG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;The bracket to hold the solenoids under the keys. These will pull down the metal pin in the keys to demo the song for users.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://mdfprojects.blogspot.com/feeds/8762732423367580684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mdfprojects.blogspot.com/2012/03/keys-to-learning-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/8762732423367580684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/770546387763743871/posts/default/8762732423367580684'/><link rel='alternate' type='text/html' href='http://mdfprojects.blogspot.com/2012/03/keys-to-learning-update.html' title='The Keys To Learning - Update'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03017749132608199619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd8em3FiAIHa9R7_CfKSSg9ADo1LdUb4u3RVAe3AAfxtVB7KEsEPtY2cKxQ0raTKpehMrPoVCdZbOccGoWCeAwuEul_49sG08uxs3mJkb9X5u7kVXAhbWguO1MeiQlw6imCHwHhreI_1A/s72-c/IMG_0131.JPG" height="72" width="72"/><thr:total>0</thr:total></entry></feed>