Posts

Showing posts from 2015

Taking screen shot on chrome book

Image
To take a screenshot of the entire screen, press the ‘Ctrl’ and ‘Window Switcher’ keys at the same time: To capture some specific area of the the screen on chrome book, press the ' Ctrl' , 'Shift' and 'Window Switcher' combination at the same time On the newer versions of Chromebook you have the option for 'Take screenshot' under 'More tools' drop down in the Chrome Menu. A notification pops up and click on it would take you to the screenshot saved as .PNG under Downloads folder in the File Manager .

Avoid using global/class-level mutable datatypes like list/dicts

Class-level variables that are assigned with mutable datatypes are like global static variables, they refer to the same list or dict and can be modified/accessed via multiple instance or through the class itself, >>> class Foo: bar = [] >>> a, b = A(), A() >>> a.bar.append(10) >>> a.bar [10] >>> b.bar [10] >>> Foo.bar [10] >>> class A: def __init__(self): self.bar = [] >>> a, b = A(), A() >>> a.bar.append(10) >>> a.bar [10] >>> b.bar [] >>> Foo.bar Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: type object 'Foo' has no attribute 'bar' To avoid using the same global list/dict across multiple instances we should avoid initializing class/global variables with a mutable datatypes like list/dict

How to restart networking without DHCP RELEASE on Ubuntu

On Ubuntu systems, there is no more networking service restart option, so users are forced to do ifdown and ifup. But  ifdow n  by default do a DHCPRELEASE causing systems to potentially change IPs on ifup. This would not be a very appreciated sideaffect with automated systems where IPs could change during the lifetime of the system. Following script allows you to restart networking without actually do a DHCPRELEASE, (to avoid the DHCPRELEASE create temporary interfaces with all interfaces set to static and  bring down interfaces using that file, but use the original file to do the bring up the interfaces) # cat ifdownup.sh pkill dhclient && \ sed 's/dhcp/manual/' /etc/network/interfaces > /tmp/interfaces && \ for intf in `cat /etc/network/interfaces | grep inet | cut -d ' ' -f 2`; \ do ifdown $intf -i /tmp/interfaces && ifup $intf; done​

Avoid initializing kwargs in signature as they might not work as expected when you need to pass kwargs from other methods

$ cat test_kwargs . py def m1 ( a , b = 2 ) : print a , b def m2 ( a , b = None ) : ​m1 ( a , b = b ) m1 ( 1 ) m2 ( 1 ) m1 ( 1 , 2 ) m2 ( 1 , 2 ) $ python test_kwargs . py 1 2 1 None 1 2 1 2 A better version of the above methods would be, ​ $ cat test_kwargs . py def m1 ( a , b = None ) : if b is None : b = 2 print a , b def m2 ( a , b = None ) : m1 ( a , b = b ) m1 ( 1 ) m2 ( 1 ) m1 ( 1 , 2 ) m2 ( 1 , 2 ) $ python test_kwargs . py 1 2 1 2 1 2 1 2​

Understanding multiple inheritance and method resolution order in Python

# cat multiple_inheritance.py import inspect class A ( object ): pass class B (A): pass class C (A): pass class D (B): pass class E (C): pass class F (D, E): pass print inspect.getmro(A) print inspect.getmro(B) print inspect.getmro(C) print inspect.getmro(D) print inspect.getmro(E) print inspect.getmro(F) # python multiple_inheritance.py (< class ' __main__ .A '>, <type ' object '>) (< class ' __main__ .B '>, <class ' __main__.A '>, <type ' object '>) (< class ' __main__ .C '>, <class ' __main__.A '>, <type ' object '>) (< class ' __main__ .D '>, <class ' __main__.B '>, <class ' __main__.A '>, <type ' object '>) (< class ' __main__ .E '>, <class ' __main__.C '>, <class ' __main__.A '>, <type ' object '>) (< class '

In Perl keys get defined if they are accessed as hash, without checking for their existence

In the following code snippet, 'c' is not as key in 'foo' but is set to {} when the last check for foo->c->0 is called. / tmp ( ) $ cat foo . pl use strict ; use warnings ; use Data : : Dumper ; sub abcde { my $foo = { 'a' = > 1 , 'b' = > 2 } ; print Dumper ( $foo ) ; if ( exists $foo - > { c } & & defined $foo - > { c } - > { 0 } ) { print "C is defined" ; } print Dumper ( $foo ) ; if ( defined $foo - > { c } and defined $foo - > { c } - > { 0 } ) { print "C is defined" ; } print Dumper ( $foo ) ; if ( defined $foo - > { c } - > { 0 } ) { print "C is defined" ; } print Dumper ( $foo ) ; } abcde ( ) ; / tmp ( ) $ perl foo . pl $VAR1 = { 'a' = > 1 , 'b' = > 2 } ; $VAR1 = { 'a' = > 1 , 

eventlet.GreenPool.waitall() just logs the exception but doesn't raise them

waitall() method in eventlet.GreenPool doesn't raise exceptions but just logs them, whereas in case of wait on the greenthread returned by spawn from evenlet.GreenPool raises the exception. # cat foo . py import eventlet pool = eventlet . GreenPool ( 1 ) def foo ( ) : raise ValueError gt = pool . spawn ( foo ) try: pool . waitall ( ) except Exception , e : print " pool.waitall Exception raised: %r " % e try: gt . wait ( ) except Exception , e : print " gt.wait() Exception raised: %r " % e # python foo . py Traceback ( most recent call last ) : File " /usr/lib/python2.7/site-packages/eventlet/hubs/hub.py " , line 346 , in fire_timers timer ( ) File " /usr/lib/python2.7/site-packages/eventlet/hubs/timer.py " , line 56 , in __call__ cb ( * args , * * kw ) File " /usr/lib/python2.7/site-packages/eventlet/greenthread.py " , line 194 , in main result = functi

Using repr instead of str for parameters (not objects) for disambiguity

>>> for e in ( 0 , "0" , None , "None" , 1.23 , "1.23" , [ 1 , 2 ], { "foo" : "bar" }): ... print " %r " % e ... 0 '0' None 'None' 1.23 '1.23' [ 1 , 2 ] { 'foo' : 'bar' } When %s is used to interpolate to string there could be a bit of ambiguity introduced. >>> for e in ( 0 , "0" , None , "None" , 1.23 , "1.23" , [ 1 , 2 ], { "foo" : "bar" }): ... print " %s " % e ... 0 0 None None 1.23 1.23 [ 1 , 2 ] { 'foo' : 'bar' }