-
mongorestore: ERROR: root directory must be a dump of a single collection when specifying a collection name with –collection
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 objectsquite obvious in retrospect given the error message, but the internet didn't know the answer yet and there isn't much documentation about mongorestore.
-
MySQL Permission Errors After Moving Datadir
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
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)
-
example of MQL/freebase in Python
first, easy_install freebase
from freebase.api import HTTPMetawebSession, MetawebError mss = HTTPMetawebSession('www.freebase.com') bob = mss.mqlread([{ 'type':'/music/album', 'artist':'Bob Dylan', 'name':None }]) for album in bob: print album['name']
Or with, metaweb.py which for some reason doesn't seem to be available via easy_install, but does seem to be a bit more advanced and less code (example from MQL Reference):
import metaweb bob = metaweb.read([{ 'type':'/music/album', 'artist':'Bob Dylan', 'name':None }]) for album in bob: print album['name']
-
Search terms as initial delicious bookmark tags
I've patched my copy of the delicious firefox extension so that when you bookmark a page which you got to from a google/yahoo search, those search terms are automatically included as the first set of tags for the post. This only happens if the search is in your recent history (must be able to get back to the search page with no more than 2 back button clicks from the page you are bookmarking).
I've posted that patch to the extension's yahoo group, so it will hopefully end up in the official extension (as a non-default option). In the meantime, here is the patch and the modified extension (original version 2.1.018). Note that I didn't change the name of modified extension so that it overwrites your old delicious plugin. However, this also means that this version will be overwritten by any new official versions released. I'll figure out a more clean solution if the patch doesn't get accepted.
NOTE: This feature must now be enabled via preferences
-
Single Instance Application with command line interface
I wanted a python gtk application to open a new window on its first execution and then have subsequent executions send their command line arguments to the initial application rather than starting a new one. Here is the template which provides that functionality:
download singleinstanceapp.py
""" This will only spawn one gtk application at a time. If this command is executed while an instance is already running, the command line arguments are sent to the already running application. """ import sys import pygtk pygtk.require('2.0') import gtk import socket import threading import SocketServer class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler): def handle(self): data = self.request.recv(1024) cur_thread = threading.currentThread() # do something with the request: self.server.app.label.set_label(data) # could instead of the length of the input, could return error codes, more # information (if the request was a query), etc. Using a length function # as a simple example response = 'string length: %d' % len(data) print 'responding to',data,'with',response self.request.send(response) class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer): stopped = False allow_reuse_address = True def serve_forever(self): while not self.stopped: self.handle_request() def force_stop(self): self.server_close() self.stopped = True self.create_dummy_request() def create_dummy_request(self): client(self.server_address[0], self.server_address[1], 'last message for you') def client(ip, port, message): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((ip, port)) sock.send(message) response = sock.recv(1024) print "Received: %s" % response sock.close() def start_server(host, port): server = ThreadedTCPServer((host, port), ThreadedTCPRequestHandler) ip, port = server.server_address # Start a thread with the server -- that thread will then start one # more thread for each request server_thread = threading.Thread(target=server.serve_forever) # Exit the server thread when the main thread terminates server_thread.setDaemon(True) server_thread.start() return server class SingleInstanceApp: def destroy(self, widget, data=None): self.server.force_stop() gtk.main_quit() #exit(1) # I'm sorry but mozembed is making a huge pain in my ass def __init__(self, server): self.server = server # create a new window self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_default_size(300,30) self.window.connect("destroy", self.destroy) self.label = gtk.Label("hello world") self.window.add(self.label) self.window.show_all() # and the window self.window.show() def main(self): gtk.gdk.threads_init() gtk.main() if __name__ == "__main__": # pick some high port number here. Should probably put this into a file # somewhere. HOST, PORT = "localhost", 50010 server = None try : client(HOST, PORT, ' '.join(sys.argv)) print 'an insance was already open' except socket.error : exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() if exceptionValue[0] == 111 : print 'this is the first instance' server = start_server(HOST, PORT) else : # don't actually know what happened ... raise app = SingleInstanceApp(server) server.app = app app.main()
The first execution of this script starts an asynchronous server on a predetermined port. This port is checked each time the script is run to see if another instance has already been started. If it has, the command line arguments are sent to the existing instance which can react to them however you want.
download singleinstanceapp.py
-
python gtk close on escape key
I wanted a gtk window to close when the escape key is pressed:
import pygtk pygtk.require('2.0') import gtk class CloseOnEscape : def keypress(self, widget, event) : if event.keyval == gtk.keysyms.Escape : gtk.main_quit() def __init__(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("key-press-event", self.keypress) self.window.show() def main(self): gtk.main() if __name__ == "__main__": app = CloseOnEscape() app.main()
-
JQuery + Greasemonkey
Had to look around to figure out how to include jquery in greasemonkey. Should have just guessed this first; Just use the @require, and your standard jquery document ready code. Heres my template anyway.
// ==UserScript== // @name JQuery Template // @author Zach Dwiel // @description Provide a basic template for using jquery in greasemonkey // @include *://* // @require http://code.jquery.com/jquery-latest.js // ==/UserScript== $(document).ready( function() { // your jquery code here }
-
Controlling Samples by Spitting Them
Last night, Nate and I were able to sucessfully and intuitively control up to 3 or 4 individual drums based on different sounds vocalized into a mic. The bass drum would play when 'oooh' was sung, a snare when 'eee' was sung and a cymbal when 'aaah' was sung. There are still some kinks in the system, but as a proof of concept, it works fairly well. The mapping between input sound and MIDI event are learned in real time so you are not restricted to different vowel sounds. The 3 distinguishing sounds could have just as easily been a clap, growl and whistle. The code: fftknn.
-
List of bound variables in Python (excluding variables from modules)
I've heard multiple people ask for a way to see a list of locally bound variables in python. It would be especially useful for use in the interactive prompt. They like the interface that matlab gave them and this is one of the features they miss the most. I'm not sure what the best way to accomplish this is, but I've coded together one solution. Here is an example use case:
from boundvars import boundvars def test() : a = 1 b = 2 assert boundvars(vars()) == {'a': 1, 'b': 2} import urllib assert boundvars(vars()) == {'a': 1, 'b': 2} x = 1 y = 2 boundvars(vars()) = {'y': 2, 'x': 1, 'test': <function test at 0x0000>} from urllib import * boundvars(vars()) = {'x': 1, 'y': 2, 'test' : <function test at 0x0000>} test()
As you can see, boundvars is called with vars() as a parameter which then returns a dictionary of locally bound variables. If boundvars.ignore_external_functions is set to False, the first two calls which show x and y bound would also show the variable boundvars. If it is set to True, then all values which are functions not defined in the __main__ module are excluded from the output dictionary. The latest code can be downloaded below. Installation is as simple as:
$ wget http://dwiel.net/wp-content/uploads/2008/10/boundvars.tar.gz
$ tar -xvf boundvars.tar.gz
$ cd boundvars
$ sudo python setup.py install
Its not big enough to warrant a project at a code hosting service so its just provided here. If you know of any way that this module could be improved (or avoided by some cool function I don't know about) please, let me know!
boundvars.tar.gz (version 0.1)
