mdkess's comments

mdkess | 5 years ago | on: Ask HN: Who's looking for a co-founder?

I've been working on FluentCard.com - trying to build a better flashcard app for learning to read and write Chinese. The MVP is more or less done, and I'm honestly not sure what to do next or where to take it. I've been using it for my own studies and it's been very effective. If anyone's interested in teaming up on it, hit me up.

mdkess | 12 years ago | on: An 11.88” Retina MacBook Air

If you're a developer - take a look at the keyboard first. They replaced the F keys with capacitive buttons (ie. touch sensitive buttons as opposed to physical buttons) and the capslock key was split into a home/end key instead. Sure it's still a nice laptop, but that sort of thing would drive me crazy.

mdkess | 12 years ago | on: Ask HN: How to break this cycle of procrastination?

For me, anyway, the answer is tracking time.

If I want to do something, say, work on a project, I set a timer for 30 minutes and start working on the project. My rule for myself is that for 30 minutes, I have to work on the project, even if I'm banging my head against the wall and not making any progress. After 30 minutes, I either keep working (if I'm in the zone), or stop, re-evaluate and repeat - but never stop before 30 minutes is up. At first, this was painful, but now it's pretty easy to get into the flow. I do this also with things I really don't enjoy, like dishes and housework.

While I think that the rule itself is arbitrary, I think what it did was help me to build discipline, which was immensely important.

Then, video games and other entertainment go at the end of the day, where I can enjoy it guilt free - and importantly, where it can't overlap with work. One nice thing is that I don't feel guilty having fun anymore. Of course, I'm not so strict, sometimes I wake up on a Sunday morning and play games for three hours, but generally I try to stick to this plan.

As other people have said, you need to separate what you need to do over what you want to do.

Another technique that I use is to separate work space from play space. I'm not going to go and play Starcraft II (my chosen drug) in a Starbucks, so if I'm feeling particularly distracted, I'll go there to do work. I live in NYC so I don't have the luxury of having a spare room to use as an office, but if I did I'd seriously consider setting up an office separate from my main desk (ie. have a video game computer and a serious computer).

Finally, start slow. Lots of people look for big overnight change, don't get it, and revert to old habits. Instead, start slowly. Do one of these 30 minute sprints each week day, and two each weekend day.

mdkess | 12 years ago | on: The (JavaScript) Question I Bombed In An Interview With a Y Combinator Startup

Throttle is different, it's a rate limiter, whereas debounce just measures delays between calls. With throttle, the server request would be made every 200ms rather than 200ms after the user stops typing. From a user experience though, throttle feels like a better way to approach this, since it would let you update the list at a measured pace, but it would be incorrect for the problem as described.

mdkess | 12 years ago | on: The (JavaScript) Question I Bombed In An Interview With a Y Combinator Startup

Underscore has a nifty function, _.debounce, which given a function f, returns a version of the function that behaves as the one in your interview question. http://underscorejs.org/#debounce Even if not using libraries, it would be nice to abstract that into its own function when you inevitably want to use it again in some other control.

The code is pretty simple - very similar to what you did:

	  function (func, wait, immediate) {
	    var timeout, args, context, timestamp, result;
	    return function() {
	      context = this;
	      args = arguments;
	      timestamp = new Date();
	      var later = function() {
		var last = (new Date()) - timestamp;
		if (last < wait) {
		  timeout = setTimeout(later, wait - last);
		} else {
		  timeout = null;
		  if (!immediate) result = func.apply(context, args);
		}
	      };
	      var callNow = immediate && !timeout;
	      if (!timeout) {
		timeout = setTimeout(later, wait);
	      }
	      if (callNow) result = func.apply(context, args);
	      return result;
	    };
	  }

mdkess | 12 years ago | on: Understand closures

No problem, thanks for the blog post! I'd highly recommend taking the course - even with a traditional math/cs undergraduate degree from a good school, it was one of the best courses I've ever taken, both in terms of execution and the amount that I learned from it.

mdkess | 12 years ago | on: Understand closures

I don't think that I really understood closures until I took Dan Grossman's Coursera course "Programming Languages." In it, we implemented in Racket a simple programming language which included closures, which is the point where it really clicked for me.

In the class, he defines a closure as follows:

"We have said that functions are values, but we have not been precise about what that value exactly is. We now explain that a function value has two parts, the code for the function (obviously) and the environment that was current when we created the function. These two parts really do form a “pair” but we put “pair” in quotation marks because it is not an ML pair, just something with two parts. You cannot access the parts of the “pair” separately; all you can do is call the function. This call uses both parts because it evaluates the code part using the environment part.

