Author Archive

Installing Kivy on Windows

I found this really cool cross-platform toolkit for making GUIs from Python! It’s named Kivy. It’s available on Windows, Linux and Mac. (In case you’re not a developer, this is very cool!) The official installation instructions are here: https://kivy.org/docs/installation/installation-windows.html

However, I got an error when it tried to install gstreamer. I had to install that separately. What I did was download the wheel (.whl) file and install it first. After I did that, the rest of install worked fine. You can download the wheel file from here:
https://www.googledrive.com/host/0B1_HB9J8mZepNzZ5aW91Q0tJU2s/kivy.deps.gstreamer-0.1.5-cp27-none-win_amd64.whl

Open a command prompt/shell (of your choice), change to the directory where you downloaded the file and run:

pip install kivy.deps.gstreamer-0.1.5-cp27-none-win_amd64.whl

Note that I got an HTTP 502 error (yes, 502, or “temporary error”) for a while this morning, but then it worked. However, if that file does not exist (an HTTP 404 error), please check this page and download the appropriate file for your version of Windows and Python:
https://kivy.org/downloads/packages/simple/kivy-deps-gstreamer/

Finally, proceed with running everything from the official instructions. (Or everything that failed on you, if you’re sure what that was.)

Happy GUI development! ūüôā

Automatically ending a process in Linux

I have a Python script that I want to run from one console, and sometimes I want to be able to kill it from another console login (via SSH or direct to the console). To do this easily I simply wrote a bash script¬†that uses grep¬†and awk and then passes the results to a ‘sudo kill’ command like this:

sudo kill $(ps aux | grep 'sudo python script1.py' | awk -v i=1 -v j=2 'FNR == i {print $j}')
sudo kill $(ps aux | grep 'python script2.py' | awk -v i=1 -v j=2 'FNR == i {print $j}')
cp /var/log/security_camera.log ./

However, if you have a particularly stubborn script, you may need to use the KILL signal. To do that just specify the KILL signal like this:

sudo kill -s KILL $(ps aux | grep 'sudo python script1.py' | awk -v i=1 -v j=2 'FNR == i {print $j}')
sudo kill -s KILL $(ps aux | grep 'python script2.py' | awk -v i=1 -v j=2 'FNR == i {print $j}')
cp /var/log/security_camera.log ./

Only use the latter if you absolutely have to. There are actually a lot of signals in between the default SIGTERM signal. See:

man kill

to see the system documentation on which signals you should use when.¬†Or just Google it. ūüôā

As with most things in Linux, this is only one way to do things. But it works great for me.

This post was inspired by this Linux comic I saw on Google+¬†‚úƬ†¬†The code is all written by Leland Green (me). I take absolutely no responsibility with what you’re about to do with it!¬†

Jasper on Raspberry Pi Running Raspbian Jessie

This will get Jasper running on your Pi. This method really works!¬†I’ve tested this and got it going on an RPi 2 running Raspbian Jessie.

The second script* prompts you for essential information and then it’s up to you to configure and use it.

All you need to do is download the two .sh files from my new project here: https://github.com/lelandg/Jasper-Installation-on-Raspbian-Jessie

See the repository for much more info.  Please report any errors that you may find there.

😎👍

*Technically it runs a Python script that prompts you for the info… but it appears¬†as though it happens as described above. It’s all smoke and mirrors anyway, right? So everyone expects a little magic now & then.🙂

Bash By Example

If you’d like to learn Bash programming, there are few resources better than the IBM DeveloperWorks site. They have an awesome series of tutorials here:

Bash By Example:

Part 1: https://www.ibm.com/developerworks/library/l-bash/
Part 2: http://www.ibm.com/developerworks/library/l-bash2.html
Part 3: http://www.ibm.com/developerworks/library/l-bash3.html

See Also:

GNU’s bash home page

Parallel Processing In Python the Easy Way!

The technical term for what we’re discussing today is¬†Decorated Concurrency. Don’t let this scare you!¬†😇¬†It’s just¬†a fancy (and concise) way of saying that, “We have a simple way to do parallel processing.”

Parallel processing, in turn, means that we can start multiple threads, as needed, in our program such that everything runs faster. Behind-the-scenes, on modern processors that have multiple cores, Python can run different processes on different cores. This lets a developer decide which processes will run the fastest because they have their own core. Or, at a higher level, which functions/methods are candidates for running on multiple cores.

