<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-8553235869310113140</atom:id><lastBuildDate>Tue, 15 Jul 2008 16:18:13 +0000</lastBuildDate><title>PhiRatE</title><description/><link>http://www.phirate.com/</link><managingEditor>noreply@blogger.com (PhiRatE)</managingEditor><generator>Blogger</generator><openSearch:totalResults>71</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-644643216096933598</guid><pubDate>Wed, 09 Jul 2008 04:26:00 +0000</pubDate><atom:updated>2008-07-09T16:43:23.019+12:00</atom:updated><title>Engaged :)</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.phirate.com/uploaded_images/serra2-734228.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://www.phirate.com/uploaded_images/serra2-734224.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So, yeah, sorry for not posting for a while, i've been busy and to be honest, my life is usually pretty ho-hum.&lt;br /&gt;&lt;br /&gt;Not today tho, as of last night, myself and my girl serra are engaged to be married :) :) :) I'm cycling between giddy happiness and panic, but I'm told that's entirely normal, and it's mostly giddy happiness :)&lt;br /&gt;&lt;br /&gt;Love you babe :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.phirate.com/uploaded_images/serra1-797541.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://www.phirate.com/uploaded_images/serra1-797533.jpg" border="0" alt="" /&gt;&lt;/a&gt;</description><link>http://www.phirate.com/2008/07/engaged.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-1570485692123521546</guid><pubDate>Sat, 31 May 2008 07:35:00 +0000</pubDate><atom:updated>2008-05-31T19:36:14.358+12:00</atom:updated><title>Birthday code for Sam</title><description>You may need &lt;a href="bf.erl"&gt;this file&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;++++++++++[&gt;+++++++&gt;++++++++++&gt;+++&gt;+&lt;&lt;&lt;&lt;-]&gt;++.&gt;---.+++++++++++++++..+++++++++.&gt;++.&lt;&lt;------.&gt;----------------.+++++++++.++.------------.----.---.++++++++++++++++++++++++.&gt;+.&gt;.</description><link>http://www.phirate.com/2008/05/birthday-code-for-sam.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-9114565354278906394</guid><pubDate>Mon, 12 May 2008 03:21:00 +0000</pubDate><atom:updated>2008-05-12T15:28:19.372+12:00</atom:updated><title>The Coolest Things from Ironman</title><description>Ok, so, everyone knows the &lt;a href="http://www.imdb.com/title/tt0371746/"&gt;Iron Man movie&lt;/a&gt; is great. If you haven't seen it:&lt;br /&gt;&lt;br /&gt;1. Don't read any further (spoilers)&lt;br /&gt;2. WHAT THE HELL ARE YOU THINKING? GO RIGHT NOW.&lt;br /&gt;&lt;br /&gt;Right, now the legalities are out of the way..&lt;br /&gt;&lt;br /&gt;i loved the movie for many reasons, but post-watching, a few things stuck in my mind:&lt;br /&gt;&lt;br /&gt;1. Robot arms with fire extinguishers!&lt;br /&gt;2. Being able to fly (totally cool)&lt;br /&gt;3. The Anti-Tank Missile complete with Comedic Timing Device&lt;br /&gt;4. Mini-reactor that glows!&lt;br /&gt;5. I love that house. I love it. I want it. And the windows too.&lt;br /&gt;6. Virtual ex-britas butler with sarcasm module&lt;br /&gt;7. Delicious on-screen graphics&lt;br /&gt;&lt;br /&gt;But one of the most relevant things was:&lt;br /&gt;&lt;br /&gt;8. A competent PA&lt;br /&gt;&lt;br /&gt;I don't have a PA. I'd like one tho. My ability to keep a consistent calendar, or todo list, or anything, is pretty weak. I try, but software has not yet evolved to the point where it can keep me organised. Sadly, I can't afford one, nor can I afford a hilarious robot arm or a house built into a cliff in Malibu. Still, I can dream right?</description><link>http://www.phirate.com/2008/05/coolest-things-from-ironman.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-5212877820755809661</guid><pubDate>Fri, 09 May 2008 08:13:00 +0000</pubDate><atom:updated>2008-05-09T20:14:05.586+12:00</atom:updated><title>HORRAY!</title><description>I have &lt;span style="font-weight:bold;"&gt;finally&lt;/span&gt; got internet at my new place again. No more slow cellphone connection for meee...*joy*</description><link>http://www.phirate.com/2008/05/horray.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-5501423677022791098</guid><pubDate>Sat, 03 May 2008 13:27:00 +0000</pubDate><atom:updated>2008-05-04T02:00:40.444+12:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>caching twisted daemon performance python</category><title>Caching is stupid</title><description>Before you freak out, let me run with this one for a bit, it's based on some very practical experience.&lt;br /&gt;&lt;br /&gt;Caching is one of those things we instinctively turn to when we hit some kind of performance bottleneck within a web application - after all, the web is pretty much designed to be cached and has all these lovely headers and things, so it seems to make intuitive sense that if your stuff might get cached out there, you may as well cache it in here.&lt;br /&gt;&lt;br /&gt;The problem is that caching actually implies a serious problem, one that we often simply accept without any real thought: the authoritative source of our data is too slow to deliver the information accurately as fast as it is required.&lt;br /&gt;&lt;br /&gt;Now, sometimes this is reasonable - if you're delivering an aggregated RSS feed then fine, you need to keep a cached copy of the source data for a while because it would be rude to hammer other peoples servers for every request.&lt;br /&gt;&lt;br /&gt;Other times, however, it's actually just bad, and it's mostly the fault of the RDBMS.&lt;br /&gt;&lt;br /&gt;We in the web community have become so used to the authoritative-database model of life that we refuse point-blank to delegate authority to any other system. After all, the RDBMS has all kinds of good things like ACID which will ensure your data is always consistent etc etc.&lt;br /&gt;&lt;br /&gt;The problem is that data consistency has become this strangely religious holy grail. Never mind that foreign key constraints slow the living crap out of your inserts and updates, never mind the fact that in many cases using an ORM means you'd never have an invalid reference anyway, never mind that many people understand transactions in a database so poorly that they simply ascribe them magical powers of correctness they have no hope of guaranteeing, it's still "database or nothing!"&lt;br /&gt;&lt;br /&gt;I remember the first time I got thrown out of that comfort zone. In 2000 I was in Sydney working for a great company called &lt;a href="http://iguana2.com/"&gt;Iguana&lt;/a&gt; as their systems/linux guy. We were struggling pretty seriously with the huge load of information we were pulling in from the NZX and ASX and our database server was a monster. Scott Cooper - to this day my example of an brilliant programmer - was the programmer there, and simply did the obvious thing - he wrote a C daemon that stored the data in-memory, with basic checkpointing and methods for doing data catchup etc. As with everything Scott wrote, it was a work of art and brutally fast, leaving the database in the dust, relegated to dealing with historical data at its slow, databasey pace.&lt;br /&gt;&lt;br /&gt;Since then I have rarely come across a situation where a database didn't do the job in an acceptable timeframe, but there have been a few. In every case, my initial instinctive solution was to install memcached and "do something with it". In many cases this was fine, but in a few situations it was a serious, serious error. Case in point, the most recent Entrecard release involved getting rid of half the caching we were doing - which was failing to provide accurate results, and generally screwing up - and replacing the data source entirely with an in-memory daemon that acted as the authority.&lt;br /&gt;&lt;br /&gt;This daemon was written in python using the Twisted framework - a solution that allowed me to access data without contention issues. Careful coding meant that there were basically no loops at all within the code, preventing any possibility of lockup and providing very consistent timing for individual operations. The database had grown so large (millions of rows) that providing an accurate balance for an individual user took upwards of *3 seconds* per request, and the parallel nature of the balance modifications meant that it wasn't possible to "cache" the result effectively or accurately.&lt;br /&gt;&lt;br /&gt;The daemon, however, consistently delivered a perfectly accurate balance in-flight in under 0.001s, dramatically improving our ability to scale  The daemon also took over a number of other high-contention operations, including managing the card drops. This allowed us to return to the "glory days" of Entrecard where drops were counted immediately and the balance was always up to date, rather than the sad state of affairs we had recently where drops were processed "some time later" by a batch processing system.&lt;br /&gt;&lt;br /&gt;Next time you're having performance problems and you start thinking about caching, queues, batches etc take a second look at your architecture - is your current authoritative data source really the best solution to the problem? perhaps rather than using a cache to wallpaper over your problem, you'd be better off creating a data source that can deliver the data at the rate you really need.</description><link>http://www.phirate.com/2008/05/caching-is-stupid.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-5753984988974816323</guid><pubDate>Sat, 03 May 2008 12:05:00 +0000</pubDate><atom:updated>2008-05-04T00:26:26.028+12:00</atom:updated><title>SuperHappyDevHouse</title><description>A quick note, assuming I wake up in the morning, I intend to be at the Wellington,NZ SuperHappyDevHouse at &lt;a href="http://thecross.co.nz/"&gt;Southern Cross (the garden bar)&lt;/a&gt; on the 4th of May (today), I'll be doing a bunch of statistical analysis on Entrecard, drop by and say hi if you're around, many people there know me so just ask around if you don't.</description><link>http://www.phirate.com/2008/05/superhappydevhouse.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-518904315224467979</guid><pubDate>Fri, 18 Apr 2008 08:26:00 +0000</pubDate><atom:updated>2008-04-18T20:27:19.099+12:00</atom:updated><title>Oops</title><description>To everyone who offered kind words in the comments of the last post, thankyou! I hit "Reject" in the moderation screen by accident, I didn't mean to delete them! sorry :/ on a positive note, things are much better today :)</description><link>http://www.phirate.com/2008/04/oops.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-1736467595688166814</guid><pubDate>Wed, 16 Apr 2008 10:39:00 +0000</pubDate><atom:updated>2008-04-16T23:09:19.122+12:00</atom:updated><title>Days like these</title><description>There are days that are challenging and difficult, where you're juggling a thousand things and rushing to get things done but there's still some kind of satisfaction in the work, in knowing that you're moving forward.&lt;br /&gt;&lt;br /&gt;Today was not one of those days. Today was simply depressing. I know depressing isn't fun to read but, well, in the tradition of livejournal it's not really a blog if there isn't some whining self-pity.&lt;br /&gt;&lt;br /&gt;In a sense today, or at least, some day this week, was supposed to be a little triumphant - the huge change we made to Entrecard last week has pretty much stabilized, and in some world where I'm a gloating idiot I'd be saying "hah take that doubters!" but the fact is that that's pretty much the only positive thing that's happened this week and I met it more with a feeling of vague relief than actual joy.&lt;br /&gt;&lt;br /&gt;In other areas of Entrecard I've been struggling, we've had people trying to hack the security gear on the drop system, we've had severe load problems on the database, the queue manager which is supposed to help hold things when the database can't keep up started losing chunks of data,  some brainless idiot sent a death threat to another Entrecarder which means I'm going to have to go dig through a bunch of logs to find out who it was, and it's not like I don't have a thousand things I should be doing for EC anyway, let alone my other clients.&lt;br /&gt;&lt;br /&gt;I'm trying to move house this saturday, struggling there as well, I gave up any thought of trying to actually do a full move so now I'm just trying to get rid of my furniture and stuff so that all I have to move is boxes. M3 command adhesive is a total fraud, we have ripped wallpaper because of that, goodbye bond.&lt;br /&gt;&lt;br /&gt;That's just the stuff I can talk about in public. Beyond the point where you are desperate or in a hurry, there's a place where you're just a zombie, putting one foot in front of another with no real hope or expectation that you'll manage to get anywhere, dealing with whatever is right in front of you because there is so much high priority stuff that there is no hope of taking any kind of control of it. I am phi's zombie twin.&lt;br /&gt;&lt;br /&gt;I got a personal shock today, and it's thrown me a bit. My mother once told me that a person needs multiple things in their life they can take pride in, so that if something goes wrong with one they can draw strength from the others. She told me that when I was really embedded in a work situation that had gone bad and I was really upset about it.&lt;br /&gt;&lt;br /&gt;Well, I pretty much followed that advice since, but stuff has been going bad in pretty much every area in the last week and I've gotta say, it isn't any fun. Ah well, ce la vie, just keep on keeping on until the sun shines again.</description><link>http://www.phirate.com/2008/04/days-like-these.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-4450544743095354019</guid><pubDate>Sun, 06 Apr 2008 10:29:00 +0000</pubDate><atom:updated>2008-04-06T22:42:43.941+12:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>web frameworks</category><category domain='http://www.blogger.com/atom/ns#'>entrecard</category><category domain='http://www.blogger.com/atom/ns#'>dev day</category><category domain='http://www.blogger.com/atom/ns#'>rants</category><title>Dev day, rants etc</title><description>For those who asked what I recommend as a web platform, the basic answer is I don't. I personally use &lt;a href="http://www.turbogears.org/"&gt;Turbogears&lt;/a&gt;, a python-based framework - it works really well for me, but the key thing is that pretty much any of the next-gen platforms (or should I say "current-gen") are a huge step up. Much of it comes down to the way in which you like to code - some of the frameworks work better for people who like working in text and coding, others work better for people who like wizard-based construction and auto-templates. Go experiment.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://entrecard.com/blog/?p=261"&gt;Dev day&lt;/a&gt; at Entrecard went really amazingly well, while the 8am session was dead that was perhaps to be expected, the rest of the sessions had plenty of people, lively discussion, and I managed to implement most of the features people suggested on the spot.&lt;br /&gt;&lt;br /&gt;I've got to say, just before the first session I thought to myself "You're mad, why are you doing this? nobody implements features on the spot, it's just stupid", but damn if I didn't manage to pull it off.&lt;br /&gt;&lt;br /&gt;In the end I see it as a fundamental statement about what we are - other places try and tack a shiny web2.0 appearance onto an outdated technical approach, this was as bold a statement as I knew how to make for saying "we live and breathe agile". Also, it was great fun, and we got some fantastic ideas.&lt;br /&gt;&lt;br /&gt;Also, full credit to &lt;a href="http://www.mibbit.com/"&gt;Mibbit&lt;/a&gt; for their ajax IRC client, the embedded version performed perfectly and let us provide an easy, robust chat platform without putting any load on our server.</description><link>http://www.phirate.com/2008/04/dev-day-rants-etc.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-2281463173023211907</guid><pubDate>Mon, 31 Mar 2008 10:42:00 +0000</pubDate><atom:updated>2008-04-01T00:19:30.108+13:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>rants</category><title>PHP Rant</title><description>Ok, this is a Rant. Capital R. This means I am being a little bit outrageous - the objective is not to produce a compelling argument but to present a position in its purest form, devoid of any compromise or nod to reality.&lt;br /&gt;&lt;br /&gt;I'm tired of this people. To everyone busy scoping new projects, cross PHP and perl off your lists RIGHT THE HELL NOW. I'm sick of it. It's 2008. GET WITH IT.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;But PHP is a perfectly valid modern appli..&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;NO. NONONONONO. It's not. Get that thought out of your head RIGHT NOW. It is KILLING YOU. You are burning *countless hours* screwing around with PHP, every single page, every single project. Your &lt;span style="font-weight:bold;"&gt;life is fading away while you code that shit&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;but I already know PHP and it would be stup..&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Are you on CRACK? do you have any idea what you sound like?? I can't even go to conferences anymore, it's like walking into a room full of people who have intentionally put on blindfolds and then spend their time gleefully doing presentations to each other on New and Better Ways to Avoid Walls through Arm Movement Patterns. Seriously. It's time to move on, past time in fact.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;But hosting is so diffi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;GET. OVER. IT. Are you building a goddamn application or a toy!? oversubscribed toy shared server accounts are NOT AN APPLICATION PLATFORM. you're *betraying your clients* when you pretend it is, regardless of your language. Proper application hosting is available all over the place, go find it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;But php developers are so easy to fi..&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I hate this argument above all else. You can find thousands of shitty developers anywhere busy sticking their heads in the sand denying reality, if those are the people you want working on your application, or your clients application, you're already so far doomed you should just stop attended conferences or posting to mailing lists right now, and go play with the Visual Basic people.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;But there's this framework tha..&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Look, it's over ok? platforms reach the point where they just can't hack it anymore. Perl did last decade, PHP did around 2004. You can only stretch it so far before it's just a twisted, drooling mess. There is *nothing* that can turn PHP into a modern solution - it simply doesn't have the capabilities it needs. It'd be like trying to diagnose a concurrency issue on a multithreaded platform in Swahili - the language just doesn't have elements needed to express the concepts effectively. You can do it, but you'd do it mostly by using English words for things like "atomic write", "semaphore" and "deadlock". You're wasting your time, use the platforms that support the concepts for the task properly.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;But all these other apps are wri..&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes yes yes lots of apps are written in PHP. Have you looked at any of them recently? 99.9999% of them are dogshit. And I don't just mean usability-wise, I mean the code is actually so bad it's a *net loss* to integrate it vs implementing your own. Even the very best of them are so idiosyncratic about their attempts to get around the limitations of the platform that integration turns your code into a mess of twin support structures and duplicated dependencies.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;You just don't underst..&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here's the crazy thing, I can deliver a project in a month part time by myself, that takes a regular PHP shop 3-4 months, 4 people, a project manager etc. Even better, I can charge more for my months work than the PHP shop can for their 3-4 months, *and* my client comes out happier at the end because my product is better and they got it sooner.&lt;br /&gt;&lt;br /&gt;I don't even know why I'm writing this rant, go ahead! stick with your ratsnest platforms and your dribbling boilerplate code, the more out of date you are, the better I look without any extra effort on my part. Don't bang your shins on the tables on the way out.</description><link>http://www.phirate.com/2008/03/php-rant.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-6717027997750315721</guid><pubDate>Wed, 27 Feb 2008 12:42:00 +0000</pubDate><atom:updated>2008-02-28T01:53:26.039+13:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>entrecard</category><title>Those users are crazy</title><description>Well, to be quite honest I am now officially overwhelmed. The Entrecard community, the sheer volume of stuff going on, is beyond my ability to keep up. I'm still trying, for what it's worth, but there's just so much to do!&lt;br /&gt;&lt;br /&gt;We have 4,700+ live widgets at this point and it's climbing fast, and the feature ideas list is getting longer faster than I can implement them, even for the "holy crap that's a great idea" mini-list.&lt;br /&gt;&lt;br /&gt;Anyway, enough of my complaining, I guess it's a vastly better set of worries than sitting in the middle of a big empty site going "meep?".&lt;br /&gt;&lt;br /&gt;One of the consequences of having so much to do is that I don't have quite as good a touch for what everyone is doing anymore. I used to have a good idea about the kind of advertising levels people were generally running. I implemented a new type of calendar display for the ad system today, then went to check a few dashboards to make sure it came out ok, and ran into this:&lt;br /&gt;&lt;br /&gt;&lt;img src="/many_ads.png" /&gt;&lt;br /&gt;&lt;br /&gt;That's just crazy, but after doing a check around, that kind of volume of ads doesn't seem that uncommon. I may have to rethink the displays for high-level advertisers like that.&lt;br /&gt;&lt;br /&gt;We've got some fun stuff coming up soon, I'm really looking forward to the coding day, it'll be cool to chat with people and deliver stuff "live".&lt;br /&gt;&lt;br /&gt;Time to go to bed, 2am is too late for me these days. zzz.</description><link>http://www.phirate.com/2008/02/those-users-are-crazy.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-1909792943658274191</guid><pubDate>Sat, 12 Jan 2008 12:12:00 +0000</pubDate><atom:updated>2008-01-13T01:52:36.648+13:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>performance</category><category domain='http://www.blogger.com/atom/ns#'>entrecard</category><category domain='http://www.blogger.com/atom/ns#'>madness</category><title>Growth, performance and madness</title><description>Phew! been a busy time in code land for me. Mostly Entrecard. We've got a lot to do, things have picked up hugely and lots of people are having a good time which is great, but we've got a long way to go to where we want to be.&lt;br /&gt;&lt;br /&gt;Various fascinating reads on the site and forum recently, obviously we had the &lt;a href="http://www.problogger.net/archives/2008/01/10/interview-with-entrecards-graham-langdon/"&gt;interview with Graham&lt;/a&gt; on problogger where we got a ton of positive comments from new and old alike (yes, I really do read pretty much everything anyone says if I can find it, although that became a lot harder since google started returning 178,000+ results for "entrecard").&lt;br /&gt;&lt;br /&gt;We had an interesting &lt;a href="http://entrecard.com/forums/1/907/#p=36"&gt;scrap about the economy&lt;/a&gt; that ran for a bit. I don't really agree with anything Slam has to say on the subject of credit value but then I'm biased ;).&lt;br /&gt;&lt;br /&gt;People have talked about buying and selling of credits as if it were some black and white thing where either credits are entirely trapped within the system or credits are rushing out the door like free icecream, but when it comes down to it there are a wide variety of alternatives. The majority of the major credit-based economies out there complete almost all of their transactions in-house, only a relatively small percentage of credits bought or sold are traded for regular currency despite the relative freedom to do so. Even if Entrecard was a totally open market with "BUY CREDITS NOW" on the homepage, I'm willing to bet we wouldn't generate more than 5% of the total credits per day in currency conversion, and we're not going to do anything like that.&lt;br /&gt;&lt;br /&gt;Remember, we hit half a million drops the other day, that's a million credits into the econ in a little over two months, that's 17k/day even if you're going by the averages rather than the numbers we do per day now. Any alternate methods of credit creation are highly unlikely to make any real dent in that number.&lt;br /&gt;&lt;br /&gt;I'd tell you the exact numbers but our admin economy page is currently out of order, it can't handle the volume of data anymore. Recently we've been pretty much doubling the number of visits every 10 days, a level of growth that poses problems no matter how good your planning is.&lt;br /&gt;&lt;br /&gt;It's fascinating in a sense, our architecture is designed to scale up to a million blogs in theory, but as you bring more and more users on board you hit milestones where certain parts of the system just hit rough edges you didn't see coming. We've run load testing on entrecard.com that says it should be able to push over 50 dynamic page views per second on our current platform, and yet it started struggling recently well short of that.&lt;br /&gt;&lt;br /&gt;The reason is pretty simple. Load testing systems are not real users. You can construct load testing setups that do a much better job of simulating them than the one I used, but even then people simply do unexpected things. In addition, the planned patterns of use often turn out to be bogus. In the case of Entrecard it was almost a product of a change in our focus as we got more familiar with the product. Initially it was thought that users would turn up to the main site only to fiddle with their control panel, there was nothing else really planned, we had the categories page and that was about it (those who can remember it at release are laughing).&lt;br /&gt;&lt;br /&gt;As a consequence I was heavily focused on making sure we could deliver enough widgets - the amazon S3 system we use for example - rather than making the "control panel" website quick.&lt;br /&gt;&lt;br /&gt;Then came chain dropping, the category tabs, the forum, the shop, the blog, the message system...and suddenly Entrecard.com itself became a primary destination, and our visits-per-user shot up...and thus our load testing profile was suddenly worthless.&lt;br /&gt;&lt;br /&gt;So this week I got a bit sidetracked, delayed a few new things for a couple of days and started doing some proper profiling and taking some serious performance action. Much of it won't be visible until the next code drop but we did do some rearchitecting of the hosting systems tonight, I'm going to be interested to see the results in the morning.&lt;br /&gt;&lt;br /&gt;For those wondering what kind of effort it takes to host Entrecard, consider this, we have to serve a widget for every page view that every one of over 2,500 blogs get. Some of those blogs are pretty damn popular all by themselves - and more sign up every day.&lt;br /&gt;&lt;br /&gt;It's a challenge, and I love it. Just occasionally I wonder why I'm not working at a standard corporate fast asleep at my desk tho ;)</description><link>http://www.phirate.com/2008/01/growth-performance-and-madness.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-4180137860639676988</guid><pubDate>Thu, 03 Jan 2008 22:44:00 +0000</pubDate><atom:updated>2008-01-04T11:45:50.107+13:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>hijacking</category><title>Solving hijackings</title><description>Credit to Ender:&lt;br /&gt;&lt;br /&gt;"Alternatively, the airlines place a bomb on every plane. In the event of a hijacking, the pilot will detonate the bomb, and the airline will claim responsibility. Thus denying any would-be terrorists both the plane and the claim that _they_ blew it up."&lt;br /&gt;&lt;br /&gt;Genius!</description><link>http://www.phirate.com/2008/01/solving-hijackings.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-8934098019450086075</guid><pubDate>Thu, 03 Jan 2008 12:08:00 +0000</pubDate><atom:updated>2008-01-04T01:20:03.343+13:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>entrecard shop</category><title>Crazy week or so</title><description>I tell you what, I felt like an anxious parent when I went off on holiday. Entrecard has been going solid for 2 months now, and normally by that point I have all the bugs sorted and everything is nice and stable in an app.&lt;br /&gt;&lt;br /&gt;However Entrecard has been different from many of my projects for a number of reasons, not the least of which has been the sheer pace of change. Nearly every bug fix goes hand in hand with some new feature or cleanup, and we have a user community who are constantly pushing the limits of what they can do.&lt;br /&gt;&lt;br /&gt;Needless to say, all of this combined to mean that I was going on holiday wondering whether anything would be standing when I got back.&lt;br /&gt;&lt;br /&gt;Ok, not really. I have a Nokia e61 which lets me check in on things and do emergency work if needed, plus we have monitoring etc so I wasn't blind, but going away from my desktop was still a little bit  harder than usual.&lt;br /&gt;&lt;br /&gt;Started "working" again when I got back on New years day, although I doubt anybody noticed I was gone since I still found myself reading the forums and posting etc - only thing that was different was that the response time for bug fixes took a dive until I got back.&lt;br /&gt;&lt;br /&gt;Kicked out the new shiny release today. Along with the usual stack of bug fixes, including one infuriating messagebox issue to do with the content renderer, we have a bunch of new stuff in the shop in preparation for all the contest people getting their seller tokens. The browse interface is still ugly as hell but I'll get on that asap once we've got a few more entries in and I can get an idea of what people are putting up. The shop item stuff is pretty cool - along with the usual stuff you can create "keyed" items that exist for a limited number of uses or times. These items can then be queried via a couple of methods to see whether the user has an active one.&lt;br /&gt;&lt;br /&gt;You can use this to create, for example, a "pass" which lets people into an area of your site (requires a little bit of coding on your part), so people can simply buy a pass on Entrecard, then go to your site and view your "backstage" section (or whatever) all automatically.&lt;br /&gt;&lt;br /&gt;This is all a bit experimental at the moment but we should have it bedded down over the next couple of days. Fun times.</description><link>http://www.phirate.com/2008/01/crazy-week-or-so.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-1813652575954720264</guid><pubDate>Sun, 23 Dec 2007 02:02:00 +0000</pubDate><atom:updated>2007-12-23T15:23:03.787+13:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>entrecard</category><category domain='http://www.blogger.com/atom/ns#'>security</category><title>Wasting my time</title><description>Well, today we had our first real attempt to abuse the system, fake accounts and all. it's bizarre, people don't seem to realise it's a closed system - no matter what you do we can follow the credits, there is no way to "launder" them in Entrecard, no matter what tricks you pull it's a matter of a few clicks in the admin system to remove all the ads you bought, lock/delete your account, penalise you credits or whatever.&lt;br /&gt;&lt;br /&gt;In this case the optimistic abuser thought that perhaps by sending credits to another account using the coupon system that he'd be able to avoid detection. it's pointless, we know exactly where they came from and where they went and all you do is end up with no credits, no ads and a locked account.&lt;br /&gt;&lt;br /&gt;Instead, all he really did was waste time I could have spent writing actual features that would have helped him, and everyone else, actually get some value. Makes no sense.&lt;br /&gt;&lt;br /&gt;In other news, another user decided to publish their own idea of how to bypass the Entrecard drop security system. The post was thinly washed over with "I hope they don't penalise me" as if it wasn't common sense not to post that kind of stuff. Really bizarre. If you wanna contribute materially to the security of Entrecard, then send us private feedback. We're ok with you taking credit, but only if you post about it *after* we've had a reasonable chance to fix it. If you just go off and post straight off, you go straight into the system abuse category, and we hit the penalty button - what other option do we have?</description><link>http://www.phirate.com/2007/12/wasting-my-time.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-4056472610380358611</guid><pubDate>Thu, 20 Dec 2007 01:08:00 +0000</pubDate><atom:updated>2007-12-20T14:39:43.523+13:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>entrecard</category><title>A day in the life off..</title><description>..an Entrecard programmer.&lt;br /&gt;&lt;br /&gt;This post inspired by &lt;a href="http://entrecard.com/forums/3/222/#p=24"&gt;this forum thread&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ok, I'm going to outline todayish (it isn't even finished yet), but it's not my typical day, honestly, my life is crazy but not quite this crazy.&lt;br /&gt;&lt;br /&gt;Ok, we'll start at 00:00...erm, ok, I'm still awake at 00:00, busy coding the latest Entrecard feature. I'm really excited about it but there are just so many small bits and pieces to cover with it. Wait, I'm getting ahead of myself. Welcome to December. In december, every year, the following 2 things happen:&lt;br /&gt;&lt;br /&gt;1. Every single one of my clients, plus a couple of new ones, suddenly realise that they need something done urgently.&lt;br /&gt;2. Every single year, I forget that this is the case.&lt;br /&gt;&lt;br /&gt;So what happens is that by the end of November I have my December all nicely planned out, there will be holidays, a few decent projects, everything just so.&lt;br /&gt;&lt;br /&gt;By Dec 2nd, things are going downhill rapidly. Emergency stuff is turning up like crazy and my regular project work is getting pushed back or squeezed.&lt;br /&gt;&lt;br /&gt;So, back to my day, I spend the next few hours, until around 2:30am, getting the latest feature pretty much ready to go. Done with that, I can't release it at this point, it still needs a bit of layout polish plus I can't release big stuff just before I go to bed, gotta be around in case things blow up :)&lt;br /&gt;&lt;br /&gt;So, at 2:30, I get to start on my next job, reconfiguring a netscreen router at another clients place. This rapidly descends into the usual exercise in frustration that networking stuff always is - it's much easier to debug code - but I nail the problems one by one and make some good headway on the main problem. At 4:30am I get stuck, I'm trying to manage a straight-through src/dst NAT on a VPN tunnel (it's even more complex than it sounds) and the docs say "If you'd like to know more about this, see page 156". This, in a 100 page document. I fight with it for a while but eventually it hits 5am and I've gotta be up fairly early so I hit the sack and stare at the ceiling for a bit while my brain winds down.&lt;br /&gt;&lt;br /&gt;At 9:08am I stagger out of bed, have a shower, check a few things on the computer, and then walk across town to my dentist, where they give me some anesthetic and then drill out the center of my tooth (it's called a Root Canal). it didn't hurt, bu t at one point the dentist accidentally let the "long thin file" she was using into my line of sight. Nothing like knowing your dentist is cleaning the *inside* of your tooth with what is basically a small ice-pick.&lt;br /&gt;&lt;br /&gt;11:45am, $350 poorer, with a numb mouth and 2 more sessions to go, I wander back out onto the street and off home. Most of the walk passes in a daze, I stop to pick up some yogurt because I know from experience it's great post-dentist food. I then get woken from my daze by loud horn blaring. Slight diversion: you may or may not be aware that Japan likes to hunt down and kill whales. By "likes" I mean, they appear to have no regard for what the rest of the world thinks about it, they'll do anything, including the laughably thin-veiled cover of "science", to hunt and kill whales. It's really weird, the Japanese I know seem like nice people, I'm not certain how a bunch of nice people end up living in a nation that does that.&lt;br /&gt;&lt;br /&gt;Anyway, New Zealanders really like whales, and they get quite upset about this time of year every year then the whaling boats go out once again and the inevitable greenpeace stand-offs etc. Anyway, there were a bunch of girls standing on the sidewalk with huge signs saying "HONK FOR WHALES". Needless to say, in NZ, this basically resulted in infinite amounts of honking. I'm sure the people working in the offices above were delighted.&lt;br /&gt;&lt;br /&gt;I finally made it home, sat down, ate some yogurt, and then got down to trying to get the latest feature stuff out for Entrecard. This is the ideal time to do it because all the hard thikning had already been done "last night", so all I really needed to do was clean up some styles and push it out to the live platform. A few hiccups later (big upgrades invariably lead to some problems, especially when you're releasing as fast and furious as Entrecard does) and it was all live. I went and bought myself a featured status, and emailed a friend who helps out quite a bit with Entrecard debugging to get him to get one too. Fixed a bug he hit immediately, and we're away.&lt;br /&gt;&lt;br /&gt;All during this I'm also managing about 3 conversations with clients via IM, which can be occasionally distracting. Oh, and I've run out of yogurt, and my tooth hurts.&lt;br /&gt;&lt;br /&gt;Now I'm thinking I should write something about the new feature, but in fact I don't want to. One of the things I quite like doing is letting people discover new stuff themselves. Yes Graham will do a post about it soon enough no doubt, but initially I like to reward people who are active and paying attention. In this case, that could be quite a big win but since I didn't add a button to the top bar nobody seems to have noticed it yet - probably just as well :)&lt;br /&gt;&lt;br /&gt;Anyway, so, no big announcement, but I did wanna write something, and then I remembered the writing thing we were going to do that people have been talking about on the forums, so I figured why not and jumped into it. That brings us pretty much up to date. &lt;br /&gt;&lt;br /&gt;From here, I've got more client work to do, some bug fixing and new features from a release the other day. I need to go pick up some Goon Show episodes from a friend so I can take them on holiday, I need to go renew our video hire of "Bones" (I love her office. I love it. It's just..awesome) which we'll probably watch some of later tonight, I have to work out whether I'm willing to take the risk of playing Twilight soccer with my tooth the way it is, then more work later in the evening trying to get the rest of that router config stuff working.&lt;br /&gt;&lt;br /&gt;yeah. they don't call it the Silly Season for nothing. Bring on the holidays!</description><link>http://www.phirate.com/2007/12/day-in-life-off.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-6031098661164825769</guid><pubDate>Tue, 11 Dec 2007 11:01:00 +0000</pubDate><atom:updated>2007-12-12T00:14:01.537+13:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>futex</category><category domain='http://www.blogger.com/atom/ns#'>outage</category><category domain='http://www.blogger.com/atom/ns#'>entrecard</category><category domain='http://www.blogger.com/atom/ns#'>hate</category><title>What is a futex and why does Phi hate it?</title><description>A futex is a mechanism for dealing with resource contention and synchronisation between (semi)independent threads or processes. It is used to build locks and various other tools for managing threads.&lt;br /&gt;&lt;br /&gt;What? didn't understand a word of that? no big deal. it's just a coding concept that means hundreds of different user requests can all access the database at the same time without getting in each others way.&lt;br /&gt;&lt;br /&gt;I hate it, because right now, I'm having real trouble with one on Entrecard. The problem is simply a situation called a "deadlock". Imagine the following scenario (simplification):&lt;br /&gt;&lt;br /&gt;Piece of code A uses Lock 1, then Lock 2&lt;br /&gt;Piece of code B uses Lock 2, then Lock 1&lt;br /&gt;&lt;br /&gt;These will always work, except in the instance when A and B initiate at precisely the same time. When this occurs, code A gets Lock 1, but can't get Lock 2, and code B gets Lock 2, but can't get Lock 1. As a result both of them sit there waiting for the other, and neither of them will release their lock. Immediate result: horrible nasty application hang.&lt;br /&gt;&lt;br /&gt;The evil bit is that you'll never notice this scenario when you're developing your application, because a single user almost never triggers this kind of event. Nor are you likely to notice it when your application has a low volume of users, for the same reason. It appears out of nowhere just when you have a bunch of users, and just when you really really don't want things like horrible nasty application hangs.&lt;br /&gt;&lt;br /&gt;I have one of these somewhere. The problem is not fixing it, the problem is finding it. Entrecard is a lot of code, with a very high level of abstraction, and the nature of a deadlock makes it very difficult to debug after it has happened in a complex environment. Worse, it happens totally randomly, so I'm unable to narrow down where in the application it is happening. I'm confident I'll get it but HOLY CRAP is it frustrating, especially when I have to drag myself out of bed at 3am because it hung the app server and I have to restart it.</description><link>http://www.phirate.com/2007/12/what-is-futex-and-why-does-phi-hate-it.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-8443893684950927465</guid><pubDate>Tue, 04 Dec 2007 09:25:00 +0000</pubDate><atom:updated>2007-12-04T22:36:29.456+13:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>tricks and tips</category><category domain='http://www.blogger.com/atom/ns#'>entrecard</category><category domain='http://www.blogger.com/atom/ns#'>card design</category><title>Entrecard Tricks and Tips 1: Card design</title><description>Ok, this may or may not be a regular series but hey, we can hope right?&lt;br /&gt;&lt;br /&gt;Good design itself isn't my province, I can't help you there, I'm a coder :) however I can give a few Entrecard-specific suggestions:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Definitely go for the 125x125 pixel image based card. The text stuff is ok, but it doesn't stand out since we only have 5 designs, so in a big card listing you get lost with all the other black + silver cards.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Upload your image in PNG format. For security reasons we have to re-encode all the images uploaded, and JPEG doesn't re-encode very well so you end up with some compression artifacts. PNG on the other hand should work perfectly.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;When on display in a widget, your card will always be surrounded by a border of #444444 (dark gray), in other spaces the border can be black or white. Make sure you test against these to be sure it doesn't look weird.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;It is possible, with a bit of work, to design a card specifically for a given advert spot. To do so, do your design (say, in pink and white for display on &lt;a href="http://galadarling.com/"&gt;galadarling.com&lt;/a&gt;), upload it (Edit on your dashboard), and then apply to the advertiser. The design then "sticks" with them, and you can upload a new image to use as your regular card or apply at a new site without changing what will end up displaying on the first spot.&lt;/li&gt;&lt;/ul&gt;</description><link>http://www.phirate.com/2007/12/entrecard-tricks-and-tips-1-card-design.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-623408428738389395</guid><pubDate>Tue, 04 Dec 2007 03:10:00 +0000</pubDate><atom:updated>2007-12-04T16:23:08.666+13:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>statistics</category><category domain='http://www.blogger.com/atom/ns#'>settings</category><category domain='http://www.blogger.com/atom/ns#'>entrecard</category><title>Stats, settings, bits and pieces</title><description>A fair few changes dropping on a regular basis. it's likely nobody besides me even realises how many micro-changes hit every day, I probably commit roughly 6-12 times a day to the production tree, although only a few of those result in user-visible changes.&lt;br /&gt;&lt;br /&gt;Anyway, the latest major one to drop in yesterday was the new stats screen:&lt;br /&gt;&lt;br /&gt;&lt;a href="/charts.png"&gt;&lt;img style="border: 1px dotted #aaaaaa" src="/charts_mini.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We introduced some new numbers, specifically the organic clicks, and fixed the term at 30 days - the 7 day chart was just silly. More importantly however was the explanation I added next to each chart, explaining what it is and how you can improve your numbers. I think this is something that's often missed - places provide you with piles of numbers but no good information on what you can reasonably do about them.&lt;br /&gt;&lt;br /&gt;I've added another control to the Advert settings page, granting people control over whether they want to auto-accept previously approved entrecards. The system is pretty much flawless, in the sense that if you've approved it before, there's little reason not to again, however part of our mission is to ensure control remains in the hands of the site owner so having the switch there is important, and we defaulted it to "off" so it won't auto-accept unless you ask it to.&lt;br /&gt;&lt;br /&gt;A few other bits and pieces around the place, fixes, nailed one of the cookie bugs which sorted the last two no-drop cases I'm aware of which is great.&lt;br /&gt;&lt;br /&gt;In case nobody noticed, I also managed to finally stab that weird firefox rendering error to death. For those who were curious, it turns out that despite happily displaying block-level elements inside an "a href", firefox occasionally fails to render the contents properly. However, if you use span tags instead, but use CSS to change their display mode to block..it works fine. Nutty.</description><link>http://www.phirate.com/2007/12/stats-settings-bits-and-pieces.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-8148018496791442171</guid><pubDate>Sat, 01 Dec 2007 22:46:00 +0000</pubDate><atom:updated>2007-12-02T11:52:32.869+13:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>queue</category><category domain='http://www.blogger.com/atom/ns#'>entrecard</category><category domain='http://www.blogger.com/atom/ns#'>adverts</category><title>Queue limits, multiple advert block</title><description>Well, when someone like &lt;a href="http://problogger.net/"&gt;ProBlogger&lt;/a&gt; arrives it inevitably highlights any bugs in the management of advert requests. In this case the poor guy got bombed with ad requests, including multiple requests from single users.&lt;br /&gt;&lt;br /&gt;We hadn't really decided whether multiple ad requests were a problem before. It was one of the reasons people were rejecting ads, but at the same time it seemed managable and nobody was complaining. But 5 requests from the same person is just..a little silly.&lt;br /&gt;&lt;br /&gt;So that's gone now, if you have an ad queued, approved or running on a given blog you can't submit further adverts. Later I hope to provide people with finer grain control of whether they accept multiple requests but for now we needed a solid solution. Feedback welcome.&lt;br /&gt;&lt;br /&gt;In addition, we now have a "queued" limit, you can't have more than 15 entrecards queued at a time. This prevents someones mailbox getting too stuffed on their first day or if they're suddenly popular for some reason :)&lt;br /&gt;&lt;br /&gt;I hope to make the blocks a little clearer soon - at the moment they're an error displayed if you try to advertise rather than preventing you from clicking the button in the first place.</description><link>http://www.phirate.com/2007/12/queue-limits-multiple-advert-block.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-1913751132551835218</guid><pubDate>Fri, 30 Nov 2007 12:54:00 +0000</pubDate><atom:updated>2007-12-01T01:57:40.728+13:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>recommendations</category><category domain='http://www.blogger.com/atom/ns#'>entrecard</category><title>Recommendations, advert options</title><description>New shiny things today.&lt;br /&gt;&lt;br /&gt;We got Recommendations, which let you post a public recommendation of another Entrecard site. The recommendations are approval-only, so they're not exactly going to paint an unbiased picture of a given blog, but at the same time they do help people get a feel for what the blog is, whether it does a good job and it lets people who like a given blog show some appreciation in a meaningful way.&lt;br /&gt;&lt;br /&gt;That's basically why I did it anyway :)&lt;br /&gt;&lt;br /&gt;In other news, we have the option to switch off advertising for your entrecard. When you do this (under Advert settings) your card will no longer accept adverts (the ones you have queued will continue to display as normal). The objective is to prevent people who are, say, going on holiday or otherwise too occupied to avoid ending up with a massive pending queue and then irritating everyone with a string of rejects.</description><link>http://www.phirate.com/2007/12/recommendations-advert-options.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-1628705389719494275</guid><pubDate>Thu, 29 Nov 2007 00:18:00 +0000</pubDate><atom:updated>2007-11-29T13:28:24.701+13:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>features</category><category domain='http://www.blogger.com/atom/ns#'>entrecard</category><title>So much to do!</title><description>In general in software development, things go roughly according to this formula:&lt;br /&gt;&lt;br /&gt;tight timelines x level of innovation = level of crappy architecture&lt;br /&gt;&lt;br /&gt;The basic issue is that the faster you have to build something, the less time you have to "do it properly" and the more inclined you are to take shortcuts. Similarly, the more "innovative" or - in other words - off the edge of the map your application is the less chance you have of picking the right architectural elements to support what it will eventually become.&lt;br /&gt;&lt;br /&gt;Thus when the two combine you normally end up with architecture that makes a dogs breakfast sound well organised.&lt;br /&gt;&lt;br /&gt;That said, I'm delighted to say it wasn't what happened with Entrecard. I'd like to say it was all hard work and skill, and to be fair I'm going to take some credit because it's my blog and I'm vain like that. But the fact is there's a fair chunk of luck involved as well.&lt;br /&gt;&lt;br /&gt;Unfortunately, the natural consequence of this is that we now have a nice solid extensible architecture with no actual chronic outstanding issues. And we have Ideas. So Many Ideas. Now I have a feature-list a million miles long, all of which are awesome and I really really want to have them in Right Now Damnit.&lt;br /&gt;&lt;br /&gt;Ah well. there are worse fates than having a bunch of cool stuff to write for an appreciative audience :)</description><link>http://www.phirate.com/2007/11/so-much-to-do.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-6533195609289568105</guid><pubDate>Tue, 27 Nov 2007 03:45:00 +0000</pubDate><atom:updated>2007-11-27T16:50:33.903+13:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>forums</category><category domain='http://www.blogger.com/atom/ns#'>entrecard</category><category domain='http://www.blogger.com/atom/ns#'>dashboard</category><title>Forums, new dashboard</title><description>ok, we have some experimental &lt;a href="http://entrecard.com/forums/"&gt;forums&lt;/a&gt; live. I know I know I reinvented this wheel and it's somewhat octagonal and has no suspension, however it does integrate well with our main application and we have plans to integrate other aspects further as well.&lt;br /&gt;&lt;br /&gt;It's not really central to the business plan but at the very least we needed somewhere we could get users to engage with each other - the feedback system has been really good but that's very much a 1-to-us thing.&lt;br /&gt;&lt;br /&gt;We also have a modified dashboard, including a "buzz" slot where we can push some 1-liner announcements, and I've removed a lot of the stats stuff and put more explanation in on some things. The main reasoning behind the buzz slot is that we're changing things so rapidly that we really need a good way of keeping people in the loop.&lt;br /&gt;&lt;br /&gt;The removal of the stats was..well, that's just more appropriate for the statistics section anyway, it was taking up space. I'm not so sure about taking away the balance (it's on every page in the top right anyway), but I couldn't figure out a good way of keeping it in play without it looking out of place, so I took the hint. We can always put it back somewhere :)&lt;br /&gt;&lt;br /&gt;Go play on the forum!</description><link>http://www.phirate.com/2007/11/forums-new-dashboard.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-7552488581707827377</guid><pubDate>Tue, 27 Nov 2007 00:44:00 +0000</pubDate><atom:updated>2007-11-27T13:45:31.267+13:00</atom:updated><title>50 drop limit raised</title><description>In response to feedback and our own concerns, the daily drop limit has been raised to 300. Nobody has hit this yet so we're confident it should be ok. Further feedback welcome.</description><link>http://www.phirate.com/2007/11/50-drop-limit-raised.html</link><author>noreply@blogger.com (PhiRatE)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8553235869310113140.post-8409684267135155907</guid><pubDate>Mon, 26 Nov 2007 07:02:00 +0000</pubDate><atom:updated>2007-11-26T20:08:24.294+13:00</atom:updated><title>Drop limit</title><description>After a bit of discussion, I convinced Graham that we needed to put in a daily drop limit. This went in today, you cannot drop more than 50 times in one day.&lt;br /&gt;&lt;br /&gt;The reasoning is that the traffic that we're generating, we'd like to be "quality" traffic. That is, there's a decent chance that they're willing to read a bit of your site and see if it's something they'd like. This doesn't happen if people are busy rushing from blog to blog in a desperate attempt to get credits, so while we want to reward people for breaking out of their normal routine and going and having a look around, we don't want to particularly reward the "rushers".&lt;br /&gt;&lt;br /&gt;We understand, however, that card dropping is *fun*. So we picked a number (50) that seemed reasonable after looking at the average number of drops people did. We're open to changing this, and there's also the option of allowing the drop but simply not giving a credit for it. Leave a comment or enter feedback on your dashboard if you have preferences.</description><link>http://www.phirate.com/2007/11/drop-limit.html</link><author>noreply@blogger.com (PhiRatE)</author></item></channel></rss>