987 karma · joined May 22, 2009
I believe the anti-college/anti-credentialing stance is primarily how people are sold on degrees. People are told they will get better jobs and make more money if they get one. However, no one really takes the time to tell them that just getting your degree does not qualify you to immediately go get a job doing exactly what you want. Essentially, people have been oversold on what the degree actually gives them.
My belief is that a vast majority of the technology related jobs are the modern day equivalent of 'blue collar' work, more akin to tradesmen, such as electricians. If you read up the requirements for an electrician in the U.S. (a brief read of http://en.wikipedia.org/wiki/Electrician#United_States is good enough), it follows the same general trend we see with software development experience, even if the lines aren't as clearly drawn.
One caveat, I don't have a degree. I'm pretty close if I were to want to go back and finish it, but I didn't drop out by choice. I'm of the firm belief that it is possible, but significantly more difficult, to gain the same knowledge outside of a college or university, it's just harder to quantify the knowledge you have. I would also suggest everyone go to college and get an undergraduate degree in something that interests them, but focusing on core classes and general requirements, not their particular interest. Universities are great for two things, imparting a general base of knowledge and specialized knowledge. However, undergraduate degrees have shifted to focus on specialized knowledge at the expense of general knowledge.
One last note in my long-winded comment, I really appreciate how you state 'you should go to grad school if you want to get better at CS' rather than the usual defense of schools saying that it's absolutely needed.
There are several other scenarios where it can be your ISP or can cause significantly different timings between ISPs. A lot of ISPs offer a network internal forward caching system (CDN-like) so your traffic will appear to go directly from your ISP to the CDN. This is typically done with servers inside your ISPs network but with anycast routing so requests to the CDN outside of their network stay within it. I don't know if Google/YouTube does this, but I do know that Netflix does.
Edit: this is independent of the post, which shows nothing but a fundamental misunderstanding of what's actually going on and why. I'd be more interested to see if this was flash or html5 video, whether it was using rtmp(s) for flash or http streaming, what IPs it ended up hitting instead of those two blocks and whether a traceroute for those two blocks went through the same or a different peer from where it finally connected.
While you won't reach your representative directly, the staffers do pass on the feedback to the representative (each office is different, some will read each piece of mail while others only get summaries of what people in general are communicating about).
A representative democracy works only when you actually communicate to your representative what your interests are.
All this as a long ways to get around to saying: I disagree with anything that may consider suicide appropriate in any situation as one persons personal decision and situation becomes an example or model that someone in a similar situation could look to. But, I also don't think anyone should say a particular person should not have committed suicide. Instead, what should be said is a particular person should not have felt the need to commit suicide.
I had a Lenovo T60 for quite a while and, while it looked like a cheap piece of plastic, it was wonderfully durable, keyboard was placed in a good spot, the positioning of the buttons/touchpad were all just right. Just because it looks nice does not make something well-designed, and I have yet to use an Apple device that I would consider anywhere close to ergonomic friendly (the iPod nano being the closest as you only really used 2 "buttons" on the circle, pause/play and next).
I have a 1978 Datsun/Nissan 280Z. Only one insurance company allowed an online/unattended quote for insuring that age car. Only one other company was able to give a quote after talking with them on the phone, all of the others didn't have the ability to do a quote, even for liability only insurance. I went in person to several places and the result was the same. The company that allowed me to get a quote online now has all my other insurance related business (renters/property/full coverage on my new car/etc.). It just so happens that they've been an amazing company to work with, particularly when we've had car related issues (getting rear-ended while stopped at a stoplight, hitting an animal in the middle of the night when there was no room to swerve/stop and rendering the vehicle undrivable, etc.).
Trying to go through the process to see what things are like, the list of makes of cars is an abomination. It tries to filter based on years the make was available, but isn't inclusive (Nissan starts at ~85, but Datsun doesn't exist for older dates, etc.) and ends up being an incomplete list for a large number of years (I sampled the most recent ~5 years and the oldest ~5 years and several major manufacturers are missing) as well as model of cars being incomplete for at least a few makes from those years as well.
It didn't really sink in fully for me until I had to write my first full non-trivial Erlang application from start to finish. However, once it clicked, every piece of code I wrote was significantly more predictable, easy to reason about and had significantly less bugs.
One thing we did have was a large majority of the connections were coming from the same IP (but different source port) and a peak connection rate of ~200 connections per second per server and would last a few seconds (so at any given moment, roughly 1000 connections being established or with data in flight). I'd be really interested in hearing what your traffic patterns are roughly like (and hand-wavy what you have event machine doing, like proxying requests, building/returning its own responses, etc.) if you're willing to share at all.
The lock conditions it has are for particular workloads at particular throughput/utilization, so 99% of the people using it won't hit those conditions initially (and a lot of people aren't writing systems that will ever reach those limits). However, we have a particular service that acts as a TCP multiplexer/router/load balancer to provide high availability for some of our mission critical applications. A little over a year ago, I initially wrote it using EventMachine in a couple of weeks, then spent almost a month trying to find what I thought was a bug in my code where a full deadlock would occur if 3 or more connections were established in a small enough time frame. Turned out to be a bug in EventMachine. After fixing that one, I found another where if 5 or more open connections fired the same event within a small enough time frame, all 5 would hit livelock and given enough connections hitting the condition, the whole process would deadlock. Once I hit the second bug in EventMachine itself directly related to concurrency handling, I switched to Netty and rewrote the whole thing in Scala in about a week and it's been rock solid since.
I've been doing some development on the side in Go because its particular flavor of types and concurrency model is fascinating. It's not that Go is anti-event, it's that it's overwhelmingly stream oriented (not low-level streams, but data streams). Once I finally hit that moment of clarity that goroutines/channels was all about connecting streams of data and not connecting raw streams, they became a much more natural solution. However, don't get me started on the difference between a non-blocking read on a channel and a blocking read on a channel.
As an example, given two functions, A(Item) and B(List[Item]), if you call them like:
B << A << List[Item](x,y,z)
the A should be called once for each item in the list of x,y,z, the results of which are collected into a list and passed to B. If you add in a function C(Item) and call it like: B << C << A << List[Item](x,y,z)
then at any given point, A can be processing a list item, C can be processing a list item and the total results of C are being collected. Which leads into, what if it is order dependent? B << serial { A << List[Item](x,y,z) }
will guarantee that A is called serially and the order of the List (and results) is preserved.I really shouldn't advertise the link to the language at all here, considering I have zero documentation and there's almost no comments in the current code, but I'm going to anyways, https://bitbucket.org/ismarc/muster . It currently will parse a single file, generate the AST and generate the symbol table. I'm working on a non-parallel interpreter right now, with the intention of using the interpreter to write the compiler so the language is fully exercised to work out any potential issues with it. And on a final note, I'm targeting the JVM mainly for existing libraries, but I'm open to discussions about it.
What we do: Invodo helps businesses sell more through the power of video. As a full-service video solution, Invodo creates high-quality video at scale, delivers it through retail-focused technology, and publishes to Facebook, YouTube and retail channel partners to expand the impact. The Invodo video solution increases conversion rates, reduces returns and drives site traffic for clients including Internet 500 retailers and major manufacturers.
Invodo is an early-stage company so as a Senior Software Engineer you will play an incredibly important role in the success of both our clients and Invodo.
Software Engineers are expected to take ownership of substantial software modules, assist with technical product design, and contribute to the software engineering process at Invodo. The development will be concentrated on our core content management system and analytics platform (my.invodo.com). This customer-facing application software is written in Java/GWT using Hibernate and MySQL backend services.
Nearly all of our infrastructure services are written using Scala while the web application is currently written in Groovy (historical artifact at this point). It's hard to cover everything we do technology-wise in a short post, but we have our own player, make heavy use of CDNs for content distribution, our own analytics system and platform as well as an end-to-end workflow management tool used internally and externally for the video production, management and hosting process (the latter is where we're looking to hire).
The entire engineering team is less than 20 people, including operations, professional services and management. There are currently 9 developers (if I'm counting correctly) and all of the work the engineering department does is recognized throughout the company.
Feel free to send your resume/github/project urls to mbrace@invodo.com or ismarc31@gmail.com.