Wednesday, 14 December 2016

[BONUS VIDEO] Chill Out Edit - 1000 Hours in 12 Minutes


Chill Out Edit - 1000 Hours in 12 Minutes, by Clickspring All footage sourced from the long term project "How To make a Clock In The Home Machine Shop": Part 1 - Making The Frames https://youtu.be/B8Y146v8HxE Part 2 - Machining The Pillars https://youtu.be/DoDkoioiR6w Part 3 - The Washers And Screws https://youtu.be/KXzyCM23WPI Part 4 - Cutting The Wheels https://youtu.be/ZSXDIraHz3k Part 5 - Cutting The Pinions https://youtu.be/XkJJid3_bhg Part 6 - Crossing Out The Wheels https://youtu.be/6bM3Jhy_3TU Part 7 - Making The Barrel https://youtu.be/qOHSTxxAjFs Part 8 - Making The Barrel Arbor https://youtu.be/b5KwOi-JkEU Part 9 - Chapter Ring https://youtu.be/qpy5O0b7cL8 Part 10 - Bezel https://youtu.be/K6Ai5F8O3iI Part 11 - Bezel Screws https://youtu.be/5sAw4Q1PM8Y Part 12 - Collets And Other Arbors https://youtu.be/Yt20qj1DHpc Part 13 - Planting The Train https://youtu.be/O8xIjsaDlN8 Part 14 - Barrel Click And Clickspring https://youtu.be/EUGSplH6gHM Part 15 - The Dial Assembly https://youtu.be/NExV5ZS9nss Part 16 - The Motion Work And Hands https://youtu.be/8OViP9AR2HE Part 17 - Regulator & Suspension Post https://youtu.be/2Nle33eb1Uo Part 18 - The Pendulum https://youtu.be/VlvcjrelL7I Part 19 - Making The Legs And Base https://youtu.be/w5v_wmp7_14 Part 20 - The Crutch Assembly https://youtu.be/R9m4X_R9HPs Part 21 - Mainspring And Escapement https://youtu.be/T28sGA597IE Part 22 - The Stopwork Mechanism https://youtu.be/NsnLVYwqESM Part 23 - The Key, Polishing & Assembly https://youtu.be/J3ZGlpDa-0g If you would like to help support the creation of these videos, then head on over to the Clickspring Patreon page: http://ift.tt/1MRXbd1 ________________________________________________________ A very special thank you to Patrons Dan Keen, Samuel Irons, Sean Kuyper and Mark Kobey ________________________________________________________ Ask Me A Question: http://ift.tt/1MRXbd3 Follow Clickspring: http://ift.tt/1KRx0Pf http://ift.tt/1MRX9BY http://ift.tt/1KRx0Ph http://ift.tt/1MRX9C0 http://ift.tt/1MRXbd1 Chill Out Edit - 1000 Hours in 12 Minutes, by Clickspring
Liked on YouTube: http://youtu.be/dU7iKNmQBIs

Monday, 14 November 2016

Data & Picard | Pogo


A remix of Star Trek: The Next Generation. Details below! Listen on SoundCloud: http://ift.tt/1RCARrY Temba, his arms wide! In Tamarian this signifies the giving of a gift, first heard in the excellent episode Darmok. Data & Picard is my tribute to one of the greatest TV series of all time. It is an original track featuring the voices of Captain Picard (Patrick Stewart) and Commander Data (Brent Spiner), accompanied by a music video I shot entirely in my living room with a green screen and lights. The track opens with the Klingon Victory Song, followed by a remix of Data singing Che Gelida Manina in the episode 'In Theory'. This episode was the first ever to be directed by Patrick Stewart and I didn't realize this until after the track was finished. I sourced the Ben Nye makeup that was used to turn Spiner into Data, and a replica of the iconic Star Fleet uniform. Unfortunately I couldn't get the contact lenses in and I could only get the uniform in red, so I spent a huge amount of time changing the colour of my eyes and uniform in post. The video was shot in Slog 4k ProRes HQ using a Sony A7SII and an Atomos Ninja Flame. Lights included 3x Arri 800w Tungstens, 2x Socanland LED banks to light the screen, and one 2000w Blonde to simulate sunlight. BIG thanks to the guys at HD Rentals in Perth for helping me out. http://ift.tt/2ee55CP Thanks to everybody for their amazing support!
Liked on YouTube: http://youtu.be/bl5TUw7sUBs

