Benki → All Posts

⇠ previous page next page ⇢

“Thinking Forth is a book about the philosophy of problem solving and programming style, applied to the unique programming language Forth. Published first in 1984, it could be among the timeless classics of computer books, such as Fred Brooks’ The Mythical Man-Month and Donald Knuth’s The Art of Computer Programming.

“Many software engineering principles discussed here have been rediscovered in eXtreme Programming, including (re)factoring, modularity, bottom-up and incremental design. Here you’ll find all of those and more - such as the value of analysis and design - described in Leo Brodie’s down-to-earth, humorous style, with illustrations, code examples, practical real life applications, illustrative cartoons, and interviews with Forth’s inventor, Charles H. Moore as well as other Forth thinkers.

“If you program in Forth, this is a must-read book. If you don’t, the fundamental concepts are universal: Thinking Forth is meant for anyone interested in writing software to solve problems. The concepts go beyond Forth, but the simple beauty of Forth throws those concepts into stark relief.

“So flip open the book, and read all about the philosophy of Forth, analysis, decomposition, problem solving, style and conventions, factoring, handling data, and minimizing control structures. But be prepared: you may not be able to put it down.

“This book has been scanned, OCR’d, typeset in LaTeX, and brought back to print (and your monitor) by a collaborative effort under a Creative Commons license.”

“cola (aka Idst, Jolt, the SODA languages, &c.) is an ongoing project to create a springboard for investigating new computing paradigms. Everything in it is late-bound, the intention being that any paradigm (existing or yet to be invented, formal complexity notwithstanding) be easily and efficiently mapped to it and made available to the user. It is a small part (the implementation vehicle) of the reinventing computing project.

“The system is slowly evolving towards version 1.0 which

  • is completely self-describing (from the metal, or even FPGA gates, up) exposing all aspects of its implementation for inspection and incremental modification;
  • treats state and behaviour as orthogonal but mutually-completing descriptions of computation;
  • treats static and dynamic compilation as two extremes of a continuum;
  • treats static and dynamic typing as two extremes of a continuum; and
  • late-binds absolutely everything: programming (parsing through codegen to runtime and ABI), applications (libraries, communications facilities), interaction (graphics frameworks, rendering algorithms), and so on.”

“We speak with John Perkins, a former respected member of the international banking community. In his book Confessions of an Economic Hit Man he describes how as a highly paid professional, he helped the U.S. cheat poor countries around the globe out of trillions of dollars by lending them more money than they could possibly repay and then take over their economies. [includes rush transcript]”

“Rich Hickey compares value-oriented programming with place-oriented programming concluding that the time of imperative languages has passed and it is the time of functional programming.”

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.”

“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!

  1. Download gconf-editor – this is probably available in your distribution’s package manager.
  2. Start gconf-editor – the “Run Command” menu is still available in GNOME 3 by pressing Alt-F2.
  3. In the tree on the left, navigate to /desktop/gnome/shell/windows
  4. 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”
⇠ previous page next page ⇢