software
“n2″ Message Board Software: Update
This is a cross-posting with the nextBBS support board.
Some of you already know about this but keep reading…
Development of nextBBS v2 was steered in a new direction about two months ago and this is for the better.
“n2″ is the software’s new code name. And the change is more than skin-deep because it is actually the result of the merger of three different pieces of software:
+ wtcBB
+ nextBBS v2 “current”
+ My own PHP framework called “Lenses”
The result is a very fast, very user and admin-friendly board with easy install and localization across the board.
This new direction is very exciting for at least two reasons:
1. It allows me to work without being hindered by “youthful” mistakes I had made when developing nBBS v1 such as SEO being an afterthought and an Admin Control Panel that was too intimidating
2. wtcBB and nextBBS share a common philosophy on many levels and integrating both programs allows me to pick the best implementation. A few examples are BBCode editor, sub-sub forums, micro-caching, high logging granularity, editing look and feel in the admin cp…
You can follow progress through my submits and the issues tracker.
Go to my original post to see a few screenshots. I should bring a demo online soon.
If you enjoyed this post, make sure you subscribe to my RSS feed!
Wordpress FLV Player Plugin v2.0
Close to two years ago, after quickly putting together my own FLV Player plugin for Wordpress (original post) I added it to Wordpress.org’s already impressive list of plugins. Who knows? Someone else might find it useful (it’s been downloaded more than 4,500 times since then so I guess that means someone did)
Yesterday a few people commented on that original post, thus reminding me of that plugin. It shamed me when I revisited its packaging to find out that it required from its users to download more pieces left and right. So, here it is, brand new v2.0, with everything included, and this means brand new SWF wrapper and brand new Flash file. Hope you forgive the fact that it took me all this time to provide a real self-contained archive.
Oh, and there is something I would like to address about this plugin. It’s actually a reply to one of the comments I received recently:
What do you mean by “a flash stream”? Does it stream an flv or use progressive download? To stream flash, you need a streaming media server. You should be clear and say what you mean - stop contributing to peoples’ ignorance.
Well, I hope it helps you feel a little less ignorant to know that the answer is “both.” This plugin can stream both types, depending on your use of a http-type or a rtmp-type URI. It can also play live streams. More information can be found here.
If you enjoyed this post, make sure you subscribe to my RSS feed!
Twitterified Client now fully Open-Source
Find the announcement here.
And, of course, find the source code at GitHub: here.
If you enjoyed this post, make sure you subscribe to my RSS feed!
Bespin in Titanium: From The Jaws Of Victory…
bespin is really an intriguing project. Since I’ve grown frustrated with the inconsistencies between the various code editors that I have been using — I work on Leopard at home and Ubuntu at work — I thought that creating my own editor would be the answer to that. Nothing fancy, mind you. Just something consistent.
My first impulse was to use Flex. And it almost worked! Using mx:html I was able to wrap a nice web page in an otherwise very ActionScript-y application.
And then, catastrophe! Flex Webkit’s canvas implementation is subpar and I could only get a very mamed version of bespin. Nothing usable, anyway.
Thus, I turned to Titanium.
After some light trial and error, I got it to work!
Unfortunately, the result is less than awesome: Titanium’s Webkit gets easily overwhelmed and, worse, crashes reliably ( :g: ) as soon as I ask it to do some medium lifting.
This video shows the original victory followed by the vexing defeat:
Note that, to get it to work, I replaced embed.js with my own version that works around any dojo.request()/eval issue:
(function() { // -- Load Script var loadme = new Array(); var loadScript = function(src, onload) { var embedscript = document.createElement("script"); embedscript.type = "text/javascript"; embedscript.src = src; embedscript.onload = onload; document.getElementsByTagName("head")[0].appendChild(embedscript); } var onScriptLoaded = function() { var src = loadme.shift(); if(src) loadScript(src, onScriptLoaded); } var componentRequires = function() { dojo.require("bespin.bespin"); dojo.require("bespin.util.canvas"); dojo.require("bespin.util.keys"); dojo.require("bespin.util.navigate"); dojo.require("bespin.util.path"); dojo.require("bespin.util.tokenobject"); dojo.require("bespin.util.util"); dojo.require("bespin.util.mousewheelevent"); dojo.require("bespin.util.urlbar"); dojo.require("bespin.client.filesystem"); dojo.require("bespin.client.settings"); dojo.require("bespin.client.status"); dojo.require("bespin.client.server"); dojo.require("bespin.client.session"); dojo.require("bespin.editor.actions"); dojo.require("bespin.editor.clipboard"); dojo.require("bespin.editor.cursor"); dojo.require("bespin.editor.editor"); dojo.require("bespin.editor.events"); dojo.require("bespin.editor.model"); dojo.require("bespin.editor.toolbar"); dojo.require("bespin.editor.themes"); dojo.require("bespin.editor.undo"); dojo.require("bespin.syntax.base"); dojo.require("bespin.syntax.simple._base"); dojo.require("bespin.cmd.commandline"); dojo.require("bespin.cmd.commands"); dojo.require("bespin.cmd.editorcommands"); dojo.require("th.helpers"); // -- Thunderhead... hooooo dojo.require("th.css"); dojo.require("th.th"); dojo.require("th.models"); dojo.require("th.borders"); dojo.require("th.components"); } loadScript("js/dojo/dojo.js.uncompressed.js", function() { dojo.require = function(src) { loadme.push('js/' + src.replace(/\./g, '/') + '.js'); } componentRequires(); dojo.require("bespin.editor.component"); loadScript(loadme.shift(), onScriptLoaded); }); })(); |
As you can see, I override dojo.request() with my own, stack up all the component names, then load them one by one, waiting for each to be fully loaded before moving on.
If you enjoyed this post, make sure you subscribe to my RSS feed!
Twitterified v1.3 is out: bug fixes, usability improvements, Present.ly support
Well, the title pretty much says it all: v1.3 is out and it’s an evolutionary release.
- Bug fixes - lots of ‘em
- Usability improvements, such as text overflow indicator
- Support for the awesome Present.ly Twitter-compatible protocol
Get it while it’s hot!
(If you are confused as to where to get it, all you need is to go to http://twitterified.com, log in and follow this link)
If you enjoyed this post, make sure you subscribe to my RSS feed!
Twitterified Client v1.3 Almost Ready
I should be able to release this new client tomorrow or day after tomorrow.
I am currently battling a couple bugs with beta support for Present.ly:
- Time zone discrepancy: all posts appear as seven hours behind
- Avatars are too big!
If you enjoyed this post, make sure you subscribe to my RSS feed!
Wordpress Toolbar Plugin and Wordpress Prefixes: A Fix
First of all, that’s an awesome plugin that will allow your visitors to have a look at external links while retaining the ability to comment locally on your blog. Get it!
Unfortunately, if you have modified your Wordpress database prefix, for instance because you are using Wordpress MU or the Virtual Module, the toolbar will fail to display.
Here is my very modest fix that will make it work.
1. Open wordpress-toolbar/toolbar.php
2. Find, near the top of the file:
$resultset = $wpdb->get_results("SELECT * FROM wp_options where option_name in ('wordpress_toolbar_social','wordpress_toolbar_excludedomains','wordpress_toolbar_skin','wordpress_toolbar_custom')"); |
Replace with:
$resultset = $wpdb->get_results("SELECT * FROM {$wpdb->options} where option_name in ('wordpress_toolbar_social','wordpress_toolbar_excludedomains','wordpress_toolbar_skin','wordpress_toolbar_custom')"); |
3. That’s it!
If you enjoyed this post, make sure you subscribe to my RSS feed!
Fixing permissions after a Wordpress prefix change
Let’s say that you renamed your Wordpress tables.
There may be several reasons for this. For instance, you installed Virtual Multiblog to support more than one blog with the same setup.
And now, you are facing the dreaded “You do not have sufficient permissions to access this page”
What to do, what to do?
Turns out, after some research, I found out that there is a proper procedure for us lazy webmasters:
1. Download the force-upgrade script and run it. It’s a fairly old script but since it all it does is invoke Wordpress’ upgrade mechanism, it still works very well with 2.7. I know, it’s not an upgrade! But you can also run the script to right some wrongs…
2. Using your favourite SQL editor, edit the “usermedata” table. Let’s say that your old table prefix was ‘wp_’ and your new prefix is ‘wp_new_’ you would type this simple SQL command to make sure that your first user is still admin:
update wp_new_usermeta set meta_value='a:1:{s:13:"administrator";b:1;}' where meta_key='wp_new_capabilities' and user_id=1; |
You’re all set.
If you enjoyed this post, make sure you subscribe to my RSS feed!
A quick-fix for the Tweetback spam issue
I do not get it. I am a big fan of Smashing Magazine and I think that it was very nice of @jdevalk to write a plug-in that gives us full control over “Tweetbacks”. See this blog entry.
Where Smashing Magazine and the author lose me, though, is that I have not seen any reaction, either on the magazine’s web site, or the author’s blog, regarding the issue that many blogs who installed the plug-in seem to now be suffering: they are being inundated with thousands of spammy Tweetbacks, most of them containing text like “This is a test”, presaging a potentially much more virulent attack when the spammers get their tool working.
In fact, it may not be spam, but simply some tests gone wrong, but whatever the reason it caused grief to many blog owners — including me.
After de-activating the plug-in, here is the SQL command you can use to get rid of these Tweetbacks:
delete from wp_comments where comment_author_url like 'http://twitter.com/%/statuses/%'; |
If you do not have access to your database, contact me, I may end up writing a short plug-in that will wrap this query.
Again, I really like Smashing Magazine and that is why I am very surprised by their silence on this issue.
If you enjoyed this post, make sure you subscribe to my RSS feed!
Six Resources To Study And Master Git Source Control
It’s no secret that Git, as a source code control tool, has become quite popular in 2008, in part boosted by the success of the socially oriented github.com Here is a list of six resources that will help you get more comfy with Git, whatever your current knowledge of the tool. Let me know if you think that, after reading these six documents, you can still point to a few stones left unturned.
3 Reasons To Switch To Git From Subversion
A to-the-point document, created by Mark McBride, that covers several scenarios and for each scenario, shows how Git could make your life easier if you are not using it yet.
My Git Cheatsheet
A concise guide for the absolute beginner who wants to hit the ground running. Go through the exercises and you will end up with a pretty good picture of what Git can do.
Everyday GIT With 20 Commands Or So
A quick cheat sheet: start with the section corresponding to your role (individual developer, contributor, integrator…) You will not learn a lot about Git’s philosophy, but you will certainly get the job done.
Git Magic
Ben Lynn wrote a whole book covering not just cloning and branching but also some precious recipes: What to do when something goes wrong? What if my commit is too big? Remote access magic, history digging…Even Git’s shortcomings and their workarounds are covered.
Git from the bottom up
John Wiegley makes a convincing case that approaching Git from a 10,000 ft level is not the best way to understand the tool’s philosophy. Rather, building your knowledge of the tool based precisely on the very concepts that it uses make it much easier to get an overall grasp of Git’s world.
Using Git to Maintain Your Website
Using source code control has always been an effective tool to maintain a web site, especially avoiding these “Uh-oh I clobbered something I shouldn’t have” moments. But Git is particularly well suited to this task, due to its self-sufficient nature. Daniel Miessler shows us how to do just that using Git hooks.
If you enjoyed this post, make sure you subscribe to my RSS feed!













