Need a Job? Build Something Cool. - <AUTHOR> i.e.
Feross (http://news.ycombinator.com/item?id=1678111) gets an offer:
From Chad Hurley's Twitter: "Hey @FreeTheFeross! Loving YouTube Instant... http://feross.net/instant/ Want a job? ;)" <comment><USER2> I think this can be true, to a point. The danger is in getting lazy.

Time for my story:

Last October, I released a concept video of a next-generation desktop UI that garnered a surprising amount of blog coverage. Within a week, I had received emails from people at Google, Apple, and Microsoft, as well as a few startups.

As you might imagine, I was rather excited. This was exactly what I'd hoped might be a result of the video: I'd get noticed, talked about, and picked up by an industry leader.

Yet here I am, nearly a year later, still at my old job. What happened? I'd figured I had it in the bag, that all I had to do was put my best foot forward and I'd be well on my way to my dream interaction design career. In truth: I got lazy.

The interview at Google the next month went well, but a month after that, I got the bad-news call. Apple took me through a series of wide-spaced phone screens that never went anywhere, only to restart the recruitment process for a different division several months later, finally getting bumped by an internal candidate. Microsoft got lost in the shuffle, I went through some disjointed recruitment processes at a few startups with a bit of contract work, but finally, even that went quiet.

Where did I go wrong? I think I assumed I'd gone far enough for the time being, that this one video marked my arrival and that was it. But I lost my momentum. Lengthy recruiting processes can make it seem like you have time to kill, but you don't! I shouldn't have missed a beat; I should have doubled down on my concept and explored it even further instead of pinning my hopes on getting hired somewhere cool.

My advice to Feross or anyone else who finds themselves in a similar situation: Don't stop now!

<comment><USER3> I wouldn't classify holding down a fulltime job while doing a side project AND going through fairly rigorous recruiting processes as anywhere near lazy.

<comment><USER4> _"... holding down a fulltime job while doing a side project AND going through fairly rigorous recruiting processes as anywhere near lazy ..."_

I'd agree but @mortenjorck probably means _"focused"_. One of the things I noticed reading the description was it sounded similar to how Linux started - Linus stayed on task with the OS but released early and often (with the help of GNU). I bet the _"hiring plebs"_ at SoftCo. would have been going overtime if the idea was distributed and used by increasing numbers of users.

</comment></comment></comment><comment><USER5> I've seen this sentiment expressed here, as well as a few other places.

[1] _Nothing_ matters more to employers than seeing that you actually have a passion for building things. There are a lot of people who have got certifications up to their eyes, but don't really care too much about tech.

There is a huge difference between the person that goes home and spends their nights working on a building cookie-baking-robot, or the next big social- networking website, and somebody that goes home and watches the TV.

I'm not saying that there is anything wrong with watching TV, just that having somebody who likes doing the type of work you're hiring them to do so much that they actually do it _even when they don't have to_ is going to go a long way towards motivating them. It also means that they, typically, are good independent learners. I imagine that this is a hugely important trait in an industry where doing things that might seem kindof insane (like running a data-store that hasn't even reached a 1.0 release yet) is considered normal.

[1]Obviously, within reason. If you've got a passion for building things, but you think that a server is somebody that brings you food at a restaurant, you might not be well suited to a system administrator position.

