gunicorn + meinheld is even better than gevent in my experience. meinheld is written in C and offers a monkey patch option, and is a little bit faster than gevent. i'm using it with flask + sqlalchemy + redis with great success.
forget about the $3k you have left, what about the money you've already put in? it doesn't look like I can sign up anywhere to get any sort of service, so you have no way to generate a return on your investment so far -- so why would you want to put any more in?
my suggestion is to set up yourself a prgmr-like website, do the administration yourself (by hand), and spend a few hundred dollars trying to get some traffic and signups. if that starts to work out then take it from there. realize that more SSDs aren't going to generate any money; signups will.
a new website would be nice, but you don't have the money for one, and it's not clear it's worth trying to get one at this point. the pure ASCII look could actually instill some sort of confidence that your current website does not.
your library has no tests! it's a good effort but I honestly wouldn't use it yet.
a few nit picks: i can't imagine a scenario where i'd want my logger to close stdout (or any other file descriptor) for me.
there is a lot of missing error handling, which is really important for something critical like a logger. what happens when disk space runs out? no timeouts on network operations?
also your SMTP and Gmail loggers don't form valid MIME messages (I can't log non-ascii?). you also seem to just swallow exceptions which is totally not what I would want or expect from a logging library.
keep at it though, the logging module's API (inspired by log4j) is fairly painful.
> there is a lot of missing error handling, which is really
> important for something critical like a logger. what
> happens when disk space runs out? no timeouts on
> network operations?
> you also seem to just swallow exceptions which is totally
> not what I would want or expect from a logging library.
Lggr will fail silently by default, because your logging library shouldn't cause your
code to crash. If you'd like, it's quite easy to stop it from suppressing errors. For
more complex error handling, I think users should write their own coroutines for
handling log messages -- the default file printing and network sending coroutines
are merely the most basic case.
> also your SMTP and Gmail loggers don't form valid MIME messages
> (I can't log non-ascii?).
Please help me and add loggers that do format valid MIME message! The included loggers/coroutines
are just a few examples I came up with, but I'd love if other people were to contribute more :)
> keep at it though, the logging module's API (inspired by log4j)
> is fairly painful.
please don't do that. part of what makes using jquery plugins so horrific is that every new version is a "total rewrite" and/or drastically changes the API.
the API might use hungarian notation, and you might have fallen out of love with it, but so what? it's a pretty decent API and there's no real benefit to users in changing it. they'll all to have to update/rewrite their JS to stay up to date with the library for effectively no reason.
Thanks for the feedback - I really appreciate it. I'm currently in the middle of developing v1.9 of DataTables and backwards compatibility is key for me here. v2 is a good way off, and I'm certainly not committed to removing the hungarian notation (actually I find it quite useful personally). 1.x and the current API have been going since 2007 and is going to be supported for as long as I can see at the moment. If there are any breaking changes in v2, will be supported in parallel.
I know I don't want to update my own code for a new API on every release! Going back to the point of the OP there are certainly cases when writing custom code is beneficial for that reason, and equally (I believe) there are times when a tried and tested library such as DataTables is suitable.
why? college is not a job training facility and shouldn't be treated like one. high school's goal is to provide a broad education so a graduate can have the basic knowledge necessary to function in society. not everyone goes to college.
This discussion reveals one of the problems with our system of higher education: for some people it's one thing, for others it's something else.
Colleges are like companies that are trying to do two very different things at once: broad education and job training.
In the world of startups we know what to do when that happens: Choose one direction and go with it, stop trying to be all things to all people. Blended business models rarely work.
My guess is that something similar will eventually happen in education. Some institutions will specialize in getting you a paycheck and others will specialize in broader education.
I view purely academic coursework in the same category as other luxury goods: it's something some people find fun and exciting and if they want to pay for it, so be it, but society should not foot the bill.
Whereas practical "get a job" coursework I view as something that just about everybody needs and maybe there's a good argument for public subsidies or other policies that encourage it.
if i had to come up with a permutation algorithm as part of writing code, you'd better believe i'd look one up so that i'm sure i'm doing things optimally. i wouldn't trust myself to come up with the exactly right algorithm on the first try.
if i had to deal with some weird half-sorted array, i assume i'd be working in the same context as the problem and wouldn't have to make up a solution on the spot with limited details. why do you have a weird-ass data structure like that to begin with? that's the first question i'd ask.
personally i always ask a couple of simple questions (like FizzBuzz) and then talk experience. if you want to see a code sample, ask for one -- written on a computer, without someone hovering over the candidate's shoulder. coding solutions to weird questions on a whiteboard doesn't help anybody.
These questions aren't about "real world" situations, they are about problem solving and basic coding. Questions are good, as is a discussion on how and why these things should be implemented.
For the split array problem I rarely ask for code (only when I think it will actually help the candidate), it's just a discussion. It usually goes something like this:
Candidate: Well I can sort it first, then do a binary search.
Me: How would you sort it?
C: I'd use quicksort.
M: Can you do better than an nlogn algorithm?
C: Well I suppose since it's two pieces that are both already sorted, I can just find where they are split and then rearrange them.
M: How would you find the split?
C: I can go through each number until they stop increasing.
And so forth. The "best" solution (that I've come up with, anyway) is to find the split using a modified binary search, and then use a regular binary search on the piece that might contain your query. Not everyone gets that and that's okay.
In addition to asking coding questions I always ask candidates about previous experience and projects they've worked on. Sometimes the answers to these questions are more important. Most of the people I have been interviewing, however, are recent graduates or students who are just finishing college and may not have much experience or many projects that really engaged them.
I spend a lot of time thinking about how I can improve interviews within the confines of how my company conducts them. I've stopped asking the permutations question as I feel that it has too much of the "aha!" factor in that either the programmer goes "aha!" and solves it or they don't.
You should highlight, recent college graduates. If someone does get hired to your firm, I hope the "real world" problems are just as interesting.
I actually like those type of algorithmic problems you highlighted. I am not sure, what it measures other than the recent graduate knew his/her data structures and read their MIT Algorithms books really well. Very few jobs do require knowing that fundamentals that in depth. Are we writing a Kernel, or a file system? Are we writing a new type of java collection.
The type of real world problems that in the class of the 2 problem solving problems you mentioned seem far in few, unless you writing something new, that really needs to be optimized in some way.
I think this is a real problem with computer science schools. It great to teach the absolute bare essentials. But I think schools should also teach some modern programming and not leave it on the kids to learn on there own.
I can understand if you were interviewing for the core google search team. Their optimization's make the company money.
I think the best programmers are ones who can utilize abstractions while at the same time understand what they are abstractions of. For example, someone who knows Django and SQL is probably a better programmer than someone who knows Django but doesn't understand what a relational database is.
While people might not need to write searching and sorting algorithms much any more, understanding the difference between an ordered map and a hash table can be crucial in many common "real world" scenarios.
I also have tried to stress that the answers to my algorithm questions are only part of the criteria in determining whether we hire someone or not. I brought them up because the OP asked specifically about coding questions, not hiring questions.
You probably get a few false negatives out this, depending on how good you are at drawing people out. Some people would be thinking "this question seems easy enough that I should be able to solve it without asking dumb questions, but I'm so nervous I'm not thinking straight" and then just freeze up. You should be able to draw them out, though, as long as you're aware that the reason they're not answering is mostly because they're nervous. It sounds like you've done a lot more interviews than I have, so I'm sure you could handle it. It is harder when their facility with English is poor.
My first intuition was that you could somehow write a binary search with two pointers throwing about half of the array away each time. I ran into issues with this train of thought because there might be duplicates in the array or the array might be all the same number.
My second thought was just do a linear search and if you happen to find the pivot, store it, and make the array sorted. Subsequent calls therefore would result in a binary search.
that question is a bit of a turn-off to me. obviously "benchmark it, see what's slowest, and make it faster" is a correct answer, and so is a 40 page essay about browser rendering, minification, full page caching, fragment caching, AJAX, etc. have you tried anything more specific?
If you have examples of more specific questions, I'm glad to hear them. I would accept either of your answers, btw. Answers I have seen include "It is always SQL" and "make it ajax--ajax is fast."
The purpose is just to verify that they can put some ideas into writing, have a mental framework for debugging in place, and can verbally demonstrate any sort of familiarity with the technologies involved. It isn't a gotcha-type question that expects a specific answer.
edit: That said, your feedback is good and I will amend it to give more of an idea of how long a response is desirable.
it's very common for people to be as compliant as possible during the hiring process so as not to jeopardize the job, especially their first job out of school.
that tends to be the result of years of people saying "you're lucky to get a job at all" combined with a long search and endless interviews.
and while yes, she did sign the non compete, it doesn't mean it's not bullshit, which is the entire point of the article. of course you can be a hardass and say "she signed it", "should have read it more carefully", "her fault", etc, but now she's on the dole until the clause expires because someone had a hissy fit and threatened to sue her employer. it's a crappy, stifling situation all around which is what the article aimed to point out.
"Angela worked at Bullhorn for about three years. She left the company on her own terms in October 2010 to work as a software trainer at a Boston-area hospital, but after seven months decided "it wasn't what I wanted to do." So she took a job as a business analyst with another company that sells software to recruiters."
She chose to quit two jobs before running into trouble at her third.
And "sic" is used to imply that the original quote was grammatically incorrect. Your usage implies I misused the word "chose" when you should have rephrased your sentence to make the tense correct.
they don't expect the work to be done solely by volunteers, and are going to ask for donations on their website. it's laid out in the first paragraphs:
The task is huge and it's unlikely that it will be
completed shortly based only on volunteer work, so we
came up with the following proposal, which splits the
work into several steps and sub-steps, togheter with an
estimate of how much money is needed to complete each
I really wish Google would support PyPy. It'd be such a small amount of money for them to fund development. Given the PyPy team's demonstrable success and Google's otherwise strong commitment to Python I can't understand why they don't.
I thought the story was that the Unladden Swallow team had actually started expanding into new directions after walking away from LLVM disappointed, but the project then got cancelled from higher-up?
I guess my point, in keeping with the parent, is that you'd expect Google to be interested in sustaining a team looking into performance improvements in an important part of their runtime longer-term, but that didn't happen.
Edit: On an unrelated note, it's good fun to take a look at http://speed.pypy.org/ and consider how close the averaged 4.5x speedup of PyPy trunk over CPython is to the original "make it five times faster" goal of Unladden Swallow.