标签 - hackernews

文章 feed - 评论 feed

2014-02-15

IP Address Details - ipinfo.io

Comments: "IP Address Details - ipinfo.io"

Original post on Hacker News

Pandora Knows if You Are a Republican - WSJ.com

Comments: "Pandora Knows if You Are a Republican - WSJ.com"

URL: http://online.wsj.com/news/article_email/SB10001424052702304315004579381393567130078-lMyQjAxMTA0MDEwMzExNDMyWj


Feb. 13, 2014 7:32 p.m. ET

Next time you listen to a Bob Marley channel on Pandora Media Inc., P -0.19% Pandora Media Inc. U.S.: NYSE $36.09 -0.07 -0.19% Feb. 14, 2014 2:59 pm Volume (Delayed 15m) : 4.85M P/E Ratio N/A Market Cap $7.02 Billion Dividend Yield N/A Rev. per Employee $862,018 02/13/14 Pandora Knows if You Are a Rep... 02/06/14 Stocks to Watch: Green Mountai... 02/05/14 Pandora Outlook Disappoints Bu... More quote details and news » P in Your Value Your Change Short position the Internet radio service may peg you as likely to vote for a Democrat.

The Oakland, Calif., company plans to roll out a new advertising service next week that would enable candidates and political organizations to target the majority of its 73 million active monthly Pandora listeners based on its sense of their political leanings.

How can it do this? The company matches election results with subscribers' musical preferences by ZIP Code. Then, it labels individual users based on their musical tastes and whether those artists are more frequently listened to in Democratic or Republican areas. Users don't divulge their political affiliations when they sign up for Pandora. (Take a quiz to see what your playlist says about you.)

Pandora's effort to pinpoint voter preferences highlights how digital media companies are finding new ways to tap information that users share freely to target advertising. These go beyond the traditional tracking of Web-browsing habits. Pandora, locked in a battle for advertising revenue with Internet radio services such as Spotify, sees political advertising as a way to boost revenue.

Facebook Inc. FB +0.12% Facebook Inc. Cl A U.S.: Nasdaq $67.41 +0.08 +0.12% Feb. 14, 2014 2:59 pm Volume (Delayed 15m) : 29.02M P/E Ratio 110.59 Market Cap $171.67 Billion Dividend Yield N/A Rev. per Employee $1,242,230 02/14/14 Top 50 Cities for Singles Look... 02/13/14 Facebook Adds New Options for ... 02/12/14 New Apps Whisper and Secret Ca... More quote details and news » FB in Your Value Your Change Short position is considered the pioneer in compiling information that users share to create demographic profiles for online advertisers. During the 2008 election, Facebook began allowing political firms to target users by mining clues to their interests and their location.

Before the 2011 Iowa Straw Poll, for example, Rep. Michele Bachmann (R., Minn.) advertised to Facebook users who had identified themselves as Tea Party supporters or Christian rock fans, or who had posted messages in favor of tax cuts.

"Targeting users is basically the currency in data right now," says Jack Krawczyk, Pandora's director of product management. He says companies like Pandora and Facebook, which know users' names, and can track their media consumption or stated preferences across computers, tablets and phones, have an advantage over companies relying on Web browsing cookies.

In November, Pandora allowed advertisers to target users who listened to salsa, or Spanish-language music and live in ZIP Codes with many Hispanic residents. It plans to tease out more demographic groups in coming months. "We can infer parenting," Mr. Krawczyk said. "If you're registered as a female in your thirties and have a children's music station."

Users of Pandora's free service cannot opt out of politically targeted ads, though they can opt out of cookie-based ads on Pandora's website. Pandora offers an ad-free premium service for $3.99 a month.

Pandora's inferences start with a user's ZIP Code, supplied at registration. Pandora then reviews election results for that county, Mr. Krawczyk said. So if 80% of citizens in a certain county voted for President Obama in 2012, Pandora assumes that 80% of people in the ZIP Codes in that county "lean Democrat." If the county voted twice for Obama, the algorithm pegs users in those ZIP Codes as likely to be "strong Democrats."

Pandora has allowed political advertisers to target users based on their ZIP Code since 2011. Now, it is adding information about users' musical tastes and other attributes in the hope of creating a more valuable profile.

Do political leanings correlate with music preferences? Mr. Krawczyk said he believes Pandora's predictions are between 75% and 80% accurate, but the "true test" will be how the ads perform. Pandora uses county election results in assembling its profiles because it has found they are better predictors than more-local results, such as from a voting precinct.

Of course, some of the analysis seems simplistic. Pandora users who listen to country music more often live in Republican areas, while fans of jazz, reggae and electronic music are more commonly found in counties favoring Democrats, the company said. R&B listeners lean slightly to Democrats and Gospel and New Age listeners lean slightly to Republicans, Pandora said. Classic rockers like Bruce Springsteen and Hip Hop artists are harder to classify; they count fans in both parties.

Generally, the preferences are distinct enough to appeal to advertisers. "There are very few places where people listen to a combination of country music and jazz," Mr. Krawczyk said.

Pandora has signed up two political-advertising firms, Precision Network and Bully Pulpit Interactive, which ran digital media for Sen. Elizabeth Warren's (D., Mass.) campaign and for New York City Mayor Bill de Blasio.

Bully Pulpit President Andrew Bleeker said the firm is looking to Pandora to "help us tailor the right message to the right audience."

Mr. Krawczyk said Pandora is planning to offer data about income into a targeted advertising formula, based on the average income in a user's ZIP Code. He says that people within higher-income brackets have more eclectic musical tastes than others.

Original post on Hacker News

BBC News - Linking to free web content is legal, says EU Court

Comments: "BBC News - Linking to free web content is legal, says EU Court"

URL: http://www.bbc.co.uk/news/technology-26187730


14 February 2014 Last updated at 09:50 ET

Websites can link to freely available content without the permission of the copyright holder, the European Court of Justice says.

The court's decision came after a dispute in Sweden between journalists and a web company that had posted links on its site to online news articles.

A Swedish court had asked the EU court to consider whether this broke copyright law.

The "position would be different" for links that bypass a paywall.

The journalists worked for the Swedish newspaper Goteborgs-Posten and had articles published on the paper's website.

The company Retriever Sverige runs a website that provides links to articles published by other websites.

Broken the internet

The journalists argued in the original case that users of Retriever Sverige's website would not know that they had been sent to another website by clicking on the links and therefore had made their articles available without authorisation. They said that because of this they were due compensation.

