Following are my impressions and thoughts inspired by the “AR in Action” conference at MIT’s media lab to which I was kindly invited to this week by John Werner.
Augmented Reality” is the notion of adding an additional layer of data to our perceived reality. The most popular example for AR, as far as I could tell is Pokemon Go in which the character appear as in our real environment, but as the game was referred to several times during the conference, it is not a real AR since it doesn’t truly interact with the environment, rather than merely use it as a background to present its characters. But this is general idea – have some spectacles or a window (such as tablet) from which one can look at hers or his environment and get more information.
An interesting thought was proposed by Christopher Croteau from Intel that augmentation mustn’t necessarily be visual. It can also be audio – for example a running app that provides you audial coaching is actually augmenting to your running experience. A background music can also be considered as augmentation.
AR’s biggest advantage over VR or the standard way of consuming data is lack of need to disconnect from the presence. Along comes the famous photo of our generation, completely immersed in our mobile devices. completely disconnected from the “now”.
This made me wonder why is it so important to be in the “now”. “now” can be boring (especially now, as I sit in the airport waiting for my flight back home). True, mobile disconnect us for the immediate surrounding people, but then again – what’s wrong with that? Calm down with your “heretic!” calls, I would personally rather talk with someone I care about than someone who just happened to sit next to me, and I’m pretty sure it’s to the preferred choice of all parties involved. If someone prefers his virtual friends over your presence – I guess you’re just not interesting enough. I don’t really think that but I think it’s a thought worth exploring. but how AR can make this better? after all, I will still use technology to talk to my virtual friends and not the present next to me. The only difference will be that I will stare into nothingness like a weirdo instead of a screen.
The conference had plenty of speakers. More than a 100, according to the publications. Some of them preached to the choir about the wonderful potential of AR; others showed their work whether it was related to AR or not (some even without even trying to conceal the fact it’s completely unrelated. I should mention that it doesn’t mean their talks were bad, just unrelated). But from what I gathered, AR has three usages nowadays: (i) Show designs (e.g. architecture‘s work); (ii) provide instructions; and (iii) be cool. Being cool – such as provide 3D Pop-up to QR-code. It’s cool. it’s great advertisement. But being cool is something that has to be unique and it’ll become over-used and boring incredibly fast.
As the AR field is still emerging, the conference was also about VR, which is actually easier to implement, as you don’t need to understand the real environment in which the user is present. But VR has a huge disadvantage – it completely disconnect you from the surrounding. As one of the speaker came to the stage with a holo-sense on, I felt that he’s not really there, and didn’t really see a reason to be “there” as well. I think it has a lot to do with the emotional expression we provide using our eyes and eyebrows and once this is covered – we will just lose our audience.
Robert Scoble spoke about the “beautiful potential” of AR and how it will change our future. He pointed out three scenarios – mall-shopping, hotels and drivings. Personally, by the time AR will actually be useful, automated cars should take over (and every day that passes by and people die in car accidents is a disgrace to humanity). I’m not exactly sure what would he change in his hotel experience but the mall-shopping example bothered me. Especially as I don’t go to malls and I think that “look how much money many can be made of this” is an incredibly bad driver for innovation. It may be efficient but it’s still bad nonetheless.
There were few interesting demos of really useful AR in use for instructions and tutorials. But it reminded me of the story about NASA’s 10m$ investment to invent a pen that can write in zero gravity while the soviets simply used a pencil. It’s ok to experiment with the technology even when it’s not efficient but in order to solve real-world solution, its advantages compared to a low-tech solutions don’t necessarily have enough ROI.
Christopher Grayson suggested using AR to remember names (essentially by providing them digital “name” tags) made me think about the right to stay anonymous. This, should be mentioned one of the important reasons google glass failed. It’s true that I walked in the conference with my name tag on but this is actually an incredibly inefficient technique as it requires the reader to stand in front of me and make sure the tag isn’t flipped over (as it usually does) or covered by my jacket. Most like I’ll know that s/he’s taking interest of me and I would feel less susceptible to scams by a stranger who knows too much about me.
He took pride in having more than 2000 friends on Linkedin, while socially-speaking, we’re able to maintain only up to 1500 friends. I think it requires a redefinition for the word “friend” as it raises the question of the type of relationship one keep with his closest thousand of friends.
A word on technicalities. There were a few talks that were… ill-prepared. Whether it was the technology failing to display the presentation or demo on the big screen, or speaker who clearly didn’t prepare their talk and just rumbled on. Worse were those who weren’t even interested or at least funny. Rightfully said, it was mentioned by the organizers that future conference they’ll “audition” the speakers, so I’m optimistic on that regard.
I didn’t attend any panels but one, which I happened to stumble by as I was waiting for the following talk. This panel was about “Future of AR” and each panelist in his own words said, to my dismay, that the future cannot be predicted. They later continued to rumble but for me the picture was clear that the future is hazy. Personally I think the future of AR lies with an incredible smart AI and image recognition and processing. It will then be able to whisper useful information to help you make conscious decisions. In its evolution AR must and I cannot emphasize enough how critical it is – MUST get rid of the clunky VR goggles, it will never work with them. The alternative should be either the use of normal plain glasses and which the user’s pupils are still visible or at contact lenses that provide this information. Yes, we have a lot way to go, but that’s the future AR should aspire to.
A few honorable mentions: Bob Metclafe (the guy who invented Ethernet) and Dan Bricklin (the guy who invented digital spreadsheets), who didn’t actually talk about AR but are incredibly smart and entertaining; Gordon Bing from EA who showed how AR can be inspired by computer games; And last but not least, the guys from PTC that gave a few demos of AR that actually work efficiently.

