There is not such a thing as a stupid question

I hope we all agree on this: “There is not such a thing as a stupid question”. Only stupid answers exist a lot.

imageAnyway, my first reaction when reading that question on quora.com was: what a stupid question: “Can you write a program for adding 10 numbers?” !

I am still not sure though what the intension was behind that question, nevertheless it yielded a good and interesting discussion thread

  • with a lot of code samples
  • with a lot of fun, see this answer or this one
  • with some interesting discussion about how to phrase useful requirements for software development ( “what did he mean by ‘adding’ !”, see this answer )
  • with some interesting way to deal with those requirements: instead of firing up your IDE right away, think how else the problem can be soled; see this answer.

Thus, nice evidence that every question makes some sense, no matter how stupid it sounds initially.

image from pexels

 

Advertisements

How to print ipython notebooks without the source code

This is something I really need to create sort of standard reports based on ipython notebooks which should not contain the source code and input prompts of ipython cells: the capability to print ipython notebooks without the source code.

There are ways to do that as discussed here on stackoverflow but all these methods involve adding some ugly code to your ipython cells or tweaking the way the ipython server is started ( or running nbconvert ) which might be out of your control if you use some cloud offering like Data Science Experience on IBM Cloud and not your own ipython installation.

Here is how I achieve this:

I simply download my notebook as html.

Then I run this python script to convert that html file so that prompts and code cells are gone:

FILE = "/somewhere/myHTMLFile.html"

with open(FILE, 'r') as html_file:
    content = html_file.read()

# Get rid off prompts and source code
content = content.replace("div.input_area {","div.input_area {\n\tdisplay: none;")    
content = content.replace(".prompt {",".prompt {\n\tdisplay: none;")

f = open(FILE, 'w')
f.write(content)
f.close()

That script bascially adds the CSS ‘display: none’ attribute for all divs of class ‘prompt’ or ‘input_area’.

That tweaked html page now easily can be printed into a pdf file for me to get my standard report without any code or input prompt cells.

If you know what you are doing you can add more CSS tweaking, like e.g. this one, to that Python code:

# For dataframe tables use Courier font family with smaller font size
content = content.replace(".dataframe thead","table.dataframe { font-size: 7px; font-family: Courier; }\n.dataframe thead")

To figure out things like that I used Firefox Inspector to determine class names of DOM elements ( like e.g. ‘div.data_frame’ is used to display dataframe tables in ipython ) and some CSS knowledge to achieve the manipulations I find useful, like reducing the font size of tables in order to make them fit on pages printed with portrait orientation.

How I installed Teamviewer 12 on Linux Mint 18.2

 

Here is how I installed Teamviewer 12 on Linux Mint 18.2 64bit:
1. Downloaded Debian package from here
2. Located file in Downloads folder, right-click, “Open with GDebi Package Installer”
3. Ran into issue about missing dependency: libdbus library
4. Ran this as recommended elsewhere, didn’t help: sudo apt-get install -f
5. Found this useful discussion thread and basically ran the first two commands recommended, then re-attempted install through package manager successfully.

sudo dpkg --add-architecture i386
sudo apt-get update

 

Scrapy

Yesterday during another boring phone call I googled for “fun python packages” and bumped into this nice article: “20 Python libraries you can’t live without“. While I already knew many of the packages mentioned there one caught my interest: Scrapy. Scrapy seems to be an elegant way not only for parsing web pages but also for travelling web pages, mainly those which have some sort of ‘Next’ or ‘Older posts’ button you wanna click through to e.g. retrieve all pages from a blog.

I installed Scrapy and ran into one import error, thus as mentioned in the FAQ and elsewhere I had to manually install pypiwin32:

pip install pypiwin32

Based on the example on the home page I wrote a little script to retrieve titles and URLs from my German blog “Axel Unterwegs” and enhanced it to write those into a Table-Of-Contents type HTML file, after figuring out how to overwrite the Init and Close method of my spider class.

import scrapy
header = """
<html><head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
</head><body>
"""
footer = """
</body></html> 
"""

class BlogSpider(scrapy.Spider):
 name = 'blogspider'
 start_urls = ['http://axelunterwegs.blogspot.co.uk/']
 
 def __init__(self, *a, **kw):
   super(BlogSpider, self).__init__(*a, **kw)
   self.file = open('blogspider.html','w')
   self.file.write(header)

 def parse(self, response):
   for title in response.css('h3.post-title'):
     t = title.css('a ::text').extract_first()
     url = title.css('a ::attr(href)').extract_first()
     self.file.write("<a target=\"_NEW_\" href=\"%s\">%s</a>\n<br/>" % (url.encode('utf8'),t.encode('utf8')))
     yield {'title': t, 'url': url}

   for next_page in response.css('a.blog-pager-older-link'):
     yield response.follow(next_page, self.parse)
 
 def spider_closed(self, spider):
   self.file.write(footer)
   self.file.close()