The case was unsuccessful in the Swedish courts but there was an appeal and the appeal court asked the EU Court of Justice to consider whether copyright law had been broken.

The court had to consider whether by providing links Retriever Sverige had taken part in an "act of communication to the public". Under EU copyright law, authors have the exclusive right to authorise or prohibit any communication to the public of their works.

The court ruled that the law had not been broken because the articles in question were on Goteborgs-Posten's website and therefore already "freely available".

In a statement it said: "The owner of a website may, without the authorisation of the copyright holders, redirect internet users, via hyperlinks, to protected works available on a freely accessible basis on another site."

But they ruled that the "position would be different" if a link led users to material that had purposely been restricted from being freely available - for example if it had been posted on a site that operates a paywall.

"If the decision had gone the other way it would have broken the internet," said Susan Hall, technology lawyer at Clarke Willmott.

"The way we communicate online is predicated on sharing material, whether that's links to Robert Peston on Bank of England interest rates, decisions of the European court or pictures of otters who look like Benedict Cumberbatch," she said.

Goteborgs-Posten told the BBC that it was making no comment on the ruling.

Original post on Hacker News

2014-02-14

Untitled

Comments: "scribd"

URL: http://www.scribd.com/vacuum?url=http://msnbcmedia.msn.com/i/MSNBC/Sections/NEWS/nsa-snowden.pdf


There was a problem sending you an sms. Check your phone number or try again later.

To get Scribd mobile enter your number and we'll send you a link to the Scribd app for iPhone & Android.

We've sent a link to the Scribd app. If you didn't receive it, try again.

Original post on Hacker News

Schneier on Security: The Insecurity of Secret IT Systems

Comments: "Schneier on Security: The Insecurity of Secret IT Systems"

URL: https://www.schneier.com/blog/archives/2014/02/the_insecurity_2.html


 

A blog covering security and security technology.

« GOPHERSET: NSA Exploit of the Day | Main | My Talk on the NSA »

February 14, 2014

The Insecurity of Secret IT Systems

We now know a lot about the security of the Rapiscan 522 B x-ray system used to scan carry-on baggage in airports worldwide. Billy Rios, director of threat intelligence at Qualys, got himself one and analyzed it. And he presented his results at the Kaspersky Security Analyst Summit this week.

It’s worse than you might have expected:

It runs on the outdated Windows 98 operating system, stores user credentials in plain text, and includes a feature called Threat Image Projection used to train screeners by injecting .bmp images of contraband, such as a gun or knife, into a passenger carry-on in order to test the screener's reaction during training sessions. The weak logins could allow a bad guy to project phony images on the X-ray display.

While this is all surprising, it shouldn’t be. These are the same sort of problems we saw in proprietary electronic voting machines, or computerized medical equipment, or computers in automobiles. Basically, whenever an IT system is designed and used in secret – either actual secret or simply away from public scrutiny – the results are pretty awful.

I used to decry secret security systems as "security by obscurity." I now say it more strongly: "obscurity means insecurity."

Security is a process. For software, that process is iterative. It involves defenders trying to build a secure system, attackers -- criminals, hackers, and researchers -- defeating the security, and defenders improving their system. This is how all mass-market software improves its security. It’s the best system we have. And for systems that are kept out of the hands of the public, that process stalls. The result looks like the Rapiscan 522 B x-ray system.

Smart security engineers open their systems to public scrutiny, because that’s how they improve. The truly awful engineers will not only hide their bad designs behind secrecy, but try to belittle any negative security results. Get ready for Rapiscan to claim that the researchers had old software, and the new software has fixed all these problems. Or that they’re only theoretical. Or that the researchers themselves are the problem. We’ve seen it all before.

Tags: air travel, disclosure, economics of security, obscurity, secrecy, security engineering

Posted on February 14, 2014 at 6:50 AM28 Comments

To receive these entries once a month by e-mail, sign up for the Crypto-Gram Newsletter.

In Europe they use quantum key cryptography in their voting systems:

http://www.idquantique.com/news-and-events/...

In Europe, the struggle to create a public realm out of the monarchy's private government extends back to populist movements in the Middle Ages such as the Ranters and Diggers and Bretheren of the Free Spirit; they seem more likely to view their government as something that really belongs to them, with the potential to work for them.

In the United States, our struggle to create a public government really begins with the 14th Amendment. Between then and the civil rights era is when we obtained universal suffrage. The franchise was highly exclusive in the Revolutionary era -- so much so that "WE, the People" probably only represents the will of 5-7% of the population at the time. Since then, the conservative battle cry has been "smaller government" and "privatization." Notwithstanding that we had private government once before -- when we were owned by the Britain -- we have this myth of obtaining self rule by fighting tyranny, when, in fact, the road to self rule has been a much more complicated struggle. But the myth prevails over history.

The 522B is ancient - at least 5-10 years old. http://aerodetection.com/rapiscan-522b/ says the units it has are 8-10 years old.

I'd be much more interested in the Rapiscan 620DV which appears to be the model used at major airports in Europe.

I still remember the first time I ran smack into security-by-obscurity. My boss at the time put me in charge of the most secure system we had at work. It was kept behind a heavy locked door and I was admitted only after a strong lecture on how important it was to keep it as secure as possible.

Even behind a closed door, he felt it necessary to whisper: "and the password is 'secret', which of course we can't tell anybody and they would never guess..."

The idea of continual improvement driven by the hostile nature of the operating environment seems very similar to evolution in the natural world. I don't mean analagous to, I mean another form of evolution, survival of the fittest. Obscurity, obfuscation, and political lobbying are all attempts to exclude a product from the security evolutionary process but even at the very highest levels - government printed currency, NSA information - it is impossible to isolate anything from security evolutionary forces.
It is better to embrace this process and to continually iteratively evolve and grow stronger and wiser during the process than to try and hold the driving forces of evolution at bay. The driving threat forces of security evolution themselves evolve, adapt and get stronger over time. You can hold them at bay temporarily through obscurity and obfuscation, but it then become only a matter of for how long? e.g. Sony Playstation 3
The Playstation 3 is an interesting example in that it was finally cracked due to sloppy cryptography implementation ( what was meant to be a random number generator was implemented as a constant ). I say interesting because peer / open review would have exposed the obvious flaw and it would have been fixed. In this case it was the obscurity and obfuscation that ultimately was responsible for the security being broken.
https://www.schneier.com/blog/archives/2011/01/sony_ps3_securi.html