That digital device you have in your pocket? you should call it a “mobile” (or “Handy” as the germans call it). But calling a “cellular phone” is ridiculous. Last month I spent 6 minutes of talking on the phone and 500mb of data, and I might be an extreme case but I assume I’m not the only one. Let me tell you why phones are obsolete.

First, they require an immediate response. Unlike texting of any form, to which you can reply whenever is convenient, phone call must be answered right now. Let’s say someone wants to give you an important message. you gotta answer that, otherwise you’ll miss it. True, you can have a voicemail box. but the original voice message is actually translate to a “you got mail” notification which will force you to actively connect to the voicemail service and listen to the message (hence, requiring one more step). True that with a simple data app we can reduce this step into a PTP (push-to-talk) voice message, but usually that’s not the case. and even so – it means harnessing new technology to support old infrastructure.
In that sense, text-messaging is great, as you can answer whenever you can or wish. No real pressure for immediate response. Plus, it’s much more easy and acceptable to reply while doing other things (like watching a movie) as listening is much more engaging than reading short texts).

Phones are spammer’s paradise. Unless you decide not to answer phones from undisclosed number- you’re bound to have annoying soliciting or harassing phone calls. Adding a caller ID was a necessary step to resolve that. First it just showed you the caller’s number and if you recognise it (because people back in the 80s used to remember and recognise 9 digits phone numbers, today why bother?) you could filter desired phone calls (but no real help with unidentified numbers). Of course, very quickly came the caller’s option to hide us number, giving the spammer the upper hand. Unidentified numbers issue can easily be resolved if instead of numbers the phone infrastructure would convert to meaningful string, like an email for example. and it would allow people to block calls from but what about ? should you answer a seemingly innocent yet completely random phone call? so it still seems we’re trying to keep a technology alive, while it really wants to die.
And lastly, phones encourage awkward smalltalk. It’s not a real face-to-face conversation to become a real small-talk but asking directly would be extremely unsociable. For example, let’s say you want to ask Berry from accounting if he plans to go to the company’s picnic (and if he does, whether he could give you a ride). so you can text him a single message: “Hey what’s up bro? are you going to the picnic? can I come with you?” and his answer would be a simple “sure thing!” and that would be the end of it. Text messages are far more concise. While if you go to Tim you would actually engage in a conversation when you’ll eventually get to ask “oh yeah, hey, are you going to the picnic?”. Phone calls are pretty similar, but much more annoying to handle as you don’t see the other person, whether he’s actually to busy or occupied to have this conversation with you right now.
I think that the interesting bit was that phone exists for merely 100 years and are you publicly only for about 50 years. cellular phones became popular only 20 years ago (that’s nothing compared the the length of time men has used pigeons to deliver news). Meaning to say, we managed for a very long period  with the need to audio-only interaction, and I truly believe we outgrew to betters forms of communications (emojis and memes anyone?)
The decision of moving from cellular devices should come into affect with the packages the service providers should offer. Personally, I’d go with a package with little to no voice minutes but a large data plan. If need may be, I can always use skype or other voice-over-IP solution in order to have free conversation anyhow.
Less importantly it should with the hardware itself. not so much for its supported technologies rather than its branding – I would rather buy an Ipad with 4G capabilities than an iPhone – which are technically the same thing – but represents completely different mindsets.

