Syndicate content
By Linux Geeks, For Linux Geeks.
Updated: 6 hours 2 min ago

Memorable Quotes – Part 9

Sun, 2015-02-01 01:47
A follow on from:
- " The pursuit of normality is the ultimate sacrifice of potential. " -- Faith Jegede "Pride is stupid, but it is necessary"
Jacques Villeneuve is proud to be able to run flat-out through Eau Rouge, 2005 "The bottom line is that we need a global financial system that supports stability and growth," she said.
"In too many cases -- from the United States in 2008 to Cyprus today -- we have seen what happens when a banking sector chooses the quick buck over the lasting benefit, backing a business model that ultimately destabilizes the economy."
- There can be slain
No sacrifice to God more acceptable
Than an unjust and wicked King
-- Seneca, "Hercules Furens" "What we saw from that is if you're talking about everything all the time, it's harder for the public to distinguish the things that are most important," he said. There's a Chinese saying, "with a new king comes new followers". As Karl Marx was one of the earliest to point out, economics (though so much less interesting) is far more important than politics.

Marx considered all political events as epiphenomena. He viewed great men as blind instruments of irresistible forces which they themselves could hardly comprehend.

The Marxist vision of society has been disproved many times, always at epic human cost. However, his doctrine that productive forces propel history has stood the test of time - and is invaluable for an understanding of the current predicament of the European Union.
- "I use Sylenth, one compressor, Ableton Live and its basic effects. I like to keep it super simple. It's actually pretty boring but it works for me and it keeps me making music." H.P. Lovecraft
"The oldest and strongest emotion of mankind is fear, and the oldest and strongest kind of fear is fear of the unknown"
- H.P. Lovecraft, Supernatural Horror in Literature
"Do we really want to be rid of our resentments, our anger, our fear? Many of us cling to our fears, doubts, self-loathing or hatred because there is a certain distorted security in familiar pain. It seems safer to embrace what we know than to let go of it for fear of the unknown.
(Narcotics Anonymous Book/page 33)"
- Narcotics Anonymous
"Sometimes painfully lost people can teach us lessons that we didn't think we needed to know, or be reminded of---the more history changes, the more it stays the same."
- Shannon L. Alder
- C. JoyBell C.
"You will find that it is necessary to let things go; simply for the reason that they are heavy. So let them go, let go of them. I tie no weights to my ankles."
- C. JoyBell C.

C. JoyBell C.
"People have to forgive. We don't have to like them, we don't have to be friends with them, we don't have to send them hearts in text messages, but we have to forgive them, to overlook, to forget. Because if we don't we are tying rocks to our feet, too much for our wings to carry!"
- C. JoyBell C.

Marvin J. Ashton
"Be the one who nurtures and builds. Be the one who has an understanding and a forgiving heart one who looks for the best in people. Leave people better than you found them."
- Marvin J. Ashton
- In the realm of law, the RSS wants the passage of a stringent nationwide bill that would ban religious conversions. In the public sphere, it has arrogated the right to pronounce not just on the future of minorities in India but that of India's Hindu majority as well. In the war of the religions, it seeks to spread the news that there is now a Hindu fundamentalism eager to goad and trump well-established Christian and Islamic fundamentals in India and around the world. And among its own vast cadre, it has generated the sense that it, much more than the government of the day or the diverse institutions of civil society and business, holds the key to India's future.
As a Hindu, I have some sympathy with this viewpoint. Missionary activity has always seemed to me unacceptably crude and arrogant, not only in its conviction that there is a single truth that must be propagated, but also in its contempt for two of the forces that most strongly influence religious belief: The accident of birth in a certain religion, which is then followed by many years of socialisation into its worldview.
- "It is not conversion, it is reconversion," said the professorial Abdeo, national secretary of Vishva Hindu Parishad, a pro-Hindu organisation. "A thousand years ago, all the Muslims and Christians in India were Hindu. They were converted by the sword. We are just bringing them back to their original faith."

Hindu fundamentalists, saying Christian missionaries and Muslim conquerors converted Indians by force centuries ago, have for years quietly sought to win them back. This year, seemingly invigorated by the rise of a right-wing Hindu government in New Delhi, they have organised mass reconversion "camps", including some where people have alleged they were duped or threatened into changing faiths.
- "When we start to doubt ourselves, when we start questioning our own identity, when we start distrusting everything, we cannot win, including against extremists, those who want to destroy who we are, threaten our values, turn France into something it is not". - Khomeini himself put it this way: "Allah did not create man so that he could have fun. The aim of creation was for mankind to be put to the test through hardship and prayer. An Islamic regime must be serious in every field. There are no jokes in Islam. There is no humor in Islam. There is no fun in Islam. There can be no fun and joy in whatever is serious."
A solemn and dignified Ramadan indeed. Sometimes it takes a clown to speak the truths that others won't face.
- Yun's quest - a modern version of the age old dream of tapping the fountain of youth - is emblematic of the current enthusiasm to disrupt death sweeping Silicon Valley. Billionaires and companies are bullish about what they can achieve. In September 2013 Google announced the creation of Calico, short for the California Life Company. Its mission is to reverse engineer the biology that controls lifespan and "devise interventions that enable people to lead longer and healthier lives". Though much mystery surrounds the new biotech company, it seems to be looking in part to develop age-defying drugs. In April 2014 it recruited Cynthia Kenyon, a scientist acclaimed for work that included genetically engineering roundworms to live up to six times longer than normal, and who has spoken of dreaming of applying her discoveries to people. "Calico has the money to do almost anything it wants," says Tom Johnson, an earlier pioneer of the field now at the University of Colorado who was the first to find a genetic effect on longevity in a worm.
- But let's remember that central bank quantitative easing (QE) of the kind that Europe is now embarking on is always just a Band-Aid on economic troubles, not a solution to underlying structural issues in a country (or in this case, a region). Just as the Fed's $4 trillion QE money dump bolstered the markets but didn't fix the core problems in our economy--growing inequality, a high/low job market without enough work in the middle, flat wages, historically low workforce participation--so the ECB QE will excite markets for a while, but it won't mend the problems that led Europe to need this program to begin with.
- Europe's future was "not the future of austerity - it is the future of democracy, solidarity and cooperation," he added.
- "Medicine doesn't happen very much in breakthroughs. It happens in lots and lots of little steps, and we still have a long way to go."
- "It is wrong to imagine that we can only gain and grow from revelling in past glory," he said. "True patriots don't shrink from historical truth -- they welcome it, they learn from it.
"I believe Australians are smart enough and generous enough to know that our national story is not a 'choose-your-own adventure', where we pick and mix the chapters that portray us in the best light.
"No leader can 'settle' the question of Australia's global role and responsibilities, and no leader should take pride in trying." "The problem is he just wants to pour that additional money into the broken, existing system -- which a lot of people graduate with AA degrees that don't lead to anything but another four-year degree that may not lead to a job," Sen. Marco Rubio, R-Florida -- a prospective 2016 presidential candidate -- suggested recently on CBS' Face the Nation. "What we need to do is create competition with alternative methods where people can acquire certification programs that take less than two years, and get you to work right away as a welder, electrician, and airplane mechanic. I wish he would spend more time on that, and less time trying to raise taxes and pour money into an outdated model that no longer works in the 21st Century."
- The test was anything but scientific - it says as much about my proficiency with the different input methods as it does about the input methods themselves - but the results were interesting and not at all what I expected. Swype, the keyboard you use by drawing lines over the letters without lifting your finger, was by far the slowest for me, due to the fact it coped very poorly indeed with longer, not-so-common words in the text. Next slowest was the handwriting recognition on Samsung's Galaxy Note 4, using its stylus, due to the fact it kept capitalising words that shouldn't be capitalised. I really thought it would be one of the faster ones. Then came the stock Android keyboard, then second fastest was the keyboard on the iPhone, thanks to its uncanny auto-correction ability that lets you type at an insane pace and still have near perfect accuracy.