(Or maybe this is all just wishful thinking. I love building things, but haven't yet gotten my dream job.)

<comment><USER6> _Nothing matters more to employers than seeing that you actually have a passion for building things_

This is as true outside of technical fields. I've been giving talks at Career Centers about communicating passion to find a job after college, and the thing that is most attractive to employers is creating something or communicating passion.

And Feross? Outstanding. In the next talk I give, you're in the spotlight. Congratulations!

<comment><USER5> If you don't mind my asking, how do you get this type of thing across on a resume?

Some people have told me to wrap my personal projects up as a "company" and say that I am employed by myself, basically list it as a job.

<comment><USER7> The fact that you have to even ask this question (I've been in same boat) is evidence that traditional resumes and hiring mindsets are broken and archaic. The "X years of experience in Y" concept being probably the poster boy. Because what does X mean? Is X years by Bob equivalent to X years by Steve? What if X years in Y yields greater mastery than A years in B, because the former occurred later in their career, or because B was more difficult?

For example, I wrote a lot of C code in the 90's, but never "professionally" and so I periodically encounter recruiters whose brain just implodes at that concept. How could I possibly know C if I never did it for a paycheck? Is he lying? Talk about an insane world view.

</comment></comment></comment></comment><comment><USER8> I can't agree with this enough. I'm kind of an old-timer web developer and have built about one new web concept every 3 or 4 years. While none of these ventures have made me a millionaire, each one did teach me new skills and lead directly to my next job.

Most recently it was a very fluffy "video sharing" rails app, built in 2007. It helped me get a good gig that buffered me through the first half of the great recession.

Now I'm back to doing what I like doing best... investing time in learning and build-cool-thinging. I really can't lose.

And, as a last note, building something is a very good cover for being, er, "in between jobs"... and a lot cheaper than grad school :)

</comment><comment><USER9> The question is, if you can build something cool (and importantly get press), why just settle for just a job?

<comment><USER10> Because 99% of people make more money collecting a salary than they do being bought by Google.

<comment><USER11> Really? Where's that number coming from?

Seems to me that if you build a startup that's acquired by Google (say for the relatively small sum of $5m after a couple of years) that's still a whole lot more than you would have earned as a salary - even if you're a cofounder with just 50%. And on top of that you end up getting another good salary from Google as well once they acquire you.

<comment><USER12> $2.5m for one successful 3 year startup is 833,000 per year. So let's say every year you spend working on a successful startup, you earn $900,000, adding in a salary during those 3 years and rounding up for fun.

But every year you spend working on a _failed_ startup, you might only earn $50,000 (let's assume you can draw a small salary off of investors or revenue). And let's also say there's a 10% chance of success. The EV for spending a year on startup(s) wound be $95,000, which is probably within wiggle room of what you could earn with a salary.

However, that's average. If you're clever and determined, your chance won't be 10%. At 25%, the EV goes up to $262,500 per year. That's a hard salary to get. But few people are sufficiently awesome to have a 25% shot, I suspect. (It's hard to say because there aren't many truly large sample sizes out there yet.)

<comment><USER13> If one in ten Internet startups were acquired by Google, I'd short Google's stock. The likelihood of being acquired is closer to one in one thousand.

<comment><USER12> I've been thinking about this, but really I'm not so sure we're talking about the same number. It's close to one in one thousand to have your first or second startup acquired, maybe, but at a certain level of competence it's not unreasonable to expect a $5m exit somewhere within your first ten startups.

<comment><USER13> It's very unlikely you'll get through 10 startups without having to spend your own money since a three time loser is not going to get investment very easily.

Your average net income over the period of time it takes you to get a $5M exit will probably exceed your earnings from that exit, which will likely be less than $1M.

The point is that startups are not an easy or guaranteed way to make killer money. That's gold rush thinking. Think about how many startups (thousands) are in Silicon Valley right now and how many have exited in the last 5 years (dozens).

Don't get me wrong. Live the dream. I'm working at my 6th startup, and I just started my first one. But don't do it for the money. Do it because you're creating something you believe should exist in the world.

</comment></comment></comment></comment></comment></comment></comment><comment><USER14> This? Works so well, though not necessarily as written.

I built and launched Bill On Site about a year ago (<http://www.billonsite.com/>), and it's leading the top of my resume. I've gotten every job I've applied for largely based on the strength of having done that.

The fact that you can start AND finish a large project on your own speaks volumes over other guys who are basically unproven quantities without similar references.

<comment><USER15> "The fact that you can start AND finish a large project on your own speaks volumes."

It totally does. Passion counts for much, and it's just so hard to find.

</comment></comment><comment><USER16> For other people who don't know who Chad Hurley is, he is the CEO of YouTube.

<comment><USER17> And Mark Zuckerberg is the CEO of Facebook.

</comment></comment><comment><USER18> Clickable:

<http://news.ycombinator.com/item?id=1678111>

<http://feross.net/instant/>

</comment><comment><USER19> Need to Build Something Cool? Quit your Job.

</comment><comment><USER20> Hi everyone, I'm the author of YouTube Instant. Thanks for all the nice comments. This discussion has been quite interesting to read.

</comment><comment><USER21> Very nice. Congrats Feross on your success and serious offer?

</comment><comment><USER22> The other side of this is having the company duplicate what you did and you are still out of a job.

</comment><comment><USER23> I'd say kudos to the lad for his work. It's a fairly decent idea but I personally wouldn't use it. Never really like any of those "play something random" stuff. Someone out there might love this idea though. With Google Instant, I felt that the speed of change was quite drastic. Every single letter I typed caused the UI to change. Don't really fancy it now but we'll see!

</comment><comment><USER24> I did go down this path with <http://www.errorlevelanalysis.com/>, hoping that the development time would pay off and bring in future work. So far it's just been a tool that reddit and 4chan use to spur on comment wars.

Building something cool that has actual utility to someone, may be a better strategy.

</comment><comment><USER25> <http://twitter.com/Chad_Hurley/status/24129459657>

</comment><comment><USER26> Screw degrees, screw fancy pants resumes.

BUILD and build it now.

Ever heard the phrase MAKE WHAT PEOPLE WANTS?

And....... go!

</comment><comment><USER27> Such a sentiment presumes programmers have all the cool ideas.

<comment><USER28> How's that, exactly?

</comment></comment><comment><USER29> Can Feross get a job in YouTube had he gone through the usual recruitment process? I'd say a big no.

</comment><comment><USER30> do we know if @FreeTheFeross is on HN?

<comment><USER20> I am. :)

</comment></comment><comment><USER31> _Was_ this a serious offer?

<comment><USER32> <http://twitter.com/Chad_Hurley/status/24134092111></comment></comment>


Ask HN: Hours Spent Reading Online? - <AUTHOR> Hi guys,
Wanted to ask what's your profession and how many hours you spend reading online per week? On what sites usually?
Prototyping a product and wanted to get your insights.
Cheers <comment><USER2> I'm also an engineer and I spent more time than I would like it :), At least 2 hours a day. I try to disconnect during the weekend...

</comment><comment><AUTHOR> I'll start. I am an engineer and every day I spend at least one hour online reading tech news. Use twitter, techcrunch, hacker news etc.</comment>


Ask HN: Review my Startup - <AUTHOR> http://www.syncfu.com#dosyncfu

<comment><USER2> Okay, so from my vantage as an electrical manufacturer the point of syncfu is to help me achieve economies of scale. The more people that purchase, the more I can lower my price.

You don't currently obligate buyers to make an actual purchase, so the price that the other buyers pay might be too heavily discounted. For example, 100 people reserve, but only 20 actually buy - in this case I might not make a profit since the per unit costs for 20 are much higher than for 100.

I'd rather see a similar grouping mechanism that requires full commitment from both buyers and sellers, like ebay does. You'd probably have to do this with accounts, points and validation.

As for the actual purchase you could do this:

The seller creates a graph of price vs size of the production run, as now. They specify how often they would like to do production runs (sales).

Each buyer specifies the maximum amount they would be willing to pay, by clicking on the purchase graph. They specify how long they are willing to wait until it reaches that price. They enter all their credit card and billing details into the system, and have made a promise to purchase at that price or below.

When the sale ends, the system attempts to solve the graph for price. Everyone who "bid" above this price pays the solved price, everyone below is moved to the next run, unless their stated "latest date" would be passed by waiting that long.

You then bill everyone who said that they would pay. You make the lump sum available to the retailer who then satisfies the orders. This way there is no risk to a buyer that they will pay more than they want, and no risk to a seller that you will set the wrong price.

When I say solve for price, what I mean is that

\- 1 person chooses the 1 user price (A)

\- 2 people chose the 5 user price (B)

you solve, 1 user (A) gets the 1 user price, they get billed, B moves into next round (unless their time limit has expired)

now more people come along

\- 5 users choose the 10 user price (C)

\- 6 users chose the 12 user price (D)

\+ 2 people chose the 5 user price (B)

So now you can manufacture at the 13 user price because that will satisfy everyone.

<comment><AUTHOR> I gave it a bit of a thought. Maybe this can be done post-reservations. The solver would consider how popular the item was, the prices at which people accepted to participate and the lowest achieved price. According to all of this, the solver would calculate the suggested item price.

That's cool, I might do that, just for fun.

I wouldn't limit the usage to only manufacturing and operations management. I am trying to keep it as a universal tool.

Thanks again for valuable thoughts.

<comment><USER2> What I want is for buyers to make a real committment. The major difference between my system and yours is that buyers can say "I don't want to buy it for $1000, but if it reaches $600, I am in. Here are my credit card details if it does"

[Edit] Is this what all your competitors do too? I didn't mean to remove your point of difference, but perhaps this way works better.

<comment><AUTHOR> All competitors do as you say - take the credit card info and store it. Only if price reaches the threshold, then they are charged. I believe a different approach should be tested against, as the resistance to making a commitment is lower.

The assumption is that if the price gets discounted at all, that becomes the best offer online.

</comment></comment></comment></comment><comment><USER3> This is very cool idea, but the whole thing gives me the impression that it was developed without customer feedback.

Is anyone using it? Group buying is something that can be done without any special tools. If people are already doing it, then there are probably group buying forums out there that could use your support in making them more efficient.

If people aren't already doing group buying, then the real work is in convincing people to do it! If you don't already have connections to merchants who are doing this, then you need to find them, or start doing it yourself.

I hope this works out for you, because it seems like an awesome idea. The app looks good, but comes across as being a technical tool, rather than something that generates sales.

<comment><AUTHOR> If people are already doing it, that is no reason not to try something different =) Currently, major group buying happens on GroupOn and Buywithme, as well on their European copycats. However, they are pretty much limited to services, as the prices are easiest to rip-off a percentage cut. BuyWithMe e.g. takes 20-50% of the price for them. That doesn't seem right to me?

Sure, the biggest challenge is in convincing merchants to actually use it. However, I think I will start with own goods first (3 retailing companies here).

I will see to change that to be a more sales feature instead of technical.

Thanks for the great advices!

<comment><USER3> Sounds fantastic, it's great that you have some early customers. I'm sure they'll give you some good feedback.

I hope you post again in a year or two to report where you business is at!

</comment></comment></comment><comment><USER4> I tried to do the demo, but was asked for an email address. While I trust that you won't spam me, I don't understand why I have to provide an email address for demo purposes. If you are going to provide a demo, I would recommend either doing a video, some screenshots, or have a demo that doesn't require any interaction from the end user.

I think the problem with your homepage text that others have noted is not so much in stating the concept of the problem the app solves, but really in stating what the benefits are to both the buyer and seller. Most suppliers are going to understand economies of scale, but many buyers are concerned more with end price. You have to convey to the buyer WHY economies of scale is better for them. With that done, you also need to convince suppliers that your app will increase sales for them.

<comment><AUTHOR> The email is absolutely needed as this is the contact point between the seller and the buyer. I didn't go into modifying the demo component but used actual. As I see, most people use random mail addresses to test it out, so can you. It is just an address to which confirmation is delivered with the discount codes.

That is good, I think you're right and will consider doing that. Thanks for the comment!

<comment><USER4> Got ya. You may try to come up with a way to do the demo without the email address for users. If I had just stumbled upon the site, and thought it may be something I would use but was not quite sure, the first thing I would do is try the demo. If I immediately saw it ask for my email address I would feel like you are scavenging addresses and move on to another site. If you absolutely require an email consider clearly stating that up front and the reason why an email address is needed for the demo to function.

<comment><AUTHOR> Good advice, will change that. Thanks again for the advice!

</comment></comment></comment></comment><comment><USER5> Anyone else notice how the Hacker News domain extractor messed up on this post? It shows up as _(syncfu.com#dosyncfu)_ on the front page and direct on the item.

<comment><AUTHOR> #dosyncfu is the autotrigger hash, when added it will start the group buying box immediately upon DOM load.

<comment><USER2> It should have been stripped from the title, which usually shows (google.com) say

</comment></comment></comment><comment><USER6> I don't know if its just because its late here and I am bit tired but I didn't get the concept yet.

I understand what group buy is but not sure what problem your website solves?

<comment><AUTHOR> it's late here too :) well, the webApp solves a problem of aggregating price- aware customers that would accept buying the item later but at a lower price.

It isn't for everything, but selected products/services. It is similar in concept as GroupOn & BuyWithMe, except it is more a bare-bone feature that is easy to setup and customize.

It may also be used for promotions, let's say in digital goods, since the target price can be set down to zero.

<comment><USER2> It is a system that groups buyers together so that the seller can use economies of scale.

The more buyers, the lower the price.

</comment></comment></comment><comment><USER7> To be frank, I can't imagine signing up to use this service. It is too easy to build into almost any shopping cart system.

Why go through the process of integrating with a 3rd party and all the logistical and viability nightmares that come with such a decision when it's a trivial problem to solve in the real world?

<comment><AUTHOR> Good point, but why isn't it already if so? E.g, Shopify? Shopify actually lacks even per-item discount codes.

Group buying isn't a proven feature for websites, nor is it cross-site interaction universal. Visitors have to know what it is and trust it in a form of knowing what to expect and what not. That is the space SyncFu should occupy.

Basically, SyncFu is just a free* version of Groupon, Buywithme etc. The main reason for developing it is bringing this feature to any website without the 20-50% fees that these sites snatch. The only cost is the reservation fee, and it is charged to the customer, which is a dissolving cost.

You are certainly right about big vendors, if you throw a bunch of resources, it is too easy - but most little/medium web-shops deploy custom, features-less shopping carts - e.g. all the customers of Groupon and BuyWithMe.

Plus, I have no clue how would any company justify any costs of developing such a concept / experimental "feature". Well, for sure it isn't happening since there is very little innovation in online payments. Therefore this simple thing is isolated for any company to deploy on chosen products/services in a very simple manner.

Besides, this little component offers more than just group purchasing. Promotions are easily made, e.g:

\- free signup for the first 100 reservations (price goes down to 0)

\- pre-orderings of future books, directly by the author

This is of course my personal opinion, but SyncFu was built to verify the hypothesis :)

Thanks for the comment, and regarding the too easy, well, it took a long time to ditch features and shape minimal single feature product - praising Unix philosophy. The js code is of course publicly available:

[http://github.com/dejanstrbac/SyncFu- Widget/blob/master/widg...](http://github.com/dejanstrbac/SyncFu- Widget/blob/master/widget.js)

<comment><USER7> I see the case where someone using shopify could want to do something like this. If enough shopify users ask for it, they could add it, but it's a pretty esoteric feature needed by relatively few shops, because traditionally, individuals shop individually, rather than with a group.

Group buying isn't an unheard of concept. Many buying groups pool their resources to receive discounts on large orders from manufacturers. This could be a feature for such manufacturers to add to their ordering systems.

Still, the hurdle if integration is going to be a big one for you. For example, how do you let syncfu know how many products you still have to sell? How does the store owner coordinate sales such that they don't sell more than have been requested to buy from syncfu? Why would a seller want to sell their goods at a reduced price to the same individuals who are likely to buy it individually anyway? Also, you still have the logistics problem of shipping all those orders from the "group" to the individuals who grouped to get the discount so as a store, your margins decline due to increased overhead for lower sales. Discounts for large orders are usually only possible because there is reduced overhead in shipping and account management.

I think you may have a hard time selling this feature to stores. However, if you create a competitor to shopify that has this as a feature, then all the shopify customers who want to sell this way could be potential customers for you.

<comment><AUTHOR> Great comment, highly appreciated!

"because traditionally, individuals shop individually, rather than with a group"

Exactly, but if there was a possibility in general to buy in bulk with random people at the same moment, it wouldn't be traditional? I agree with your view, but one just has to disagree with the traditional in order to see what is possible today with all this social bits flying around.

As I've mentioned group buying exists in GroupOn for example, but it is insanely how much the sellers lose. With such a component they could provide the same services. Yet, there is no "target" quantity where the discount becomes available, as it happens immediately with each reservation. The quantities are set by the seller, and for sure are not infinite. The seller really has all the power over the group purchasing.

Once the item is closed with either its deadline or maximum quantity, the seller can provide with payments instructions and a deadline for actual payment. I doubt all will complete the payment, but most of them will. The seller of course counts on this when setting the price, so the risk is the least.

I've been digging a long time, but I haven't seen the concept with "reservations" as SyncFu. Do you know any? All of them I know would take your CC info first, and charge once target is met. (That is one way how SyncFu reduces friction in comparison)

The whole point with SyncFu is about laying down some grease in online payments. There is a lot of space for innovation in online payments as well usage of micropayments as sales catalysts, not actual charges.

</comment></comment></comment></comment><comment><USER8> It looks interesting, but I'm REALLY confused as to what I'm looking at with the graph, countdown timer, lowest price, etc.

What is all that junk? Why does the graph show a price in $000 but the price per unit is $2.00

<comment><AUTHOR> In the demo given, price per unit is $2000. The $2 are reservation fee paid through a cell phone / cc as a micropayment.

'Buying' doesn't actually happen, only reservations are made to 'participate' in the group purchase. After the deadline expires (the countdown timer), the item closes and all that reserved get a notification that it closed. Now the seller contacts all those (the admin side supports it), and tells them that they have 72h to purchase the item in the existing shopping cart with the discount code provided. That is of course if there is a shopping cart, otherwise an invoice or payment request can be sent, but that is however completely a matter of the seller.

There is no mediation, only a reservation making tool that is easy to setup, use and configure. Thanks for the comment, I see how that can be a bit confusing.

</comment></comment><comment><USER9> you have way too much text on your site and not nearly enough pictures

<comment><AUTHOR> lol. Thanks, it's nice to have a laugh this late :) (Sorry, I'm not being sarcastic, just it's a common misunderstanding)

Well, it says it's a webapp, not a rock band's fan page. People are actually ment to login, do their stuff and leave. I wish I could dump that login too, but it is the collateral damage of shifting apps to the web.

All the text is there to help the technical people searching for answers, but the actions are clearly shown. I doubt one can't find her way around.

I wonder when will "webapps" truly be understood as different than websites. I am comparing webapps to desktop apps, not to brochures. Am I alone here?

<comment><USER10> I think you're missing the point of this feedback - the UI is confusing so it is making it hard to grasp the value of the service for a first time viewer. you might be suffering from being too familiar with your product, and only dogfooding from the "logged in an clued in" perspective

this isn't about webapps vs. websites vs. desktop apps, it's about the importance of communicating the problem you're solving clearly and having a big f*ing button that makes the call to action completely clear

<comment><AUTHOR> Thanks for the comment. I hear you, but what is confusing about this UI? If 4 sentences are "too much text", then hell, how people understand others in the same field that induce more complex processes: <http://www.groupon.com>

Big f*ing button is there, in size and color.

IMHO, this web app doesn't need to be explained a whole lot. Those that hear "Group Buying" and understand what it is from those two words, they'll know how & what & where. After all, this web address is meant for sellers, not buyers.

<comment><USER8> Its confusing for anyone, seller or buyer. And if it confuses buyers, sellers wont use it.

I still don't really get how to use it after reading the site and your explanations. Why is there a P vs Q graph? What does paying a fee upfront entitle me to? What is a reservation and what does it give me?

I'm a first time consumer, and you've just thrown a complicated buying method at me, with a graph, current price/lowest price, for which I have no clue how to follow. I think it needs to be bared down to the minimal information necessary.

<comment><AUTHOR> [updated]

Isn't it obvious that price drops with quantity?

A reservation is a pledge that the customer will purchase the item later. The reservation costs $1-3 depending on where the buyer is, and is paid through a cell phone. By having it be paid, it is simply more reliable. No one wastes money, and these are dissolving costs in the total discount.

I believe this is the minimal information. The unit price, the current and the maximum quantity price. What do you think is excess?

Thanks for the comment.

<comment><USER2> Both your website and your widget must be able to answer these questions within 30 seconds for the most ignorant, distracted user with 3 children trying to climb into their lap.

This user might have never bought online before, and if they have - they have no idea what the backend order process looks like.

Answering these questions here is only a beginning. If _anyone here_ cannot get your site before getting frustrated, you haven't explained your system well enough yet.

Remember, the majority of users (by a huge percentage) are going to see your widget first. Your widget is going to advertise your solution to potential sellers who see it on someone else's website.

If _any customer_ gets frustrated at your widget, it is going to get pulled from sites.

<comment><AUTHOR> good points; I am thinking on how to simplify and better present this concept. Thanks for the comment!</comment></comment></comment></comment></comment></comment></comment></comment>


Vivaldi – A new browser for our friends - <AUTHOR> https://vivaldi.com/ <comment><USER2> The UI is nice, but they keep referring to it as their "product" in the marketing material, so I'm not sure if it will become pay software at 1.0. Perhaps they'll sell the services around it, but they don't say anything, so it's hard to do anything but guess.

</comment><comment><USER3> I am wondering, how did these guys got that domain name. I think such domains should be used for what they are supposed to - Vivaldi, and not some random beta browser (although it might be pretty good!). Too much hype put in the wrong place these days :(

<comment><USER4> You can buy domain names for a hefty price tag, but it is still doable for someone with some money.

</comment></comment><comment><USER2> Uninstalled.

"Vivaldi End User License Agreement

7\. Without limiting the foregoing, you are neither allowed to (a) adapt, alter, translate, embed into any other product or otherwise create derivative works of, or otherwise modify the Software ; (b) separate the component programs of the Software for use on different computers; (c) reverse engineer, decompile, disassemble or otherwise attempt to derive the source code for the Software, except as permitted by applicable law;"</comment>


Google Chrome Incognito Mode Can Still Be Detected - <AUTHOR> https://www.bleepingcomputer.com/news/google/google-chrome-incognito-mode-can-still-be-detected-by-these-methods/ <comment><USER3> Can this fight ever be won?

If you've been browsing the internet for more than 5 minutes you already have cookies from some of the major ad networks. Therefore if you do not have cookies from the major ad networks, you're either a brand-new device or an incognito browser. All that is left to do is get in bed with the ad network to ask them if they have good cookies for this session. As it so happens most of the companies trying to bust the incognito mode are already in that crowded bed.

The next loops in this spiral are: 1) an incognito mode that seeds good- looking ad cookies 2) ML models trying to distinguish synthetic/cloned/5-seconds-old cookies from genuine ones 3) matching ML models trying to out-fox the models from step 2, and so on.

