Why I'm Building a Side Dish (and Maybe You Should Too) - <AUTHOR> https://noahbragg.com/blog/why-im-building-a-side-dish/ <comment><USER2> Is there a reason the author uses the word dish instead of project? While I suspected as much before clicking, it would clear up the title if it would just say what was actually about.

<comment><USER3> RTFA: it's not talking about side projects.

Side dish = product built on a platform the customer already uses. Example: Streak (a side dish) is a CRM that lives inside Gmail (the main dish).

<comment><USER4> The opposing side to RTFM is for you to just "Answer the fucking question". I don't have issue with people that didn't read or understand, but I do have issue with your RTFA nonsense. What does this add? Far less value than a question that everyone seems to want to know...

<comment><USER3> Thanks for bringing it up. An underlying assumption here is that cordiality should be the default, and I agree with that.

In this particular case, though, this question is essentially "TL;DR?", which is also a question everyone wants to know, but not considered good etiquette by this community.

The question was "Is there a reason the author uses the word dish instead of project?" If the answer is yes, then, you can find out by reading the article. If the answer is no, then a comment critiquing or clarifying would be helpful.

I could have been more cordial, but it's unsustainable (IMO) to counter low- effort with high-effort. Acting annoyed is a convenient shortcut for communicating etiquette expectations.

<comment><USER4> There are plenty of good reasons to start to read the article, not quite understand the usage, and come to the comments for clarification. I don't assume, if I'm not following, that reading more will clear up the confusion. If those reasons exist, as they plausibly do, then how do you ensure you aren't erroneous, and making an inaccessible community.

</comment></comment></comment></comment></comment><comment><USER5> What about a side-dish as a marketing tool, to get people interested in your main-dish.

This is the approach we are taking with my current start-up. We have a simple entry point, integrating with the apps, and wearables people currently use. But we don't like anything in the market currently for really solving the problem, so while we build out our own hardware, we're building the app, which is a side-dish, but has it's own revenue stream too.

I'm sure there are other businesses that have done this, can anyone give examples of side-dishes that turned into main-dishes?

<comment><USER6> This is a valid approach and is commonly used even with large enterprises. It's also the route we're taking with our startup as it lowers the initial friction and allows you to build out credibility. This is also the approach I used when working in consulting - effectively, you're looking for a small ask/commitment before making the big jump. Good example could be Intercom which is broadly expanding it's offering.

</comment></comment><comment><USER7> This is a great read for information on how to classify the scale of a project. Being able to compartmentalize the scope is good for determining when to execute and when to walk away.

I am currently working on a "main dish"[1] since it is for a smaller/niche market of people that modify their cars. I consider it the "side dish" to my day job, but with the goal of going full time with it if it takes off. If it takes off then I can start creating my own side dishes, complimentary products, to the main dish.

