I finally found the mystery error that I've been trying to figure out for a while now. The issue was the dreaded too many file descriptors open. This was caused by not closing the pipe() file descriptors from the parent. I also noticed that handing each instance of packjpg the maximum number of files it can take leads to problems. I guess this is also a cause of "too many file descriptors open", so I have limited the number of files handed to each instance of packjpg to 40. The entire program now runs to completion using my Photos library as a (quite large) test data set!
Adding header file that I forgot to add last time around. I also finished up a multithreaded version of the make random nodes script that can create 1 million nodes in ~20 seconds.
Adding preliminary code for making random nodes.
Fixing the bug I discovered yesterday... I meant to use rfind() instead of find(). I should be ready for another full test.
WIP commit, stashing these debugging changes so I can go mobile.
Finished up the changes to make argv a std::vector instead of a regular array. I also implemented the changes to control the size of argv based on system configuration and potentially spawn packJPG multiple times in order to handle a very large number of files. I ran a test on my Photos library and it sort of worked but I ran into some issues that I still need to diagnose.
WIP commit. I started converting the argv list to a std::vector and adding logic to make sure it does not exceed the maximum argv size.
Adding initial CMakeLists.txt. This version only builds PCA, it does not (yet) build packJPG as a subproject.
Removing accidentally added object file and adding a .gitignore file to prevent me from accidentally adding another one in the future.
Adding an optimized version of the packJPG source to the source tree for this utility since it is entirely dependent on packJPG. I started to modify the Makefile but really I shoud just use CMake. I'll work on that next.
Adding some minor edits along with a bit of debug code.
Adding proper option parsing and some general improvements. I've added an option for decompression but I still need to implement it.
A tiny bit of cleanup from my previous commit...
I figured out a somewhat silly, but highly effective way do progress reporting. The basic idea is that we know the output file names and the exact order in which they will appear. Therefore if output X+1 exists on the file system it means that output X is already complete. Now the worker thread polls the file system waiting for the output files to appear and then processses them instead of waiting until the forked subprocess terminates. In basic testing it appears that this mechanism is about the same speed as the previous version that does not include progress reporting. This implementation is cross platform and doesn't suffer from the problems of inotify (Linux only) or kqueues (BSD/Mac OS equivalent of inotify that requires an open file descriptor for each monitored file). I still need to implement input option parsing and a decompress mode so I can do proper testing.
Well I fixed my bizzarre problem last night. It turns out that I was building the argv list for each forked process from the main input file list instead of from the sub list passed to each thread. Now PCA runs in a much more stable fashion. Next I'd like to add some sort of progress reporting and also decompress support. I had the idea of using inotify on the output files (since their names are known a priori) however inotify is Linux only and I haven't yet found a drop in replacement for Mac OS.
Adding my initial PCA work. This project depends on packJPG. I see intermittent issues and I'm not sure if it is caused by my code or by the packJPG code.
Correcting memory leak cause by not calling sqlite3_finalize.
Updating the templatized query PoC to support the case where integer or float type columns return NULL and should be treated as 0 and 0.0 respectively.
Another minor tweak to the makefile to add the useful "-f" flag to rm so that it doesn't puke if the file(s) you're attempting to remove don't exist.
Minor tweak to makefile to delete the executable on clean.
Adding a boolean helper function to my proof-of-concept.
After much contemplation I realized that my previous approach to solving this execute query template function problem was more wrong than right. Several days of staring at and reading about variadic templates later I figured out the correct way to accomplish my goal.
I finally got back to working on this POC, and I was able to get it mostly working. The only issue right now is that the template magic is attempting to create code for which the types don't match and don't cast decay nicely. That is if you try to assign a std::string to a tuple. Hopefully I can fix this with a bit of massaging.
Modifying my support scripts after upgrading phalanx.
Minor updates to the checker script to include full paths for the utilities that it calls.
Merge branch 'master' of /home/dsorber/trac/projects/headquarters/repo
Adding a bit of color to the display script. Also making some updates for the refreshly reinstalled server.
Making the compressor side multithreaded.
Improvements to the lepton wrapper script, developed on Mac OS.
Created basic lepton wrapper script.
Adding client-side security cam script.
Adding a very simple unix domain socket example client and server.
Fixing a silly bug where I renamed a function as a variable in my checker.py script.
Adding the first version of my "checker" script.
Adding configuration for saga and compeltely unrelated preproc script.
Adding the "make SSH secure" script I wrote based on the recommendations from that web page which I should probably cite in the script...
Fixing a minor issue I found where "df -h <device file>" no longer returns the information for the specified device file. Instead it seems to return udev for /dev/sda1. Anyway, I fixed the issue by piping the output of df to grep.
Adding sqlite proof-of-concept. This code does not compile due to some template issues but I want to keep track of it none the less.
Fixing the bookmark update redirect problem by adding an HTTP 307 redirect response to the UpdateBookmarkController. Also fixed a few other minor issues.
Correctly my example code by declaring position volatile in each approach function. Without this modification loads and stores to position get optimized out.
Correcting minor mistake.
Added a third bit position approach and created a script for making sparse vectors.
Whoops I accidentally committed the binary.
Adding bit position test program used to benchmark various approaches and a couple of support scripts.
A few mostly minor changes. I created a Delegator object in the wsgi script that, by storring the DB connection, should increase performance. I also updated the wsgi script regexes and removed some unnecessary calls from the contorllers.
Started working on tag list and a "tagged" controller. Need to work on pagination for the tagged controller.
Updated layout to remove tables; the result is much cleaner.
Adding apache config and web interface install script.
Finished up the tag adding UI and update backend. Woohoo, progress!
A few more UI changes including a header and footer and a few other refinements.
Just a couple of very minor UI tweaks.
Adding a javascript based UI for managing tags. This is just the client-side API for now, I'll have to add the server side next. I also need to work on the CSS to display things a more nicely. Finally some good progress.
Further improvements to the script to allow you to download packages directly.
Adding a package list baseline for Ubuntu 14.04.2 Server.
Made a few more udates to the script and added additional virtual package mappings.
Cleaned up the first version of the script and simplified it a bit as well.
Adding get dependencies script.
w00t! I finally got the update operation working! It turns out that the wsgi.input object is a little tricky to deal with until you learn how to do so correctly. I still need to add displaying and modifying tags... and a bunch of other stuff.
Well I was trying to get bookmark display and update functionality working, but I really only got started. I need to work out how to make the update_bookmark handler work as I would like it to.
Merge branch 'master' of 10.0.0.6:/home/dsorber/trac/projects/headquarters/repo
I haven't really don't anything yet other than cleanup some of the messiness that I left behind. I fixed pagination and renamed a few things to make them more clear.
Adding this nice little script I wrote to open randomly selected images.
Fixed an issue with the Bookmark class was not properly creating the category and description tag sets. Also fixed an issue with both the Bookmark and Tag classes where the passed in DB connection was not being type checked before being used. Finally I added basic pagination to the BookmarkPageController.
Well that is one of the things I don't like about Python. You can silently corrupt a namespace and have no idea about it until your code actually runs. This should fix the issue for now.
Made some small updates to the extent_test.py master script.
Created a top level script for fully automating the full extent test process (well, aside from data analysis).
Created another script to dump the raw extent sizes so that you can then calculate things like the standard deviation.
Adding fiemap testing scripts which includes the very handy python fiemap bindings I found on the intarwebz.
Created simple script to total up the output files for each instance of the key_classify.py script.
Created a script to test the key classify primitive operation using Wikipedia dump xml files as input.
Once again I forgot that I need to add modified files...
Adding the display.py script I wrote to display some useful information when logging into phalanx.
Made very good progress on the simulator although it still needs a bit of cleanup.
Adding a new project the term frequency simulator which will be used to simulate our term freqeuncy approach and measure various statistics.
Adding a picture renaming script. It's somewhat crude right now I should make it somewhat better at some point.
Whoops, I forgot that I have to manually add files that I modified to commits with git. Guess I'm a bit of a git...
Continuing to work on the web GUI a little at a time. A made an important modification to the way the controllers work so that you don't have to pass the template name into the controller instantiation in the .wsgi script and instead the template name is a parameter with a default value.
Continued working on the web GUI, taking baby steps.
Re-adding setup.py which I didn't actually mean to remove.
I'm still learning how to use git...
Reorganizing things into a more logical format for packaging. I also started working on the web interface.
Adding ImageFap gallery downloader I just wrote ;)
Finished up the bookmarks importer and made the whole thing a package that I'm calling bmklib. I'm also preparing to start working on the web interface by copying the existing .wsgi file I created to use as a template.
Wrote a converter util and started working on the importer util.
Added a few things including a "date_added" column. Also adding a blank database so I don't have to recreate it. I'm proabably going to work on an import script next, then the web GUI. I really should write some unit tests at some point.
Adding modifications to the Bookmark and Tag classes to support the category and description tag lists. I also learned about the very awesome "lastrowid" feature.
Added a tiny bit of code tonight. Need to keep track of dirty value of tags lists using hash (convert from set to frozenset before hashing).
Started working on the Tag class.
Added selection and debugged updating of bookmark records. Also added suggest_title and is_reachable methods.
First commit for the bookmark library project! Hopefully many more to come. Starting the bookmark class.
Adding work that I started on the PMML translator prototype.
Adding file share code that I started working on. It depends on the lxml package.
Removing a hidden file that I accidentally committed.
Doing what I intended to do correctly this time, moving all my software sources into the software folder.
Whoops I need to use the move command so that git keeps track of where things have gone.
Adding transmission config and my geany cobalt colorscheme. Also reorganizing the repository layout since I've finally got around to including more than just software.