HNHacker News
TopNewBestAskShowJobs

juriansluiman

170 karma · joined January 3, 2013

Dutch entrepreneur and occasional blogger at juriansluiman.nl

[ my public key: https://keybase.io/jurian; my proof: https://keybase.io/jurian/sigs/2jlFRm8JMzToO0V9-LL2AfUUrPfN85ZZP49Nt1gwljE ]

submissionscomments
juriansluiman··on Show HN: A tool to audit your Google Analytics implementation
What does it do? What is meant with "Deep clean" and what does the audit solve?

I notice their services page [0] mentions an audit for US$3000 with different checks and fixes, but no pricing is mentioned at their audit tool page. Is it the same service?

It looks cool, if I know what it does I might press the yellow button to check my GA setup.

  [0]: http://mixedanalytics.com/googleanalyticsaudit.html
juriansluiman··on Disque – a distributed message broker
Both are very equal it seems, with only some minor differences. Disque isn't used in production systems yet so most likely the real comparisons will arrive when Disque is more mature.

Some key differences are that beanstalkd offers (feature wise):

1. Bury / kick 2. Priorities 3. Designed for speed

And Disque:

1. Designed for HA, scalable, distributed 2. Fault tolerant 3. Peek to multiple jobs

With the amount of momentum behind Redis and the fairly unknown beanstalkd, I guess Disque will gain popularity quite soon.

juriansluiman··on Things you should know about PHP 7
The idea is that the old php syntax "function foo ()" remains unchanged [1] so developers can keep searching for "function foo". Removing "function" as keyword is a different topic and is discussed in a separate php thread [2].

The thing you mention ("float function add(){}") keeps the option to search for "function add", but I am unsure why this is not taken into account in this proposal.

Anyhow, I am pretty happy this finally made it to the php language.

[1] https://wiki.php.net/rfc/return_types#position_of_type_decla...

[2] http://marc.info/?t=141235344900003&r=1&w=2

juriansluiman··on Show HN: SendGlide – Beautiful email marketing for small businesses
There was another company called SendOwl and it got there attention: https://news.ycombinator.com/item?id=9068741

So probably they had to sort out a different name quickly...

juriansluiman··on A better pull request
It is exactly what Travis CI does for auto-PR testing on Github: they pull in master (or whatever base) and fetch the feature branch. They create the commit themselves and test the result. That way, you always get the tests based on the merged result which gives far more insights than tests on your (local) feature branch.
juriansluiman··on A Designer's War on Misleading Parking Signs
Although I completely agree the designed signs are much, much better than the existing ones, there is another problem. Why should you have so many rules for parking? Why can't you make the rules more simple?

I want to show you a few signs in comparison, which are Dutch and notify drivers about free or paid parking. Those are (imho) very clear and only show when you need to pay. If you're outside that time frame, it's free:

1. [1] Paid parking all days between 18:00 and 24:00

2. [2] Paid parking from Mondays to Saturdays between 9:00 and 18:00, you're only allowed to stay for two hours max

3. [3] Paid parking from Mondays to Saturdays between 9:00 and 24:00 and on Sundays from 13:00 to 24:00

Am I just crazy, or are those signs way more easier to understand than the graphical green/red bars (especially from a greater distance)? I truly like the designers take to the problem, but isn't it just crazy you have to redesign individual rules to make the time slots understandable?

[1] http://denhaagfm.nl/wp-content/uploads/2013/06/Betaald-Parke...

[2] http://www.verkeerskunde.nl/Uploads/Cache/2013/2/13020510502...

[3] http://www.anwb.nl/bestanden/w280/content/gallery/anwb/nieuw...

juriansluiman··on PHP 7's new hashtable implementation
> Does this new hashtable layout influence object properties/methods too?

Not sure, but I don't think so. Ppl often think object properties and arrays are much alike, but the array's HashTable struct and the object's store struct are very different. The main performance gains are not about the buckets (which are simple and quite alike) but the array's hashtable idea.

Often objects (php>=5.4) have a better performance than arrays; arrays have an undefined length while with good code, all object properties are defined at compile time. Because of this, you don't need to store the data in a hashtable. Nikic has a post about this subject too: https://gist.github.com/nikic/5015323

juriansluiman··on 3 mindset changes that improved our productivity when building a SaaS
You have to find a problem customers have and you can solve. If they aren't feeling any need they won't bother using your product. You can create a need, but in the niche you have selected I doubt that will be possible on the short run.

Stick to the problem and find out what's the easiest solution to solve the problem. Make it an MVP, let users use your product and start from there. Then improve iteratively, using customer feedback and gathered data to steer you into the right direction. Don't even think about features yourself. Don't talk about feature priotorization or taking risks if you don't have a very clear picture of the problem domain.

I am happy you wrote this down, but even with your "lessons learned" you are way too product and development focussed. Get our of the building!

PS. A suggestion is perhaps to reconsider the name ply. It is so common that it will be very hard to find your website, even with some additional keywords. "Ply jobs" even gets you listed as #9!

juriansluiman··on Problem Details for HTTP APIs
See 3.2: "extension members". A reason phrase from the HTTP response can't contain structures which are easily parsed, this proposal does make this possible.

We are using this format for quite some time and it is very easy to use. In above example "Not Enough Credit" sounds reasonable, but you often want to inform users with more information: what was the transactional amount, what is the balance, are there other reasons the transaction failed? You can easily extend the response with more fields to indicate such thing.

Besides, you can track any error in your backoffice system and link the error number in your response. This allows you to have direct insights in error history for customer support ("Hey I got an error and the system said to report number 23473 to you, can you help me?").

juriansluiman··on A brainfuck compiler written in PHP
There is PHP parser written in PHP [0], a PHP VM implementation (running PHP code with PHP) [1] and a AOT compiler for PHP which is written in PHP, for a subset of the PHP language [2]. So yeah, it is already happening.

[0] https://github.com/nikic/PHP-Parser

[1] https://github.com/ircmaxell/PHPPHP

[2] https://github.com/google/recki-ct

juriansluiman··on Sile, a typesetting system inspired by TeX and InDesign
From the PDF manual file[0] it is at glance almost similar to Latex.

  \begin[papersize=a4]{document}
  \chapter{Hi there}
  Hello world

  \include[src=chapter2]
  \end{document}
Unfortunately, the power of Latex for maths display and vectorized graphs are completely absent. It also states image handling is still rudimentarily available (only PNG files, for example). I also am not really impressed by the type setting from the PDF, but this might be due to its focus on the engine and not the aesthetics of the typesetting (which will hopefully addressed soon to convince Tex users!).

Personally I don't "program" in Tex, I only write. The benefits with regard to (La)Tex therefore seems minor to me. However, if you program in Tex (like, designing templates perhaps?) I can understand you don't want to fool around with an ancient system like Tex and SILE can be an excellent alternative. The source is on Github [1], so everyone can contribute!

[0] https://raw.githubusercontent.com/simoncozens/sile/master/do... [1] https://github.com/simoncozens/sile

PS. Because the author writes SILE, not sile or Sile; is SILE an acronym?

juriansluiman··on Emojli – The emoji-only network
Even five hours later after your reply I am able to register ☏ :) It's a matter of choosing a non-trivial one I guess.
juriansluiman··on Flask Web Development Book – 2014
How does the book compare to his mega-tutorial? I liked his tutorial, but what does the book offer what's not in the tutorial already? I'd love to back Miguel by buying the ebook, but if it does contain valuable additional information, I'd prefer the hardcopy.
juriansluiman··on Flask Web Development Book – 2014
Celery is a system for job queues / asynchronous tasks / whatever you want to name it. Usually in web the in-between time of request and response is the time it takes for your application to do the work. However, if you plan to do a lot of work (e.g. render business reports), or the work can take quite long (e.g. make a request to an external service), asynchronous processes make a lot of sense. The request will return the response fast and the application registers a "task" in the queue. A queue system will then pop one of the tasks independent of the web request/response cycle and process the tasks in it's own time.