[1] [https://azxiana.io/2020/04/21/translator-gateway-module- maki...](https://azxiana.io/2020/04/21/translator-gateway-module-making- foreign-data-buses-work-together/)

<comment><AUTHOR> Glad you liked it! Looks like you have a good plan! Hope it goes well!

</comment></comment><comment><USER8> Thanks for sharing. This is a thought provoking article. I too have wanted to build something and would be happy if it covered something like my monthly rent. There are lot's of great side dish opportunities out there. Just look at the many successful paid wordpress plugins, slack integrations, and so on.

To be honest I've always found myself focusing on what I can build as a main dish for a niche market. This article has given me some new perspective. Thanks for sharing.

<comment><AUTHOR> Glad to hear it! Yes there are lots of opportunities for side dishes. Because all the big companies want to go for the big opportunities.

</comment></comment><comment><USER9> This post resonated with me a lot.

It's similar to the distinction between VC compatible business ideas (main dishes) and more niche, Micro SaaS products that are focused on profitability instead of growth.

My main dish is Saasify.sh, a platform whose goal is to help other developers launch and experiment with side dishes. In the context of this excellent article, I'm focused on trying to make the process of creating your own side dishes as easy and repeatable as possible.

<comment><AUTHOR> Glad it resonated. I like what you're doing with saasify. Making it easy and quick to get businesses off the ground. Nice!

</comment></comment><comment><USER10> Microsoft DOS once was a "side dish" to the "main dish" of IBM. You should always strive to turn your side dish into main dish. Good luck!

<comment><AUTHOR> Thats a good point. I think there are lots of ways to turn side dishes into main dishes. Really depends on what platform you start out on.

</comment></comment><comment><USER11> I sadly work for a company that claims ownership of any kind of "technical" thing I come up with. I have dozens of side-projects that I work on, but sadly they're all kind of stuck running in my basement until I leave my current job.

<comment><USER12> Have you ever checked with an attorney if the IP document you signed was an overreached?

<comment><USER11> I have, and it seems unlikely that I would win any court case if I were to try and risk it.

</comment></comment></comment><comment><USER13> I liked this idea at first blush. The only catch is that You give away control of your customer interactions to the platform that You are hitchhiking on. If that is not a deal breaker, side dishes are the way to go.

</comment><comment><USER14> Thanks for this. Very fun and motivating to read.

<comment><AUTHOR> Glad to hear it! Are you building a side dish or main dish?</comment></comment>


Show HN: GitNews Web – Trending Repositories from GitHub, HackerNews and Reddit - <AUTHOR> https://git.news <comment><USER2> This project would seem to fall foul of the Git naming trademark and would likely need to rename unless they have specific permission?

> In addition, you may not use any of the Marks as a syllable in a new word or > as part of a portmanteau (e.g., "Gitalicious", "Gitpedia") used as a mark > for a third-party product or service without Conservancy's written > permission. For the avoidance of doubt, this provision applies even to > third-party marks that use the Marks as a syllable or as part of a > portmanteau to refer to a product or service's use of Git code.[0]

Git has grandfathered in some projects due to their history but hasn't allowed Portmanteaus for some years:

> \- Portmanteaus ("GitFoo" or "FooGit") are out. Most of the cases run into > this rule. For instance, we asked GitHub to not to use "DGit" to refer to > their replicated Git solution, and they[1] rebranded. We also asked > "GitTorrent" not to use that name based on this rule.[1]

[0] [https://git-scm.com/about/trademark](https://git-scm.com/about/trademark)

[1] [https://public- inbox.org/git/20170202022655.2jwvudhvo4hmueaw...](https://public- firstname.lastname@example.com/)

<comment><USER3> This would seem to qualify as fair use, no?

[https://www.inta.org/TrademarkBasics/FactSheets/Pages/Fair-U...](https://www.inta.org/TrademarkBasics/FactSheets/Pages/Fair- Use-of-TrademarksNL.aspx)

<comment><USER2> In that case it would need to be GitHub News or some such.

</comment></comment></comment><comment><USER4> Am I the only one not comfortable with how much "git" has become synonymous with "GitHub" in the common collective?

<comment><USER5> I know some of classmates from college that used to refer to "GitHub" as "git" \- that always kind of bothered me, but I didn't think it was worth my time to discuss with them.

<comment><USER6> This is incredibly common with recent grads in my experience. It's really quite frustrating for me because the organization I work for has code on both GitHub (open source) and private git servers. I have to spend half an hour or more with virtually every new intern explaining the difference.

<comment><USER7> Half an hour? All I can think of is: "git is a command-line program to manage source code. GitHub is a graphical user interface that builds on top of git, and adds some features like issue tracking. We installed git on our server. This is were we host our private source code. GitHub is the place where we host our open-source source code."

<comment><USER8> Git is not most properly described as a command line program either. Git is a version control protocol/system for handling files across multiple locations. Github is just one of those locations

<comment><USER9> > _Git is not most properly described as a command line program either. Git is > a version control protocol /system for handling files across multiple > locations. Github is just one of those locations_

You're technically correct of course, but remember your audience (important pedagogical consideration). These are new grads that think _git and github are synonymous_. A slightly less technically correct but grokkable explanation is probably a better stepping stone toward arriving at a more correct understanding. You're description is abstract, which is harder to grok for most people than a concrete example. If you want to be more technically correct and therefore launch into a discussion about DAGs you're also not going to teach them anything.

Note: there are always exceptions, and a good teacher adapts to the audience. I'm referring to the very general case, not the exceptional case.

<comment><USER10> I really hope they are new grands in something not directly involving computers, because otherwise they would have to live in a cave to not know the difference between git and Github.

<comment><USER6> This just isn't true. I really only interact with CS/CpE students/grads and I'm constantly shocked at the ability of universities to force their students to use version control without actually teaching them anything about how it works.

<comment><USER9> Likewise. It's not even that unusual to have somebody using Dropbox to store all of their code, and all they know is that there is a "better system" out there.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER11> This would be more useful with links back to the articles. Now, it's just a list of repositories that are somehow interesting but no clue about why they are interesting.

<comment><USER12> Agreed. Would be nice to know if it's trending for a good or a bad reason. Links back to HN and Reddit would help with that.

</comment></comment><comment><USER13> Cool project but way too much white space: I only see two items above the fold on my Macbook Pro. It would be a lot easier to use if it was more information dense. (e.g. [https://i.imgur.com/ZLaSfJJ.png](https://i.imgur.com/ZLaSfJJ.png) vs [https://i.imgur.com/NuNtxel.png](https://i.imgur.com/NuNtxel.png))

</comment><comment><USER14> So much wasted space. And the mouse-over animations are quite annoying.

<comment><USER15> This.

</comment></comment><comment><USER16> I find it interesting that The most popular repo is about hacking, and the second most popular is about defending from hackers.

<comment><USER17> I find it creepy.

This is a demonstration of how a Search Engine shapes reality by highlighting and magnifying a subset of information.

</comment></comment><comment><USER18> What does "trending repositories from [...] HackerNews and Reddit" mean? How is the aggregation made?

<comment><USER19> I assume its using reddit api to find trending links to git(hub?) repositories.

<comment><USER5> This makes so much more sense. I was thinking it was trying to show a collection of trending item from GitHub, Reddit, and Hacker News. I was confused when everything I was seeing was only from GitHub.

</comment></comment></comment><comment><USER20> I don't know why Github "hides" the trending link behind a Profile. To see the Trending link, you must go through the "explore" link first. I found it's very inconvenient for users because Trending is often a bookmarkable link when using github.

</comment><comment><USER21> There is a RSS Feed ?

<comment><USER22> +1 for a feed

</comment></comment><comment><USER23> I made a similar project (web app + chrome extension) some time ago that has filters for day, week, month or year

[https://kamranahmed.info/githunt/](https://kamranahmed.info/githunt/)

<comment><AUTHOR> Nice job, it's very good !

</comment></comment><comment><USER24> Did you use a UI framework/theme for this or was it designed from scratch? While I think there's too much whitespace, there are certain elements I really like.

</comment><comment><USER25> How is this different to github.com/trending?

<comment><USER19> The "load more" button for one (trending has a 25 limit)

<comment><USER26> also the different sources, I think it also feeds from Reddit and HN

<comment><USER25> Sure but in practice there aren't any entries from Reddit or HN. They are all from Github.

</comment></comment></comment></comment><comment><USER27> I think .NET languages are missing

<comment><USER28> You have `CSharp` in the list, but it's not returning any results.

<comment><AUTHOR> Thanks I'll look into it, I'll fix it as soon as possible!

</comment></comment></comment><comment><USER29> This site (and github.com/trending) needs a way to filter out repos only in Chinese.

</comment><comment><USER30> Cool! Finally the web version, this is more handy than the mobile app for me.

</comment><comment><USER31> Looks interesting. Can you add D to the list of languages?

<comment><AUTHOR> It is actually easy there, but you have to click on other languages.

</comment></comment><comment><USER32> www.gitlogs.com</comment>


Great article on hosting Git repositories the easy & secure way - <AUTHOR> http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way

<comment><USER2> This has been in my bookmarks for quite some time now. It's a really good guide to hosting your own repositories.</comment>


The IE exploit used to hack google - <AUTHOR> http://seclists.org/fulldisclosure/2010/Jan/285

<comment><AUTHOR> There is also a python implementation on milw0rm: <http://www.milw0rm.com/exploits/8080>

<comment><USER2> And here is the metasploit code: [http://www.metasploit.com/redmine/projects/framework/reposit...](http://www.metasploit.com/redmine/projects/framework/repository/revisions/8136/entry/modules/exploits/windows/browser/ie_aurora.rb)

I guess "sophisticated attack" is really a relative term. Possibly Google and Co could not really tell the press "we have been hacked through an IE bug, kinda of the same way any other guy and their mums are every day".

<comment><USER3> From what I understand, they told it was a sophisticated attack because it involved several layers - the IE exploit just being one bit of these.</comment></comment></comment>


Ruby takes 2min to match a regex - <AUTHOR> https://gist.github.com/salimane/8958411

<comment><USER2> Let's guess that _Regular Expression Matching Can Be Simple And Fast_ is relevant [http://swtch.com/~rsc/regexp/regexp1.html](http://swtch.com/~rsc/regexp/regexp1.html)

</comment><comment><USER3> The issue with the regex seems to be the nested * matcher in the last part, paired with the grouping: ([\/\w \\.-]* )* (whitespace added to re to circumvent italisizing by HN).

IIRC this was a pathological case with perl5.0 regexes as well.

Removing one of the redundant * or marking the grouping to be non-capturing with ?: seems to fix the problem.

Looks like the regex optimizer could use some love.

</comment><comment><USER4> if you are using Ruby for any performance sensitive task, you are doing it wrong. Really. Even the die hard fans acknowledge they use it for the meta- magic-shiny-shiny rather than something that complete a given task in a reasonable timeframe.

Ruby is slow. Dynamic languages often are.

<comment><USER5> > Ruby is slow. Dynamic languages often are.

I'm not sure that explains the difference between PHP (for example) and Ruby using the same regex.

PHP: 0.07s

Ruby: 114.95s

Java: 0.75s (I expect the majority of this is once off startup time rather than java being slower than PHP once it's "up".)

Dynamic Languages are slow.. But that? That's something completely broken.

Whether or not it's ruby, his build of ruby, a hoax, or something totally unrelated to Ruby that's causing this 1600x slowdown is up for debate though..

<comment><USER6> b-b-but you could express it in any way you'd like, you know like

compute.this.regex.now()

haha! how cool is that! it's like I'm talking with the computer LOL programming is so much fun when you don't have to use those "old languages"</comment></comment></comment>


Viper: a new programming language from Ethereum - <AUTHOR> https://github.com/ethereum/viper <comment><USER2> As a bonus, it wraps all transactions in the VIP monad, where if you are an important person in Ethereum, you can get your poorly written contracts reversed.

Sorry, since the DAO fiasco I don't see Ethereum having any purpose. If a poorly written/unfair contract should be invalidated, I would rather have e the judicial system with hundreds of years of jurisprudence make that decision, than a few people at Ethereum.

<comment><USER3> The DAO contract was not invalidated. It is still there, on the blocks where it was deployed.

The fact that the people running the nodes stopped seeing that fork of the chain as the interesting one is distributed consensus at work. Anyone that wants to keep observing that original fork can do so, that fork is actually alive in the form of Ethereum Classic.

Ethereum was forked after the DAO fail because people saw more value in a forked chain with new rules. Speaking about contract reversals or invalidations is misleading. That is simply not possible, because Blockchain. And while anyone can decide to fork a blockchain, building consensus around the fork is what gives it its value.

The DAO was a marketing horror because it promised a world ruled by code, built on top of blockchain tech. Blockchains, though, don't run on code but on consensus.

<comment><USER4> What value does the Ethereum protocol provide when a disagreement splits the network in two, without any recourse for either of the parties involved?

Which hard social/computer science problems are solved through a "consensus" algorithm that essentially constitutes denying the existence of those who disagree?

With Bitcoin, determining whether a fork is successful is very simple: are the tokens on its blockchain as liquid as those on the Bitcoin one? If they are, they are just as useful for transferring value as the "original" Bitcoin.

What metric would we use to determine whether an Ethereum fork is successful or not? If nothing is lost when a consensus algorithm fails to establish consensus, what value did it provide in the first place?

Market cap is an arbitrary measure because, in and of itself, it solves nothing. At any time, I can fork Ethereum with a buddy of mine, trade the resulting tokens at whichever price the original Ethers trade at, and the market cap would be the same. Or, alternatively, trade them at 1/1000 the Ether price, but change the protocol such that 1000 times as many exist.

<comment><USER3> >What value does the Ethereum protocol provide when a disagreement splits the network in two, without any recourse for either of the parties involved?

Don't give splits such importance. The nature of blockchains means that the network is being constantly forked into many chains at its tip. It doesn't matter which protocol is running on that blockchain.

>Which hard social/computer science problems are solved through a "consensus" algorithm that essentially constitutes denying the existence of those who disagree?

Existance is not being denied. The chain is still there. The problem is that the rest of the people, a majority of nodes, prefer another version of the chain.

>With Bitcoin, determining whether a fork is successful is very simple: are the tokens on its blockchain as liquid as those on the Bitcoin one? If they are, they are just as useful for transferring value as the "original" Bitcoin.

>

>What metric would we use to determine whether an Ethereum fork is successful or not? If nothing is lost when a consensus algorithm fails to establish consensus, what value did it provide in the first place?

Proof of Work consensus algorithms don't "fail" to establish consensus. They are designed to swiftly choose one of many possible chains, based on a few simple parameters (the most important one being the amount of work needed to create the chain). That said, value is an off-chain concept. Just as US dollars have value because we all know they are widely accepted, Ethereum has value because there is a team of developers plus a big community plus a lot of nodes, and all that together allows some use cases that make Ethereum have value. Ethereum Classic has less value because it is not as widely accepted. Bitcoin has a lot of value because as of now it is the most popular cryptocurrency. Nothing about this has to do with the tech itself, but with the way we see the tech.

</comment></comment></comment></comment><comment><USER5> Decidability. :) I'd love to see that show up in more languages. I believe it allows for better abstractions without optimization deficiencies because it's all decidable.

<comment><USER6> The big problem with that is that if a language is decidable it can't be Turing complete. That means that a large number of useful programs are just not going to be expressible. That said for something g like this it's a perfect fit to have it be decidable.

<comment><USER7> There are no useful programs that require Turing completeness. That's basically by definition. Turing completeness is what allows programs to have non-productive infinite loops. Any system that guarantees productivity isn't Turing complete. All useful algorithms are productive. The only thing you can do with a non-productive algorithm is convert electricity to heat.

<comment><USER6> So I might have made this a bit confusing too by conflating the two things in my original post. The real thing is that there are a lot of undecidable programs that don't require Turing completeness. And a lot of those useful programs are undecidable, an example of a really simple undecidable program:

        10 PRINT "Enter your name"
        20 INPUT NAME$
        30 PRINT "Hello ", NAME$
        40 IF NAME$ <> "Ralph" THEN
        41 GOTO 10
        42 END IF
        50 PRINT "Goodby Ralph"

That program, because it might loop indefinitely isn't decidable and isn't possible to describe with Viper by design. This kind of program is pretty analogous to basically every program that communicates with the network, user, or some other external system.

<comment><USER8> So how non-turing completeness work with infinite streams?

Many practical applications (like this) are working with possibly infinite stream of user inputs / requests etc. If we can guarantee that our server, browser or game application just stops eventually we know that something is wrong. However we like to guarantee that our application won't work infinitely with single request / input / time tick. So does this say that we want avoid using turing complete language mostly but turing complete part need to be handled somewhere maybe outside of our code? Something like how Haskell works with side effects. What you think?

<comment><USER9> Coq is not Turing complete but has support for coinductive data types (= infinite streams) and (co-)recursion over them.

Simplifying a lot, it has a syntactic "guard condition" that says that you must produce some result before you're allowed to make a recursive call. For example, you can map over an infinite stream because a map produces a result for each element of the input stream. Unlike Haskell, you cannot write a fold over an infinite stream because you would need to look at all elements before producing a result.

So if you can structure your system as a transformation from an infinite stream of requests to an infinite stream of responses, you're fine in Coq even though it is not Turing complete.

The intuition is that, just like in Haskell, you don't _actually_ end up doing an infinite computation if only a finite part of the final result is ever requested.

<comment><USER10> If you have support for coinductive data types then you are Turing complete. Proof: you can simulate a Turing machine. However, Coq's _term language_ is not Turing complete, meaning that every syntactic element in Coq evaluates to a terminating computation.

</comment></comment></comment></comment></comment></comment></comment><comment><USER11> > Bounds and overflow checking, both on array accesses and on arithmetic

I like that one. Anyone know any widely adopted languages that do this?

<comment><USER12> Seems to be at runtime so, so almost every language for bounds checking.

Overflow checking is a bit more rare:

* Swift has it by default (error)

* So do Python, Ruby, Erlang (promotion to arbitrary precision)

* C# has an optional Checked Context though I don't know how common it is

* Rust has checked operations (opt-in, both error and saturating), will check (error) by default in debug mode, it can optionally check (error) in release mode

<comment><USER13> Idris has compile time bounds checking.

It is a pretty special case though, you have to jump through a number of hoops using dependent types to get it.

<comment><USER12> > Idris has compile time bounds checking.

Indeed it does, but I'm guessing it doesn't come close to qualifying for "widely adopted language", my list is already stretching it.

</comment></comment></comment></comment><comment><USER14> Can a blockchain project suffer from scope creep, if so, what would that look like? I have to imagine that you don't have to invent a new language for writing safe code (which in my noob mind, I think this is.) Maybe pick up where some other safety oriented languages already are. If security is the goal, is their path equal to this path: [https://en.wikipedia.org/wiki/Formal_verification](https://en.wikipedia.org/wiki/Formal_verification) . I can't imagine so, for they're making a new language?

It could be that they're making it a little safer, and a little easier, but not really too much safer. The features are described, and they look mostly like security?

<comment><USER15> You might find [https://publications.lib.chalmers.se/records/fulltext/234939...](https://publications.lib.chalmers.se/records/fulltext/234939/234939.pdf) interesting.

</comment></comment><comment><USER16> What are some non-speculative use cases for ethereum that wouldn't be better served by just using aws?

<comment><USER17> Educational transcripts, patent filings, farmland ownership transactions, small-supply-chain records, lab reports, government transparency reports... Pretty much any records where the total amount of data is fairly small, but you want to share it publicly in a place that's long-lived and extremely tamper-resistant, so others will trust it. Smart contracts (computer programs) can do more, of course.

<comment><USER18> Wouldn't IPFS be a better fit for storing data than the Ethereum blockchain?

<comment><USER19> One idea I heard was you would just store the IPFS hash address on the Ethereum blockchain, so you can store basically anything in there without blowing up the size.

<comment><USER20> What about the ETH blockchain is needed to fulfill this requirement? Bitcoin's blockchain can be used in the exact same way.

</comment></comment></comment></comment></comment><comment><USER21> _> wei_value: an amount of wei_

What is wei? Another name for gas?

<comment><USER22> It's the name for the smallest unit of ETH value.

</comment></comment><comment><USER23> How ready is this now to write real beta quality contracts in? I'm just starting, should i pick this over solidity ?

</comment><comment><USER24> for max confusion, there also used to be a programming language called vyper. [http://lambda-the-ultimate.org/classic/message1064.html](http://lambda-the- ultimate.org/classic/message1064.html)

</comment><comment><USER25> Ethereum or Ethereum Classic?

</comment><comment><USER26> > Requires python3

o_O _twitch_

<comment><USER27> Does it bother you that it requires Python3 specifically, or just Python at all? (I can empathize with not wanting to use a language that's implemented in Python, although if I had to, I'd probably prefer it was Python3)

<comment><USER26> The latter. It just seems wrong for a language to require python just to install.

<comment><USER9> Packages currently installed on my system that depend on Python (2 and 3, respectively) and don't have "Python" in their name:

      calibre calibre-bin clang-format-3.8 creduce duplicity gimp gvfs-backends
      inkscape libatk-bridge2.0-dev libatk1.0-dev libatspi2.0-dev libcairo2-dev
      libgail-dev libgdk-pixbuf2.0-dev libglib2.0-dev libgnomecanvas2-dev
      libgtk-3-dev libgtk2.0-dev libgtksourceview-3.0-dev libgtksourceview2.0-dev
      libpango1.0-dev libsmbclient mercurial mercurial-common prosper rubber samba-libs
      texlive-latex-extra texlive-pictures texlive-pstricks virtualbox
      virtualbox-qt virtualenv-clone virtualenvwrapper vlc-plugin-samba

      aisleriot apparmor apport apport-gtk aptdaemon apturl apturl-common
      checkbox-converged checkbox-gui command-not-found compiz compiz-gnome
      dh-python firefox foomatic-db-compressed-ppds gconf2 gedit gir1.2-ibus-1.0
      gnome-menus gnome-orca gnome-software gnome-terminal hplip hplip-data ibus
      ibus-table inkscape language-selector-common language-selector-gnome
      libbonoboui2-0 libgnome-2-0 libgnome2-0 libgnome2-bin libgnome2-common
      libgnomeui-0 libgnomevfs2-0 libgnomevfs2-common libgnomevfs2-extra
      lsb-release nautilus-share onboard onboard-data openprinting-ppds
      plainbox-provider-checkbox plainbox-provider-resource-generic
      plymouth-theme-ubuntu-text printer-driver-foo2zjs
      printer-driver-foo2zjs-common printer-driver-postscript-hp
      printer-driver-ptouch printer-driver-pxljr qml-module-io-thp-pyotherside rhythmbox
      rhythmbox-plugin-zeitgeist rhythmbox-plugins sessioninstaller snap-confine
      snapd software-properties-common software-properties-gtk
      system-config-printer-common system-config-printer-gnome
      system-config-printer-udev totem-plugins ubuntu-core-launcher ubuntu-desktop
      ubuntu-drivers-common ubuntu-minimal ubuntu-release-upgrader-core
      ubuntu-release-upgrader-gtk ubuntu-software ubuntu-standard
      ubuntu-system-service ufw unattended-upgrades unity unity-control-center
      unity-control-center-signon unity-lens-photos unity-scope-calculator
      unity-scope-chromiumbookmarks unity-scope-colourlovers unity-scope-devhelp
      unity-scope-firefoxbookmarks unity-scope-gdrive unity-scope-home
      unity-scope-manpages unity-scope-openclipart unity-scope-texdoc
      unity-scope-tomboy unity-scope-virtualbox unity-scope-yelp
      unity-scope-zotero unity-webapps-common update-manager update-manager-core
      update-notifier update-notifier-common usb-creator-common usb-creator-gtk

Your mileage may vary, but the prospect of a Python-less system doesn't appear tantalizingly close :-)

On the other hand, this language seems to take a subset of Python's syntax and interpret it with different semantics. I find that both theoretically neat and pragmatically smart. Making up a new syntax and writing a reliable parser is boring busywork that takes time better invested elsewhere.

<comment><USER27> Fair point. I can only answer for myself, but for me it's more of the idea of a language being implemented in Python rather than an issue with having Python installed. I'll admit that I'm a bit of a PL snob, but writing a language in Python just feels inefficient.

Another thing to note is that the vast majority of the packages you list are things that might not be installed on a server environment; I admit I haven't thoroughly read through every single package you listed, but the vast majority of them seem to be GUI-related (Gnome, Unity, etc.) or printing related, none of which would be necessary on a server environment. The only ones that stick out as not fitting into these categories are the Ubuntu-specific things like apparmor and the various apt-related packages (which would presumably not be present on a machine that isn't Ubuntu or some other Debian-based system), clang-format (which wouldn't really necessary on a server, since ideally you'd format your code before pushing), and lsb-release (which may or may not be necessary; on the machine where I'm currently writing this, the only package I have that depends on lsb-release is mongodb, so for servers not having a database (or having a different database), this wouldn't be necessary either.

</comment></comment></comment></comment></comment><comment><USER28> Is Viper Turing complete? If so, is that a mistake? Bitcoin Script specifically is not.

<comment><USER4> As I understand it, the entire purpose of Ethereum is a blockchain with a Turing-complete scripting/contract language.

<comment><USER29> nope, it's ICOs

</comment></comment></comment><comment><USER30> Stop. Read [http://www.erights.org/talks/promises/paper/tgc05.pdf](http://www.erights.org/talks/promises/paper/tgc05.pdf). Then start again.

<comment><USER31> Is there a particular piece of insight from that paper that indicates a mistake in the design of Viper? I love erights' work and don't doubt that there is a lot to be learned from it in this context, but some guidance on how to apply it here would help.

<comment><USER30> The DAO attack was plan interference. Absorb and grok that idea, and then the rest will hopefully follow.

Specifically, Viper has two glaring flaws, both of which are not suffered by E, Monte, etc. The first is a lack of correct encapsulation. Viper appears to have a Python-style object model, which means that it's not possible to closely hold a value. As a test, how would you build an object with a value in its closure which no other object can access?

Second, Viper doesn't have mitigation for plan interference, which means that it's possible for certain kinds of recurrences to alter your program's security guarantees. As a test, how would you mitigate the DAO attack in Viper?

Finally, I fear that these flaws may be inherent to Ethereum, meaning that any language on Ethereum inherits these flaws structurally and cannot mitigate them. In that case, maybe it's time to design a capability-safe Ethereum!

<comment><USER32> Indeed, in the (pre-DAO) Ethereum audit report [https://github.com/LeastAuthority/ethereum- analyses/blob/mas...](https://github.com/LeastAuthority/ethereum- analyses/blob/master/GasEcon.md#hazards) they brought up your second issue and recommended Mark Miller's thesis (which covers the material in the OP).

I haven't looked into Viper and how it might address these matters.</comment></comment></comment></comment>


Ooc - modern object oriented c - <AUTHOR> http://ooc-lang.org/

<comment><USER2> Group answer so I don't blow up my HackerNews quota:

thrives/strives : yeah! thanks a lot, fixed now

wrong url in downloads: all fixed, thanks for reporting.

guess vs inferred: replaced.

why some things are prefix and some infix: that's the magic of covers. In "hi world" println(), it's the method String.println() which is called. In println("hi world"), it's a different function, e.g. println(String) which is called.

prank by ruby users: actually there seems to be a lot of interest from the ruby community =) maybe they're realizing you can have nice syntax without a VM.

Objective C && ooc: that's been mentioned on #ooc-lang, it would be very interesting for iPhone development, definitely something to explore =)

sorry about the delay, I've got more traffic than I can handle right now =)

EDIT 1: fixed syntaxic/syntactic. Damn me and my French background ;) thanks for reporting

EDIT 2: I _love_ the comparison "ooc is to C as Scala is to Java." Seems very fit =)

<comment><USER3> Minor question: what's the RSS feed for the blog?

Safari lists two:

      feed://ooc-lang.org/feed.php

and

      feed://ooc-lang.org/feed.php?mode=list&ns=

The former one appears to be empty and the latter one doesn't appear to include blog posts (or at least it includes a lot of other stuff; I'm not sure). It would be nice to have a regular RSS just for the blog for us non- Twitter-aficionados.

<comment><USER2> There is one actually, (and now I must reveal the ugly blog hack I made to integrate wordpress with DokuWiki), <http://ooc- lang.org/blogbackend/?feed=rss2>

It should probably be linked on the website. Lemme fix that.

EDIT: Added link to rss and atom feeds on the blog.

</comment></comment></comment><comment><USER4> At first I wanted to say "bah humbug" but it really does seem to hit a sweet spot:

-Common modern features(implicit typing, generics, GC, iterator syntax)

-Source-to-source C, so it is compatible with just about everything

-Doesn't attempt to reinvent libraries

-Doesn't attempt to reinvent the build system

-Doesn't diverge strongly on syntax(apart from supporting the new features)

These are the kind of things that make a language easy to pick up and start using :)

<comment><USER5> Seems to fit the pattern "ooc is to C as Scala is to Java."

</comment></comment><comment><USER6> It's beautiful. I think I'm in love!

It's a wonderful framework giving me a graceful syntax and some nifty tools. I may just get involved!

<comment><USER2> Please do =) We're open about its design, all contributors are welcome, all the code is BSD licensed on GitHub. Join the fun!

</comment></comment><comment><USER7> The documentation has issues, e.gs.

 _"But remember, the compiler is your friend. He guessed that's what you wanted to return."_

Yuk, a compiler is not a cuddly teddy bear, and I really don't want a compiler to "guess", I want it to be very predictable in its behaviour.

 _add: func(a, b : Int)_

Previous function example specifies a return type, why doesn't this one?

 _The strange little dots_

Oh please.

No explanation of why some things seem to be prefix, e.g. _"Hi, softer world =)" println()_ and some are infix, e.g. _add(1, 2)_

<comment><USER2> That's why it's called a "tour", not a reference documentation ;) Reference docs are being written, and are updated here <http://docs.ooc-lang.org/> from this git repo <http://github.com/nddrylliog/ooc-docs> If you want to help you're welcome.

> A compiler is not a cuddly teddy bear

Why, shouldn't it? I always found gcc so cold and all. Friendly compilers surely aren't so bad. I could do a -hardass flag if you wanted.

> Previous function example speicifes a return type, why doesn't this one?

Wohow, my bad. Fixed in the doc.

> The strange little dots

Actually they _are_ strange, because they're unexpected. It's a bit of the syntax that would probably most appeal to perl hackers, and is totally optional.

EDIT: Realized the return type was missing in add: func definition. :/ sorry.

<comment><USER7> >> Previous function example speicifes a return type, why doesn't this one?

> Because the function doesn't return anything (e.g. is void), I guess.

Have another look at it. Does "add" look to you in this context at all like a function that returns void?

 _printf("1 + 2 = %d\n", add(1, 2))_

<comment><USER2> And now I feel very dumb.

You were right :/ It's all fixed now, thanks a lot for reporting.

(At first I thought that you thought that return type specification was non- optional, e.g. that it lacked "-> Void")

About the other issues: are you really bothered by them? (e.g. the familiarity of the writing, etc.) I thought it'd be less boring, but I didn't mean it to annoying.

EDIT: fixed the "strange little dots" and "compiler is your friend" parts.

<comment><USER7> Striking the right tone is hard, and you can't please everyone. Personally, I like a slightly conversational tone, but it's easy to got to far with it, and it just becomes a waste of words. You're writing to please the reader, not the writer ( see <http://news.ycombinator.org/item?id=875094> ).

E.g. "Foreaches. Foreaches is like.. a regular For that gave up alcohol, decided to shave daily, and bought a new suit. It's prettier, and more effective. "

I've been programming in C# for years, I know foreach. It's a workhorse feature that I use daily. There are similar constructs in Ruby and PHP and others.

</comment></comment></comment></comment></comment><comment><USER8> /*

Vector3f: class { x, y, z : Float }

vec := Vector3f new() vec x = 3.14 vec y = 6.18 vec z = 42.0 // hey, Java/C/C++/C# guys: look! no dots =)

*/

Uhh, are "no dots" supposed to be a good thing?

<comment><USER9> If it's message passing, then yeah it's a good thing, but apparently it's just a syntax thing so not too exciting.

</comment></comment><comment><USER10> I'm sad that i don't see any references to first class functions and closures. But that may be because they're not implemented yet.

Also, any thoughts about all that "immutability by default" rumble ? Is ooc too close to c to give that a thought ? Simplify the use of immutable data structures would be very cool, and very possible since ooc has a gc.

Actually, i was thinking about a "competitor" for this nice language, and the closest thing to it that i found was BOO : <http://boo.codehaus.org/>. Boo has a syntax that is just as nice, comparable set of features + closures, very nice type inference, and very good interaction with native code. It runs on .Net, but i think the interop with c is really very flawless for once. You can even manipulate pointer data. And it has the nicest macros i've seen yet in a non lisp language (i've not seen a lot except lisps tho).

<comment><USER2> Closures are planned, indeed.

About immutability, it's really a hard call for me to do here. C is very much about in-place data modification (as far as I know). Working with immutable objects seems to be a very different approach.

What do you mean with "simplify the use of immutable data structures" ? Like a good support for const?

Thanks for the feedback, I'll definitely look deeper into Boo to steal.. huh get inspiration from it ;)

<comment><USER10> > About immutability, it's really a hard call for me to do here. C is very > much about in-place data modification (as far as I know). Working with > immutable objects seems to be a very different approach.

Yeah i know what you mean. But anyway this is a whole other topic, and it could be programmed by third parties. The important part would be more about enforcing a transitive const keyword, and some other nice things like that.I think what the d people are doing at the moment is very interesting : <http://www.digitalmars.com/d/2.0/accu-functional.pdf>

Another question i had is, do you plan to provide any meta-programming facilities (macros) ? Boo is very interresting in this regard, i can only recommend you look into it.

Oh and one last thing, how does ooc fare performance wise compared to plain c at the moment ?

Also i've been toying a bit with ooc and it's very nice to code in. I will probably follow its evolution with a great lot of interrest. Thanks for your work and dedication !

</comment></comment></comment><comment><USER11> Yet another interesting looking new language -- but not on the JVM for once.

The site doesn't explain how C and C++ libraries can be used, especially with respect to GC. There doesn't seem to be a destructor/finalizer to wire up to a 'legacy' free(), so wrapper classes might be tricky.

<comment><USER2> That's a good point. I'll write some docs on that now. Stay tuned.

</comment></comment><comment><USER3> The second to last example looks like it is incomplete:

        include time // equivalent to #include <time.h> in C

        TimeT: cover from time_t
        Tm: cover from struct tm {
           tm_sec, tm_min, tm_hour, tm_mday, tm_mon, tm_year, tm_wday, tm_Tm*

        main: func {
          timestamp := time() // timestamp is now a TimeT
          t := localtime(timestamp&) // t is now a Tm*
          printf("It's %dh%d.", t@ tm_hour, t@ tm_min)
        }

I would have expected a closing } in the definition of the TimeT cover.

Generally speaking, ooc looks really promising. Compiled to plain C, hence fast and super compatible, and with syntactical treats borrowed from Python and Ruby. I wanted this for a looong time. :-)

<comment><USER12> _Compiled to plain C, hence fast and super compatible..._

In the beginning, there was _cfront_... ;)

<comment><USER3> True, but it wasn't exactly Ruby/Python/IO inspired. ;-)

</comment></comment></comment><comment><USER13> Looks really interesting!

The one thing I was missing, coming from an objective-c background, is named parameters in method calls. Definitely one of my favorite parts of objective-c.

Any thoughts on adding anything like that?

</comment><comment><USER14> > it thrives to be

I think you mean: "it _strives_ to be"

<comment><USER9> Maybe he has a Lisp?!

<comment><USER15> or it's all part of some grand scheme...

</comment></comment></comment><comment><USER16> I think it's a prank set up by Ruby users, but don't see it anywhere in the text.

</comment><comment><USER17> This looks a _lot_ less syntactically confusing than D. Specifically, by describing it as "here's how to shorten the C you already want to write".

<comment><USER2> I'm part of the crowd who thinks it's too bad that D didn't get that far, that it was encumbered by licence issues and a syntax sometimes more complete than what you need.

I'm trying to stay minimal with ooc's syntax. From 0.3 on, it's heavily Io- inspired (Steve Dekorte and I are regularly discussing syntax matters.) and with operator overloading, generics, etc. you get a very expressive language at little cost.

In the end, it's just a bunch of new idioms to learn =)

<comment><USER18> D still has a few tricks up its sleeves, don't worry ;).

But nice language. It's pretty!

</comment></comment></comment><comment><USER19> I would love to see some benchmarks against c and c++.

<comment><USER2> Done and done, but it's not such a good idea.

ooc translates to C, and as someone mentioned, it's often the C you would write yourself.

What you would really be benchmark here is Garbage collector vs vanilla malloc/free. And whether one or the other is fastest depends greatly on your scenario (and on your malloc implementation, e.g. <http://goog- perftools.sourceforge.net/doc/tcmalloc.html> is looking good)

<comment><USER20> That your compiler produces C doesn't imply anything about performance. When you introduce general abstractions, you also make it harder to perform certain optimizations. It's still worthwhile, and potentially informative, to write an idiomatic OOC program, an optimized OOC program, and compare their performance to both an idiomatic C program and an optimized C program. (Solving the same problem, of course.)

Your statement "it's often the C you would write yourself" is a claim that you can support with numbers.

<comment><USER2> It's very difficult to determine what is "idiomatic", and how far to go.

For example, in ooc you often have to choose between classes and covers. When you don't need inheritance, covers is often enough, + you get to work on the stack rather than all on the heap (in that respect, ooc offers more flexibility than Java, and a little less than C++)

What would also be interesting is offering abstractions for parallelism in ooc, etc. and then differences in benchmarks would show for "idiomatic" implementations. (Very much like Haskell idiomatic solutions are sometimes faster than C ones.)

The challenge that programmers are presented with nowadays is much more than just rewriting a few tight loops in assembler ;) Concurrency and parallelism are the most important challenges for us now, imho.

<comment><USER20> Hey, you're the designer and implementer. You need to explore what idiomatic OOC codes looks like. If you pick up enough users, they'll evolve it for you, but you need to start it.

If you're interested in abstractions for concurrency and parallelism, I suggest you look at both Cilk and Apple's block extension for C (used in conjunction with Grand Central Dispatch). There are many others, of course, but those perhaps are the easiest fit into your language.

</comment></comment></comment></comment></comment><comment><USER21> For me it looks like a compilable python (with more complex syntax, of course) but with all the libraries of C.

The garbage collector without gc_free() means less control and memory leaks in complex programs (my biggest issue with python). I guess one could use malloc() and free() if they really want to (since C headers can be imported).

The hello world example is confusing though.

<comment><USER2> Hmm what is confusing in the hello world example?

And yeah, you can totally use malloc/free.

Either globally (e.g. just change the definitions of gc_malloc/gc_realloc etc. to be extern(malloc), extern(realloc), etc.) or locally for a specific class, e.g. overriding the "alloc" method of a class or writing your "new: static func() {}" yourself instead of relying on auto-new generation from "init: func() {}" methods.

We need more documentation =) Stay tuned.

EDIT: Added some docs here <http://ooc-lang.org/docs/memory/no-gc.html>

<comment><USER21> Thanks for the docs, what a quick and effective feedback !

Let's have a look at the "hello world" :

"Hello world!" println()

It is simple and short but makes no sense to me because the print function takes no argument and doesn't seem linked to the string "Hello world!" it prints.

When a function manipulate data, shouldn't it be passed as argument ? I would understand better:

println("Hello world!")

But maybe it's because it's not the first time I read code.

EDIT : OK, I just read your group post. Thanks.

<comment><USER22> println() isn't a function, it's a method/message passed to the "Hello world!" string object. The lack of syntax highlighting that (the strange dots) makes it difficult to notice.

</comment></comment></comment></comment><comment><USER23> Looks very cool. Any thoughts on adding closures?

<comment><USER2> Indeed =) It will be implemented very simply, as in the latest Vala release (in fact they should even be compatible).

<comment><USER23> Now I'm really salivating. Good work!

</comment></comment></comment><comment><USER24> Excuse the superficial review, but it looks like JSON, not C. Why the name association with C, apart from the fact that you can include C libs? Vala or D look much closer to C.

<comment><USER2> Actually, the syntax has evolved much since ooc 0.1 (which was then closer to C).

The main implementation is still a source-to-source translator to C99 so the name association is still justified.

Plus, if you don't like "ooc = object oriented C", you have plenty of choice. My personal favorite is "only on caturday". But YMMV.

<comment><USER20> That you compile (not translate) down to C is an implementation detail. I think you've deviated enough from C that a name change might help people's first impression - I had very different expectations because of the name.

<comment><USER2> Just curious - what did you expect?

And a name change isn't excluded, do you have any cool language name idea?

<comment><USER20> Backwards compatible with C with object-orientation. When you include the name of another language in your own name, I assume you're either a subset or a superset of that language.

I have no real suggestions, but it's worth noting that some popular languages have names with no relationship to the language (Java, Python, Ruby). I think perhaps the most important criteria are that it's a single syllable, easy to say, easy to type and doesn't have unfortunate associations.

<comment><USER2> I'm not sure what you mean with "Backwards compatible with C". You can easily use ooc code from C, and C code from ooc. What more do you want?

ooc is indeed not a superset of C syntactically. Objective-C is there for that, and its syntax is (imho) a mess.

You can mix and match C and ooc code at will =)