The last fit of madness will be a hidden session in Chrome browsing the web on your behalf, building up a bogus profile for the ad networks, and the ad networks trying to figure out if the clicks in your fake session are sufficiently human-like.

And whoever wins in this war, the ad networks will end up collecting even more data than they do now.

<comment><USER4> I remember around 10 years ago people were calling Stallman paranoid for this. Now he seems more like a prophet:

>I generally do not connect to web sites from my own machine, aside from a few sites I have some special relationship with. I usually fetch web pages from other sites by sending mail to a program (see [https://git.savannah.gnu.org/git/womb/hacks.git](https://git.savannah.gnu.org/git/womb/hacks.git)) that fetches them, much like wget, and then mails them back to me. Then I look at them using a web browser, unless it is easy to see the text in the HTML page directly. I usually try lynx first, then a graphical browser if the page needs it (using konqueror, which won't fetch from other sites in such a situation).

[https://stallman.org/stallman-computing.html](https://stallman.org/stallman- computing.html)

<comment><USER5> Well, that is a bit paranoid.

<comment><USER6> It's not though? If your goal is to avoid having your every move online tracked by companies hoping to earn money from spying on you, what Stallman does is one of the few strategies which work.

<comment><USER5> You can take various actions to improve your privacy. At some point it becomes a paranoia. If you are fetching web pages on a remote server and email stuff to yourself then I would say it is becoming paranoia.

And I would say what Stallman does probably gives him a very unique fingerprint (wget ting web pages from a unique server). I doubt he is doing that for privacy.

</comment></comment></comment></comment></comment><comment><USER7> This is annoying so I just use fresh browser profile every time I encounter such site, i.e. have a short-cut for:

      $ cat ~/bin/chrome-new
      #!/bin/sh
      TMPDIR=`mktemp -d /dev/shm/chrome-XXXXX`
      google-chrome --user-data-dir=$TMPDIR --no-first-run --no-make-default-browser "$@"
      rm -rf $TMPDIR

<comment><USER8> In FF, this seems to be solved with the mechanism of containers and extensions like 'Temporary Containers.'

<comment><USER9> Temporary Containers is a savior when it comes to paywalled articles.

</comment></comment></comment><comment><USER10> Workaround for now:

1\. Open the profile menu. (This is the icon in the top right, just to the left of the three vertical dots.)

2\. Click "Manage people", click "Add person" (lower right).

3\. Type "Darned Newspapers!" and click "Add".

4\. When you get blocked, copy URL, use the profile menu to navigate to open a new "Darned Newspapers!" window, paste URL.

It's a real profile, so it should behave quite closely and should be harder to detect. Of course, unlike incognito mode, it will save your history, so be aware of that.

<comment><USER11> Another workaround:

Disable javascript on the newspapers' sites. They load the full article and then use JS to hide it. (They also use JS to do the incognito detection in the first place.)

<comment><USER12> Often doesn't work, they now take a new approach by only loading in the extra content if you pass their checks (using JS). Not using JS will get you the first paragraph.

<comment><USER13> Downside of search engine indexers evolving over the years to execute JS on crawled pages.

</comment></comment></comment></comment><comment><USER14> Client tracking throw Browser Fingerprinting is a spooky tech. Check these two websites to see for yourself. Try using different browsers, even aVPN connection, and see how trackable you are:

1) [https://panopticlick.eff.org](https://panopticlick.eff.org) 2) [https://amiunique.org](https://amiunique.org)

<comment><USER15> These things state I'm unique every time I go to them. That's the problem with the tech, it can't _track_ very well.

<comment><USER16> It's stable but not over a long period because your browser will change. But it could be used to link two identifiers together, for example when your IP address changes, to create a chain that can track you over time.

</comment></comment></comment><comment><USER17> OK, this article was not what I expected. I use incognito mode whenever doing online banking, searching for medical information, etc. I don't care if a web site knows I am in incognito mode. Indeed, I think it is a web site's right to know because they may need to enforce free access quotas, etc.

<comment><USER18> I think they would have no right to USE YOUR COMPUTER to enforce such quotas, please.

</comment></comment><comment><USER19> I'm a bit surprised Chrome developers went the route of an in memory filesystem instead of trying to sandbox and clear real disk access. Silently using up to 120MB without realizing sounds pretty bad.

<comment><USER20> You can't allow for bytes to sit around on disk in case of crash.

Maybe they could encrypt with a key kept in memory? That'd still allow detection of use though.

<comment><USER21> > _" You can't allow for bytes to sit around on disk in case of crash."_

Just check periodically (at startup?) for orphaned temporary storage data. I'm sure there are other parts of the browser that need to do this sort of thing anyway - expired cache data, for example.

<comment><USER20> Sure, but those are a different use case.

</comment></comment></comment></comment><comment><USER22> The dutch cable company 'Ziggo' (owned by Liberty Global) also does Incognito mode detection in their web-based tv player and does not allow streaming.

[https://imgur.com/a/TacdDRm](https://imgur.com/a/TacdDRm)

You can check it yourself here: [https://www.ziggogo.tv/](https://www.ziggogo.tv/)

<comment><USER23> I don't believe that's actually their fault, HTML5 EME implementations don't work in incognito mode in Chrome.

But that is another way in which newspaper sites could do this detection is they wanted to, send an HTML5 EME clearkey to a one pixel video in the corner and get back the error response.

I think Google are on to a complete loser here tbh, and I'm not sure why they're wasting development resource. As much as using incognito mode to bypass soft paywalls might be fun for a user, there's no real moral justification. There's no privacy issue here in a newspaper giving a clear and unambiguous statement before you enter that you've got to disable incognito, and a user can either choose or refuse to do it. It's probably the clearest consent screen in the world.

<comment><USER24> The moral justification could just as easily be turned around: a website does not get to run arbitrary code on my computer, so I can (and do, by default) turn of javascript.

<comment><USER23> If you want to you're very welcome to.

That's really not the same thing as Google actively developing a tool to block soft paywalls, that will primarily be used by people to just not pay for things who really don't give a stuff about people running things on their computer or not.

</comment></comment></comment></comment><comment><USER25> Partly for this reason I use Firefox with its "delete cookies when quitting" mode instead.

<comment><USER26> Why not use Permanent browsing mode?

<comment><USER26> I meant Always use Private browsing checkbox.

<comment><USER25> I don't really care about tracking within a session and private browsing had other downsides (e.g. limited history support). It's the cross session stuff that tends to be creepier in my experience.

</comment></comment></comment></comment><comment> git-pull They can paywall / block incognito all they want.

Just delist the (paywall'd) articles. That's the annoying thing - <USER2> articles come up on Google and you can't read them. Please fix this.

If people want to pay, that's fine. Perhaps ISP's should pay for these websites via their plans so there's no more need to login.

I don't want to login to something just to browse a feed. I believe people would be happy to pay for these websites, but in a convenient way, ahead of time. Allow IP ranges, create a browser plugin that reauthorizes the site session even in incognito / w/o password saving. Innovate like Spotify did.

Annoying and badgering the user is 101 UX antipattern. One reason some don't buy is they don't want to encourage it.

It's fair to hold them to a high standard because many of these websites are articles and presentation is supposed to be a forte. You don't battle the adblockers and incognito modes - you fight to make it easier and more convenient for your readership.

</comment><comment><USER27> Yes. I just open an incognito window in Chrome and go to www.instagram.com and then it prompts me to log in via a list of Instagram accounts I've ever logged in in the non-incognito Window.

<comment> toper-centage If you use Chrome, did you really expect any kind of privacy to be respected?

<comment><USER27> Well, they should be sued for false advertising. I know Google slices and dices all my info, but I expect them to honor my privacy when in _incognito_ mode.

</comment></comment></comment><comment><USER28> Seems like the TWTF is that in normal browsing mode, sites are allowed to use considerably more than 120MB of "temporary" storage on the filesystem.

<comment><USER18> I agree; by default it shouldn't be so much. (Maybe the user could configure it (to any range between zero and 4 GB, perhaps), but even then, the limit should not differ for incognito mode unless the user configures it the same.)

</comment></comment><comment><USER29> Keeping local storage in memory might make sense if Incognito Mode had separate storage for every tab. However, it's just another browser session that gets wiped when the the last tab gets closed – you cannot have multiple parallel ephemeral sessions. I remember having to install Chrome Canary because I needed four separate Chrome sessions simultaneously.

<comment><USER30> Your workflow is your workflow, but as an FYI Chrome profiles _also_ get their own everything, plus each profile also gets its own incognito session

There is an added benefit to using profiles in that if any other window is open from a separate profile, then all profile context menus acquire an "Open link in ..." menu item which will then list all the other profile names. Unknown why it doesn't do that context menu modification all the time.

If your other profiles are only used for development-time scenarios, you can also choose to "Clear Browsing Data..." on them at will, since you won't be losing anything valuable

</comment></comment><comment><USER31> They can track Mirimir all they like. Not that it'll do them much good. Because Mirimir only does stuff that I'm OK with everyone knowing about Mirimir. And none of it is connected to my meatspace identity, or to other personas.

Unless you're really paranoid, all you need is a VM, which hits the Internet through a VPN service. You use the host machine for meatspace stuff, and the VM for private stuff.

</comment><comment> martin-adams If Google really wants to fix this, they could always have Incognito mode detection as a negative ranking factor.

<comment><USER32> I wonder if it's occured to these sites that essentially they're poking the bear. Sure, Chrome can slowly patch these issues, but there's always a possibility that Google just turns around and says "Hey guys! I search engine crawler looks like incognito chrome! Fuck you!"

</comment></comment><comment><USER21> Seems like it was a mistake to use a RAM disk to back the storage API in incognito mode?

Why not just create a new "real" storage db on disk, deleting it when the incognito window/tab is closed? It seems like this approach would defeat all of this class of attacks.

</comment><comment><USER33> Why not just forbid the storage of user data? It would solve most problems. Why needs a whole society to be taken hostage for the profit of some companies?

I seriously do not understand.

</comment><comment><USER34> Pretty embarrassing TBH. Both of those detection methods immediately come to mind when reading about their in-memory solution to the storage API problem. I can only imagine Google phoned it in on this one.

<comment><USER35> in a galaxy far far away Opera 12.x offered fully customization local storage, with per domain/subdomain enable/disable/quota/delete on exit options. Google owns our browsers and wont let us do anything crazy like configure away stuff useful for ad targeting.

</comment></comment><comment><USER36> Well duh, it is Google we are talking about!

</comment><comment><USER37> I believe google has cut a deal with advertisers to ensure they can always identify incognito.

</comment><comment><USER38> So do random cookies?

</comment><comment><USER39> Is this a cat-and-mouse game that's worth playing for Chrome?

Browsers are so complex that I imagine incognito mode is always going to leave _some_ kinds of statistical signatures that can be detected and exploited through merely moderate cleverness, but will be much harder to hide on Chrome's side.

Is it worth it for Chrome? Or would resources be better spent on other parts of the browser?

It's not really a privacy/security problem or anything as far as I can tell -- just a way to bypass paywalls, right? "Sites not detecting my incognito mode" never felt like part of the web's "contract" to me.

<comment><USER40> One part of the "web's contract" is that googlebot and other scrapers should get what the users get. And vice versa - if you're telling googlebot that there's a particular text available to the public; I'd expect to get the same content that you just gave googlebot and not something else, thank you very much.

<comment><USER41> That used to be the case. But Google has long ago given certain sites a pass on that.

<comment><USER42> Did they? This fight against Incognito mode suggests otherwise

<comment><USER43> Ever try to click on a LinkedIn profile from a search result? Most of them just show a LinkedIn login screen, and none of the text from the search result's snippet.

</comment></comment></comment></comment></comment><comment><USER44> "Can this fight ever be won?"

No, the point is to make the people subverting this for their own nefarious gains (looking at you, NYT) put so much effort, money, and time into it, that eventually they die a slow horrible death and, maybe, just maybe, something better and more relevant and less evil comes along (or maybe NYT changes their ways - either works).

I mean, look at this thread, so may great undermining methods! Beautiful.

<comment><USER45> After all the newspapers die a slow horrible death, I think the world will figure something better out.

But it might take a few decades of uninformed confusion.</comment></comment>


Macdown: Open source Markdown editor for OS X - <AUTHOR> https://github.com/MacDownApp/macdown <comment><USER2> LOVE this markdown app.

I was a Mou user prior, until I upgraded to Sierra and Mou stopped working.

I'm very happy with this one. Feels very solid; Mou sometimes would take awhile to save a small file. Macdown doesn't do that.

</comment><comment><USER3> The best Mac Os X markdown editor even though it's not perfect... I miss Mou on which MacDown has been inspired.</comment>


Computers Have Had Emotions for Quite Some Time - <AUTHOR> https://svedic.org/philosophy/computers-have-had-emotions-for-quite-some-time <comment><USER2> I wish I could take this seriously.. but just the fact that it doesn't mention mirror neurons when defining emotions is concerning.. (which has the scientific backing).. The definition is completely ignoring the motor neurons that play a crucial part in our ability to have empathy or emotions...

<comment><AUTHOR> I think you are talking about empathy, not basic emotions. Mirror neurons are observed only in primates[1]. Birds may have some mirroring system, and lower- order animals do not. So, if you require mirror neurons for emotions, you are basically stating only primates can have emotions, maybe birds and other animals (like honeybees and crayfish) can not.

[1] [https://en.wikipedia.org/wiki/Mirror_neuron](https://en.wikipedia.org/wiki/Mirror_neuron)</comment></comment>


Why Kindle Is No iPod - <AUTHOR> http://www.roughtype.com/archives/2007/11/why_kindle_is_n.php

<comment><USER2> I can give 5 good reasons

1) Eee PC

2) PS3

3) Lots of books...

4) Anything else that costs $400

And finally

5) A library card.</comment>


MicroservicePremium - <AUTHOR> http://martinfowler.com/bliki/MicroservicePremium.html

<comment><USER2> I wrote this article some time ago and it has generated hundreds of inbound emails asking me about the risk points associated with Microservices:

[http://highscalability.com/blog/2014/4/8/microservices- not-a...](http://highscalability.com/blog/2014/4/8/microservices-not-a-free- lunch.html)

Building Microservices does have a real premium - you are building a complex platform which needs specialists skills and additional work to make happen.

The payback of that premium comes later, in the ability to then iterate and change the system easily and quickly.

The problem comes when people think they are building an application and not a platform which will support them for the next 5+ years. I try to hammer this point home to our clients who are looking at Microservice architectures.

<comment><USER3> I have been slowly (last 4 or so years) moving away from microservices towards the "cookie cutter" ([http://paulhammant.com/2011/11/29/cookie-cutter- scaling/](http://paulhammant.com/2011/11/29/cookie-cutter-scaling/)) model (we didn't use that term of art) and been very delighted with the change. I had completely drank the koolaid on microservices, but after having to maintain them in production for a few years, changed my tune.

In my experience that "iterate and change the system easily and quickly" simply doesn't end up being true. That is the bait, but then comes the switch. Once you have a real system, heavily interdependent, the cost of changing things starts to go up greatly, and your ability to cleanly describe a working system becomes challenging. Answering simple management questions like "OK, so if we change X, what could break?"... "We should send out an email to all the teams to ask!" (ugh)

The problem is that for most significant changes to a component -- there are changes to the interface to that component. So you have 'the choice' \-- (1) Maintain this interface forever or (2) Ensure all the teams transition off it by X date, via a deprecation system. Both work, and most companies seem to use a mix of both, they strive for (1) until it gets insane, then they do (2) and force everyone to upgrade to X version by Y date.. rinse and repeat.

We are currently doing the "fat binary" cookie cutter system. Our deploy is a single binary that does "all the things". There is a lot to like about this system. Easy to manage and role back. Compile time checking, including additional tools for static analysis, etc. No network overhead on making local calls. You know and can clearly describe 'the system', it isn't in some continuous flux state. Due to compiling time checking and static analysis you can maintain 'one truth' and when you upgrade a component, you can go into all the callers and update them, so you don't have to maintain that old interface. You can scale decently vertically not just horizontally, which at times is a far more efficient way to scale. Overall, it has made us able to move much faster because it gives us a lot of confidence in what we are shipping, and a sense of safety in that we can quickly go back to what we had.

</comment></comment><comment><USER4> Yao Yu made some observations in her (excellent) talk about caching at Twitter over the years ([https://youtu.be/rP9EKvWt0zo](https://youtu.be/rP9EKvWt0zo)) that stuck with me: having a bunch of services doesn't _itself_ isolate problems within one service. Twitter's cache service had to deal with clients rampaging to all load the same key zillions of times, for example.

The impression that gives me is that some of the gain from microservices might be from doing all of the things we're used to doing at service boundaries: documenting APIs, sanity-checking requests, logging, monitoring availability/resource usage/other metrics, etc.--the same sort of things any public Web service does knowing it's going to have to deal with funny clients, rising and falling load, and so on.

If all of the stuff it would take to properly maintain another usable customer-facing service sounds too expensive, that may be a sign that this isn't the place to split off a service. But if you find yourself _wishing_ for separate monitoring, a cleaner API, etc. around some part of your system, it becomes more interesting to separate.

(I can also buy that some folks can see organizational benefits, or benefits from isolating hardware or making operations async, but separate ideas.)

<comment><USER5> There's also load... If you have a specific service that needs more resources, you can allocate more instances of that service on more machines.

<comment><USER4> (Yep, totally agree--was trying to get at how there could be other benefits in the last parenthetical comment. The extra process we do at service boundaries just stood out at me from the caching talk.)

</comment></comment></comment><comment><USER6> What is a monolith? Intentionally tightly coupled code that you feel is going to be manageable in the future?

I think the biggest anti-pattern is "DRY". This turns a simple rails view into a monstrosity that is used to render every page of a site, or a class into a self-referencing recursing mind-puzzle.

When a codebase starts down the monolithic path, developers will often use the DRY anti-pattern to "shrink" what is actually complexity creep. They will also use another anti-pattern which is using the test coverage percentage as a key metric for deciding what to build/improve.

Both of these are attempts to fix something that is a far bigger problem: excessive, unnecessary coupling in the core design. This is often because (as others have pointed out) of blind adherence to frameworks and framework "best practices".

In my opinion, the most important metrics are coupling, lines of code (the fewer the better) and readability/understandability. Every line of code that you maintain ads a cost to changing/improving the codebase (because someone has to understand it in order to change it).

If you think of code in terms of its consumers, nearly every API is a micro- service. The less magic/faith required by the consumer to use the API, the more effectively it can be used and changed.

<comment><USER7> There are two ways to think about microservices. Development (which your comment focuses on) and deployment. The pure/idealized microservice is isolated from the rest of your environment/codebase on both of those axes. In practice, there will be some coupling on both, and perhaps one of those isn't isolated at all.

The monolith is simply the opposite of the microservice ideal, it is heavily coupled in both development and deployment.

And yes, DRY does often run counter to the development isolation, as you need to balance repeating yourself or sharing code (and reducing isolation).

As these things generally go, any system in contact with the real world will exist somewhere between the monolith and a federation of microservices. My current company, for example, employs 2 distinct codebases, Java and JavaScript, which have 3 and 2 deployments respectively, each in two similar- but-not-the-same environments (in-house and white-label). We could easily split those deployments into twice or 5x the number, we could also join them, this just happens to be where things naturally settled for the time being.

<comment><USER6> Makes sense. I typically try to design things so that they are initially joined (for convenience) but can easily be split off -- such as a simple router between micro-apps which can be replaced by haproxy (or similar) later.

<comment><USER8> I like this too and usually do the same in the application layer for new projects (though it takes more discipline).

Every module is built with the intent of breaking away later. Disallowing intra-module communication is essential to this. That means no global ORMs or global anything really.

</comment></comment></comment></comment><comment><USER9> Does this feel like backtracking to anyone else? Compare to Fowler's previous discussions [1].

Maybe it's just hard to write about a new, interesting thing without most people getting the impression you think it's _the_ way (especially developers, who seem eager to declare any new tool the One True Way® and everything else 'legacy').

[1] [http://martinfowler.com/articles/microservices.html#AreMicro...](http://martinfowler.com/articles/microservices.html#AreMicroservicesTheFuture)

<comment><USER10> No?

> So we write this with cautious optimism. So far, we've seen enough about the > microservice style to feel that it can be a worthwhile road to tread. We > can't say for sure where we'll end up, but one of the challenges of software > development is that you can only make decisions based on the imperfect > information that you currently have to hand

<comment><USER9> I think I linked to the most balanced bit of that article :)

"We've seen many projects use this style in the last few years, and results so far have been positive, so much so that for many of our colleagues this is becoming the default style for building enterprise applications"

"Monolithic applications can be successful, but increasingly people are feeling frustrations with them "

</comment></comment></comment><comment><USER8> I have some experience designing and working on this style of architecture in a non-enterprise non-bigco environment. Some things I learned over the years:

1) If the system is young and the team is small, consider imposing constraints onto the system that remove certain classes of problems entirely. You can later lift these constraints as the team grows. [1]

2) Your ops environment must be capable of multiplexing multiple services onto the same virtual machine. The way you provision and classify machines is affected by this. Services, by their nature, are small and are likely going to be I/O bound. Deploying multiple services onto a single machine is very cost effective.

3) If you're starting with a monolith, the best early candidates to break off are things like search, graph stuff (eg: Neo4j), recommendations, activity feeds, image processing, and other important but non-critical things. It's a great way to drum up support for this architectural style and/or test how useful it will really be.

4) Unless your engineering team has a polyglot culture (good for you!), be careful about introducing your favorite language when building a new service. Alienating services is a great way for them to rot.

5) I've been asked how to define a service. Should X be one service? Should X be split into two services? A good way to start is to think about data locality. When a "user" is fetched are "friends" almost always queried too? If so, keep them together. The next thing to look at are traffic patterns. Another thought exercise is to ask, "if our startup makes a hard pivot tomorrow, what are we likely going to keep? Users?".

6) Do what makes sense. A small startup with a 5 person team doesn't need 20 "microservices" to maintain. It's an operational burden. Break things away in stages on an as needed basis. I've actually found that keeping around the monolith is a great outlet for rapidly prototyping. Give the monolith a beefy database and an in-memory datastore. When you need to prototype a feature for a week, feed it to the monolith. When it's ready for production, break it off if it makes sense.

7) If your ops environment is underdeveloped, it'll hurt bad. The value of a good ops person cannot be overstated (esp. if you're dealing with rapid growth). They're wizards. Learn everything you can from them.