OK, so if Kaspersky or Symantec or TrendMicro or Norton doesn't hand over all their source code I shouldn't buy the product... right?

OK, go ahead and post all your passwords and SSN's and your credit card info.

@beatty Well ... yes, although not just because you don't have source code. Virus scanners typically only search for known exploit code (and perhaps a few variations on it). They're fundamentally reactive and in my view not worth the effort.

@vincent You jest. The difference between secret paswords and secret algorithms has been explained to death already.

@vincent: not really. That is yours, your privacy for your own usage/protection, but when somebody offer for public usage some kind of security product, it should be available for public scrutiny on potential security threats/weaknesses and invasion of privacy (like recently Samsung on smart TV agreed to provide led indicator when camera is on. I hope that activation is hardware, not software).

The meta-problem here is that many (in my experience most) software "engineers" are incompetent and do not qualify as engineers. The result is that the typical software system sucks badly.

This machine is just a standard example. However though Windows (no matter what version) was suitable as an embedded OS has no business working on software or surrounding systems.

@beatty -- you shouldn't buy their products if you don't trust them. I don't and the systems my family uses haven't had an problems. But they don't hide what they're doing and they have some pretty vigorous competition.

@vincent -- I hope you don't think there is anything especially "secure" about your SSN. But hiding secret information used to access a system is different than hiding or obscuring information about the the system itself, which is what this post is about.

No, this just another cherry-picked instance of failed product development that is being used for self-serving purposes. It's easy, isn't it, to swoop in after the fact and point out everything that went wrong. Do you even know what the original threat model was? For all you know this failure was the RESULT of anal security engineers that suffocated product development until the project collapsed. You don't know. You pick up on all this pop news junk and fling it anyway you want.

Oh, it gets better. I keep thinking that if you control the software, you can probably control where the X-Ray beam is at. And observe that TSA agents walk back and forth through the scanner all the time.

So you keep it ON bouncing back and forth scanning at roughly chest level when not actually scanning the full body. When you see something metallic (say, a TSA badge), you immediately drop the emitter down to crotch level for the next 10 seconds...

"For all you know this failure was the RESULT of anal security engineers"

Win98 and plaintext passwords are not the result of anal security engineers. Unless, of course you mean actual anal security engineers, in which case it is not surprising, as they only know stuff about how to use a variety of rubber corks.

I somewhat disagree that engineers try to hide their bad designs through obscurity. I don't believe they even think about security.

There seems to be this idea of "Well, why would anyone attack that?" that is prevalent far too often. It's why we have empty passwords on internet-facing SCADA stuff, hopelessly outdated operating systems that can't be updated on embedded systems, etc. Nobody thinks like attackers. Closed systems are perfectly acceptable to people who don't think they will ever be a target.

It would be like me inventing my own door lock, and because no one has seen one before, I can assume I'm protected. (Of course this could also be said - Since no one has attempted to break into it yet, I hope I'm protected)

Rather than the alternative

Buying a door lock that has been proven in the real world. Paying attention to security bulletins so that if an exploit is found, I can replace it with a fixed version.

@vincent - Either way, I'm not giving you my key.

@Jason. All you said is valid when you are random target making you more protected than next target in the phishing scheme. Just to bring some relax mood: "Two young ladies were in the jungle and spotted lion. One start running, another asked is she really could run faster than lion. Nope, she reply. Just faster than you..." If you are NOT random target, all depends on the actor's resources available to break your security (psychical or informational): local thugs, organized crime, LEA local or state, LEA federal, foreign agents, etc.

@vas pup:

Well, now we're just getting deeper into security concepts. I don't think the threat of a targeted attack is a reason to abandon tried and tested methods. I think it's a reason to bring in additional expertise, add some additional layers of protection. (Instead of just a good door lock, add a surveillance system, alarm system, maybe a stronger door, bars on windows). The security system you use, no matter what you're protecting has a cost that must be weighed against the risk, and to be effective almost certainly will be layered.

@ Bruce,

    The truly awful engineers will not only hide their bad designs behind secrecy, but try to belittle any negative security results

That statment is a little unfair, because when it comes to hardware the closer you are to the metal, generaly the more competent you are as an "engineer".

The problem generaly starts and ends with managment, because,

1, Like quality, security has to be there fully functional from project day 0.

2, Security processes, training etc "cost".

You have to be an "old engineer" to remember the days befor quality processes were considered part and parcel of the job. And unfortunatly the area quality processes are least frequently found is "software engineering". Just take any modern software methodology and find the bits that are actually about "Quality Assurance"...

The simple answer is all you will find is an illusion or mirage paying lip service to any real quality process. It's also the reason grizzled old vetrans of software coding will tell you that most software development methodologies are at best "make work" and that you will get better results where team members share a common non adveserial goal and thus trust each other.

And when you look back at the development of QA systems it was the teams who bought into it and trusted the others that the most benifit was seen.

The reason QA actually got going was two fold,

1, Managment saw the financial benifit before the factory door.

2, Those who saw benifit used QA as a part of purchase decision.

Neither of these conditions is true currently for "security" thus managment treat it as "a non productive inefficiency" and thus "managment mantra" says it should be ruthlessly expunged from the work process "to increase productivity"

The way to get security into the design process as a norm is by making having it the most profitable path to walk, that way as with QA "managment mantra" will change.

Untill that time blaiming other people for "keeping their jobs" is a little unfair.


I think the article is dead wrong about the threat projection system being a big issue.

The purpose of this system is to keep the screener alert. In a normal airport, a contraband item like a bomb, gun, etc. might occur at most once a day. Rare contraband like a bomb is probably less than once in a lifetime. Hence it would be natural for a screener to simply 'pass' all luggage, even if they are being diligent. Adding these "false positives" gives the screener something to do, and increases security by "impedence matching" the task at hand to the psychology of the operator.

It's true that an attacker could have the system inject innocuous items, or perhaps have it inject items at a very high rate. I suspect that either of these new behaviors would be quickly noticed.

Actually, in any airport, contraband like this would occur at most 24hrs/airport-lockdown-time per day.

Looks like I was wrong. The other article gives more details about the system, and it is pretty crappy.

It's one thing to superimpose false images that are removed after alarming on them. It's another entirely to allow some other person to choose the time when the false image will be shown, and to replace rather than modify the image.

Hacking is illegal. Selling crappy secured soft- / hardware isn't (wearing my black and white glasses now).