<comment><USER20> Please don't confuse this with an issue of what I _want_. It's just what I think the name implies.

"Backwards compatible" implies, to me, that if I take out the new features from the language, I'm left with legal code in the original language. This is markedly different than being able to _call_ one language from another. I can call Fortran code from C, and I would never characterize Fortran and C as "backwards compatible."

One is about source code compatibility. The other is about object code compatibility.

</comment></comment></comment></comment></comment></comment></comment><comment><USER25> i was going to say that there's already c++ or c#, but the language looks really cool. i guess the keyword there is "modern".

<comment><USER26> C# isn't modern? Do you know C#?

<comment><USER2> I don't consider C# a modern language.

C# is a good proprietary ripoff of Java, with a few things done right. Java itself was a wrong interpretation of Smalltalk with C++-like syntax to attract the masses and, they randomly crossed every feature they thought was "complicated".

What's modern about it? Except that they add bloat with each new version. The original C# wasn't so bad. Just my 2 cents =)

EDIT: Stay calm. The above is obviously an over-statement. I don't really care about C#. Relax. Breathe. Write some Python. Feeling better now?

<comment><USER27> What would you expect a "modern" language to be like?

Your opinion about C# is flat-out asinine. The original C# had less type safety. And it lacked anonymous delegates. And it required you to write out all your types. If you actually used C#, you would not decide that you'd rather use C# 1 instead of C# 3 unless you were deliberately being irrational.