[1]: I like to impose a constraint that no service is allowed to talk to any other service unless it is: a) customer facing (eg: the website or the mobile api), or b) non-critical and low volume. At first, your services will act as self contained front ends to their databases. Your customer facing applications will stitch together responses from these services (hopefully in parallel). You'll have a clear understanding of how data flows in your system.

<comment><USER11> > _If your ops environment is underdeveloped, it 'll hurt bad._

This is what PaaSes are for.

</comment></comment><comment><USER12> my question is, what happen is eventually some tools can be useful for overcoming the complexity introduced by microservices (e.g. CoreOS, docker, kubernetes, Netflix OS technology, etc), what could be the argument for not using them instead big monoliths?

<comment><USER11> Those tools already exist -- platforms as a service. Heroku pioneered them and you can get on-premise installations of Cloud Foundry or OpenShift to play along at home.

I've worked on Cloud Foundry and basically it makes deployment a non-issue. Here's how you deploy the service:

        cf push the-microservice

And if you need 100 copies:

        cf scale the-microservice -i 100

Or maybe 2 copies with more RAM:

        cf scale the-microservice -m 4G -i 2

Need to update it?

        cf push the-microservice

You see where I'm going here.

I know it's fun to play Dr Frankenstein and hand-roll your own devops system. I've seen systems built out of 3 layers of Jenkins servers, two running Puppet, emitting timestamped RPMs played on fresh VM images. I've seen people use rsync, I've seen them use git, I've seen all manner of clever hacks and they all have the same problem.

