For front-end developers who crave maintainable assets,Jam is a package manager for JavaScript.Unlike other repositories, we put the browser first by using AMD modules.Jam - The JavaScript package managerI was talking to fnd just the other day about this and what a good idea it was. I haven’t looked at the implementation too closely yet, but it seems (to me at least) that it’s something that has been sorely missing in the past.
via TiddlySpace [source]

The AMBIT Collaboration are thrilled that we have won the Guardian and Virgin Innovation Nation Award under the category of innovation in collaboration.Thanks to all our supporters who voted for the collaboration.Winners! Innovation Nation award!Tiddlers in action! Congratulations to al involved.via dickon
via TiddlySpace [source]

When you write a program using a C#-like language you typically start by modelling your problem as a hierarchical set of classes which represent your domain. You then procede to ‘flesh out’ and expand upon these types with code which actually implements your program.After a while you inevitably find an exception to the rules of the system you have created - your types turn out not to match the problem in some way. Typically this occurs later after a lot of work has already been done which is now strongly tied to the structure of your type hierarchy, so you are left with a problem - do you hack around the incongruity, usually the quickest solution, or restructure your types to adapt to the new requirement?If you choose the former your hierarchy not only fails represent the problem anymore, it actively misleads you about it. If you choose the latter, you end up spending a long time yak shaving - working on something which has absolutely nothing to do with the problem itself and is purely a product of the system in which you are writing your program - the very definition of accidental complexity.CodeGrunt - The Brittleness of Type HierarchiesThis is my experience almost exactly, and why I tend to prefer more dynamic languages like Python and JavaScript that make refactoring easier.My approach tends to be to first start building, and then when refactoring/encapsulation opportunities arise, refactor and encapsulate. I find this results in something that better reflects the problem domain than defining a class hierarchy up front. Of course, I now use Python and JavaScript, which makes this all a lot easier.
via TiddlySpace [source]

I remember you though. I was really impressed by your story and your vision of where you want to take the company. Selling myself is not my strong suit, so I must have seemed pretty funny handing you my card and mumbling something about getting coffee. The thing is, once you get to know me, I’m a pretty funny and personable guy. Hell, I love to have a good laugh and hang out to decompress – it’s really important to me too.Confessions of an introvertSeems to me like being an introvert is deeply unfashionable and uncool in the web industry at the moment. That sucks. It would be awesome if it changed.
via TiddlySpace [source]

cdentwrites:So you got some action over on side A and a sizable set of web browsers that run across all these different operating systems. And then you’ve got this other browser that only runs on side B. If Microsoft wants to show a real commitment to an open web, they need to start releasing versions of IE for other operating systems. It used to be possible to get IE for Mac and Unix. There was even a time when IE was the clear best choice of browser on a Mac.
The thought occurs to me that the exact same argument can be made for Microsoft’s mobile app development process. That being:If people want to develop a mobile app, they need a Mac running OS X, unless they don’t want to support iOS (unlikely). On a Mac, they can develop apps for iOS, Android, and responsively on the web itself.If they want to also support Windows Phone, they need to shell out for a copy Windows, which they must then either run inside a VM (which sucks), using BootCamp (which is a lot of hassle), or on a separate Laptop (which is expensive).After they have Windows running, they need a copy of Visual Studio (I’m unsure of the license terms of the Express editions, but they may or may not suffice).So the workflow for someone wanting to support Windows Phone boils down to one of the following 2 options:Develop all your apps for everything but Windows Phone. Then switch to a whole new Operating System and make the Windows Phone version.
Develop all your apps for everything but Windows Phone and point people at the web site.
The solution seems fairly obvious (hint: it’s (2)).tl;dr: Microsoft needs to release Visual Studio for OS X as well as IE.
via TiddlySpace [source]