<comment><USER2> Alright - before it becomes a troll =)

I have no definitive opinion on C#. I don't use it, don't really care about it, and yeah the fact that bloats comes with successive versions doesn't mean there weren't improvements as well.

In fact, bloat is often the price to pay for completeness/usefulness, and as I see it, C# is both quite complete and very useful (makes up for a lot of jobs now).

I'd expect a modern language to be either very minimalistic like Io, or very expressive like Scala, or very straight-forward like Python.

But I guess this is a point that would gain to be elaborated in a blog post or something - we're too limited here in the comment to say much of value.

<comment><USER20> If you're ignorant of C#, then you probably shouldn't make declarations about it. Your definition of "modern," while reasonable, is not a commonly accepted one, so be careful about using it without defining it.

<comment><USER2> You're right, now that I'm a public person, I must be careful what I declare. (Damn you, scope)

No seriously - who cares what I say? ;)

<comment><USER26> No one cares what you say until you start flaming something you know nothing about. Then some people develop a need to set the record straight.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER28> This looks great. Let's all hope bloat and feature creep don't turn it into C++ in a few years.

</comment><comment><USER29> I would like to take a look at this project, but the link to the source on github is broken.

<comment><USER30> The link on the download page seems to be broken. The correct one is on the community page: <http://github.com/nddrylliog/ooc/>