You marry this system of deployment and upkeep and now you own it. Forever. By yourself. Then the genius who wrote it leaves, and you're stuck with a system _literally nobody else uses_.

There's _no_ advantage to writing your own PaaS. Just use one off the shelf.

<comment><USER12> yeah but I would prefer to work and learn that system rather than a giant monolith that nobody understand

</comment></comment></comment><comment><USER13> I preferred the 'Pattern' pattern, where each line of code is its own pattern. In fact, I think he writing a whole new book about it now.

</comment><comment><USER14> Most linux distros can be considered a collection of micro services. The stability vs innovation tradeoffs inherent to this type of systems is well understood, as is the complexity of updating and testing compatibility. I don't see why it should be so hard to draw a parallel to microservices.</comment>


Ask HN: Should an engineering manager convey pressure or absorb it? - <AUTHOR> Curious to hear opinions from people in different roles and circumstances. <comment><USER2> Absorb the little. Convey the great.</comment>


Ask HN: Does Depakote fuck you up? - <AUTHOR>

I have been taking Depakote and recently found out it caused brain damage.  Is this true?<p>I know it's not really HN, but this is the best forum I know...is mechanical_fish out there? <comment><USER2> i think that all 99% of the people here could tell you, you could find in a quick google search.

all drugs have side effects. if you're worried about it, talk to the person who prescribed it to you, imo.