Tuesday, 11 October 2016

The Art of Making a Nixie Tube


The nixie tube is a vintage display device which had been used until 70s when it was replaced with LED displays. The complex knowledge of manufacture of nixie tubes literally died with tube factory's engineers, glassblowers and machine operators. I discovered nixie tubes in 2011 and since then, I've devoted all my time to studies of nixie tubes and its manufacturing processes. After years of intensive work, with help of many people, I eventually succeeded and have revived the knowledge and equipment for production of nixie tubes. Dalibor Farny Subscribe: http://ift.tt/2cLEfmV Read more on: Our website: http://ift.tt/1HKXYag Facebook page: http://ift.tt/2cLEZZ5 Thank you for attention!
Liked on YouTube: http://youtu.be/wxL4ElboiuA

Saturday, 17 September 2016

Modern day explorer?

In a recent podcast, Brady Haran of the fantastic 'Hello Internet', described an 'Explorer' as someone who, "travelled to a place, with no external help, and with little idea about what would be there when they arrived". This reminded me of the scariest thing that ever happened to me.




In the summer of 2001, I found myself in a really flexible job, and a great pal of mine had somehow gained access to a luxury speedboat. We took to taking trips down to Southampton on still and bright days, and spent them: on the water, roaming the streets of Cowes and exploring the coastline. One particularly hot day while anchored just off the Isle of Wight, we decided to take a swim in the sea. There was a buoy on the horizon which seamed to be a good target. After an idle swim for maybe half-an-hour we realise the buoy was not getting any bigger. My buddy was a better swimmer than me, but neither of us could be described as anything other than mediocre. After another ten minuets or more of focused swimming, we realise that it's just not getting any bigger at all, and decide to turn back.
It's at this point, with horror, we discover our great mistake. For the past forty minuets we'd been swimming, what turned out to be, out to sea - with the tide! We could no longer see the boat, but more worryingly than that, we couldn't even see the island or mainland. We were lost, lost at sea!






What could we do but pick a direction and start a swim back? Swimming towards nothing, with no real sense of direction, I can quite honestly say was the scariest moment of my life. It wasn't long, swimming against the tide, before I started to tire and my buddy had to keep hanging back, else we'd get separated. After a frantic swim for what seamed like way more than 3/4 hour, with no sight of land, I'm sure we stopped to discuss options, but don't ask me what we talked about, or even decided for that matter. Pressing on and after who knows how long, we finally caught sight of the island. Shortly after, I was more relieved than you know to find the boat.

Exhausted, freezing cold (for a hot sunny day), and hungry, I remember being so happy to just lay still on the foredeck of the boat. After recovering we drove towards the buoy. It turned out to in fact be an oil rig moored off shore. (The time comes to mind when Father Ted tried to explain the difference between 'small' and 'far away' to Dougal.)


So, does this count as being a true adventurer, or just a tad foolish? Perhaps it's both?


Tuesday, 23 August 2016

First Project On The Waxwing Spartan 6 FPGA Dev Board

This is a story about doing the obvious things first, and in the process defining a 'golden rule' of debugging hardware.

With the tool chain sorted out I'm clear to start designing configurations for my new Waxwing Spartan 6 FPGA development board. I think that it may be a good idea to start with something simple, and possibly useful, before jumping into some of the more complex peripherals. So first up is the on-board LCD. This way, in later projects, we can give ourselves a fighting chance at debugging our designs, when things don't go to plan.

The on-board LCD is a standard 16x2 HD44780 setup, in a 4 bit configuration, which has a pretty simple protocol. The only slight concern of this is the 4 bit interface, where we have to write the high nibble first, followed by the lower nibble. 

With almost zero thought I decide to use one of the off-the-shelf 'cores' that will bit-bang the initialisation and display data for us. I'm a big believer of reusing code, and seriously what's the point in writing this when there is almost zero scope to change what other people have done before. So, a tiny amount of searching leads me to stachelsau's LCD controller core, a nicely isolated routine that will take a simple signal containing the data we want to display, and just do everything for us. 



'Trying is the first step towards failure'
An update of the clock period and the constraints file to direct signals to the on-baord LCD, and everything feels like childs play. Synthesising the design and programming the FPGA and ...... ohhhh ..... nothing,  a blank LCD. 

