Contacts really help too
Contacts are the way to go. Make some friends and help around.
I have helped run the high school computer lab, which has landed me a job with the teacher’s company. When my peers and school pals grow old enough, they have started supplying me with opportunities. And I try to do the same thing for them.
I’ve only done two jobs without being recommended by a contact, and they were respectively Tim Hortons and being a guide for tree top adventures (ziplines and the likes).
Especially when you have problems wearing glasses. ;-)
Figuring out how to start implementing a vast project that’s been in the “discovery phase” forever.
I wanted to build this correspondence chess game over SMS. For the longest time I had a lot of ambitions for it but never got anywhere with them. Then finally one day I just hacked out the smallest dumbest prototype and it worked. If I hadn’t done that, I would’ve never gotten anywhere with it.
they should’ve released this back in April…
cue ignorant developer who refuses to use mix-blend-mode for their project due to “privacy violations”
BTW it appears you forgot to update the favicon
Oops, yeah. The purple I hacked into the light-up B is also hideous… not that I could tell before I posted, of course. I’ll get ‘em this evening. Thanks.
have my last interview this week then i am done with the job hunt!!
Got my first mac, and will be setting up XCode and stuff and figuring out how it works!
Wow, congratulations on both: getting a new job and getting your first mac.
Especially if you’re coming from Linux, take some time to savour your new Mac’s features. First impressions never have second chances, and I remember my own feelings when I got my first Mac: both a feeling of discovery, something new, and a bit of wow because of the polished interface and integration.
Do you have an iPhone too? iCloud is the target of many memes but the truth is that mac-phone integration is great this days.
I use an android phone (Moto X2) as my daily driver eventhough i have an old iphone4s but it is giving me issues with wifi (have to literally freeze it to make the wifi start working for an hour or so).
The biggest problem i had was that update download stops when i close the lid, weird. since the updates are usually huge i don’t want to leave my mac active using caffeine, This issue was quickly solved using insomniaX.
It’s a macbook air so i’ve been using nomachine to access my old linux laptop and write code for the linux distro i contribute too, no other solution worked as good as nomachine.
also getting used to brew, after many years of jumping between apt, yum & pacman. brew is fine, brew cask is very helpful.
finally App discovery is still a problem for me, trying to find places where i can get good app recommendations.
There are many threads and FAQs on reddit’s /r/apple regarding “software for switchers”. In general, the builtins work well (safari, mail.app, photos, etc), and for specific tasks you can try OSX counterparts for Linux software.
brew is crucial if you come from a linux environment, I see that you already discovered it.
Anyway, if you want any specific recommendation, just ask here and I’m sure we’ll give you more than enough options :)
thanks a lot! i bought airmail2 as soon as a friend recommended it, amazing app and much better than the mail app in yosemite.
Dude, yosemity? El Capitan and much more stable, and not updating after it has been out for almost a year… Why not?
updated last week.
Ah great ;)
Especially if you’re coming from Linux, take some time to savour your new Mac’s features.
Ah, those wonderful OS X features:
I know, but it gives you a good UI with excellent battery life and i don’t plan on install PostgreSQL on this machine anyway, it’s a tiny air. I will use a linux box using ssh or using remote desktop (i do desktop app development for linux too).
Kinda like some people did with their iPads early on.
On an old Macbook Air right now and I have no issues with running a PostgreSQL server 24/7. It’s not like you’re going to be running PostgreSQL for non-development purposes and have a fatal crash that will cause you to lose the last few seconds of data.
Congrats man! Oh ya, you can setup vagrant too to run linux distro seamlessly
Cool! will running linux desktop applications be possible with vagrant?
Do remember to head into System Settings -> Security and turn on the local firewall and FileVault (full disk encryption) as one of the first things you do. FileVault doesn’t, in my experience, make your Mac run any slower, but it’s super cool to know that you at least have some security for your sensitive data on you Mac.
Other than that, give Safari a chance. I used Chrome for many years when I ran Linux as my main operating system, but Safari is so much more smooth and consumes less battery if you’re on a laptop. I’ve been using Safari for 3 years now and every time I use Chrome, which I do everyday to separate work and personal logins, I loathe it.
Oh, and the built-in terminal is great, but I think iTerm2 is way better! Try it out!
is safari really that good? i am a firefox user the few things i’ll miss are uBlock origin & sync with my phone (android user)
It is in my experience.
The thing about Safari is that the team focuses more on the experience, thus the smoothness, as low power usage as possible and such as opposed to Chrome which focuses on having “all the features”. That, Safari don’t have, but instead they have a browser where scrolling is smooth, it doesn’t eat my ram even with 30 tabs (my max number of tabs ever) and 3 windows, and the whole thing just “feels” better to use. It’s hard to describe, but “feel” is what sets it apart. Chrome on the other hand just feels powerful with no regard to the soul sucking jhankyness that those powers require. Safari also has a better UI in my opinion, which doesn’t hurt either.
There is uBlock (not origin) for Safari, which is what I use, btw.
sold, closing firefox and starting to experiment with safari!
can the battery life BE any better
I wonder why they don’t provide any hosted solutions or services like 99% of the other web servers do. That has shown to be incredible viable and sustainable. But I don’t really know anything about business practices and SaaS
Many times when the OpenBSD group asks for donations, people come back with: why not offer some subscription or some more tangible goods like USB keys or whatnot? The answer is that it’s just more work to be done, and we’re not asking for money in exchange for more work selling more goods, we’re asking for money in exchange for what we’ve already done. The software we’ve written is the thing you are getting, and you are already getting it, and we would like to be supported financially to continue doing that specific thing.
Offering hosted solutions and support contacts just means less developer time on the code that everyone uses, and much more time on the hosted solutions and support contracts for those few that gave money.
Have companies been reluctant to donate rather than purchase things? I’ve noticed patio11 gripe against it but not investigated his legal concerns.
whoa. that’s an extremely interesting point. it’s like the linux distributions that used to sell cds - it was implicitly understood that you weren’t really paying for the cd, or even all that much for the convenience (since iirc the model survived well into the time that home bandwidth was good enough to download an iso), but to support the project. nonetheless the cd set both a clear figure for a “reasonable amount” of financial support by an individual to the project, and gave you something tangible to point to and think “i paid for that”.
At least for OpenBSD, it has been a lot easier for larger companies to swallow sending a check to “OpenBSD Foundation” instead of “Theo de Raadt”, but in either case it is still considered a (taxable) donation.
On the smaller side of budgeting I’ve definitely seen that. A lot of companies (even some universities) allow employees to buy software, books, etc. related to their job, up to a budget limit. But it’s structured as reimbursement for purchases, not as a pool of money you can do whatever you want with. So, for example, you can buy Sublime Text for $70 if that’s your preferred text editor, and they’ll reimburse you the $70. But if Sublime Text were donationware, you wouldn’t be able to donate $70 of the company’s money to them.
But people…. just don’t work that way, do they? Without a tangible carrot in exchange for their money, most will not give money. If they already have the carrot, most do not feel compelled to give the money. You need some sort of, uh, “coercion”. Also, a lot of companies just can’t donate money. Their accountants need to be able to say, “this is what we got in return for the money”, and charity is not something.
For Octave, I have been trying to find a way to get free carrot to sell, because donations barely cover a few people’s plane tickets to our yearly meeting.
You are 100% nailed it with the “this is what we got in return for the money”. Additionally, while support is a very solid something, it tends to be a fungible thing. “Well, did you shop around getting support for product X from other companies?”. That is what is great about the consortium model – there is no other source for consortium membership. It is a great line item “Consortium Membership”. It is a combination of support AND influence (read: direct contact), and companies might only pay a little for support, but will pay a good deal more for piece of mind and influence.
I struggled with this myself (author of Sidekiq here) as a OSS developer and project lead.
In the end, I felt that selling additional features was the best option for me personally, thus Sidekiq Pro and Sidekiq Enterprise. Of course I had to start a business to make it legit but I don’t have 90% of the admin overhead of a “real” business since I have no employees and provide no benefits to myself (aside from a basic paycheck).
I actually spoke with Matt privately a few days ago and offered what advice I could. Everyone’s situation is different so different strokes for different folks.
I found you speaking on https://changelog.com/92/ and https://changelog.com/159/ useful on this topic, as I’ve started my own business supporting http://prometheus.io.
Good luck, I hope it works out for you. I’m glad to see not only large VC-funded startups but also boutique startups like us focused on OSS.
Incidental support seems nightmarish, dealing with many individuals. But what about the SQLite Consortium model of focusing on a few large “users” and allowing them to basically fund it. https://www.sqlite.org/consortium.html
I really think the consortium model is very sane and applicable to a lot of infrastructure projects (like Caddy or Sidekiq). It asks those who can easily pay to pay, and they get something in exchange for it.
That’s very intersting, thanks! Compared to other OSS projects, such as those run by the ASF, consortium members essentially get a combination of benefits a non-profit foundation would provide in terms of project oversight, and what 3rd party companies with developers on staff would offer in terms of support contracts.
However, this only works if some of your core developers have consulting skills they wish to sell, and especially this promise is a bit rough on developers:
“Consortium members can call any developer at any time, day or night, and expect to get their full and immediate attention.”
I’m not sure I would be up for that. But that’s just a detail of terms. The model itself is quite sound.
“Consortium members can call any developer at any time, day or night, and expect to get their full and immediate attention.” I’m not sure I would be up for that. But that’s just a detail of terms.
Yeah, and remember, the “floor” is $75000 yearly, and most major companies contribute far more and very seldom call. It is a security blanket. See the agreement: https://www.sqlite.org/consortium_agreement-20071201.html for more information.
It seems that more infrastructure based open-source projects should look to SQLite (arguably the most successful infrastructure product ever: https://www.sqlite.org/famous.html) for guidance on how to manage funding.
Now, will anyone say again that it’s impossible to make a living while giving software away for free?
You just have to be very good at what you’re doing…
I am not sure “very good” is even required. I think you just have to be something companies depend on. They have a vested interest in your success at that point, you are in it together. If you vanish they have to switch (non-trivial cost) or take up maintenance themselves (super-non-trivial cost). From Sidekiq to Caddy there are DOZENS of projects in open source that I could see easily being funded this way. Companies are happy to lend support for like $6k a month in exchange for support and more important, influence (non-binding influence, but influence nevertheless).
It doesn’t seem like they are looking to start a business, but a way to compensate developers for their time and effort. Assuming they generate some cashflow, I wonder what the distribution will actually look like. I guess we will have to wait for a follow up.
I don’t understand the last two paragraphs at all. Everything in programming is about discipline or convenience; that’s how progress in languages and libraries happens, by making things more convenient or reducing the need for discipline.
I’m saying that all these progressive technologies are a matter of discipline or convenience where we should be weighing the cost and benefit, but many will treat them as the standard that everyone must comply with. They ignore the costs of using these new technologies and blindly plunge into their pitfalls and continue to justify their decision “because everyone else is doing it.”
In the current JS ecosystem, there is basically no desire for discipline.
There is however some odd bottomless stamina for switching from tool to tool, ever eager to find the one that files off the slight sharp edge that was inconvenient to the seeker.
Of course, sitting down, shutting up, and just getting fast at using the jank would save more time than continually trying to remove the jank, but hey, this is the web, and we’ve got funding to waste.
This article is in desperate need of some editing. I’d love to know why he no longer uses MVC frameworks but he goes on tangents before he even begins. A thesis statement would be nice too.
Not to mention that the authors main reasoning is built on strawman arguments against specific frameworks rather than MVC as a whole.
Are there any real advantages to doing something like this but with a MIDI controller instead of code?
Writing music in code seems to open up interesting possibilities, don’t you think so?
It certainly seems like it’d open up a bunch of interesting new ways to play around, if nothing else.
Perhaps just ‘historical’?
What about the post(s) with the most comments?
Behind 3 ‘what are you working on’ ones, this story.
I more or less subscribe to this methodology, however it breaks down in long-lived feature branches (I know, a bad thing anyway) with several collaborators. If you wait to rebase until the branch is “complete” then you risk some really hairy conflicts and potentially flat-out breaking the feature you’ve been collaborating on in hard-to-identify ways. If you rebase frequently, then you screw up peoples' local repo when they get out-of-sync with the newly forced branch refs. Generally rewriting history in a collaborative environment requires great care.
One of the best things I picked up from this post was actually from the comments - I didn’t realize --force-with-lease was a thing, but I like it. It’s too bad it’s such a long option, but it may help this collaborating with rebases problem somewhat.
Ditto on --force-with-lease. A little surprised it hasn’t become the default behaviour for force!
When you do --force it means you don’t care about prompts or warnings, and you just want to do what you want to do. Making --force behave as --force-with-lease means it won’t force when you really want it to force. I’d prefer something like --overwrite or --rewrite to make it clear you’re removing history, but it’s also not going to get held back by the conventional semantics of CLI toos.
So what’s the alternative? If I want a lightweight, readable language and I can’t stand exceptions, Python may well still be my best option.
One smart co-worker once taught me a simple thing: human brain is the most adaptive system of all that we use in software. In subjective cases where you simply “can’t stand” something the alternative is to change the attitude rather than work against any piece of software. It’s usually much easier than it seems at first.
(Trying Rust after ~10 years in Python, it seemed to me at first that there’s no way people writing all this error matching code couldn’t see that it’s awfully inefficient and unreadable. When I switched my brain from fighting into understanding, it stopped hurting in about two weeks time.)
I felt the same way about Go (having to write all the error handling code drove me nuts). After a little bit I didn’t mind at all. It’s a design choice and it fits with the language’s design. Go’s panic/recover provides truly exceptional exceptions as the author of this post seems to prefer (though they’re not declared).
But generally this post doesn’t make much sense to me. Maybe the author’s actually annoyed by the difference between checked and unchecked exceptions?
One insight for me from this post was that Python is possibly the best implementation of exception based error handling. I’m not ready to properly defend this position though, it’s just something to think about.
OCaml with Core as your stdlib is actually pretty solid. All methods that return exceptions are explicitly marked by ending in _exn, and I can’t think of any example where there isn’t an equivalent version that instead returns Some foo or None, which (unlike in Go) you cannot ignore and must pattern match sanely. This post and its ancestors provides a good comparison of Python and OCaml from the perspective of moving a very large code base from one language to the other incrementally.
Sure (and in reality I personally use Scala which is pretty similar to OCaml). But I don’t think it’s entirely unreasonable to prefer Python to OCaml, even if one dislikes exceptions - the OCaml syntax is a bit ugly, Python’s OO support is actually quite nice, and while OCaml has become a lot more popular of late there’s still a bigger community/ecosystem around Python, particularly for the web or science.
What about exceptions do you not like? Do you mean you want to pursue complete correctness? Do you prefer to have things silently fail? I’m genuinely curious, and I can’t sympathize.
I find exception control flow confusing to read, and hard to retain correctness when refactoring. I prefer to use values (functional style) for any “normal” control flow e.g. input validation, no entries found (where that’s a part of normal operation), any “4xx situation”. I’d only use exceptions for “system” failures like out-of-memory, connection refused, a “5xx situation”, or anything that definitely indicates programmer error - the kind of thing I’d expect to set up developer alerts for.
I find exception control flow confusing to read, and hard to retain correctness when refactoring.
This is probably, full stop, the worst thing about dealing with “exception first” languages.
I find it impossible to refactor code that generates / handles exceptions the first time. I almost always end up with the exception handler too deep to react, or the exception generator moved above the scope of the catch statement.
Say what you will about Java, but at least the compiler yells at me when that happens. In Python I have to depend on my tests to tickle the condition – and if it’s truly an exceptional exception, the odds of that error sneaking into my code is significantly high.
I was just having an extended exchange about this on HN. Even in Java with a checked exception, I’ve broken working code by reordering seemingly orthogonal lines. I think you need a (small) visual distinction between calls that throw and calls that don’t - something like the =/ distinction you get with monadic style. Alternatively, if all the Java tools highlighted calls that declare exceptions (the same way implicit conversions or by-name parameters get a green underline when working in Scala) that would make checked exceptions a lot more usable.
Once you have exceptions, you have to start thinking about exception safety. How hard that is depends on the language.
Exceptions can be seen as dishonest, in a sense – they are an affordance that encourages a “fix and continue” style of programming, and where they are available, they often are used for things that are non-fatal, hence, non-exceptional. I don’t mind them as much as some others do, and I do sympathize with the notion of not fighting the platform – yes, you could implement a Some 'a | Error of msg idiom in Python, but you’d still be stuck with catching and wrapping exceptions, so you’re better off just going along to get along.
Some 'a | Error of msg
Lua seems like an obvious choice; it’s several orders of magnitude lighter, just as readable, and doesn’t have exceptions.
error/pcall are Lua’s throw/catch, they just don’t get used much.
I’ve been trying to promote the term RESTless to describe rpc-over-HTTP apis.
I’d love to hear your case for RPC-style approaches to HTTP APIs.
My impression is that HATEOAS is essential to REST. Without it, we’re talking about an RPC API in disguise. Would you agree with this statement?
I would, yes. It’s right up front: http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
This chapter introduces and elaborates the Representational State Transfer (REST) architectural style for distributed hypermedia systems,
Funny how they go into great detail on how Rib works, why it’s useful and how they use it, yet it’s not open source or available as a library in any form or fashion. Maybe the idea is interesting, but we have yet to see it in practice, and we have no idea how this is intended to be used in the context of existing applications that would want to use it as a client-side proxy of sorts. I don’t find this article very useful or interesting in any regard ¯_(ツ)_/¯
I don’t find this article very useful or interesting in any regard ¯_(ツ)_/¯
oh no, your right arm got severed by the escaping gods!
“… I need to learn how to Google before getting excited.”
No! That’s about the worst lesson you can take as a student. Get excited about things, you’ll learn so much that way.
But the author got it at the end, so all is good :)
I think he meant to use Google before getting excited about “discovering something new.”
That’s exactly what he shouldn’t do.
If he thought “oh, hey, I’m going to google ‘sort with binary tree’” he’d have probably seen that treesort is a thing and wouldn’t have the same excitement and drive to investigate it. It’d be much easier to skim the Wikipedia page and move on. Where’s the excitement there? What do you learn? How do you improve yourself?
Googling first is fine when your code ends up going to production; when you’re a student, you should always assume you’re the first person to crack the problem and proceed accordingly! Even if you’re on a well worn path the excitement of going down it will let you learn so much more…
I don’t mean to sound rude, but that’s engendering a delusion. If you’re not opposed to using a delusion to motivate yourself why just just convince yourself that you will be shot if you stop working. In fact when people get attached to this mindset, when they go out into the workforce they view themselves as God’s gift to programming, with a habit of failing to do adequate research. They ritually reinvent the wheel and pat themselves on the back for being SO SMART. This is terrible mental hygiene. You don’t need delusion to motivate yourself, just get it done.
@owen already made a distinction between learning and production above.
You seem highly focused on the “in the workforce” / production case, while @owen is thinking of educational value outside of the goal to build a product.
There is no educational value in pretending to be the first person to have invented a thing.
Learning to innovate and developing the desire to blaze trails is just as important as listening to a professor tell you about all the different sorting algorithms that are out there.
If people don’t get that in university (or, for self taught programmers, if you don’t develop that yourself) you can end up with the opposite effect: they’re plenty able to solve problems so long as they fit in a narrowly defined scope of what they’ve done and been shown before, but they’re completely unable or uninterested in exploring new solutions and learning new things. A sort of “programming by rote” individual, I guess.
But perhaps we’re both colored by experiences with people who have very different pathologies at play :)
I more or less agree, though even in research rather than applied work, I think it does eventually become important to get a feeling for when something “probably has already been solved”, and be able find that solution rather than reinventing it. It helps to develop an intuition for what someone has probably already studied vs. is probably new, so you can maximize the proportion of your time working on not-yet-solved things, and tie in your work to the existing work, and the established terminology for it. That’s one thing that productive PhD students tend to do better than less-productive ones.
But yeah, probably not when starting out. When figuring out how things work in a new field (or if you’re new to research entirely), it’s more motivating and less overwhelming, and can help understanding, to tackle things on first principles, and it’s fine to re-discover standard solutions.
Sure, you SHOULD reason about a problem, but you definitely shouldn’t pretend there isn’t a solution out there. Very different statements with very different implications. Mess around with it a bit, see what you can accomplish, but also go out and find the accepted answer to the problem, observe that and figure out what makes that tick. If you just do the first part, you’ll end up in an ego trap.
I agree with this. An undergrad probably should attempt to crack the problem (or think of potential solutions) from first principles. Though in a Masters' through research program, you are kinda neither here nor there. You are a student-cum-researcher that is forced to do a lit survey before starting your thesis.
A lightly tangential remark: I will bet anyone a hundred bucks that though the posters' Professor was seemingly nonchalant, he clinked a glass of whiskey that night celebrating the fact that a student of his understood the class and came up with something on his own.
A thousand times this.
This is my desktop when I’m at work. Nothing really interesting. I guess it’s minimalist. When on the go, the three screens are just windows I swap between.
The color theme I use in VIM and iTerm are Tomorrow. I can paste the irssi theme if needed.
I find bulk find-and-replace to be too risky or fuzzy for me. I prefer to go match-by-match and confirm the replace. My approach is usually something like:
git grep -l something-regexp | xargs nvim
Which will open vim with every file that matched that regexp, and then I can do a traditional find/replace flow on each file.
The article talks about using the c flag on vim substitutions to have it ask for confirmation on each case.
e.g. :%s/foo/bar/gc will do a global search and replace with confirmation