<comment><AUTHOR> he's self-serving.</comment></comment>


Rise and fall of tech (viz) - <AUTHOR> http://www.washingtonpost.com/wp-srv/special/business/a-gadgets-life/

<comment><USER2> I think it's interesting that cordless phone and corded phone trend lines are very nearly converging. I wonder if some new method of communication (post- smartphone) will mean the same fate for today's hot communication technology?</comment>


A Meta-Analysis of Blood Glucose Effects on Human Decision Making (2015) [pdf] - <AUTHOR> http://www.gwern.net/docs/2016-orquin.pdf <comment><USER2> Fascinating. It shows the importance of having a consistent blood sugar level, especially when we are around expensive food choices. At the same time, it seems that we could use fasting (resulting in a low blood glucose level) as a motivation to work hard if we know that work will get us more food.

<comment><USER3> Except work doesn't get us more food. I have a dollar on me, I know I can get a lot of sugar right now with that.

<comment><USER4> I've always wondered how productive I could be if I handed my access to spending money, plus a list of food I like, over to a trustee, and then told them to buy me food but only give it to me right as I finish things I care about. It seems like it would create some pretty strong conditioning effects.

<comment><USER5> Until you slip up - because e.g. you gave yourself too big a quantum of work to do before your next reward, or something unexpected popped up that you need to deal with ASAP. Then you'll find yourself tired, hungry, frustrated and in a downward spiral - because you'll be quite likely making mistakes sabotaging your work instead of making progress, thus putting off your eating time further in the future.

And I'm not talking out of my ass; I screwed myself a few times like that with the whole "precommitment" idea, including losing quite a bit of money - instead of helping me focus, this only stressed me out further as I was desperately thin on funds.

Not saying precommitments are a bad idea, just make sure you can handle failures mentally before going full-Klingon on them.

<comment><USER4> Note the "food I _like_ " part. I imagine that I could have a pantry full of Mealsquares or something similar (a nutritionally-complete but not-"tasty"-as- such food), and pots of black coffee, to keep me going monotonously until I managed to finish my work. The reward is the rich, fatty, sugary, salty, umami-y food; not food at all.

</comment></comment></comment></comment></comment><comment><USER6> Haven't read the article yet, saved it. However, my experience is that I am usually agressive and stupid when hungry.

Looking forward to reading the whole paper.

</comment><comment><USER7> As a type 1 diabetic, I agree with these conclusions, and I'd sum it up this way: when I have a low blood sugar, I feel anxious and want nothing more than more sugar inside me. Bouts of hypoglycemia definitely make me more impulsive. With a low enough blood sugar, time feels as if it slows down: I imagine this is linked to adrenaline... I can tell I have a high blood sugar (over 150) before checking when I feel grumpy (and bossy), I'm thirsty, and tend to have 0 appetite whatsoever.

Interestingly -- things that require long periods of concentration tend to lower my blood glucose (according to my continual glucose monitor) and stress tends to raise it.

If anyone would like to ask me any questions, I'd be glad to answer. :)

</comment><comment><USER8> The paper makes no mention of subjects in ketosis. Would have been interesting.

<comment><USER9> Agreed. The brains of keto-adapted individuals can use ketones as a source of energy which are much more stable, although for a long time it was believed that brain relied on glucose.

<comment><USER10> My layman understanding is that glucose is the first choice. But stay off it for a day or two and the body starts turing fat into ketones as an alternative.

<comment><USER9> Yes that accords with my layman understanding as well. The body will go down the "path of least resistance" for energy and glucose is easier to metabolize than ketones. Deprived of glucones, the body will switch over and hum along once adapted.

</comment></comment></comment></comment><comment><USER11> If you're interested in the methods and related questions, check out this (4 part) youtube talk: [https://www.youtube.com/watch?v=xG79jpAYxmQ&index=7&list=PL5...](https://www.youtube.com/watch?v=xG79jpAYxmQ&index=7&list=PL53QUs1SimPO4ErDLB5Hd-s9XCPCkD1E9)

</comment><comment><USER12> So is this a contradiction of this? [https://news.ycombinator.com/item?id=8695417](https://news.ycombinator.com/item?id=8695417)

</comment><comment><USER13> Judging from the abstract the tl;dr version is: "If you're hungry, you think about food".

Certainly aligns with my experience.

<comment><USER14> That's not what the article is about. It's about several competing theories for how blood glucose affects decision making, their predictions, etc. It's not about hunger per se (blood glucose and satiety are biologically different enough you wouldn't want to confuse the two).</comment></comment>


Ask HN: 6 months runway, what to do? - <AUTHOR>

Should I look for contract work ASAP? There are so many projects that excite me at the moment, so many things to do. But I have no idea how to make money off them, certainly not within a short time frame of several months. Also, I tend to waste my time when trying to work from home alone. Wish I could find a way to stay focused.
I am not sure how difficult it is to find contract work where I live, as I have only moved here a year ago and haven't looked for work since. Guess I should try to find out. Problem is also that I used to be a Java contractor and I desperately want to do something else. I am not an expert in anything else yet. Guess I could live with developing Java for Android, though.
Oh yeah: at this point, I am not thinking about applying for YC. I would love to, but atm I am looking at simpler projects that don't seem YC worthy. Also, I have applied two or three times before, each time just with an idea. Next time I would like to at least have a demo and some proof of my capabilities. <comment><USER2> Hi tichy, let me play the devil's advocate and recommend that you get a job ASAP. I know its soul crushing(most jobs) but it will take your mind off of the money equation, and allow you to do good work on the side. If your cash- flow is tight it puts a lot of stress on your work be it contracting, building apps, starting a start-up. Since you are just starting out start doing these things on the side and get your feet wet. Once you have a steady stream of cash coming in and are sure that you can take a plunge you'll have the option of quitting your job. However take care while choosing a job, if you do decide to go that way. See that it leaves you with enough time to work on the side. All the best.

<comment><AUTHOR> Thanks! I wish I could do it that way, but I was never able to work on the side. I have lots of issues with sleep deprivation, to the point that I find it difficult to manage a normal 8 hour workday. So if I had a normal job, most likely I wouldn't get anything done on the side. I also have a girl-friend who works and wants to spend time on the weekend, so I can not just code all weekends.

Just now I was thinking maybe I should try a "normal" job, like working in a cafe or something, for two days a week. I was always a bit sorry that I never experienced a kind of more social work like that (though it pays a lot less than software development).</comment></comment>


Ask HN: Critique our Startup, Guchex.com - <AUTHOR>

Looking to get some critiques on our latest website we launched, Guchex.com we are a free platform intended for knowledge exchange among respected professionals. <comment><USER2> The interface, while not bad didn't really attract me, seems too flat... almost boring i'd say. Minimalism might be fine but there is something missing...

Registration went smooth. I don't particularly like being asked to frequently to invite my friends. Specially considering that if I am registering it means I have never tried your product so I do not have anything to suggest yet, so I will not do it. If you must ask me, ask me after I tried your product for some time. Make sure I like it, other way it's just annoying.

The style of the activity feed on the profiles page seems to be broken, it goes to half of the container and it breaks <http://i.imgur.com/MQblf.jpg>

