HNHacker News
TopNewBestAskShowJobs

jpatte

214 karma · joined September 27, 2009

Software engineer Co-founder/CTO/Architect/Lead dev of https://www.featuremap.co github.com/jpatte
submissionscomments
jpatte··on [FR] Je n'ai rien à cacher (I've got nothing to hide)
The third paragraph "Pourquoi est-ce plus compliqué que ce que l'on pense ?" ("Why is it more complicated than what you think?") refers to retroactivity of the law [1], claiming that you might have troubles later for doing things that are not illegal now but might become illegal in the future, which means it's safer to just hide what you are doing now. However AFAIK retroactive laws are forbidden by Human Rights (and by the United States Constitution, notably) except for very specific cases, so this whole paragraph is a giant strawman.

[1] https://en.wikipedia.org/wiki/Ex_post_facto_law

jpatte··on Startup Lesson Learned: Technology Doesn’t Matter
We had a very similar experience with FeatureMap. Started off with RavenDB, got tired of all sorts of technical problems (migrations, map/reduce, transactions, deadlocks, ...), quickly rewrote the data layer to use good ol' Entity Framework + SQL Server, and voilà, all better now.

Looking back at this it seems clear now that the way we used RavenDB (it could have been any NoSQL database) was not optimal and that most of the problems we faced were a direct consequence of our naive/simplistic approach. From a personal/technical point of view I don't regret the experience and I now have plenty of ideas about how to better leverage NoSQL databases, but from the business/customer point of view it certainly costed us.

jpatte··on A Localization Horror Story: It Could Happen to You
That might be ok for technical people who are used to this kind of "machine speak", but for end users it's often not acceptable. Consider the difference between:

    Purchased credits: %d.
    Remaining credits: %d.
    Buy more : 5 [link] / 10 [link] / 20 [link].
and

   You have purchased a total of %d credits and have used %d of them so far. You can buy [drowdownlist] additional credits by clicking here [link].
Which one do you think will have the highest conversion rate?
jpatte··on HTML6 Concept
There's even a typo in the first example:

  <html:a href="/cats">Cats</a>
  <html:a href="/dogs">Dogs</a>
  <html:a href="/rain">Rain</a>
I guess forgetting the namespace in the closing tag will happen A LOT to everyone.
jpatte··on Show HN: C# 6.0 Functional Language Extensions
> For any nullable, I can use a nullableVar.DefaultTo(defaultValue) to convert it to a non-nullable primitive type.

What would be the difference with "nullableVar ?? defaultValue" ?

jpatte··on C++ unified call syntax: x.f(y) vs. f(x,y) [pdf]
The same result could be achieved by introducing a smaller change to the language that doesn't completely redefine the way existing functions are evaluated. By using some specific signature (like adding a keyword to the first argument of a function), you could indicate that this function may be used as a member method of the first argument. For example, C# uses the keyword 'this' for its extension methods:

  public static class Helpers
  {
    public static string UrlEncode(this string url)
    {
      //...
    }
  }

  // then later:
  string someText = "...";
  string a = Helpers.UrlEncode(someText); // valid
  string b = someText.UrlEncode(); // valid too
