Category Archives: Tutorial

‘Mastering’ inkscape for makers …

Things you should know. These are a few tips I’ve learnt from the last twelve months of using inkscape on a daily basis. Practically every piece of art work I process using open source / free software. Mainly Inkscape, sometimes GIMP, sometimes Scribus and laugh all you like mspaint.exe, useful when I quickly need to crop or annotate an image.

Before you rage quit my article and storm off muttering under your breath ‘what a newb! WTF is he going on about.’ … well I started out using Hardvard Graphics in dos and Deluxe Paint on the Amiga, when I upgraded to windows (3.0/3.11) I moved to Corel graphics v3.0 for scanning, tracing images and compositing etc. (I can still to this day remember the evening I got the disk, bought an official copy second hand. This was before the age of CD writers and copied CDs weren’t easily available, this came with all the official documentation, manuals and the clip art book!!) Mid-nineties I took a bespoke course taught at local university on web design (the first of its kind in the country.) which was really what started my interest in design work, the internet and programming, the lecturer introduced me to Macromedia (awesome company that Adobe practically consumed and now lives off its glory, not to mention they absolutely ruined the nice simple / low overhead / easily navigable interface.) So I spent many years working with Macromedia products, Dreamweaver, Fireworks, Flash and Director. I’ve worked extensively with 3D Studio Max, Maya, Truespace and still use Blender (but not as much as I should do.) Had a brief experience with Solidworks, spent many hours using Autocad making files for water jet cutting. Down to specialist bespoke product design software, aimed at manufacture (I’ll post a link later the name escapes me at the moment). I’ve also a degree in design and applied arts, spent over 20 years in the IT / digital graphics world and the last five years of my working life programming robots. Right less about me waffling on about old software, I’ve used a lot of packages, you might notice I’ve neglected one, yes I have used Photoshop for many projects / years, at one point it was my go to design program (probably around version 6) especially useful for digital composition and photo manipulation, but, I’m going to say it, bloated to hell and the most over-rated design tool out there. If Oracle made design software it would probably be called Photoshop. I’ll save that for another post. The above is merely scraping the surface.

So now you have a little background on some of my software experience, I hope you might listen a little more intently. Inkscape is a fantastic tool. Firstly it’s 100% free. (Really dude you’re starting here … YUP) This is for makers. Makers are usually on tight budgets / constraints so its important to consider this. 100% free no cost, no subscription, no hidden code, no shady CEO milking your bank account. All updates 100% free. Available 100% of the time to run on older hardware than the kind of pc you need to handle the amount of bloat that Photoshop / Illustrator rolls with. Inkscape takes up less resources and memory than most design packages / ‘solutions’. Means you can do more faster with older hardware. (I promise that’s my last dig at Adobe.)

Inkscape is also cross platform, meaning it really doesn’t matter what hardware you’re running it on you’re always presented with a familiar interface. Which is really handy if you’re a maker, you might require a specific vector file format for a project on a linux / windows / osx box, Inkscape is only one trusted download away. No cracks, keygens, viruses / malware. If you’re really paranoid you can build from source or checksum the download.

The program itself is open source but also allows users to independently develop plugins via a well documented API. Python the language of the maker, free, open source and right now, there’s an incredible amount of python development going on, meaning modules plugins and code is pretty much readily available all over the web. Inkscape also supports Perl, the language of the internet and regular expressions. Advanced programmers are encouraged to implement their plugins natively in c++. If there’s some kind of graphical automation you require its likely Inkscape will be able to provide or give you the grounds to develop your own solution.
Click here to learn how to create your own plugins.more about pythonmore about perl,

Existing plugins? Yes there’s a lot, because there’s already a large user base for the package. Many that help extend the programs functionality from simply a graphics program to a production tool or service. Examples? One that immediately springs to mind is the laser cut tabbed box designer plugin. Not only useful for producing your own tabbed boxes but these boxes are extremely popular on auction sites. Makers and crafts people are buying them by the bucket full for their own projects. A few clicks and numbers to set the dimensions and amount of compartments you require, something that would manually take quite a while to produce. There are plugin’s for HPGL plotters, 3D printers, gcode senders, jigsaw creators, all great plugins for makers.
Click here to browse the full list of plugins on the inkscape site.

I’ve talked about how great the software is and the plugins but you came here for useful tips.

Continue reading

Uncovering the biggest scam in modern history … printer cartridges.