The front page after the first login is 90% blank, give too much a sense of emptiness that is quite sad.

You left some "debugger;" in the js files. I randomly stumbled upon one.

Overall not too bad but I think it will be quite hard to make it catch on.

Good luck.

<comment><AUTHOR> Thank you for your feedback, we know that our design is missing something, most of users don`t feel interested on using our platform due to it. We are working on it right now. We will fix this problem on activity feed.

I would suggest those that are interested on understanding our concept better to access some of our internal pages:

Interest-Based pages:

Raspberry-Pi <http://guchex.com/tag/166/raspberry-pi>

Python <http://guchex.com/tag/32/python>

Mobile Development <http://guchex.com/tag/132/mobile>

Node.Js <http://guchex.com/tag/5/node-js>

Javascript <http://guchex.com/tag/25/javascript>

Emerging Technologies <http://guchex.com/tag/256/emerging-technologies>

User Profiles:

*Me <http://guchex.com/viniciusfbm>

Pushpalanka Jayawardhana (BigData Writer @ Guchex) <http://guchex.com/pushpalanka>

</comment></comment><comment><USER3> Live link: <http://guchex.com>

What is the difference between Guchex and Quora?

<comment><USER4> exactly my thoughts when I first saw it.</comment></comment>


What the Tortoise Said to Achilles (1895) - <AUTHOR> http://www.ditext.com/carroll/tortoise.html <comment><USER2> The Wikipedia page is worth reading: [https://en.wikipedia.org/wiki/What_the_Tortoise_Said_to_Achi...](https://en.wikipedia.org/wiki/What_the_Tortoise_Said_to_Achilles)

Particularly this quote:

 _The Wittgensteinian philosopher Peter Winch discussed the paradox in The Idea of a Social Science and its Relation to Philosophy (1958), where he argued that the paradox showed that "the actual process of drawing an inference, which is after all at the heart of logic, is something which cannot be represented as a logical formula ... Learning to infer is not just a matter of being taught about explicit logical relations between propositions; it is learning to do something" (p. 57). Winch goes on to suggest that the moral of the dialogue is a particular case of a general lesson, to the effect that the proper application of rules governing a form of human activity cannot itself be summed up with a set of further rules, and so that "a form of human activity can never be summed up in a set of explicit precepts" (p. 53)._

<comment><USER3> Being led down the rabbit hole is one of the reasons why I love Wikipedia.

I had searched 'What the Tortoise Said to Achilles' on Google, and ended up reading about the arrow paradox's rebuttals, which were really interesting.

But more to the point of the original article, it shows that there are definitely gray areas within morality, and it's impossible to use boolean logic to try to categorize humans.

</comment></comment><comment><USER4> Is the point here that the very structure of syllogism itself can be denied? That however inexorable a "If A and B, then C" argument is, someone else could always argue that it's not quite valid yet? It kind of reminds me of the point made (turgidly, but still) by Yudkowsky in The Simple Truth[1] - sometimes you just have to throw up your hands and declare the counter-arguments specious.

[1] [http://yudkowsky.net/rational/the-simple- truth](http://yudkowsky.net/rational/the-simple-truth)

</comment><comment><USER5> Reading this story in Hofstadner's GEB destroyed my ability to accept mathematical proofs as "proven". I just don't find them convincing; but more like using authorised forms o argument within an artificially stylised tradition (like English Literature). And I wonder if alien mathematics will reveal our mathematics as embarassingly parochial - and not the universal common ground usually assumed.

So, instead of proof, I have to fall back on intuition and working code, with their severe limitations.

However... studying mathematical proof has at times informed and grown my intuition, by revealing new ways to see a problem and new (bizarre and unintuitive) ways to decompose it.

I might have been better off never having seen this story.

<comment><USER6> Why would you be better off? I don't see any _advantage_ in having the overly optimistic belief that there's some universal, correct set of axioms.

You can still do all the math you could do before -- and if Carroll or GEB gets you more interested in the fundamentals of math, you can do even more.

Yes, you have to accept some basis of mathematics, and you now understand that some true things will be unprovable in the basis you just accepted. But that doesn't stop you from proving things.

I think you might have just transferred your optimism about math to code instead. How do you know your programming language is doing what you asked it to? That you asked it to do the right thing at all? That the compiled code has the correct behavior? That your hardware works as advertised and is not failing at the moment? In both code and math, you have to accept some abstractions that you're not going to worry about, but the things you do with math are certainly more verifiable.

<comment><USER5> Better off, because I could have learnt the conventional axioms as a skill, like the perceptual and motor skills comprising reading, writing, arithmetic. And only later question them.

My "optimism" is more for my intuition; working code is experimental confirmation.

It's easier to be optimistic about code than proofs. Firstly, working code only needs to work in the specific cases you're using (that you test for); but a proof must work in every possible case. Thus, working code is simpler and easier to check, because it's aiming at less. My code almost always confirms my intuition.

Yes, it's also helpful to have the automatic, mechanical check of executable code; and as you say, this relies on compilers, OSes, silicon, hardware. (Though, anecdotally, I have noticed subtle problems that I eventually diagnosed and confirmed to be compiler and hardware bugs.) BTW, yes I have tried COQ (proof assistant; somewhat mechanical proof checking), but simple ideas become very complex to prove, and the problem of bugs in COQ itself etc is of greater concern, for the next reason:

Secondly, and relatedly, is that the _standard_ is much lower for code. It just needs to work. Whereas a mathematical proof is supposed to be absolutely true. In other words, I don't ask as much from code. If there turns out to be a bug, it's just learning more about the problem; about the world. It's an engineering flaw. But if my proof is wrong, the game is lost.

An argument against my intuition is probably more telling. Though my faith in it has turned out to be justified many many times, I certainly can be wrong. My only real excuse is that, as a human being, I have nothing else to fall back on but my _sense_ of reality and reason. That's my hardware; if it's wrong, I really am lost. So I might as well trust it. Fortunately, it's almost always right; probably because I try to see things from many angles and check them in many ways before my intutive sense is fully formed.</comment></comment></comment>


Ask HN: What mobile browser do you use? - <AUTHOR> I've been using Firefox Focus as my default browser on Android for the past year and love it.  I don't usually need logged-in persistence on my phone browser because I'm usually just doing one-off searches or following a link from another app. FFF has been great.  What mobile browser do you use? <comment><USER2> On Android:

Firefox Focus for WiFi portals

Firefox for general web browsing

Chrome for Google services and such

On iOS:

Safari for general no-JS browsing

Opera, iCab, Chrome -- for browsing stuff with JS (I alternate)

</comment><comment><USER3> Safari on iOS. Always in private mode with AdGuard installed.

</comment><comment><USER4> Firefox

Currently evaluating the new Firefox Preview as the default browser.

</comment><comment><USER5> Chrome on iOS

Chrome on Android

Chrome on MacOS

Yes, I need to get off Google.

</comment><comment><USER6> Firefox

</comment><comment><USER7> Brave</comment>


Reddit's Community: Can't Win with 'Em, Can't Win Without 'Em - <AUTHOR> http://techcrunch.com/2015/07/06/hows-that-popcorn-reddit/ <comment><USER2> Something they failed to point out is the reddit community also directly pays to keep the lights on through reddit gold. So the community created the contents, maintains the site, polices the community, and pays for everything. I wonder if there a case to make that reddit is community property? What, exactly, does the corporate entity that is reddit, inc. being to the table at all? At this point the only thing that can save the site is Pao's dismissal. I don't think even resigning would be enough. It needs to be as humiliating a dismissal, financially and publicly, as possible. I doubt they'll do anything as it looks like they are prepping for the final vc exit anyways.</comment>


Python: Myths about Indentation - <AUTHOR> http://www.secnetix.de/olli/Python/block_indentation.hawk <comment><USER2> Python white space indentations adds some overhead when pasting code but overall I feel improves the code I write and the code I have to read. I think if it were possible to do multiline anonymous functions a lot of the feel of python would change and there would be a lot more function calling with nested anonymous blocks. I don't know if that would be an improvement or not, but I personally like my coworkers (and me) being forced to have a binding to the code they are writing in the block they are writing it in.

The adverse visceral reaction to white space (which I think is akin to the reaction to parens in lisp) appears to me to be people being unhappy with being "forced" to do something. These (for me) happen to be the same people who don't understand why the code they wrote in their personal (and ever fluid) style is no good to be added to our code base.

<comment><USER3> > overhead when pasting code

No sure I get what you mean. I pasted a lot of code in PHP and Python, and in both case you have to select the pasted block and adjust left or right according to the change of depth level.

> people being unhappy with being "forced" to [indent]

Well, then why the Hell would these people be happy to be forced to write { and } around their blocks?

For me, there is one little annoyance with indent as syntax in Python, it is that it is harder for my editor (Vim) to let me jump from def to the end of the function, and the reverse. (Or there is a conf, a plugin I missed? I know about indent folding, but I just want % to behave like if I had curlies.)

<comment><USER2> >I pasted a lot of code in PHP and Python, and in both case you have to select the pasted block and adjust left or right according to the change of depth level.

Yes, you readjust the PHP for aesthetics. Not for correctness of execution.

In vim, if I recall(emacs for a while now), =G auto formats bracketed code without issue. Pasting code, deleting enclosing block, adding an enclosing block, or highlighting a mismatched bracket (when formatting goes horribly wrong) can be handled automatically.

<comment><USER3> > Yes, you readjust the PHP for aesthetics

Here we differ. A code uncorrectly indented is wrong for me, and must be corrected right now. I don't care at all if it runs or not.

<comment><USER2>
        if user_set_delete:
            logger.info("User set flag to delete file")
        delete_file()

vs

        if($user_set_delete===True){
            log("User set flag to delete file");
        delete_file();
        }

"Correct" and "looks good" can have very different consequences. Acting like proper indentation for looks is on the same level as proper indentation for execution is ignoring the real dangers of improperly indented python.

I know copying that php block will not change the execution, no matter how it is formatted vs copying python where I need to guarantee I've got it right. Hence "some overhead".

<comment><USER4> Actually

      if user_set.delete:
          logger.info("User set flag to delete file")
      delete_file()

Becomes:

      if ($user_set_delete==True){
          log("user set flag to delete file")
      }

      delete_file();

<comment><USER5> The point being that when the indentation gets screwed up via the copy/pasting, the if changes the meaning of the code vs just changing the aesthetics.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> One nice thing about significant indentation is that it forces new programmers to learn how to indent their code properly. I'm taking an Intro to Java course now (in retrospect, I should have tried to place out), and most of the students in the class have absolutely terrible indentation.

The only major downside of significant indentation is that it makes it impossible to define multi-line anonymous functions in a clean way.

<comment><USER3> > multi-line anonymous functions

This is maybe a bit far from the topic, but I would like to know why there is such a need for anonymous functions in Python.

I understand very well the need for stateless functions (functions that do not change anything else than their return value, have no side effect, except maybe logging), and I understood it was a piece of functional programming.

In Javascript, with silent overwriting of functions and without modules, it is obviously very bad to pollute the only namespace with function names that can clash with each other, but in Python, you are or should be always inside a relatively small scope, and there you can def _my_temp_func() without any problems, no?

Moreover, as it is lame to use _temp as function name, it forces you to formulate a meaningful function name, which is good pratice, especially for your lectorate, right?

Or am I missing something?

<comment><USER7> > This is maybe a bit far from the topic, but I would like to know why there > is such a need for anonymous functions in Python.

Building new control structures in-language, without having to hack the interpreter, and without the result looking like somebody has puked all over your screen. First-class functions are under-used in Python because they're syntactically and semantically heavy. With full anonymous functions, the `with` statement would not have been needed, it could have been handled through a higher-order function, akin to Haskell's `bracket`[0]

> In Javascript, with silent overwriting of functions and without modules, it > is obviously very bad to pollute the only namespace with function names that > can clash with each other

Namespace pollution is completely irrelevant (it's very easy to handle it in Javascript via the namespace pattern).

> Moreover, as it is lame to use _temp as function name, it forces you to > formulate a meaningful function name, which is good pratice, especially for > your lectorate, right?

If it is, why can I put name-less blocks of code in `for`, `if`, `while` and `with` bodies?

Not all code blocks need a name. Those that do will be given one.

[0] [http://hackage.haskell.org/packages/archive/base/latest/doc/...](http://hackage.haskell.org/packages/archive/base/latest/doc/html/Control- Exception-Base.html#v:bracket)

<comment><USER8> In fact, Haskell style frowns on using too many lambdas. It's generally felt that adding named functions is better for debugging and readability, the same as in python. So with the bracket function, for example, it's still considered better practice to pass named functions to it.

<comment><USER7> > In fact, Haskell style frowns on using too many lambdas. It's generally felt > that adding named functions is better for debugging and readability, the > same as in python

That's really besides my point. And last time I checked, Haskell's `if` and `case` expressions did not take functions, they took anonymous expressions.

> So with the bracket function, for example, it's still considered better > practice to pass named functions to it.

To pass a named function as third argument to bracket?

</comment></comment></comment></comment></comment><comment><USER9> This is the main point:

"So the conclusion is: Python forces you to use indentation that you would have used anyway, unless you wanted to obfuscate the structure of the program."

You _were_ going to use consistent indentation anyway, _right_?

</comment><comment><USER10> It seems to me all the resistance from people who don't like Python's meaningful indentation is from people who haven't coded in Python. It seemed weird to me at first, too, but really, it takes about an hour of actually using code to think, "Hey, this just lets me get rid of all the ugly brackets, and you don't lose anything by having to write it this way!" I don't even think you have to love Python as a whole to get the fact that this part of it is simple and elegant.

<comment><USER11> I can attest to this being one of the people who resisted until I actually used the language. Now I absolutely can't stand languages without significant indentation. "why is this retarded language forcing me to manually end blocks when it's bloody obvious from indentation!!!"

</comment></comment><comment><USER12> Python's indentation rules as specced originally are considered too loose by most Python programmers, hence PEP8 -- specifying spaces only, and a host of readability rules.

Consider that the competing scripting language at launch was Perl.

Now consider the benefit to a large team of well formatted easy to read code; Python's whitespace and indentation rules are there to enhance maintanability and readability, and they generally work.

As the article shows, you CAN make python look worse, but you shouldn't.

Incidentally, languages like Google Go take this one farther and embed deterministic formatting as a part of the language toolkit. This is brilliant. I would like to see such a thing incorporated into Python as well.. (Where's my backlist of to-do items?)

</comment><comment><USER13> I'm an avid python user and a big problem I have is that you can't finish a line with '.' and continue on the next line. For instance:

      some_object.
        do_something(..).
        do_something_else(..).

Doesn't work. It needs to be written:

      some_object.\
        do_something().\
        do_something_else()

or

      some_object\
        .do_something()\
        .do_something_else()

It's ok to write \ a couple of time, but I feel like it makes chain-able functional methods really ugly to use because of that.

<comment><USER5> You don't need to escape line endings within parens:

      (someobject
         .do_something()
         .do_something())

<comment><USER13> Yeah. That's the hack I use, but it makes it a bit no pythonic.

<comment><USER5> From what I gather, the Pythonic way to write that would be:

      some_object.do_something().do_something()\
        .do_something().last_thing()

Basically, go to the end of the line and wrap with an indent. That's the way that I see most function calls with a long list of arguments in Python. In Perl, you might see something like:

       GetOptions(
         'h|help' => \my $help
       );

Whereas in Python you would see:

      parser.add_option('-h','--help',meta="HELP",target="HELP",
          help="Print help message",action="store_true",default=False)

</comment></comment></comment></comment><comment><USER14> Question: why don't pythonistas use tabs instead of spaces for indentation? To my knowledge pretty much every editor can be customized to display tabs in whatever length users want e.g. 2 spaces, 4 spaces, etc... imo it's a lot easier than dealing with different sets of code with a varying number of spaces for indentation.

<comment><USER15> tabs are interpreted as exactly 8 spaces, and oftentimes people set editors to use less than 8 spaces

<comment><USER16> Why does it matter to you if people set their editors that way? What is your point here?

<comment><USER17> The standard indentation is 4 spaces, and people often have their tabwidth set to 4 spaces. Sometimes tabbed code (often older code, before spaces were really standard), end up with mixed tabs and spaces. The logic of the code then reads completely differently depending on your editor settings.

<comment><USER16> I'm not advocating people mix tabs and spaces, I'm advocating that people always use tabs so that others can display it as they wish.

<comment><USER18> If you use tabs everywhere, your code alignment will be all wrong:

      if x:
      ----some_long_func_name(...,
      ----                    blah...

Note that ---- is indentation and the spaces need to be _spaces_. If you use tabs for all of this, it will come out misaligned.

You could say -- then why not use tabs for the indent part, and spaces for the alignment part? Because virtually no editors support doing this automatically (and doing this manually is not practical). The few editors that do support automating this, don't make it discoverable (let alone a default).

What you end up with is a horrible mixture of tabs and spaces, or if you use tabs only, then code that does not align right.

Using tabs _simply does not work in practice_. Spaces may have the (supposed) disadvantage of a fixed indentation size, but they really are the only way to make indented code work across different editors. And this is not an optional thing, therefore tabs should be banned, completely.

<comment><USER19> Technically that's incorrect. A parameter list has an implicit line continuation so the 4 spaces aren't necessary.

        if x:
        ----some_long_func_name(...,
                                blah...)
        ----fn2(x)
        else:
        ----fn3()

However, I do agree that using tabs in python quickly becomes an enormous headache.

<comment><USER18> My point was not that the code becomes incorrect -- but that the point of indentation is to make code readable, and it is lost when using tabs because the only correct use of tabs for indentation is not well supported by editors in practice.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> Myth: "You cannot safely mix tabs and spaces in Python."

In fact, you can mix 8 tabs with spaces in CPython (and do wacky stuff like

def f():

<tab><8 spaces>x=3

<4 spaces><tab><4 spaces>y=3

<8 spaces><tab>return x+y

<comment><USER20> You can, yes, but is it _safe_?

My understanding of the article is that you shouldn't do it, because it's liable to cause confusion -- it's not safe.

<comment><USER21> In Python 2, you can run tabnanny[1]. In Python 3, I do not believe that unambiguous tab mixing is allowed.

1: <http://docs.python.org/library/tabnanny.html>

</comment></comment></comment><comment><USER22> > "You cannot safely mix tabs and spaces in Python."

You _can_ mix spaces and tabs all you want as long as you are consistent. This is fine.

        if 0:
        <tab><sp><tab><sp>1
        <tab><sp><tab><sp>2

This is not, for any number of spaces.

        if 0:
        <tab>1
        <sp><sp><sp><sp><sp><sp><sp><sp>2

<comment><USER23> Technically, the parser converts one tab to 8 spaces (at least in the versions of python I'm familiar with), so your second statement is not quite true.

def foo(): <tab>print 'a' <sp><sp><sp><sp><sp><sp><sp><sp>print 'b'

compiles and runs properly in python 2.6.

</comment></comment><comment><USER24> I don't really have a problem with Python per se, but the one thing that bugs me is that the significance of indentation encourages the use of 4 or 8 space indents. I guess on one hand it's good because it would probably discourage heavy nesting, but seems like it would be a pain to paste on blogs and would require a lot more eye movement.

I guess you probably just get used to it, I'm just coming from the 2 space Ruby standard.

</comment><comment><USER5> I will say that the person I know with the most visceral reaction to Python's indentation rules writes code like this:

      sub func { shift->func1(shift)->func2(@_) }

      sub things_with_attr { grep { $_[0]->is_attr_true($_) } $_[0]->things }

Only the function names have been obscured.</comment>