HNHacker News
TopNewBestAskShowJobs

fruchtose

934 karma · joined February 11, 2012

http://www.fruchtose.com
submissionscomments
fruchtose··on Software Engineers Say the Job Market Is Getting Much Worse
The article's claim that AI is responsible for a shrinking job market is tenuous at best. Economic factors are much more relevant. Rising interest rates make tech companies less attractive to investors, and this filters through companies as smaller hiring budgets.[0] And we're seeing relatively high interest rates compared to a few years ago. I am far from convinced that efficiency gains from AI correlate with—much less cause—software engineering job cuts.

[0] https://www.nytimes.com/2023/01/23/technology/tech-interest-...

fruchtose··on Dash developer's response to Apple's response
Since the dev behind Dash is based in Romania[1], is this law still applicable?

[1] https://blog.kapeli.com/about

fruchtose··on The Art of PNG Glitch
Same here.
fruchtose··on Using least squares regression to calculate a circle from a freehand drawing
There's a bug in your code somewhere: http://i.imgur.com/p4tn4Kx.png
fruchtose··on 101 – A JavaScript utility library
Just a note: the NPM manifest declares the entry point as "index.js", but this file does not exist.
fruchtose··on 2 years with Angular
I disagree greatly. I've used Angular in a team project that spanned several months and went into production at a startup. After reading this article, I realize how much of my experience is reflected in it. I personally experienced each of the problems on his "bad parts" list, except for the name clashes issue (#3). For the last few months I've been telling people that Angular is powerful, but it has an extremely steep learning curve. I've been reluctant to tell people to try it because, why you can do a lot with it, you must baptize yourself in the framework before you can write anything half-decent. It's a little depressing to see someone with deeper experience come out and say it does not get better. But I know that as much as I want to like it, Angular imposes too much for me to actually recommend it.

So, this article is definitely not generic. Maybe, if you're reading at the bottom of the article, you can call it generic, because the advice for future projects is good. But otherwise, it's spot on. I can only hope that the Angular dev team sees this blog post and incorporates the recommendations into version 2.

fruchtose··on Node-android: Rewrite Node.js in Java for Android
This is really great, but I would appreciate some tests or description or your testing procedure. Does this project pass the NodeJS test suite?
fruchtose··on [dead]
100% agreed. I am amazed that this article would appear on the front page of HN.
fruchtose··on Bop.fm (YC S13) Links Together Music Silos Like Spotify, Rdio To Share Tracks
I'm really excited about this kind of service. People have been moving increasingly online in everything they do, and music is no exception. I believe that in the future the vast majority of media consumption will use streaming. (As if it isn't, already!) My main side project involves this kind of service, so I know at the very least it can be complicated to write a server/website which can chomp diverse APIs. [1] What puzzles me is how this could be monetized--I'm sure YouTube and SoundCloud aren't in a hurry to stream their media for free without seeing license fees.

[1] https://github.com/fruchtose/muxamp

fruchtose··on Show HN: Probabilistically Generating HN Post Titles
LevelDB: a fast multiple-account Google Docs makes it personal... very personal

Show HN: When is good time to cut the crap

Can Snowden be targeted using the Soundcloud API

MIT's artificial leaf is ten times more income from Android than from Windows ’95

Free online version of Apache HTTP Server released

What the smartest people do on the Moon

Sorry, this blog post is not non-linear

Supreme Court to allow Google to sue me into acquiring. Help

Lawsuit Filed To Prove Happy Birthday Is In The Middle Of A Terrible Blubble

Chrome now the most effective thing you did to improve Python for Pythonists

IBM to Acquire a Domain Name?

My husband is a JavaScript library for capturing input

Youporn.com is now MIT licensed

fruchtose··on Penny Arcade web dev / sysadmin job posting
Job requirements:

* Ability to move in a fast paced environment, at a speed of 180 mph or greater.

* Demonstrated physical capacity to produce calefaction directed from eyeballs, at or exceeding 400 degrees Fahrenheit.

* Signed note from esteemed scientist showing capability for producing X-rays (preferably 5 nanometer wavelength) from eyeballs or eye sockets

* Affidavits testifying to eidetic memory.

* Ability to physically resist and rebuff projectiles, including but not limited to arrows, baseballs, rocket propelled grenades, bowling balls, and bullets between the range of 1 and 50 caliber.

* Established reputation for instantly understanding and speaking any language sufficiently established by a human culture, after initial exposure.

* Distinguishing characteristics: Faculty for achieving flight, and resourcefulness.

Are these job requirements impossible? Absolutely not! They are laid out explicitly, so the list is perfectly reasonable. Being up front makes all the difference here.