I’d never really paid much attention to printing or print materials till early this year, never had a need to print much out. Since starting out with the plotter I get some requests, a lot of which I have to turn down for labels and printed contour cut stickers, which is really annoying. The entry level for UV / solvent based printers is still rather high, a basic printer will set you back anything from £3k to around £5k depending if you just require a solvent printer or one with a contour cutting head. The latest and greatest roland cutter/printer could set you back as much as £24-28k. Maybe I’m understating what these machines are capable of ie. the above machine will print photo quality 6ft+ wide and has an incorporated cutting head for printing and cutting stickers options include take up rollers on the front of the machine etc. absolutely amazing machines but way out of my price range.

Saving my pennies till I can afford a decent solvent printer cutter combo. (Yes im aware there are some workarounds, but the longevity of inkjet printing and water proofing / UV protecting the stickers is rather and involved process something I could mitigate all together with a better printer, unfortunately the solvent inks are far to aggressive to attempt modifying an existing inkjet.)

I had a few old inkjet printers knocking about so thought I’d attempt restoring them to working order whilst having a play around with inks and refilling the old cartridges. Simple, obviously I just put more ink in the cartridges and place them back in the printer and continue to print putting some old hardware to good use.

Well that’s how I thought it worked. NOPE.

Continue reading

The &%$%ing laser cutter …

Yup, I bought a cheap Chinese laser cutter, not a CO2 one but a diode based banggood/A3 clone (5.5 watts 50x60cm bed). It seemed like such a good idea at the time. I couldn’t sleep knowing I’d finally got my hands on something I could use to create physical objects from work on the computer. I could use the laser cutter to build a simple CNC machine and expand my range of products. We’ll that’s what I thought.

Continue reading

Hakology – How to grab openweathermap data using python.

I’ve been playing with the openweathermap api thought i’d share a little code, the following pulls the json and constructs a string containing the location, temp, tax temp, min temp and humidity. You will need to sign up for an API key and free user account 1st. The free account at the time of writing this allows 50k calls a day so if you’re writing for a small personal project 50k calls should be fine.

Copy the code below to a file
eg. displayweather.py

chmod the file if needed …
sudo chmod +x displayweather.py

run the file using …
python displayweather.py

import requests
r = requests.get('http://api.openweathermap.org/data/2.5/forecast/city?id=YOURCITYIDGOESHERE&APPID=YOURAPIKEYGOESHERE')
data = r.json()
mystring = ""
mystring = mystring + data['city']['name'] + " "
mystring = mystring + "Temp:" + str(int(data['list'][0]['main']['temp'] - 273.15)) + "C "
mystring = mystring + "Max:" + str(int(data['list'][0]['main']['temp_max'] - 273.15)) + "C "
mystring = mystring + "Min:" + str(int(data['list'][0]['main']['temp_min'] - 273.15)) + "C "
mystring = mystring + "Hum:" + str(data['list'][0]['main']['humidity']) + "% "
print mystring

Click here to download the file.

Hakology Day 82: Digistump … rickroll all the things.

[0657]
Well merry crimbo, I hope you had a great day whatever you spent it doing. So i’ve been really busy the last few weeks but I’m starting to have a little more free time now … and thought I’d take this chance to start writing up a little code and project for the digistump.


What is a digistump?

A digistump is a small USB development board that emulates a HID (Human interface device (Usually a keyboard or mouse but there are other variants)). The digistump allows the user to flash up to 6k of code to the device which when plugged in to a computer after programming will execute the code on the device as if it were a keyboard and/or mouse.

Why would I use one?

Its very handy for automating small tasks such as downloading a file and running an install or just editing settings on the pc that remain consistent across operating systems. eg. You could use the digistump to run a command in the command window or run a specific application with certain options automatically. All you need to do is plug the device in after programming and it will start executing the pre-programmed keypresses.

What operating systems does it support?
The digistump is cross-platform this doesnt mean one script works for all operating systems. This means the device is capable of running and executing code on Win/Linux/Mac but due to difference across the various operating systems scripts would need to be customised for each. The digistump has no way of reading data or accepting any feedback from the PC it just blindly presses keys. Your scripts will rely heavily on intelligent timing. Some commands will execute and finish on modern PCs faster than they would on older hardware, this has to be taken in to consideration when writing code.

Where can I get one?
The digistump is available from Digistump.com you can also find them available on ebay and similar sites. I bought mine from ebay for £1.50 each which is a tiny amount when compared to similar devices.

Installation?
The install procedure is pretty straight forward, download arduino IDE, install drivers and add digistump examples and templates. Which is all detailed on this page here … Getting started with the digistump
The setup is relatively straight forward.

