RSS feed
  • MySQLdb: TypeError: %d format: a number is required, not str

    Posted on January 31st, 2011 No comments

    I was getting this error message from MySQLdb:

    TypeError: %d format: a number is required, not str

    The error message was the result of this code:

      assert type(gateway_id) == int
      sql = """
        SELECT meter_id
        FROM mtus
        WHERE gateway_id = %d
          AND name = '%s' """
      conn = mysql_connect()
      cursor = conn.cursor()
      cursor.execute(sql, (gateway_id, name))
      ret = cursor.fetchone()
      cursor.close()

    It turns out, execute converts all the arguments to SQL literal values. reference All %Xs should be %s and there shouldn't be any quotes around them. MySQLdb takes care of the string escaping too.

    Other Causes:


    For those of you arriving here from a search and are not having problems with MySQL, the reason for this error is that a string was passed into a format where a number was expected:

    # throws the TypeError:
    message = "%d seconds until done" % "three"
    # works:
    message = "%d seconds until done" % 3
  • Welcome

    Posted on December 2nd, 2010 No comments

    Hello, this is where I post content that I want to share. Most of it is simple information about programming problems I've run into. Hopefully there will be more posts about the house that I'm building on the land that we're buying with a new cooperative we're starting in Bloomington Indiana!

  • Rails Headers

    Posted on October 4th, 2010 No comments

    You can access header values from rails from the request.env hash. request.env contains a lot of other non HTTP header values. The header name is a bit transformed too:

    • prepended with HTTP_
    • converted to uppercase
    • dashes converted to undersocres
    • ... more?

    Example:

     
    curl -H 'x-custom-value: foo' http://example.com/
     

    can be accessed in rails with:

     
    request.env['HTTP_X_CUSTOM_VALUE']
     
  • ruby rescue error message example

    Posted on September 20th, 2010 2 comments
    begin
      raise "this is an error message"
    rescue Exception => e
      # prints "this is an error message"
      puts e.message
      # or if you want the entire error message with stack trace and all:
      puts "failed sending weekly power usage to house: #{$!}"
    end
  • ImportError: No module named controllers.index

    Posted on September 12th, 2010 No comments

    Fix: create empty file: appname/appname/controllers/__init__.py

    Anytime I tried to load a page in my pylons app, I received the error message: ImportError: No module named controllers.index I had just deleted all of the .pyc files because I was getting wrong magic number errors, and somehow this problem resulted.

  • mongorestore: ERROR: root directory must be a dump of a single collection when specifying a collection name with –collection

    Posted on April 21st, 2010 1 comment

    mongorestore wants the specific collection's filename rather than the entire database's dump folder:

    dwiel@dwiel$ mongodump -d db -c variables -o ../backups/1
    connected to: 127.0.0.1
    DATABASE: db to ../backups/1/db
            db.variables to ../backups/1/db/variables.bson
                    3 objects

    dwiel@dwiel$ mongorestore -d db -c variables --drop ../backups/1
    ERROR: root directory must be a dump of a single collection
           when specifying a collection name with --collection
    usage: ........

    dwiel@dwiel$ mongorestore -d db -c variables --drop ../backups/1/db/variables.bson
    connected to: 127.0.0.1
    ../backups/1/db/variables.bson
            going into namespace [db.variables]
            dropping
            3 objects

    quite obvious in retrospect given the error message, but the internet didn't know the answer yet and there isn't much documentation about mongorestore.

  • Introducing Quiqi

    Posted on February 16th, 2010 No comments

    Quiqi is a greasemonkey script and firefox plugin which shows you quick answers to your search queries inline and unobtrusively in Google searches. Quick answers are provided by users, editable by anyone.

    Some example answers (so far mostly answers to programming questions):


    ruby string to int -> str.to_i
    apt-get ab -> apt-get install apache2-utils
    jquery checkbox status -> .is(\':checked\')
    js string to int -> parseInt(str)
    usb 2 speed -> 480Mbps
    javascript array copy -> new_copy = original.slice()
    php referrer -> $_SERVER['HTTP_REFERER']
    water couscous -> 1 1/2:1 water to couscous
    when to plant thyme -> outside: 2 weeks after average last frost or when soil is ≥ 70° inside: 8 weeks before last frost
    error: ‘memcpy’ was not declared in this scope -> #include </cstring>

    And an example screen shot. Notice how the answer isn't provided in the excerpted content.

    Example 1

  • Howto Replace a Screen Invertor on a Dell Inspiron 1520

    Posted on December 19th, 2009 37 comments

    I have a Dell Inspiron 1520 which started to get a whining noise right under the DELL logo below the screen right in the middle. It would change pitch depending on how bright the screen was set at. I replaced the inverter which cost me $15 on ebay. The process was fairly simple but I took more things apart and made things generally more difficult on myself than I needed. Here is the most simple way to repair your inverter on a Dell 1520 Inspiron laptop.

    • Remove the plate covering the power button and numlock/capslock keys. This can be done by twisting a screwdriver under the little slot on the top right hand side of the cover.
    • Remove the frame around the screen. Do this by removing the 6 little pads and and stickers covering the screws to remove the frame from the screen. There is one in each of the corners and two near the center/top. Unscrew these screws. To remove the screen cover frame you will need to twist and pry a little bit near the hinges. Don't be afraid it does require some force.

      Once it is removed it should look like this:

      Screen with frame removed

    • With the frame off, remove the screws holding the screen to the lid. There are some that screw down from the top and other that screw into the side of the screen, just look around. Next, remove a couple screws holding the microphone/webcam board above the very top of the screen. This will allow you to safely move the entire screen and get to the inverter. Once you have done this, you can open your laptop lid all of the way so it is almost flat and move the screen and webcam board so they are flat on the keyboard. It should look like this:

      Screen and camera on keyboard

    • Replace the Inverter. At this point you should be able to easily get to the inverter which is between the hinges below the screen. There are two cables to unplug. One has a blue ribbon to pull on and the other a white connector to pull out.
    • Once you've switched them out, put everything back together and you're done.

    It took me a long time to realize that if I removed the screws to the microphone/webcam board it would move with the screen which led to lots of problems trying to get to the inverter while the screen was still attached to the lid. That is really the only trick.

    Good luck!

  • MySQL Permission Errors After Moving Datadir

    Posted on November 11th, 2009 No comments

    I wanted to make space on my root partition and so moved my mysql data dir to /home/mysql in /etc/mysql/my.conf and received the following errors:

    dwiel@dwiel:~$ sudo mysqld
    091111 20:39:16 [Warning] Can't create test file /home/mysql/dwiel.lower-test
    091111 20:39:16 [Warning] Can't create test file /home/mysql/dwiel.lower-test
    091111 20:39:16 [Note] Plugin 'FEDERATED' is disabled.
    mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
    091111 20:39:16 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
    091111 20:39:16 InnoDB: Operating system error number 13 in a file operation.
    InnoDB: The error means mysqld does not have the access rights to
    InnoDB: the directory.
    InnoDB: File name ./ibdata1
    InnoDB: File operation call: 'open'.
    InnoDB: Cannot continue operation.

    The problem was with apparmor. It was restricting mysql from reading and writing to /home/mysql. To correct this I edited the file /etc/apparmor.d/usr.sbin.mysqld and added:


    /home/mysql r,
    /home/mysql** rwk,

    to the end of the file. Then restarted apparmor:


    sudo /etc/init.d/apparmor restart

    and then restarted apache with no problem

  • Build tolua++ files with makefile

    Posted on July 31st, 2009 No comments

    Here is how you can have your makefile build your tolua++ .cpp and .h files for you. It should work for plain tolua also.

    TOLUA = tolua++5.1
     
    tolua_%.cpp tolua_%.h : %.pkg
    	$(TOLUA) -o $(@:%.h=%.cpp) -H $(@:%.cpp=%.h) $<

    this will generate tolua_file.cpp and tolua_file.h files from corresponding file.pkg files anytime they the .cpp or .h file is depended on somewhere else in the file. In my case I just added tolua_file.o to my list of objects. Here is the full makefile for the project which required this - for reference:

     
     
    # LINUX
    LIBLUA=lua5.1
    # MAC OSX
    #LIBLUA=lua
     
    # LDFLAGS=-arch x86_64
    OBJS = swarm.o group.o scene.o vmath.o tolua_group.o tolua_swarm.o tolua_vmath.o
    CXX = g++
    CXXFLAGS = -Wall -c -O2 `sdl-config --cflags`
    LDFLAGS = -Wall `sdl-config --libs`
    INCLUDES = -I./include -I/usr/include/lua5.1 -I/opt/local/include
    LIBS = -L./lib -lANN -lGL -lGLU -llo -ltolua++5.1 -l$(LIBLUA)
    TOLUA = tolua++5.1
     
    tolua_%.cpp tolua_%.h : %.pkg
    	$(TOLUA) -o $(@:%.h=%.cpp) -H $(@:%.cpp=%.h) $<
     
    %.o: %.cpp
    	$(CXX) $(INCLUDES) $(CXXFLAGS) -c $< -o $@
     
    # the executable
    swarm: $(OBJS)
    	$(CXX) $(LDFLAGS) -o $@ $^ $(LIBS)
     

    download