But fastest of all by some margin, twice as fast as Swype and 30 per cent faster than the iPhone, was the keyboard on the Classic. Not only that, but it was the only input device that allowed me to take my eyes off the keyboard and look at the stopwatch while entering text. It's so easy to use, and so fast.
- In this day and age confidence is king. You can embark on all of the education you like but if you can't back yourself, or make it clear to others that you're up for the fight then others will pass you by. Nick Kyrgios is definitely letting everyone know he's not holding back, and he's having one hell of a crack.
Some are saying Nick is one of the most exciting sporting prospects Australia has seen in a long while, so lets not cook the golden goose, instead let it run wild, and who knows what will eventuate.
- Canada's number one problem in personal finance is not lack of saving, he said, but people spending beyond their means. "Eric and Ilsa show us that it's a problem uniting people of all backgrounds. This couple is you and me, only with a higher income."
- The most successful companies need a vision, and both Apple and Microsoft have one. But Apple's was more radical and, as it turns out, more farsighted. Microsoft foresaw a computer on every person's desk, a radical idea when IBM mainframes took up entire rooms. But Apple went a big step further: Its vision was a computer in every pocket. That computer also just happened to be a phone, the most ubiquitous consumer device in the world. Apple ended up disrupting two huge markets.
Mr. Cihra noted that Microsoft already dominates its core businesses, leaving little room for growth. But, he said, "Apple still doesn't have massive market share in any of its core markets. Even in smartphones, its share is only in the midteens. Apple's strategy has been to carve out a small share of a massive market. It's pretty much a unique model that leaves plenty of room for growth."
- The new administration said the sackings of the heads of the Hellenic Republic Asset Development Fund will put an end to "close-out sale" privatisation policies, Greek media reported. From now on, privatisations will take place when they create new jobs and generate economic growth, the government said.

Privatisations of state companies are an important part of a reform program the previous government agreed to with its international creditors in return for a EUR240 billion ($350 billion) bailout. Interest from investors for the state offerings, however, has been low, and the revenues from the sales have come in sharply below expectations.
"The wind of change is starting to blow in Europe," party leader Pablo Iglesias, a 36-year-old former university professor, said in Greek and Spanish as he addressed supporters. "We dream but we take our dream seriously. More has been done in Greece in six days than many governments did in years."
Born out of the "Indignants" protest movement that filled Spanish squares in 2011 with demands for change, Podemos says it wants to prevent profitable companies firing workers, promote fully state-controlled healthcare and enact a "significant" minimum-wage hike.
- The team carried out the research using astero-seismology -- listening to the natural resonances of the host star which are caused by sound trapped within it. These oscillations lead to miniscule changes or pulses in its brightness which allow the researchers to measure its diameter, mass and age. The planets were then detected from the dimming that occurs when the planets transited, or passed across, the stellar disc. This fractional fading in the intensity of the light received from the star enables scientists to accurately measure the size of the planets relative to the size of the star.
- In DJ parlance, a break is where all elements of a song (e.g., pads, basslines, vocals), except for percussion, disappear for a time. This is distinguished from a breakdown, a section where the composition is deliberately deconstructed to minimal elements (usually the percussion or rhythm section with the vocal re-introduced over the minimal backing), all other parts having been gradually or suddenly cut out.[1] The distinction between breaks and breakdowns may be described as, "Breaks are for the drummer; breakdowns are for hands in the air".[1]

In hip hop and electronica, a short break is also known as a "cut", and the reintroduction of the full bass line and drums is known as a "drop", which is sometimes accented by cutting off everything, even the percussion.
- Mobile users are increasingly driving traffic to Facebook, and advertisers have responded by purchasing large numbers of mobile ads. More than $1 in every $5 spent on Facebook advertising now goes to mobile, even though mobile ads command a premium cost-per-click rate of $1.38 -- compared to $0.81 for desktop ads. Also of note: The majority of tablet users access Facebook using an Apple product, but when it comes to phones, the Android operating system drives more traffic. -- AllFacebook Robotics executives say even though blue-collar jobs will be lost, more efficient manufacturing will create skilled jobs in designing, operating and servicing assembly lines.
A report commissioned by the International Federation of Robotics last year found that 150,000 people are already employed by robotics manufacturers worldwide in engineering and assembly jobs.
Categories: FLOSS Project Planets

Linux: The GHOST Vulnerability | RHEL | CentOS

Sat, 2015-01-31 09:25
The GHOST vulnerability is a serious weakness in the Linux glibc library. It allows attackers to remotely take complete control of the victim system without having any prior knowledge of system credentials. CVE-2015-0235 has been assigned to this issue.   Qualys security researchers discovered this bug and worked closely with Linux distribution vendors. And as […]
Categories: FLOSS Project Planets

Twitter Adds Group Messaging and Native Video

Fri, 2015-01-30 12:33
By Vasudev Ram

Saw this via a tweet.

Should be interesting to check it out once ready. They say the group messaging feature will allow for messaging to small groups of up to 20 at a time. Could be useful for some applications.

- Vasudev Ram - Dancing Bison Enterprises
Signup to hear about my new software products.

Contact Page