</comment></comment><comment><USER31> interesting.

will it be possible to use libs like QT and CUDA?

<comment><USER2> QT is C++ and CUDA is C so yeah, it would be quite straightforward =)

An ooc user has been looking into adapting [http://qt.nokia.com/doc/qtjambi-4.4/html/com/trolltech/qt/qt...](http://qt.nokia.com/doc/qtjambi-4.4/html/com/trolltech/qt/qtjambi- generator.html) to generate ooc QT bindings. If you're interested, join us on our IRC Channel #ooc-lang at Freenode

I'd be very interested in seeing some CUDA/ooc work!

</comment></comment><comment><USER32> Objective C && ooc == ?

Could it be a precompiler generating Objective C, while using the GC in Apples' frameworks?

<comment><USER33> oooc</comment></comment>


Ask HN: I want a Google Pixel. I want to keep iMessage. Any solutions? - <AUTHOR> <comment><AUTHOR> The only thing holding me back from getting an Android phone is the lack of iMessage.

</comment><comment><USER2> why should you choose iMessage? i suggest avoiding platforms that lock you in. long time ago i switch from SMS to whatsapp and other platforms that let me backup the msgs and easily switch between phones and laptops.

<comment><USER3> WhatsApp is locked to a single device and phone number. And the browser integration requires your phone to be connected to the internet. At least you can export the messages. I understand this is not "lock-in" but it isn't the best solution either.

</comment></comment><comment><USER4> Two phones ;)</comment>


Cohesion and Coupling in Large Projects - <AUTHOR> http://blog.architexa.com/2010/06/cohesion-and-coupling-in-large-projects/

<comment><USER2> "[F]ollowing some simple rules can help. Steps like providing intuitive names to methods and classes, moving closely related functionalities to a common class, or moving unrelated stuff out into appropriate classes, goes a long way towards helping to maintain a healthy code-base"

Well, you know, duh.

A reason there are such problems with code is not that developers don't quite know what they should be doing (though that is sometimes the case), but that many things that are easy to state in words are far from easy to do in practice.

What, exactly, is "intuitive"? Intuitive to whom? How exactly do you decide when things are closely related? By what measure?

<comment><AUTHOR> Hey James I understand its not always easy to implement the best practices on real application and I have amply mentioned that in the post. What I am implying is that if we keep these things in mind and at least make an conscious effort to follow them it does really help. When I mean intuitive I mean something which will give a decent idea what that method or class is supposed to do. Also I am sure you must have some idea of how you can group code modules your project. Moreover looking at types of cohesion can give a decent idea of what elements can be grouped together.

<comment><USER2> "When I mean intuitive I mean something which will give a decent idea what that method or class is supposed to do."

OK, but that's fraught with peril. You first have to know what the method or class is supposed to do now and in the future, and code has a tendency to mutate out from under you. The trouble is that the change can be slow and subtle, and then one day it strikes you (or, more likely, another developer) that the class has become kind of gnarly. The absence of fairly clear-cut guidelines means you're winging it all along.

"Also I am sure you must have some idea of how you can group code modules your project."

Things go together until the don't. Over time the behavior some code creeps over to some new realm, and one day you find the code a bit tangled. I'm wondering to what extent there are, or can be, applicable rules to alert you before your gut kicks in.

"Moreover looking at types of cohesion can give a decent idea of what elements can be grouped together."

True, understanding the different ways things can be associated can help. But there's quite a bit of subjectivity. Maybe that's unavoidable, but the article (and perhaps most similar articles) don't go far enough in discussion concrete, repeatable practices to deal with this, or discussing why this may not even be possible.

