Jekyll2021-05-17T17:22:22+00:00https://macmedan.github.io/feed.xmlOverrideFuncJust past defaultDan Leonardmailto:pdanielleonard+overridefunc@gmail.comDIY Pallet Wood Table2017-03-06T18:44:28+00:002017-03-06T18:44:28+00:00https://macmedan.github.io/jekyll/update/2017/03/06/DIY-Pallet-Wood-Table<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/finalProduct.jpg" title="Finished Product" alt="Finished Product" />
</figure>
<p>Here is the Finished product just to get started. My sister go married and moved into a new apartment. Since she and her husband are still in college they did not have much money but wanted a nice apartment together, My wife likes to design and decorate so she decided she would decorate their place and I would make the furniture. So this is the first of a few pieces we did. You can check out her work at on Instagram at <a href="(http://ow.ly/EiKw309E3BP)">@byjo_designs</a></p>
<p>Originally this piece was to go behind the couch in the living room because of a strange layout the couch could not sit against the wall. Since then it has made it into their bed room as a nice table with storage underneath.</p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/2rawPallets.jpg" title="Raw pallets" alt="Raw pallets" />
</figure>
<p>Collected some pallet wood there are always posts of free pallets you can pick up. This is only a portion of the pallets I used.</p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/3processed_wood.jpg" title="Boards" alt="Boards" />
</figure>
<p>The only tools that you have to have for this project are the basics for all DIY projects.<br />
I used:
Hamer A Crow bar ( for pulling the pallets apart )
10” Table Saw
Drill and impact Drill 3/8” Bits to sink the screw heads.
Screws 1 1/2”
Measuring Tape
Electric Sander Clamps</p>
<p>Used a crow bar to pry the planks off the pallets and hammered the nails out back wards to remove them. Some people just cut off the boards at the nails with a circular saw which is a faster way of doing it of coarse but I kinda like the look with the old nail holes. Then I took each bard and sanded them down to give a smooth finish and remove any paint or other cruft that was on the boards. Then I took the boards and cut them in to 12” sections for the center of table.</p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/measure.jpg" title="Lining up the cuts" alt="Lining up the cuts" />
</figure>
<p>I needed a long table to stretch the length of the couch and decided since my boards were limited basically to the length of a pallet that I would make two sections and buy some cheap 1 x 1 to hold it all together. Laid out all the boards to make sure they fit together and sanding the ends of the longer boards so they are all the same size.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/IMG_0129.jpg" title="picture" alt="picture" />
</figure>
<p>Lining things up checking it twice.</p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/drillbits2.jpg" title="Drill bits" alt="Drill bits" />
</figure>
<p>Selected a bit that was as close as i could get the the size of the head of my screws. This bit will let me recess the screw under the surface of the board helping to hide them. I believe it was a 3/8” bit but may vary based on what screws you use.</p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/sink_holes.jpg" title="Pocket holes" alt="Pocket holes" />
</figure>
<p>Pre drilling holes for the screws so the heads don’t stick out. There is a tool that you can use as a guide for this but I just hold my drill at the angle I want and start about half way up the board and drill till there is about 1/4 of the board left.</p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/line_up_pilot.jpg" title="Pocket holes" alt="Pocket holes" />
</figure>
<p>Then I take a bit that is smaller then my screws and drill a pilot hole to prevent the screw from splitting the wood as it is cranked down. I shoot for about half if not more of the screw going into the other board.</p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/watch_out.jpg" title="Warning" alt="Warning" />
</figure>
<p>Watch out for your drill rubbing on the wood if your drill bit is not long enough. This is the bottom side so it will not bee seen at all.</p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/secured" title="Secured" alt="Secured" />
</figure>
<p>The screw holding the frame together inset in the board so it will lay flat on the frame for the legs.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/top_frame.jpg" title="Top frame" alt="Top frame" />
</figure>
<p>I screwed the outer frame together of one side and lift it up like this so I can apply pressure down while holding the boards strait and snug.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/fit_together.jpg" title="Fastened frame" alt="Fastened frame" />
</figure>
<p>Here are the two halves, outer frames snugly attached but the inner boards are just set inside to help with alignment.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/upsidedown_inner_suppoert.jpg" title="Inner frame support" alt="Inner frame support" />
</figure>
<p>I took a 1x1 and used it to make a sub frame. This will hold all the center boards in place and provide extra stability to the table as well as make it straight. The boards were roughly 5/8” thick so I used 1 1/2” screws to attach the 1X1 to the table top frame. That gives me about 1/2” into the boards but keeps me from poking through. My goal was not to have any screws visible form the top.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/flip_inner_support.jpg" title="Inner frame support alternative" alt="Inner frame support alternative" />
</figure>
<p>Flipping the top over to see how it looks. Placed a few boards in the center but I will have to flip it back to actually attach them.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/lineup.jpg" title="Aligning" alt="Aligning" />
</figure>
<p>Snug as a bug in a rug.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/30laying_out_boards.jpg" title="Checking length" alt="Checking length" />
</figure>
<p>Lining up all the boards to see how they sit form the top.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/innersupport.jpg" title="upsidedown inner support" alt="upsidedown inner support" />
</figure>
<p>Flipped the whole thing upside down, so all the ugly sides are up and started attaching. There was a little gap but luckily it happened on both sides so I cut an extra board and placed the gap in the center of the half. It actually tuned out kinda nice to breakup the repetitiveness of the boards.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/staggering_holes.jpg" title="Staggering holes" alt="Staggering holes" />
</figure>
<p>Throwing in some staggered pilot holes to hold the top boards down. Staggered holes to prevent splitting the wood. if you line up too many holes with the same thread in the grain some times it can cause it to split there.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/49mark.jpg" title="Mark and measure" alt="Mark and measure" />
</figure>
<p>Mark where I need to stop drilling.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/50line_up_drill.jpg" title="Line up drill" alt="Line up drill" />
</figure>
<p>Guess a great starting point about the length of the screw away so 1 3/8” ish. I know super precise.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/51drill_hole.jpg" title="Drill holes" alt="Drill holes" />
</figure>
<p>Drill like a mad man.</p>
<p><br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/46making_legs.jpg" title="Making legs" alt="Making legs" />
</figure>
<p>Creating the side Legs. My sister wanted a shelf to stack junk (I think she is a hoarder). So I made them little shelves along with the space under the table they will be able to put things. I used these 90 deg clamps I have to hold the shelf where I wanted and secured with screws. Looking back now I probably should have made them deeper but beggars can’t be choosers.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/46uncovered.jpg" title="Uncovered end" alt="Uncovered end" />
</figure>
<p>Had to notch out a pice for the sub frame to fit up snug like I wanted and sunk the screw for attaching to the side leg.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/47endview.jpg" title="Cover end of Table" alt="Cover end of Table" />
</figure>
<p>Add the end pice on to cover up all the screws and complete the top. Then attach it from below holding it snug in place.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/45LegsOn.jpg" title="Legs on" alt="Legs on" />
</figure>
<p>The table is designed for sitting behind her couch because of a strange wall protruding preventing the couch from sitting against the wall. This made the table pretty long and I was afraid of it not being able to support that much wight so I decided to add a center supporting leg.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/center_post.jpg" title="Center Post" alt="Center Post" />
</figure>
<p>Added a cross bar for extra support of the legs but placed it higher so things can be stacked under it. Was not too worried how this one looked because the table will be sandwiched between the couch and the wall. In other words you will not see it. I noticed if I tried to put some wight on it the legs would flex a little and did not want them to break off so I added some 30 deg supports.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/51support.jpg" title="Center Support" alt="Center Support" />
</figure>
<p>Just took a section of 1x1 and predrilled some holes. Not my prettiest work but again its on the underside so I don’t mind too much.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/52support.jpg" title="Support" alt="Support" />
</figure>
<p>This one I didn’t even sink that much but it worked. Added one to each corner and it really improved its rigidness.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/53support.jpg" title="Support" alt="Support" />
</figure>
<p><br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/58end.jpg" title="end" alt="end" />
</figure>
<p>There she be starting to shape up.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/56finished_sanding.jpg" title="Sanding" alt="Sanding" />
</figure>
<p>Now all that is left is sanding everything smooth. Since I was using pallet wood there are variations in the size of the wood so I waited till It was all put together before I really sanded everything down to its final state. I used an old hand plainer (essentially a blade that shaves off a little at a time) for the initial leveling and then an electric sander for the rest.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/56finished_sanding.jpg" title="Finished sanding" alt="Finished sanding" />
</figure>
<p>Blow off all that dust and it don’t look to bad. Now It just needs some stain and a coat of poly acrylic and we are good as gold.
<br /><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/pallet_table/final2.jpg" title="Final Product" alt="Final Product" />
</figure>
<p>The Final product again thanks for checking it out. Follow our journey and other projects on Instagram <a href="(http://ow.ly/EiKw309E3BP)">@byjo_designs</a> and I will make more detailed posts here.</p>
<p><br /><br /><br /><br /></p>
<p>Check it out on imgur</p>
<blockquote class="imgur-embed-pub" lang="en" data-id="a/rRlKi"><a href="//imgur.com/rRlKi">DIY Pallet Wood Table.</a></blockquote>
<script async="" src="//s.imgur.com/min/embed.js" charset="utf-8"></script>Dan Leonardmailto:pdanielleonard+overridefunc@gmail.com$179 Tiko 3D printer - Getting Started2017-01-16T18:44:28+00:002017-01-16T18:44:28+00:00https://macmedan.github.io/jekyll/update/2017/01/16/The-TikoBot-a-$199-3D-Printer<p>So if you don’t know there is a $179 3D printer out on the market called the <a href="https://www.tiko3d.com/">Tiko</a>. I backed it on Kickstarter, This is probably my 3rd <code class="language-plaintext highlighter-rouge">3D printer</code>-esque projects that I have backed. I started with the <a href="https://www.kickstarter.com/profile/1351910088/created">3Doodler</a> it was so good I backed the second version also. I have backed a few projects on Kickstarter some have been successful others have failed and the company does not exist any longer.</p>
<p>Finally got this thing and I was pumped. Unfortunately it arrived over Christmas and I was 3000 miles away. Once I got back I really wanted to get printing. It was a year late but its Kickstarter so you kinda expect things like that to happen. If you don’t you should not user Kickstarter you will be disappointed. This is early backing so you can get something by helping the company get started and off the ground. So with that in mind you have to realize that these are not final products, if you want final products wait till it is backed and they have delivered to all of their backers. That is a relatively safe”er” time to purchase a product but you may miss out on special discounts and getting your hands on it first.</p>
<p>Tips and Tricks Learned.</p>
<p>It took me 2 days to actually get the first things printed. I figured since the instructions was a trifold brochure with 6 instructions that it would be relatively simple to get up and going.</p>
<blockquote>
<p>Step 1. Plug it in.</p>
</blockquote>
<blockquote>
<p>Step 2. Connect to the printer.</p>
</blockquote>
<p>They have some pretty cool ideas on making the print process very simple with cloud printing you should be able to connect to your printer from any where and queue up a print but it is not there just yet. Cloud Printing is disabled and being worked on so the only way to connect to the printer is by going to your wifi and connecting to the wifi hotspot it is broad casting. I found that it takes a second for the printer to boot up and actually start casting the hotspot and be connectable.
Once you have done this you will open a web browser (<a href="https://www.tiko3d.com/">Tiko</a>. suggests you use chrome)
Then type in the url print.tiko/ this will give you the ability to setup your printer the first time and the print interface once you have done that.</p>
<blockquote>
<p>Step 3. Load the PLA.</p>
</blockquote>
<p>This is where I made my first mistake. So once you select <code class="language-plaintext highlighter-rouge">Manual Controls</code> on the upper left a few options appear. This is where you can adjust the brightness of the LED’s that light up the print bed. <code class="language-plaintext highlighter-rouge">Load/unload filament</code> and <code class="language-plaintext highlighter-rouge">Heat Nozzle</code>. So unwrap your PLA that came with the printer and and uncoil it a few times. Click the <code class="language-plaintext highlighter-rouge">Load Filament</code> option and the printer should make some sort of noise. This is the motor that pulls the filament into the printer. Then you need to push the filament into the white straw on the inside. You will feed about 18 to reach the nozzle. So my first attempt I put it in and made it all the way to the motor that is supposed to pull it in and subsequently push it all the way to the nozzle. ✔︎ That you push it far enough that is starts to pull the filament. I got it right up to the motor but not to the point it was pulling it. There is some sort of sensor that tells the printer if filament is loaded or not. But this sensor is not located at the nozzle nor is it on the second half of the feed tube. So if your filament is fed half way in the printer will thing the filament is loaded but while you are printing there with be no plastic coming out of the nozzle.</p>
<blockquote>
<p>Step 4. Heat the Nozzle.</p>
</blockquote>
<p>This step held me up for a while, would hit the giant <code class="language-plaintext highlighter-rouge">Print</code> button at the bottom of the interface and it would dismiss the view but nothing would happen with the printer. Super frustrating I hope that they do some improvements on their UX. Come to find out that you have to hit the <code class="language-plaintext highlighter-rouge">Heat Nozzle</code> and wait the full min before you hit the <code class="language-plaintext highlighter-rouge">Print</code> button that then takes more then that mount of time to render the object gCode and post that data to the printer.</p>
<p>Not super difficult and I was able to make a print with the default settings but you can play around with those and see how it affects your prints. I was supper impressed on how easy it was to get things going. I do hope that they improve the interface to give a little more feedback when things are not working but I am sure that will evolve. There was really only one major hangup besides that.</p>
<blockquote>
<p>The Design Flaw.</p>
</blockquote>
<p>There is an issue with the way that the filament supply tube that runs from the driver motor to the nozzle. What is strange to me is that there is no way that this <a href="https://www.tiko3d.com/">Tiko</a>. was tested and printed the demo structure that comes with it because they would have run into this issue. Unless of coarse they did not do the calibration step that they do now where the nozzle goes to each corner and presses into the print base. Because every time it would do that the black section of the supply tube would loop itself around one of the arm motors. This causes the nozzle to pull all the way to the side of the bot and error out because it cannot go back to the <code class="language-plaintext highlighter-rouge">Zero</code> position. Do not fret though I have a solution. It is super advanced and took a ton of R&D. </sarcasm> if you take a piece of scotch Tape and tape the black section of the tube loosely to the wall of the printer you don’t run into the problem. Bam you are all ready to print to your hearts content.</p>
<p>There are some flaws to this but looking at how much I have paid for it I am ok with having to make some adjustments to it myself. I do think it is something <a href="https://www.tiko3d.com/">Tiko</a>. could and should fix but its not a deal breaker. I would suggest to anyone wanting to get into 3D printing that the <a href="https://www.tiko3d.com/">Tiko</a>. bot is a great starter printer. If you have used a more expensive printer you may be disappointed but that is what makes the <a href="https://www.tiko3d.com/">Tiko</a>. bot great. Also I absolutely love the way that it looks. they definitely have some design guys at <a href="https://www.tiko3d.com/">Tiko</a>. that know what they are doing.</p>
<p>Share your comments and experiences in the comments.</p>
<p>Happy Printing</p>Dan Leonardmailto:pdanielleonard+overridefunc@gmail.comSo if you don’t know there is a $179 3D printer out on the market called the Tiko. I backed it on Kickstarter, This is probably my 3rd 3D printer-esque projects that I have backed. I started with the 3Doodler it was so good I backed the second version also. I have backed a few projects on Kickstarter some have been successful others have failed and the company does not exist any longer.Google Mows My Lawn2016-12-27T18:44:28+00:002016-12-27T18:44:28+00:00https://macmedan.github.io/jekyll/update/2016/12/27/Google-Mows-My-Lawn<p>Back in September of 2015 I lost my job as an IOS Developer. It was sad and really blind sided me. But I liked to go to startup conventions and have been apart of StartupGrand for a while and was presented with the opportunity to participate in a Hackathon at Start-fest.</p>
<p><br /></p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/Crouched.JPG" title="Winner winner chicken dinner" alt="Winner winner chicken dinner" />
</figure>
<p><br /></p>
<p>This was right around the time of the internet sensation of <a href="https://www.twitch.tv/twitchplayspokemon">#TwitchPlaysPokemon</a></p>
<blockquote>
<p>Twitch Plays Pokémon (TPP) is a “social experiment” and channel on the video streaming website Twitch, consisting of a crowdsourced attempt to play Game Freak’s and Nintendo’s Pokémon video games by parsing commands sent by users through the channel’s chat room.</p>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Twitch_Plays_Pok%C3%A9mon">Wiki</a></li>
</ul>
</blockquote>
<p>Which is still playable I think. We really like this Idea that people were able to come together with perfect strangers and after 7 days complete the game ( even with all the 👹 Trolls out there ). So my brothers, Doug and David and I (Dan) set out to create something great along these same principles. The stipulations of the Hackathon was that you had 24 hours to build something that used the internet and we decided that we wanted to use normal parts you could purchase off of the shelves at <a href="http://www.homedepot.com/">Home Depot</a> 🛠.</p>
<p>We wanted something that would be helpful for our own lives and that the whole world could participate in. So we took the daunting chore of 🚜 mowing our lawn and decided to outsource it to others. Yes there is the risk of participants drawing crude things in our lawn. We figured that the world as a whole actually have a very difficult time coordinating so that is a risk we were willing to take. So we set off to build a crowdsourced device that would mow our lawn for us.</p>
<p>So here is the parts/price list from the project with links.</p>
<ol>
<li>
<p>Electric Lawn Mower
Ryobi 20 in. <a href="http://ow.ly/RRm3q">40-Volt Lithium-Ion Brushless Cordless Walk-Behind Electric Lawn Mower</a> 499.00</p>
</li>
<li>
<p>Two Drills <a href="http://ow.ly/RRmbB">Ryobi 18-Volt ONE+ 1/2 in. Cordless Hammer Drill</a> 69.00/ea</p>
</li>
<li>
<p><a href="http://ow.ly/RRmwH">Ryobi 18-Volt ONE+ Compact Radio with Bluetooth Wireless Technology</a> 39.97</p>
</li>
<li>
<p>Three Batteries <a href="http://ow.ly/RRmrc">Ryobi 18-Volt One+ High Capacity LITHIUM+ Battery</a> 99.00/ea</p>
</li>
<li>
<p>Two <a href="http://ow.ly/RRmKp">3 in. Steel Swivel Caster</a> 5.48</p>
</li>
<li>
<p>Two <a href="http://ow.ly/RRmYQ">4in Hole Dozer Hole Saw with Arbor</a> 12.97/ea</p>
</li>
<li>
<p><a href="http://ow.ly/RRn1N">Raspberry Pi 2 micro Computer</a> 35.95</p>
</li>
<li>
<p><a href="http://ow.ly/RRnaR">Eight channel relay board</a> 18.10</p>
</li>
<li>
<p>Tripod with iPhone Mounts</p>
</li>
<li>
<p>Two <a href="http://ow.ly/RRnmc">iPods</a> 199.00/ea</p>
</li>
<li>
<p><a href="http://ow.ly/RRnBF">18-Volt One+ 6-Port SuperCharger</a> 79.00</p>
</li>
<li>
<p>Zip Ties</p>
</li>
<li>
<p>Four 3”-1/4 bolts with locking washer and nut</p>
</li>
<li>
<p>Eight 1/2” 1” bolts and nuts</p>
</li>
</ol>
<h2 id="step-1-the-mower">Step 1. The Mower</h2>
<p>The mower is the core of this project, it would be difficult to get the world to mow our lawn without it 🙃. We chose this lawnmower because it was in the family of Ryobi products and it had enough space on the inside to let us mount our Raspberry Pi and it looked super cool 😎 . We wanted to keep inside the same family of products as much as possible so that we could swap batteries for any part of our project.</p>
<p>There were many pieces of the lawnmower that we will not need for our specialized version. So we stripped it down and removed anything that was not needed. First thing you need is a ⭐️ star shaped screw driver to remove some of the screws holding it together. Once all the ✨ star screws are removed you can lift the outer shell. Be careful, there is a wire connected to the top half of the shell for the battery hookup. Disconnect it and pull off the upper half. Now you can see the complex insides of the lawnmower. Yep that is it a motor and and a power distributor, motor and a clip for the battery.</p>
<figure>
<img class="img-thumbnail img-responsive center img-half-width " src="/img/TopOff.JPG" title="Mower with the top cover off and Dan working" alt="Mower with the top cover off and Dan working" />
</figure>
<p>There is a wire that runs up the handle to activate the motor. At the handle there are three screws on the plastic case containing the button. There are 6 ⭐️ star screws on the back but you only need to take out the bottom 4. Once open you can take the two switches out, unscrew all the plastic tabs holding the wiring to the bar running down the handle. Later we will bypass this and hooked up too our relay board so that the raspberryPi can control it.</p>
<p>Now you can remove the two bolts at the base of the handle and remove it completely from the lawn mower assembly To remove the back flap by popping off the clip on the end of the metal rod that acts as a hinge for the door. Slide that rod out and the door will fall off.</p>
<h2 id="step-2-font-wheels">Step 2. Font wheels</h2>
<p>Normally when you mow your lawn, to make a turn you push the handle down so the front end lifts up and you rotate the lawn mower. That will not work here as there wont be a handle on the finished product. So we need to remove the front wheels and the axle that connects them too the chassis.</p>
<p>Once they are removed, take the metal casters and attach them to the plastic that protrudes out the front of the lawn mower. These wheels swivel a full 360 degrees making them perfect for enabling better movement of the lawnmower. Drill 4 holes that line up with the hole pattern on the casters. Then take 4 1” bolts, a locking washer and a nut for each to secure the wheels to the mower. This is one thing that we will be changing on the next iteration because this lifts the lawn mower a considerable distance off the ground.</p>
<h2 id="step-3-back-wheels-and-drive-train">Step 3. Back wheels and drive train</h2>
<p>Now for the drills, these are a key piece of the project because the provide the actual movement of the machine.To prep them we will need to take them apart so we can control how fast and when they rotate.The easiest way is to create a trigger between the batteries and the motor. Unscrew all the screws holding the outer shell together. You can see there are three main parts: the Motor, the trigger mechanism and the battery terminal hook up. We want to disconnect the battery so we can toggle it with our relays giving us the ability to drive. Disconnect the black wire that connects the trigger mechanism to the battery contacts.</p>
<figure>
<img class="img-thumbnail img-responsive center img-half-width " src="/img/BackView.JPG" title="View from back of Dan actually working on the project" alt="View from back of Dan actually working on the project" />
</figure>
<p>Then take a new wire and solder one end to the black wire. Take another wire and solder to the trigger mechanism. Create a small hole for our wires to escape the housing and screw the housing back around the drill. I made my wires about 15” long so I could house the electronics inside the lawn mower.</p>
<h3 id="wheel-prep">Wheel prep</h3>
<p>We need a way to attach the drills to the wheels securely.
This is where the Hole Saw bits come into play. So take the 3” hole saw bits and line them up with the center of the wheel. There are three holes located on bits, take a ¼ bit and drill into the wheels in the same pattern. Take 3” ¼ bolts and pass them through the bit and wheel. Take a washer, a locking washer, and a nut and tighten them down. Now you can take your new wheel bit and put it into your custom drill and tighten it down. Repeat this process for the other wheel. Next we take this contraption and attach it to the chassis.</p>
<h3 id="attach-to-main-body">Attach to Main Body</h3>
<p>Now that you have the entire drill assembly put together you can secure them to the back of the lawn mower. You want this to cut grass so make sure the clearance is 1 - 2”. There is an attachment that comes with the drills that bolts on an external handle for more control. We heated this up to get the nut out of it and then used the bolt to secure the drill to the back of the lawn mower.
Drill a 1/4” hole mid level of the lawn mower then take the extra attachment bolt and slide it through the Drill and lawnmower. Place a washer and the nut on the other side. Drill another hole at the same height on the opposite side for the other wheel and attach the other drill. This makes a pivot point. To keep the drills from rotating, drill some more holes and pass zip ties through. Cinch these down to prevent the drills from moving. ( This was definitely a time saver. You may want to go back and make something a little stronger than zip ties to hold this together. )</p>
<h2 id="step-4-the-brains">Step 4. The Brains</h2>
<p>Now we need to make this things smart. We decided that a RaspberryPi was the way to go. It is easy to use gives you an entire linux OS so you can write your program in what ever language you prefer. It also has many breakout boards so you can extend it to however you would like. So the basic idea is that the Pi will interpret all the information provided by the chat room. Then it will trigger the correct relay to tell the drills on the back what to do. Initially we wanted to keep it simple so we used “w”,”a”,”s”,”d” for directional controls. The rest is simple soldering for hooking up the relay board. Take the wires that we attached to the drills and place them in the relay terminals, securing them by screwing the terminals down.</p>
<p>If you have any comments or questions don’t hesitate to leave them below. This project taught us allot and we were supper excited when we took first in the competition. My Brothers and I love building things and exploring new Ideas. We may make modifications and improve this and I will try to update with a new post. We got allot of news coverage for this you can check it out here <a href="https://www.youtube.com/watch?v=1oE5vYW8MbI">Fox News Story</a>
I made an <a href="http://www.instructables.com/id/Google-Mows-My-Lawn/">instructables</a> you can check out and won a <a href="http://www.instructables.com/id/Google-Mows-My-Lawn/">raspberryPi competition</a> with it also.</p>
<figure>
<img class="img-thumbnail img-responsive center " src="/img/Final.png" title="Final Product" alt="Final Product" />
</figure>Dan Leonardmailto:pdanielleonard+overridefunc@gmail.comBack in September of 2015 I lost my job as an IOS Developer. It was sad and really blind sided me. But I liked to go to startup conventions and have been apart of StartupGrand for a while and was presented with the opportunity to participate in a Hackathon at Start-fest.JSQMessagesViewController Swift 32016-11-20T22:46:28+00:002016-11-20T22:46:28+00:00https://macmedan.github.io/jekyll/update/2016/11/20/JSQMessagesViewController-Swift-3<p>I actively contribute to JSQMessagesViewController, an Open Source Project, that makes it super easy to get a “iMessages” like feature into any app. Often the first step is the hardest. Many users have different levels of experience, education and understanding and since I am a Swift Nut we’ll explore implementing it in Swift.</p>
<p>So I will outline the minimum you have to do to get this up and running. 🏃</p>
<h4>Step 1. Create Your project.</h4>
<p>Open Xcode.</p>
<ul>
<li>Go to File -> New Project.</li>
<li>Select single view application.</li>
<li>Give your project a name and save.</li>
</ul>
<h4>Step 2. Cocoapods to your computer</h4>
<p><a href="https://cocoapods.org/">Cocoapods</a> is a dependency manager for Swift and Objective-C Cocoa projects. It has over 25 thousand libraries and is used in over 1.2 million apps.</p>
<p>To install <code class="language-plaintext highlighter-rouge">cocoapods</code> open up <code class="language-plaintext highlighter-rouge">terminal</code>
<code class="language-plaintext highlighter-rouge">Command + SpaceBar</code> will open SpotLight. type <code class="language-plaintext highlighter-rouge">Terminal</code> or use finder -> <code class="language-plaintext highlighter-rouge">/Applications/Utilities/Terminal.app</code>
exicute this command in your terminal window and <a href="https://cocoapods.org/">cocoapods</a> will be installed</p>
<figure class="highlight"><pre><code class="language-linenos" data-lang="linenos"> sudo gem install cocoapods</code></pre></figure>
<p>Once this has complete you need to navigate to your project’s directory(folder). You can open Folders by using the command <code class="language-plaintext highlighter-rouge">cd</code> followed by the <code class="language-plaintext highlighter-rouge">path/to/file</code> and you can move up a folder with the <code class="language-plaintext highlighter-rouge">..</code> command.
To quickly open a folder in terminal type <code class="language-plaintext highlighter-rouge">cd</code> and then drag the file from finder to the terminal window. This will insert the path to the file for us. Hit enter and you are now at your project’s base directory.</p>
<h4>Step 3. Adding cocoapods to your project</h4>
<p>Run command</p>
<figure class="highlight"><pre><code class="language-linenos" data-lang="linenos">pod init</code></pre></figure>
<p>This creates a podfile for you. This is where you can manage <code class="language-plaintext highlighter-rouge">pods</code> that you want to incorporate in your app. Open this file up in your favorite text editor.</p>
<h4>Step 4. Adding JSQMessagesViewController to your project</h4>
<p>This is the bear minimum you need to have in your podfile.</p>
<figure class="highlight"><pre><code class="language-linenos" data-lang="linenos">#if you're using Swift
use_frameworks!
target 'YourProjectName' do
pod 'JSQMessagesViewController'
end</code></pre></figure>
<p>Save your file and close it. Now back in terminal type: <code class="language-plaintext highlighter-rouge">pod install</code> This will add the <code class="language-plaintext highlighter-rouge">JSQMessagesViewController</code> library to your project.</p>
<h4>Step 5. Open Workspace</h4>
<p>Pods do an interesting thing where they manage the configuration of your project for you so you do not have to. The way that they do this is by generating a <code class="language-plaintext highlighter-rouge">.workspace</code> for you. So if you had your project open in <code class="language-plaintext highlighter-rouge">XCode</code> previously, Close it and open the <code class="language-plaintext highlighter-rouge">YourProjectName.workspace</code> file that was generated.</p>
<p>At this point you should be able to hit run and your project builds. You will not see anything because we have not added anything yet but you should not have any build errors.</p>
<h4>Step 6. Adding JSQMessagesViewController to your project</h4>
<p>Now let’s code, modify the UIViewController that comes with crating a new project.</p>
<p>Here is the minimum amount of code you need in this file.</p>
<figure class="highlight"><pre><code class="language-swift" data-lang="swift"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
</pre></td><td class="code"><pre><span class="c1">//</span>
<span class="c1">// ChatViewController.swift</span>
<span class="c1">// SwiftExample</span>
<span class="c1">//</span>
<span class="c1">// Created by Dan Leonard on 12/2/16.</span>
<span class="c1">// Copyright © 2016 MacMeDan. All rights reserved.</span>
<span class="c1">//</span>
<span class="kd">import</span> <span class="kt">UIKit</span>
<span class="kd">import</span> <span class="kt">JSQMessagesViewController</span>
<span class="kd">class</span> <span class="kt">ChatViewController</span><span class="p">:</span> <span class="kt">JSQMessagesViewController</span> <span class="p">{</span>
<span class="k">var</span> <span class="nv">messages</span> <span class="o">=</span> <span class="p">[</span><span class="kt">JSQMessage</span><span class="p">]()</span>
<span class="k">let</span> <span class="nv">defaults</span> <span class="o">=</span> <span class="kt">UserDefaults</span><span class="o">.</span><span class="n">standard</span>
<span class="k">var</span> <span class="nv">conversation</span><span class="p">:</span> <span class="kt">Conversation</span> <span class="o">=</span> <span class="nf">makeConversation</span><span class="p">()</span> <span class="c1">// Here is where your messages are added.</span>
<span class="k">var</span> <span class="nv">incomingBubble</span><span class="p">:</span> <span class="kt">JSQMessagesBubbleImage</span><span class="o">!</span>
<span class="k">var</span> <span class="nv">outgoingBubble</span><span class="p">:</span> <span class="kt">JSQMessagesBubbleImage</span><span class="o">!</span>
<span class="k">var</span> <span class="nv">displayName</span><span class="p">:</span> <span class="kt">String</span><span class="o">!</span>
<span class="k">override</span> <span class="kd">func</span> <span class="nf">viewDidLoad</span><span class="p">()</span> <span class="p">{</span>
<span class="k">super</span><span class="o">.</span><span class="nf">viewDidLoad</span><span class="p">()</span>
<span class="n">incomingBubble</span> <span class="o">=</span> <span class="kt">JSQMessagesBubbleImageFactory</span><span class="p">()</span><span class="o">.</span><span class="nf">incomingMessagesBubbleImage</span><span class="p">(</span><span class="nv">with</span><span class="p">:</span> <span class="kt">UIColor</span><span class="o">.</span><span class="nf">jsq_messageBubbleBlue</span><span class="p">())</span>
<span class="n">outgoingBubble</span> <span class="o">=</span> <span class="kt">JSQMessagesBubbleImageFactory</span><span class="p">()</span><span class="o">.</span><span class="nf">outgoingMessagesBubbleImage</span><span class="p">(</span><span class="nv">with</span><span class="p">:</span> <span class="kt">UIColor</span><span class="o">.</span><span class="n">lightGray</span><span class="p">)</span>
<span class="n">collectionView</span><span class="p">?</span><span class="o">.</span><span class="n">collectionViewLayout</span><span class="o">.</span><span class="n">incomingAvatarViewSize</span> <span class="o">=</span> <span class="o">.</span><span class="n">zero</span>
<span class="n">collectionView</span><span class="p">?</span><span class="o">.</span><span class="n">collectionViewLayout</span><span class="o">.</span><span class="n">outgoingAvatarViewSize</span> <span class="o">=</span> <span class="o">.</span><span class="n">zero</span>
<span class="k">self</span><span class="o">.</span><span class="n">collectionView</span><span class="p">?</span><span class="o">.</span><span class="nf">reloadData</span><span class="p">()</span>
<span class="k">self</span><span class="o">.</span><span class="n">collectionView</span><span class="p">?</span><span class="o">.</span><span class="nf">layoutIfNeeded</span><span class="p">()</span>
<span class="p">}</span>
<span class="c1">// MARK: JSQMessages CollectionView DataSource</span>
<span class="k">override</span> <span class="kd">func</span> <span class="nf">senderId</span><span class="p">()</span> <span class="o">-></span> <span class="kt">String</span> <span class="p">{</span>
<span class="k">return</span> <span class="s">"1"</span>
<span class="p">}</span>
<span class="k">override</span> <span class="kd">func</span> <span class="nf">senderDisplayName</span><span class="p">()</span> <span class="o">-></span> <span class="kt">String</span> <span class="p">{</span>
<span class="k">return</span> <span class="n">displayName</span>
<span class="p">}</span>
<span class="k">override</span> <span class="kd">func</span> <span class="nf">collectionView</span><span class="p">(</span><span class="n">_</span> <span class="nv">collectionView</span><span class="p">:</span> <span class="kt">UICollectionView</span><span class="p">,</span> <span class="n">numberOfItemsInSection</span> <span class="nv">section</span><span class="p">:</span> <span class="kt">Int</span><span class="p">)</span> <span class="o">-></span> <span class="kt">Int</span> <span class="p">{</span>
<span class="k">return</span> <span class="n">messages</span><span class="o">.</span><span class="n">count</span>
<span class="p">}</span>
<span class="k">override</span> <span class="kd">func</span> <span class="nf">collectionView</span><span class="p">(</span><span class="n">_</span> <span class="nv">collectionView</span><span class="p">:</span> <span class="kt">JSQMessagesCollectionView</span><span class="p">,</span> <span class="n">messageDataForItemAt</span> <span class="nv">indexPath</span><span class="p">:</span> <span class="kt">IndexPath</span><span class="p">)</span> <span class="o">-></span> <span class="kt">JSQMessageData</span> <span class="p">{</span>
<span class="k">return</span> <span class="n">messages</span><span class="p">[</span><span class="n">indexPath</span><span class="o">.</span><span class="n">item</span><span class="p">]</span>
<span class="p">}</span>
<span class="k">override</span> <span class="kd">func</span> <span class="nf">collectionView</span><span class="p">(</span><span class="n">_</span> <span class="nv">collectionView</span><span class="p">:</span> <span class="kt">JSQMessagesCollectionView</span><span class="p">,</span> <span class="n">messageBubbleImageDataForItemAt</span> <span class="nv">indexPath</span><span class="p">:</span> <span class="kt">IndexPath</span><span class="p">)</span> <span class="o">-></span> <span class="kt">JSQMessageBubbleImageDataSource</span> <span class="p">{</span>
<span class="k">return</span> <span class="n">messages</span><span class="p">[</span><span class="n">indexPath</span><span class="o">.</span><span class="n">item</span><span class="p">]</span><span class="o">.</span><span class="n">senderId</span> <span class="o">==</span> <span class="k">self</span><span class="o">.</span><span class="nf">senderId</span><span class="p">()</span> <span class="p">?</span> <span class="nv">outgoingBubble</span> <span class="p">:</span> <span class="n">incomingBubble</span>
<span class="p">}</span>
<span class="kd">func</span> <span class="nf">makeConversation</span><span class="p">()</span> <span class="o">-></span> <span class="p">[</span><span class="kt">JSQMessages</span><span class="p">]</span> <span class="p">{</span>
<span class="c1">// This is just for demo purposes, if you add more messages to this array they will appear in your conversation feed.</span>
<span class="k">return</span> <span class="p">[</span><span class="kt">JSQMessage</span><span class="p">(</span><span class="nv">senderId</span><span class="p">:</span> <span class="s">"053496-4509-288"</span><span class="p">,</span> <span class="nv">displayName</span><span class="p">:</span> <span class="s">"Dan leonard"</span><span class="p">,</span> <span class="nv">text</span><span class="p">:</span> <span class="s">"Check out this awesome library called JSQMessagesViewController"</span><span class="p">)]</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></td></tr></tbody></table></code></pre></figure>
<p>The last function in this code snippit is not required is is just a helper to show how you can add messages to your feed.</p>
<p>That’s it 🏁, the minimum amount of code you need to get a chat feature in your own app. There are tons of things that you can do from this point but we’ll save that for another time. Don’t be afraid to explore and change things. That’s how we learn. 🖖</p>
<p>If you have any questions or critiques open an issue on GitHub for this article and Ill see what I can do to help.</p>Dan Leonardmailto:pdanielleonard+overridefunc@gmail.comI actively contribute to JSQMessagesViewController, an Open Source Project, that makes it super easy to get a “iMessages” like feature into any app. Often the first step is the hardest. Many users have different levels of experience, education and understanding and since I am a Swift Nut we’ll explore implementing it in Swift.Lessons Learned Updating to Swift 32016-10-16T22:46:28+00:002016-10-16T22:46:28+00:00https://macmedan.github.io/jekyll/update/2016/10/16/Lessons-Learned-Updating-to-Swift-3<p>Recently I have been working on a project for my kids. Of course since it was a new project I decided to do it in the newest version of Swift. I wanted to make some simple games that could help my young ones learn.
I love playgrounds and all that they enable us to do. I came across this project that <a href="https://twitter.com/uraimo">@uraimo</a> which has a running list of <a href="https://github.com/uraimo/Awesome-Swift-Playgrounds">Awesome Swift Playgrounds</a>. There is one for spriteKit, which I really wanted to make a game with but of course it was written in Swift 2.2 I was not about to let that hold me back so I went ahead and started trying to convert it to Swift 3. I went through all the changes that Xcode suggested and finally made it to a point where I had no errors. The issue was that the example did not perform the way it did previously. After going back and converting each function 1 by 1. I determined the function that was not being called.</p>
<figure class="highlight"><pre><code class="language-swift" data-lang="swift"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre><span class="kd">func</span> <span class="nf">didBeginContact</span><span class="p">(</span><span class="nv">contact</span><span class="p">:</span> <span class="kt">SKPhysicsContact</span><span class="p">)</span> <span class="p">{</span>
<span class="c1">// Executed if the ball makes contact with the block.</span>
<span class="k">if</span> <span class="n">contact</span><span class="o">.</span><span class="n">bodyA</span><span class="o">.</span><span class="n">categoryBitMask</span> <span class="o">==</span> <span class="kt">CategoryBitMask</span><span class="o">.</span><span class="kt">Ball</span> <span class="o">&&</span> <span class="n">contact</span><span class="o">.</span><span class="n">bodyB</span><span class="o">.</span><span class="n">categoryBitMask</span> <span class="o">==</span> <span class="kt">CategoryBitMask</span><span class="o">.</span><span class="kt">Block</span> <span class="p">{</span>
<span class="k">let</span> <span class="nv">block</span> <span class="o">=</span> <span class="n">contact</span><span class="o">.</span><span class="n">bodyB</span><span class="o">.</span><span class="n">node</span> <span class="k">as!</span> <span class="kt">SKSpriteNode</span>
<span class="c1">// Turn the block gray if it hasn't been hit yet.</span>
<span class="k">if</span> <span class="n">block</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s">"Block"</span> <span class="p">{</span>
<span class="n">block</span><span class="o">.</span><span class="n">color</span> <span class="o">=</span> <span class="kt">SKColor</span><span class="o">.</span><span class="n">darkGray</span>
<span class="n">block</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s">"HalfBlock"</span>
<span class="p">}</span>
<span class="c1">// Remove the block from the scene if it has already been hit.</span>
<span class="k">else</span> <span class="p">{</span>
<span class="n">block</span><span class="o">.</span><span class="nf">removeFromParent</span><span class="p">()</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></td></tr></tbody></table></code></pre></figure>
<p>Then the next step was to figure out what I am missing but when I would try and find something it was already outdated. Even Apple’s documentation was for <code class="language-plaintext highlighter-rouge">objectiveC</code>. Then it hit me that this function was not that <code class="language-plaintext highlighter-rouge">swifty</code> which is what allot of the changes for Swift 3 were all about. There is to much redundancy <code class="language-plaintext highlighter-rouge">func didBeginContact(contact: SKPhysicsContact) {</code> and therein lies the solution. See Xcode suggested to add the perimeter <code class="language-plaintext highlighter-rouge">contact:</code> and technically the method is valid so no errors were thrown. But this method is key for detecting collision between two objects and is the method that conforms to <code class="language-plaintext highlighter-rouge">SKPhysicsContactDelegate</code>.
So since swift is aiming to be super readable if you take out the brackets it should read like a sentence of sorts. “did Begin Contact contact SKPhysicsContact” is a super redundant sentence in my book. Take out the first contact and all is well. I don’t know why Xcode did not remove it when it added the parameter label like it does in many other instances but that is neither here nor there.</p>
<p>So I corrected my mistake and everything works just as it should.
Corrected Code :</p>
<figure class="highlight"><pre><code class="language-swift" data-lang="swift"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre><span class="kd">func</span> <span class="nf">didBegin</span><span class="p">(</span><span class="n">_</span> <span class="nv">contact</span><span class="p">:</span> <span class="kt">SKPhysicsContact</span><span class="p">)</span> <span class="p">{</span>
<span class="c1">// Executed if the ball makes contact with the block.</span>
<span class="k">if</span> <span class="n">contact</span><span class="o">.</span><span class="n">bodyA</span><span class="o">.</span><span class="n">categoryBitMask</span> <span class="o">==</span> <span class="kt">CategoryBitMask</span><span class="o">.</span><span class="kt">Ball</span> <span class="o">&&</span> <span class="n">contact</span><span class="o">.</span><span class="n">bodyB</span><span class="o">.</span><span class="n">categoryBitMask</span> <span class="o">==</span> <span class="kt">CategoryBitMask</span><span class="o">.</span><span class="kt">Block</span> <span class="p">{</span>
<span class="k">let</span> <span class="nv">block</span> <span class="o">=</span> <span class="n">contact</span><span class="o">.</span><span class="n">bodyB</span><span class="o">.</span><span class="n">node</span> <span class="k">as!</span> <span class="kt">SKSpriteNode</span>
<span class="c1">// Turn the block gray if it hasn't been hit yet.</span>
<span class="k">if</span> <span class="n">block</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s">"Block"</span> <span class="p">{</span>
<span class="n">block</span><span class="o">.</span><span class="n">color</span> <span class="o">=</span> <span class="kt">SKColor</span><span class="o">.</span><span class="n">darkGray</span>
<span class="n">block</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s">"HalfBlock"</span>
<span class="p">}</span>
<span class="k">else</span> <span class="p">{</span>
<span class="n">block</span><span class="o">.</span><span class="nf">removeFromParent</span><span class="p">()</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></td></tr></tbody></table></code></pre></figure>
<p>Conclusion: When updating for Swift 3 don’t trust XCode (She will lie to you). Make sure you understand what is going on with the code and check your syntax. Allot changed but I think allot has really improved with the changes.</p>
<p>Now go out there and explore, change variables and learn about <code class="language-plaintext highlighter-rouge">SpriteKit</code> more, if you would like to check out the playground you can get the <a href="https://github.com/MacMeDan/SpriteKitCollisions">updated Swift 3 version here</a></p>Dan Leonardmailto:pdanielleonard+overridefunc@gmail.comRecently I have been working on a project for my kids. Of course since it was a new project I decided to do it in the newest version of Swift. I wanted to make some simple games that could help my young ones learn. I love playgrounds and all that they enable us to do. I came across this project that @uraimo which has a running list of Awesome Swift Playgrounds. There is one for spriteKit, which I really wanted to make a game with but of course it was written in Swift 2.2 I was not about to let that hold me back so I went ahead and started trying to convert it to Swift 3. I went through all the changes that Xcode suggested and finally made it to a point where I had no errors. The issue was that the example did not perform the way it did previously. After going back and converting each function 1 by 1. I determined the function that was not being called.