But of course that would mean having to update all the function declarations of the standard library to add the new keyword when needed...
jpatte··on Ubisoft's Game Developer 'Limbo'
Seems like Ubisoft is managing their employees just like every French consulting company is managing its consultants between projects. Why is it considered unorthodox? Is it because Ubisoft is a game editor and other editors never do that, or because they host their own projects with their own schedules, and therefore should be somewhat able to better reallocate their workforce?
jpatte··on Ask HN: Kanban – which tools with success?
We use our own product FeatureMap [https://www.featuremap.co] to define the scope and track the progress of, well, FeatureMap. :) It's more oriented towards Story Mapping than towards Kanban but you certainly can manage Scrum/Kanban boards with it.
jpatte··on How a new HTML element will make the Web faster
As the border between mobile/portable devices and dektops/workstations keeps getting blurrier, this "on mobile" concept will probably just lose any sense in the near future.
jpatte··on My startup failed, and this is what it feels like
"Fail fast, fail early, fail often!” they all chant, trying to put a positive spin on the most excruciating pain any founder could experience."

Is it just an impression, or did she get this sentence the wrong way?

The whole point of this saying is to make you realize that failure should actually not be such a big deal. Failure isn't an dead end, it's a step forward on the difficult path of entrepreneurship. Therefore, saying things like "I couldn’t fail. This was my baby, and if it was going to fail it would be over my dead body." can only lead you, indeed, to excruciating pain in case of failure.

Resilience is an excellent quality, and I think the only way to give your best and surpass yourself is by facing real challenges, but please remember that you cannot in any way resume 4 years of ultra rich/challenging experience with the two words "I failed". Jeez, just having survived 4 years in her very first startup experience is already a success.

I sympathize with her pain; I just find it sad that she doesn't seem to realize the incredible experience and skills she gained from this adventure. Those years were absolutely not wasted; the chances of success for her next startup are incomparably higher than for her previous one, and I wish her all the best for the future.

Edit: A startup is first a human adventure. After it "failed", ask yourself the right questions: - Did I learn something? Do I know better? - Am I a different person? A better person? - Did I help some people in any way? - Did my social skills improve? Did my network grow? - What about my legal/technical/managerial/whatever-ial knowledge?

If you can answer "yes" to any of these questions, than this adventure wasn't a failure at all. :)

jpatte··on CShell: A simple, yet powerful, C# scripting IDE
Why would you want to put anything other than a string in a list of strings ? That's just looking for trouble IMHO.
jpatte··on The Emacs Problem (2005)
Most programmers these days are quite astonished that anyone would actually still use Emacs. If they realized how much functionality it has, and how powerful its extensibility model is, they'd be ten times as astonished. It's got things that Eclipse may never have, not in a hundred years, and that's no exaggeration.

Thrill me.

jpatte··on Spritz – read 500 words per minute without any training
The reading experience would have been even better in other languages if the translations weren't so bad. Not sure if it is the right place to put it, but here is a much better French translation for the demo:

Bienvenue dans votre premier Spritz ! On commence par 250 mots par minute, un peu plus que la vitesse moyenne de lecture qui est de 210 mots par minute. Pas d'inquiétude, nous irons plus vite dans un instant. En fait, nombreux sont ceux qui lisent déjà des Spritz à plus de 1.000 mpm. A cette vitesse on peut lire un roman de 1000 pages en seulement 10 heures. Que se passerait-il si votre vitesse de lecture pouvait doubler, sans diminuer pour autant votre compréhension ? Et si elle pouvait tripler ? Notre but est de répandre les Spritz à travers le monde et que 15% du contenu littéraire mondial puisse être lu via notre méthode d'ici 2016. Sélectionnez une nouvelle vitesse sur la droite quand vous êtes prêt ou cliquez sur un des drapeaux ci-dessous pour essayer Spritz dans une autre langue.

Prochain arrêt, 300 mots par minute ! A cette vitesse vous lisez environ 25% plus vite que la plupart des lecteurs chevronnés. Un autre effet positif des Spritz est qu'au-delà de 400 mpm votre compréhension se met à augmenter en même temps que la vitesse après seulement quelques sessions de lecture. De plus, comme dans un Spritz vos yeux ne se déplacent pas d'un mot à l'autre ni même d'une phrase à l'autre, vous pouvez lire pendant de longues périodes sans les fatiguer. Cliquez sur le menu déroulant pour essayer une autre vitesse.

Voilà déjà de vrais progrès ! Votre vitesse actuelle est de 350 mpm. A cette vitesse vous lisez 40% plus vite que la majorité des gens. Vous n'avez pas besoin de cours de speed­reading ou d'exercices supplémentaires avec Spritz. Nous développons sans cesse de nouveaux logiciels pour que vous puissiez lire globalement n'importe quel texte avec Spritz. Nous offrons également aux autres développeurs la possibilité d'intégrer Spritz dans leurs applications. Spritz est de loin la meilleure façon de lire les livres électroniques, emails, sites d'actualité et autres sites web.

Vous avez maintenant atteint 400 mots par minute. Prenons un instant pour discuter de ce que vous venez d'accomplir. Après seulement quelques minutes, vous pouvez maintenant lire des Spritz au moins 60% plus vite qu'avant. Réfléchissez à la manière dont vous lisez d'habitude sur votre portable. Grâce à Spritz, plus besoin de faire constamment défiler les textes tout en lisant ni de pincer ou tapoter votre écran pour redimensionner le contenu affiché. Les éditeurs peuvent présenter leur contenu sous une forme compacte qui pourra être lue confortablement sur un téléphone ou une tablette. Spritz prouve à quel point les appareils actuels paraissent larges et massifs : vous n'avez pas besoin de tout cet espace pour lire du contenu !

Impressionnant! 500 mots par minute après moins de dix minutes. Si c'est encore trop rapide, redescendez simplement à 400 mots par minute pour votre prochain essai. Vous découvrirez que plus vous êtes détendu, plus vite vous pouvez lire et meilleure sera votre compréhension du texte. Nos études ont même montré que l'utilisation régulière de Spritz permet d'augmenter durablement sa vitesse de lecture et son niveau de compréhension, et ce quel que soit le support ! Nous croyons sincèrement que Spritz va changer le monde et nous vous remercions d'avoir pris le temps de l'essayer. Vous pouvez nous soutenir en nous "likant" sur Facebook, en nous suivant sur Twitter et en parlant de nous autour de vous !

jpatte··on Every line of code is always documented
As rymohr indicated, the author of the code given as example is actually the author of the article himself:

https://github.com/madrobby/zepto/commit/3d92f20966aa02dee82...

Which means the OP genuinely thinks that commits like this one are good practice, and the purpose of the article is to show how to deal with it.

Yet as it was argued above, commits like that should never happen in the first place.

jpatte··on Every line of code is always documented
From the article:

A project’s history is its most valuable documentation. (...) The quality of this documentation, however, relies heavily on the diligence of the people involved while writing commit messages.

Requiring such diligence when writing commit messages, while at the same time allowing the same people to write opaque code as shown in the example, would be absurd.

jpatte··on Every line of code is always documented
The premise of the article is that you happen to stumble upon a messy piece of code and that the explanations related to it might be located into the source history. Yet the only reason why these explanations would actually be there is that someone would have enforced doing that as a rule. And the point of the counter-argument is that before enforcing this rule this same person should be enforcing a rule saying that writing messy code like that is prohibited.

In short, maintaining a clean code base has always higher priority than maintaining a clean log.

jpatte··on What side projects did you start in 2014?
For 2014 I decided to build an open-source remake of Sid Meier's game Colonization (1994), in HTML5 (canvas) + TypeScript, with a special twist. :)

I'll be blogging about it on GitHub.

jpatte··on Every line of code is always documented
But he is actually right: when dealing with obscure implementation details, the best thing to do is to encapsulate it properly, the minimum is to comment it clearly, and ideally detailed explanations should be written in the commit message.

Having a detailed code history isn't in any way an excuse to leave obscure code as is. If you have time to document it, you have time to make the code right.

jpatte··on Every line of code is always documented
According to your logic, the author of this code should write a detailed explanation in the commit message, except he probably won't. Shame isn't it?
jpatte··on You might not need jQuery
Abstractions are meant to, well, abstract an implementation. You might very well want to abstract a native operation for a bunch of different reasons. You don't need to, but maybe you should.

For example,

  $(el).hide()
is quite more readable than

  el.style.display = 'none'
. And I'm not even talking about the other advantages.
jpatte··on Windows 7 'back by popular demand', says HP as it targets wary consumers
Or Win-X + letter on 8/8.1. For example opening the Disk Manager is Win-X + k, Event Viewer is Win-X + v etc.
jpatte··on Windows 7 'back by popular demand', says HP as it targets wary consumers
What advanced features from Windows 7 would you miss on Windows 8.1? Because they are most likely still there.
jpatte··on Show HN: A Clojure game library
It actually came out from a French (yes, them again) game studio before being opened to the community. ;)

