Autarchy of the Private Cave

Tiny bits of bioinformatics, [web-]programming etc

    • Archives

    • Recent comments

    Archive for the 'Links' Category

    Interesting and relevant links I found.

    Python: passing by value vs passing by reference

    11th February 2008

    Note: this a collection of scraps, describing how values (de)referencing works in Python, and describing when your variable is either a value or a reference. Primary source of knowledge for this post (also here).

    Python passes references-to-objects by value (like Java), and everything in Python is an object. This sounds simple, but then you will notice that some data types seem to exhibit pass-by-value characteristics, while others seem to act like pass-by-reference… what’s the deal?

    It is important to understand mutable and immutable objects. Some objects, like strings, tuples, and numbers, are immutable. Altering them inside a function/method will create a new instance and the original instance outside the function/method is not changed. Other objects, like lists and dictionaries are mutable, which means you can change the object in-place. Therefore, altering an object inside a function/method will also change the original object outside.

    Immutable variables – such as integers [strings, numerics and tuples are immutables] – are passed by value. That is, if your function accepts some integer argument, you are safe assuming that your function won’t be able to modify your integer. Mutable variables – such as dictionaries and lists – are passed by reference, and so if your function accepts mutable argument, it may modify the contents of that mutable variable outside the scope of the function.

    When doing :
    s = “Hello ”
    s += “World”
    … you are not modifying the string object bound to s, but creating a new string object and binding it to s.

    If using object’s methods within a called function, variable is considered “passed by reference” – it is modified out of the function’s scope. If using assignment on a mutable object, it is created a-new within the function, and global value isn’t modified.

    When you call a function with an arg, a “local variable” is created, which references the object passed as the argument. (well… an entry with the formal parameter name as key and a reference to the object passed in is created in the ‘local’ dict).

    So, rebinding this local symbol does not impact the binding in the caller’s namespace – because the symbol lives in another namespace.

    *But* – and if the object referenced is mutable of course – modifying the object in the function… well, just modifies the object, because it’s the *same* object that is bound to (‘referenced by’, if you prefer) both symbols (the one in the caller’s namespace and the one in the function’s namespace). So yes, the object *is* modified when the function returns.

    Share

    Posted in Links, Programming, Python | 3 Comments »

    Statistics of Google HDDs failures

    11th February 2008

    Failure Trends in a Large Disk Drive Population (or here, if that link doesn’t work)

    Worth reading for any IT guy, especially for people dealing with lots of HDDs.
    Also might be interesting for those, who have Gmail with (now) over 6GiB storage… :)

    Share

    Posted in Hardware, Links | 1 Comment »

    Convert MySQL database from one encoding/collation into another

    8th February 2008

    Most frequent use: convert database from latin1_swedish to utf8_general_ci.
    Original script found at: MySQL and UTF-8.

    Update: the original script had an error, it would generate queries likes this one (note the bold part):

    ALTER TABLE `links` CHANGE `link_rel` `link_rel` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT NULL;

    This is clearly wrong syntax (and logic). I fixed this by making comparison to NULL strict (with three equal signs instead of two):

    // Does the field default to null, a string, or nothing?
    if ($row['Default'] === NULL)

    Update 2: based on comment by banesto, I modified the script; now it does not require specifying the from_collation, it’s sufficient to specify to_collation (which will be used for all the fields and tables). The modified code is:

    if ($row['Collation'] == ” || $row['Collation'] == $convert_to)
    continue;

    Update 3: the long-lasting, re-appearing NOT NULL DEFAULT NULL problem is finally fixed.

    Update 4: incorporated Russ’s fix to skip numeric fields (in order to leave autoincrement values intact).

    Here’s the script itself: (to copy-paste: first click the “Plain text” header)
    Read the rest of this entry »

    Share

    Posted in Links, Notepad, PHP, Programming, Web | 60 Comments »

    Fighting plagiarism

    4th February 2008

    Found this one very informative: 6 steps to stop content theft.

    Also: 5 content theft myths, and why they are false.

    And more links:

    Share

    Posted in Links, Misc, Society, Web | No Comments »

    Ultimate boot CD – diagnostic, testing, and recovery utilities collection

    21st December 2007

    Today, using memtest86, system speed test, hddspeed and some other DOS utilities for diagnosing and testing PC hardware, I decided to put together my own simple bootable utility CD disk. But first, I did some searching to find if something similar exists.

    It does exist – Ultimate boot CD. That CD has numerous freeware testing and diagnosing utilities which will help you – if you are up to some good old (read “small fast”) DOS utilities. And not that old, actually – modern hardware is supported.

    The only modification I’ll do to the Ultimate boot CD will be adding freeware bin/hex viewer/editor. Surely, more utils to come – with original size of just 115MB, there’s plenty of room to add extensions. You can even extend the CD image with non-free software, like Partition Magic.

    P.S. To diagnose and fix software problems – have a look at System Rescue CD.

    Share

    Posted in Hardware, Links, Notepad, Software | 1 Comment »

    Need a computer science paper? Try SCIgen!

    9th December 2007

    Quite an entertaining story:
    SCIgen at wikipedia
    SCIgen tool
    SCIgen blog

    Finally, just a useful resource if you need a shiny name for your brand-new 2.0-beta project: anagram server.

    Share

    Posted in Humour, Links, Science | 1 Comment »

    Windows XP Home Edition: gpedit.msc (group policy) editing via registry

    15th November 2007

    It is possible to install gpedit.msc snap-in for MMC in Windows XP Home Edition. I found the list of necessary files on pagesperso-orange.fr (in French), which also had the archive of all the necessary (again, French) files and the installation batch-file.

    Warning: you proceed at your own risk. If you do not know what you are doing – please don’t :)

    Download (original) French gpedit-pour-xp-home.zip.

    Download English gpedit for windows xp home.zip (also in 7zip archive).

    Here are instructions for manual MMC snap-in installation. Original French-version archive had a batch file which does installation automatically, which I also added to the English archive (gpedinst.bat). But you must manually verify that batch file fits your system before running it! It might be safer to follow the instructions manually.

    • Put these files:

      appmgmts.dll
      appmgr.dll
      fde.dll
      fdeploy.dll
      gpedit.msc
      gpedit.dll
      gptext.dll

      into %SystemRoot%\system32 folder (most often it’s just c:\windows\system32)

    • put these files:

      system.adm
      inetres.adm
      conf.adm

      into %SystemRoot%\system32\GroupPolicy\ADM\ (create if this folder doesn’t exist)

    • finally, run these commands one by one in the CMD window:

      regsvr32 gpedit.dll
      regsvr32 fde.dll
      regsvr32 gptext.dll
      regsvr32 appmgr.dll
      regsvr32 fdeploy.dll

    That should make gpedit.msc callable as Start -> Run -> gpedit.msc.

    Other language versions of the necessary files can be retrieved from corresponding-language installations of WinXP Professional; English version can also be downloaded directly from Microsoft website ( e.g. here , or search for “Group Policy ADM Files” at microsoft.com). Also, you can extract necessary files from available Windows distributions: just don’t forget, that “filename.dl_” is a compressed version of “filename.dll”, and can be uncompressed by using XP-bundled extract command.

    See also this comment for alternative gpedit installation (get the file from badongo first), and also this comment for one more explanation of manual installation.

    Geeks corner:

    1. a comprehensive list of the “Group Policy/User Configuration/Administrative Templates” settings in Windows XP Home Edition
    2. an extremely comprehensive Excel sheet, which maps numerous *.adm-file options to their registry equivalents – Group Policy Settings Reference (PolicySettings.xls). This file is for Windows 2000, Windows XP, and Windows 2003

    Disclaimer: I do not know if modifying (e.g. by adding gpedit) your WinXP HE is a violation of any EULAs. It’s your own responsibility to check this out and comply with any such regulations. Also, be advised that modifying any settings using gpedit.msc on WinXP HE may render some parts of the OS inoperable (in my opinion). You have been warned!

    Share

    Posted in how-to, Links, Notepad, Software | 91 Comments »