Thus, here is the TOC of my German blog.

I tried to get the same done with my English blog here on WordPress but have been struggling so far. One challenge is that the modern UI of WordPress does not have any ‘Older posts’ type of button anymore; new postings are retrieved as soon as you scroll down. Also the parsing doesn’t seem to work for now, but may be I figure it out some time later.

 

 

Victim of some Facebook Phishing

Facebook.jpgToday I became a victim of some Facebook credentials phishing. I received an instant message from one of my Facebook contacts containing a video. When trying to play the video I got prompted to enter my Facebook credentials. After having done this … my credentials went into the wrong hands. And it became obvious that this video was not from my contact.
This happened on my smartphone. I believe on a PC this never would have happened to me because there are many means to cross-check urls and links and other things to detect a phishing. On a mobile device it is much harder. The login screen really looked authentic.
The result was: many dubious videos sent to all my contacts. In the meantime Facebook right away locked my account because they detect suspicious behavior. I also ( too late ) read the warning from my contact in Facebook from whom I had received the malicious message that her account had been compromised.
I unlocked my Facebook account by setting a new password and acknowledging a confirmation code; Facebook did a quiet good job to detect the problem and take me through steps to resolve. I then posted warning on my Facebook page and also sent warning messages to most of my contacts; luckily I have less than 100 Laughing
Interestingly my Chrome browser on one of my laptops later on insisted in downloading a Malicious Software Removal tool from Facebook, which right away was blocked by my virus scanner. This happened while Facebook was working fine in my Firefox browser. I found this very helpful hint here ( see comment # 3 in this lengthy article ) how to overcome this strange means and enable Facebook again in my Chrome browser.

Longest internet outage you ever experienced ?

In March my internet connection provided by Vodafone was broken for 6 days. That means: no phone, no internet @ home, for a long period of time. Luckily I have a Samsung Galaxy S5 Mini with LTE and hotspot capability and Vodafone gave me free 50 GByte data volume when I called them to address the problem.

Nevertheless, what duration of an internet outage can be tolerated ? I have read articles in the meantime saying that an outage of 3 working days needs to be tolerated, but anything beyond qualifies you for asking for compensation or might give you the right to cancel your contract in advance; typical contracts here in Germany last 2 years and can be cancelled three month before they end.

So, what is the longest internet outage you ever experienced at home and what did you do about this ?

And: how many of those outages can be tolerated per year ? I am asking this because since yesterday my line is down again. I called Vodafone and after keying in my phone number a voice told me something about a global problem.

1900 001337
1900 001337” by StephenMitchell.

In former times when we had an analog phone at home I don’t recall that it ever failed, it always had been available for years and years without a single failure. It just worked.
Modern phones use voice over ip and thus need the internet to work. And internet connections turn out to be quiet unreliable these days, as I am experiencing myself;  also I hear that the line in the house of my mother in law doesn’t work anymore since last week.

In former times we had an analog radio in our kitchen and it always worked. Nowadays we have an ip radio and of course it doesn’t work without an internet connection. Thus: no radio this morning.

Modern technology is fascinating, but much more fragile than older technology. If I think about the Internet Of Things on one end and the increasing amount of activities of criminals on the other end to sabotage that technology, which already is kind of fragile due to its complexity, I get a bit nervous about the future.

The indispensible man

everywhereonce.com is my favorite travel blog currently I read again and again, actually I try to catch up with their postings and made it to September 2012 so far. It is about a couple quitting their jobs and their home in 2010 and started traveling … ultimately to every place on the world to see it at least once.

If the Devil’s greatest accomplishment is convincing the world he doesn’t exist, employers’ greatest accomplishment is convincing workers they are indispensible.

They are sort of freelance writer, so to some extend they are able to make some money while being on the road. And regarding their home: legally wise they need to be registered somewhere and it looks like they have chosen Texas as their official home land.

Anyway, one article catching my attention is: “The indispensible man”.

How come that the majority of workers take just one third of their vacation days and feel guilty when being away from the office ? How come so many people check their business e-mails while being in holidays or on vacation ?

Because they think they are indispensible. Which is not true, as Brian nicely writes in this blog:

Long after we’re gone, the world will continue to move on as it always has – completely indifferent to our passing. After a short period of adjustment, our life’s work will be picked up by someone else. They too will be made to feel irreplaceable up until the point they are replaced, either out of necessity or convenience