fruchtose··on Lime – Experimental Sublime Text clone
This issue reflects the challenge of trying to sell music to people who can pirate the stuff. When the alternative to your product is free and close enough to substitute, the paid product needs to provide enough value to convince the market that it is worthwhile. Here you have a text editor that its audience feels has been abandoned, so it is not providing as much value as an open source alternative.
fruchtose··on How Apple hides new functionality in iOS: isYoMamaWearsCombatBootsActive
Why? Sometimes functionality has to be exposed, even when a company would prefer an alternative. Microsoft has named functions similarly on occasion [1].

[1] http://blogs.msdn.com/b/oldnewthing/archive/2003/10/15/55296...

fruchtose··on How Big Data Is Taking Teachers Out of the Lecturing Business
It's worse than that. There are three public universities which receive funding: ASU, University of Arizona, and Northern Arizona University. So it's not just one school. And Arizona schools may not be front page news, but these are institutions with big contributions to Mars rovers, astronomy and biotech. For instance, Lawrence Krass works at ASU.

It's really tragic how little Arizona higher education is supported, given their accomplishments.

fruchtose··on How well do you know HTML?
I agree with the other posters, that this quiz tests edge cases more than anything.

That said, I think it is pretty rude to tell me after showing my score that the quiz would, and I quote, "not buy [me] on DVD."

fruchtose··on Edward Snowden's lesson to both businesses and NSA
Re point 2: The PowerPoint that was leaked has TOP SECRET on it. That is one of the highest levels of access imaginable.
fruchtose··on Jaron Lanier: The Internet destroyed the middle class
> If you look at something like Facebook, Facebook is adding the tiniest little rind of value over the basic structure that’s there anyway. In fact, it’s even worse than that. The original designs for networking, going back to Ted Nelson, kept track of everything everybody was pointing at so that you would know who was pointing at your website. In a way Facebook is just recovering information that was deliberately lost because of the fetish for being anonymous. That’s also true of Google.

