Thursday, October 16, 2014

Ultimate PC prank. Linux version.

There's so much fuss recently about Shellshock and bash in general.
With all that we seem to forget how many great opportunities bash gives us.

Let's say that you friend left his computer screen unlocked, what would you do? Change wallpaper to David Hasselhoff or language to German?
That's just too easy.

But if you'll do something like that:

function cat() { /bin/cat $@ | /usr/bin/cowsay -n; };

World will become a far better or at least funnier place ;-)

cat /etc/fstab
 _______________________________________________________________________________________________
/                                                                                               \
| #                                                                                             |
| # /etc/fstab                                                                                  |
| # Created by anaconda on Thu Jul 31 15:13:00 2014                                             |
| #                                                                                             |
| # Accessible filesystems, by reference, are maintained under '/dev/disk'                      |
| # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info                   |
| #                                                                                             |
| /dev/mapper/vg_oc7324631563-lv_root /                       ext4    defaults        1 1       |
| UUID=9e5593fd-4eb7-4fc1-b099-75c93591eb36 /boot                   ext4    defaults        1 2 |
| /dev/mapper/vg_oc7324631563-lv_swap swap                    swap    defaults        0 0       |
| tmpfs                   /dev/shm                tmpfs   defaults        0 0                   |
| devpts                  /dev/pts                devpts  gid=5,mode=620  0 0                   |
| sysfs                   /sys                    sysfs   defaults        0 0                   |
\ proc                    /proc                   proc    defaults        0 0                   /
 -----------------------------------------------------------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||


Thursday, September 25, 2014

NFS mount in rescue mode - unknown error

Recently, I've encountered an error when trying to mount NFS share in RedHat rescue mode.
The error was "uknown error 524".
Fix for this is trivial, just start portmap and rpc.idmapd and then just mount.nfs whatever wherever ;-)

Tuesday, January 31, 2012

How to check if variable exists in Python.

This is a pretty common problem as Python does not offer any variable checking mechanism and when we try to use non defined variable it will throw an NameError exception.
We can do try/expect way but it is not very useful, instead I propose to declare a Perl-style function.

def defined(var):
    return var in globals()


if defined('temp'):
    print('defined')
else:
    print('undef!')


We have to quote a variable but that shouldn't be a problem. This isn't very stylish or probably the best way to do it, but it works like a charm.

Wednesday, January 18, 2012

SOPA and Wikipedia

We all hate SOPA act but we all love Wikipedia.

I understand that Wiki is striking but I also understand people who needs it, so if you need to access Wikipedia under blackout do this:
1) Open your wiki page like you would normal do but before it's fully loaded (text and pictures are visible) hit the "ESC" button on your keyboard like crazy and it should stop the blackout ;-)

Enjoy!

Friday, January 21, 2011

Ruby on Rails and encoding

Sometimes people just don't use UTF-8. I could understand the Chinese and Japanese folks but why Polish webmasters still use ISO-8859-2 ? I wonder...

 Anyway recently my friend found a bug in my app, it's quite tricky. I have an app that takes some strings from html document and then creates an form and submit that form to the server. Everything works flawlessly until we use IE on non-utf8 encoded page.

 Because IE doesn't support accept-charset form attribute data is sent in the original encoding which is ISO-8859-2 in my case. My application default encoding is utf8 so when data arrives to the app it "thinks" that it's encoded in utf8 which is obviously wrong. So I got char \xF3 which is "ó" (this letter is by the way the same as "u" but we use both to complicate our language and make it l33t onRy! ;-) in Polish and it is a "invalid byte sequence in UTF-8" and my app crashes :D Soooooo great :D To crash an rails app just  send invalid utf8 char to it !

Solution for this isn't simple. People tells about using iconv to replace/ignore/blank out the trouble making butes but I want my "ó" ! Another way is to detect the encoding and then do string.force_encoding(detected_encoding).encode!("UTF-8") which works but the problem is that in ruby 1.9 we do not have any good, working encoding detection method.
I've crawled the internets for hours and found only chardet gem (UniversalDetector) which fails to work under ruby 1.9 rails 3.0.3 and rchardet which also doesn't work but some awesome guy ported in to 1.9 but it still doesn't solve my problem and crashes when trying to detect encoding of my string !
So finally I wrote a little function, it's not perfect and it will eat letters from a string if we guess the wrong encoding, but it should work for most latin sites.

    def vs(s)
      if s.to_s.valid_encoding?
        return true
      else
        begin
          s.force_encoding('ISO-8859-2').encode!("UTF-8")
        rescue ArgumentError
        ensure
          c = Iconv.new 'UTF-8//IGNORE', 'UTF-8'
          s.replace c.iconv(s.dup + '  ')[0..-2]
        end
      end
    end


Just have to remember, it's not a solution just ugly workaround