OK, this is no problem, obviously I've:
  1. Specified the wrong output or clock constraints; no, they look fine.
  2. Is the LCD contrast turned all the way down; no, tweaking it makes no difference.
  3. Does the unit have power; yup, the LCD backlight is working fine.
  4. Is the configuration actually running (did I program correctly); a quick update to also flash a LED on the board works as expected.
So, not so simple after all. My list of 'traps for young-players' exhausted, it's time to break out some more serious assumptions, and test them.
  1. Maybe the LCD is duff
  2. Maybe the FPGA pins or traces (that lead to the LCD) are busted
  3. Maybe the design and/or core is not doing what I expected it to.
So, to discount #1, the on-board LCD is broken, we can re-direct the LCD control pins out to external headers and plug in an off-board LCD module. A few mins later and a nest of wires on the bench I have a similarly non working LCD. checking the possible problems we see that 1 and 2 have been (most likely) discounted. So sigh, its probably something to do with the core or design. 

This really is the fun bit, but is slightly earlier than I was expecting. So, what can we do here? Well, some people like to use simulation (I'd prefer to leave that to the testing, rather than use it as a debugging tool). Some people use a series of flashing LEDs. I find that works well when you have a slow and isolated area that you want feedback on, but not so great for seeing what's happening at a system level. I think what we need hear is a logic analyser. With a growing nest of wires on the bench, things take an awkward turn. The waveforms look exactly how I would expect!

Well, this could mean only one thing - that the LCD on the board is bust and I've not connected power to the off board LCD correctly. I break out the multimeter and check the break-out 5v power pins.... 3.5v! What? A check of the main board 5v rail also shows 3.5v. It's 3.5v everywhere. The board is powered by USB which I'm sure is 5v so, what gives. Tracing things round it looks like the guys at Numato directed both the USB power in, and the 7-15v power jack in, into the same 5v regulator, meaning that if you power the board using USB, the 5v will always be low because of the regulator drop-out. What the ****?

With the 5v line being low, it was enough to power the FPGA and LCD backlight, but not enough for the LCD controller. Switching over to power the board from an external 9v supply and..... presto, everything works as I'd expect.

And, here we have our golden rule : To quote a great man, Dave Jones of the EEVBlog, "When debugging hardware, thou shalt always check voltages".

The astute of you will notice that I had and passed right by the solution very early on. Point 3 of the original checklist "Does the unit have power; yup, the LCD backlight is working fine.". Note to self, a LED on does not mean we have the right voltage. D'oh!

Sunday, 31 July 2016

Saturday, 30 July 2016

Sandcastle


We were at the Oregon coast for the past week, and I made a quick video of making a sandcastle. The beach is just south of Newport Oregon Frank Howarth - Father, husband, and interested in architecture at a small scale expressed through woodworking and film making. To see upcoming projects follow me on social media Instagram http://ift.tt/1julO5k Twitter https://twitter.com/FrankHowarth Facebook http://ift.tt/1julO5j G+ http://ift.tt/1m7N9v2
Liked on YouTube: http://youtu.be/WBdH7jrMsRU

Wednesday, 22 June 2016

Wintergatan - Marble Machine (music instrument using 2000 marbles)


Get the audio track "Marble Machine" by Wintergatan: http://ift.tt/1YkdbZp Marble Machine built and composed by Martin Molin Video filmed and edited by Hannes Knutsson Costume designed by Angelique Nagtegaal See Sommarfågel music video by Wintergatan: https://youtu.be/SBK2AF-NdVA See Starmachine2000 music video by Wintergatan: https://youtu.be/rEeiRXOlWUE Swedish band Wintergatan will play live concerts starting from summer 2016. For booking inquiries email: jesper.kumberg@gmail.com For Press Related Questions email Elaine & Emma: elaine@makewaveproductions.com emma@makewaveproductions.com Wintergatan website: www.wintergatan.net -ウィンターガタン、ニューアルバム「ウィンターガタン」発売中! 日本版は豪華DVD付き! http://ift.tt/1PghWMD Hannes Knutssons Youtube Channel: https://www.youtube.com/user/lefvandebilder Special thanks to Marcus Dimbodius who has been around throughout the whole build and suggested the cymbal placement and the use of the conveyer belt for the marble transportation. Dimbodius is an artist from Gothenburg: https://www.youtube.com/user/dimbodius
Liked on YouTube: http://youtu.be/IvUU8joBb1Q

Friday, 17 June 2016

OK Go - Upside Down & Inside Out


'Hungry Ghosts' available on iTunes - http://ift.tt/1ti5OUZ Directed by Damian Kulash, Jr. & Trish Sie Produced by John O’Grady & Melissa Murphy for BOB Industries. Line Producer: Vladimir Sigalov for Profilms Director of Photography: Evgeniy Ermolenko First Assistant Director: Andrey Tomashevskiy Second Assistant Director: Anastasiya Chistova S7 Air Hostesses/Acrobats: Anastasia Burdina Tatyana Martynova with Special Thanks to ProFilms Russia
Liked on YouTube: http://youtu.be/LWGJA9i18Co

Wednesday, 15 June 2016

Guest suggestion : Michael Field

Originally posted from Michael Field ‏(@field_hamster on Twitter) is a well know FPGA hobbyist. http://ift.tt/1PtE4Vy I think he could make an interesting guest for the show? via /r/TheAmpHour http://ift.tt/1PtEICx
Michael Field ‏(@field_hamster on Twitter) is a well know FPGA hobbyist. http://ift.tt/1PtE4Vy I think he could make an interesting guest for the show?

Tuesday, 14 June 2016

The Worst-Designed Thing You've Never Noticed | Roman Mars | TED Talks


Roman Mars is obsessed with flags — and after you watch this talk, you might be, too. These ubiquitous symbols of civic pride are often designed, well, pretty terribly. But they don't have to be. In this surprising and hilarious talk about vexillology — the study of flags — Mars reveals the five basic principles of flag design and shows why he believes they can be applied to just about anything. TEDTalks is a daily video podcast of the best talks and performances from the TED Conference, where the world's leading thinkers and doers give the talk of their lives in 18 minutes (or less). Look for talks on Technology, Entertainment and Design -- plus science, business, global issues, the arts and much more. Find closed captions and translated subtitles in many languages at http://ift.tt/1AZaYGq Follow TED news on Twitter: http://www.twitter.com/tednews Like TED on Facebook: http://ift.tt/AaF5HI Subscribe to our channel: http://www.youtube.com/user/TEDtalksDirector
Liked on YouTube: http://youtu.be/pnv5iKB2hl4

Sunday, 12 June 2016

How to begin contributing in Open Source projects?


Originally posted from Where a beginner can start contributing on Open Source projects? Github? Or there's something else? via /r/AskProgramming https://www.reddit.com/r/AskProgramming/comments/4nj1ge/how_to_begin_contributing_in_open_source_projects/
Where a beginner can start contributing on Open Source projects? Github? Or there's something else?

Answer

First off stick with projects that you're passionate about, or at least use regularly.
  • Get involved in the open, ongoing and public discussions about the project. Help other users of the project, and generally talk about the project when ever you can.
  • When you have something to say, raise polite bugs, issue of other suggestions.
  • It you can create patches or merge request for these things.
  • User the tools (github, sf, etc...) and contribution guidelines outlined by the project.
  • Don't be discouraged if these efforts don't get accepted or receive much traction. It's possible the project owner is trying to move in some other direction.
  • Once you have some confidence, you can submit patches/ merge requests for current bugs, or even your own feature requests.
If your at this point, your already a contributor, and I'd argue a senior member of the project. Good luck. 

Saturday, 4 June 2016

Starting out with a Waxwing Spartan 6 FPGA dev board

Up until now, I've been cutting my FPGA teeth on a miniSpartan6+ dev board from Scarab, but have wanted to get into communicating with my projects over a network and/or PCIe. After looking around for options, I came across the Numato Waxwing Spartan 6 FPGA development board. 

Amazingly, this board has a ton a feature including a LX45; loads of on-board LPDDR & flash memory; an LCD, HDMI, VGA, SD card slot, lots of audio capabilities, tones of GPIO, and an onboard 10/100 Ethernet interface - winner.

After a rash purchase and quick delivery from India, it's been lying neglected for a few months. So I thought it was time to see what it could do (or rather what I could do with it). Ok, first up, a simple led binary counter to check the tool chain.

Dusting off the led_test project for the miniSpartan6+ (based on the field hamster project), updating the target and constraints file with info from the datasheet, I soon have a .bit file.

Here starts the problems. With the miniSpartan6+, I've been using "xc3sprog" to communicate with the dev board via USB. Unfortunately I've not been able to get xc3sprog to connect to the FTDI 2232 chip, despite various driver updates and general mucking about (in which I managed to overwrite the FTDI config).

The manufacturer does provides a flashing utility, but only for Windows :facepalm: well, you know what they say, "fail fast, fail early".

In the end I abandoned attempting to programme via the USB chip and turned attention to the JTAG interface. As I don't have a dedicated JTAG programmer, the ever useful BusPirate partner with openOCD seems an ideal solution. Again, things aren't as simple as they should be. OpenOCD doesn't have configuration for the Waxwing or even an LX45, and with many hours of trying various parameters and options, I could not see the target device. Fail.!

I'm not one for giving up so easy, and I'm old enough now to consider throwing money at a problem. So a flash of the credit card later, I'm the proud owner of a Xilinx Platform Cable JTAG programmer. And, what do you know, the right tool (ISE -> iMPACT -> Platform Cable -> JTAG) for the job makes a real difference. Within 15 mins I now have a design successfully programmed. It kinda takes the fun out of it :).

Anway, with the toolchain sorted out, time for a project to stretch the boards abilities.

Sunday, 29 May 2016

What's the point in answering questions on StackExchange?


Originally posted from https://redd.it/4lleac via /r/programming http://ift.tt/1qV23GR https://redd.it/4lleac

Saturday, 28 May 2016

Eclipse View from a plane


Originally posted from http://ift.tt/1dvYd0x via /r/Damnthatsinteresting http://ift.tt/1WsbKdy http://ift.tt/1dvYd0x

Wednesday, 25 May 2016

What is a offset in a binary file header in c?


Question posted on stackexchange:
http://stackoverflow.com/questions/37400392/what-is-a-offset-in-a-binary-file-header-in-c/37400667#37400667


Question


I am reading in a binary file which has a fileheader, and then different sections of information, each of those sections also has a section header. First I read the file header, and in the header it has something called a section offset, which says "the offset of the section header table".
This is probably a pretty simple question but what does offset mean?

Answer

Basically it's the n number of bytes from one place to some other place in the file.
This could actually mean different things for different file formats:
Eg, the offset of the data after the beginning of the section header, Or, the offset from of that section from the beginning of the file, Etc...etc....
You're going to have to check the spec for the file format that you're using.

Tuesday, 24 May 2016

How Long To Fall Through The Earth?


Thanks to Audible.com for supporting this video: http://ift.tt/1bipFvv Original video collaboration with Vsauce: https://www.youtube.com/watch?v=jN-FfJKgis8 Thanks to everyone who supports MinutePhysics on Patreon! http://ift.tt/1pJQhzm Link to Patreon supporters here: http://ift.tt/1Qg9p23 Music by Nathaniel Schroeder, http://ift.tt/VoBoRB REFERENCES Gravity & Spherical Shells: http://ift.tt/1XMHOZ5 More Shell Theorem: http://ift.tt/1mH3voC Density inside the earth (Preliminary Reference Earth Model): http://ift.tt/1XMI2zq Gravitational acceleration inside the earth: http://ift.tt/1U8VEC6 MinutePhysics is on Google+ - http://bit.ly/qzEwc6 And facebook - http://ift.tt/r3NJ0W And twitter - @minutephysics Minute Physics provides an energetic and entertaining view of old and new problems in physics -- all in a minute! Created by Henry Reich
Liked on YouTube: http://youtu.be/urQCmMiHKQk

Saturday, 21 May 2016

Why do most payment gateways use synchronous integration?

Question posted on stackexchange:
http://programmers.stackexchange.com/questions/319080/why-do-most-payment-gateways-use-synchronous-integration/319083#319083



Question:

This question comes to my mind having just lost some money while ordering Pizza. Most internet merchants (atleast in India) use synchronous page redirection for integration with Banks and payment gateways. 
It works like this: when you visit a merchant site and checkout something it redirects you to the payment gateway passing along request as arguments in a POST or GET request, which redirects you to the bank, which redirects you to verified by Visa and then redirections all the way back. 
The problem is that often the redirection would fail or break due to a network error, slow connection, domain blocked by company firewall etc and the payment would get lost.
Off the top of my head, such integrations would be much better handled using an asynchronous MOM provider. Example: the merchant places a payment request message signed with his private key on Bank's MOM queue and asks the user to authorize the payment with his bank. The user opens Bank's mobile app or website and sees the request in list of pending payment requests. Once authorized the Bank places a message back on Merchant's MOM queue and all is done. 
From my primitive google-fu it seems not many payment gateways are providing asynchronous integration. 
Am I missing a web design principal here or is just mass incompetence? Why don't more gateways use an asynchronous approach?

Answer:


The sort answer is 'history'. 
If you go back even just 10 years, banks only did payments at physical devices, terminals. Where you would have one terminal id per payment device. All transactions needed to supply this terminal id. Obviously, you couldn't leave the shop with your goods until you had successfully paid. Hence the synchronous nature of payments. The key thing here is a merchant can only use one terminal id at a time. 
Then the internet came along and merchant said "why can we not just do payments online?". So, the banks said, OK, send along everything you normally would, just flagged slightly differently (so we can charge you more). This bank message includes the terminal id. Therefore internet transactions inherited the synchronous nature of card present transactions. 
Then add on top fraud protection devices such as 3DS and CV2AVS, and changing becomes really difficult for the poor old banks. 
You will find newer banks will implement asynchronous payment methods which 'may' be a better model. But then you'll be fighting with two forces. 
  • Merchants saying, why do I have to change my payment model when moving from 'old bank' to 'cool bank'.
  • Customers saying "I've bought a pizza, but I'm scared because it did something I wasn't expecting and I don't know if I paid".
You cannot underestimate either of these effects. We're therefore left with majority of synchronous payment models throughout the internet. 
Don't jump straight on the ''incompetent'' camp, since it much easier to design how a perfect world would work when we don't have a real world to deal with. 
Hope this helps.

Wednesday, 18 May 2016

This is a Vlog: Stop Doing Things You Hate


Stop doing things you hate. Find your path and do what you want to do in life. Subscribe to my channel: http://bit.ly/1XTHlSF Support me on Patreon and get the full vlog, enter the give-a-ways, get behind the scenes access and early viewing to project videos: http://ift.tt/1csUWhL Get my book on Amazon: http://amzn.to/1NxeiED PROJECTS, PLANS AND TUTORIALS http://ift.tt/1RrsVsi Learn more about my shop and the tools I use: https://goo.gl/KaDZ10 Want to help support MAKE SOMETHING? Get early viewing, a weekly exclusive vlog and more... http://ift.tt/1Rz7Zwj SHIRTS, STICKERS, PLANS AND MORE! http://ift.tt/1RrsUEK FOLLOW: https://twitter.com/drunkenwood http://ift.tt/1Rz7Ys8 http://ift.tt/1YVDPcB http://ift.tt/1ZS3Cls David Picciuto PO Box 2499 Toledo, OH 43606 © Picciuto, LTD
Liked on YouTube: http://youtu.be/BicvXT2eGMk

Question : Unit testing C code?


Question posted on stackexchange:
http://programmers.stackexchange.com/questions/317326/unit-testing-c-code/318686#318686


I learnt about the check testing framework today that seems good. This far I've scripted tests that uses valgrind so that the tests both display output from the tests and from valgrind. Is there a disadvantage in using many test frameworks like valgrind testing for internal memory management, check testing for unit tests and scripts for integration and regression tests? I didn't begin yet writing tests with check and if you know a good/"better" framework for testing C code then please let me know.
This is how my test looks like so far, a script that tests my command-line program including output from valgrind.
If I already can do this with a script, will I even need the check testing framework?
#!/bin/shecho "-- Testing our implementation of OpenShell --"echo ""echo "- If you have any problem in passing a test read the corresponding"echo "- source file to understand what the test is checking"echo ""printf "********************* PRESS ENTER TO RUN TESTS ... "read _ printf "********************* TEST WILDCARDS by listing all files in your home directory... "read _valgrind ./shell << EOF ls
ls -al *.*EOFprintf "********************* TEST ALGORITHMS ... "read _echo "top -b -n1|head -8|tail -1" | ./shell printf
printf "********************* TEST ALGORITHMS Part II. ... "read _valgrind ./shell << EOF whowho|awk '{print \$4 ; print \$3}'|sort -n|wc -l EOF printf
EOF printf "********************* TEST CHECKENV. ... "read _valgrind ./shell << EOF checkenv EOF printf
checkenvEOFprintf "********************* TEST DONE. YOU SHOULD SEE OUTPUT FROM TEST ABOVE ... "read _
Test Output 
$ ./RUN_TESTS
-- Testing our implementation of OpenShell -- - If you have any problem in passing a test read the corresponding
- source file to understand what the test is checking
********************* PRESS ENTER TO RUN TESTS ... ********************* TEST WILDCARDS by listing all files in your home directory... ==20256== Memcheck, a memory error detector
==20256== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.==20256== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==20256== Command: ./shell
==20256== 'PATH' is set to /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin.stdin is a file or a pipe p[0][0] ls pp[0][1] -al pp[0][2] .git pp[0][3] .gitignore pp[0][4] .idea pp[0][5] CMakeLists.txt pp[0][6] CommandEntry.h pp[0][7] README.md pp[0][8] a.out pp[0][9] code.txt pp[0][10] code.txt.tar.gz pp[0][11] do.h pp[0][12] errors.c pp[0][13] errors.h pp[0][14] foo.txt pp[0][15] git.version pp[0][16] main.c pp[0][17] main.o pp[0][18] openshell-0.16430.tar.gz pp[0][19] openshell.h pp[0][20] username.txt pp[0][21] util.c
-rwxrwxr-x 1 dac dac 8584 maj 2 02:02 a.out
-rw-rw-r-- 1 dac dac 465 apr 30 04:58 CMakeLists.txt
-rw-rw-r-- 1 dac dac 50798 maj 1 15:03 code.txt
-rw-rw-r-- 1 dac dac 13206 maj 1 15:03 code.txt.tar.gz
-rw-rw-r-- 1 dac dac 339 apr 30 05:21 CommandEntry.h
-rw-rw-r-- 1 dac dac 362 apr 30 05:21 do.h
-rw-rw-r-- 1 dac dac 1160 maj 2 10:41 errors.c
-rw-rw-r-- 1 dac dac 372 maj 2 10:42 errors.h
-rw-rw-r-- 1 dac dac 0 apr 27 07:44 foo.txt
-rw-rw-r-- 1 dac dac 244 apr 21 09:09 .gitignore
-rw-rw-r-- 1 dac dac 14 apr 23 19:15 git.version
-rw-rw-r-- 1 dac dac 17407 maj 2 11:15 main.c
-rw-rw-r-- 1 dac dac 89472 maj 2 11:16 main.o
-rw-rw-r-- 1 dac dac 12869 apr 30 11:37 openshell-0.16430.tar.gz
-rw-rw-r-- 1 dac dac 1765 maj 2 11:16 openshell.h
-rw-rw-r-- 1 dac dac 1167 maj 1 12:04 README.md
-rw-rw-r-- 1 dac dac 1976 maj 2 11:16 username.txt
-rw-rw-r-- 1 dac dac 32117 maj 2 09:43 util.c
.git:total 64drwxrwxr-x 8 dac dac 4096 maj 2 11:37 .drwxrwxr-x 5 dac dac 4096 maj 2 11:37 ..drwxrwxr-x 2 dac dac 4096 apr 21 09:09 branches
-rw-rw-r-- 1 dac dac 6 maj 2 10:42 COMMIT_EDITMSG
-rw-rw-r-- 1 dac dac 264 apr 21 09:09 config
-rw-rw-r-- 1 dac dac 73 apr 21 09:09 description
-rw-rw-r-- 1 dac dac 97 maj 1 12:04 FETCH_HEAD
-rw-rw-r-- 1 dac dac 23 apr 21 09:09 HEAD drwxrwxrdrwxrwxr-x 2 dac dac 4096 apr 21 09:09 hooks
-rw-rw-r-- 1 dac dac 1034 maj 2 10:42 index drwxrwxrdrwxrwxr-x 2 dac dac 4096 apr 21 09:09 info drwxrwxrdrwxrwxr-x 3 dac dac 4096 apr 21 09:09 logs drwxrwxrdrwxrwxr-x 235 dac dac 4096 maj 2 10:42 objects
-rw-rw-r-- 1 dac dac 41 maj 1 12:04 ORIG_HEAD
-rw-rw-r-- 1 dac dac 107 apr 21 09:09 packed-refs drwxrwxrdrwxrwxr-x 5 dac dac 4096 apr 21 14:49 refs
.idea:total 84drwxrwxr-x 2 dac dac 4096 maj 2 11:37 .drwxrwxr-x 5 dac dac 4096 maj 2 11:37 ..-rw-rw-r-- 1 dac dac 732 maj 1 22:50 misc.xml
-rw-rw-r-- 1 dac dac 270 maj 1 22:50 modules.xml
-rw-rw-r-- 1 dac dac 1335 maj 1 22:50 openshell.iml
-rw-rw-r-- 1 dac dac 180 apr 21 09:10 vcs.xml
-rw-rw-r-- 1 dac dac 58649 maj 2 11:37 workspace.xml
==20256== ==20256== HEAP SUMMARY:==20256== in use at exit: 140,264 bytes in 275 blocks
==20256== total heap usage: 346 allocs, 71 frees, 191,821 bytes allocated
==20256== ==20256== LEAK SUMMARY:==20256== definitely lost: 242 bytes in 24 blocks
==20256== indirectly lost: 11 bytes in 1 blocks
==20256== possibly lost: 11 bytes in 1 blocks
==20256== still reachable: 140,000 bytes in 249 blocks
==20256== suppressed: 0 bytes in 0 blocks
==20256== Rerun with --leak-check=full to see details of leaked memory
==20256== ==20256== For counts of detected and suppressed errors, rerun with: -v
==20256== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)********************* TEST ALGORITHMS ... 'PATH' is set to /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin.stdin is a file or a pipe {top} {-b} {-n1} {|} {head} {-8} {|} {tail} {-1} {|}p[0][0] top pp[0][1] -b pp[0][2] -n1 pp[1][0] head pp[1][1] -8p[2][0] tail pp[2][1] -1[20261] [20262] 3093 dac 20 0 6241068 1,491g 38248 S 13,3 9,6 244:10.93 java
********************* TEST ALGORITHMS Part II. ... ==20274== Memcheck, a memory error detector
==20274== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.==20274== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info ==20274== Command: ./shell
==20274== 'PATH' is set to /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin.stdin is a file or a pipe {who} {|} {awk} {{print $4 ; print $3}} {|} {sort} {-n} {|} {wc} {-l} {|}p[0][0] who pp[1][0] awk pp[1][1] {print $4 ; print $3}p[2][0] sort pp[2][1] -n pp[3][0] wc pp[3][1] -l
[20276] [20277][20278]2==20274== ==20274== HEAP SUMMARY:==20274== in use at exit: 131,709 bytes in 274 blocks
==20274== total heap usage: 349 allocs, 75 frees, 150,591 bytes allocated
==20274== ==20274== LEAK SUMMARY:==20274== definitely lost: 490 bytes in 46 blocks
==20274== indirectly lost: 0 bytes in 0 blocks
==20274== possibly lost: 0 bytes in 0 blocks
==20274== still reachable: 131,219 bytes in 228 blocks
==20274== suppressed: 0 bytes in 0 blocks
==20274== Rerun with --leak-check=full to see details of leaked memory
==20274== ==20274== For counts of detected and suppressed errors, rerun with: -v
==20274== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)********************* TEST CHECKENV. ... ==20282== Memcheck, a memory error detector
==20282== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.==20282== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info ==20282== Command: ./shell
==20282== 'PATH' is set to /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin.stdin is a file or a pipe [20284][20285]==20282== ==20282== HEAP SUMMARY:==20282== in use at exit: 131,301 bytes in 231 blocks
==20282== total heap usage: 305 allocs, 74 frees, 150,103 bytes allocated
==20282== ==20282== LEAK SUMMARY:==20282== definitely lost: 11 bytes in 2 blocks
==20282== indirectly lost: 0 bytes in 0 blocks
==20282== possibly lost: 99 bytes in 1 blocks
==20282== still reachable: 131,191 bytes in 228 blocks
==20282== suppressed: 0 bytes in 0 blocks
==20282== Rerun with --leak-check=full to see details of leaked memory
==20282== ==20282== For counts of detected and suppressed errors, rerun with: -v
==20282== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)********************* TEST DONE. YOU SHOULD SEE OUTPUT FROM TEST ABOVE ...

Answer:

Your certainly on the right track. For my projects I use:
"check" to unit test all method (including as many code paths as I can - have time for). This runs super fast and gives me confidence that the parts of my application are doing what I expect.
"Valgrind" to check the memory usage of the final application while running system/regression tests. This is really really slow, but give me confidence that my application has the desired functionality and the interactions between the methods that make up the application are not causing any unforeseen memory management issues.
So, my advice - do both. Good luck.