I’ve known about parallel processing in Python for some time but it has always required making special function calls. No big deal ‚Äď especially since you have to write the code to be multithreaded in the first place ‚Äď but it would be nice if it was all a bit easier, right?!? Well now it is!!!¬†😎

The Deco (deco) project allows you to easily create code that takes advantage of parallel processing in Python. You simply do it with decorators!

If you’re new to programming, a decorator is just¬†something that you place in your code next to¬†a function/method/class, etc. definition. For example, the Deco project uses

@concurrent

and

@synchronized

tags. In Python you apply a decorator immediately before a function/method, etc. You can see some examples in the README.md file (that is shown to you by default) in this project: https://github.com/alex-sherman/deco (same link as above)

I expect you will be able to see some examples and some of my code very soon, as well.¬†😇

🙂👍

Bonus Linux tip: 

How to Isolate a CPU (core) and dedicate it to a specific task

To run a task on core 3 of a Raspberry Pi, or other Debian-based distro, including Ubuntu, simply add:

isolscpus=3

to the end of /boot/cmdline.txt. (There can be only one line in this file.)

And then run:

taskset -c 3 <your task here>

BTW, if you get a chance, please check out my new blog! http://lelandgreen.com
And if you like it, will you please share it around?¬†😎👍

The Art of Electronics / Learning the Art of Electronics

I have recently become the proud owner of two books,¬†Learning the Art of Electronics (3rd Edition, Hayes/Horowitz)¬†and¬†The Art of Electronics (3rd Edition, Horowitz/Hill)¬†I still love a paper book for some things, and both of these are books I’d recommend that you purchase the paper version so you can lay them open beside your projects as you work on them.

Both are excellent and I have learned a lot from them, even though I’ve barely scratched the surface. They are some¬†2400 pages, combined, and these are textbook-size pages. Very densely packed with information, which I want to retain. So I’m taking my time!

I think it will help us all if I can create an in-depth review, as I go. For one thing, it will help me.

An exciting quote* for today from appendix G “Where Do I Go to Buy Electronic Goodies?”:

Manufacturers Direct: Many semiconductor manufacturers (Analog Devices, TI, Maxim,…) Will not only send free samples with the slightest provocation, they will also sell in small quantities via credit card; check out Many-Circuits for RF components, and Coilcraft for inductors, transformers, and RF filters.
(*My emphasis.)

Indeed, there are too many providers and tools listed for me to include¬†them all here. A¬†few that sound especially interesting are¬†octopart.com,¬†findchips.com¬†and¬†netcomponents.com. You give them a part number and it searches dozens of distributors, returning (“sometimes unreliable”) information on availability and pricing.

A sneak peek of some things I intend to talk about, and some very useful shortcuts for you in the meantime!

Scan of "Learningi the Art of Electronics" pg. 14

Learning the Art of Electronics pg. 14

Scan of "Learningi the Art of Electronics" pg. 15

Learning the Art of Electronics pg. 15

 

 

Pip Boy 3000 Build Log

As I posted on my blog yesterday, my brother Noel¬†contacted me and asked me¬†if I would help him build a fully-functional Pip Boy 3000! I’m totally psyched to do this.

History:

Adafruit has a very detailed build here https://learn.adafruit.com/raspberry-pi-pipboy-3000/overview, and that links to the “pypboy” software here:¬†https://github.com/sabas1080/pypboy

Update 2016.05.20:¬†I have found there are two “main” versions of this project floating around the web. The second¬†one being here:¬†https://bitbucket.org/grieve/pypboy/src/92970d3a53f86eba4dc99fc979c5d8682edd2b7e?at=master¬†I call this the “second” because it appears to have more enhancements. (And, more importantly, because I presume Adafruit¬†linked to the original ‚Äď this may be incorrect!)

Important Note: Be warned that if you use the Adafruit feature to “add all to cart” you will get a different type of knob than the project expects! I got a full-blown rotary encoder, which is a much better option is and just the “rotor-switch” (or “multi-switch) type of knob that the script now expects. (I’m working on this.)

Repository for this project: (Update 2016.05.22)¬†I found that I can easily import the “grieve” repository into GitHub. All I did was import the project and GitHub even preserved the complete history of the project! Apparently GitHub can import from any URL, as long as it contains a Git repository. Good to know!¬†😎👍