It is very much like design articles that advocate being "simple" without offering a compelling definition of simple or how you actually achieve it.

But that's the hard part.

(Also, I have to wonder to what extent this is more a problem with OOP and less with FP. )

<comment><AUTHOR> I know that methods and classes mutate and their functionalities change over time. And the day it 'strikes you :)' that it has become gnarly it is time to refactor. How you proceed to do that is a different issue.

Personally I haven't come across a set of guidelines having more in-depth solution than what I have tried to mentioned here which works in all cases. It is a question quite dependent on the type of project you are working on. I think the best person who can properly direct you is the Architect or somebody with experience who knows the project thoroughly.

<comment><USER2> In wondering about the funky nature of this problem, it occurred to me that it is an exercise in taxonomy.

        "There are only two hard problems in Computer Science:
         cache invalidation and naming things."
         --  Phil Karlton

Coupling and coherence are essentially about naming things, about identifying the core nature of something.</comment></comment></comment></comment></comment>


One More Case Against Tipping - <AUTHOR> http://www.vox.com/2014/7/17/5888347/one-more-case-against-tipping

<comment><USER2> Regardless of the validity of the whole argument, the numbers and that graph are ridiculous. People working a job that requires no skill and no education are more likely to live in poverty than other workers?!?!? Thats just crazy...</comment>


The First, The Free, and the Good - <AUTHOR> http://stevenf.com/2008/03/the_first_the_free_and_the_good.php

<comment><USER2> Products also get really nuanced at the higher "Power user" skill levels since users tend to specialize their skills in ever more specific ways.

For instance, in my line of work if you are a 3D generalist, it won't matter a ton what of the top 3 or 4 animation packages you go with, but if you specialize in really really high end character animation it matters very much.

Taking it even further, if you are setting the bar for character animation the way Pixar or Dreamworks does, you'll be using highly customized very specific tools written directly to handle the specific requirements of a particular film script.

</comment><comment><USER3> Before debunking the "conventional wisdom", it'd be nice if the author would read up on it. The only insight added by this blog post is the dubious notion that the first-to-market wins a sustainable niche; that's been untrue as often as it's been true.

Otherwise, the idea that markets converge to a major winner on cost and a niche winner on product quality is basically marketing 101.

</comment><comment><USER4> I really like this characterization. The question is: does it apply to things that live/die by the network effect?

</comment><comment><USER5> This is similar to cheap/good/fast. Two out of three is usually as good as you can do.</comment>


Why are all web browsers so bad? - <AUTHOR> http://plc.vc/web-browsers

<comment><USER2> This "rant" is exceptionally incoherent/convoluted -- at times arguing against itself:

 _> The fact web browser technology are mostly the same across browsers is great for developers, but users never cared: because the market leading web browser defined the technologies people could use. And the people using the market leading web browser were unaware of the compromises other web browsers used._

What is being said here? That respect towards web standards is not important? Sure, when Internet Explorer had over 90% market share and was in the actual position of defining what the web looked like users didn't care. And they continued not to care for over 5 years as IE stagnated the entire world wide web due to the simple fact there was no competition and therefore no reason to innovate.

The author thinks today's browsers are bad? Without Firefox causing Microsoft to wake up you'd probably still be using IE6 today. At least with standards in place it's possible to have some reasonable balance between browser competition and an actual functioning web.

 _> My other problem with Safari is that they are doing fuck all with it. It gets updated, what, twice a year?_

That's what I mean by "incoherent/convoluted -- at times arguing against itself".

The rest of the rant is just assigning opinion based importance to certain features over others. I personally couldn't care less about sharing my tabs across devices -- in fact, with my personal workflow that would often end with my cell phone automatically trying to load 50+ tabs that I left open at work while researching a problem. While on the other hand, I could not get by without a searchable browser history, even if it is just to find some news article I read 6 hours ago. The author claims this feature is useless because of Google -- yet I don't find Google to be a sufficient answer when trying to find content which was only posted a few hours ago.

</comment><comment><USER3> The article pretty much says "Today's browsers are bad because they don't support all the things _I_ want".

Well, I don't want the stuff you're talking about. How 'bout that?

</comment><comment><USER4> "Mozilla, rightfully or wrongfully (let's be honest, the latter) is tied to ethics or standards over delight. Boring. Firefox isn't even in the game at this point."

Nothing to see here folks.</comment>


That no-click iOS 0-day reported to be under exploit doesn't exist, Apple says - <AUTHOR> https://arstechnica.com/information-technology/2020/04/apple-disputes-report-of-non-click-ios-0day-under-exploit-for-two-years/ <comment> Pick-A-Hill2019 Ok, so ZecOps say they have a working POC for the 0-Click (which doesn't seem to be in dispute). What does seem to be in dispute is whether or not either vulnerability was used in-the-wild. Apple responsed that it would need to be chained. ZecOps points to a Project Zero blog. Some are questioning about why if it was able to delete the email why it did not also delete the crash logs. Not an iOS expert but the original claim was that the exploit was able to run as maild etc - is that level of access able to delete crash logs?</comment>


Looking at Chess Futures? Bet on This Norwegian Chess Prodigy - <AUTHOR> http://www.nytimes.com/2008/08/31/arts/31mccl.html?_r=1&ref=arts&pagewanted=all&oref=slogin <comment><USER2> _Their fervent sibling rivalry is the rare blot on a home life that seems almost idyllic._

This "blot" is probably a major source of his success. Competing with siblings (as with anyone else) fuels personal growth; sibling rivalry is a double win because it allows children to probe out "fair" ways of competition as well* . People too often confuse sibling rivalry with sibling acrimony.

* Children have to probe out a lot of unspoken rules for themselves ("Mommy, I have to poop!" "Sweetie, you say 'I have to use the restroom.'"). Learning these rules in your house with people you love means the lessons are less traumatic than having to learn them at 20 in the real world where the consequences are more serious.</comment>


