Last week, I posted an announcement about Diffboard to Hacker News. This is a post mortem analysis.
So You Want Self Hosted Git Repos?
Just finished creating a GitLab SUSE studio appliance. Grab it and give it a try while its hot! ;)
GitLab provides a solution for self-hosted git repositories management, supports code browsing, submitting issues and merge requests.
The appliance contains a pre-configured apache, passenger + rails stack and a GitLab host.
Git in a Box Appliance on SUSE Studio
Gitbox is a small openSUSE 12.1 based appliance that offers a pre-configured bare git repository accessible through ssh. A post-receive hook will create a tarball snapshot of the repository after every push.
Update (2012-03-08): If you’re looking for a more complete solution, including issue tracking, repo management and pull requests, you might want to check out GitLab or try the GitLab appliance
Twitter Bootstrap Based Theme for Octopress
Octopress is a cool ‘blogging platform for hackers’. Blog posts are written in simple markdown syntax and octopress takes care of the rest. It contains a nice, simple theme, generates static pages and deploys them to either github or via rsync to a private site.
For one of my projects, Diffboard, I needed to create a blog that visually matches the main site. The result is bootstrap-theme, octopress theme that uses twitter bootstrap grid system.
The Diffboard blog currently showcases the theme.
2012-03-27 Update: To avoid shameless self-promotion, I set up a dedicated demo site running latest code from master ;) The blog may seem a bit bloated, as almost all features are enabled, but this is to make debugging and tweaks easier.
Deploying Resque Scheduler With Capistrano
It is actually quite easy to start resque workers and resque scheduler using just capistrano, without help of monitoring framework like god / monit.
XFCE Desktop Now for openSUSE 11.4
I finally got to upgrade the appliances from previous tutorials (on creatingXFCE desktop with SUSE Studio and on adding a Slim login manager) to openSUSE 11.4. They’re published on SUSE gallery: 32bit and 64bit version. Feel free to clone, remix and let me know if you think they could be enhanced somehow.
Showcasing Your (PHP) Web App With SUSE Studio
SUSE Studio, together with its Testdrive feature, can be used to setup a demo for your web application. You can then let users download and deploy the appliance and have the service up and running in a few minutes.
In this tutorial, I’ll use status.net as an example. It is a PHP app with MySQL backend. My tutorial should be quite generic though, so you can clone from my appliance and modify it to your liking.
Building XFCE Desktop With SUSE Studio, Continued…
In a previous post, we successfully built an XFCE4 desktop. I promised to enhance it by replacing XDM with SLIM, a tiny but nice login manager. This is how to do it.
Building XFCE Desktop With SUSE Studio
Although we recently hacked in an automagick recognition and start up of several more window managers (windowmaker, fvwm2…), into Studio, XFCE4 is still missing from the list. The reasons are that it simply doesn’t work out of the box without a few tweaks. However, these are easy to do thanks to Studio and I’ll present a step-by-step tutorial, where we’ll build an openSUSE 11.3 appliance with XFCE4 running. If you are already familiar with how to use Studio, just skip to the summary section at the end for a brief list of steps.
Loading External Plugins in CKEditor
Friend of mine needed help with $SUBJ, to extend CKEditor with some extra functionality without changing the source code in editor’s tree. Here is the solution:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
addExternal() (in _source/core/resourcemanager.js:151) only registers a resource, which then needs to be loaded using load() method (_source/core/plugins.js:23). Since it doesn’t automatically call the plugin’s init() function, we have to do it ourselves in the callback and pass it the CKEditor instance as a parameter.
Documentation for addExternal says: “Registers one or more resources to be loaded from an external path instead of the core base path.”. To be loaded actually doesn’t mean it gets loaded via this call.