# Setting up a new Laptop with Puppet

Hello folks.

So, some of you know puppet, some of you don’t. Puppet is a configuration management system. It’s quite awesome. I like working with it. One of the benefits of puppet is, that I never, ever, EVER have to setup a new laptop from scratch, EVER again.

I’m writing a puppet manifest file which sets up my new laptop to my liking. I will improve it as I go along. Here is version 1.0.

# include apt   class base::basics { $packages = ['git', 'subversion', 'mc', 'vim', 'maven', 'gradle'] exec { "update": command =&gt; "/usr/bin/apt-get update", } package {$packages: ensure =&gt; installed, require =&gt; Exec["update"], }   }   class base::skype { exec { "add-arc": command =&gt; "/usr/bin/dpkg --add-architecture i386", }   exec { "add-repo-skype": command =&gt; "/usr/bin/add-apt-repository \"deb http://archive.canonical.com/ \\$(lsb_release -sc) partner\"", require =&gt; Exec['add-arc'], }   exec { "update-and-install": command =&gt; "/usr/bin/apt-get update &amp;&amp; /usr/bin/apt-get install skype", require =&gt; Exec['add-repo-skype'], } }   class base::java8 { # Automatically does an update afterwards # apt::ppa { 'ppa:webupd8team/java': } exec { "add-repo-java": command =&gt; "/usr/bin/add-apt-repository -y \"ppa:webupd8team/java\" &amp;&amp; /usr/bin/apt-get update" }   exec { "set-accept": command =&gt; "/bin/echo /usr/bin/debconf shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections &amp;&amp; /bin/echo /usr/bin/debconf shared/accepted-oracle-license-v1-1 seen true | sudo /usr/bin/debconf-set-selections", require =&gt; Exec['add-repo-java'], }   exec { "install": command =&gt; "/usr/bin/apt-get install -y oracle-java8-installer", require =&gt; Exec['set-accept'], }   exec { "setup_home": command =&gt; "/bin/echo \"export JDK18_HOME=/usr/lib/jvm/java-8-oracle/\" &gt;&gt; /etc/environment", require =&gt; Exec['install'], } }   include base::basics include base::skype include base::java8

I’ll improve upon it as I go, and you can check it out later from my git repo. I removed the parts which required extra libraries for now, as I want it to run without the need of getting extra stuff installed. I might automate that part as well later on.

Have fun.
Gergely.

# Busy building the future

Fact is, I’ve been busy.

I’ve got a new job as a build engineer. As sort of a devops kind of guy. It’s extremely interesting considering that I made a career as a tester. Granted, I always was technical, and never really knew my path; but it seems my path is finding me after all.

In the past years, I got better at Docker, Puppet, Chef, AWS, Packer, Vagrant, Gradle, and a hell of a lot more. Also honed my linux skills from the ability of doing an ls -l to do an find . -type f -atime +5 | xargs rm -fr (find all the files which are 5 days older and pipe them to a delete command). I already read many books about devops but this time, it’s different. This time, I can actually do these things as well in a live environment.

As once a friend of mine told me: “You ain’t gonna learn anything unless you are getting payed for it.” Wise words. True words.

So stayed tuned for some devops and engineering type posts. I would like to continue working on the Django parts as well, however given my priorities and lack of time ( family and stuff, must choose what I learned in the hour I get each day), it might fall behind. I might stick it into some kind of provision practice or even give it a Travis.ci and put it into a gradle project. Now THAT’S interesting.

Cheers folks.
And as always,
Gergely.

# Django – RPG – Part 3

Hello folks.

A small update to this. I created the model now, which is the database design for this app. It’s very simple, nothing fancy. Also, I’m writing the app with Python 3 from now on.

Here is the model now:

from django.db import models from django.contrib.auth.models import User   # Create your models here.     class Item(models.Model): name = models.CharField(max_length=100, default="Item") damage = models.IntegerField(default=0) defense = models.IntegerField(default=0) consumable = models.BooleanField(default=False)   def __str__(self): return self.name     class Inventory(models.Model): items = models.ManyToManyField(Item)   def __str__(self): return self.items     class Character(models.Model): # By default Django uses the primery key of the related object. # Hence, no need to specify User.id. user = models.OneToOneField(User, null=True) name = models.CharField(max_length=100) inventory = models.ForeignKey(Inventory)   def __str__(self): return self.name

Worth noting a few things here. The __str__ is only with Python 3. In Python 2 it would be unicode. And the OneToOne and the foreign key are automatically using Primary keys defined in the references model. The __str__ is there to return some view when you are debugging in the console instead of [<Item: Item object>].

In order to apply this change you just have to run this commend (given you set up your app in the settings.py as an INSTALLED_APP):

python manage.py makemigrations polls

This creates the migration script. And this applies it:

python manage.py migrate

I love the fact that django creates incremental migration scripts out of the box. So if there was any problem at all, you can always roll back. Which comes very handy in certain situations.

That’s it.

Gergely.

# Django – RPG – Part 2

Hello.

Continuing where we left off with the Django RPG project. Next up is implementing a rudimentary registration and adding the ability to create a character. Maybe even, design the database through django’s modelling.

# Small Python GUI to Calculate Lever Distance

Hi folks.

Just a small script which calculates your distance from a lever focal point if you know your weight, the object’s weight and the object’s and the distance the object has from the focal point of the lever.

Like this:

This script will give you D1. And this is how it will look like in doing so:

So, in order for me (77kg) to lift an object of 80kg which is on a, by default, 1 meter long lever, I have to stand back ~1.03meters. Which is totally cool, right?

Here is the code:

from Tkinter import * import ttk   def calculate(*args): try: your_weight_value = float(your_weight.get()) object_weight_value = float(object_weight.get()) object_distance_value = float(object_distance.get()) your_distance.set((object_weight_value * object_distance_value) / your_weight_value) except ValueError: pass   root = Tk() root.title("Lever distance counter")   mainframe = ttk.Frame(root, padding="4 4 12 12") mainframe.grid(column=0, row=0, sticky=(N, W, E, S)) mainframe.columnconfigure(0, weight=1) mainframe.rowconfigure(0, weight=1)   your_weight = StringVar() object_weight = StringVar() object_distance = StringVar() your_distance = StringVar()   object_distance.set("1")   your_weight_entry = ttk.Entry(mainframe, width=7, textvariable=your_weight) your_weight_entry.grid(column=2, row=1, sticky=(W, E)) object_weight_entry = ttk.Entry(mainframe, width=7, textvariable=object_weight) object_weight_entry.grid(column=2, row=2, sticky=(W, E)) object_distance_entry = ttk.Entry(mainframe, width=7, textvariable=object_distance) object_distance_entry.grid(column=2, row=4, sticky=(W, E))     ttk.Label(mainframe, textvariable=your_distance).grid(column=2, row=3, sticky=(W, E)) ttk.Label(mainframe, text="Your weight").grid(column=1, row=1, sticky=W) ttk.Label(mainframe, text="Object weight").grid(column=1, row=2, sticky=W) ttk.Label(mainframe, text="Object Distance").grid(column=1, row=3, sticky=W) ttk.Label(mainframe, text="Your Distance").grid(column=1, row=4, sticky=W)   ttk.Label(mainframe, text="kg").grid(column=3, row=1, sticky=W) ttk.Label(mainframe, text="kg").grid(column=3, row=2, sticky=W) ttk.Label(mainframe, text="m").grid(column=3, row=3, sticky=W) ttk.Label(mainframe, text="m").grid(column=3, row=4, sticky=W)   ttk.Button(mainframe, text="Calculate", command=calculate).grid(column=3, row=5, sticky=W)   for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)   your_weight_entry.focus() root.bind('', calculate)   root.mainloop()

Please enjoy, and feel free to alter in any way. I’m using Tkinter and a grid layout which I find very easy to work with.

Gergely.

# Django – RPG – Part 1

Hi folks.

So last time, we tried to implement a little RPG of mine using Meteor, which failed miserably. This time we are going to try and use Django. Let’s have at it, shall we?

# Python and my Math commitment

Let’s talk about plans. It’s good to have one. For example, I have a plan for this year.

I kind of like math. So, I have this book:

It’s 1400 pages long and basically, has everything in it. It’s a rather exhaustive book. Hence, my plan is to finish the book by the end of 2015 and write a couple of python scripts that calculate something interesting.

For example, Newton’s law of cooling how I learned it is:

$t=k*log_{2.5}\frac{T_0-K}{T-K}$

Where k => a material’s surface based constant. Tzero => initial temperature. T => target temperature. K => Environment’s temperature.

A simple python script for this:

# Calculating Newton's law of Cooling from __future__ import division import sys from math import log   def calculation(k, Tz, T, K): res = (Tz - K)/(T - K) return k * (log(res, 2.5))   k = sys.argv[1] Tz = sys.argv[2] T = sys.argv[3] K = sys.argv[4]   print("Calculating aproximate temperature for given parameters: k=%s, Tz=%sC, T=%sC, K=%sC" % (k, Tz, T, K))   print(calculation(float(k), float(Tz), float(T), float(K)))

Enjoy.

And as always,

# Sphere Judge Online – Python Kivy Android app – Part 2

Here we are again. I will attempt to further this little journey of mine into the land of Android and Python.

This is the second part of the advanture you can read the first one a little bit back.

# Sphere Judge Online – Python Kivy Android app

Hello folks.

Today I would like to take you on a journey I fought myself through in order to write a python android app, which gets you a random problem from Sphere Judge Online. Then you can mark it as solved and it will be stored as such, and you can move on to the next problem. With the words of Neil deGrasse Tyson, Come with Me!

# Why Lock Picking is like Testing

Not a great many people know that I’m actually into Lock Picking as a hobby. This will not be a tutorial on how to do it, or I won’t really talk about how I do it; I would like to write about something completely different. So if you came here for that, here are a few very good resources:

http://www.lockpicking101.com/ – Tutorials
http://www.ukbumpkeys.com/collections/lock-picking – Tools ( UK )
http://www.reddit.com/r/lockpicking/ – Reddit

For my post, click on…