If you ever wanted to know what Google does to maintain its high level of security, here’s your chance. Google Infrastructure Security Design Overview provides quite a bit of information on the subject.
This document gives an overview of how security is designed into Google’s technical infrastructure. This global scale infrastructure is designed to provide security through the entire information processing lifecycle at Google. This infrastructure provides secure deployment of services, secure storage of data with end user privacy safeguards, secure communications between services, secure and private communication with customers over the internet, and safe operation by administrators.
Headless Browsers is a list of (almost) all headless web browsers in existence. These are browsers without graphical user interface, controlled programmatically, and useful for testing, automation, and other similar tasks.
I’ve used one or two. I’v heard about three of four. I had no idea there was such a variety though.
CommitStrip strikes again! Brilliant.
With Bitcoin on the rise recently (currently priced at $900+), I thought I’d share the link to this article – Bitcoin – Money Decentralization – which provides some insight into how Bitcoin works and some core principles behind it.
The article is written more from the Computer Science perspective rather than an economic/financial one, some of the economic details might be oversimplified.
The two main aspects that make Bitcoin different from a modern monetary systems, like US Dollar or Euro, are the following:
- Decentralization: There is no central entity that prints (mints) money, but rather the money is being mint by the crowd. This makes Bitcoin a decentralized system.
- Anonymity: People who use Bitcoin hope that their identity would not be revealed, in contrast to the usual way we all buy commodity over the internet using our credit card, we have to supply our personal details to be verified against the bank who treats our account.
Here is an interesting project – SC-IM, or Spreadsheet Calculator Improvised, which is an ncurses spreadsheet program for terminal. Here are some of the features:
- UNDO / REDO.
- 65.536 rows and 702 columns supported. (The number of rows can be expanded to 1.048.576 if wished).
- CSV / TAB delimited file import and export.
- XLS / XLSX file import.
- Sort of rows.
- Filter of rows.
- Cell shifting.
- 256 color support – screen colors can be customized by user, even at runtime.
- Colorize cells or give them format such as bold or underline.
- Wide character support. The following alphabets are supported: English, Spanish, French, Italian, German, Portuguese, Russian, Ukrainian, Greek, Turkish, Czech, Japanese, Chinese.
- Implement external functions in the language you prefer and use them in SC-IM.
- Use SC-IM as a non-interactive calculator, reading its input from a external script.
- More movements commands implemented !
- Input and Output was completely rewritten.
A combination of interactive and non-interactive interface seems to be particularly useful.
A friend sent me a link to this email from Linus Torvalds to the Kernel Summit Discussion mailing list. The subject of the conversation is the General Public License (GPL) and whether or not it should be enforced in courts. Read the whole thing – it’s quite interesting. Here are a few snippets just to get you started:
Let’s be clear about this: lawsuits destroy. They don’t “protect”.
Lawsuits destroy community. They destroy trust. They would destroy all the goodwill we’ve built up over the years by being nice.
And then this:
Because lawsuits – and even threats of lawsuits – makes companies way less likely to see you as a good guy. Even when you’re threatening
somebody else, everybody else around the target starts getting really
I talked to an Oracle lawyer a few months ago, and told him their
lawsuit just makes Oracle look bad. The lawyer was dismissive, and
tried to explain how it’s silly how people take lawsuits personally,
and talked about how layers _understand_ that lawsuits aren’t
personal, and that they are still friends outside the court.
I’m sure a lawyer can “understand” how lawsuits aren’t actually
something personal at all, but lawyers really seem to be the *only*
people who “understand” that.
The fact is, lawsuits (and threats of lawsuits) do not make for
friends. You just look like a bully.
Software Engineering Tips shares some tips on how to figure out if you are a bad programmer, and how to remedy that.
Signs that you’re a bad programmer
- Inability to reason about code
- Poor understanding of the language’s programming model
- Deficient research skills / Chronically poor knowledge of the platform’s features
- Inability to comprehend pointers
- Difficulty seeing through recursion
- Distrust of code
If you are not a bad programmer, check if you are mediocre one.
Signs that you are a mediocre programmer
- Inability to think in sets
- Lack of critical thinking
- Pinball Programming
- Unfamiliar with the principles of security
- Code is a mess
And, finally, here are some signs that you shouldn’t be a programmer.
Signs that you shouldn’t be a programmer
- Inability to determine the order of program execution
- Insufficient ability to think abstractly
- Collyer Brothers syndrome
- Dysfunctional sense of causality
- Indifference to outcomes
The article also suggests some alternative career paths for you.
As a user of Opera browser in the good ol’ days, I share Ilya Birman’s pain …
But I am not talking about rendering and scripts. I am talking about everything else. Safari may take a second or two just to open a new blank tab on a 2014 iMac. And with ten or fifteen open tabs it eventually becomes sluggish as hell. Chrome is better, but not much so.
… and this too …
What would you do today if you opened a link and saw a long article which you don’t have time to read right now, but want to read later? You would save a link and close the tab. But when your browser is fast, you just don’t tend to close tabs which you haven’t dealt with. In Opera, I would let tabs stay open for months without having any impact on my machine’s performance.
Wait, but didn’t I restart my computer or the browser sometimes? Of course I did. Unfortunately, modern browsers are so stupid that they reload all the tabs when you restart them. Which takes ages if you have a hundred of tabs. Opera was sane: it did not reload a tab unless you asked for it. It just reopened everything from cache. Which took a couple of seconds.
In fact, maybe it’s a good time to try out Opera browser again. After all, the two primary reasons I’ve switched from it were:
- Open Source. This was back in a day when I was a zealot. (Yeah, if you think I’m one now, you should have seen me in my 20’s.) Now I am much more calm about the licensing.
- Rendering issues. That was back when Opera had its own rendering engine and couldn’t quite keep up with all the changes on the Web. Since then, Opera has dumped its Presto rendering engine in favor of Webkit (the same engine that Google Chrome, Chromium and Safari browsers are using), and then dumped Webkit in favor of Blink, which is like … erm .. new Webkit (?) or something like that.
So maybe it’s good enough in rendering department and I can have my performance and tab management back. As Ilya mentions, no other browser came close to the tab management of Opera back in a day. I frequently have a 30+ tabs open, and its only because that’s as much as Chrome can handle on my laptop.
Update: Tried out the latest version of Opera now for about half an hour. I suddenly remembered another reason for why I’ve switched – fonts. Default fonts configuration is far from optimal. For multilingual pages (English and Russian) is more than horrific. Oh well, I guess, I’ll have to wait some more.
Here’s a trip down the memory lane – “How Linux got to be Linux: Test driving 1993-2003 distros“. The article looks at some of the early Linux distributions, remember what was already in and what came later. Complete with screenshots.
I don’t remember for sure which versions of which distributions I used in the early days, but Slackware, Suse, RedHat and Mandrake were definitely among those. Slackware was probably my first one, when I found the floppies in the only book on Linux at my college library. Then, somehow, I found RedHat (I think 5.1 or so) in one of the local computer shops. Later I tried Mandrake and Suse, cause those were laying around at work. But RedHat stuck with me ever since. I think I’ve used pretty much every version, including the move to Fedora, CentOS, and even the Red Hat Enterprise Linux, which we had the licenses for at some of my early work places.
Today edition of the “Four short links” from the O’Reilly Radar, brings a quick overview of the different feature flag implementations. It touches on the following:
- Command-line flags, with the link to gflags.
- A/B flags
- Dynamic flags, which are more difficult
- More complex systems.
I’ve dealt with feature flags before, but never found an elegant way to scale those. Some of the issues that I came across were:
- Naming conventions. With more and more features added to the system, naming things becomes more and more difficult. Especially, when features cross over from one part of the system into another and need to be supported in different sub-modules. In a way, this reminds me of the old argument in the blogging community about using hierarchical categories vs. flat tags, with categories providing more order and tags providing multiple paths to the destination.
- Modularization issues. Feature flags are often need in the larger applications. The kind that provides a lot of features (duh!). But those large applications often consist of smaller parts, or modules. Deciding whether or not to implement the feature on the application level, and/or on the module level is difficult. Especially if those module features will need to be later grouped into application features.
In terms of implementation, I haven’t used any special tools or libraries. It was basically a set of configuration files, with feature variables defined per environment and altered during the deployment.
These days, something more robust than that is necessary for some of the projects at work. Gladly, there are plenty of available tools to choose from – no need to reinvent the wheel. For a good starting point, have a look at PHP Feature Flags website. The ones listed so far are:
So, I guess, PHP is well covered when it comes to feature flags tools. The above cover cookie-based, IP-based, URL-based dynamic features, configuration-based features, and A/B features.
The point now is to actually utilize them in the project. After all, the lack of feature flags is one of the 5 toxic things for the scalability, as per this page:
- Object Relational Mappers (ORMs)
- Synchronous, Serial, Coupled or Locking Processes
- One Copy of Your Database
- Having No Metrics
- Lack of Feature Flags
I haven’t decided which library to use yet – will need to try them all and see which one is the most appropriate, but for now I don’t think I’ll dive as deep as cookie/URL/IP based features or A/B testing. Even the simplest configuration-based implementation will be helpful.