So why am I reading all of this?

Well b/c the digistump is a relatively new product there’s not a lot of reference material on the internet so I started developing a small framework to make it easy to deploy and develop code very quickly. I’ve been busy working on my first little project for the device and right of passage to rick roll any windows 7 users. Although this project is a harmless bit of fun it’s helping me to develop a lot of standardised functions for running applications, opening web pages creating and saving files.

Rickroll notes …
I spent the first few nights tearing my hair out with this device. Here are some of the issues I encountered and how I mitigated them or formed some workarounds.

The first major issue I had was the backslash. The digistump by default outputs US scancodes, as I live in the UK this was an issue. So after much googling and head scratching I figured out that the scancode for the backslash on a UK keyboard was 0x64 yet the digistump was sending 0x31 the US scancode for the backslash.

Whilst I couldn’t figure out where the digistump library resided on the PC I wrote a small function to swap out the 0x31 for 0x64 which seems to have remedied my backslash issues. This is not the correct way to do things.

Eventually I found the library location last night (c:\Users\Username\arduino15\… ). I’m still yet to look through the code and figure out a conversion table for 101(UK en-gb 32) keyboards. Given a little more time I’ll get this fixed and not have to use any functions for string processing.

Another related problem was the saving of files using the %USERPROFILE% environment variable. Full filenames containing this variable were not being parsed properly ie. the environment variable was being read as %USERPROFILE% and not the actual users name. To mitigate this I broke the file string down in to sections and type each part of the save file string in separately. ie. C:\ [ENTER] Users\ [ENTER] %USERPROFILE%\ [ENTER] etc which allowed me to use the %USERPROFILE% variable when saving files.

I’m not going to upload all the code yet as its still messy and I have some functions that need more calling parameters adding so if I released the code now it’ll probably change before the final release and I want everything nice and polished before I release everything.

A great big shout to advancednewbie who’s been working on a special script for the digistump (More on that very soon.) his research and project helped me greatly in trying to figure out the key mappings for most default buttons and some of the UK differences. Given some more time im sure we’ll have this working seamlessly between countries and keyboard layouts.

Even though these issues don’t directly relate to the rickroll project I thought I’d include them just in case anyone else is having similar issues.

Download digispark digistump stumpyroll source code
[/0657]

Hakology Project Notes : Python, RedditAPI, Arduino, RaspberryPi thing.

Over the last three weeks I’ve been playing with various breakout boards, microcontrollers and embedded linux. I’ve been trying to take time to learn how the technology works and how best to combine them to teach and produce something useful, different and entertaining. So this project initially started out when I was playing with the RTLSDR dongle, I thought it might be cool to display the messages as they got demodulated on a separate device that was dedicated to grabbing POCSAG messages, I slapped it all together, then when my son was over the other weekend we decided to modify the code to grab the top 25 articles from a given subreddit.

Eventually when I get time ill put together a video tutorial on setting this all up but in the meantime here are the notes …

You will need:

1 x Raspberry Pi model B.
1 x Wifi dongle or ethernet cable.
1 x Arduino deumilinove.
1 x USB lead (for serial communication with the arduino)
1 x USB lead (to power the RPi)
1 x USB Charger
1 x LED Matrix 8×8 x4 (I used the horizontal style layout)

So how does it work?
Its pretty simple really, the raspberry pi runs a small python script that grabs the top 25 articles from a predefined subreddit using the api (most of reddits api can be accessed just by post fixing .json to a lot of their URLS the data structures are also well documented and available on github.) The script strips out any weird characters as the JSON is returned in utf-8 format. A string is built containing the articles rank, total amount of upvotes and the article title. If the string is over 300 characters it gets trimmed and “…” appended to the end. The script creates a serial connection to the arduino (the device is usually addressable using /dev/ttyUSB0) The string is then sent to the arduino over serial. When the arduino receives a new string it displays it to the LED matrix after having scrolled any current messages.

What’s the python code?

Install and configure raspbian in the normal way. Before running the script make sure you have internet access otherwise the python script will fail when it trys to communicate with reddit. (todo: add better error handling.)
Python code – http://pastebin.com/shXyry5C
Copy the code in to a file called reddit.py to your home directory.
Edit the file so it points to the correct serial device.
nano reddit.py
If you’re unsure about the arduino serial port run
sudo ls /dev
Look for something like …
ttyUSB0
Edit the line in reddit.py where the serial communication is initialised ensure it matches the port for the arduino.
ser = serial.Serial('/dev/ttyUSB0','57600')
Save the file using …
ctrl+x
Make sure the file has execute permissions by issuing the following command …
chmod +x reddit.py
You can test the script by running it from the command line using the following command (*this needs to be run with superuser privs to access the serial port) …
sudo python reddit.py
Once you’re happy with the way the script is running you can make it autoboot with the pi by using the following command …
sudo crontab -e
If you are prompted which editor to use and are unsure use nano (option 2)
At the bottom of the file add the following line …
@reboot /local/bin/python /home/user/reddit.py
Save the file by pressing ctrl+x
Reboot and test your script is autoloading.