http://motion-twin.com/

jpatte··on The Future of JavaScript MVCs
It's not really about a choice of language.

My point is that if Om claims to be superior to other JS MVC frameworks - as it is presented as "the future of MVC frameworks" - it needs to be good (if not superior) in many aspects. Performance is a big deal all right, but another aspect (which seems essential to me) is that using this framework should be easy, concise and intuitive. And I've been kinda disappointed to see that the sample code given to present Om in action is not. At all. If I wanted to fiddle a bit with this code right now, to add a few features for example (like adding a timestamp besides each item indicating when it was created), I wouldn't have any clue where to start.

What bothers me is that Om has clearly been written with ClojureScript in mind, so in a way this framework is supposed to be sublimated by the language. It should "feel" right. And I know it's possible with other frameworks (and my comparison with Knockout+TypeScript was meant to illustrate that), so I expected it to be the case with Om.

jpatte··on The Future of JavaScript MVCs
It may be because I'm not familiar with ClojureScript's syntax, but the whole sample application code seems like a real mess to me. It's full of boilerplate code and it is happily mixing application logic with DOM rendering. [1]

Compare this with an alternative JS MVC framework (like, say, Knockout.js) and another modern "javascript-compatible" language (like, say, TypeScript), and see for yourself. [2]

While I didn't run any benchmarks, it's safe to assume the Om demo is faster. However which sample do you think is easier to write, test and maintain? If "The Future of JavaScript MVC Frameworks" is supposed to look like the Om sample, sorry but I'll pass.