So this project now has a repository located here: https://github.com/lelandg/pypboy

Update 2015.05.29 –¬†I’ve decided to backtrack slightly. I thought that the grieve¬†repository was newer, but I’ve found this is incorrect. The sabas1080 repository actually has the most recent commits. Not only that, there are no less than 15 forks on Github. So I am spending a little time reviewing all of these to get the most complete implementation. I will then fork that project (fork/clone). I hope to make some updates to this, too. The software appears to be well-written, but without all hardware connected, it does not function properly. At this point, I think the only “problems” may be the missing hardware. At least I want to get it connected before I start trying to “fix” anything.

Enough of that, now back to some plans….¬†😇

 

Pip Boy 3000 from Fallout 3

Pip Boy 3000 from Fallout 3 and Fallout New Vegas

I have seen some builds on other sites as well. However, I have not seen a build like I plan to do! I am quite knowledgeable in Python and becoming so about the Raspberry Pi (RPi).

Since this is our hackerspace and we like to feature actual builds, I will not post details about future plans here, but rather keep this post strictly fact-based. (I always have loved a strong dose of nonfiction along with my sci-fi and fantasy desserts!)

For now, all I’ll say is this is the goal. And you can even click-through to read all about the Pip Boy 3000 on the Fallout Wiki!¬†😎

So far I have all of the electronics (assuming this touchscreen is big enough!) and the 3D print is scheduled to arrive Thursday, 2016.05.19!¬†So I hope you’ll¬†stay tuned!¬†

Update 2015-05-20: 3D print has arrived! This thing is awesome. Check this out:

2016.05.23: I found the py-gaugette works well almost as-is for a rotary encoder. If you want to use a rotary encoder, I found that it works well. There is another library by Bob Rathbone that is much more compact, but I found that it expected different GPIO connections than my rotary encoder has.

However…¬†(and I apologize if you are subscribed to this post today… I’ll try to limit future updates), we have decided to go back to a rotary switch. This is actually what the script expects. After this part arrives and I get it wired-up, I’ll post some details about it, and of course a schematic when everything is finished.

2016.05.24:¬†The rotary knob arrives today so I hope to get that soldered in place. It would be nice to complete enough of it that I could run my first test today. This may be a little optimistic, but we’ll see.

Meanwhile,¬†I’ve already started the soldering job so I can share a photo of that progress, at least!

Several electronics parts soldered together

Soldering progress so far, along with a printout of the “schematic” from Adafruit.

Update 2016.06.25: LED Buttons!

I wanted to make the buttons function like they do in the game. However, after calls to both Mouser and Digikey, I found that there is no such thing “illuminated button” of any type that¬†will fit inside the holes in this¬†Pip Boy. (Drilling them larger is not an option because the 3D print contains a “lip” or flange that wraps around each LED.)

So, I had the idea to make my own using only an LED and a button. I would simply superglue the LED on top of the button and wire everything up through perfboard supporting them. Simple, right? Well,  it turns out to be much simpler in concept than in practice.

First of all the holes in the perfboard did not line up ¬†exactly with the ¬†holes in the Pip Boy. to solve that, I sort of tilted toward the outside two LEDs on each end. (It’s not terribly clear in the picture, but the one on the right side is a little more obvious in this picture.)

"Handmade" orange LED pushbuttons

This doesn’t give me much room on the bottom ¬†for soldering! The two leads from the LEDs go down on either side of the switch (obviously) and then come out the perfboard just between the two leads for the button. But I’ve soldered things that were tighter than that¬†before and got them to work, so I’m sure I can do this.

Note that the taller LEDs are required. (Some of them are shorter, and they would not fit up through the hole in the Pip Boy.) also, you don’t really have room for the ¬†wire leads to fit up through the¬†holes, so this might not work ¬†for some builds.

 

Unicode Emoji(!?!)

I had no idea there were Unicode emoji codes that are standardized across platforms!¬†http://unicode.org/emoji/charts/full-emoji-list.html¬†🙃

There are some fun extensions for Chrome, too. I searched for “unicode emoji” and found a couple that work well, a couple that didn’t. YMMV, so I’m reluctant to recommend one of those. Just try them out.¬†😎

Section9 Linux tip: aliases for installing and uninstalling packages (and related)

This will be a simple post. I just wanted to share some useful things to make installing and maintaining packages much simpler (not that apt is bad).