To display the messages on the matrix you’ll need to flash your arduino with a little code …

Wiring the arduino …
To connect the arduino to the matrix you will need to ensure you have the correct SPI pins as they differ between arduino boards the ones on the deumilinove are pins A4 and A5, A4 SDA and A5 SCL, you will also need to attach the CS (chip select) pin to pin number 13 on the arduino and also connect VCC to 5v and GND to GND on the arduino.

A4 to SDA
A5 to SCL
13 to CS
5v to VCC
GND to GND

(todo : will post a pic when i get time)

What’s the arduino code?
Arduino code – http://pastebin.com/pvkM2DUK
Copy and paste the arduino code in to your arduino IDE, you’ll also need to grab the md_max29xx library from git hub. (Download the zip file and unzip the files to your arduino IDE library folder usually /Documents/arduino-x.x.xx/libraries) This library is used to drive the LED matrix. Once you’ve installed the library you’ll have to specify how many matrices you are using in the arduino code. (How many LED matrix panels you will be displaying to my board had 4 8×8 LED panels.) Here’s the important bit though depending on what/where/who you bought your led matrix board from you might find you’ll have to edit way the arduino draws to the matrix otherwise you could be in for some very interesting results. This can be done in the md_max29xx lib folder. There are a few variables that define the matrix rotation and draw direction IE. right to left, left to right, top to bottom etc. You will need to play with these variables until you get the right combination for your matrix.

NB. When initially getting this running use the example grapicstest to make sure the leds are drawing as expected then flash the arduino reddit serial code once you have the library configured correctly.

Now all the hard work’s done
Once you’ve installed the library, edited the arduino code, updated the variables for the draw direction and successfully flashed the code, plug the arduino in to the raspberry pi and boot. There should be enough of a delay in the script to ensure the RPI has connected to your network before it makes its initial request.

If you have the arduino setup correctly you should see scrolling text on the matrix. “Waiting for serial data!” after a short while the rpi should connect and start displaying articles from reddit.

Concluding
Still yet to build an enclosure or decided how / where im going to use this yet but i’ve had fun making it. Initially getting the libraries setup and running correctly was by far the most frustrating part of this project writing / editing the code was pretty straight forward. There’s plenty of scope for improvement / modification too, if I get time I was thinking I’d get it to cycle multiple subreddits, but for the time being I’ve spent enough hours on this project.

NB. The original code running on the arduino was limited to 25 characters I’ve modified this to allow for messages up to 300 characters in length (the size of an article title from reddit) Since doing so some of the serial messages appear to glitch intermittently. I’ve been checking the code for errors but haven’t managed to pinpoint the problem yet. As far as I can tell the python code runs fine but there might be a problem when the arduino is receiving the serial messages. Possible solutions maybe change the baud rate and send the data slower or add a checksum. (*As suggested by advancednewbie) Example code an library for implementing a checksum. https://github.com/AdvancedNewbie/serialChecksum

IF YOU HAVE ANY QUESTIONS REGARDING THIS PROJECT PLEASE PUT THEM IN THE COMMENTS ON THE YOUTUBE VBLOG EPISODE AT THE TOP OF THIS POST.

Hakology – Retropie steam controller setup guide

Notes to accompany the following video showing you how to setup and configure the steam controller for retropie. Tested and verified as working with python 2.7 on the rpi model B and rpi3 model B.

sudo apt-get install python-pip
sudo pip install libusb1
sudo pip install enum34
git clone https://github.com/ynsta/steamcontroller.git
cd steamcontroller
sudo python setup.py install
sudo nano /etc/udev/rules.d/99-steam-controller.rules
Add these lines :
SUBSYSTEM==”usb”, ATTRS{idVendor}==”28de”, GROUP=”games”, MODE=”0660″
KERNEL==”uinput”, MODE=”0660″, GROUP=”games”, OPTIONS+=”static_node=uinput”

sudo udevadm control –reload
sudo crontab -e
@reboot /usr/local/bin/sc-xbox.py start