Wow, this is so wrong I am annoyed by it. The Internet is not "anonymous" (it really isn't, for the most part) because someone designed it that way. You can read the design rules set out by DARPA and see that they were concerned about infrastructure above all else [1]. The fundamental goal was the multiplexing of many different networks. The top three secondary goals were:

1. Network resilience 2. Multiple communication types 3. Support for different network types

Anonymity was not part of the design of the Internet--period.

[1] http://ccr.sigcomm.org/archive/1995/jan95/ccr-9501-clark.pdf

fruchtose··on Show HN: Backseat Writer – write like Shakespeare and others
I can understand that, but in a web app like yours which is meant to be very responsive, I think you would be better served by handling misses rather than letting errors throw away the stack (so to speak) every time a miss happens.
fruchtose··on Show HN: Backseat Writer – write like Shakespeare and others
It seems to be buggy? There were 9 JavaScript errors in the process of typing, "How do I compare thee to a summer's day?" (I know that's not the original text of the sonnet.)
fruchtose··on Callbacks are imperative, promises are functional
First of all, thank you for taking the time to read over my code. I don't get enough of this.

You're right that 28 lines is pretty ridiculous, but it's because I never abstracted out that code. The playlist code is some of the ugliest in that project, because I got pretty lazy with it. I know it's terrible. The console logging stuff is part of that.

Q actually allows exceptions to cause promise rejections, which is both a nifty feature and a potential curse (e.g. throwing an exception before releasing a resource).

I like the changes you propose (not considering testing), but with slightly different implementation. the DbCommand should be creating its own deferreds, rather than accepting one as a parameter. This kind of promise handling is best left up to DbCommand to implement, rather than the caller. In Q it's easy to chain promises, like so:

    Q.fcall(someFunction).then(function(result) {
      return functionThatReturnsAPromise();
    }).then(function(secondResult) {
      console.log(secondResult);
    }).done();
Also, in a proper redesign, Q's denodeify function can change the whole flow of the execute function entirely:

    DbCommand.prototype.execute = function(query, onComplete) {
      var self = this;
      Q.denodeify(dbConnectionPool.acquire).then(function(connection) {
        self.connection = connection;
        return Q.denodeify(connection.query);
      }).then(function(rows) {
        return onComplete(rows);
      }).finally(function() {
        self.connection && dbConnectionPool.release(self.connection);
      }).done();
    };
Q's denodeify call works with Node.js callbacks which follow the convention that the error is the first argument, and the result all others. denodeify then converts the error into an argument for any calls to Q.fail. Any uncaught errors will be thrown after done() is called.

However, I am not sold on the idea of creating a prototype for DB commands. There's no state that needs to be held, and the code is abstract enough without introducing a prototype.

Again, thanks for the code review. The playlist DB code needs a lot of refactoring, since right now there's too much repetition I've been too lazy to fix. If you want to talk some more, feel free to email me.

fruchtose··on What technical reasons are there to have low maximum password lengths?
I'm not arguing with that. I wholly agree with you that a client should not be able to upload 4 GB for the password field. I think I misread your first point as if it dealt with server-side storage.
fruchtose··on What technical reasons are there to have low maximum password lengths?
While this is true, hashes use a set number of characters. For example, SHA-256 hashes can be stored in 32-character hex strings. In that sense, there's no point in allowing for a variable length field for password hashes.
fruchtose··on Callbacks are imperative, promises are functional
I can speak your comment, since my side project is a Node.js server that talks to several APIs, a database, and N web clients. Like you, I've worked more than a year on it, but I had a positive experience with Q [1] and jQuery promises.

Promises make async code easy to manage, even at scale. Each API request gets its own promise. What happens inside that promise doesn't matter, as long as it returns a result or an error. If talking to the API takes one request or two, it does not matter with promises. We can abstract these API requests in such a way that even if document retrieval is a multi-step process or a one-step process for each document source, the collation process can know nothing about the retrieval process to work.

In other words, promises allow us to separate concerns. Document retrieval is one concern, collation another. Promises, by abstracting asynchronous control flow into synchronously appearing objects, allow us to write simple programs at higher levels. Separating concerns makes the server easier to test and easier to extend.

If you want to see how I've used promises, you can take a look at my work on Github [2].

[1] https://github.com/kriskowal/q

[2] https://github.com/fruchtose/muxamp

fruchtose··on What technical reasons are there to have low maximum password lengths?
There's one reason I haven't seen mentioned yet:

Because the developer is storing passwords in plaintext, and he wants to save database space.

Now, this is not a good reason, but it is a reason nevertheless. Please note that you should never, ever, ever, ever store passwords in plaintext.

fruchtose··on Show HN: I just open sourced Muxamp, a streaming media playlist in Node.js
Hey HN! I've been working on Muxamp for over a year now, and I decided that there's no point in keeping the source closed. (I never planned on making money from it.) I've learned a lot since I started, and I hope others can benefit from its release--and perhaps teach me a thing or two as well :)
fruchtose··on Faker.js - generate massive amounts of fake data in the browser and Node.js
Great project! I would, however, recommend an API with more namespaces. Functions like Address.ukCounty don't sit well with me; such an API would be a mess if you added support for countries other than the US and the UK. You could (and probably create namespaces for each country code, e.g.:

    Address
    |-> US
        |-> state
    |-> UK
        |-> state
An alternative would be for country-specific generators to take a country code as an argument. I am not an experienced API designer, though, so take my comments with a heaping of salt.
fruchtose··on [dead]
You would understand if you were a code ninja.
fruchtose··on Show HN: StartHQ - a web app directory
Is this site supposed to be for B2B or general purpose? I'm a bit confused since the article doesn't specifically mention this as such, but the homepage invites me to enter my work email.
fruchtose··on Addition of 1 and 1 in PHP
See, this is why I'm tired of freelancers and architecture astronauts at companies who just like to make things more complicated.

UNITY_VALUE? Seriously? The agile approach would be to contact the customer, ask them what kind of user story they need to interact with the number 1, e.g. "As an admin, I want to interact with the number that is the square root of 1, which is also the product of i^4, and the multiplicative identity." There may be some back and forth on this, since regular users (not just admins) will want to work with the number prescribed above.

Then, you need to draw up a quick prototype. We don't need any crap like UNITY_VALUE polluting our beautiful agile code. Instead we'll declare a constant called ONE somewhere. (It doesn't matter where you put it, since we'll probably just Martin Fowler that code anyway in 10 weeks--actually, make that 2.)

Then you go back to the customer, show them the prototype. In my opinion, it helps to show them Euler's identity or the multiplicative identity just to assure them it works, in case they doubt it. (They probably will doubt it, since all this agile process stuff looks like automagic to the unenlightened morons we call customers.)

Then move on. Done. Bam. No need for this UNITY_VALUE junk. No additional libraries. Agile magic.

fruchtose··on Pwn2Own owned all major browsers
It looks like George Hotz [1] is attending! Judging by his work with the PlayStation 3, I expect him to do pretty well at cracking Adobe Reader.

[1] http://en.wikipedia.org/wiki/George_Hotz

Page 1 of 8Next →