"Upon seeing a weapon on the screen, operators are supposed to push a button to notify supervisors of the find. But if the image is a fake one that was superimposed, a message appears onscreen telling them so and advising them to search the bag anyway to be sure. If a fake image of a clean bag is superimposed on screen instead, the operator would never press the button, and therefore never be instructed to hand-search the bag."

If the training software assumes that the .bmp images have simulated contraband, one would think that the training software would do something if the operator doesn't press the button when a .bmp is displayed. Or does the attacker who introduces a "clean" .bmp file also modify the software?

Thank you, Bruce... "Obscurity means insecurity" is exactly what I've always meant, when I said "closed source by definition is insecure".... only open source can be secure (which doesn't guarantee that it is, only that it's at least possible).

What really worries me is that we haven't really learned a lot.

The 1983 movie wargames could happen today. Maybe not in the US (although I doubt that), but there are more countries in the world. The problem with security by obscurity is that you just don't know whether there is a WOPR that has a backdoor with the login "Joshua".

How secure are these nucleair platform systems? Just look at the stoxnet virus. Is "the west" capable of protecting itself against this kind of things? I don't think so. (looking at this news item)

And is the JSF/F-35 capable of dropping a nuke? It also contains 20 mln lines of C++ code.

I think this is way more worrying than any "terrorist attack".

I don't know. Maybe it's just BS that I am talking about. I am not a security expert. But I do know that you can't trust computers. Not yesterday, today or tomorrow.

Bruce,

Saw you at SAS, thanks for speaking!

Did you notice on the way out that all the machines in the Punta Cana airport were the make and model Billy and Terry evaluated?

Mike

Your comment about engineers (smart vs awful) was unfortunate. Well-established companies such as Diebold produce software with a workforce that is salaried and university-educated. The software produced usually conforms to management's priorities. If QA isn't isn't part of the software process, the software produced will tell the tale. The company with good management and a weak engineering staff is a rare beast. Unicorn rare. If Diebold has crappy software, then Diebold is to blame, not some mythical bumbler.

To say nothing of the procurement process.

True of Diebold and Rapiscan!

Schneier.com is a personal website. Opinions expressed are not necessarily those of Co3 Systems, Inc..

 

Original post on Hacker News

pstadler/flightplan · GitHub

Comments: "pstadler/flightplan · GitHub"

URL: https://github.com/pstadler/flightplan


Flightplan ✈

Run a sequence of commands against local and remote hosts.

Flightplan is a node.js library for streamlining application deployment or systems administration tasks, similar to Python's Fabric.

Installation & Usage

# install the cli tool
$ npm install -g flightplan
# use it in your project
$ npm install flightplan --save-dev
# run a flightplan (`fly --help` for more information)
$ fly <destination> [--plan flightplan.js]

Sample flightplan.js

// flightplan.js
var Flightplan = require('flightplan');
var tmpDir = 'pstadler-sh-' + new Date().getTime();
// configuration
plan.briefing({
 debug: false,
 destinations: {
 'staging': {
 host: 'staging.pstadler.sh',
 username: 'pstadler',
 agent: process.env.SSH_AUTH_SOCK
 },
 'production': [
 {
 host: 'www1.pstadler.sh',
 username: 'pstadler',
 agent: process.env.SSH_AUTH_SOCK
 },
 {
 host: 'www2.pstadler.sh',
 username: 'pstadler',
 agent: process.env.SSH_AUTH_SOCK
 }
 ]
 }
});
// run commands on localhost
plan.domestic(function(local) {
 local.log('Run build');
 local.exec('gulp build');
 local.log('Copy files to remote host');
 var filesToCopy = '(git ls-files -z;find assets/public -type f -print0)';
 local.exec(filesToCopy + '|rsync --files-from - -avz0 --rsh="ssh"'
 + ' ./ pstadler@pstadler.sh:/tmp/' + tmpDir);
});
// run commands on remote hosts (destinations)
plan.international(function(remote) {
 remote.log('Move folder to web root');
 remote.sudo('cp -R /tmp/' + tmpDir + ' ~', { user: 'www' });
 remote.rm('-rf /tmp/' + tmpDir);
 remote.log('Install dependencies');
 remote.sudo('npm --production --silent --prefix ~/'
 + tmpDir + ' install ~/' + tmpDir, { user: 'www' });
 remote.log('Reload application');
 remote.sudo('ln -snf ~/' + tmpDir + ' ~/pstadler-sh', { user: 'www' });
 remote.sudo('pm2 reload pstadler-sh', { user: 'www' });
});
// run more commands on localhost afterwards
plan.domestic(function(local) { /* ... */ });
// ...or on remote hosts
plan.international(function(remote) { /* ... */ });
// executed if flightplan succeeded
plan.success(function() {
});
// executed if flightplan failed
plan.disaster(function() {
});
// always executed after flightplan finished
plan.debriefing(function() {
});

Documentation

Flightplan

A flightplan is a set of subsequent flights to be executed on one or more hosts. The constructor doesn't take any arguments. The configuration is handled with the briefing() method.

var plan = new Flightplan();

Flights

A flight is a set of commands to be executed on one or more hosts. There are two types of flights:

Domestic flights

Commands in domestic flights are executed on the local host.

plan.domestic(function(transport) {
 transport.hostname(); // prints the hostname of the local host
});

International flights

Commands in international flights are executed in parallel against remote hosts defined during the briefing.

plan.international(function(transport) {
 transport.hostname(); // prints the hostname(s) of the remote host(s)
});

You can define multiple flights of each type. They will be executed in the order of their definition. If a previous flight failed, all subsequent flights won't get executed. For more information about what it means for a flight to fail, see the section about Transport.

// executed first
plan.domestic(function(transport) {});
// executed if first flight succeeded
plan.international(function(transport) {});
// executed if second flight succeeded
plan.domestic(function(transport) {});
// ...

flightplan.briefing(config) → this

Configure the flightplan's destinations with briefing(). Without a proper briefing you can't do international flights which require at least one destination. Each destination consists of one ore more hosts.

Values in the hosts section are passed directly to the connect() method of mscdex/ssh2.

plan.briefing({
 destinations: {
 // run with `fly staging`
 'staging': {
 // see: https://github.com/mscdex/ssh2#connection-methods
 host: 'staging.pstadler.sh',
 username: 'pstadler',
 agent: process.env.SSH_AUTH_SOCK
 },
 // run with `fly production`
 'production': [
 {
 host: 'www1.pstadler.sh',
 username: 'pstadler',
 agent: process.env.SSH_AUTH_SOCK
 },
 {
 host: 'www2.pstadler.sh',
 username: 'pstadler',
 agent: process.env.SSH_AUTH_SOCK
 },
 ]
 }
});