TL;DR, My first thought about ES6 was “but you’re just making things worse!”. I think the thumb-rule for improving a language will it be easier to learn it and not more difficult, and clearly that’s not gonna happen when you keep adding more arbitrary tools to do the same things but slightly differently (best example for this is for…of which iterate over object’s iterable elements, as oppose to for…in which iterates over all of the object’s elements.

To cut things short – JS is missing official versioning, that will allow it to purge bad code. It actually does have some  versioning, because when you add a new feature it does mean that an older browser won’t support your code and additionally, we already have “use strict”; which is actually versioning. So instead of ‘use strict’, we’ll have ‘use es6’ and everyone know how to handle it. We can later think of backward-computability to weird folks who still use IE6 by trans-piling and stuff. That’s a different story and isn’t that complicated, especially as I’m aiming mainly to clean to language and less on adding new features.

So looking at First steps with ECMAScript 6, I compiled my own remarks/suggestions of how I believe things should be done:

1. Scoping: var, let, const, IIFE and blocks

Originally {…} was suppose to be a block that contains privately-own local variable. JS screwed this up by keeping the variable to the use of the external function. I’m not sure why, but now they try to patch it up by using ‘let’. So let’s make it much more simple – {…} has its own variables that die as soon as the block ends, unless they’re being used by an internal block that outlives the original block. This is how to should have been to being with. Fixing is better than patching.

Const” my be a nice concept but when talking about pointers, which we do in 99% of the time, it’s actually meaningless.

2. Template literals = `hello ${name}!`

It’s a nice feature, but to be honest, is it really critical to be a core part of the language? I agree that the ability to write multi-line string can be incredibly useful. if we could only enforce having semi-colons at the end of commands, are code will become much more concise and everyone should know that line breaks means nothing to the compiler. And again, I don’t think template-engines are wrong – I just don’t think they should be part of a core language. Keeping them as a separate library will allow them to evolve independently. Why evolve? because we might want conditionals, loops, sub-templates and millions other things. why limit it?

3. Arrow function

Array functions are less readable. don’t. just don’t.

4. Multiple return values

Functions return a single value. It’s a mathematical thing. This single value might contain an array, or a set of values. We might want to be able to easily parse to values (talk about splat in a second), but the bottom line is that function return a single value. Trying to return weird things like { obj1, obj2 } which is actually an abbreviation of { obj1: obj1, obj2: obj2 } create syntax anomalies which in turn makes the code less readable.

reduce the anomalies! stop adding more of them! On a side note, I never really understood why typeof and instanceof cannot be simply treated as functions. or why the are different from one another. inconsistencies is what makes any language dreadful. This is something I would have like fixed.

5. For (;;) => For (…in…) => forEach(function) => for (…of…)

So For…of is just like For…on, only it’s more useful as it actually return the iterable elements of an object and not all its elements (which might include functions, for example). we’re having a zillion of loop and iterations that one cannot deny that this is a money-pit and there’s never going to be a solution that makes everyone happy. And that’s ok – but why incorporate ALL the solutions in the language? it only makes it more complicated.

why can’t we simply say that object has an iterables property, returning an array of its iterables so “for (key,value in Object.iterables(map)) {}” would iterate over ONLY the relevant items and in each iteration key will be index and value will be the iterable object itself. there. problem solved without adding a new command.

We already have Object.keys, so it shouldn’t be a problem to add Object.values and Object.iterables.

6. Parameters default values

Avoiding the need to handle default values within the code is very nice, but it leaves the devil an opportunity to introduce hell when my default value is actually a function that runs… when?

This is one complexity I think we should avoid.

7. Splat, Spread, Splat and Handling named parameters

We’d like a feature that says – “hey, all these values should actually be part of an array” and vice versa – “hey, this object is actually is a bunch of separate variables”

Here comes splat – “” which is an ok idea. so why can’t we simply have the other way around

  function myFunc (...numbers) {

  return number[2];


myFunc (1,2,3); // return 3
function myFunc (values..., ...other) {

  return (first + second + other[2]);

myFunction ({first:1, second:2}, 3,4,5) // return 8

in my example “values” doesn’t exists anywhere – it’s created and immediately breaks apart to it sub-elements.

In the current proposal “…” is actually used for both scenarios – either to collect variables and to spread them. I suggest the position will hint it action – …collect, spread… making it much more readable

It’s worth mentioning that whenever you invent a new element in a language someone is very likely to use it in a way you didn’t expect. For example, what will happen if I write source…target. well, you guessed it, it will break source to different elements and recollect back them to target.

8. Method definitions instead of function expressions in object literals to

the ability to write var obj = { myFunction () { … } } is pure laziness and breaks the consistency of the code. That’s bad.

9. Classes and Class extends

There’s ruling paradigm called “object oriented”. But javascript isn’t about it. JS is about manipulating JSON objects. JS is perfectly fine without classes. stop forcing it into something it’s not. All JS apps start small and fast but as soon as they become robust, they also become incredibly slow. So, people, please trying to make complicated JS. you’re killing our web!

Prototypical development means that whenever I get a JSON from the server I can easily apply function unto it – cat.prototype = catBehaviour. so now the cat JSON I got can cat.meow(). I don’t really need to create a new object for that. why do you insist to make thing more complicated?

I agree that the current prototype mechanism is slightly too complex but why not simply fix it?

10. From objects to Maps

Javascript’s Object suffers from having string keys. not only that but there’s an escape issue with them. so ES6 introduces a new element type just to solve the escaping issue. seriously? I’ve never bothered with that. If you go ahead and fix that (and not clear why not update the existing object) – why not have the keys as any object (you can flatten with JSON.stringify internally if you want)

11. New String and Array functions

Yes, with ES6 you can now have string.startsWith(). but, seriously who care?

you do realise that because you now decided to use this stupid function, you’ll no longer support ES5-only browsers, right?

and maybe this is what it really comes down to – Languages should have extremely long cycles – let’s say update a language every 5 years if not more, in order to give it time to propagate everywhere. Javascript is the most important language de-facto in the world today not because it’s a great language, rather than because everyone uses it. If you make it into something that not everyone uses – they’ll just keep using ES5. All those small nice-to-have function should be on external layer, or framework. Let’s call the language coreJS, and this will be scaffoldJS, and this can be easily updated, let’s say every 2 years. On top of that we can have libraries that every developer decided which to use – a reasonable update time for this should be 6 months.

js-core should be super-stable, super-consistent with itself, super-reliable, super-simple (and not super-easy) and super-fast. once we can have that, we can start talking about the external layers or silly features like startsWith or arrow functions.

Passwords are troublesome. I can tell they’re troublesome because most website have the “Lost your password?” button readily available. Because password tends to be lost, or forgotten, or entered via keyboard with different layout (Try using the “£” symbol and good luck to all american-keyboards users).

Passwords are crackable, as majority of people don’t understand the likelihood of someone trying to break down their password. So to make the life of hackers slightly more difficult we now have the CAPTCHA mechanism, that aside from being already cracked by hackers is simply annoying. In fact, the “Lost your password?” is annoying too – you might as well call it “Annoyed? Click here”. Think of it this way – the user clicking this button is only one step away from not using the service.

And funny enough – this button is actually the solution to our problem. When you click button a two-steps authentication is initiated – usually via email which includes an unbreakable code that allows to update your password. Well, why just change password? Why shouldn’t it allow access to all the service?

With this reasoning, once you can you edit the password – the service is practically accessible and should therefore be so!

So instead of asking the user for his username (which is usually an email anyhow) and password – why not simply asking for the email?

So here’s the entire procedure

  • user open service, type in his email, click submit
  • A special token with time of creation and the user’s IP is created and sent to the user’s email
  • User click the link in his email
  • Token is sent back to the server and is verified that the IP matches and token hasn’t yet expired (let’s say one hour from token creation time)
  • A new token is created with user-id and user’s IP and sent to the user, encrypted
  • The user cannot decrypt this token but whenever he communicate with the server he passes this token along to authenticate himself

The browser should keep the authentication token for a reasonable time – let’s say 3-6 months, during which the user won’t have to go through this process again. This cookie should not and cannot be simply copied to another machine as it require the computer to have the same IP. And if you’re truly concerned with security, the service can ask the user for his public PGP key along with his mail and thus send him an encrypted mail only he can decrypt.

The only problem with the mechanism that I found is that it requires your user to temporarily leave the service and check his email. How many users will you loose because they forgot to return and how many will you loose because the password was just another hassle they didn’t care to handle?

Six years ago I made a video predicting the way we would interact with technology in 2020. Truth be told, it was more of a commentary on Minority Report movie, and having strong belief in augment reality. This video still gets comments, most referring to the probability or improbability of such interface considering today’s technologies advances. My usual response is “hey, this prediction was done when touch technology was only surfacing!”. I think it was a relatively good prediction back then. But things have changes since then and I was asked now and again what is my prediction now.

I should give credit dues, just as the previous prediction wasn’t mine (although the vision was. Making that video wasn’t simple with zero budget!), this idea isn’t completely mine as well. I have two sources to rely on – one is this TED lecture by Tom Uglow and the second is Harry potter. I should also give some credit to my sister, whose been bugging me for year to invent a photo-album that can also store short videos.

Since 2009, I became an environmentalist, and I’m much more aware of the economic fragility that began at 2008 and I believe will never fully recover. That in mind, I can give 3 predictions. The first is that most things will stay as they are: after all, the difference between iPhone 1 and iPhone 6 are negligible.  The second is that the economy will collapse before any major improvement will take place. Just like Cuba got stuck somewhere in the 50s, so we will get stuck with today’s technology for years to come, It’s actually a lot more horrid than you think, because things built in the 50s were built to last, while today, electronics simply die after 5-10 years (I’m still proud owner of an iPhone 4, that today for some strange reason would ignore my attempts to communicate with him for an hour so. Very frustrating.)

But let’s imagine humanity will able to pull it through. In my most optimistic vision, where do I hope technology would lead?

Imagine you have a book. an e-ink paper book, so every page is actual screen. Now comes the important question – why would you need a book filled with many e-ink screens? and there are two answers – one is to give the book a sense of essence – weight, and the second is that each page is actually a bookmark to a different page you’d like to keep. Of course you can have a virtual bookmark, but it’s much nice to browse through the pages to find what you’re looking for. the size of a book is a personal issues – kids would probably want a small simple book to begin with, while scholars would probably go with a big leather-cased book. They’ll be proud of their big book, just like people were once proud in their enormous library of book which they’ve never read in their life but they hoarded because it made them feel more intellectual.

Some spec – so every page is a double-sided e-ink screen, sensitive to a special pen that can be used to write on it. the cover contains the actual computer; It might also contain a small solar panel can use to charge the battery that helps to run your book for weeks on end. The cover also contains a WIFI adapter that connects to other books to form a network of books sharing an online connection to the internet.

Reading stuff from a book is somewhat intuitive – just open the book and read, when you reach the end of the page, simply flip the page and it will automatically show the next page (of course you can scroll down in the very same page, but why?). If you happen to reach the end of the book but the current content didn’t end, simply press the marked circle at the end of the of the page and flip back a few pages, When you let go of the circle, the new page will continue with the previous content. Writing is also very intuitive – just use the special pen and start jotting down on the paper as the e-ink will display your scribbles.if the first line of your text was underlined – that will be the title of your text (otherwise, the title will be the time and the first few words). Erasing text is also easy – simply use the the other side of your pen over written lines and it will be erased. When you’re ready to save your content, simply draw a save icon, a circle around it and press on it for two second, the circle will blink and your text is saved. Which brings us to actions in general. To issue an action, draw it’s icon; a circle around it and press on it for few seconds. If your don’t know which actions are available, draw the hamburger icon (three lines) and a menu of all available actions (and their icons) will pop. Some applications might have actions button already appearing on the page and then all you have to do is press them for two seconds. The text is saved in your hand-writing, but you can transform it to actual text at any time.

I don’t think there’ll be application in the book. At least not as we know them. Mainly because no one really cares, which application they’re using, as long as they get their work done. Why would I want to deal with incompatible versions or upgrades or anything like that. But this doesn’t mean you can only read and write. Obviously you can read and write mail messages, by a adding a “To: xxx” at the top of the message and drawing the “send” action. Your inbox will appear on one page and by marking a message and flipping to the next page, you’ll be able to read what your grandmother has send you. Flipping back will bring you to your inbox again. crossing over the messages will remove them from the inbox the next your flip a page. Searching the web is also easy, write your query or question and draw either the search or the question mark action icons to see the answer form in front of your eyes. The big difference between a general query and a question mark is that the question mark is curated – usually more focused but my be limited at times.

A great way to interact with book is the use of bookmarkspicture of a book. Whenever you have content that is important to you and want to have a quick reference to it in the future, just put a sticky bookmark on the side of the page. you’ll quickly see a black border forming at the edge of the page. Now, whenever you open the book on that page, the previous content will pop up. If, however, you’re reading content that extends over several pages and your flip through a bookmarked page, your bookmark will give its place to the current content your viewing, as if it wasn’t there. To quickly switch back to the bookmarked page, take the page up and down and quick motion, as if the knock the previous content from it. Note that when looking at another page’s content, removing the sticky-bookmark and re-applying it will cause the un-bookmarking the previous page and marking the new one instead.

As regards to Music and videos – personally I don’t think books should be used to play music. You will probably have a seashell-looking speaker whose interface is very likely to be like today’s iPod. and videos will be played using a crystal orb or projected. Not that music and videos are strangers to the book, but that’s not its purpose and I consider it a waste of battery-life. You’d probably disagree, but heck, if Steve Jobs allowed himself to limit the user capabilities, why can’t I.

And on a closing note-

Up until now, the getMainPage function, which was part of the topicProcess made internal invocation to get the user data and the tags and put it all together to create the page’s data before it was return to the WebApplication to be rendered into XSLT and then HTML. I decided that TopicProcess shouldn’t know nor care about the tags and user info, and I can actually put into use the plugins mechanism which didn’t do anything yet.

How is a plugin work? well, after identifying the call, the WebApplication prepares a list of all relevant plugins, which are methods, much like the handlers we had until now and runs all the plugins in a recursive manner:

  • a plugin get the input,
  • may alter it,
  • if there’s another plugin in queue, runs the next one
  • if not, it runs the handler (i.e. main application), which returns a JSON object as output
  • the plugin may alter the output and return the call to its caller
  • so we end up back in the WebApplication after all plugins and the handler went over the input and the output

TagProcess now knows that whenever the url “/” is called, it should run the pGetTags plugin (the prefix “p” is for plugin, as the function is slightly different the getTags handler). It was extremely easy and it works like a charm.

The next step, which I will do sometime in the future is more challenging: currently, the XSLT knows nothing about the plugins and their additions to the page. If future plugins should be available for anyone to add – the XSLT shouldn’t know about the plugins either. At most, it should know it should run a plugin-XSLT that will create an HTML snippet with an attribute stating where the snippet should be placed (e.g. “inside-sidebar”). But who will do the actual placing? can I trust the server-side code to do it effectively? nothing like a good challenge to call it a night 😉

So I’ve recently finished the book “Growing Object-Oriented Software Guided by Tests” which in general is a good book except for the major reservation I have for it – it talks about Java, and trying to implement what they say in Javascript isn’t really 1:1, especially due to the lack of contracts. In general I don’t like interfaces and contracts as you can’t tell which implementation was actually used, while Javascript requires a different state-of-mind which covers this aspect: since I don’t know which JS file was loaded or not – there is no contract, I just hope the right library was there to catch the call. I know not knowing if the call was answered sounds worse than not knowing who answered it, but in Javascript it makes a lot of sense and the dynamics is one of the language strongest features.

But I did learn some great things from this book, such as “Domain separation” – each Class (in my case it’s the xxProcess.js files) should handle one domain and not care about anything else – it shouldn’t care what DB will be used or how the output will be used – only what’s the input and what’s the proper output. It actually was like this before where the only change I made in the code in this regard was to extract “Comments” function to a new process file.

Another thing was to have descriptive function names for test so you’d know exactly what this test is running. I had a testProcess before which I didn’t really use. I’ve added Qunit in and created a simple mechanism to run the tests from the console. I removed the testProcess and maybe I’ll add it again in the future.

I now came the big dilemma. I had tons of code to test-unit and it’s sisyphus, especially as I know that i’s working on all cases I might write a test. Test should be something that might fail and break something else down the chain, but as I mention, javascript don’t really have a chain. On the other side, I have a DB integrity issue. It goes like this – in order to do some developing on my local machine, I externally-edited the DB and changed the ownership on some comments and rewired them to different posts. A comment have actually two parents – the topic and the parent-comment, but because of my manual edits, I have some errors there now. Once I realised that, I updated the code so it would log an error and ignore that comment. I’m not too concerned about this scenario because something like this shouldn’t happen in the production. or should it? how can I make sure that another unforeseen event won’t take place? what test exactly should write?

So it came down to this. Yes, I wrote the testing-platform which works great. Yes, I wrote some tests into it. Yes, I know I should use it from now on. But then, for the next major development, I didn’t use it – I didn’t write any test before or after making a huge change and I’m quite sure my new code works great, Because I fiddled with it and any test I might have written – I also checked it myself. Took me a lot less time, I’m sure. This is something that actually bothered me in the book – how much time do they spend writing the test? yes, writing test is important, I’m not saying it doesn’t – but the longer you spend writing test – the more probable you’ll have bugs in the test-code and you’ll spend hours to fix your tests instead of just continuing to write the code.

So yes, I promise that from now, I’ll try writing more tests as part of the design process. While writing this I’m fully aware that I’m lying, which is kinda sad.