Share | var addthis_config = {"data_track_clickback":true}; Vasudev Ram

Categories: FLOSS Project Planets

HTML text to PDF with Beautiful Soup and xtopdf

Tue, 2015-01-27 15:42
By Vasudev Ram

Recently, I thought of getting the text from HTML documents and putting that text to PDF. So I did it :)

Here's how:
A demo program to show how to convert the text extracted from HTML
content, to PDF. It uses the Beautiful Soup library, v4, to
parse the HTML, and the xtopdf library to generate the PDF output.
Beautiful Soup is at:
xtopdf is at:
Guide to using and installing xtopdf:
Author: Vasudev Ram -
Copyright 2015 Vasudev Ram

import sys
from bs4 import BeautifulSoup
from PDFWriter import PDFWriter

def usage():
sys.stderr.write("Usage: python " + sys.argv[0] + " html_file pdf_file\n")
sys.stderr.write("which will extract only the text from html_file and\n")
sys.stderr.write("write it to pdf_file\n")

def main():

# Create some HTML for testing conversion of its text to PDF.
html_doc = """
Test file for HTMLTextToPDF
This is text within the body element but outside any paragraph.
This is a paragraph of text. Hey there, how do you do?
The quick red fox jumped over the slow blue cow.
This is another paragraph of text.
Don't mind what it contains.
What is mind? Not matter.
What is matter? Never mind.
This is also text within the body element but not within any paragraph.

pw = PDFWriter("HTMLTextTo.pdf")
pw.setFont("Courier", 10)
pw.setHeader("Conversion of HTML text to PDF")
pw.setFooter("Generated by xtopdf:")

# Use method chaining this time.
for line in BeautifulSoup(html_doc).get_text().split("\n"):

if __name__ == '__main__':

The program uses the Beautiful Soup library for parsing and extracting information from HTML, and xtopdf, my Python library for PDF generation.
Run it with:
and the output will be in the file HTMLTextTo.pdf.
Screenshot below:

- Vasudev Ram - Python training and programming - Dancing Bison Enterprises

Read more of my posts about Python or read posts about xtopdf (latter is subset of former)
Signup to hear about my new software products or services.

Contact Page
Share | var addthis_config = {"data_track_clickback":true}; Vasudev Ram

Categories: FLOSS Project Planets

Android Version Stats for LQ Mobile (2015)

Mon, 2015-01-26 13:24

With the recent news that Google will not patch the WebView vulnerability in versions of Android <= 4.3, I thought it would be a good time to look at the Android version stats for LQ Mobile. You can see stats from seven months ago here.

Platform Version Android 4.4 33.14% Android 4.1 16.82% Android 4.2 11.18% Android 4.0.3 – 4.0.4 10.11% Android 2.3.3-2.3.7 9.69% Android 5.0 9.44% Android 4.3 6.96% Android 2.2 1.82%

So, how has the Android version landscape changed since the last post and what are the implications of the WebView vulnerability in that context? Android 4.4 is still the most common version, with over a third of the market. Versions 4.2 and 4.3 are still common, but less so than previously. Versions 4.0.3/4.0.3 and 2.3.x are both very old and still fairly popular with roughly 10% each. That’s disappointing. Lollipop adoption among LQ Mobile users is significantly higher than Google is seeing generally (still less than .1%) which isn’t surprising given the technical nature of LQ members. Even with that advantage, however, roughly half of LQ Mobile users are using a version of Android that’s vulnerable. Given that data, it’s easy to understand why Google has broken out quite a bit of functionality/code into Google Play Services, which they can update independently of handset manufacturers and carriers


Categories: FLOSS Project Planets

PrettyTable to PDF is pretty easy with xtopdf

Thu, 2015-01-22 14:54
By Vasudev Ram

"PrettyTable to PDF is pretty easy with xtopdf."

How's that for some alliteration? :)

PrettyTable is a Python library to help you generate nice tables with ASCII characters as the borders, plus alignment of text within columns, headings, padding, etc.

Excerpt from the site:

[ PrettyTable is a simple Python library designed to make it quick and easy to represent tabular data in visually appealing ASCII tables.
PrettyTable lets you control many aspects of the table, like the width of the column padding, the alignment of text within columns, which characters are used to draw the table border, whether you even want a border, and much more. You can control which subsets of the columns and rows are printed, and you can sort the rows by the value of a particular column.

PrettyTable can also generate HTML code with the data in a <table> structure. ]

I came across PrettyTable via this blog post:

11 Python Libraries You Might Not Know.

Then I thought of using it with my PDF creation toolkit, to generate such ASCII tables, but as PDF. Here's a program,, that shows how to do that:
A demo program to show how to convert the output generated
by the PrettyTable library, to PDF, using the xtopdf toolkit
for PDF creation from other formats.
Author: Vasudev Ram -
xtopdf is at:

Copyright 2015 Vasudev Ram

from prettytable import PrettyTable
from PDFWriter import PDFWriter

pt = PrettyTable(["City name", "Area", "Population", "Annual Rainfall"])
pt.align["City name"] = "l" # Left align city names
pt.padding_width = 1 # One space between column edges and contents (default)
pt.add_row(["Adelaide",1295, 1158259, 600.5])
pt.add_row(["Brisbane",5905, 1857594, 1146.4])
pt.add_row(["Darwin", 112, 120900, 1714.7])
pt.add_row(["Hobart", 1357, 205556, 619.5])
pt.add_row(["Sydney", 2058, 4336374, 1214.8])
pt.add_row(["Melbourne", 1566, 3806092, 646.9])
pt.add_row(["Perth", 5386, 1554769, 869.4])
lines = pt.get_string()

pw = PDFWriter('Australia-Rainfall.pdf')
pw.setFont('Courier', 12)
pw.setHeader('Demo of PrettyTable to PDF')
pw.setFooter('Demo of PrettyTable to PDF')
for line in lines.split('\n'):

You can run the program with:
$ python
And here is a screenshot of the output PDF in Foxit PDF Reader:

- Enjoy.

--- Posts about Python --- Posts about xtopdf ---

- Vasudev Ram - Dancing Bison Enterprises - Python programming and training

Signup to be informed about my new products or services.

Contact Page

Share | var addthis_config = {"data_track_clickback":true}; Vasudev Ram

Categories: FLOSS Project Planets

Bad Voltage Season 1 Episode 34: Hidden Cities

Thu, 2015-01-22 10:53

Bryan Lunduke, Jono Bacon, Stuart Langridge and myself bring you all the Bad Voltage that’s fit to print, including a special feature where three of us record with good microphones and one moron doesn’t:

  • We give the second half of our predictions for where technology will go in 2015: this episode, Jeremy and Jono (2.30)
  • Christian Hergert talks about his crowdfunding campaign to make Builder, a Gnome IDE for building Gnome apps (27.25)
  • Wrong in 60 seconds: Jono on indicating in cars (46.48)
  • Skiplagged, a website for taking advantage of “hidden city” airline tickets through data analysis, is being sued by airlines. We discuss why, and what this indicates for this sort of air-quotes disruptive app (48.33)
  • Jono reviews the Logitech Harmony 650 all-in-one entertainment system remote control (62.35)

Listen to 1×34: Hidden Cities

As mentioned here, Bad Voltage is a new project I’m proud to be a part of. From the Bad Voltage site: Every two weeks Bad Voltage delivers an amusing take on technology, Open Source, politics, music, and anything else we think is interesting, as well as interviews and reviews. Do note that Bad Voltage is in no way related to, and unlike LQ it will be decidedly NSFW. That said, head over to the Bad Voltage website, take a listen and let us know what you think.


Categories: FLOSS Project Planets

Use WhatsApp Web in your web browser | WhatsApp Web Interface

Thu, 2015-01-22 07:30
Hello, This Article will show you how to use WhatsApp Web from your Computer / Web Browser Google Chrome. Prerequisites: 1. Latest Version of WhatsApp 2. Google Chrome Web Browser. You have to match above two requirements to use WhatsApp Web from Computer/Google Chrome. Steps to Use: 1. Open Google Chrome Web Browser. 2. Open link […]
Categories: FLOSS Project Planets

Music video: Dire Straits – Walk of Life

Mon, 2015-01-19 13:06
By Vasudev Ram

An old favorite, listened to it again today. The video is good too.

Dire Straits

Dire Straits - Walk of Life:

- Vasudev Ram - Dancing Bison Enterprises

Share | var addthis_config = {"data_track_clickback":true}; Vasudev Ram

Categories: FLOSS Project Planets

AWS Cloudformation: Defining your stack

Sun, 2015-01-18 15:11

AWS Cloudformation is a service that allows you to define your infrastructure on AWS in a template. This template it’s just a json file where you can define all the resources you need to create on your infrastructure, this is really useful to keep track of all your changes on the infrastructure under a version control of your choice, rollback changes and replicate your environment in other places in question of minutes.

When you define a template, you can think about the definition of one stack where is a set of logical resources you’ll need to provide a service. For example imagine a typical architecture for a web application, is composed basically by a web layer and database layer. Depending on the size of the project, we’ll need more than one web server to serve the content to the clients so we’ll need a load balancer to distribute the load to the web servers. The web server layer can be setup under an auto scaling groups to scale up or scale down the number of servers depending on the load of our web servers. As far we’ve our basic web stack defined:

– Web server instances.
– Database server instance.
– Auto scaling group for web servers.
– Load balancer.

So based on the example of the web application, cloudformation allows us to define all these resources in a json file creating a stack and cloudformation will be responsible to create automatically all the resources for us. After the creation of the stack you can update, add or delete more resources modifying the template and updating our stack, it’s possible to protect some resources to be modified or deleted if they are critical for our service creating a stack policy. Now let’s see the basic anatomy of a cloudformation template:

{ "AWSTemplateFormatVersion" : "version date", "Description" : "JSON string", "Parameters" : { set of parameters }, "Mappings" : { set of mappings }, "Conditions" : { set of conditions }, "Resources" : { set of resources }, "Outputs" : { set of outputs } }

AWSTemplateFormatVersion: Cloudformation template format used, most of the time is used the last one “2010-09-09″.
Description: A small explanation about our stack and all the resources.
Parameters: All the parameters passed to our resources at the creation time of the stack, for example the administrator user and password of the database instance, the number of initial instances to launch, and elastic ip to associate to an ec2 instance, etc…
Mappings: It’s a kind of lookup table where you can store definitions of key:value and retrieve the value using the internal function Fn::FindInMap. This is useful for example in cases we need to launch ec2 instances using different AMIs based on the region the stack is created.
Conditions: Includes statements to conditionally create or associate resources in our stack. For example imagine we’ve a stack definition for a test and a production environment and conditionally creates t2.small ec2 instances for our testing environment or m3.xlarge size for the production environment.
Resources: This is the central part of our template, here are defined all the resources of the stack such as s3 buckets, ec2 instances, load balancers, etc…
Outputs: The values returned by the different resources created, for example the URL of a S3 bucket, the dns record of a load balancer, the elastic ip address associated to an EC2 instance, etc…

The documentation of cloudformation it’s well documented, so understanding the anatomy of a template and following the documentation and some examples is enough to start working with cloudformation. I’ll leave link to my github repository where I’ve defined a small stack for my environment:

Basically this stack creates an EC2 instance with an elastic IP associated, a RDS database instance, two S3 buckets to store backups and logs with a lifecycle, a couple of security groups associated to the web server instance and the rds instance and an IAM role including policies to grant access to EC2, S3 buckets and cloudformation resources to the new EC2 instance. Let’s see with a bit more detail the different resources defined on this stack:

AWS::EC2::SecurityGroup: Creates two security groups, one is for the EC2 instance to give access to http, https and ssh services and the security group for the RDS with access to the entire internal subnet to the port 3306. See how parameters are referenced using the internal function {“Ref” : “VpcId”}, where associates the security groups to the VPC id passed.

"WebServerSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "Enable HTTP, HTTPS and SSH access", "VpcId" : {"Ref" : "VpcId"}, "SecurityGroupIngress" : [ {"IpProtocol" : "tcp", "FromPort" : "80", "ToPort" : "80", "CidrIp" : ""}, {"IpProtocol" : "tcp", "FromPort" : "443", "ToPort" : "443", "CidrIp" : ""}, {"IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : ""} ] } }, "DBEC2SecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "Frontend Access", "VpcId" : {"Ref" : "VpcId"}, "SecurityGroupIngress" : [{ "IpProtocol" : "tcp", "FromPort" : { "Ref" : "DBPort" }, "ToPort" : { "Ref" : "DBPort" }, "CidrIp" : "" }] } },

AWS::S3::Bucket: Here are defined the two buckets for logs and backups. The DeletionPolicy ensures if the stack is deleted the s3 buckets will be preserved. AccessControl defines the ACL to access on this bucket, in that case both are private. LifecycleConfiguration allows you to create a lifecycle policy to apply on the bucket, in that case both buckets will remove the files older than 15 or 30 days, but here you can setup to archive the files to AWS Glacier for example.

"S3BackupBucket" : { "Type" : "AWS::S3::Bucket", "DeletionPolicy" : "Retain", "Properties" : { "AccessControl" : "Private", "BucketName" : "opentodo-backups", "LifecycleConfiguration" : { "Rules" : [ { "ExpirationInDays" : 15, "Status" : "Enabled" } ] } } }, "S3LogBucket" : { "Type" : "AWS::S3::Bucket", "DeletionPolicy" : "Retain", "Properties" : { "AccessControl" : "Private", "BucketName" : "opentodo-logs", "LifecycleConfiguration" : { "Rules" : [ { "ExpirationInDays" : 30, "Status" : "Enabled" } ] } } }

AWS::IAM::Role: Allows to make API requests to AWS services without using an access and secret keys, using Temporary Security Credentials. This role creates different policies to give access to S3 buckets backups and logs, ec2 access and cloudformation resources.

"WebServerRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version" : "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "" ] }, "Action": [ "sts:AssumeRole" ] } ] }, "Path": "/", "Policies": [ { "PolicyName": "EC2Access", "PolicyDocument": { "Version" : "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["ec2:*","autoscaling:*"], "Resource": "*" } ] } }, { "PolicyName": "S3Access", "PolicyDocument": { "Version" : "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": ["arn:aws:s3:::opentodo-backups","arn:aws:s3:::opentodo-backups/*","arn:aws:s3:::opentodo-logs","arn:aws:s3:::opentodo-logs/*"] } ] } }, { "PolicyName": "CfnAccess", "PolicyDocument": { "Version" : "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["cloudformation:DescribeStackResource"], "Resource": "*" } ] } } ] } },

AWS::IAM::InstanceProfile: references to the IAM role, this is just a container for the IAM role and this allows to assign the role to an EC2 instance.

"WebServerInstanceProfile": { "Type": "AWS::IAM::InstanceProfile", "Properties": { "Path": "/", "Roles": [ { "Ref": "WebServerRole" } ] } },

AWS::EC2::Instance: Creates the EC2 instance using the AMI id ami-df1696a8, and assigns the InstanceProfile defined before, in the subnet id subnet-7d59d518 and the instance size and key pairs passed as parameters. The property UserData allows to setup scripts to run in the startup process. This commands passed on the user-data are run by the cloud-init service, which is included on the public AMIs provided by AWS. This user-data setup here installs the package python-setuptools and installs CloudFormation Helper Scripts, which are a set of python scripts to install packages, run commands, create files or start services as part of the cloudformation stack on the EC2 instances. The cfn-init command gets the cloudformation metadata to check what tasks has to run the instance (that’s why we include the policy access to cloudformation:DescribeStackResource on the IAM role before). The cloudformation metadata is setup on the AWS::CloudFormation::Init key, where basically installs some packages including the awscli tool and creates a couple of files, the /root/.my.cnf to access to the RDS instance which is filled using the attributes got after create the RDS instance, and the file /etc/bash_completion.d/awscli for the awscli auto completion. The cfn-signal command on user-data is used to indicate if the EC2 instance have been successfully created or updated, which is handled by the CreationPolicy attribute to wait until the cf-init command has finished, with a timeout of 5 minutes.

"WebServerEc2Instance" : { "Type" : "AWS::EC2::Instance", "Metadata" : { "AWS::CloudFormation::Init" : { "config" : { "packages" : { "apt" : { "nginx" : [], "php5-fpm" : [], "git" : [], "etckeeper" : [], "fail2ban" : [], "mysql-client" : [] }, "python" : { "awscli" : [] } }, "files" : { "/root/.my.cnf" : { "content" : { "Fn::Join" : ["", [ "[client]n", "user=", { "Ref" : "DBUser" }, "n", "password=", { "Ref" : "DBPassword" }, "n", "host=", { "Fn::GetAtt" : [ "DBInstance", "Endpoint.Address" ] }, "n", "port=", { "Fn::GetAtt" : [ "DBInstance", "Endpoint.Port" ] }, "n" ] ] }, "mode" : "000600", "owner" : "root", "group" : "root" }, "/etc/bash_completion.d/awscli" : { "content" : { "Fn::Join" : ["", [ "complete -C aws_completer awsn" ] ] }, "mode" : "000644", "owner" : "root", "group" : "root" } } } } }, "Properties" : { "ImageId" : "ami-df1696a8", "InstanceType" : { "Ref" : "InstanceType" }, "SecurityGroupIds" : [ {"Ref" : "WebServerSecurityGroup"} ], "KeyName" : { "Ref" : "KeyPair" }, "IamInstanceProfile" : { "Ref" : "WebServerInstanceProfile" }, "SubnetId" : "subnet-7d59d518", "UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "#!/bin/bashn", "aptitude updaten", "aptitude -y install python-setuptoolsn", "easy_install", "# Install the files and packages from the metadatan", "cfn-init --stack ", { "Ref" : "AWS::StackName" }," --resource WebServerEc2Instance --region ", { "Ref" : "AWS::Region" }, "n", "# Signal the status from cfn-initn", "cfn-signal -e $? ","--stack ", { "Ref" : "AWS::StackName" }," --resource WebServerEc2Instance --region ", { "Ref" : "AWS::Region" }, "n" ] ] } } }, "CreationPolicy" : { "ResourceSignal" : { "Timeout" : "PT5M" } } }

AWS::EC2::EIPAssociation: Associates the elastic IP passed as parameter to the EC2 instance. The elastic IP must be allocated before on AWS.

"EIPAssociation" : { "Type" : "AWS::EC2::EIPAssociation", "Properties" : { "InstanceId" : {"Ref" : "WebServerEc2Instance"}, "EIP" : {"Ref" : "ElasticIP"} } },

AWS::RDS::DBSubnetGroup: Creates a DB subnet group using the subnet ids defined where the RDS instance will be setup.

"DBSubnetGroup" : { "Type" : "AWS::RDS::DBSubnetGroup", "Properties" : { "DBSubnetGroupDescription" : "WebServer DB subnet group", "SubnetIds" : [ "subnet-058c0560", "subnet-2072c457" ] } },

AWS::RDS::DBInstance: Creates the RDS instance on the subnet group created before with some properties passed as parameter.

"DBInstance" : { "Type": "AWS::RDS::DBInstance", "Properties": { "DBInstanceIdentifier" : "WebServerRDS", "Engine" : "MySQL", "MultiAZ" : { "Ref": "MultiAZDatabase" }, "MasterUsername" : { "Ref" : "DBUser" }, "MasterUserPassword": { "Ref" : "DBPassword" }, "DBInstanceClass" : { "Ref" : "DBClass" }, "AllocatedStorage" : { "Ref" : "DBAllocatedStorage" }, "DBSubnetGroupName" : { "Ref" : "DBSubnetGroup" }, "Port" : { "Ref" : "DBPort" }, "StorageType" : "gp2", "AutoMinorVersionUpgrade" : "true", "BackupRetentionPeriod" : 5, "PreferredBackupWindow" : "02:30-03:30", "PreferredMaintenanceWindow" : "sun:04:30-sun:05:30", "VPCSecurityGroups": [ { "Fn::GetAtt": [ "DBEC2SecurityGroup", "GroupId" ] } ] } },

As I said AWS has a very well documentation, so all that you need you can find on his doc pages and find very useful examples:

Github repository with the full template:

Categories: FLOSS Project Planets

Rendering a calendar in gimp

Sun, 2015-01-18 06:35
To create a calendar from any image we want we need to be able to render the dates with the days on the image and make it appear seemeless. This can be achieved using gimp and its calendar plugin. The calendar plugin can be downloaded from

Once you have downloaded the file, place it in the file

(the above path could be different if your gimp version is different)

Now launch gimp and open the image on which we want the calendar by clicking on


To render the calendar click on


This should launch a window with options for the calendar as shown below.

The options available are

Language: We can choose from the different languages in the pull down menu
Month: The month for which we want the calendar
Year: Year for which we want the calendar
Day Format: The format in which the days of the week should be displayed. We can choose from the three available formats.
Layout: The layuot of the dates in the calndar. There are four differrent layout available.
Text and number fonts.
font size
Border Width: Width of the borders of the cells in which numbers will be placed.
Border Color: Color of the border of the cells.
Date Position: Position of the numbers in the cells.

The color of the numbers will be the same as the color that has been set in gimp.

Click on OK and let the script create the calendar. Once the script finishes, we should have an image as shown below.

We can see that we have two extra layers above our image. These are for the borders and the dates. We can resize the calendar on the image by first merging these two layers into one.

Then resizing the layer to the size that we wanted.

To save the image with the calendar click on


Enter the file name and choose the filetype to export to.

Final image with out resize of calendar

With resize

More information at
Categories: FLOSS Project Planets

Manas National Park, Assam, India

Sat, 2015-01-17 14:34
By Vasudev Ram

From Wikipedia, the free encyclopedia:

"Manas National Park or Manas Wildlife Sanctuary (Pron:ˈmʌnəs) (Assamese: মানস ৰাষ্ট্ৰীয় উদ্যান) is a National Park, UNESCO Natural World Heritage site, a Project Tiger Reserve, an Elephant Reserve and a Biosphere Reserve in Assam, India. Located in the Himalayan foothills, it is contiguous with the Royal Manas National Park[1] in Bhutan. The park is known for its rare and endangered endemic wildlife."

- Vasudev Ram - Dancing Bison Enterprises

Signup to hear about new products or services from me.

Contact Page

Share | var addthis_config = {"data_track_clickback":true};
Vasudev Ram

Categories: FLOSS Project Planets

Building Reaktor Synthesisers, Download Scripts, and Re-Spin Revenue

Fri, 2015-01-16 07:07
After a bit of fiddling I've figured out how to build non-trivial Reaktor software synthesisers. By the looks of things, you can do quite a lot but there seems to be some gaps in the software which makes building a full blown synthesiser ready for sale to the public (which they will want to buy) a non-option for the moment (unless there is some information that I'm missing which is likely the case)...

For the lazy among you the easiest Reaktor Synthesisers that can be built can be made as so. Right click in the workspace, Instrument -> Synthesizers -> Option and then hook up to correct/relevant Voice Combiner. My designs obviously start from scratch though, as I'd like to be able to design some both for educational purposes, for resale, and if that's not possible simply to give away.

You can download my updated experiments from here:
I've been looking to build some Android software applications for a while now (curious to know whether this is a viable long term option). It's interesting how many people actually Open Source their software on the various web stores.

I recently wanted to download al the applications/archives from a particular website, so I looked at various website download programs (HTTrack, Teleport Pro, wget, curl, etc...). In spite of the filters/wildcards that were available they were too slow to be realistic.

####Start Quote####
Use wildcards to exclude or include URLs or links. You can put several scan strings on the same line. Use spaces as separators. Example: +*.zip -www.*.com -www.*.edu/cgi-bin/*.cgi

+*.png +*.gif +*.jpg +*.css +*.js*

+*.zip +*.exe +*.msi +*.tar.gz +*.tar +*.rar
+*.css +*.js*
####End Quote#####

What did I do? I built something because I noticed patterns in the way files were encoded.

####Start Quote####
Range for Instrument VSTs
was the same as
which converted to
which could then be parsed for automated download.

Range for Effects VSTs
was the same as
which converted to
which could then be parsed for automated download.

Range for Midi VSTs
####End Quote#####

You can download my script from here:
As I've stated previously I've been thinking of re-spinning some versions of Linux for fun and possibly profit. The irony is that it's actually much easier to go down than it is go up. Namely, the smaller distributions such as DamnSmall don't really lend themselves to customisation going up because there are too many dependencies that need to be remedied prior to being able to come up with something workable. This has led me to work on scripts to achieve the exact opposite on smaller (but large such as Knoppix) DVD/CD based live distributions. They work based on class of program based on yum or apt package information. It'll be interesting to see what we can do.
smallest damn thing that you can possibly get?
Several of the ways in which I was thinking about making revenue was:
  • distributing/re-sale on chosen media such as USB, CD, DVD, etc...
  • creating custom versions for who ever wants them. After all, if I'm currently building the code to allow for this why not? (You need to send a portion of payment now and rest on delivery.) Working perferably only on smaller distributions at this point unless the project is really interesting.
  • donations
  • figuring out what the public wants and then attempting to build that for them
  • figuring out what the best possible distribution is and attempting to build that for the public
  • support via of these distributions
Interesting stuff in general I came across during the week.
Categories: FLOSS Project Planets

Publish databases to PDF with PyDAL and xtopdf

Wed, 2015-01-14 17:41
By Vasudev Ram

Some days ago, I had blogged about pyDAL, a pure Python Database Abstraction Layer.

Today I thought of writing a program to publish database data to PDF, using PyDAL and xtopdf, my open source Python library for PDF creation from other file formats.

(Here is a good online overview about xtopdf, for those new to it.)

So here is the code for
Author: Vasudev Ram
Copyright 2014 Vasudev Ram -
This program is a demo of how to use the PyDAL and xtopdf Python libraries
together to publish database data to PDF.
PyDAL is at:
xtopdf is at:
and info about xtopdf is at: or

# imports
from pydal import DAL, Field
from PDFWriter import PDFWriter

SEP = 60

# create the database
db = DAL('sqlite://house_depot.db')

# define the table
Field('id'), Field('name'), Field('quantity'), Field('unit_price')

# insert rows into table
items = (
(1, 'chair', 40, 50),
(2, 'table', 10, 300),
(3, 'cupboard', 20, 200),
(4, 'bed', 30, 400)
for item in items:[0], name=item[1], quantity=item[2], unit_price=item[3])

# define the query
query =
# the above line shows an interesting property of PyDAL; it seems to
# have some flexibility in how queries can be defined; in this case,
# just saying db.table_name tells it to fetch all the rows
# from table_name; there are other variations possible; I have not
# checked out all the options, but the ones I have seem somewhat
# intuitive.

# run the query
rows = db(query).select()

# setup the PDFWriter
pw = PDFWriter('furniture.pdf')
pw.setFont('Courier', 10)
pw.setHeader(' House Depot Stock Report - Furniture Division '.center(60))
pw.setFooter('Generated by xtopdf:')

pw.writeLine('=' * SEP)

field_widths = (5, 10, 10, 12, 10)

# print the header row
pw.writeLine(''.join([idx]) for idx, header_field in enumerate(('#', 'Name', 'Quantity', 'Unit price', 'Price'))))

pw.writeLine('-' * SEP)

# print the data rows
for row in rows:
# methinks the writeLine argument gets a little long here ...
# the first version of the program was taller but thinner :)
pw.writeLine(''.join(str(data_field).center(field_widths[idx]) for idx, data_field in enumerate((row['id'], row['name'], row['quantity'], row['unit_price'], int(row['quantity']) * int(row['unit_price'])))))

pw.writeLine('=' * SEP)

I ran it (on Windows) with:
$ py 2>NUL
Here is a screenshot of the output in Foxit PDF Reader:

- Enjoy.

--- Posts about Python  ---  Posts about xtopdf ---

- Vasudev Ram - Python programming and training

Signup to hear about new products or services from me.

Contact Page

Share | var addthis_config = {"data_track_clickback":true}; Vasudev Ram

Categories: FLOSS Project Planets

Overrides With SSSD

Wed, 2015-01-14 08:52
LINUX has long been plagued with a rather lousy identity management scheme.  Beyond the limitations of POSIX's getent and related calls [which can be very inefficient] the attempts to stub in network-aware identity services such as LDAP have only piled onto the rough edges.  NSCD attempted to work around performance problems via caching - and did not do very well.  Then was NSLCD the next evolution of NSCD which was better, but still inflexible.  Identity management in more complex networks is a tedious business and what administrators need more than anything else is flexibility.
Finally we have SSSD - The System Security Services Daemon - which is an identity service that seems to have an answer for every basic issue - from caching, to Kerberos integration, to joining together multiple domains....  On top of all that essential goodness is the simple feature of local overrides for identity values.
As an administrator at a multiple platform enterprise this has always been a dilema - what value should get stored in certain user attributws such as "loginShell"?  Not all systems want/need the same thing.  Ugly solutions involve symbolic links and/or installing non-standard shells.  None of which can be described as "elegant" or even "correct".  Our AIX systems want to use "/bin/ksh", our LINUX systems want to use "/bin/bash" [or even "/usr/bin/bash"].  Ultimately I end up storing the attribute in user object for the most limited inflexible systems - generally that means AIX gets its way.

This means when I attempt to sign into an out-of-the-box LINUX installation it fails.
Jan 14 08:22:21 example sshd[24292]: User adam not allowed because shell /bin/ksh does not exist
Jan 14 08:22:21 example sshd[24293]: input_userauth_request: invalid user adam
Jan 14 08:22:29 example sshd[24292]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=  user=adamBummer.  But now that systems are using SSSD to back the NSS service the solution is as simple as:
override_shell = /bin/bashAnd now my shell, and the shell for every user, on that host is "/bin/bash". 
Aside: How often would users on the same host actually use different shells? That sounds like an administrator’s nightmare.  At least on modern systems the loginShell seems much more appropriate as a host property than a user property;  the most shell the majority of users ever experience is the login script that starts their application or menu.SSSD provides overrides for shell, home directory [override_homedir] and primary group [override_gid: make the primary group of all users from the network identity service the same].

Author: Adam Tauno Williams
Categories: FLOSS Project Planets

Some Fun

Wed, 2015-01-14 05:36
It's been a while since we've done one of these...
Some videos...
Cat Tape Experiment
Dog Feet Tape Experiment
Cat Feet Tape in Africa get drunk by eating ripe Marula fruit
Alcoholic Vervet Monkeys! - Weird Nature - BBC animals on Setanta - Gangsta Sven Food of the Future? Theft Backfires as Explosion Knocks Down Robber
Some articles...
 Some quotes...
  •  "Two friends are talking: "Say, buddy, could you loan me 100 Euros?" "Well, you know I only have 60 on me." "Ok, give me what you've got and you'll only owe me 40."
  • A young teacher is interviewing for a position. He is asked: "Can you give me three reasons why you wanted to be a teacher?" The interviewee promptly answers: "December, June, and July. 
  • "An attacker could simply download the My Satis application and use it to cause the toilet to repeatedly flush, raising the water usage and therefore utility cost to its owner," it says in its report. "Attackers could [also] cause the unit to unexpectedly open/close the lid, activate bidet or air-dry functions, causing discomfort or distress to [the] user."
Categories: FLOSS Project Planets

Printing, Re-Spinning, and Musical Experimentation

Tue, 2015-01-13 06:51
I've been meaning to purchase a new toner cartridge for my Brother HL-2140 laser printer for a short while now but noticed that the price of cartridges are multiples of their cheapest laser printer at 'Officeworks'.

The only problem is that you may need to update your drivers. I wasn't able to find any relevant Debian packages after a quick search online. I converted from what was available of RPM packages online. The existing driver for the Brother HL-1110 prints nothing but blanks at this stage on some version of Linux.

root@system:~/CUPS# alien *.rpm --scripts --to-deb
hl1110cupswrapper_3.0.1-2_i386.deb generated
hl1110lpr_3.0.1-2_i386.deb generated
root@system:~/CUPS# ls
hl1110cupswrapper-3.0.1-1.i386.rpm  hl1110cupswrapper_3.0.1-2_i386.deb  hl1110lpr-3.0.1-1.i386.rpm  hl1110lpr_3.0.1-2_i386.deb

Download my Debian packages from here...

Information on the difference between the 'Sampler' and 'Simpler' on Ableton.

I've been looking at these (online payment systems) for a while now to see what ways there were of efficiently transferring currency across the Internet for various projects I've been working on.

I've been investigating some of these as a means of online distribution of larger content (re-spun Linux distributions and other content). Note, that I do not have the ability to be able to use P2P style technologies because of various limitations at this moment in time..

There's been some work that I've been meaning to upload to GitHub for a while now. Surprised how much it has been streamlined...

Locations for free wallpapers that I've been looking at for re-spun Linux distributions.

These are some of my first attempts at Reaktor Software Synthesisers. It's interesting how much customisability there is within the software actually. I thought I may have to venture into other software (or direct programming) to be able achieve this level of power.
Download my Reaktor Synthesisers from here...
This is where I learnt how to build them. It'll be intresting to see whether I can build anything worth selling/purchasing...
Ever wondered how those URL breakdown systems work and who actually supplies such services? So did I?  Curious to know though whether they can be used for downloads. Think of the difference between a stealthy, a semi-stealthy, and a transparent proxy for an idea of what I mean...
I've been looking at some young House producers/composers of late looking for furher indications into how they actually build up/layer a track. If you've spent enough time looking around then it's clear that the sound of many of these young producers is quite immature. In terms of sounds intermingling it's quite complex but with regards to actual structure it's quite simplistic. Think of the song 'Icarus' from 'Madeon' as a good example (very reminiscent of Daft Punk's 'Around the World', in terms of structure)(it exudes innocence, young, vibrancy, and is 'poppy'. It's not exactly my cup of tea but hey it works right?). It basically has a bunch of clips goign over the top of one another and doesn't quite complement but actually builds up. It has an introduction, has a period in which it sets the stage, the main storyline, without much of an outro, it simply just fades out... Moreover, the main storyline is just like a chorus/choir joining in on a solo. It's not quite as difficult as you think to build something like this.
Categories: FLOSS Project Planets

Windows Remote Desktop on GNU/Linux

Tue, 2015-01-13 02:07

This is the accompanying shownotes for a Hacker Public Radio podcast episode.

I wrote a bash script to connect to various different windows servers from my GNU/Linux desktops. I had a few different requirements:

  • I should be able to call it based on hostname.
  • All windows should be 90% smaller than my screen.
  • It should map my keyboard.
  • It should map my local disk.
  • It should quickly timeout if the port is not available.

You can get the full script here, but let’s walk through it:

The first line calls bash and then gets the server name from the symlink that is calling the script. The port is set as “3389”, but you can change that if you like.

#!/bin/bash SERVER=`basename $0` PORT="3389"

The next few lines finds the smallest vertical and horizontal sizes, even if you are running multiple screens. Then it calculates 90% of that to use as the size.

h=$(echo "scale=0;(($(xrandr | grep '*+' | sed 's/x/ /g' | awk '{print $1}' | sort -n | head -1 )/100)*90)" | bc) v=$(echo "scale=0;(($(xrandr | grep '*+' | sed 's/x/ /g' | awk '{print $2}' | sort -n | head -1 )/100)*90)" | bc) SIZE=${h}x${v}

Next we set the default username and password. I have it ask me for my password but I put it in here as an example.

PASSWORD='defaultpassword' USERNAME='administrator' WORKGROUP='workgroup'

In some cases the credentials may be different, so I have a case statement that will cycle through the servers and apply the differences. Depending on your naming schemes you may be able to use regular expressions here to filter out groups of servers.

case "${SERVER}" in *server*) echo "Server ${SERVER}" PASSWORD='work_password' USERNAME='administrator' WORKGROUP='WORKGROUP' ;; *colo*) echo "Server ${SERVER}" PASSWORD='colo_server_password' USERNAME='administrator' WORKGROUP='COLODOMAIN' ;; some_server ) echo "Server ${SERVER}" PASSWORD='some_server_password' USERNAME='some_server_password' ;; *) echo "No match for ${SERVER}, using defaults" ;; esac

Next we use an inbuilt bash command to see if a remote port is open and timeout after one second.

timeout 1 bash -c "echo >/dev/tcp/${SERVER}/${PORT}"

I used to connect to rdp using the program rdesktop, but it is now of limited value due to the fact that there are many open bugs that are not getting fixed. Bugs such as Bug 1075697 - rdesktop cannot connect to systems using RDP version 6 or newer  and Bug 1002978 - Failed to negotiate protocol, retrying with plain RDP . I then switch to using xfreerdp. This is the client that is behind remmina.

You can use xfreerdp /kbd-list to get a list of the available keyboard layouts.

if [ $? -eq 0 ]; then echo "${SERVER}:${PORT} is open" xfreerdp /v:${SERVER} /size:${SIZE} /kbd-type:0x00000409 /t:${SERVER} /d:${WORKGROUP} /u:${USERNAME} /p:${PASSWORD} /a:drive,pc,/ /cert-ignore & else echo "${SERVER}:${PORT} is closed" fi

Next you will need to be sure that your host names are available, either in dns or in your /etc/hosts/ file. For example: server1 server2 server3 coloserver1 coloserver2 coloserver3 some_server

Edit the script to your liking and then put it into your a directory in your path, possibly /usr/local/bash or ~/bin/. You can then make symbolic links to the servers to the bash script, also in a directory in your path, using the command:

ln -s /usr/local/bash/rdp.bash ~/bin/some_server chmod +x ~/bin/some_server

Which links the global rdp.bash script to your personal symlink, and makes it executable.

All that you need to do then is type the name of the server and a rdp screen should pop up.

In our example:

$ some_server

From there your Windows Server session should pop up.

Categories: FLOSS Project Planets

Concert for India’s Environment: Chinmaya Dunster

Sat, 2015-01-10 17:49
By Vasudev Ram

A really good music video by Chinmaya Dunster: Concert for India's Environment. I had first seen it a while ago. Happened to see it again today via a chain of links. Evergreen music and message.

"The video of this concert, blended with interviews with environmentalists, Indian school children reading their own poems on nature and stunning footage of the Indian wilderness, is available free on request at"

- Vasudev Ram - Dancing Bison Enterprises Signup to hear about new products or services from me.

Contact Page

Share | var addthis_config = {"data_track_clickback":true}; Vasudev Ram

Categories: FLOSS Project Planets