[1]: https://github.com/swannodette/todomvc/tree/gh-pages/labs/ar...

[2]: https://github.com/jpatte/TodoMvc-Knockout.ts

jpatte··on How To Upgrade Your Website Visitors To Internet Explorer 11
As of this writing, Internet Explorer 11 is code-named Chrome and is being mirrored for download by Google at http://www.google.com/intl/en/chrome/business/browser/.

Can't tell if the OP actually believes this or if the whole article is just a troll.

jpatte··on Please share your JavaScript webapp.
http://www.featuremap.co (although it's actually written in TypeScript :))

We make extensive use of Knockout and Backbone; the backend is ASP.NET MVC4/WebAPI.

jpatte··on Read less HN
I use HN as a kick in the butt. Whenever I feel down or demotivated I just browse to HN's home page, see what amazing work is being done in the tech world while I'm just sitting there, remember that I want to be a part of it, and go back to work with my motivation restored.
jpatte··on Ask HN: why are my 'show HN' posts ignored every single time?
Worst. Answer. Ever.
jpatte··on Why you shouldn't use getters and setters on Android
Not at all.

Suppose you need a stapler for some work. You don't have one, but you know a colleague who does and who is willing to happily share it with you. You could go to her office, open the second drawer in her desk, take the stapler and leave. Or you could just ask her to give it to you. In both case the result is the same: you will get the stapler.

But there is a major difference : in the first case, you had to know where the stapler was. Your colleague knows it - it's her desk, after all - but because you decide to ignore the service she can provide and do it yourself, you have to know it as well. That means that you are both dependent of the manner of accessing the stapler.

What if someday she decides to move the stapler into the third drawer ? Because of this dependency, you would have to be informed of this change and start behaving accordingly. Your implementation would be impacted by a change in her implementation. And this is bad.

On the contrary, if you just asked her to give you the stapler, it wouldn't matter at all where it's stored. As the owner of this item she would the sole responsible for its location, and your behavior would never be impacted.

This is the purpose of encapsulation: preventing objects implementations from being impacted by changes in other objets implementations. You should be applying this everywhere, every times. Even for such small services as "give me that value, please". In your example, you should not need to know if a field or anything else is used to store the value because it's an implementation concern. You should just ask the value to the object.

← PreviousPage 2 of 5Next →