Remy Sharp writes]:Browsers need to:Fucking drop experimental prefixes. It’s unacceptable and a disservice to the developers working with your browser. You need to give timelines to dropping these things.Non-production ready browsers should support experimental prefixes, production ready releases should not. If it’s Chrome 16 - the stable version - experimental support should not be baked in. The properties should be full available without the prefix.Work with the working groups (…Apple).I agree with all of these points, but at the same time, I can’t see it actually happening. I just can’t see Google or Apple actually removing features from their browsers and moving them all into beta in perpetuity (because let’s face it, the standards process takes far far too long). Even if this did happen, I can well imagine most developers (and people who want these features) just switching to the beta and using that as their default browser, as most betas are fairly stable these days. That’s not solving the problem. It’s just moving it to another place.I’ve seen two comments on Twitter that really resonated with me about all this. The first, from psd, states:the problem with vendor prefixes is the namespace is used to target a browser vendor rather than disambiguating similar proposed featuresAnd strikes me as the current problem with vendor prefixes. Sure, the best features win out in the end (take the gradient syntax for example), but as it currently stands, the best feature ties rather too closely into the browser that implemented it. The solution would then be to drop the browser specific prefixes, and adopt feature based prefixes that, when they become popular, other browsers can implement and test out as well.The other comment on Twitter, was part of a conversation between Mike Mahemoff and Alex Russel and mentions the CSS Mixin proposal.The thought occurs to me that new features and proposals, when implemented in JavaScript, are never really a problem. This is, to a large extent, due to the presence of shims and polyfills, that abstract all the browser differences away with the inclusion of a single script tag (think the es5shim for example).Such solutions already exist for CSS, but they all involve either a build step (yuck!) or running all of your CSS through JavaScript first (yuck again!). I’m going to name this “The Dart Approach”, as it aims to solve the problems with CSS by forcing you to write something that isn’t CSS. The CSS mixin proposal would solve all of this in one step by allowing you to include a single CSS file (presumably from a CDN somewhere) that includes cross browser definitions for non-standard features. Then you just keep going as normal, and should anyone want to use a webkit only feature, they can go right ahead, safe in the knowledge that if Mozilla, for example, implement a similar feature (with their own prefix), it will just automatically work (as soon as the CDN is updated of course).Developers are lazy. Browser makers don’t want to remove features (or relegate them to beta only). As with Piracy, the solution is not to educate the pirates (or in this case, developers/designers/browser makers); the solution is to make it easier to be cross browser compatible than to not be cross browser compatible (in much the same way jQuery does). CSS mixins seems to be a good way to accomplish this.The only real problem now, is how quickly we can get it through the standards process (a problem in itself).
via TiddlySpace [source]

I’ve created a Chrome Extension for tiddlybookmarks. It’s not in the Chrome Web Store yet so you’ll have to install it manually, but you can find it at chrome-extension.crx if you want it.
via TiddlySpace [source]

When sites like Wikipedia and Reddit banded together for a major blackout January 18th, the impact was felt all the way to Washington D.C. The blackout had lawmakers running from the controversial anti-piracy legislation, SOPA and PIPA, which critics said threatened freedom of speech online.Unfortunately for free-speech advocates, censorship is still a serious threat.Few people have heard of ACTA, or the Anti-Counterfeiting Trade Agreement, but the provisions in the agreement are just as pernicious as anything we saw in SOPA. Worse, the agreement spans virtually all of the countries in the developed world, including all of the EU, the United States, Switzerland and Japan.If You Thought SOPA Was Bad, Just Wait Until You Meet ACTA - Forbes
via TiddlySpace [source]

Humans are, well, human. The best way to avoid privacy breaches is not to formulate a detailed privacy policy; it’s to reduce your capabilities so that you’re unable to violate anyone’s privacy. To toss a metaphorical steering wheel out the window, in other words.Playing chicken with cat.jpgThe quote is basically the tl;dr. Makes a lot of sense though
via TiddlySpace [source]

Combining security and flexibility is a difficult task. This is just one tiny corner of the problem that I’ve experienced in depth, in an effort to make TileMill’s interactivity language more secure.At the start of the day we had a problem: maps have an idea of ‘formatters’ similar to CouchDB views, which are Javascript. And while the vast majority of formatters are generated by friendly tools like TileMill to take objects and return formatted strings, the technical definition of a formatter was extremely broad: it was any Javascript.This was a problem: any Javascript means evil Javascript, and, like any other company that provides embeds, like YouTube or Disqus, we don’t want to be a vector.JS Security With Untrusted Code - macwright.orgThis sounds familiar. I came to pretty much the same conclusions with TiddlySpace. The only difference being that TiddlyWiki markup is powerful enough on its own to not really require Mustache.
via TiddlySpace [source]

To complicate matters further, behind the scenes, Verizon and Google were arguing over Net Neutrality rules. Verizon was opposed, Google was in favor. Then a funny thing happened. Google started supporting Verizon’s viewpoint on the matter! If you’re looking for the first post where I’m really, truly, pissed off at Google, look no further. parislemon • Why I Hate AndroidSounds about right.
via TiddlySpace [source]