You can override the username value of all hosts by calling fly with the -u|--username option:

fly production --username=admin

flightplan.domestic(fn) → this

Calling this method registers a domestic flight. Domestic flights are executed on your local host. When fn gets called a Transport object is passed with the first argument.

plan.domestic(function(local) {
 local.echo('hello from your localhost.');
});

flightplan.international(fn) → this

Calling this method registers an international flight. International flights are executed on the current destination's remote hosts defined with briefing(). When fn gets called a Transport object is passed with the first argument.

plan.international(function(remote) {
 remote.echo('hello from the remote host.');
});

flightplan.success(fn) → this

fn() is called after the flightplan (and therefore all flights) succeeded.

flightplan.disaster(fn) → this

fn() is called after the flightplan was aborted.

flightplan.debriefing(fn)

fn() is called at the very end of the flightplan's execution.

flightplan.isAborted() → Boolean

Whether the flightplan is aborted or not.

flightplan.abort([message])

Calling this method will abort the flightplan and prevent any further flights from being executed. An optional message can be passed which will be displayed after the flightplan has been aborted.

plan.abort('Severe turbulences over the atlantic ocean!');

Transport

A transport is the interface you use during flights. Basically they offer you a set of methods to execute a chain of commands. Depending on the type of flight, this is either a ShellTransport object for domestic flights, or an SSHTransport for international flights. Both transports expose the same set of methods as described in this section.

plan.domestic(function(local) {
 local.echo('ShellTransport.echo() called');
});
plan.domestic(function(remote) {
 remote.echo('SSHTransport.echo() called');
});

We call the Transport object transport in the following section to avoid confusion. However, do yourself a favor and use local for domestic, and remote for international flights.

transport.exec(command[, options]) → code: int, stdout: String, stderr: String

To execute a command you have the choice between using exec() or one of the handy wrappers for often used commands: transport.exec('ls -al') is the same as transport.ls('-al'). If a command returns a non-zero exit code, the flightplan will be aborted and all subsequent commands and flights won't get executed.

Options

Options can be passed as a second argument. If failsafe: true is passed, the command is allowed to fail (i.e. exiting with a non-zero exit code), whereas silent: true will simply suppress its output.

// output of `ls -al` is suppressed
transport.ls('-al', {silent: true});
// flightplan continues even if command fails with exit code `1`
transport.ls('-al foo', {failsafe: true}); // ls: foo: No such file or directory
// both options together
transport.ls('-al foo', {silent: true, failsafe: true});

To apply these options to multiple commands check out the docs of transport.silent() and transport.failsafe().

Return value

Each command returns an object containing code, stdout andstderr:

var retval = transport.echo('Hello world');
console.log(retval); // { code: 0, stdout: 'Hello world\n', stderr: null }

transport.sudo(command[, options]) → code: int, stdout: String, stderr: String

Execute a command as another user with sudo(). It has the same signature as exec(). Per default, the user under which the command will be executed is "root". This can be changed by passing user: "name" with the second argument:

// will run: sudo -u root -i bash -c 'Hello world'
transport.sudo('echo Hello world');
// will run sudo -u www -i bash -c 'Hello world'
transport.sudo('echo Hello world', {user: 'www'});
// further options passed (see `exec()`)
transport.sudo('echo Hello world', {user: 'www', silent: true, failsafe: true});

transport.log(message)

Print a message to stdout. Flightplan takes care that the message is formatted correctly within the current context.

transport.log('Copying files to remote host');

transport.silent()

When calling silent() all subsequent commands are executed without printing their output to stdout until verbose() is called.

transport.ls(); // output will be printed to stdout
transport.silent();
transport.ls(); // output won't be printed to stdout

transport.verbose()

Calling verbose() reverts the behavior introduced with silent(). Output of commands will be printed to

transport.silent();
transport.ls(); // output won't be printed to stdout
transport.verbose();
transport.ls(); // output will be printed to stdout

transport.failsafe()

When calling failsafe(), all subsequent commands are allowed to fail until unsafe() is called. In other words, the flight will continue even if the return code of the command is not 0. This is helpful if either you expect a command to fail or their nature is to return a non-zero exit code.

transport.failsafe();
transport.ls('foo'); // ls: foo: No such file or directory
remote.log('Previous command failed, but flight was not aborted');

transport.unsafe()

Calling unsafe() reverts the behavior introduced with failsafe(). The flight will be aborted if a subsequent command fails (i.e. returns a non-zero exit code). This is the default behavior.

remote.failsafe();
remote.ls('foo'); // ls: foo: No such file or directory
remote.log('Previous command failed, but flight was not aborted');
remote.unsafe();
remote.ls('foo'); // ls: foo: No such file or directory
// flight aborted

transport.debug(message)

Print a debug message to stdout. Flightplan takes care that the message is formatted correctly within the current context.

remote.debug('Copying files to remote host');

transport.abort([message])

Manually abort the current flight and prevent any further commands and flights from being executed. An optional message can be passed which is displayed after the flight has been aborted.

remote.abort('Severe turbulences over the atlantic ocean!');

What's planned?

  • Add possibility to define a sudoUser per host with briefing().
  • Add a simple interface for file transport to remote hosts (e.g. rsync).
  • Tests will be implemented with upcoming releases. A part of this will be driven by bug reports.

Original post on Hacker News

10 French startups disrupting the way you experience fashion online

Comments: "10 French startups disrupting the way you experience fashion online"

URL: http://www.rudebaguette.com/2014/02/14/10-french-startups-fashion-marketplace/


It may sound like a stretch to say that French people are the reference for fashion. But as we say, “il n’y a pas de fumée sans feu” (there’s no smoke without fire).

In addition to having a very prolific fashion sense, the French are also very creative when it comes to the shopping experience. The landscape of French fashion startups is flourishing those days: 6 of the 10 companies presented in this article closed a round last spring/summer season and the results of their investments are released now. Let’s open the catwalk.

 

1.    Flink, the Flipboard of fashion blogs.

The last born of “fashion inspiration” apps Flink defines itself as the “Flipboard of fashion blogs”. Thomas France and his co-founders developed the idea while working on another e-commerce app, Shopelia: user-feedback got them the idea on focusing on the fashion vertical. Its mobile-first approach and great UX seduced fashion lovers and got them to 50,000 downloads in just a few days. Their next step is to release a new, more social version in two months.