In short, it simply makes your application respond faster (and scale better) while you still can keep track of all the work done.

I am quite familiar with gearman and beanstalkd, but Celery (as far as I understand it) is a python layer over these implementations. It allows you to write code agnostic of the broker, which helps for portability etc.

juriansluiman··on Extend Python 2.7 life till 2020
The point from jiggy2011 is rather that the differences from PHP 4 to PHP 5 didn't break much of the existing PHP4 code.

In PHP 4 for example you had an object model where the constructor was a method named alike to your class. In PHP 5 you got the __construct() magic method, but as a fallback, the method named to your class still works as constructor.

The same holds for properties defined with var instead of public/protected/private. For compatibility again, the var keyword is just interpreted as a public property.

As a third example, PHP5 came with an OOP system with support for interfaces, abstract classes and the final keyword. In PHP4, this wasn't available. So, there is no PHP4 code which uses these concepts, making them work in PHP5 as well. Obviously, this doesn't work the same way around.

There are some backwards compatibility issues, but these are minor in contrast to what you probably had written in PHP4 back then [1]

Now, for Py2 vs Py3 this is a completely different story. Py2 code doesn't run automatically on Py3. See this answer [2], as there were so many porting issues developers didn't had the time to overcome the overhead just to port the code. So: no, you can't compare the PHP 4 > 5 change to the Py 2 > 3 change.

