I use Vim as my main IDE for C/C++-related development (as well as for almost all other development). If you use (or are thinking about using) Vim as an IDE, you better get some good autocompletion functionality. This kind of autocompletion is provided by OmniComplete, which has been available since Vim 7.0. Just having OmniComplete is a nice thing, but it’s much more helpful if it’s configured properly to work with the libraries you use, such as wxWidgets. In this post, I will show you how to get OmniComplete working for wxWidgets. However, the procedure I will show can be easily adapted to almost all libraries.
Continue reading Setting Up OmniComplete (Autocompletion) for wxWidgets in Vim
Author: Guy
Fixing the Home Link in the Telem System (OpenU)
This post can be helpful for students of the Open University of Israel. As a student there, I found it very annoying that the link to the courses’ homepage in the Telem system is a JavaScript link. This prevents it from opening in a new tab and thus requires various workarounds to get back to the homepage in a different tab. So, a little while ago, I wrote a little Greasemonkey script to fix it.
// telem.user.js
// version 0.1
// 2008-01-01
// Copyright (c) 2008, Guy Rutenberg
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html
//
// ==UserScript==
// @name OpenU's Telem - Fix Home Button
// @namespace http://www.guyrutenberg.org/
// @description Fixes the home button link in the telem system of the OpenU.
// @include http://maagar.openu.ac.il/opus/*
// ==/UserScript==
home = document.getElementById('home');
if (home) {
re = /javascript:find_home_page('(.*?)','(.*?)',/
match = re.exec(home.href)
home.href = 'http://telem.openu.ac.il/courses/'+match[2]+'/'+match[1]
}
This script changes the link to a regular, non-JavaScript link. I’ve tested it for more than a month now without finding any bugs. However, if you find something or have any suggestions, please comment.
Update: See A Greasemonkey Fix to the Top Menu in Sheilta (Open University); it has a fix for the top menu bar in the Sheilta system.
Activating Guarddog Settings on Startup
Like many Linux users, I use Guarddog as a frontend to my iptables firewall. At some point, I noticed that Guarddog started acting strangely. Every time I restarted my computer, all internet traffic was blocked (both incoming and outgoing). The only way to fix this situation was to open Guarddog and press “Apply” (without making any changes). While it was annoying, it didn’t bother me much because I used to restart my computer about once a month. But a few days ago, I decided to solve this problem once and for all.
Continue reading Activating Guarddog Settings on Startup
mctext – Using Markov Chains to Generate Text
mctext is a new project of mine, focusing on text generation using Markov Chains. This little utility reads a sample text file, preferably a large one, and generates new text based on the semantics given in the sample text.
Continue reading mctext – Using Markov Chains to Generate Text
Delete Unversioned Files Under SVN
Sometimes svn switch fails because unversioned files exist in the working copy, and the need to erase them comes up. This is also true when updating to an old revision (usually one that misses directories that exist in the head revision), doing some work (like compiling), and then trying to update back to the head revision. Subversion (SVN) will fail, complaining that directories/files already exist.
Continue reading Delete Unversioned Files Under SVN
Add Explanations to LaTeX Formulas (Equations)
When writing a document that contains mathematics, many times the need to add an explanation (e.g., stating the theorem used) arises. To address this need, I wrote two short LaTeX macros: explain and explainup.
Continue reading Add Explanations to LaTeX Formulas (Equations)
Convert CSS layout to RTL – cssrtl.py
This is a re-release of a script of mine that helps convert CSS layouts to RTL. I originally released it about a year ago, but it was lost when I moved to the new blog. The script, cssrtl.py, utilizes a bunch of regular expressions to translate a given CSS layout to RTL.
Vim Macros for Wrapping Strings for Gettext
I’m working on a website, and we decided to localize it using GNU gettext. Soon enough, I found it tiring to wrap each string manually in _( and ), and also to do it in Smarty (using {t}string{/t}). So I decided that I needed a macro that would let me highlight the string that needs translation, and the macro would wrap it for me.
I ended up writing two macros: one for PHP files (but it’s also good for C/C++, etc.) and one for Smarty.
:vmap tg di_(<ESC>pa)<ESC>
:vmap ts di{t}<ESC>pa{/t}<ESC>
To use these macros, just highlight the string for translation in Vim’s visual mode and press tg (or ts), and your string will be wrapped for translation.
Multibyte String Truncate Modifier for Smarty – mb_truncate
When working with Smarty, a PHP templating engine, I discovered that while the regular truncate modifier works great on ASCII strings, it doesn’t work with multibyte strings, i.e., UTF-8-encoded strings. This leads to problems in internationalization (i18n), as UTF-8 is the popular encoding for non-Latin alphabets nowadays. The problem can be solved by modifying the built-in truncate modifier and creating a new one that takes an additional argument, the charset of the string, and acts accordingly. The new modifier, mb_truncate, is implemented below.
Continue reading Multibyte String Truncate Modifier for Smarty – mb_truncate
A JavaScript DoS Attack
In this post I will present a way of creating a JavaScript-based DoS attack that utilizes the bad implementation of tabs in most (if not all) web browsers. The attack will make the browser unresponsive and force the user to kill its process. This attack is based on the following JavaScript code:
Continue reading A JavaScript DoS Attack