I’ve been working on interfacing with an LDAP server recently with the aim of doing lookups for full names and, since the install/getting started process was overly long/tedious, I thought I’d document what I did.Installing OpenLDAP (or: getting depencies)So the first thing I did was to type:$ sudo pip install -U python-ldap
into my terminal. It turns out though that the version of OpenLDAP installed by default is too old for python-ldap (no surprises there then). This obviously means that you need to install OpenLDAP manually. In Oracle Enterprise Linux (at least, the version we’re using), it turns out that this requires the latest BerekelyDB as well.So, head on over to the download page (it’s an Oracle one so you need to sign up for an account before you can download anything and pick the version that most closely matches “Berkeley DB 5.3.15.NC.tar.gz without encryption (34M)” (the version number may have changed by the time you read this).Download it and put it somewhere sensible on your machine. Then run:$ tar -xvzf db-version.NC.tar.gz
$ cd db-version/build_unix
$ ../dist/configure
$ make
$ make install
Then, download the latest OpenLDAP package and put it somewhere sensible. Then run:$ tar -xvzf openldap-version.tgz
$ cd openldap-version
We then need to ensure that configure can see our BerkeleyDB install by referencing the appropriate libraries and include directories. For me, I had to type out the following:$ env CPPFLAGS=-I/usr/BerkeleyDB.5.3/include LDFLAGS=-L/usr/local/BerkeleyDB.5.3/lib ./configure
Assuming this goes ok, type:$ make depend
$ make
$ make install
Installing Python-LDAPWe then need to download python-ldap and tweak the setup.cfg file to point it at our new OpenLDAP install. So type:$ pip install -U --no-install python-ldap
$ cd build/python-ldap
$ vim setup.cfg
and change the library_dirs and include_dirs lines to point to the correct locations. For me, this was:library_dirs = /usr/local/lib
include_dirs = /usr/local/include /usr/include/sasl
Then type:$ sudo pip install -U .
Finally, check it works by doing:$ python
>>> import ldap
>>>
If you don’t get any errors, it should have worked.Using Python-LDAPThe next step is to connect and use it. Connecting is a 2-stage process. First, initialize the connection, then bind to it. My LDAP service doesn’t bother with SSL/TLS/etc, so for me, I type something like:>>> import ldap
>>> con = ldap.initialize('ldap://host:port')
>>> con.simple_bind_s('cn=username,o=(this will be provided by your ldap provider)', 'password')
You can then perform searches with:>>> con.search_s(search base, ldap.SCOPE_SUBTREE, 'attr=value_to_search_for', [attrs, to, get, back])
That’s it.ReferencesThe following tabs are still open in my browser, and reference at least a part of the process: http://bit.ly/AaW1BW (This is the most useful site) http://bit.ly/xM9o2Hhttp://bit.ly/zvQanehttp://bit.ly/Ac8DIchttp://bit.ly/xzkFDKhttp://bit.ly/zOLZWvhttp://bit.ly/xgzXvchttp://bit.ly/xyO4zp
via TiddlySpace [source]

This space illustrates an autocomplete mode for linking to tiddlers in wikitext.It’s currently somewhat incomplete, though the basic autocomplete mode works well enough to illustrate the concept.It uses CodeMirror to provide a sensible text area that is able to keep track of cursor/line/etc positions and text input more precisely.See autolink for the demo, and main.js for the code.pmario — There was an issue with keyCode vs. charCode, which should now be fixed. Thanks. via TiddlySpace [http://bit.ly/w8qdaL]

Welcome to tiddlybookmarks. A TiddlyWiki for saving and finding all your favourite bookmarks. It can also fill the void left by delicious. It’s free and it comes with a nice little rest api (see api choices)tiddlybookmarks - a TiddlySpaceI’ve just updated the Bookmarklet with some new features (Indeed, I’m writing this directly from it). You can now: Link in the old way Quote something (your tiddler will look something like this) Create a full post (for quick blogging) Save images (well, links to images at least via TiddlySpace [http://bit.ly/yAd6ET]

Every time I type out a fraction of a URI into the address bar, Chrome auto-completes it:
If I then hit enter immediately, Chrome takes me to a different page:
This is really annoying (obviously).
Dear Chrome Devs: if you auto-complete with one URI, take me to that URI. Don’t take me to a different one.