This “pair” is called a function closure or just closure. The reason is that while the code itself can have free variables (variables that are not bound inside the code so they need to be bound by some outer environment), the closure carries with it an environment that provides all these bindings. So the closure overall is “closed” — it has everything it needs to produce a function result given a function argument."

(section course notes: https://d396qusza40orc.cloudfront.net/proglang/lecture_slide...)

mdkess | 12 years ago | on: Top Hacks from a PM Behind Two of Tech's Hottest Products

Within the team, I think that is entirely appropriate. People thrive on, and should be given responsibility. Individuals should be rewarded or disciplined appropriately. That is part of the manager's job.

Outside of the team, ultimately the manager is responsible for delivering. That is their job, and with a good manager, the buck stops at them - without exception. If they don't deliver, it is their failure - even if that failure is a result of their reports failing to deliver, or unrealistic requirements from their superiors. Perhaps the appropriate internal action for that failure is to discipline their reports, but ultimately they are the captain of their ship, and should be the first one on and the last one off.

mdkess | 12 years ago | on: The Pomodoro Technique: How a Tomato Could Make You More Productive

I do something similar - discovered before I heard about the pomodoro technique. What I do is:

1. Pick a task, and explicitly state my goal. You could write it down, but the point is just to have a better than high level idea of what you're doing it, so I just usually say it out loud to myself. For example, "Make the submission form for the user signup page".

2. Spend 30 minutes uninterrupted working on this goal - even if I'm stuck, poke at things, read documentation, do anything to move forward in the task even if just a little bit.

3. After the 30 minute mark, keep working on the task until I loose steam - and not necessarily at the task at hand. Sometimes I'll keep working for another four hours at this point, other times I'll stop at the 30 minute mark to regather my thoughts (but never before). Take a break, and then GOTO 1.

I do this with more than just programming - practicing piano, reading, running, cleaning, etc.

I find that the first 20 minutes of working on things are the hardest, since I'm still in the mode of formulating a problem, and filtering out information, distractions, etc. Building focus. So I would take breaks, surf hacker news, etc. Eventually I would get through that 20 minutes, but it would take a lot longer than 20 minutes. This forces me to get through that 20 minutes.

As a programmer, it can be hard to separate work from rest time (ie. does a 2 minute hacker news break while unit tests are running count as work, a break, or is it just wasted time?), and so I am trying to be more clear to myself about separating the two.

While I've never tried the pomodoro technique, at the surface it strikes me as too rigid. Some days I can work for hours on end without blinking - so all that I need is that single catalyst to kick off a day of productive work. Others, it takes all of my will power to write five lines of code. So I want something that pushes me to start, but gets out of the way after that.

Does anyone have experience with similar things?

mdkess | 12 years ago | on: Secrets of the world's happiest cities

I'm not sure if you're being sarcastic or not (60-40 that you aren't - that's not to belittle you, I think you raised points worth discussing either way) - so in the case that you aren't, a response:

You keep cars on the periphery of the city, and have good public transit to and from them. So your 30 minute trip turns into a 20 minute public transit ride to your car (or a 10 minute taxi ride), and then say a 25 minute drive - longer than before, but not 4 hours. So no, you are not "fucked over".

And presumably, this comes with an increase in public transit quality. Most cities now are built around cars, but they don't have to be. Also, something like this would have to happen gradually - make dedicated non-private vehicle lanes (buses, taxis, etc), build up public transit, disincentivize cars via taxes and zoning, etc.

A place that's perhaps in range of this is Manhattan - most people I know, quite successful, don't own cars - and the ones that do use them to get out of the city on weekends, not for daily transit. It's a place where owning a car is pretty much worse than not - expensive and rare parking, high insurance, congested roads, etc. No joke, I know at least one senior executive here who doesn't have a driver's license because he let it expire.

And why do this? Because we should be building safe, healthy, happy, sustainable and affordable cities - something which cars are not contributing too. So ban them outright? Of course not - but maybe phasing out private vehicles in cities over the next 20 years is something worth seriously considering.

mdkess | 12 years ago | on: f.lux has been updated to a new version

You've changed the question from "is the invention non-obvious, in the sense that current law requires to grand a patent?" to "do you agree with current patent laws and the value of patents?"

mdkess | 12 years ago | on: London’s Great Exodus

It's a result of low interest rates and mortgages being the only way that most people can leverage themselves.

mdkess | 12 years ago | on: 1 Mo. Treasury Jumps from 10 to 27 bps in 7 days

http://en.wikipedia.org/wiki/Time_value_of_money

Imagine we enter an agreement - you'll lend me $100 for a year, and I'll pay you $10 after a year. The banks will pay you $5 to borrow your $100, so you think this is a good deal.

After a year, I pay you back the $100, but I don't have my $10 for interest. I'll pay you back as soon as I can, I swear, seeing myself to the exit. Five years later, true to my word, I give you the $10. So you get your money eventually - is this a good deal?

Well, no, of course not. It may be better than the bank still, but it's not as good as the deal initially made it appear. You could have taken my $10, given it to a bank for the next five years and - assuming you didn't reinvest interest payments out of a noble desire to make math easier for yours truly - made $0.50 each year, for a total of $2.50. What's more, I could have done that, effectively reducing my debt to you by 25%.

Of course, this isn't on that scale, but that is the risk of delayed payment.

mdkess | 12 years ago | on: The Georgia Tech Online Master of Science in CS is now accepting applications

Man, don't let people discourage you.

I guess the thing that you should realize though is that this isn't a degree in computer programming, or IT - it's a more or less a mathematics degree. As the saying goes, "Computer Science is no more about computers than astronomy is about telescopes."

If you want to get ready for serious computer science, I'd recommend a few things which are what I think I got out of my undergraduate degree:

1. A solid understanding of algorithms and data-structures. To this end, topcoder.com/tc is invaluable and some serious study will quickly bring you up to speed. CLRS (Introduction to Algorithms) is a great resource, as is train.usaco.org.

2. A basic understanding of theoretical computer science. To that end, I found this a really useful book: http://www.amazon.com/dp/0321455363

3. Basic understanding of networking and operating systems. Not sure the best route here, there must be online courses. Not too many great self-study books in this area, unfortunately. So find some online courses.

4. A decent math background: linear algebra, calculus, combinatorics, and probability. For self study:

    Calculus: Stewart's Calculus is great.

    Linear Algebra: I've yet to meet a linear algebra text I liked, so not sure here.

    Probability: A First Course in Probability is an outstanding textbook.

    Other: Concrete Mathematics by Knuth is an incredible book, very VERY hard and took me a long time to get through, but packed with useful and interesting information. I'd recommend it after the rest of these.
5. Read Snow Crash and watch Hackers.

Also, keep writing lots of code. Daily practice is the secret to everything.

mdkess | 12 years ago | on: Swiss to vote on 2,500 franc basic income for every adult

The idea with a basic income is that it's taxed back from the wealthier. There's no way without knowing income distribution and tax rates, but I would imagine that someone making $150k pre basic income is not seeing any change in their take home salary post basic income, and someone making $500k before basic income will actually come home with a little bit less (that is just my hypothesis - I don't know the details surrounding this).

Basic income is just a redistribute tax mechanism, but it's one that tries to remove bureaucracy and politics from social security programs surrounding qualifications, etc.

mdkess | 12 years ago | on: A post-mortem on my first AngularJS project

I'm certainly no Angular expert, so take my advice with a healthy amount of skepticism, but I think that it would be one element. The idea being that if I want to swap that stuff out for a new and improved quantity picker, I just change the directive. The idea of angular is that the HTML is supposed to make it clear what's going on, so a single element isn't a bad thing - it says, "here's the part that chooses quantities." Remember that you can nest directives too - so the meat of your page could look like:

  <div ng-controller="QuoteCtrl">
    <shirt-chooser></shirt-chooser>
    <color-picker></color-picker>
    <size-picker>
       <size-picker-choice label="SM"></size-picker-choice>
       <size-picker-choice label="MD"></size-picker-choice>
       <size-picker-choice label="LG"></size-picker-choice>
       <size-picker-choice label="XL"></size-picker-choice>
    </size-picker>
    <number-picker></number-picker>
    <order-summary></order-summary>
  </div>
And then your directive figures out what that means in terms of rendering. But now, the nice thing is that I can just substitute that with <my-size-picker> and, assuming I fulfill the contract, everything should continue to work.

Now you get the added benefit that you can test directives individually, as well as the whole controller. Right now, if you do some restructuring of the page, you could end up in a situation where you break all of your test cases. I mean, in this case it might be overkill, but as a general principle I think it's the right approach.

Anyway, looking forward to see what you do next!

mdkess | 12 years ago | on: Rainyday.js

That's pretty harsh. How does one support Safari if they don't have a Mac?
page 1