“for whatever reason” is one of my least favorite phrases. I’ve only heard it said with the connotation that the reason was stupidity or malice, but the speaker is being too passive aggressive to say it. It’s also used to be intellectually lazy and imply that no good reason exists so there’s no need to understand “the reason”.
Anytime you hear the phrase “for whatever reason” you should consider stopping the conversation until someone has at least made an attempt to truly understand “the reason”.
More recently, I’ve been hearing that things were done a particular way “because reasons.” If you’re not going to say what the reasons are, just don’t say it.
When I hear “because reasons” I mentally substitute “for a sequence of reasons which, taken individually, make sense, but have collectively lead to a poor outcome”.
I agree. It’s subtle, but in my mind “because reasons” means something like: “We had to set up this weird hack because there was a PCI requirement, and then the server ran version x.y of the software which didn’t support feature z and upgrading would require a renewal of contract with vendor Q which would come with an extra R million dollar/year commit”.
But “for whatever reason” means: “I don’t know why they did that hack, they were incompetent, unlike me”.
This “because reasons” is more persuasive though, because psychology.
I’ve said “because reasons” under two circumstances that I think are perfectly satisfying, and I make it a point to make it clear which one I mean. The first is sarcastically – I didn’t have a reason, and it was just a choice I made. The second is to mean “the reasons should be obvious and are left as an exercise to the listener.” Granted, the latter is a little bit manipulative on my part. I recognize that by saying “because reasons” in that way, I cause people to not question me even when they don’t get the reasons, because I’ve made it seem like it should be obvious. I try to make it clear to those I associate with that I am perfectly willing to stop and explain what I’m thinking, but I will admit to some slight laziness in this regard. Sometimes, I just feel like the reasons shouldn’t be important to the person I’m talking to.
I’ve heard people use it to just avoid having to give the reasons for their actions (because they aren’t confident in the rationale, or because they know they did something wrong, for example), and I’ll agree completely that that is completely unsatisfying. I think it is a good practice to try to get someone to explain the reasons, if they’re doing that, but handling that gracefully in a conversation might be tough.
I agree, for a different reason. I work in an “open floor space” environment, and one thing that people don’t realize is how exhausting it is just to hear everything. Your brain has to process every single noise that passes by you; there is nothing to prevent it from reaching your ears. Every phone ring, door slam, small talk conversation, you name it.
This is what I hate most. The part of my brain that I use to write code is also the part of my brain I use to grok speech, and it can only work on one thing at a time.
I have worked in the corner of an open-plan office(wheeled desks and everything) for the last four years. Highlights:
Game/hw devs testing audio. The same bg audio clip repeated every ten minutes for three solid months.
Every middle-manager around me talking on headsets, because this is a multinational so everyone is on VTC.
The senior engineer down the hall ambling over to a secretary’s desk and loudly expositing on the news and/or his latest opinion(spoiler: he’s US conservative/libertarian, so it’s politics, healthcare, or economic theories.
Every other group’s standup and discussions.
For years I made do with earbuds, but last week I bit the bullet and ordered a pair of closed-ear studio monitors in hopes of some faint peace.
I work in an office with thin walls. I can hear basically anything that happens in our offices, from a pen dropping, to someone having a phone conversation. I’ve taken to keeping my headphones on even when I don’t have music playing. I was once working in a cubicle farm, but the walls were thicker between rooms. It felt quieter. I feel like I would be much more productive working from home, at this point.
It’s not the constant noise, or the need to process the noise. I can get myself into a flow state pretty well, but eventually something sudden will force me to context switch, whether it’s someone knocking on someone else’s door (which sounds like someone right behind me, even on the other side of the offices), or a phone ringing somewhere in the office. Those sudden sounds kill my productivity, and I really don’t have a way to avoid them. Even now, I can hear a conversation with my headphones playing noise. I can’t imagine it being better in any way to work in an open space.
I agree, it is kind of exhausting. But I think open plans aren’t quite as terribly as they’re made out to be. A good pair of headphones can go a long way.
But I think open plans aren’t quite as terribly as they’re made out to be. A good pair of headphones can go a long way.
Headphones do nothing for the chronic anxiety induced by being visible from behind while working, which will accelerate your death by 10-20 years if it doesn’t render you unemployable with a crippling panic disorder first.
I am not exaggerating. The rate of psychiatric attrition in this industry is at least 4 percent per year.
Now get back to work! Everyone is looking at your monitor and sees that you’re on Lobsters! :)
I get told this a lot, but for me it just doesn’t work.
I tried the Bose QC20 which actually did dramatically reduce what conversation I could hear, but I ended up instead with this weird sense of motion sickness that I couldn’t tolerate for more than an hour. So I got one hour of work done while other people were in the office instead of 0 - I guess that’s a win?
With normal headphones or earbuds you just have to have the volume so high to cover up a person talking next to you that it’s dangerous to your hearing and also its own distraction from your work. Silence is vastly better for some people than music, especially obnoxiously loud music.
I didn’t find this post very compelling. IMO, the example code given is quite ugly. There is no flow to it, so I would break it up into several lines. But the completely pulled out portion is not actually much better. Why expand the map to a foreach? Depending on the language, the foreach is more likely to introduce bugs, especially considering the expanded code is wrong relative to the original code, assuming standard definitions of map (the foreach does not collect, and D appears to be the element in C, not the collected map values).
I think there are better examples of this idea, though. A common one for me is Python lets one do:
foo if bar else baz
I find this cuteness quite jarring since, in almost all cases, one expects to read things as “if cond then do thing”. Another one that I see is people do a lot of gymnastics to indent code and add new lines in certain places to make code fill the area of a square as much as possible. For example:
foo(bar, baz, zoom,
boom, barn, blump)
I think this is quite challenging to read properly. My algorithm is if I have to break a line due to length, I go to the first reasonable place to break, and then I make a downward line. So my code has statements that generally look like lines either horizontal or vertical. So the above code would look like:
And maybe the bar is on a different line than foo, it depends on the language.
Those two things are mostly stylistic, but I find they avoid many bugs that would make it through a code review. There are other ones more related to the blog post of just being clever about things when it’s probably not needed.
Yeah, I was aiming for a more general point and without an example it’s all very abstract, but then with an example people focus on that. The point isn’t really that foreach is better than map.
I think it distracts any reader who is used to a language with map. The reason I use map is to have boring bugs :)
Yeah, so the inspiration for this was the kill your darlings post, which was about a somewhat similar construct (as an example). That focused more on readability, but it occurred to me there’s a debugging aspect as well. And even more so, certain styles will attract certain bugs, and other styles will attract other bugs.
There’s this idea what we should choose boring technology, but I think that’s usually interpreted as mysql instead of mongo. It doesn’t say much about how one writes code in the chosen language. I wasn’t quite sure how to clarify this without another whole paragraph of disclaimer, so I left it out. :)
As for map, I initially felt that foreach was even more boring, but I think the point can be made keeping map.
I think (based on my own interpretation of your post) your point is pretty solid. Just the example isn’t motivating. Thanks for the great blog posts.
The comments help. We argue to discover the truth. :)
I agree with questioning why map was expanded to foreach. I think that’s incredibly sloppy. The whole point of using a language that has maps is that when you need exactly what a map does, you aren’t responsible for making sure you code it right (hint: you probably won’t every time, and that one time where you don’t is hard to find).
As far as
foo if bar else baz
goes, I get the idea that it is an unexpected format. Personally, though, for short things, I find it far more intuitive. I really like being able to write that line, when it makes sense to write it.
Definitely agree with the sentiment: favor clear, concise code over code golf.
Steps to make sure this doesn’t get committed:
Review your own code at least twice before submitting it for review.
Have a code review process that ensures catching this kind of code before it goes into production.
I see this as more of a process problem than a mindset problem.
A more important step, to my mind, is having a standard and sticking to it. If your standard says “favor well named helper functions, and readable code, over darlings,” and you make a habit of following the standard during code reviews, you’ll probably catch these well before production.
The article focuses on the discrepancy between the people interviewed saying they thought finding defects was the main purpose of code review and the fact that it doesn’t do that very much. I think that’s just an indicator that those particular developers don’t really understand the purpose of code review. My team is only 5 developers and we know that’s not the main purpose, it’s to make sure the code conforms to standards, is readable, is the best it can be and to disseminate knowledge amongst the team.
I would heavily stress that last point. In my eyes, after the first 3-6 months of employment, everyone should be following best practices for the code they create. If not, either the developer will never get it right (and should probably either be replaced, or given time to explain why the current way is wrong, depending on the situation), or the code review process isn’t functioning and needs to be reevaluated. Giving regular code reviews is still important, after that point, because it gets everyone up to speed on the parts they didn’t write. Knowing the system is far more important, in my eyes, than being an exceptional developer.
This practice is a tiny marginal gain, backing up a few k of data, against risk of a significant loss: the key, identity, and every account or system it leads to. Don’t be reckless.
I have read many of the author’s blog posts. He’s quite brilliant. Should I trust that he knows what he is doing?
You should evaluate every idea on its merits.
In this case you don’t have to be brilliant or even know anything about encryption to judge it. Is the benefit of backing up a single small file greater than the risk of losing your GPG key and every system it leads to?
Even if someone has his secret key ring, each key in it is strongly encrypted with its own unique passphrase. I don’t think this is reckless.
Importantly, there is no reason you can’t have multiple private keys, and only share the ones used for things you could not afford to lose. This is a good option for data backup, but, for example, if you’re using PGP to encrypt messages of a sensitive nature, and you don’t necessarily trust that your passphrase is secure enough, you could just keep those keys to yourself.
Your private key is a lot more than just a few k of data. Losing it can be catastrophic.
I emphasized the size because it’s easy to back up, even a paper printout in a bank box can work. That catastrophic loss is my second point on risk.
Good point, I can agree with you.
I agree, thanks for the comment here and in IRC.
I’ve been using a project called tiddlywiki (http://tiddlywiki.com/), which I sync via dropbox, for a while now. I like it a lot, primarily because I can use markdown to format everything. This project looks similar, though a little less matured (which is not necessarily a bad thing - last I checked there was not a whole lot of development being done on tiddlywiki, and I’ll take active development over age any day). Tiddlywiki’s faults are mainly in documentation - it took me quite a while to get everything how I wanted, and now I often don’t mess with my configuration, and layout, just in case I mess something up.
I like using git for sync. I think that’s a good idea, and it was actually something I felt was missing from tiddlywiki. To me, the revision history of my notes is every bit as important as the notes themselves, which is part of the reason that I still use paper for many things. This project seems more flexible than tiddlywiki - it would be easy, for instance, to turn this into a blogging platform. I hope you keep up work on it, it’ll be good for there to be options in the personal wiki product domain.
This is such a cool game concept! I would also argue that Lua is in a lot of ways a very suitable choice for this interaction, especially considering its flexibility in how and when modules get loaded and reloaded at runtime.
Also, being a constantly delighted user of the LÖVE framework, I was especially happy to see it being used here as well :)
(Original author here.) Thanks! While the player’s computer is initially configured by writing Lua code, there is also a lisp->lua compiler in the game (https://github.com/meric/l2l) that you will eventually need to learn how to use, and I plan on integrating at least 2 other different languages beyond that; right now I’m thinking of Forth and possibly Lily.
Awesome! What made you chose Forth and Lily?
I chose Forth because it’s easy to implement in Lua itself, which will make interfacing between the two languages a lot easier. But I also want to include a language with a decent static type system (one with type inference and no nulls).
In this case implementing my own is out of the question, so I need to find one that (like Lua) is designed for embedding inside another language. Most of the time with static languages it is not that difficult to embed a program you’ve written in another language, but embedding the whole compiler is incredibly complicated. Lily is the only static language I can find designed for embedding the whole thing, and while I disagree with some of its design decisions (like only implementing type inference for locals and one-use lambdas), it’s a much better fit than anything else I could find.
There is actually a project called Spacemacs (http://spacemacs.org - a combination of vim and Emacs. I quite like it, personally), which is what I thought this was going to be about, upon seeing the title. I thought for a second that I’d be disappointed if Spacemacs was not the subject, but I’m actually pretty pleasantly surprised. This looks like fun. It kind of looks like you’ve taken Emacs and given it a storymode. I think I could actually get a few of my friends who are not really into programming to actually play, which is cool.
keybase the command line tools are alright - I still prefer using good old gpg. The service itself is nice since I think it makes pgp more accessible.
On the other hand keybasefs, the encrypted filesystem they have in beta, is pretty awesome. Rather than having to walk someone through how to use the keybase toolset or the gpg toolset (roll a keypair, publish their public key, etc), you have them sign up, verify themselves, install the package and you are ready to share files securely between them or between multiple people. Now all I have to do to share sensitive info with people is to create a directory (mkdir /keybase/private/me,them) and drop the file in there. For sharing with multiple people it is the same process, although the directory would be /keybase/private/me,them,third_person.
It’s pretty neat.
I’m gonna have to look into KBFS now, it seems pretty slick. PGP doesn’t make file sharing hard, if you know PGP, but it would certainly be nice to not have to explain PGP to people before sharing a sensitive file.
I don’t actually use my keybase key for encryption of much. I’ve sent a few test messages, but I already have encryption keys wholly in my control that I tend to use more frequently. What I do use keybase for is as an identity verification - I have those keys, they’re mine, and they’re published. If there is a signed keybase verification post on one of my accounts, it could only have come from me. There’s value in that, to me, even if I don’t use the key for anything else.
As far as the platform goes, it works, and I like that it’s easy to use for a newbie. The only reason I don’t really use it for encryption is that I am already used to using other things.
What sucks about being a master programmer is that the feeling that you are flying is often interrupted by the realisation that your current plane does not let you maneuver the same way the birds do.
It’s then when you realize “Oh my, this language sucks!” or “I see what you did there, Guido.” and then you try a different plane and see how it feels to fly that.
In my case, it’s almost always the same plane that I go back to. I find some task that I want to complete that would be a pain in language X, and end up realizing it could be done in a 5 line bash script, or I find something I want to model and end up realizing it could either be done in Ruby, or Lisp, and in either case, the code would suffer a lack of expressiveness in one area, and display great eloquence in another. I don’t really like this - in my eyes, it feels like I get a shallow understanding of the limits of a particular language, and a deep understanding of the lack of those limits in the languages I prefer to use for certain things, but never get to see the strengths of the languages that I do not prefer.
For this reason, lately, I’ve been trying to avoid language switching, once I’ve settled on what I’d like to build a particular project in. Occasionally, I’ll language switch if a piece of code can easily be prototyped in a particular language, then switch back once the prototype is built. I try to look at my code quality in my personal projects not as “how well can I build this thing” but rather “what can I learn from building this thing.” I think I just find learning to be the more interesting part.
There’s also precedent that violating TOS alone is not a CFAA violation. So don’t panic yet.
This occurred after the company had expressly revoked Nosal’s own login credentials to prevent him from accessing the database.
I would say that’s kind of an important detail.
This wasn’t a service for which you could pay $10 to obtain a password. So this isn’t a case of some people who would otherwise be allowed access taking a shortcut. These people were decidedly and knowingly barred from using the service.
Requisite faulty real world analogy: if I give the dog walker a key, they are not free to share copies of that key with their friends and stop by to borrow some sugar.
I had hoped that this would not come from the EFF. The exact issue here is that there was explicitly revoked access, and the defendants chose to violate that. I’m not so sure that this would hold up for anyone attempting to use someone else’s password, but rather, it might hold up if anyone who was banned from a site deliberately and knowingly used someone else’s password to get on the site. Even that, though, I think is a stretch. I think this really only applies where access is restricted to explicitly authorized individuals (for example, employees), and access has been explicitly revoked. There’s too much at play here to claim the precedent set from this case to be “sharing passwords is illegal.”
I have my first interview on tuesday! Excited for the opportunity, but also a little stressed.
This is how I deal with the nerves - If a company does not hire me, it is because I either did not fit their needs, or did not fit their culture. If I do not fit their needs, then I would rather not have disappointing them on my resume, and if I do not fit their culture, I do not want to be stuck there, no matter how well I could do the job.
Taking a thousand interviews to land the job that is the right place for you is infinitely better than taking only a handful, and landing a job that you will hate, or that will cause you to burn out, or disappoint. Just do your best in the interview to be personable and honest to what you believe you can do, then if it doesn’t work out, it’s only a step on the path to the right place, and the right time.
Free, super-effective security tip: Cut half your features. 95% of your users will never notice.
Then do it again.
I try to live by the mantra “Do it simply and make it composable.” I really wish more of the big projects would do the same.
I spent pretty big bucks getting a Dell XPS 13 (2015 model) and it is well engineered - I really love the touchpad, and the touch screen, and even though I opted for the higher definition screen, the battery life is pretty decent. I love the hardware. But the drivers are just buggy as hell, and the firmware for most everything and the UEFI both really need work. I’m hoping continued patches fix the issues, but I’m not all that hopeful. I just don’t get why we can’t have both good hardware and good software.
Are you running Windows or Linux on the XPS 13 (was thinking of getting one to run Linux).
Apple has it easier w.r.t. drivers and firmware, because they own the whole stack.