PostgreSQL is a DBMS that supports many advanced features such as table inheritance. However, the native table inheritance implementation poses several problems when it comes to using it in some real-world projects.
We will describe the problems encountered when using PostgreSQL’s inheritance implementation, then propose a solution to these problems using a set of functions and triggers.
Back in January, I wrote three posts outlinining some ideas I had about a straight-forward, sane way of managing SQL change managment. The idea revolved around specifying scripts to deploy and revert in a plan file, and generating that plan file from VCS history. I still feel pretty good about the ideas there, and work has agreed to let me write it and open-source it. Here is the first step making it happen. I call it “Sqitch.”
Why “Sqitch”? Think of it as SQL changes with Git stuck in the middle. Of course I expect to support VCSs other than Git (probably Subversion and Mercurial, though I am not sure yet), but since Git is what I now have the most familiarity with, I thought it kind of fun to kind of reference a VCS in the name, if only obliquely.
“The Google Authenticator project includes implementations of one-time passcode generators for several mobile platforms, as well as a pluggable authentication module (PAM). One-time passcodes are generated using open standards developed by the Initiative for Open Authentication (OATH) (which is unrelated to OAuth).
“These implementations support the HMAC-Based One-time Password (HOTP) algorithm specified in RFC 4226 and the Time-based One-time Password (TOTP) algorithm specified in RFC 6238.”
currj is an experiment in currying and partial evaluation in Clojure. It currently attempts to support function calls, if, and let. It’s not very well tested, so if you want to use it for something serious you should probably check the output manually.
currj has been pronounced “Courage”. Goals
- Support for all pure functions.
- Emit code that is no less efficient than a hand-curried function.
- Support ClojureScript
An example web site for BrowserID/Mozilla Persona.
“123done.org is a very simple to-do list application. Simply enter your to-do list item above and add it to your tasks. Click the tasks to mark them as done. Clicking an already finished task will remove it from the list.
“Your task list is stored on the computer for you to use. If you want to sync 123done across devices, log in with Mozilla Persona.”
“Immutable vectors are a convenient data structure for functional programming and part of the standard library of modern languages like Clojure and Scala. The common implementation is based on wide trees with a fixed number of children per node, which allows fast indexed lookup and update operations. In this paper we ex- tend the vector data type with a new underlying data structure, Re- laxed Radix Balanced Trees (RRB-Trees), and show how this struc- ture allows immutable vector concatenation, insert-at and splits in O(logN ) time while maintaining the index, update and iteration speeds of the original vector data structure.”
“In my pursuit to understand Git, it’s been helpful for me to understand it from the bottom up — rather than look at it only in terms of its high-level commands. And since Git is so beautifully simple when viewed this way, I thought others might be interested to read what I’ve found, and perhaps avoid the pain I went through finding it.”
“The C++ interactive interpreter cling is based on LLVM and its C++ frontend clang. It will replaces ROOT’s current C++ interpreter CINT. The advantages over CINT are:
- Production-grade parser.
- Just-in-time compiler (JIT), allowing e.g. calls into libraries without wrappers. This reduces the dictionary size dramatically.
- Modular C++ API from the ground up; simplified maintenance.
- Separate parser and execution engine.
- C++ 11 support through clang.
“We have announced cling to the public in 2011. cling is in a very usable state; bugs should be reported to the ROOT project here. We are currently working on the integration of cling into ROOT, i.e. replacing CINT. This work is expected to be released as ROOT 6 end of 2012.
”We have installation instructions, both for a stand-alone version of cling and for cling as part of ROOT. There is a list of work items for cling integration into ROOT.”
“Bringing the magic of ClojureScript to the desktop via Gnome Shell extensions.”
“Bringing the magic of ClojureScript to the desktop via Gnome Shell extensions.”
“The KR library is for working with knowledge representations and knowledge bases. Currently it facilitates use of RDF-based representations backed by triple-/quad- stores. It provides a consistent clojure based way of interacting with its backing implementations, which currently include the Jena and Sesame APIs.”
“This simple little tweak lets you create functions which show nice representations when printed rather than just their compiled class.
“Which is nicer, be honest:”
;; raw Clojure behaviour
user> (fn [x] (inc (inc x)))
#<user$eval__1750$fn__1751 user$eval__1750$fn__1751@927e4be>
;; with serializable-fn
user> (require '[serializable.fn :as s])
user> (def dinc (s/fn [x] (inc (inc x))))
(fn [x] (inc (inc x)))
“I’ve already expressed some disappointment in the default multi-monitor behavior in GNOME 3 on the dev’s blog (read: I posted an angry rant in the comments).
“Basically, in GNOME 3, for some reason, they decided the typical use case was for the secondary monitor to stay fixed when switching workspaces, which is the complete wrong setup for someone using dual monitors.
“Luckily, as Pascal points out in the blog’s comments, there’s a setting for this, and the other (ie correct) behavior is actually mutter’s default.
“Luckily, the fix is pretty simple, and will allow workspaces to switch on multiple monitors again!
- Download gconf-editor – this is probably available in your distribution’s package manager.
- Start gconf-editor – the “Run Command” menu is still available in GNOME 3 by pressing Alt-F2.
- In the tree on the left, navigate to /desktop/gnome/shell/windows
- UNCHECK the box next to workspaces_only_on_primary”
A webID identity provider implementation written in PHP.
“MyProfile intends to provide a solution for managing the numerous accounts and profiles that users have on the Internet. Its main purpose is to provide a unified user account, or simply ‘user profile’, which as opposed to current ‘silo’ profiles, would really be under the user’s control, on a device controlled by the user.”
“Disper is an on-the-fly display switch utility. It is intended to be used just before giving a presentation with a laptop, when all one wants is that the beamer, which has just been connected, is able to show whatever you prepared.
“Disper gives you the option to either clone all detected displays, or extend the desktop to them. Resolutions are automatically detected. For cloning, the highest common resolution supported by all displays is chosen; for extending every display device gets its highest supported resolution. For special setups requiring more detailed control, one can still use the standard display configuration utilites.
“At the moment nVidia cards are supported, and a basic XRandR backend is in place. The latter is not fully complete and untested since I don’t have the hardware.
“Generally, one would bind disper -c to a shortcut key (or if you rather like to extend your desktop, use disper -e). Without an external display or beamer connected, you’ll get your laptop’s full resolution; when an external display is present, it switches to clone mode after the keypress (or extend, if you configured it that way).”
“Clojure wrapper for the encog (v3) machine-learning framework.
“…
“Encog has been around for almost 5 years, and so can be considered fairly mature and optimised. Apart from neural-nets, version 3 introduced SVM and Bayesian classification. With this library, which is a thin wrapper around encog, you can construct and train many types of neural nets in less than 10 lines of pure Clojure code. The whole idea, from the start, was to expose the user as little as possible to the Java side of things, thus eliminating any potential sharp edges of a rather big librabry like encog.”
“Encog is an advanced neural network and machine learning framework. Encog contains classes to create a wide variety of networks, as well as support classes to normalize and process data for these neural networks. Encog trains using multithreaded resilient propagation. Encog can also make use of a GPU to further speed processing time. A GUI based workbench is also provided to help model and train neural networks. Encog has been in active development since 2008.
“Encog is available for Java, .Net and C/C++.”
“Tiggit is an open source game launcher and installer.
“Our mission: to help you find all the awesome indie games that exist ‘hidden’ around the internet.
“Tiggit is a desktop app that installs and launches games with one click. It is sort of like an open source Steam clone, but much simpler and currently with only freeware games and demos.
“Features:
- Contains over 300 freeware games (and a few demos)
- New games added continuously
- No account or registration required”
“HostBluff was founded on April first of 2012 in order to provide non-existent hosting solutions to our customers. We quickly established ourselves as one of the best known web hosting scams on the internet. While some people call us a scam, others call us an eye opener to expose common hosting scams. We hope you enjoy your stay with HostBluff and ask that you inform other uneducated people about our services.”
“dgraph is a dependency graph library for Clojure.
“This code is inspired by Kenny Tilton’s Cells project (http://common-lisp.net/project/cells/).
“dgraph aims to offer a (mostly) pure functional data structure whose nodes behave like cells in a spreadsheet, i.e., they form a dependency graph. This data structure has two kinds of nodes: stored and computed. Stored nodes contain constant values, whereas computed nodes behave more like functions. In typical use, computed nodes calculate and cache their values lazily, when needed. Changing the value of a stored node does not destructively modify the graph; instead, it returns a new graph with the node’s value changed and the node’s dependent (child) computed values invalidated.
“This data structure has many uses. In particular, it helps eliminate repeated clutter in UI code where the state of a display element may depend on the state of several other elements. Consider, for example, an action button which needs to be activated if and only if several other input elements are filled in and validate correctly. Normally, each of these elements’ callbacks would have to enable the action button separately, while also checking the state of the other fields. Although this mess may be abstracted out into a function, each callback would still have to be sure to call that function. On the other hand, if the state of each input element and the action button become nodes on a dependency graph, then the button can just activate itself when the other nodes all achieve valid state.”
“Julia is a high-level, high-performance dynamic programming language for technical computing, with syntax that is familiar to users of other technical computing environments. It provides a sophisticated compiler, distributed parallel execution, numerical accuracy, and an extensive mathematical function library. The library, mostly written in Julia itself, also integrates mature, best-of-breed C and Fortran libraries for linear algebra, random number generation, FFTs, and string processing. More libraries continue to be added over time. Julia programs are organized around defining functions, and overloading them for different combinations of argument types (which can also be user-defined). For a more in-depth discussion of the rationale and advantages of Julia over other systems, see the following highlights or read the introduction in the online manual.”
“bbPress is forum software with a twist from the creators of WordPress. Create a simple and engaging community to compliment your WordPress powered website or blog.
“Have you ever been frustrated with forum or bulletin board software that was slow, bloated and always got your server hacked? bbPress is focused on web standards, ease of use, ease of integration, and speed.
“We’re keeping things as small and light as possible while still allowing for great add on features through WordPress’s extensive plugin system. bbPress is lean, mean and ready to take on any job you throw at it.”