From Flink’s Instagram account

 2.    Carnet de Mode, crowdfunding meets social shopping.

Carnet de Mode brings together fashion-lovers and young creative talents: the former can participate in the funding of a collection, the latter are able to develop it and get access to their first customers. A real mix between crowdfunding and social shopping which seems to be a good call for fashion – a highly emotional sector that federates its passionnates. Elaia Partners agreed and invested in the startup in May 2013 ($1 million – the first e-commerce platform in Elaia’s portfolio) arguing Carnet de Mode was truly “revolutionizing the online shopping experience”.

3.    InstantLuxe, buying luxury online has never been safer.

The fashion luxury marketplace places its expertise in luxury leather goods, watches and accessories. They play the intermediary and ensure a safe transaction between buyers and sellers with no risk of counterfeits. They achieved a €2 millions round of investment in June 2013 with Iris Capital and ISAI (who already invested €650 000 in 2010) which enables them to focus on the German market and mobile commerce.

4.    Monshowroom, the first marketplace for on-going collections.

When Séverine Grégoire and Chloé Ramade created Monshowroom.com in 2006, the platform was basically the only way to access current collections online, an opportunity for people living outside of big cities, or simply online-fashion lovers. Today, the platform has become a reference with 270 brands available. Alven Capital and Crédit Agricole Private Equity funds invested in the company in 2009 and Casino bought their share in 2012, in order to create synergies with the e-commerce platform “CDiscount”, as sources say (FR).

Monshowroom’s Instagram

5.    Dymant, invite-only eCommerce, the true eLuxury experience.

Dymant changed the e-commerce industry by focusing on the story-telling and esthetical atmosphere experience more than on the products. Quality VS SEO, to put it shortly. The marketplace offers invite-only customers the opportunity to access high-end and exclusive French “artisanat” (craftsmanship). Partech Ventures and IDInvest invested $1 million last year in order to enable the startup to address other geographical markets.

6.    Vestiaire Collective, a second-hand luxury marketplace.

Co-founded by Sébastien Fabre and Sophie Hersan, Vestiaire Collective is a marketplace for second-hand luxury fashion products. Created in Paris in 2009,  (because, as Sebastien Fabre told us: “In order to launch a fashion marketplace, we had to be in Paris”), they now are developing abroad: London in 2012, Germany and the U.S in 2014. This internationalization follows their series C round with Condé Nast ($15 millions), an interesting choice of partner, motivated by the expertise of the group in online community-based businesses and the U.S market.

Vestiaire Collective has innovated in the marketplace sector by adding a friction in the process – which could be seen as a bad example: in order to ensure a faithful community of customers, Vestiaire Collective has an editorial committee that selects which articles can be sold online, that specialists then check before they arrive in the customer’s hands. A great service that ensures happiness on both sides of the sale. They just opened a “Vintage” and “Lifestyle” section: take a look at it (even you male readers, you represent 15% of Vestiaire Collective’s clientele!)

Vestiaire Collective’s Instagram

7.    VideDressing, social shopping for previously owned outfits.

If your wallet is slightly smaller than Chanel and Dior-material, then VideDressing might be the right fit for you. The principle is the same as other social shopping platform: Meryl Job and Renaud Guillerm, co-founders, managed to build a strong a faithful community first, and then monetized it by facilitating trades inside this community. They now claim a 5-times growth factor between 2011 and 2012 and realized two rounds in 2013 in order to penetrate the German market – the last one with Global Founders Capital for $5 Million.

8.    Selectionnist, shopping through fashion magazines.

If you have ever been frustrated by not remembering the reference of an outfit you’ve seen in an old edition of Elle Magazine while waiting at the doctor’s, then you’ll love Selectionnist.

Selectionnist, founded by female serial-entrepreneurs Tatiana Jama and Lara Rouyres (Living Social, Dealissime) enables its visitors to search for things spotted by magazine or by brand. The beautifully-built website might also inspire some other shopping wishlists. The website just launched yesterday, time to try it out!

Selectionnist’s Instagram

9.    Wheretoget.it, finds the fashion items you lost of sight.

Extreme situation, you have spotted an outfit somewhere, anywhere, and you must have it. But of course, you don’t have the reference. Hopefully, Wheretoget.it is here to help.

The platform (which is French, unlike the URL extension « .it » might indicate) gathers a community of passionate fashion-lovers who are able to spot where you can find your desperately lost article, providing that you have a picture. If not, there is a great chance they will find something similar, or even better. The force of the “multitude” applied to fashion. Rumor is that Romain Moyne, founder, is currently working on a Series A round of investment[fr].

10. Rad, flash sales dedicated to the Cool.

Rad’s value proposition is quite similar to other fashion discovery platforms: the cooler the pictures, the more you want to buy. How did Rad work out so well then? Rad’s particularity holds in its editorial line: it’s just cool, then you can only get it for a small amount of time.

They closed a €2.5 Million Series A round of funding in June 2013, declaring: “We are raising to accelerate our growth — hire key people, build a logistics platform, speed up acquisition through marketing, develop our production capacities”.

Rad’s Instagram

Original post on Hacker News

Multiple Simultaneous Ajax Requests (with one callback) in jQuery | CSS-Tricks

Comments: "Multiple Simultaneous Ajax Requests (with one callback) in jQuery | CSS-Tricks"

URL: http://css-tricks.com/multiple-simultaneous-ajax-requests-one-callback-jquery/


Published February 13, 2014 by Chris Coyier

Let's say there is a feature on your website that only gets used 5% of the time. That feature requires some HTML, CSS, and JavaScript to work. So you decide that instead of having that HTML, CSS, and JavaScript on the page directly, you're going to Ajax that stuff in when the feature is about to be used.

We'll need to make three Ajax requests. Since we don't want to show anything to the user until the feature is ready to go (plus they all kinda rely on each other to work right) we need to wait for all three of them to be complete before proceeding.

What's the best way to do that?

Ajax calls in jQuery provide callbacks:

$.ajax({
 statusCode: {
 url: "/feature",
 success: function() {
 // Ajax success
 }
 }
});

Or the "Deferred" way, this time using a shorthand $.get() method:

$.get("/feature/").done(function() {
 // Ajax success
});

But we have three Ajax requests we're needing to perform, and we want to wait for all three of them to finish before doing anything, so it could get pretty gnarly in callback land:

// Get the HTML
$.get("/feature/", function(html) {
 // Get the CSS
 $.get("/assets/feature.css", function(css) {
 
 // Get the JavaScript
 $.getScript("/assets/feature.js", function() {
 // All is ready now, so...
 // Add CSS to page
 $("<style />").html(css).appendTo("head");
 // Add HTML to page
 $("body").append(html);
 });
 });
});

This successfully waits until everything is ready before adding anything to the page. So by the time the user sees anything, it's good to go. Perhaps that makes some of you feel nauseated, but I've done things that way before. At least it makes sense and works. The problem? It's slow.

One request ... wait to be done ... another request ... wait to be done ... another request ... wait to be done ... go.

It would be faster if we could do:

All three requests in parallel ... wait for all three to be done ... go.

We can use a bit of Deferred / Promises action to help here. I'm sure this is some JavaScript 101 stuff to some of you but this kind of thing eluded me for a long time and more complex Promises stuff still does.

In our simple use case, we can use jQuery's $.when() method, which takes a list of these "Deferred" objects (All jQuery Ajax methods return Deferred objects) and then provides a single callback.

$.when(
 // Deferred object (probably Ajax request),
 // Deferred object (probably Ajax request),
 // Deferred object (probably Ajax request)
}.then(function() {
 // All have been resolved (or rejected), do your thing
});

So our callback-hell can be rewritten like:

$.when(
 // Get the HTML
 $.get("/feature/", function(html) {
 globalStore.html = html;
 }),
 // Get the CSS
 $.get("/assets/feature.css", function(css) {
 globalStore.css = css;
 }),
 // Get the JS
 $.getScript("/assets/feature.js")
).then(function() {
 // All is ready now, so...
 // Add CSS to page
 $("<style />").html(globalStore.css).appendTo("head");
 // Add HTML to page
 $("body").append(globalStore.html);
});

Another use case: mustard cutting

My use-case example above is a 5% feature. Keep the page lighter for the 95% of users who don't use the feature, and have it be a relatively quick add-on for those that do.

Another situation might be a cut-the-mustard situation where you add in additional features or content to a page in certain situations, as you decide. Perhaps do a matchMedia test on some media queries and determine the device's screen and capabilities are such that you're going to include some extra modules. Cool, do it up with some parallel Ajax calls!

Original post on Hacker News

GOG.com

Comments: "GOG.com"

Original post on Hacker News

Linux Design Tools: High-end Design on a Low-end Budget

Comments: "Linux Design Tools: High-end Design on a Low-end Budget"

URL: http://www.sitepoint.com/linux-design-tools/


While the world’s best commercial graphic applications come with packed with features, they also come with a price tag many find hard to justify.

Though there are plenty of less expensive alternatives, the simple truth is: It’s hard to get cheaper than free.

Today we’re going to look some of the free, open source graphic apps available, and see if they are a viable replacement.

If you are currently unfamiliar with the abundance of free open source graphic apps now available, you may well be missing out.

The best open source graphic applications on this list are comparable in quality to their leading commercial equivalents.

Don’t be put off by the word ‘free’ either. This is a case where ‘free’ definitely doesn’t mean low quality.

I know what you’re thinking: “If I use free software, I’ll have far too much extra money!’

Relax. You can always donate to the hard-working developers behind these apps, and help them make them even better.

So, let’s get to the list, and see if open source can genuinely compete with their expensive commercial counterparts.

Sidenote: Although most of these applications were originally developed for Linux, they often have Windows and Mac versions.

1. Could You Use GIMP to Replace Photoshop?

Often the first application that comes to mind when you are thinking about free, open source graphics is GIMP (Gnu Image Manipulation Program).

While GIMP doesn’t have all the niche features of Photoshop, it certainly offers a lot. In fact, there are a good many professional designers who use GIMP and judging by their output, the results are stunning.

So, assuming you have some design skills, the limitations of the applications you use is secondary.

Image Credit: gimp.org

What Can GIMP Do?

GIMP is a raster graphics application that is useful for image editing and retouching.

You can also use it to create raster images from scratch, as well as simple animations.

Cage Transform in action

It supports layers and channels, has an advanced gradients function, includes paths and quick masks. There are rotation and transformation tools, as well as tools for scaling, cropping, resizing, file format conversion, and more.

GIMP can also be used for both Web and print design.

It even has a few tools that don’t have direct analogs in Photoshop — for instance, the Cage Transform tool that allows to warp just parts of objects.

Where Does GIMP Fall Short?

The main areas where GIMP falls behind are interface and feature list.

Any designer raised on the Photoshop interface, might not always find menus options where they predict them to be.

It’s true, the GIMP interface is different from Photoshop, and there will be an inevitable learning curve.

However, if the UI differences are a show-stopper for you, there’s always Gimpshop. Gimpshop is GIMP retro-fitted a very Photoshop-like interface.

Some may argue that reproducing Photoshop is not something to aspire to. You be the judge.

In terms of features, it’s hard to pinpoint exactly which Photoshop features are missing, as most missing functionality can be added via GIMP’s rich plugins ecosystem.

In theory, this is a better model, as you won’t have lots of unused functionality obscuring the features you need.

As an example, GIMP doesn’t ship with RAW image processing abilities, but this can be added via the UFRaw plugin.

GIMP does lack the granular text options of Photoshop, along with its adjustment layers. CMYK support is also somewhat limited by default, though additional plugins can plug this gap if required.

While the lack of these features may well be a show-stopper for some, I suspect many designers would not even notice their absence.

Interoperability is often cited as the biggest problem for dedicated GIMP users. Clients frequently want to provide you with PSD files, and while GIMP supports PSD in theory, the practical results aren’t always ideal.

This file format issue is often cited as a key hurdle for new adopters, and is likely the major reason GIMP is not as widely-adopted as it might be.

Price Comparison Between GIMP and Photoshop

While there are some obvious caveats to adopting GIMP, these hurdles often become less important when you compare costs. As I mentioned, GIMP is free – it’s hard to get cheaper than that.

On the other hand, Photoshop is no small investment. Currently, you can get Photoshop CS6 as a standalone application for $699-999 or for $1,299-2,559, bundled with other Creative Suite 6 products.

With Adobe’s new rent-only policy – i.e. their Creative Cloud the situation is similar.

If you are lucky to catch a promotion, you can get Photoshop for under $10 a month – otherwise the regular price is $19.99-29.99 a month.

