-
Posted: January 6th, 2009, 8:02pm CET by kobit
pIt has happened recently that we have tried very hard to fix a few annoying problems on one of the Tigase installations. Whatever we did, however the problems still existed after uploading a new version and the server restart. It worked fine in our development environment and it just didn't on the target system./p
pIt turned out that due to a specific environment settings on the target system an old version of the Tigase server was always started regardless updates we were uploading. When I finally started looking at the installation the first indication that something is wrong was lack of any log files in place where I expected them./p
pThe best way to check all the environment settings used to start the Tigase server is to use..... strongcheck/strong command line parameter:/p
pre./scripts/tigase.sh check etc/tigase.conf
Checking arguments to Tigase
TIGASE_HOME = .
TIGASE_JAR = ./jars/tigase-server.jar
TIGASE_PARAMS = etc/tigase.conf
TIGASE_CONFIG = etc/tigase.xml
TIGASE_RUN = tigase.server.XMPPServer -c etc/tigase.xml --property-file etc/init.properties
TIGASE_PID = ./logs/tigase.pid
TIGASE_OPTIONS = --property-file etc/init.propertiesp /p
JAVA_OPTIONS = -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 \
-Djdbc.drivers=com.mysql.jdbc.Driver:org.postgresql.Driver \
-server -Xms100M -Xmx200M -XX:PermSize=32m -XX:MaxPermSize=256m
JAVA = /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/bin/java
JAVA_CMD =
CLASSPATH = ./jars/tigase-server.jar:./libs/jdbc-mysql.jar:./libs/jdbc-postgresql.jar:\
./libs/tigase-extras.jar:./libs/tigase-muc.jar:./libs/tigase-pubsub.jar:\
./libs/tigase-utils.jar:./libs/tigase-xmltools.jar
TIGASE_CMD = /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/bin/java \
-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 \
-Djdbc.drivers=com.mysql.jdbc.Driver:org.postgresql.Driver \
-server -Xms100M -Xmx200M -XX:PermSize=32m -XX:MaxPermSize=256m \
-cp ./jars/tigase-server.jar:./libs/jdbc-mysql.jar:./libs/jdbc-postgresql.jar:\
./libs/tigase-extras.jar:./libs/tigase-muc.jar:./libs/tigase-pubsub.jar:\
./libs/tigase-utils.jar:./libs/tigase-xmltools.jar tigase.server.XMPPServer \
-c etc/tigase.xml --property-file etc/init.properties
TIGASE_CONSOLE_LOG = ./logs/tigase-console.log/prep In our case TIGASE_HOME was set to a fixed location pointing to an old version of the server files. The quick strongcheck/strong command may be a real time saver./p
pa href=http://www.tigase.org/en/content/tigase-tip-checking-runtime-environmentread more/a/p
-
Posted: January 6th, 2009, 6:34pm CET by dwd
pOkay, I know I’m probably just repeating what everyone else is probably saying, but consider this:/p
p· Could the same problem happen with OMB? (Yes - but only because it’s a monoculture, there’s only Laconi.ca. It’s less likely to happen, however, because it’d involve more effort, since it’s federated at least)/p
p· Could the same problem happen with XMPP? (No - the XMPP network contains lots of different implementations, so a security flaw in one won’t affect everyone)/p
pThat there was a serious breach of security in Twitter is indisputable. That there’ll be others is likely. It’s also pretty likely that something like this will happen to Laconi.ca - sadly, “many eyes” don’t really help security all that much - but if more OMB implementations appear, this window of opportunity will vanish. It’ll never happen on the same scale with XMPP - no single vendor has the market, there is federation without monoculture./p
pSo, if you’re going to trust your public image to a short public broadcast messaging service (or µblogging system), which one are you going to pick?/p
-
pOnce upon a time I was an avid Perl hacker, but at some point I got
fed up with it and switched over to Python. I've spent a lot of time
with Python, and it's my standard choice for writing new code unless
another tool offers a big advantage to the problem at hand. Lately
I've been doing quite a bit of hacking in Erlang and playing a bit
with Lisp. One thing is for sure, I sure miss the brevity of Python./p
pI think Perl is too terse; all the symbols so close together start to
impact readability. Erlang and Lisp both seem quite verbose. Perhaps
this is a direct result of both languages lack of namespaces./p
h1Namespaces/h1
pIn Erlang, code lives in a module, but there are no sub-modules.
Sub-modules end up getting named like 'module_foo' and
'module_bar'. This makes for pretty long lines when you need to
string together several operations from different modules./p
pIn Lisp (or at least in Emacs Lisp which is the dialect I've been
working in) there aren't any namespaces at all, which makes it quite
similar to Erlang, just with no special symbols./p
pIn Python, I can just import the sub-modules directly, and get rid of
lots of namespace, resulting in a lot less typing and no real loss of
clarity./p
h1Data Structures/h1
pThe other main factor contributing to code brevity is good support for
data structures. Lisp and Erlang have excellent support for lists,
but they are more clumsy with hash tables. code(make-hash-table)/code (or
even code(makehash)/code) is a lot more work than code{}/code. codedict:fetch(Key,
Dict)/code is a lot more than codedict[key]/code./p
pPython, Ruby, Perl, and many other languages have first class support
for these data structures and that goes a lot way to making the
shorter and easier to write. They feel bolted on in Erlang and Lisp./p
h1Worth the Trade-offs/h1
pEven though they are more verbose, Lisp and Erlang are worth the
trade-offs in many cases. Nothing else has a concurrency model like
Erlang, and the power of code-as-data is immense./p
pIf you're an Erlang or Lisp hacker, I'd love to hear your thoughts on
these issues. I'm still a newcomer in these lands and have much to
learn./p
pThis year I think I will a href=http://learnyouahaskell.comlearn me a Haskell for great
good/a. I've heard a lot of great things
about it, but have yet to dive in./p
img src=http://feeds.feedburner.com/~r/metajack/~4/504023036 height=1 width=1 /
-
Posted: January 5th, 2009, 4:47pm CET by kobit
pThe Tigase server is very extensible through the well defined API. You can easily attach your code to any part of the server and load it at the startup time. It is quite simple to connect the Tigase to any database, add own components, plugins, packets filters, resource monitors and so on./p
pThere are, however at least two disadvantages of this kind of extensibility. You have to write Java code and the code can not be reloaded at run-time. So basically you have to restart the server to apply your changes./p
p
/pdiv style=float: left; class=imageimg src=http://www.tigase.org/files/image/tigase-scripting/groovy-script.png height=188 width=279 vspace=2 alt=Installing Groovy script hspace=5 /br /
div style=width: 279px; font-size: 80%; text-align: center;Installing Groovy script/div
/div
p What about a code in a scripting language which could be reloaded/added/removed at runtime without affecting normal work of the server? Which scripting language? Ideally any, ideally your preferred language. How? Of course using ad-hoc commands./p
pThis is possible now. You can create your scripts in almost a href=https://scripting.dev.java.net/any language/a and load the script at runtime to the server to do some work for you. The Tigase server supports scripting through a href=http://java.sun.com/javase/6/docs/api/javax/script/package-summary.htmlJSR-223 API in Java6/a. Maybe it doesn't make sense to use some of the supported languages like AWK for example in the Tigase server. Nevertheless I have learned already that users' use cases go far beyond my expectations. Therefore there are virtually no restrictions on the language you choose. Just put all required JAR files in the Tigase codelibs//code directory and the language is available to you./p
pa href=http://www.tigase.org/en/content/extensibility-extendedread more/a/p
-
Planet Erlang is fastly becoming a large index for Erlang projects resources, including ejabberd. pSince its relaunch, a href=http://www.planeterlang.orgPlanet Erlang/a is now indexing content from tens of Erlang related blogs. Thank to its search engine, you can now find many blog posts and articles on lots of different Erlang topic. ejabberd is one of the most covered topic there./p
pYou should have a look and try searching for ejabberd in the search engine (search field on the right)./p
pThe list of resources is growing every day as we are adding even more older resources./p
pYour comments and feature requests are welcome !/p
-
pFew days ago I've found on Launchpad an interesting project by Thomas Hervé, the a href=https://launchpad.net/twotptwisted interface to OTP,/a which allows to connect to erlang nodes using Twisted Matrix. The idea is incredibily powerful because it allows to easily build mixed-distributed applications using both erlang and python/twisted where they are best. So I gave it a try with ejabberd which has hooks for adding callbacks to its internal components (i.e. it's possible to intercept and modify packets). Unfortunately I've discovered that the present implementation of ejabberd hooks allows to connect only callbacks from the same node of ejabberd, i.e. as an extension module, but ejabberd folks have been incredibily quick in releasing a href=https://support.process-one.net/browse/EJAB-829a patch which allows distributed hooks/a, by adding the CallNode atom as parameter. The patch may be not stable yet, but it works perfectly with the last release of ejabberd (2.0.2), and here is an example of a twisted node which intercepts and logs all packets sent and received by any user (a href=http://blog.bluendo.com/download_file?bid=3;file_id=364here is the full code/a, change the node names accordingly to your setup). /ppIt works very simply. The hooks are written as methods of a regular python class with the remote_ prefix:/pprefont face=courier new,courier,monospaceclass UserMonitor(object):br / br / def remote_receive_packet(self, jid, frm, to, packet):br / print gt;gt;, to_domish(packet).toXml()br / br / def remote_send_packet(self, frm, to, packet):br / print lt;lt;, to_domish(packet).toXml()/font/prepwhich is published by using a PersistentPortMapper:/pprefont face=courier new,courier,monospacenodeName = buildNodeName(uccaro@olindo.bluendo.priv)br /epmd = PersistentPortMapperFactory(nodeName, cookie, olindo.bluendo.priv)br /epmd.publish(proxy = UserMonitor()) /font/prepAfter this it's possible to call the methods proxy:receive_packtes and proxy:send_packet from any erlang node.br //ppThen we register with ejabberd using a second node which calls the register methods, using the ejabberd api:/pfont face=courier new,courier,monospace@defer.inlineCallbacksbr /def register_hook(epmd): br / # connect to the ejabberd nodebr / inst = yield epmd.connectToNode(ejabberd)br / br / # register hooksbr / r = yield inst.factory.callRemote(br / inst, br / ejabberd_hooks, br / add_dist, br / Atom(user_receive_packet), # hook namebr / olindo.bluendo.priv, # virtual hostbr / Atom(uccaro@olindo.bluendo.priv), # hook nodebr / Atom(proxy), # hook module br / Atom(receive_packet), # hook methodbr / 10br / )/fontbr /pAnd bingo, after this ejabberd happily starts calling our hooks! /ppAs bonus in the code you find also a function which translates from the ejabberd xml representation to twisted domish nodes, which is far more usable.br //p
-
pXMPP Open Day is starting to shape up, but it still needs you help.
We currently have 5 presenters, 6 talks, and 2 volunteer moderators.
This is a great start, but we definitely need some more people to give
talks or lead panels./p
pPlease sign up at the a href=http://wiki.jabber.org/web/XMPP_Open_Daywiki
page/a or a href=mailto:jack@metajack.ime-mail
me/a if you're thinking you might want to
participate./p
img src=http://feeds.feedburner.com/~r/metajack/~4/503130650 height=1 width=1 /
-
Posted: January 3rd, 2009, 7:26pm CET by nyco
pWelcome to the fourth a href=http://blog.xmpp.org/?cat=12roundup/a of XMPP activity worldwide. This report is authored by a href=http://nyco.wordpress.com/Nicolas Vérité/a, a href=http://ubikod.com/otmf/Laurent Lathieyre/a and a href=http://metajack.im/Jack Moffitt/a. This is a very long article since we had a lot of activity these weeks./p
pYour contributions are welcome for future roundups./p
pstrongSoftware Releases/strong/p
pIn this edition of the XMPP Roundup, we have a lot of software releases: clients, servers, and tools./p
pemstrongGajim 0.12/strong/em/p
pAstérix aka Yann Leboulanger has a href=http://blog.lagaule.org/?p=11announced on his blog/a the release of Gajim 0.12. The full a href=http://trac.gajim.org/browser/trunk/ChangeLogchangelog/a since 0.11.4 is loaded with new features: mood, activity, nickname and tunes, encrypted sessions, Kerberos, file transfer over multi-user chat, lots of UI improvements (chat and preference windows, drag’n drop, single window mode, etc.), LaTeX support, and many more./p
pemstrongTigase Server 4.1/strong/em/p
pa href=http://www.tigase.org/en/content/tigase-xmppjabber-server-410-b1315Tigase Server version 4.1/a has been released. New features include virtual hosting, server monitoring, and virtual components./p
pemstrongBuddyMob/strong/em/p
pa href=http://ubikod.com/otmf/Laurent Lathieyre/a of a href=http://ubikod.com/Ubikod/a, pointed to a href=http://www.buddymob.com/BuddyMob/a, an a href=http://www.android.com/Android/a application in private beta now, designed and developed by a href=http://ubikod.comUbikod/a for a href=http://www.kiboo.net/Kiboo.net/a, a Belgian company. BuddyMob is offering IM, social networking, feeds and geolocation… and it is all based on XMPP./p
pstrongYa Online Mobile/strong/p
pa href=http://www.yandex.ru/Yandex/a, the giant Russian search engine and web portal, has launched the a href=http://mobile.yandex.ru/online/mobile version/a (Symbian S60) of its Ya Online client, based on its Jabber/XMPP service./p
pemstrongBuddycloud/strong/em/p
pa href=http://www.buddycloud.com/Buddycloud/a is a mobile application for Symbian S60, built on XMPP, offering status and location tracking services as well as chat./p
pemstrongLampiro/strong/em/p
pa href=http://code.google.com/p/lampiro/Lampiro/a, is a mobile open source (GPL licensed) XMPP client developed by a href=http://www.bluendo.com/Bluendo/a. It is written in J2ME, and supports a href=http://blog.bluendo.com/ff/hooraycompression, TLS, group chats, gateways, data forms and touch screens/a./p
pemstrongProsody/strong/em/p
pa href=http://mail.jabber.org/pipermail/jdev/2008-December/028640.htmlMatthew Wild announced/a on JDev mailing-list a href=http://prosody.im/Prosody 0.1.0/a (and a href=http://mail.jabber.org/pipermail/jdev/2008-December/028715.html0.2.0/a followed in less than a month), a new XMPP server, written in Lua, under the GPL license. It aims to be simple, light, and flexible./p
pemstrongSleek Migrate/strong/em/p
pa href=http://github.com/Kev/sleekmigrate/tree/masterSleek Migrate/a is a server migration tool a href=http://www.kismith.co.uk/wordpress/index.php/2008/11/30/sleek-migrate/announced/a by a href=http://www.kismith.co.uk/Kevin Smith/a, released under GPL license, based on the a href=http://code.google.com/p/sleekxmpp/SleekXMPP/a library written in Python by a href=http://nathan.fritzclan.com/Nathan Fritz/a./p
pemstrongWeb-Based JavaScript XMPP Clients/strong/em/p
pWe have a bunch of Web-based JavaScript XMPP clients:/p
ul
lia href=http://nounours.txzone.net/trac/Nounours/a is based on a href=http://extjs.comExtJS/a and a href=http://blog.jwchat.org/jsjac/JSJaC/a using a href=http://www.xmpp.org/extensions/xep-0124.htmlBOSH/a, released under the GPL license/li
lia href=http://code.google.com/p/ijab/iJab/a is using a href=http://code.google.com/webtoolkit/GWT/a and JSJaC, released under the GPL license/li
lia href=http://code.google.com/p/trophyim/TrophyIM/a is based on the a href=http://code.stanziq.com/stropheStrophe/a library, released under the MIT license/li
/ul
pemstrongLime Wire 5.0 alpha/strong/em/p
pa href=http://www.limewire.com/Lime Wire/a, the open source P2P software based on the Gnutella network, a href=http://blog.limewire.org/?p=309integrates Jabber/a in its a href=http://www.limewire.com/download/alphaversion.php5.0 alpha version/a./p
pstrongWeb-based Services/strong/p
pstrongemFire Eagle/embr /
/strong/p
pSeth Fitzsimmons a href=http://mail.jabber.org/pipermail/pubsub/2008-December/000067.htmlannounced/a an XMPP pubsub interface to a href=http://fireeagle.yahoo.net/Yahoo’s FireEagle/a./p
pemstrongRemindr/strong/em/p
pa href=http://remindr.info/Remindr/a sends you reminders via mail, phone or Jabber./p
pemstrongChatterous/strong/em/p
pa href=http://www.chatterous.com/Chatterous/a lets you join multi user chats via your web browser, IM client, phone, or e-mail./p
pstrongOther News/strong/p
pOutside of the software releases scope, we have other news:/p
pstrongTigase Server virtual hosting/strong/p
pAbove we mentioned the new a href=http://www.tigase.org/en/content/virtual-hosts-tigase-servervirtual hosting/a support in a href=http://www.tigase.org/en/project/tigase-serverTigase Server/a. Artur has also made it configurable a href=http://www.tigase.org/en/content/managing-virtual-domains-using-psi-clientthough the Psi XMPP client, with the help of ad-hoc commands/a./p
pstrongPsi/strong/p
pWith 1,500 downloads per day and 2.4 million downloads overall, the open source Psi XMPP client has a href=http://halr9000.com/article/657made a long road since its beginning/a./p
pstrongSAPO Codebits/strong/p
pa href=http://metajack.im/Jack Moffitt/a’s talk (51 minutes) at SAPO Codebits is online, both a href=http://codebits.sapo.pt/intra/s/speaker/11the video and the slides/a./p
pstrongFLOSS Weekly/strong/p
pa href=https://stpeter.im/Peter Saint-Andre/a gave a href=http://twit.tv/floss49an interview to FLOSS Weekly/a:, the audio is available or as an a href=http://www.podtrac.com/pts/redirect.mp3/twit.cachefly.net/FLOSS-049.mp3mp3/a for download (33 MB, 1h12)./p
pstrongOn the Specifications Front/strong/p
pThe Jingle XEPs for multimedia sessions like voice and video, have entered a LAST CALL:/p
ul
lia href=http://xmpp.org/extensions/xep-0166.htmlXEP-0166: Jingle/a/li
lia href=http://xmpp.org/extensions/xep-0167.htmlXEP-0167: Jingle RTP Sessions/a/li
lia href=http://xmpp.org/extensions/xep-0176.htmlXEP-0176: Jingle ICE-UDP Transport Method/a/li
lia href=http://xmpp.org/extensions/xep-0177.htmlXEP-0177: Jingle Raw UDP Transport Method/a/li
/ul
pAs with all Last Calls, please consider the following questions and send your feedback to the a href=mailto:standards@xmpp.orgstandards@xmpp.org/a discussion list:/p
ol
liIs this specification needed to fill gaps in the XMPP protocol stack or to clarify an existing protocol?/li
liDoes the specification solve the problem stated in the introduction and requirements?/li
liDo you plan to implement this specification in your code? If not, why not?/li
liDo you have any security concerns related to this specification?/li
liIs the specification accurate and clearly written?/li
/ol
pYour feedback is appreciated!/p
pSome extensions aka ProtoXEPs have come in:/p
ul
lia href=http://xmpp.org/extensions/inbox/mine.htmlMessage Mine-ing/a: In servers that deliver messages sent to the bare JID to all resources, the resource that claims a conversation notifies all of the user’s other resources of that claim./li
/ul
pA few XEPs have entered Final status:/p
ul
lia href=http://xmpp.org/extensions/xep-0174.htmlXEP-0174: Serverless Messaging: /aCommunicate over local or wide-area networks using the principles of zero-configuration networking and without the need for servers./li
lia href=http://xmpp.org/extensions/xep-0085.htmlXEP-0085: Chat State Notifications/a: Communicate the status of a user in a chat session - enaged, composing, gone, etc./li
lia href=http://xmpp.org/extensions/xep-0012.htmlXEP-0012: Last Activity/a: Communicate information about the last activity of someone./li
/ul
pstrongXMPP: The Definitive Guide - Rough Cuts edition/strong/p
pa href=https://stpeter.im/?p=2378Peter Saint-Andre/a, a href=http://el-tramo.be/blog/xmppbook-roughcutsRemko Tronçon/a and a href=http://www.kismith.co.uk/wordpress/index.php/2008/12/19/xmpptdg-roughcut/Kevin Smith/a are writing a book on XMPP, for a href=http://www.oreilly.comO’Reilly/a. a href=http://oreilly.com/catalog/9780596157197/The rough cuts are available online/a./p
pstrongConclusion/strong/p
pThe XSF and XMPP community have been quite busy during the final weeks of 2008. We wish to thank everyone for their efforts, advice, and participation in 2008, and we wish all a happy 2009 filled with similar successes./p
-
pDuring the holiday downtime, I decided to spend a little time
improving my most some tools, specifically
a href=http://www.gnu.org/software/emacs/Emacs/a. While I was
experimenting and tuning I realized that I really love Emacs, and I
thought I'd share some of my favorite things about it./ph2Awesome daemon support/h2
pOnce you start having a bunch of extra modules and customizations,
Emacs beings to take a while to boot up. Fortunately we can just fire
up an Emacs server inside a running session, and then connect to it
via codeemacsclient/code. /p
pIn Emacs 23 (not yet released, but very usable) the emacsclient can
even create new graphical (X or Cocoa) or text frames. This means
that with codeEDITOR/code set to codeemacsclient -t/code it works just like a normal
console Emacs would, except that it starts eminstantly/em and has access
to all my already open buffers./p
pI used to use Vim at the command line because it loaded much faster
than Emacs, but now I can finally drop that habit./p
h2Interactively Do Things/h2
pa href=http://www.emacswiki.org/emacs/InteractivelyDoThingsido/a brings
a href=http://blacktree.com/?quicksilverQuicksilver/a and Spotlight type
search to Emacs. It shows me possible fuzzy completions for what I'm
looking for whenever I look for files or want to change buffers.
Using ido has really increased my ability to get around in all my
projects quickly./p
h2nxml Mode/h2
pThe nxml mode is an amazing thing. It validates the XML document live
and tells you exactly whats wrong. Just like a spell checker from a
modern word processor, it underlines the offending characters in red.
Moving the cursor over them tells you exactly what's wrong./p
pI use it for HTML, XSLT, and any other XML markup I'm working on, and
I never have to worry if it's correct./p
h2Yet Another Snippet/h2
pa href=http://code.google.com/p/yasnippet/yasnippet/a bring
a href=http://macromates.comTextMate/a style snippets to Emacs. Now,
snippets are nothing new for Emacs; we've had a href=http://www.emacswiki.org/emacs/SkeletonModeskeleton
mode/a and similar things
for a long time. yasnippet is just a lot easier./p
pMy main use of yasnippet is to insert things like doctypes and other
long strings that have some information that I must complete./p
h2dabbrev/h2
pcodedabbrev/code is on by default in all the Emacs that I've run into, and it
allows you to dynamically auto-complete anything based on the words it
finds in your open buffers. Invoking it multiple times will complete
longer and longer parts./p
pJust like everything with Emacs, it takes a good idea (text
completion) and makes it extremely general. It works great on code,
blog posts, and anything else I happen to be writing./p
h2Find Tag (M-.)/h2
pShortly after I started working with
a href=http://en.wikipedia.org/wiki/Chris_MontgomeryMonty/a on the
a href=http://www.xiph.orgXiph.org codecs (Ogg, Vorbis, Theora)/a I noticed
that he was using his editor a level far beyond what I was used to.
The best thing I saw him do was codefind-tag/code which jumps to the function
definition of the function name under your cursor. Using that, Monty
could surf around the code base at blinding speed./p
pcodefind-tag/code uses information in special tag files to implement this.
Emacs can also do many other things with tags like project lists and
auto-completion./p
h2Flyspell/h2
pFlyspell brings word processor style spell checking into Emacs. Just
like nxml mode's validation, Flyspell checks the spelling of words
live, and gives visual indications where things have gone wrong./p
pFlyspell is also well supported in other modes, so that it knows which
parts to check and which parts to skip. It's not perfect, but it is
extremely useful./p
h2Theming/h2
pA lot of people complain that Emacs is ugly, and the default
configuration is certainly not going to win any awards. I will say
though that Emacs is extremely well though out from a usability
standpoint, and it mostly stays out of the way as much as possible.
It is nice to get color syntax highlighting though, and
a href=http://www.emacswiki.org/emacs/ColorThemecolor-theme/a does just
that./p
pMy personal favorite is codecolor-theme-dark-laptop/code, which is somewhat
similar to TextMate's Twilight theme./p
h2Help In All Forms/h2
pLast, but absolutely not least, is the help system. Emacs has the
best help system I have ever seen./p
pFirst, you can get help in any number of ways:/p
ul
liUse the interactive tutorial (codeC-h t/code)/li
liRead the manual (codeC-h r/code)/li
liRead various other manuals (usually I'm after the Emacs Lisp manual
and tutorial) (codeC-h i/code)/li
liLook up what keys do what in the current buffer (codeC-h b/code)/li
liLook up what some key does by pressing the key (codeC-h k/code)/li
liLook up the name of a function (codeC-h f/code)/li
liLook up the name of a variable (codeC-h v/code)/li
liLook up functions about some topic (codeC-h a/code)/li
/ul
pNot only can you find all this information easily, but if you have the
source code package installed, it will link you directly to the
implementation. This means if I am looking up information about a
particular Emacs function, within a few key presses I'm staring at the
actual function./p
pEmacs is probably the only system for which I don't use Google as the
first place for answers to my questions. Nearly everything is a few
key presses away, even if you have no idea what you are looking for./p
h2Emacs Rocks/h2
pI still have tons to learn about Emacs, but it already fits like a
glove. Did I mention that it works the same whether I'm on OS X or
Linux or in a terminal or the windowing system?/p
pFor those of you who also use Emacs, I'd love to hear about your
favorite things./p
img src=http://feeds.feedburner.com/~r/metajack/~4/502425699 height=1 width=1 /
-
pI recently switched this blog over to
a href=http://github.com/mojombo/jekyll/tree/masterJekyll/a. Jekyll is a
static blog generator that can be used to manage a blog from source
control instead of from a silly Web app. In my case, this blog lives
in a href=http://git.or.czGit/a and whenever I push new commits it
regenerates the site./p
pToday I spent a little time automating some common actions in
a href=http://www.gnu.org/software/emacs/Emacs/a for working with Jekyll
blogs. You can find codejekyll.el/code in a href=http://github.com/metajack/jekyll/tree/master/emacs/jekyll.elmy Jekyll branch on
GitHub/a./p
pHere's what it does:/p
ul
licodeC-c b n/code - Create a new draft post./li
licodeC-c b P/code - Publish a draft./li
licodeC-c b d/code - List all drafts./li
licodeC-c b p/code - List all posts./li
/ul
pI'm quite happy with it, and it has been fun exploring a href=http://en.wikipedia.org/wiki/Emacs_LispEmacs
Lisp/a./p
img src=http://feeds.feedburner.com/~r/metajack/~4/501479042 height=1 width=1 /
-
pI like to keep a daily journal of what I'm working on so that I can
look back and see what I was up to yesterday or a week ago. I
sometimes shift context so often during a day that I completely forget
what I was previously doing. I used to do this manually in a plain
text file, but now I've automated it using a href=http://metajack.im/todoEmacs/a
a href=http://orgmode.orgOrgMode/a./ppFrom anywhere in Emacs, I just hit codeC-c j/code and it opens up my journal,
creates a new entry if today's entry doesn't already exist, and let's
me start typing. It also narrows the buffer in Emacs so that I only
see today's entry when I'm journaling./p
pIt might be nice to extend this similarly to my Emacs GTD capture
system. I could bind a system wide hot key to open a new frame with
the current journal entry; then I could get to my journal easily from
anywhere./p
pHere's the code for those who are interested./p
pcode/code/p
pre name=code class=lisp(defvar org-journal-file ~/Documents/org/journal.org
Path to OrgMode journal file.)
(defvar org-journal-date-format %Y-%m-%d
Date format string for journal headings.)
(defun org-journal-entry ()
Create a new diary entry for today or append to an existing one.
(interactive)
(switch-to-buffer (find-file org-journal-file))
(widen)
(let ((today (format-time-string org-journal-date-format)))
(beginning-of-buffer)
(unless (org-goto-local-search-forward-headings today nil t)
((lambda ()
(org-insert-heading)
(insert today)
(insert \n\n \n))))
(beginning-of-buffer)
(org-show-entry)
(org-narrow-to-subtree)
(end-of-buffer)
(backward-char 2)
(unless (= (current-column) 2)
(insert \n\n ))))
/pre
p/p
img src=http://feeds.feedburner.com/~r/metajack/~4/500688644 height=1 width=1 /
-
pIt's the last day of 2008, and I have been thinking about what I have
done this year./p
ul
lipa href=http://www.chehsspark.comChesspark/a added many new features,
fixed many bugs, and tried several huge experiments. We explored
the a href=http://metajack.im/2008/09/12/dont-be-afraid-of-change/freemium
model/a as
opposed to straight subscriptions, we launched
a href=http://www.wuchess.comWuChess/a as a branded site in cooperation
with a href=http://en.wikipedia.org/wiki/RZARZA/a, and we've spun it off
under new management as we pursue a new project./p/li
lipa href=http://www.stanziq.comStanziq/a was
a href=http://mashable.com/2008/12/01/stanziq/born/a from a combination
of our vision of the new a href=http://metajack.im/2008/09/11/real-time-is-completely-different/real time
Web/a
and many ideas we had at Chesspark. The world needs a real time
search engine./p/li
lipMy team and I created and then released the code for
a href=http://www.speeqe.comSpeeqe/a, a Web 2.0 style group chat
application based on XMPP. It's time for
a href=http://en.wikipedia.org/wiki/IrcIRC/a to die./p/li
lipI a href=http://metajack.im/2008/10/22/be-multi-lingual-and-learn-a-new-language/learned some new
languages/a.
I have spent quite a bit of time with
a href=http://metajack.im/http;//www.erlang.orgErlang/a this year, and I'm looking forward
to solving more problems with it in 2009. I've also
a href=http://github.com/metajack/jekyll/tree/masterhacked/a some
a href=http://ruby-lang.orgRuby/a for the first time. I've been picking
up a bit of a href=http://en.wikipedia.org/wiki/Emacs_LispEmacs Lisp/a
and learning about a href=http://haskell.orgHaskell/a./p/li
lipI experimented with both a href=http://bazaar-vcs.orgBazaar/a and
a href=http://git.or.czGit/a heavily to replace my use of
a href=http://subversion.tigris.orgSubversion/a. I ended up a href=http://metajack.im/2008/12/08/codestanziqcom-switching-to-git/picking
Git/a
and have been extremely happy./p/li
lipI renewed my commitment to XMPP by joining both the
a href=http://www.xmpp.orgXSF/a board of directors and council./p/li
lipI finally achieved a long time goal of blogging more, which I hope
to continue./p/li
lipMost important (to me at least), I gained a new family member - a href=http://www.misterjasper.commy
son, Jasper/a. He puts a smile on my
face every day, and something about constraints he imposes has
increased my productivity./p/li
/ul
pI'm sure there is stuff I have forgotten. I find it remarkable
difficult to remember how much time has passed since various events.
The last four years with Chesspark seem like they all happened in the
last year./p
img src=http://feeds.feedburner.com/~r/metajack/~4/499938915 height=1 width=1 /
-
OneTeam for iPhone 1.2.0 is scheduled for submission on Apple Appstore. pOneTeam for iPhone is a Jabber / XMPP for iPhone that supports a large subset of the XMPP protocol. It is clean, easy to use and to not rely on third party server (it connects directly to your XMPP server)./p
pI think we have reached a point in development where we are really happy with this client. It supports a really large number of XMPP server and authentication method. One of our biggest surprise has been with iChat server that require very unusual authentication methods. OneTeam for iPhone is probably one of the few XMPP clients that now supports it./p
pWe have been quite far today in supporting XMPP features. For example we support gateways discovery and configuration directly from the phone (and gateway contact addition as well). The next big feature is probably be going to be groupchat support./p
pWe are listening to your comments to help us improve this mobile XMPP client. Currently we think it is one of the most usable mobile client, but we are expecting to make it even better. Your feedback is welcome :)/p
pMore details on the product page a href=http://www.process-one.net/en/solutions/oneteam_iphone/OneTeam for iPhone/a./p
-
pUbiquitous capture is the part of
a href=http://en.wikipedia.org/wiki/Getting_Things_DoneGTD/a that I am most
interested in. While I am working I'll come up with random new
ideas, find unrelated bugs in code I'm working on, or find something I
need to remember later. I want to make a note of these things without
causing much interruption to the task at hand. I've tried a number of
solutions to this problem and have now got a great solution going
using my favorite editor, a href=http://www.gnu.org/software/emacsEmacs/a./p
pHere's a small demo screencast:/p
p/ph2Requirements/h2
pThere are some basic requirements that I think any solution to the
capture problem must solve./p
pIt should be immediately accessible from any application on the
computer. I want to have some key binding that immediately lets me
jot down something quickly and then gets out of my way./p
pIt needs to work everywhere I do. I currently use both OS X and Linux
on different machines. I don't want to have to capture only on one
machine, and I want the capture method to the be same on both./p
h2Why Emacs/h2
pIf you use Emacs, then it makes a lot of sense to use it for capture.
If you don't use Emacs, then it probably doesn't, although
a href=http://metajack.im/http;//orgmode.orgOrgMode/a is good enough to convert some people./p
pFirst, Emacs is everywhere. It runs well on Linux, OS X, and Windows./p
pEmacs is also where I do a lot of my work already. This means I
always have Emacs running, and many times when I am capturing
something, it relates to things I am doing in Emacs. Notable
exceptions to this include Web browsing and e-mail./p
pEmacs comes with a remarkably useful extension called OrgMode.
OrgMode can be used like an outliner, but it also has hooks for to-do
lists and calendaring. OrgMode integrates with
a href=http://www.emacswiki.org/emacs/RememberModeRemember/a which is an
Emacs capture tool./p
pThese add up to most of a great capture solution. All we need is some
glue./p
h2Capturing From Anywhere/h2
pThe first requirement is that we be able to capture from anywhere.
This means we will need to globally bind some combination of key
presses to invoking the Remember functionality in Emacs./p
pEmacs has a server mode that allows other things to communicate and
control it. This is a lot like AppleScript on OS X except that it is
done with a href=http://en.wikipedia.org/wiki/Emacs_LispEmacs Lisp/a. All
we need to do is send Emacs a command when the global hot key is
pressed. This is easily accomplished with codeemacsclient -e
'(some-command)'/code./p
pBinding the hot key is done in the window manager preferences in
Linux. Since my Ubuntu machines run compiz, I added a binding for
codelt;Controlgt;lt;Altgt;backslash/code to run codeemacsclient -n -e
'(make-remember-frame)'/code. On OS X I used
a href=http://www.shadowlab.org/Software/spark.phpSpark/a to bind the same
keys to a small bit of AppleScript which runs the same command as Ubuntu./p
h2Fine Tuning Emacs/h2
pFinally, I wanted Emacs to pop up a new, small window (what it calls a
frame) and let me start typing. I also wanted Emacs to get rid of the
window as soon as I was finished, either by saving my note or
discarding it. This took a little digging through Emacs documentation
and bits of code, but turned out not to be that hard. /p
pHere is my codemake-remember-frame/code code, along with the hooks it needs
to work./p
pcode/code/p
pre name=code class=lisp(defadvice remember-finalize (after delete-remember-frame activate)
Advise remember-finalize to close the frame if it is the remember frame
(if (equal remember (frame-parameter nil 'name))
(delete-frame)))
(defadvice remember-destroy (after delete-remember-frame activate)
Advise remember-destroy to close the frame if it is the rememeber frame
(if (equal remember (frame-parameter nil 'name))
(delete-frame)))
;; make the frame contain a single window. by default org-remember
;; splits the window.
(add-hook 'remember-mode-hook
'delete-other-windows)
(defun make-remember-frame ()
Create a new frame and run org-remember.
(interactive)
(make-frame '((name . remember) (width . 80) (height . 10)))
(select-frame-by-name remember)
(org-remember))
/pre
p/p
img src=http://feeds.feedburner.com/~r/metajack/~4/498929305 height=1 width=1 /
-
PlanetErlang, the Erlang news and blog post aggregation site has been rewritten. pThe new site should be easier to read. It includes a search engine, that allows users to search inside the history of Erlang posts among all the known blogs. The sitebar also contains latest Twitter post on Erlang./p
pPlanet Erlang is available on the following address: a href=http://www.planeterlang.orghttp://www.planeterlang.org/a./p
pEnjoy !/p
-
Posted: December 29th, 2008, 6:25pm CET by tm
pSince quite a month there is a new a href=http://xmpp.orgXMPP/a server on the market, called a href=http://prosody.imProsody/a. Today version 0.2.0 has been released with some new features which you can all read up in the a href=http://prosody.im/doc/release/0.2.0release notes/a./p
pVersion 0.2.0 has been released just one month after version 0.1.0 and four months after development began. With currently nearly one month between a release and the next we have a good release frequency which is fairly important for a project, especially for one which focuses on ease of prototyping new features in and a protocol around it like XMPP with is evolving pretty fast./p
pWith consent of all the other developers, Waqas and my humble self, a href=http://matthewwild.co.ukMatt/a dictated the use of a href=http://lua.orgLua/a for the server which has quite some advantages.br /Since it's an interpreted language you don't have to wait for building to test some changes you made or don't need stuff like a href=http://www.gnu.org/software/autoconf/autoconf/a to build your project cross-platform. However we have some binary modules for encryption and more low-level stuff./p
pThe resulting server is pretty fast, already implements quite some XEPs while not being a memory beast like a href=http://ejabberd.imeJabberd/a. Not to forget the nice side affect of using Lua as implementation environment which is that you can easily add new protocols to it and test them. This should help us to push the interesting and important XEPs server side so that the client developers get in charge to implement them on their side./p
pSo feel free and grab Prosody from its a href=http://prosody.im/download/download page/a, test it and if you find some please report bugs on the a href=http://groups.google.com/group/prosody-devmailing list/a or in the a href=xmpp:prosody@conference.heavy-horse.co.uk?joinchat room/a./p
br /
pCheers,br /
Tobias/p
-
pa href=http://unclenaynay.comNathan/a, my fellow developer at
a href=http://stanziq.comStanziq/a was recently asked about his technology
predictions for 2009. I thought his answer was excellent, and with
his permission, I include it below./p
pFor me, the key point is:/p
blockquote
pThere will be a move beyond the current ajax applications to make the internet more real time. /p
/blockquotepNathan's full answer:/p
blockquote
pI think in 2009 we are going to see some changes in internet
applications. There will be a move beyond the current ajax
applications to make the internet more real time. An example of the
beginnings of this is the live twitter search and 'live feed'
feature in facebook. In 2009 we should see internet sites move
towards pushing their data out in a live stream. The new internet
apps will take advantage of these live streams to create some very
nice internet applications. My favorite example is the Noaa website
pushing out their buoy data and kayak.com pushing out their flight
information. Now combine the two real time feeds and you have an
application that will tell you the cheapest way to get to get to
good waves! Of course mashups are old news, but real time data and
search is not. Another example is a regular static search along
with a real time feed that shows What are people saying about 'my
query' now?. This section will show all the micro-blogs or
comments made about search results, all in real-time. I only make
this prediction because its what our new company, a href=http://stanziq.comhttp://stanziq.com/a
, is creating. If we have anything to do with it, this is what will
happen in 2009 :)/p
/blockquote
img src=http://feeds.feedburner.com/~r/metajack/~4/493199180 height=1 width=1 /
-
pThe main part of the Tigase server development is testing. Actually I spend much more time on testing the server in different scenarios than on writing the actual code./p
pMost of the tests can be run locally on the development machine. Performance tests and especially load tests require more hardware but usually the development machine as a client and one mor as the server is enough./p
pOne category of tests however require more hardware to be involved and in the best case scenario that hardware should be always on to see how the software behaves over the longer period of time. Clustering tests. They require ideally 3 machines for the server deployment. I run automated tests on the Tigase server very often and also this clustered installation is available to the public at the address: a href=http://xmpp-test.tigase.org/xmpp-test.tigase.org/a. By running it for a long time and exposing it to the public I can catch many exceptional cases and fix problems which don't appear on short automatic test runs./p
pAt the moment I use 3 machines which are always turned on. Unfortunately 2 of them are very old hardware which have started to refuse working more and more often. Therefore I am looking at replacing them with something different. Ideally it would be low power consumption machine with at least 512MB RAM. There is even no hard disk needed as the system could be started from USB stick or DVD disk. It could be also a laptop with at least single core Pentium M 1.5GHz and 512MB RAM./p
pIf you have such a hardware and can offer it to the project I would very much appreciate your help. Please send me a message using the a href=http://www.tigase.org/contactcontact form/a, or via email/xmpp at the address: strongkobit AT tigase.org/strong to discuss details. /p
pa href=http://www.tigase.org/en/content/spare-hardware-clustering-tests-neededread more/a/p
-
Posted: December 19th, 2008, 8:51am CET by Kev
pIt’s been an exciting time recently for the “XMPP: The Definitive Guide” book that Peter, Remko and I have been working on. Just over a week ago, a href=http://el-tramo.be/blog/xmppbook-roughcutsRemko announced the availability of the book in the Rough Cuts scheme/a, where you can buy a PDF of the unfinished manuscript to read now, and receive the full version when it’s ready. Then, earlier this week, a href=https://stpeter.im/?p=2378Peter posted about our submission of the full manuscript to O’Reilly/a, ready for technical review. Now it’s my turn with the good news: O’Reilly have updated a href=http://oreilly.com/catalog/9780596157197/the Rough Cut of the book/a with our submission, meaning that there is a complete, current book on the XMPP technologies available./p
pThere will still be changes to the manuscript as a result of reviewers’ comments, but we think this is now a text we’re happy to have available. O’Reilly have feedback mechanisms for Rough Cuts, so if you read the book and anything is unclear (or, let us hope not, wrong) please help us make this book something that can guide current and future developers in their work with XMPP./p
pa href=http://oreilly.com/catalog/9780596157197/XMPP: The Definitive Guide/a/p
-
pAll the feedback about my a href=http://metajack.im/2008/11/05/interest-in-xmpp-open-day/ideas for XMPP Open Day/a was very positive, so I think we should make it happen. I’ve created a a href=http://wiki.jabber.org/web/XMPP_Open_Dayconference outline/a in the a href=http://wiki.jabber.orgwiki/a, but I need your help to nail down the details and generate more ideas./p
pPlease feel free to edit the wiki page, comment here, or a href=mailto:jack@metajack.ime-mail me directly/a if you have any feedback or wish to participate as a presenter or moderator./p
img src=http://feeds.feedburner.com/~r/metajack/~4/489372853 height=1 width=1 /