[1] http://www.php.net/manual/en/migration5.incompatible.php [2] https://news.ycombinator.com/item?id=7581584

juriansluiman··on Let's build a webinar tool that doesn't suck
You probably redirect based on the first found locale. Most Dutch users browser with an accept language similar to "nl,en-GB;q=0.8,en;q=0.6,en-US;q=0.4".

If you only match on the first ("full") locale and not paying attention to the lower q-valued locales, you might think English is not accepted and you will redirect to your (default?) German site. It's a pretty common bug in locale detection systems (as I designed a few ones myself) :)

juriansluiman··on Internationalization made easier with static analysis
I don't understand the importance of this gem: isn't this what gettext/Poedit helps you with? Not to be too negative here, I am just wondering how this actually works with Ruby. I am not familiar with the availability of gettext for Ruby, but the two issues can be negated with gettext/Poedit, as far as I know:

> If you use a key that does not exist, this will only blow up at runtime.

Using Poedit scans automatically your source and imports all missing translation keys. It's just a simple step you have to be aware of when dealing with translations.

> Keys left over from removed code accumulate in the resource files, introducing unnecessary overhead on the translators.

Again, Poedit scans your source and also removes all unused keys.

We're using Poedit for ages and never had troubles with missing keys or orphaned keys. Just use it every time you deal with translations. The only issue you have with Poedit is you cannot translate variables, only strings, but this seems to be the same with i18n-tasks?

juriansluiman··on Refactor towards dependency injection
Author here. I am happy to hear some comments from you HN readers. This is the start of my attempt to blog more often, get some experience in writing and help others about a topic I think I have some experience in.

It is understandable that the topic is kinda junior level to most of you, as you are not the target group to learn from it. Nevertheless, more experienced programmers and writers can hopefully give me a few tips. Anything welcome!

juriansluiman··on Show HN: A new way to manage your inbox
This seems like a great tool I have been waiting for a while. As I understand, it is rather an IMAP client, but will you store my emails on your servers as well? Or do you only connect to the GMail email storage?

Also, do you keep GMail's messages intact? Or are you authorized to update filters, apply labels and make a mess of my greatly organized emails?

Another question comes to mind: how about mobile? I read more than half of my emails on my phone or tablet. Is lightermail able to handle this as well? I haven't seen an app in the Google Playstore and there is no mention on your site. How do you think you will handle mobile access? (I see the sms text on a phone with a link to a lighermail.com page)

juriansluiman··on US free to grab EU data on American clouds
There are specifically EU based companies offering cloud services only at EU based server parks. These companies make sure the US cannot have access to their data because a) the company isn't a US one b) the company does not have a part of its business located on US grounds and c) all servers are located in data centres on EU grounds.

Such services are offered with explicit notion of data protection against US laws, giving "us" EU people a safe harbour of data protection where we are (at this moment) sure "our" laws applies to "our" data.

juriansluiman··on PHP Framework Comparison (callgrind maps)
Comparing frameworks using the callgrind maps doesn't really say a thing in terms of performance. The relative weigh of parts inside the framework can be visualized, though you can not conclude by any means framework A is slower than B based in these figures.
← PreviousPage 2 of 2