If you decide to go for the complete Creative Cloud, the price goes up to $49.99 a month (on a yearly contract), which is $600 a year.

That is a lot money for most of us — especially if you are not using the software every day!

2. Could you use Inkscape to replace Illustrator?

Adobe Illustrator is another leading commercial vector graphic application that has a viable free open source competitor in the form of Inkscape.

SCREENSHOT, Image Credit: inkscape.org

What Does Inkscape Bring to the Table?

Inkscape uses the W3C standard Scalable Vector Graphics (SVG) file format as it’s default. As you might know, SVG is a format that is becoming more relevant to web developers with every passing day.

It can also work with other popular vector formats, such as .ai, .eps, or .pdf, while most other vector graphics programs can handle its SVG files.

Inkscape ships with markers, clones, alpha blending, path operations, bitmap tracing, and other standard SVG features.

For a full list of features, check this.

Perhaps the most interesting section here is the list of features Inkscape has that are missing in Illustrator. According to inkscape.org, the following Inkscape abilities are lacking in Illustrator:

  • Edit SVG source directly

  • Clones, tiled clones, edit clones on canvas

  • Keys to move/rotate/scale by screen pixels

  • Shapes as objects

  • Edit gradients with handles on-canvas

  • Edit nodes with keyboard

  • One-click paint bucket fill

While this list may need to be updated, I think it’s useful enough to include regardless.

What Illustrator Functionality Is Missing in Inkscape?

If you decided to switch to Inkscape, you should also be aware of its limitations.

Firstly, file interoperability can be an issue, especially with older .ai files.

Inkscape.org also publishes a list of Illustrator features that are currently missing in Inkscape:

These include:

  • Gradient meshes

  • Multiple strokes and fills for one object

  • Color management for print (ICCProfiles, etc.)

  • PMS color management

  • Natively work with graphs based ondata

  • Free transform and perspective transform (available via extension)

  • Blends (available via extension)

Again, this list may be slightly outdated, but gives you a sense of what you might be losing if you decide to throw your lot in with Inkscape.

Now, I wouldn’t class myself as a ‘power-user’ of either Illustrator or Inkscape. But as an occasional user I can attest that my skills (or the lack of them) are certainly a much more serious barrier, than any software limitations.

From my point of view, there is no critical feature or tool that Inkscape lacks. For the majority of projects — even demanding professional use — I believe Inkscape is a very feasible alternative.

Price Comparison Between Inkscape and Adobe Illustrator

The price comparison between Inkscape and Adobe Illustrator is very similar to the earlier Photoshop comparision – free vs $599 for Illustrator CS6, or $19.99 a month for the standalone Creative Cloud version, or $49.99 as part of CC bundle.

Switching to Inkscape could save you $240-600 a year.

3. Could You Use Scribus Instead of InDesign?

If you are into desktop publishing, then you might be interested in Scribus as an alternative to Quark Xpress, Adobe InDesign, or Microsoft Publisher.

Scribus is not an exact match of either program, so you shouldn’t expect it to have all the features you know from these programs.

Scribus: SCREENSHOT, Image Credit:
http://www.tomsguide.com/us/download/Scribus,0302-6428-150189.html

What can Scribus Do?

In simple terms, Scribus offers solid “CMYK color, separations, Spot Colors, ICC color management and versatile PDF creation.” It also can work with most common raster and vector image formats, as well as many text formats.

Features that Scribus Lacks

Similarly to GIMP and Inkscape, the Scribus interface is very different to that of InDesign. Until you become accustomed to it, it’s likely to take you some time to perform even the simplest tasks.

Now, I am no Scribus expert, and to be frank, my encounters with InDesign are pretty sketchy, but experienced desktop publishers tell me they couldn’t use Scribus for critical publishing tasks.

Aside from this, many common functions you will find in InDesign, are currently absent from Scribus. For instance, in Scribus you can’t even dock, move or hide individual palettes.

But what’s the main buzz-killer?

Currently Scribus can’t open InDesign’s default format. While Scribus’s PDF export facility covers most print situations, the lack of ‘INDD’ support will be a roadblock for some.

Again the savings are significant – free versus $19.99/49.99 a month for InDesign.

However, since Scribus isn’t anywhere near as competent a replacement to InDesign, as GIMP and Inkscape are to Photoshop and Illustrator respectively, I think the price comparison is far less relevant.

This comparison is truly an ‘apples to oranges’ situation.

4. Other High Quality Linux Graphics Tools

The list of open source useful applications that are compete competently with commercial equivalents is too long to cover comprehensively here.

However special mention has to go to the amazingly powerful Blender 3D, used for 3D design, video editing and special effects.

SCREENSHOT, Image Credit: blender.org

While arguably not be a complete substitute for Premiere, 3DS Max or Maya, Blender has become a rich and powerful platform — evidenced by Blender-powered, short films and games such as Big Buck Bunny, Sintel and Tears of Steel.

Big Buck Bunny: Created entirely in Blender.

Krita and MyPaint are two other graphic programs in addition to GIMP you can use. Paint.net for Windows is also a very viable Photoshop alternative.

Xara for vector graphics and Pencil for cartoons are also good. When you add FontForge (for fonts creation), Dia (for diagrams), or Draw from the LibreOffice package, you’ll see that you can do pretty well without a spending metaphorical dime.

These applications are just a sample of what’s available in the Linux world. Some are included in Linux distributions, while others need to be downloaded and installed separately.

If you don’t have the time to do it, you can get a graphics-focused Linux distribution, such as DreamStudio.

Dreamstudio includes all the applications listed above, plus some other graphics, sound, and video applications, like Darktable. Similar in function to Adobe Lightroom, Darktable helps you manage your digital negatives, view them through a zoomable light-table, as well as develop and enhance raw images .

Ready for Primetime?

Whether these applications can become your default editors is a question only you can answer. However, even if you decide they aren’t quite ready to completely replace your commercial suite yet, they may still may have a useful role in your toolkit.

Frequently I find it more efficient to use an open source application for many of the simple graphics tasks you might perform in a typical day — cropping, scaling and simple color tweaks.

Faster start-up times mean I’m often exporting from my open source app before it’s heavier commercial kin has had time to load.

And that can make a big difference to your productivity in a busy day.

As with many other decision in life, the choice of open source versus proprietary software isn’t only about the money.

Ada is a fulltime freelancer. She enjoys design and writing and tries to keep pace with the all the latest and greatest new developments in technology

Original post on Hacker News

页面 3 的 3 -