Looking for a Python dev for a gig (AWS and GuniCorn and Cloudflare etc.) - <AUTHOR> Hi all -
We're looking for a python hacker, who can build us a pretty simple app. Our team has too much on their plate and that's an easy one to contract out.
- hosted on AWS of GCS - using GuniCorn - implement Cloudflare - etc.
Spec is fully written, we even have old code that did a lot of the work.
It's likely less than a week worth of work and could lead to a number of follow on projects.
Please reach out to firstname.lastname@example.com
Thanks so much! Nick <comment><USER2> Please post in "Ask HN: Freelancer? Seeking freelancer? (August 2020)" [https://news.ycombinator.com/item?id=24038519](https://news.ycombinator.com/item?id=24038519) instead.</comment>


There's an Intel Inside Your Computer – But for How Much Longer? - <AUTHOR> https://www.forbes.com/sites/barrycollins/2020/04/16/theres-an-intel-inside-your-computer--but-for-how-much-longer <comment><USER2> I'm incredibly scared of a future where all personal computing is restricted by large companies. We see Microsoft, Apple and Google all moving in the direction of releasing almost completely opaque hardware that only works with their own software.</comment>


Penrose: create diagrams by typing mathematical notation in plain text - <AUTHOR> http://penrose.ink/ <comment><USER2> It's a bit weird to name a project after a living person without mentioning them or the motivation for the name.

<comment><USER3> I was curious about that as well. With the project name _Penrose_ there was a suspicion (more like a wish) that _maybe_ this was to be prototype work for an interactive digital rendering of the Roger Penrose _Road to Reality_ physics tome but a quick poke-around of project members bios turned up no personal linkage to Penrose. Just happened to listen to Penrose at Princeton when he promoting that book about 15 years ago.

</comment></comment><comment><USER4> WOW! This is an amazing idea and an amazing implementation. Reading the intro paper [1] and checking the example [2] made me eager to try this. If this can indeed be successfully worked into a tool for the "laymen" (in computers and drawing, that is, not in the domains in question) what an great tool it will be!

[1] [http://penrose.ink/PenroseIntro2018.pdf](http://penrose.ink/PenroseIntro2018.pdf)

[2] [https://github.com/penrose/penrose](https://github.com/penrose/penrose)

</comment><comment><USER5> I'm so inspired by this vision. I'm excited to interview creator Katherine Ye [1] on my podcast [2] later this month!

[1] [https://www.cs.cmu.edu/~kqy/](https://www.cs.cmu.edu/~kqy/)

[2] [https://futureofcoding.org](https://futureofcoding.org)

</comment><comment><USER6> Has anybody tried both Penrose and TikZ? How do they compare?

<comment><USER7> Penrose currently seems to be a very limited work in progress. Such comparison will have to wait.

However, in the few Penrose examples shown, all the positioning seems to be done completely automatically, which is _incredibly_ difficult to make work in all but the simplest and most standardised situations. In TikZ most positioning is manual, which takes more effort, but which I think is likely to produce better results in general.

<comment><USER8> Yes, automatic positioning is the goal, and one of the key differences vs. TikZ (the other being a separation of substance--the math--from style--the graphical representation). It's difficult, which is why there is real graphics research in the project.

Penrose enables the user to tweak the diagram manually after it is produced. Constraint solving continues to apply during the tweaking so that if you grab a shape, then things attached to it will move as well. Our goal is to get end results as good as, or better than, TikZ, while staying at a higher level of abstraction.

<comment><USER7> How deterministic will the results be? One advantage of programmatic systems is that because they don't try to be smart, you know exactly what you're going to get, and e.g. upgrading the system won't move things.

Another is that tracking changes with version control systems is easy and clear. Does Penrose have a canonical textual format that changes minimally as tweaks are made?

TikZ styles do let you separate substance and style fairly well (though lay users are unlikely to take full advantage).

<comment><USER8> We could make things deterministic by fixing the algorithms and a random seed, and/or by fully constraining every object in the diagram so randomness is not used. But that isn't using the real strengths of Penrose, so we expect it to be a secondary use case at best.

One way to think about the goal of Penrose is that you will get a result that is predictably good, and you can constrain it to get a diagram of a particular shape if you want to, or alternatively leave it open and have the solver show you 3 good diagrams...then you can pick one and tweak it further (aided by constraint solving as you tweak) to make it great. The problem with drawing- tool style systems is that you have to adjust the location of every label (for example); that's the kind of thing that should be solved for you. TikZ doesn't have a rich constraint language and solver, so in many circumstances you're left with a choice between doing lots of things manually or getting a poor- quality diagram.

Penrose will have a canonical textual format, but as it is under active development, it wouldn't make sense to say it has a stable textual format now.

</comment></comment></comment></comment></comment><comment><USER9> It would also be helpful to see a comparison to tools like asymptote:

[https://en.wikipedia.org/wiki/Asymptote_(vector_graphics_lan...](https://en.wikipedia.org/wiki/Asymptote_\(vector_graphics_language\))

<comment><USER8> With Asymptote you specify diagrams directly in terms of low-level graphics primitives and constraints. With Penrose you specify the underlying math, then one or more separate style files are used to automatically generate diagrams based on the math. The typical user of Penrose doesn't have to know anything about graphics, and never specifies any graphical objects; instead, that knowledge is in reusable style files written by domain experts.

</comment></comment><comment><USER10> > the PENROSE pipeline is designed to be end-to-end differentiable

</comment><comment><USER11> Upon quick glance, it seems limited to diagrams in the field of linear algebra and perhaps a few related fields. Is this correct? How broadly is it applicable?

(I'm still hoping for a tool that can make flowcharts with user-defined constraints, such as minimize number of edge crossings, then minimize total edge lengths, etc.)

<comment><USER4> From their paper, it seems you can write a 'style' file for anything you can possibly want. Users then write the declarative code you see which Penrose interprets with respect to that 'style' file to know what to actually do.

<comment><USER12> this is the exciting part to me; is there any constraint that the output has to be a 2-dimensional figure? I could imagine a style file that outputs a blender scene with a time dimension, or a VR scene that you can interact with in the same way they describe dragging one of the vector heads and having it recalculate the rest of the model.

</comment></comment></comment><comment><USER13> It looks neat, although the installer side of it looks to still be messy enough to warrant my waiting a bit before installing it in linux.

<comment><USER14> Yes it is a bit of a palava to get running but you can get it running straight out of eg ~/src/ with $ git clone [https://https://github.com/penrose/penrose.git](https://https://github.com/penrose/penrose.git). Follow [https://github.com/penrose/penrose/wiki/Building-and- running](https://github.com/penrose/penrose/wiki/Building-and-running) I use Arch Linux but I'm sure no one will hold that against me (package names like _this_ ):

You will need a JDK (I installed _jdk8-openjdk_ ) to get a javac (needed when you run make in src). You may also need _ghc_ for Haskell although the thing seems to install another one locally. I installed _stack_ and then _happy_ and then "stack build" finished OK. alias runpenrose=</very/long/path/in/home/bin/penrose>. Substitute "python -m http.server" for "python -m SimpleHTTPServer" because Python3 and the rest of the example works OK.

Simples 8)

</comment></comment><comment><USER15> Neat; now I am left wondering if this could be also implemented as applying a sty.xsl to a sub.xml in order to get an SVG.

<comment> dan-robertson Well xsl does not include interactivity, and it's functions are not much fun. So I'm not really sure anyone of sound mind would want to implement a nonlinear constraint optimiser in xslt.

<comment><USER16> You can use XSL to generate code to which javascript is later attached. I did that a couple times when I was young and foolish. Also, SVG supports JS natively, I believe.

That's not to say I would recommend it. No objection to your other points.

</comment></comment></comment><comment><USER17> Great Haskell project!

</comment><comment><USER18> Cool! Kinda like d3 but without javascript.

</comment><comment><USER19> Why use this instead of latex?

<comment><USER20> LaTeX is for _type_ setting and notation, which it's quite good at. On the other hand, designing, laying out, and constructing pretty _diagrams_ in LaTeX is very much NOT where LaTeX shines.

<comment><USER7> TikZ is good for pretty diagrams, and is entirely contained within (built with) LaTeX.

<comment><USER21> TikZ creates pretty diagrams. I've had partial success using it, with my beginner-level LaTeX knowledge. I'm not convinced that it's possible to become comfortable with TikZ syntax, without hundreds of hours of LaTeX experience. I'd love to be proven wrong, of course.

<comment><USER22> I have had thousands of hours of experience with latex and dozens with tikz. I still struggle with it. Its just that Latex has terrible syntax for function declaration, loops and conditionals and tikz inherits all these problems. My workflow is usually to go to [http://www.texample.net/tikz/examples/](http://www.texample.net/tikz/examples/) a lot and use the examples as reference code to whatever I am doing.

The manual for tikz exists but I have never really read it.

<comment><USER21> That's reassuring, if unfortunate. Thanks.</comment></comment></comment></comment></comment></comment>


Hacker School Residency - <AUTHOR> http://pgbovine.net/hacker-school-residency.htm

<comment><USER2> FYI: the github link 404s. I think the file was removed. It should be [https://github.com/astrosilverio/english/](https://github.com/astrosilverio/english/)

<comment><USER3> thanks ... fixed! ha i wish my antiquated website could take pull requests

</comment></comment><comment><USER4> Does this other variation exist?

"What do Hacker School students not look like? They're not programmers looking to spend three months prototyping their next startup product"

<comment><USER5> Isn't that Y Combinator, or any startup accelerator?

<comment><USER4> No. Some people don't need money and they don't want to give away equity. They just want to work with, or near, like minded people.

<comment><USER6> Try Stanford.

</comment></comment></comment></comment><comment><USER7> Cool, reminds me of Cyberhippietotalism, a residential hackerspace. An average of 4-5 people in the house, being able to improve your programming skills, learn to cook a really good meal, and have a lot of fun on the go in a warm climate (Canary Islands).

</comment><comment><USER8> Very interesting! Hacker School seems like something I'd like to do once I get my coding chops above absolute beginner level, it's nice to read a personal account of someone's experience. Hopefully I'll be applying sooner than later!

</comment><comment><USER9> What's the closest thing to Hacker School in SF? Does anyone have experience going through alternative coding education programs (as opposed to colleges, books, self-study)?

<comment><USER10> I did some research on my own as I am currently applying to these "hacker accelerators." I think that Hacker School is unique in its lack of structure. This is the second article I have read in which a Hacker School fellow has compared their experience to grad school.

Most of the programs here in the Bay (HackReactor in SF, Hacker Dojo in the Valley) are actually schools where there is a set curriculum in order to prepare you for the workplace.

<comment><USER11> This is correct. The point of attending HackReactor, Dev Bootcamp, etc., is to gain a specific set of skills (often starting from zero) that will get you a job. The point of attending Hacker School is to _become a better programmer_ , whatever that might mean to you (note that you have to already _be_ a programmer in order to know that you want to do this).

EDIT: I do think it's unfortunate that Hacker School is basically unique in this regard; its an amazing thing.

<comment><USER10> I see you're a current undergraduate and also a Hacker School alum. How was your experience? Did you feel that you had the adequate knowledge to get the most out of Hacker School? I'm saying this as someone who is trying to decide when to go (sooner or later).

<comment><USER11> Hacker School was an amazing experience for me; I had been programming on and off for ~2.5 years when I attended last summer. Feel free to drop me a line if you want to chat more about it (email in profile)

</comment></comment></comment></comment></comment><comment><USER12> Awesome post! Very accurate and well written description of Hacker School.</comment>


Who Pays the Price for Selling $10 Bills for $5? - <AUTHOR> http://theengineeringmanager.com/growth/who-pays-the-price-for-selling-10-bills-for-5/ <comment><USER2> Gig workers are not the only losers.

Any small business which doesn't receive VC funding is also disadvantaged because they aren't able to give consumers the same kinds of deals that these consumers have gotten used to.

What some of those big VCs have been doing is criminal and has been hurting both workers and value-producers for over a decade. I hope that they'll end up in jail after it all goes belly up because this is very serious.

It's not hard to see what's really happening; VCs are shoving investors' money into each others' pockets and then dumping the bi-product on the public market so that the public foots the bill... A lot of which ends up taking a chunk out of regular people's retirement funds.

The crime is made even worse by the fact that many of those who end up footing the bill don't even have a choice. If I have a compulsory retirement fund like 401k or Superannuation, then I often don't have much say about where my money is invested... Maybe it goes to an index fund; part of which goes to big corps like Google which then use the money to acquire worthless VC startups from people who are friends with executives.

<comment><USER3> Everyone is a loser except for the investors. If you really take it to the logical conclusion, the business model is Dumping [1]: capture the market, drive out everyone else, then jack up prices when you are the only show in town. And the winners in the endgame are the investors.

[1] [https://en.wikipedia.org/wiki/Dumping_(pricing_policy)](https://en.wikipedia.org/wiki/Dumping_\(pricing_policy\))

<comment><USER4> I'm not doubting your point, but at the same time I struggle to name an example that did the "then jack up prices when you are the only show in town" step.

<comment><USER5> While not reaching literal "only show in town", Wintel did exactly this when reaching dominance.

</comment></comment></comment></comment><comment><USER6> Remember that we've been here before: Groupon actually ended up BEING a straight-up ponzi scheme that is now worth a small % of what it IPO'd for as a conglomerate of all of its competitors (LivingSocial, etc.).

And do not forget that some % of folks driving for Lyft and Uber are doing so in cars that are financed with subprime debt.

[https://usa.streetsblog.org/2019/02/13/americas-car- centric-...](https://usa.streetsblog.org/2019/02/13/americas-car-centric- transportation-policies-are-driving-us-to-ruin/)

$1-1.5 T in auto debt is not 2008 subprime mortgage debt, but it's important to remember that a real tie-in to the publicly-chartered banking system exists here beyond whatever LPs put into VC funds.

How I see this playing out, post-ipos:

Wall Street will demand profits, Uber/Lyft will raise fares because it's the only thing they can do, fewer riders will use the apps, causing fewer drivers to drive -- they will have to walk away from their car loans.

GMAC will need to be bailed out again.

</comment><comment><USER7> I genuinely don't understand the argument that tech companies are hurting society by providing lower paying gig-economy jobs.

By providing more jobs, these companies are increasing options for workers looking for jobs. No one is forcing Uber drivers to drive passengers.

If there is a shortage of labor, then the prices paid to workers will increase due to market forces. If there is not a shortage of labor, then people that need jobs are finding them.

<comment><USER8> It's not the volume of jobs, it's the quality.

Driving a taxi or delivering food is a pretty bad job, doing it as a self employed contractor is almost criminal. You have to cover all your own expenses and have no guarantee of work, with zero progression (ever heard of an Uber driving saving up and staring their own minicab business?). It's a terrible economic decision.

The market does not correct for this as it is entirely controlled by a small group of companies.

<comment><USER9> Again, nobody forces you to do this so what's the point?

<comment><USER10> I think you're demonstrating a point of view that's tragically common here on HN - you're assuming that people are never desperate, and that they always have an alternative to choose instead. _Many_ people are in the position where they only have one option and have to pick that to earn a living. That's not _strictly_ being forced to work a job that sucks, but the reality is they don't have a choice if the alternative is starving or losing their home.

So sure, nobody is forcing anyone to drive for Uber, but there are people who _have_ to drive for Uber because they don't have any other opportunities in the short term.

<comment><USER11> If you remove the opportunity to earn _some_ money with gig work, you are forcing them into their next best alternative, which is starving or losing their home. I don't see how that makes people better off.

<comment><USER12> The "gig work" jobs crowd out other, better-paying and/or better-benefited jobs because the companies brokering them (Uber, Lyft, etc) are able to operate without turning a profit.

It doesn't help that these jobs often have an attractive shine to them up front—fast, easy money! all you have to do is drive around!—but hide lots of costs—like massively increased wear and tear on your car—that there's no advertisement about, and no help in covering. If you have to keep driving to keep food on the table, it's also that much harder to take the time required to find a better job (though admittedly, that's not really qualitatively different from most low-end hourly-paid jobs, though it may be quantitatively, if your expenses end up wiping out enough of the income that you're effectively getting less than minimum wage).

</comment></comment></comment></comment></comment></comment><comment><USER13> Money Quote:

> I once read a tongue-in-cheek description of San Francisco as "an assisted- > living community for tech workers in their thirties". This snide jab pokes > fun at the wave of Silicon Valley startups creating services and products > for a stereotypical technology worker in the city. Nowhere to park your car? > Uber and Lyft can get you around. Too busy working to cook and do grocery > shopping? Postmates can deliver your lunch and dinner. Living in an > apartment too small for a laundry room? Rinse can do your washing.

<comment><USER14> This one goes back about four years:

"OH: SF tech culture is focused on solving one problem: What is my mother no longer doing for me?"

[https://twitter.com/azizshamim/status/595285234880491521](https://twitter.com/azizshamim/status/595285234880491521)

</comment></comment><comment><USER15> So, in the end, the analogy breaks: turns out, the companies found out a way to procure $10 bills for ~$6 and then (after initial growth phase) to get it as low as ~$3-4 and finally make a profit.

Now, the logical question is to ask, why is anyone willing to provide this $10 bill for such a low price to begin with? Or, to switch from the analogy back to the subject matter, why are people singing up for the gig economy jobs? The author puts the blame on the unicorns - but they did not create the environment in which a gig worker is willing to accept such a job.

<comment><USER16> > why are people singing up for the gig economy jobs?

Despair and deception. Companies have figured out how to shift costs onto their employees, then claim that those employees are "independent contractors." Uber is a global taxi company that pays millions of employees starvation wages. It sells itself as an SV "technology" company that pays a few thousand employees a few hundred thousand dollars a year to convince people to wear out their cars for less than minimum wage.

<comment><USER15> Uhm, but these are different companies that start with this proposition for workers from the beginning. That's not what's happening: the old and new models of employment are offered by different companies that compete on the same labour market. And new companies that work with the gig model did not create this labour market.

<comment><USER16> See "deception:" most people underestimate the cost of using their car as a taxi or delivery vehicle. This is also why Uber would be much less profitable if it deployed its own self-driving cars, and probably has to convince "independent contractors" to buy and maintain its fleet.

<comment><USER15> You're talking about costs, but why does this matter at all? It's a market, so you should talk about supply and demand instead. People who decide to work for Uber have plenty of other options: stay without a job, land other low-paying job, etc... Uber is not their only possible employer, nor it is in a cartel with other low-wage job companies. It cannot dictate it terms to employees. If they accept the Uber's offer, it's only because that's what labour market is like.

Trying to blame it at Uber or inventing some kind of evil conspiracies are all futile attempts to omit a simple depressing fact: people working at these low- wage jobs don't have opportunities to do anything that would be more valued by society.

<comment><USER16> > people working at these low-wage jobs don't have opportunities to do > anything that would be more valued by society.

And that same society made Travis Kalanick the 115th richest person in the world. There are two sides to this equation, and shrugging your shoulders and saying "supply and demand" is taking a side.

<comment><USER15> Yes, and after my life improved so significantly after old-style taxis have been replaced by taxi apps, I'm more than content with Kalanick's compensation.

<comment><USER16> Sweet. Those people who drive for less than minimum wage are mostly water, but they also contain proteins and other trace elements. A centrifuge can separate that out.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER17> A fun thought experiment: how _could_ you go from selling $10 bills for $5 to selling $10 bills for $15?

<comment><USER18> Replace all of the ports on the bill with a single USB-C port and call it _revolutionary_?

Edit1:

/s

Slightly more seriously, you could promise to anyone who bought a $10 bill that in some _x_ number of years they could redeem that bill for $20. This is called "being the Treasury and Federal Reserve".

The hard part is finding a way to invest the $5 of profit they gave you in an asset which will appreciate faster than your promised return.

Edit2:

This is not advisable, see "Bernard Madoff, Ponzi Scheme".

<comment><USER19> That gave me another idea which I haven't considered the implications of, but it sounds fun and video game'y:

Electronic/Smart bills, that keep track of how many times they've been used to purchase stuff with.

After a bill has been circulated N times, it increases in value by Y, and/or unlocks special artwork.

Some bills may become highly sought-after collectibles worth far more than their face value.

Would it help or harm the economy?

<comment><USER18> Well that shifts the value away from the bill being a promissory note and back to being the actually valuable item. Kind of like a commodities backed currency, which most nation's try to avoid.

<comment><USER20> The amazing thing about currency being actual valuable things (like precious metals or gems) is that it cannot be devalued by "printing" more of it from non-valuable things.

Nations try to avoid this because they can spend freely on a promissory note currency system. It is a recipe for disaster in the long term.

</comment></comment></comment></comment></comment><comment><USER21> I get the author's point that they don't like investing in companies that hoover up investment dollars, but the selling $10 for $5 example annoys me. Any GAAP-based income statement starts off total income minus cost of that income equals gross income. Check out the income statement for Amazon...

[https://finance.yahoo.com/quote/amzn/financials/](https://finance.yahoo.com/quote/amzn/financials/)

Amazon lost money for a bazillion years, and they continued to get investment dollars. What is one reason that Amazon could do this? Because they were selling things for less than it cost to make or acquire these things. If Amazon's business model was to buy a book for $10 at Barnes & Noble and sell that book for $5 on Amazon.com, they would never have gotten off the ground.

None of the companies in this article buy something in this spend $10 make something they sell for $5.

Interesting article. Bad example.

</comment><comment><USER22> Wouldn't this scheme be akin to a ponzi one, in some way?

This holds true for startups as well: foster interest in the company, launch it with some initial inertia (VC funds), collect investors' (stock holders) money, and see the stock skyrocket. Little risk for everyone involved (but the buyers).

Of course, that's only a pyramid scheme if the business isn't intended to turn profitable (VC firms do not care), and stock holders are placing a bet.

But I wonder: if one were to look at the whole stock market, wouldn't it also look like a big pyramid scheme, if squinting a bit?

</comment><comment><USER23> Aside: I'd suggest removing the -webkit-hyphens:auto property from the title. When I load the page in Safari it appears as:

        The Engineering Man-
        ager

<comment><AUTHOR> Thanks - had no idea.

</comment></comment><comment><USER24> I wonder what the answer is to these two questions:

\- Once we've driven out the competition, what prevents some other VC-backed firm from playing the same trick? If customers go for the cheapest thing -and let's face it, taxi and food delivery are not differentiable- won't there always be another disruptor?

\- If there's a monopoly that lets us make huge profits, wouldn't the government come and do something about that?

<comment><USER20> > -and let's face it, taxi and food delivery are not differentiable- won't > there always be another disruptor?

Drones and perhaps, down the road, teleporters.

<comment><USER24> Right and then the trick will be to make the cheapest drone delivery? How is it ever not a race to the bottom?

</comment></comment></comment><comment><USER25> TL;DR:

The traditional VC backed tech startup growth curve is an exercise in giving something away for less than it's worth, such as selling a $10 bill for $5. This is done to dominate the market. You will become very popular very quickly and dominate the $10 bull market by selling them for $5. After dominating the market you must find some way to become profitable. Often when a company tries to raise prices and become profitable they find that the market evaporates, you won't sell many $10 bills for $11 even if you run a managed service that makes it convenient. For "gig-economy" startups this screws the workers because their jobs evaporate with the market. The article ends with a call to action.

<comment><USER26> Also, there seems to be no personal accountability for those who lost all that money. I can set up a business that sells 10$ notes for 9$, convince a number of VCs and/or shareholders to cover the losses, and live the sweet, exciting life of the entrepreneur until the game is over. By the time the value of the company drops to zero, I'll probably have accumulated enough cash to live comfortably ever after.

<comment><USER27> Why should anyone else be accountable for sophisticated investors' failure to do their due diligence?

If I go to the Kentucky Derby put $1000 on Fancy Dancy Magic Prancy, it's hardly the horse's fault if my gamble doesn't pay off.

<comment><USER28> It's not the investor that decides to give money to the $10 bills seller. It's a third party.

Now, I don't know what kind of punishment the GP wanted to see. If the question is why doesn't all the money run away from the VP's fund, I wonder about that too.

<comment><USER27> Don't you have to be an accredited investor to invest in venture capital and angel investments?

</comment></comment></comment></comment></comment><comment><USER29> Isn't the revenue 50k, and the loss (minus) 100k?

<comment><AUTHOR> Don't be ridiculous! It doesn't say that... ;)

<comment><AUTHOR> Fixed it now, I think.

</comment></comment></comment><comment><USER30> Illustrates how VC backed startups are more of a product on their own.</comment>