To enable these features simply open a console window and:

sudo nano ~/.bashrc
*Note: You may¬†not always need “sudo” to edit this file, but on some systems you may.

Scroll to the end of the file and add these lines, exactly like this:

alias install='sudo apt-get install -y'
alias purge='sudo apt-get purge -y'
alias autoclean='sudo apt-get --autoclean'
alias show='apt-cache show'
alias search='apt-cache search'

Finally, type Ctrl-X and when prompted to save type ‘y’ and then press <Enter> at the next prompt. You will then need to log off and back on, or else type:

. ~/.bashrc

BONUS TIP: Beginning a line with ‘.’ lets you run shell and startup scripts

Also be aware that you may see errors if you run your .bashrc like this. They should be safe enough, but if you experience problems, log off and back on or reboot.

You can make sure you have it setup correctly by typing:

install

And pressing <Enter>. If you get a “command not found” error then you did not get the script¬†to execute. Go ahead and reboot in this case and it should work from then on. ūüôā

This allows you to do things like:

install [someprogram]
purge [someotherprogram]
autoclean
show [package_or_program_name]
search [what_was_that_program?]

When using this¬†search¬†command, if you do not see any matches to your “search”, try a simpler search. You can use parts of words. And you can still type¬†–help¬†as a parameter to any of these new shell commands and it will show you the appropriate help screen. They really are just¬†aliases: you still run the program they point to.¬†In other words, for the¬†search¬†command, you really are running apt-cache search¬†such that if you pass it –help, you should get help on apt-cache search features (and apt-cache in general). In this case we really are running¬†apt-cache.


 

I hope this little introduction to using aliases for apt is instructive and/or helpful. If you think so, I hope you’ll subscribe to this blog, either with RSS or good-ol’ email. Or simply follow me (Leland Green) on Google+ or Facebook (and soon on my own web site, I hope).

Thank you for reading,
Leland…

Section9 Linux Tip: ls

ls

Take¬†some time to learn some of¬†the options available with this powerful utility that does more than just “list files”, including:

  • -R = Recurse directories.
  • -l = “Long” listing‚Äďshow file sizes, timestamps and permissions.
  • –color = Colorize output, or disable colors with¬†‘ls –color=never’.
  • -a = All files‚Äďshow everything, including “hidden” files (those beginning with a ‘.’ (period)).
  • -A =¬†Almost all¬†files. Like -a but does not show ‘.’ or ‘..’ shortcuts (since they are always present).
  • -S = sort output (see¬†‘ls –help’¬†for details on parameters for sorting, or use the individual “sort switches”, such as:
    • -t = sort by timestamp
    • -S = sort by size
    • -v = sort by version
    • -X = sort by file extension

Given all of that, can you guess what my favorite alias command for¬†ls¬†is? I’ll give you a hint: it’s one of these (from my ~/.bashrc¬†file):

alias ll='ls -l -a --color'
alias la='ls -A --color'
alias l='ls -CF --color'
alias l1='ls -1 -a --color=never'

Note: That last one is lowercase ‘L’ and the digit ‘1’ (one).

How do you use¬†ls? Please share in the comments below. I will acknowledge all ideas you give me (and, in fact, by leaving a¬†comment you can “seal it in stone”).


If you found this page useful or interesting, please stay tuned to the ‚ÄúLinux Tips‚ÄĚ tag. We here at Section9 always¬†appreciate any shares and/or links to our pages. Link to one of our pages on your site, then post a comment here with a link back to your page that you put the link on. In this way you can promote your website on Section9.space (and we encourage you to do so).

I would also appreciate reports of any errors, typos, mis-statements and anything else you care to nit-pick. ūüôā¬†Leave me a comment here (preferred), or send a private message (PM)¬†on any of the social media sites that you find me on. (Google+, Facebook, Section9.space, Twitter, Instagram, etc.) I try to always at least acknowledge all questions within 24 hours. If I don‚Äôt know the answer, I‚Äôll either google it before replying, or at sometime after that, depending on how difficult I think a true answer will be to write.)

Thank you for your interest,
Leland Green…


Contact me with a private message:


Or, better yet, leave a public comment:

Return top

Info

Section9 is a computer club based out of the Springfield Missouri area. For more information, please see the About Us page or find us on Facebook.
 
%d bloggers like this: