programming (4)


PowerShell syntax cheat sheet

Everything is case insensitive, comments with # symbol

Conditions

if (condition)
{
   #code
} else if (condition)
{
   #code
} else
{
   #code
}

if (condition1 -And condition2 -And !(condition3))
{}

Negations must be in extra brackets ex:

$x = $true
if ($x) {}
if (!($x)) {}

Parameters

There is special block of code in param, that must be first executable code in function or script. Can be after comments.

Example:

#This is a beginning of script file

param
(
        [string] $PackageName = “blah”,

        [parameter(Mandatory=$true)]     
        [ValidateNotNullOrEmpty()]
        [string] $PackageUrl,

        [parameter(Mandatory=$true)]
        [string] $VariableName
)

You can call the script or function, either with parameters in order in which they are defined like

blah a b c

or with switch

blah -PackageName “a” -PackageUrl “b” -VariableName “c”

Types

[string] $x = “blah”
[bool] $x = $false #or $true
#store output of a command into string
$rev_list = git rev-list HEAD –count | Out-String 
#replace new line
$rev_list = $rev_list.Replace(“n", "").Replace("r”, “”) 

Functions

# Example function with example call of that function

$ErrorActionPreference = “Stop”

function PackageTest
{
    param
    (
        [parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string] $PackageName,

        [parameter(Mandatory=$true)]     
        [ValidateNotNullOrEmpty()]
        [string] $PackageUrl,

        [parameter(Mandatory=$true)]
        [string] $VariableName
    )

    Write-Host “Looking for $PackageName…    ” -NoNewLine
    if (!(Test-Path $PackageUrl))
    {
        echo “ERROR”
        echo “Unable to find $PackageName at $PackageUrl, you can set the alternative path using -$VariableName=path”
        exit 1
    }
    echo (“OK”);
}

PackageTest “Qt5” “$qt5_path” “qt5_path”




Why writing verbose code is good for self documentation

I recently had an interesting discussion about modern programming languages and I also have seen some, rather weird, opinions of people who believe that being verbose in your source code is a bad thing. I will try to summarize in this post why actually being verbose is a good and useful thing.

First of all, what do I mean by being verbose? I mean to use language elements that can be, but not necessarily need to be explicitly stated in the source code.

Many languages have some implicit definitions that are always used, unless you override them. For example in c# these both lines are identical:

Because every function, if not stated otherwise is private be default. There is no need to use keyword “private”. But well, you can still do that. Why? Because not everybody knows it and that doesn’t necessarily mean that person is a newbie (there are people who simply work in so many languages that they are occasionally unclear about things like this), and even if they were, what is so wrong on writing a source code that is simple to read even by newbies? So in simple words this will make it extra clear that a function is really private. It doesn’t harm anything and may be useful to some people who are reading the code.

The other thing which I noticed, is that people usually do not like to use “this” in c++. I am personally using “this” everywhere I can, in every function, just to make it 100% clear that this variable or a function is a non-static member of instance of class in which the function body is defined. It’s not for me, it’s for people who are reading my code, so that they don’t need to scroll potentially hundreds lines of code just to figure out whether variable, which they are looking at is function local or belongs to the class. I know that some IDE’s are showing these in different color, so that their scope is pretty clear, but these people may be reading this code in VI, or notepad. Again, it doesn’t harm anything, there is no difference in binary produced by compiler. In addition, it helps to ensure that your call will not conflict with some other function with same name.

It doesn’t improve the code, it doesn’t make it better nor worse. It just makes it easier to read (not by you, but by someone who doesn’t know the code and wants to understand it).

And what I hate most are languages which doesn’t require explicit type defintion, but are still strong-typed, like python (yes you probably already know I hate python :-)). These languages makes it super hard to figure out which datatype you are looking at, unless you attempt to debug it in some way.

This may be good for obfuscation, but seriously, what’s the real benefit of programming language that allows you to write shortest possible source code in number of characters which is totally unclear and hard to understand? To save space on hard drive? I don’t think so…




How to insert ubuntu PPA’s to debian

Ubuntu created a very interesting service called PPA – personal package archives.

If anyone of you ever used debian (or ubuntu) you may be wondering how cool it could be, if your software could be in official repository so that people could just type:

sudo apt-get install blah

These of you who managed to get through all the bureaucracy and got the packages there, might be wondering how cool it would be, if that package which got build and published there months ago, could be ever updated to latest version of your software 🙂

Today, it’s both possible and very easy, thanks to PPA.

I am not going to describe the process of how to submit stuff to PPA, because that is explained on many places, but I am going to explain how PPA work and how you can use this powerful service on debian.

What is PPA

PPA is basically a repository server, where each user can create their own personal aptitude remote repository, using unlimited number of own GPG keys. There is basically no difference between PPA repository and any other apt repository.

How do I make it work on debian

There is no command apt-add-repository on debian, because PPA is ubuntu thing. That makes 2 problems:

* You can’t easily add PPA
* You may have problems with dependencies, as some debian packages are named differently than ubuntu packages

First problem can be overriden easily. You can either get the source code of apt-add-repository and install it localy, OR you can just insert the url of PPA in format of

to your /etc/apt/sources.list where USER is username on PPA and REPOSITORY is PPA. You also need to replace ubuntu version with any ubuntu version which is most close to your debian version, typically some LTS (precise, or lucid).
The other thing you need to do, is installation of GPG key of the user you want to download packages from:

Now you should be able to download and use the PPA repository.

You may be however facing the other problem with dependecies, and there is currently no other solution for it, than rebuilding the source package yourself with correct debian dependencies.




Underscores, camels and insane madness of modern programming styles

So, I went over several articles related to programming style, after I noted that basically every modern project uses some special formatting, which even if I am familiar with, I never liked.

I decided to take programming styles little bit more in a detail from technical perspective and made some interesting conclusions.

In past, when GNU project started, most of programmers followed the so called “ISO” style (which is known as Allman see wikipedia) which I kind of like, even if I could think of better one.

This style uses opening and closing bracket for every function on separate line, for example

Unfortunatelly this style has two disadvantages. I love that allman style put brackets vertically on same position – that makes it just perfectly simple to “parse by eyes” and you never get lost in brackets, unfortunately, GNU does pretty weird indentations, probably because old code was developed in 85×24 terminals, so they really needed to keep it low on width.

Nowadays, most of programmers like to write code using style that makes the code “cute” but awfully hard to read, error prone and ineffective.

It’s not just that K&R put brackets in a way, that you can save one line (like if that was actually needed), but can’t figure out which bracket matches which. But also the letter cases are pretty weird. I discovered this great post: http://whathecode.wordpress.com/2011/02/10/camelcase-vs-underscores-scientific-showdown/ you really should check it out. It perfectly describes pro’s and cons of camelCase over underscore_name and I can tell you, I can see why most of respondents changed their mind after reading the article. Underscores, are clearly better in almost everything, and only argument why camelCase is better was “it is more cute”.

I think this kind of reflects the modern programming trends. Programmers, instead of making effective code, write cute code…

Even if I am not a big fan of Microsoft, I must say that code they use in their examples and Visual Studio has modern and very effective styling which I find extremely easy to read.

They basically use NormalCases and vertically matching brackets for everything, as well as 4 spaces to indent. Which indeed need more space than GNU’s 2 spaces, but make the code easier to read on modern screens with high resolutions. So no matter how people blame Microsoft for everything, this is a style I like and probably going to use in most of my projects, no matter of language. It may not be “cutest” but at least it makes the code easy to read.