Comparing C and C++ usage and performance with a real world project - <AUTHOR> http://nibblestew.blogspot.com/2017/09/comparing-c-and-c-usage-and-performance.html <comment><USER2> I'm going to be the first to point out the one major flaw in this comparison: "plain C using GLib" is not comparable to "C++ standard library only" \--- what should be compared is "C++ standard library only" and "C standard library only". Reimplementing pkg-config in pure C without GLib would be necessary for that.

As for the "memory leaks" \--- I haven't looked at the source, but something whose runtime is very short-lived, like pkg-config, may be very well justified in allocating and never freeing, letting the process exit itself be the "ultimate free". I've seen and done this many times myself.

I've seen projects that turned from simple and straightforward to buggy (and harder to debug), slow, and bloated because someone decided they wanted to "use C++" and would try to make use of as many "modern C++" features as they could.

 _Converting an existing C program into C++ can yield programs that are as fast, have fewer dependencies and consume less memory. The downsides include a slightly bigger executable and slower compilation times._

My experience has been the complete opposite.

<comment><USER3> Reminds me of this anecdote I came across on the internets one time: [https://groups.google.com/forum/message/raw?msg=comp.lang.ad...](https://groups.google.com/forum/message/raw?msg=comp.lang.ada/E9bNCvDQ12k/1tezW24ZxdAJ)

<comment><USER4> I have heard of calculating a "memory budget" and pre-allocating that, but calculating a "leak budget" and doubling that doesn't seem like hygienic programming.

<comment><USER5> Doesn't have to be hygienic, it's enough that fixing it doesn't justify the time/money costs for the programmer.

<comment><USER4> We wouldn't want the programmer to spend too much money/time on fixing errors. After all, it's not like people would die if there's an error in the missile software: [http://www.gao.gov/mobile/products/IMTEC-92-26](http://www.gao.gov/mobile/products/IMTEC-92-26)

Not to mention they added even more HW to work around the leaks. No wonder those projects always run over budget.

<comment><USER5> > _We wouldn 't want the programmer to spend too much money/time on fixing > errors. After all, it's not like people would die if there's an error in the > missile software_

When exactly did pkg_config became missile software?

As they say in meme-land, "that escalated quickly".

Here's a novel idea: how about the appropriate level of effort/time/YAGNI- stuff based on the domain?

Or do you write one-time scripts with MISRA rules?

<comment><USER4> The sub-thread I replied to was linking to an anecdote about missile software.

But I still think not freeing is pretty lame even in short-lived tools. If one is using a no-op deallocator at least the code is designed properly and could be repurposed.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> The minor discussion on the C version's memory leaks reminded me of a neat trick. If you're developing a short lived application, like pkg-config, you can opt to never deallocate. i.e. leak everything. In lightweight, short lived applications there's usually not a lot of incentive to deallocate; your application will never use much memory anyway and the deallocations waste time.

You can think of it like treating C as a garbage collected language, except the garbage collection cycle occurs only once at the end of the program :P

It really can be an effective trick. Deallocation isn't free, and under certain loads can be quite expensive.

The 1000+ leaks in the C version might actually be what's giving it the slight run-time advantage.

<comment><USER7> Or take that even further and allocate a slab that's big enough to last the entire runtime and send malloc on vacation. It's worth repeating, with todays focus on web-frameworks, cloud-providers and dogmatics these ideas are slipping into obscurity; which is a shame given how beneficial they can be if your program fits the use case.

<comment><USER8> And, instead of using pointers into said memory, use indices so that the slab can be reallocated, or just mmap more pages following the slab if you own the process address space. Also, align properly. And having guard pages is always nice. Freeing on exit too, one single deallocation is pretty cheap.

I've seen programs building ASTs with hundreds of millions of nodes, where all the nodes were allocated by a separate malloc call, and ref-counted... More than one-third of the startup time (which was counted in minutes) was calls to malloc and free. Some optimizations were made, but in the end we ended up reducing the size of the AST instead of fixing the allocations.

<comment><USER9> Ouch.

Last time I did any serious parser work I used a pool allocator so I could free all the nodes at once, so allocation was just a compare + increment operation. Although that was forced on me by the difficulties of error recovery in yacc.

</comment></comment></comment></comment><comment><USER10> > .. which is written in plain C using GLib ..

That's about as "C" as C++ is. Why not Gneural or libpng or even GNU make ?

[http://git.savannah.gnu.org/cgit/gneuralnetwork.git](http://git.savannah.gnu.org/cgit/gneuralnetwork.git) [https://github.com/glennrp/libpng](https://github.com/glennrp/libpng) [http://git.savannah.gnu.org/cgit/make.git/tree/](http://git.savannah.gnu.org/cgit/make.git/tree/)

</comment><comment><USER11> according to dan saks, who apparently to some people is famous c++ is faster than c (well in the test setup he describes below)

[https://accu.org/content/conf2015/DanSaks- Embedded%20Program...](https://accu.org/content/conf2015/DanSaks- Embedded%20Programming%20Death%20Match.pdf)

        Language   Design Implementation  Relative Performance
        either any inline 1 (fastest)
        C++ polystate non-inline 1.56 x fastest
        C++ bundled non-inline 1.65 x fastest
        C polystate non-inline 1.70 x fastest
        C bundled non-inline 1.79 x fastest
        C++ unbundled   non-inline 1.82 x fastest
        C unbundled   non-inline 1.95 x fastest

He furthermore argued that the biggest mistakes C++ developers did to kill the adoption of C++ for C programmers was to diverge from the previous line of "C++ is a better C" to "if you're using C++ as a better C you're doing it wrong"

[https://www.youtube.com/watch?v=D7Sd8A6_fYUI](https://www.youtube.com/watch?v=D7Sd8A6_fYUI)

(I have no skin in the game, I was just curious to see if it's worth looking at rust for embedded when I came across that talk)

<comment><USER12> > "if you're using C++ as a better C you're doing it wrong"

As far as correctness and safety goes, this is still true. It's difficult to scale systems-level programming to large teams. C++ gives the opportunity for more explicit semantics and more aggressive compile-time checks. C _can_ scale well and _can_ be used safely, but you need to do a lot more through convention (always call xyz_Create and xyz_Destroy in pairs!) and through runtime checks (calls to assert, unit testing).

D, Rust, OCaml, and a few other projects are interesting in this space since they provide some of the same benefits as C++ with respect to correctness and safety. Some are plausibly better in theory, though I'm not aware of huge, say, Rust projects that approach the size of huge C++ ones.

<comment><USER13> > D, Rust, OCaml, and a few other projects are interesting in this space since > they provide some of the same benefits as C++ with respect to correctness > and safety.

Can you name a correctness and safety benefit that C++ has that these programming languages do not?

<comment><USER12> I didn't mean to imply that C++ was safer somehow. I just meant that those languages are also competing in that feature space in a way that C doesn't.

And, on a pedantic level, C++ competitors can't provide exactly the same benefits of C++ because they took different approaches.

What's a key design difference among these languages? Well, C++ can mostly just #include a C header file and go with it. The other languages provide FFI mechanisms, but they each require declarations of the FFI to match the compiled C code. So theoretically there's a little more room for errors in that translation, though I doubt that's a big concern on the whole. Each of those languages have more mature module systems, which should more than make up for keeping FFI interfaces in sync with C headers.

</comment></comment></comment></comment><comment><USER14> The aside about Rust is a total straw man. Obviously no one with even a modicum of knowledge of programming languages would think Rust is the only memory safe language. Googling the supposed quote also turns up no results but this post.

</comment><comment><USER15> It is nonsensical to consider memory leaks as reported by Valgrind on a program that uses Glib. It allocates and builds a whole context system and never frees it regularly, which confuses Valgrind. I am pretty certain almost all 'leaks' come from there. _libglib_ should be put in Valgrind _suppression_ file.

It was a very bad choice to choose a program based on Glib for this kind of experiment.

<comment><USER16> I think what you have said here sums up the problem quite concisely. They might as well add core-foundation, qt-core and stllib based executables to the test for 'c' vs 'c++' to give a better cross section.

</comment></comment><comment><USER17> FWIW, Donald Knuth was a proponent of using C over C++ at the time it first came out. He equated C++ with the use of frameworks in writing programs which he thought were a bad idea for the profession as it would dumb it down. C++ does make code reuse a lot easier.

<comment><USER18> > C++ does make code reuse a lot easier.

Not really, with ABI issues and compiler incompatibility widely used C++ libs are either header-only, or have an "extern C" version of the public API. Id say C++ makes reuse much harder.

<comment><USER19> 1) ABI issues and compiler incompatibility hasn't been a problem for 5-10 years (using two compilers for a single binary is relatively rare).

2) Being "header-only" is no impediment to code reuse.

<comment><USER20> Hey there Aidenn0,

I'm no expert on C++ and I've been considering using it for several projects.

An important thing for my needs is being able to define classes in one shared object and create new subtypes of those classes in another, possibly defining overrides on virtual methods and such.

A good friend of mine has said similar things as you - that the ABI issue has not been a major obstacle for some time.

And yet, as much as I search, I still find the same-old advice: Don't use STL types in your interfaces or throw exceptions across module boundaries.

If all the compilers used for a given platform follow the same ABI, would using a separate and specific STL implementation (say, STLport) instead alleviate that particular issue?

Sorry if this question seems a bit rambley but I'd really love to find out how to use C++ in the way I've mentioned.

<comment><USER19> If you use the same compiler, ABI is a non-issue.

If you want to distribute dynamic-link binaries for windows, use MSVC.

If you want to distribute dynamic-link binaries for OS X, use Xcode.

If you want to distribute dynamic-link binaries for linux, you are SOL regardless of whether or not you are using C++, but if you use the same compiler and flags that the latest LTS version of Ubuntu uses, then it will work on Ubuntu, and will be made to work anywhere that Steam works.

It used to be that there were at least two C++ compilers for each *nix (typically GNU and something cfront based), so ABI was a much bigger deal.

When "Modern C++ Design" came out, famously none of the compilers could correctly compile all of the sample code. Since then things are much better; not that all compilers are bug-free of course, but they are sufficiently good enough that if you report a bug, you can expect it to be fixed.

[EDIT]

"Don't use STL Types in your interfaces" is not advice I've heard in like 15 years; I more often hear "If you're using a C array instead of a Vector, you're doing it wrong"

"Don't throw exceptions across module boundaries" seems similarly odd. Unless your constructors are inlined, no modern code-base will follow that rule because RAII relies so strongly on exceptions.

There are coding styles that are opposed to exceptions as part of an external interface, but that's due to exceptions not being checked as part of the type system, and is not what I would call a majority opinion.

<comment><USER20> Thanks for the response.

To clarify "module boundaries", I mean "separate shared objects."

As for Linux, I'm not too concerned with creating a single binary that works for all distributions.

I'm more concerned with someone being able to build a set of shared libraries on their distribution of choice and those shared libraries being able to interact naturally regardless of which compiler s/he uses to build each of them.

Say, LibA is built using LLVM. LibB is built using G++ and LibC is built using ICC.

LibA defines several classes. LibB creates some subtypes. LibC instantiates types from both LibA and LibB.

All the functions present in LibA, LibB, LibC make use of STL types such as std::string, std::vector, etc. Some may throw exceptions, whatever.

With respect to MSVC, I've read that compatibility between Debug and Release builds is kind of suspect, especially if you're using STL types. Not to mention differences in MSVC version. Is this still a concern?

<comment><USER19> > I'm more concerned with someone being able to build a set of shared > libraries on their distribution of choice and those shared libraries being > able to interact naturally regardless of which compiler s/he uses to build > each of them.

Sorry, but this is an unreasonable standard. Literally no language, _including C_ supports this. With C it only works inasmuch as the C compiler authors work really hard to make it works, and even then it sometimes breaks (if your compiler inlines a call to malloc, and you free a pointer compiled with a different C Compiler that inlined a different malloc implementation, it can break horribly. Yes I've seen this happen.)

Some languages support cross-version linking (or whatever the language's equivalent of "linking" is), but I'm not aware of any that specify a complete ABI for unrelated implementations to support. IPC libraries do typically support this though.

[edit]

I don't want to go on a shared-library rant, but I am fairly strongly opposed to them (except perhaps in cases like how nixos manages it). You can take a statically linked binary from 1997 and run it unmodified on your linux machine today. It is a virtual guarantee that any dynamically-linked binary more than 2 years old will not work correctly. Linus puts a huge amount of effort into backwards compatibility, and it is completely destroyed by dynamic linking.

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> Interesting project!

The C++ version uses many memory allocations. Using allocators some in the C++ program would certainly cut down on the number of allocations. It would also be interesting to see if doing so also improved performance.

Similarly, it would be interesting to see if using the C++17 string_view (or the gsl version if C++17 isn't available to you) instead of `const string &` parameters affected performance.

Finally. I see that in most (all?) cases, objects are returned by value, not returned through reference parameters or pointers. It's interesting to see that that choice didn't compare poorly to a C implementation.

</comment><comment><USER21> It is interesting that the C++ version does twice as many allocations. I suspect this means there is some low hanging fruit for future optimizations.

</comment><comment><USER22> I knew C++ compilation was slow but 30x slower? I'm sure the compile-time memory usage will also show a similar trend. It would be interesting if somebody could explain the reason for this disparity.

<comment><USER23> The problem, by and large, is that C++ is heavily dependent on header files to implement the Standard Library. It's largely templated, which means there's no way to make a pre-compiled version, the code generated varies wildly depending on the types involved.

C has relatively simple header files, they usually contain structs, function signatures, and a bunch of macros. They're easy to parse and apply by comparison, plus don't tend to be as deeply nested.

If C++ ever adopts the Pascal-style "module" extensions that have been kicking around in various proposals compile times could shrink by several orders of magnitude.

<comment><USER24> > If C++ ever adopts the Pascal-style "module" extensions that have been > kicking around in various proposals compile times could shrink by several > orders of magnitude.

I'm skeptical. Modules don't avoid the need for template instantiation.

<comment><USER25> Template instantiation surely only requires type substitution and re-running some analysis though. What makes C++ compilation slow is reparsing headers again and again and again because the C the preprocessor means that every time they are encountered they may have new semantics.

The motivation for modules in C++ is similar to that of developing a Binary AST for Javascript, discussed on HN recently.

<comment><USER26> > What makes C++ compilation slow is reparsing headers again and again and > again because the C the preprocessor means that every time they are > encountered they may have new semantics.

Really? And I thought that this is why C and C++ headers are typically wrapped in #ifndef-#define-#endif block, so they only produce whitespace after preprocessing on second inclusion.

<comment><USER27> Yes, this happens inside a single translation unit (.cpp file). However if you have multiple .cpp files which include the same header file you have to reparse it each time. This is because before the inclusion of that header different #defines might have been set (e.g. through other headers), and therefore the content of the header file might be different.

</comment></comment></comment></comment></comment></comment><comment><USER28> "The C++ version has no pointers but instead uses value types. This means that all data is stored twice: once in the array and a second time in the hash table."

This is interesting. Are they using modern C++ and making use of moves and perfect forwarding? Or are they just throwing std::strings around and doing millions of copies (e.g. remember std::vector must support copyconstructable, so copy constructors & operator=) in the process? That would explain the allocations in C++ being higher perhaps, particularly if they're using the "wrong" containers. Why not sure unique_ptr or shared_ptr?

It is worth remembering that move constructors and assignment operators only get used in very specific places and you have to ensure that any constructors you write yourself are explicitly noexcept.

</comment><comment><USER29> > Every manual resource deallocation call is a potential bug. This is > confirmed by the number of memory leaks as reported by Valgrind. There are > more than 1000 of them, several dozen of which are marked as "definitely > lost".

You can't compare performance If one program doesn't free memory, which obviously "saves" time. Valgrind can tell you where non-freed heap blocks have been allocated and a fix should not be complicated.

<comment><USER30> " _Valgrind can tell you where non-freed heap blocks have been allocated and a fix should not be complicated._ "

In theory, theory and practice are the same. In practice, they aren't.

</comment></comment><comment><USER31> This is quite a good comparison too, along with lots of advice on code quality. The result was that the speed was almost exactly the same.

[https://www.youtube.com/watch?v=SIAAvv1O7Gg](https://www.youtube.com/watch?v=SIAAvv1O7Gg)

</comment><comment><USER32> In general there is no way a C program(apple to apple, comparing to its similar c++ version) will be larger than C++, be it static, shared libraries included, or whatever.

<comment><USER23> Today, sure, but there's no assurance that this will be true in the future. If more compiler-friendly extensions are added to C++ to help it generate tighter, more nimble machine code because it's given more leeway in optimizations, then the C++ code could be substantially smaller. C doesn't seem as interested in adopting some of the C++ paradigms that could make optimization better, tools like formalized iterators and such.

There's been various attempts at pre-compiling the headers over the years, but the results have always been, for various reasons, less than perfect.

</comment></comment><comment><USER17> If you ignore the protection mechanisms and the class heirarchy built into C++, then a C++ class is like a C struct that can contain function pointers. For many programs this is all that's needed, and the amount of overhead involved in using such an approach to creating objects is obviously lower. So there's no question C will always be faster. It's only when you need protection and class heirarchies that C++ benefits you. That benefit is mainly one of better code organisation.

<comment><USER25> > a C++ class is like a C struct that can contain function pointers.

No, it's not. Calling an ordinary class member function in C++ has exactly the same overhead as calling a function in C. Even virtual functions in C++ are not the same as putting function pointers in a C struct (they live in a separate data structure called the vtable).

> the protection mechanisms and the class heirarchy

All C++ protection mechanisms occur at compile time and have no runtime overhead. Non-virtual inheritance hierarchies have the same overhead as C struct composition (because under the covers the memory layout is the same).

<comment><USER17> Doesn't a vtable imply an extra level of indirection? You have to find where the vtable is in the object, then the function within the vtable, right? Is that not slower?

<comment><USER30> Yes, although (cache behavior notwithstanding) it's a single pointer indirection that can frequently be optimized away by the compiler.

<comment><USER17> My point is simply this -- adding protection mechanisms and inheritance to classes neccesitates adding more complexity to the structure used to represent them (such as a vtable) which does add performance overheads. If you dont need those features, you can go leaner and faster with a C structure that includes function pointers to give you the basic packaging of data and functions that an object has.</comment></comment></comment></comment></comment>


The Future of Emacs, Guile, and Emacs Lisp - <AUTHOR> http://lwn.net/SubscriberLink/615220/45105d9668fe1eb1/ <comment><USER2> Emacs development is going quite incredibly right now. For those unread on the mailing list, here are what I consider to be the most important updates of the past week or two: * 24.4 will be released next Monday (yay!) * Dynamic module support is near completion (or has been completed and awaiting mainline integration). Seriously, Emacs is incredible.

<comment><USER3> > Dynamic module support

Wait, I thought RMS is very strongly opposed to this?

<comment><USER4> I recently had a chat with Eben Moglen and rms that suggested that requiring such modules to state in some code-enforced way "I am GPLed" could legally be enough (unlike Eben, I am not a lawyer, and my understanding of what Eben told me could be incorrect). Linux does something like this, by requiring a LICENSE_MODULE macro to be defined for some interfaces. Linux will refuse to load that module if the license isn't GPL, or declares that this Linux is "tainted", and the devs will refuse to support it. I forget. Anyways, Emacs could do this for all of its interfaces and be even stricter than Linux: look for an explicit declaration of GPLness or refuse to load the module. If a module makes the declaration but is lying, they're in legal hot water.

Eben is just about the only legal advice that rms will really listen to. If something like this could be done and Eben convinces rms about this, this may ease his (in my opinion) well-founded fears against proprietary Emacs extensions.

<comment><USER5> non-GPL modules have a limited API, but will load, as you state.

</comment></comment></comment></comment><comment><USER6> I see the argument that Emacs Lisp is what we have and works fine floated around by many Emacs veterans, but I wonder if they realize the unrealized potential (opportunity cost) of keeping Guile Scheme out (as Stefan seems to prefer, whereas RMS is in favor of Scheme), and that Emacs going forward can probably yet produce more wealth of extensions than in the past 30 years? I completely agree that keeping full compatibility with all existing extensions is the absolute priority for the new Guile engine, but I myself have kept away from coding anything in Emacs Lisp other than a simple lambda binding because of Elisp's warts and very forgettable ways to do common things (e.g. manipulate strings in general.)

<comment><USER7> Wow, time sure does fly. I was discussing Guile and Emacs 5 years ago on StackOverFlow. The 10 year old article that I referenced is no longer there.

[http://stackoverflow.com/questions/1663627/guile-and- emacs](http://stackoverflow.com/questions/1663627/guile-and-emacs)

That's 15 years of talking. My personal feeling is that sometimes it's just better to abandon projects that stagnate. There's an open source Go version of Sublime, for example. It would probably be easier to maintain.

[https://github.com/limetext/lime](https://github.com/limetext/lime)

<comment><USER8> That, or contribute to Neovim [https://github.com/neovim/neovim](https://github.com/neovim/neovim)

<comment><USER9> Neovim is a fantastic project, even if you're not interested in vim. They are a model example of how a FOSS kickstarter should be run.

</comment></comment></comment></comment><comment><USER10> Does the Guile team need to raise money? The OP suggests that it "strains the Guile team" and mentions resources many times.

Why can't we have a kickstarter campaign for providing funds to develop a real plan of execution for this?

Without a real plan forward, I see Guile realistically taking another 5-10 years, making it a _20-25_ year long proposal.

<comment><USER11> I think 'resources' there generally means "engineering resources", ie skilled people, not 'funding'.

It's not necessarily easy for an open source project to translate money into engineers. A pot of donated cash in the bank doesn't mean that the existing developers have any more time to work on the project, or that somebody new with the right skills and experience with the codebase magically appears. If one or more project members happen to be consultants who can use the money to spend six months working on Guile rather than on some other paid engagement that's one thing; but the amount of money required to make "quit your full time job to work on the project" financially sensible is prohibitively larger.

<comment><USER12> Indeed.

I can add that for some projects, funding _is_ useful to acquire the hardware and infrastructure to host the project: code hosting, build servers, test machines, bandwidth... However I doubt this is Guile's constraint.

<comment><USER10> I am in complete agreement, in the general sense, with both you and the parent. However, I'm not proposing they hire engineers to work on the bigger pictures of Guile, and as the parent suggests, a "magical codebase" appears. From Eli Zaretskii's own email[1], there are some very low hanging fruit that can be accelerated through funds -- like solving non-GNU compatibility. We can see more tasks at the GuileEmacsTodo[2] list and the various Google Summer of Code sponserships for Guile [3]. These sponsorships have helped Guile make _huge_ gains in the past 4 years.

My suggestion is to just keep that momentum going, year around. I know about the mythical man-month, etc, but in this case, some of this low-hanging fruit can be financed.

\- [1] [http://lwn.net/Articles/615347/](http://lwn.net/Articles/615347/) \- [2] [http://www.emacswiki.org/emacs/GuileEmacsTodo](http://www.emacswiki.org/emacs/GuileEmacsTodo) \- [3] [https://www.google- melange.com/gsoc/project/details/google/g...](https://www.google- melange.com/gsoc/project/details/google/gsoc2014/bpt/5803402760028160)

</comment></comment></comment></comment><comment><USER13> > Templeton, for example, noted that Common Lisp has no feature that > corresponds to Emacs's buffer-local variables, which are often used in Emacs > extensions.

I don't know about that; it sounds very much like dynamic variables. It's usual in a Common Lisp implementation to give each thread its own set of dynamic variables (indeed, that's close to the only sane thing to do); I can't offhand see why it would make sense just to treat buffer-local variables similarly. But perhaps there're some semantics I'm not familiar with.

</comment><comment><USER14> Previous discussion of the email thread that prompted this article:

[https://news.ycombinator.com/item?id=8328206](https://news.ycombinator.com/item?id=8328206)

</comment><comment><USER15> Maybe making the branch a fork will not be that bad for all parties.

<comment><USER16> I agree. Like the way Xemacs spurred general emacs advancements for a while.

</comment></comment><comment><USER17> The headline, which currently appears on HN as "The future of Emacs, Guile, and Emacs", is actually the less redundant "The future of Emacs, Guile, and Emacs Lisp".</comment>


Embedded Database Engine Written in Python - <AUTHOR> https://github.com/Max00355/LanderDB

<comment><USER2> Yet another project that lands at HN because people don't bother to look at what it actually does.

It's 44 lines of Python code.

An "insert" is implemented by loading the whole "database", in json format, into memory, adding an element and writing the whole thing back to a file.

It's not a database, it's 30 min coding exercise by a Python beginner.

Also, inexcusable self-promotion by max0563 (this is his 7th submission of a toy python program of his, with grandiose names like "NoSQL database engine in Python" or "Dropbox clone in Python" but whose implementation boils down to few lines of code).

<comment><USER3> I think that the HN community also deserves references to high quality existing software that is not promoted because the community around them is surely busy building new stuff. I recommend <http://www.garret.ru/dybase.html> an excellent Python embedded database from a guy who did a lot of embedded databases.

</comment></comment><comment><USER4> HN should have some way to downvote submission like this</comment>


Google calls Oracle lawsuit 'baseless,' vows to fight it - <AUTHOR> http://www.computerworld.com/s/article/9180703/Google_calls_Oracle_lawsuit_baseless_vows_to_fight_it <comment><USER2> Not sure why Oracle is getting so much flak for protecting and monetizing their acquired assets. They are doing what Sun had failed to do, which is monetizing the Java platform effectively, thus leading them to sell themselves to Oracle. Granted, software patents can be pretty meaningless and i believe that there should be no software patents at all. But this seems like the only way Java platform can be monetized (through licensing). I kind of wish Sun had the balls to do this kind of thing earlier.

<comment><USER3> If you're against software patents, it's for a reason, no?

That's sort of like saying that you admire one mafioso more than the other, because he has fewer compunctions about killing people in order to extort money, even though you're against the "killing people" tactic in general.

The entire Android stack is open source, and is not software that was implemented by Sun/Oracle. The class library comes from the Apache Software Foundation. Is Oracle going to sue Apache next? Who else might they sue?

<comment><USER4> What he means is that it was better to go through the wake-up call earlier instead of losing millions of dollars and man-hours on a language controlled by corporate interests.

</comment></comment></comment><comment><USER5> Yet another reason why it was a terrible idea to base the Android SDK on Java. What WERE they thinking?

I know, let's force everyone to use a scripting language to write for underpowered phone hardware! We don't need native support! Just because Apple did the same with iPhone to start with, and it came back to haunt them later, doesn't mean that we won't get away with it! And don't forget Microsoft did the same thing with C#--look where it's gotten them! And while we're at it, let's pick a proprietary and patented language that's a laughing stock in language design circles!

I doubt this makes a dent in Android, though, and I would be amazed if this changes their Java strategy in the slightest. In a battle between Oracle and Google, I think the smart money is on Google.

<comment><USER6> Is this meant as irony? Java is not by any stretch of the imagination a scripting language (static, bytecode-distributed, etc.), Objective-C is directly translated into C before being compiled, and C#/.NET is probably one of the better things Microsoft has cooked up.

This is kind of debatable, but I'd also say that modern phones are freakishly _overpowered_. The ARM Cortex IP used by the current generation phones really is a slick little architecture, and can definitely handle the overhead of running bytecode.

<comment><USER5> Java is interpreted on Android on every version prior to Android 2.2. Lua (clearly a scripting language) also converts to bytecode on load, and runs faster than Java in most cases. I'm pretty sure Python also converts to bytecode.

Objective C has a lot of run time overhead due to its "message passing" paradigm. So any time you need to use a Cocoa API, it's pretty slow. Somewhere I read that, as a result of Objective C overhead, the iPhone ends up about the same speed as Android in typical apps--so that with Android 2.2 getting a JIT compiler, it ends up much faster on similar generation phones.

EDIT: I just realized what you were confused about. Originally Apple said: "NO native SDK. You must use JavaScript on web pages to create iPhone apps." That's what I meant by "Apple started with a scripting language and had to back down." END EDIT

If you're writing code for mobile platforms, then I'm sorry, but it sucks to have to write it all 3-4 times. C# may be better than Java, but it's not relevant to me if I want to write Android/iOS games. If everyone used C++, then even the small-market phones (I'm looking at Microsoft here) would get ports of everything. At least iOS has somewhat native support for C++, which makes it easier to port games to/from Windows/Linux. The Android native support is unfortunately a neglected step-child of Google, though I'm fighting with it to get that compatibility.

And I'd certainly debate that modern phones are overpowered, but then again I write games. My G1 positively _crawls_ \--which I submit it wouldn't do if large portions of the OS weren't written in interpreted Java. I would totally agree with you that, on paper, there's plenty of power--but it's all wasted by inefficient code.

You know what really surprises me, though? How much CPU it takes to render a web page. Even when I'm on WiFi, the G1 is unusably slow at rendering web pages. And it's built on C++--and the Google browser, which is supposed to be fast. Opera and Dolphin are also pathetic on the G1.

Not that anyone will see this now that my original comment has been downvoted to oblivion. I guess you can't insult Java on HN and get away with it. No worries, though--the same thing happens on Reddit.

EDIT: See "EDIT" section above.

<comment><USER6> Mostly I just took issue with your usage of "scripting language" (which has more to do with a REPL and no discrete compilation step than anything else). The edit clarifies things a bit too; I confess to not following the original iOS app development details.

Thanks for taking the time to write an awesome response; you are definitely more savvy on the performance topic than me, and I'm disappointed to learn that the crunching power of modern mobile CPUs tends to be squandered.</comment></comment></comment></comment>


Codenamed "Moments", Facebook Has Built an App for Super-Private Sharing - <AUTHOR> http://techcrunch.com/2014/09/16/facebook-moments/?ncid=rss&utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+Techcrunch+%28TechCrunch%29

<comment><USER2> Color me skeptic, but this smells just like the previous bait-and-switch to me.

Why should we trust Zuckerberg to not pull another all-your-data-are-belong- to-me crap like countless times he did with FB and not f--k user's privacy all over again?

(Yes, I'm pissed and Zuck can fold his shiny new app and shove it where the sun don't shine.)

As far as tech goes, my guess is this is based off of WhatsApp whom FB acquired earlier this year. Time to move my private chat groups to Silent Circle or Signal.</comment>


iOS 7 "activation required" error on iPhone and iPad - <AUTHOR> http://www.graphitas.co.uk/blog/2013/10/ios-7-activation-required-error-on-iphone-and-ipad/ <comment><USER2> This seems like a non-issue (only affecting users with beta versions of iOS 7) and a generally uninformed article:

> Apple seem to have pushed out an update that forces users to update to the > current version of iOS 7

Previous betas have had expiration dates hard-coded into them. So the "update" that Apple "seem to have pushed out" is probably "the future".

EDIT: It seems like this is the first time an iOS beta has expired for some developers. Get a GM release and (command|shift) click [1] on "check for updates" in iTunes [2]. This is basically how you do non-OTA updates between different beta versions.

EDIT 2: The blog post has been updated and "Apple seem to have pushed out an update" no longer appears in the body text. I wonder why... [3]

[1] Some modifier key is the right one. I don't remember which.

[2] [http://www.jailbreaksquad.com/wp- content/uploads/2013/01/Bro...](http://www.jailbreaksquad.com/wp- content/uploads/2013/01/Browse-and-Select-iOS-6.1-IPSW.png)

[3] [http://i.imgur.com/zN2EttW.jpg](http://i.imgur.com/zN2EttW.jpg)

<comment><USER3> I love how basically every headline for this event makes no mention of expiring betas. This is not that exciting, but gotta get those clicks and make it seem like iOS 7 in general is crapping out across the globe.

<comment><USER4> The main reason I like HN is because of this: one of the first few comments, in pretty much any discussion, points out that the title is sensationalized (and gives a more levelheaded discussion)

<comment><USER5> I'd rather people just flag false articles like this so it gets removed.

</comment></comment></comment></comment><comment><USER6> There are lots of comments here that rightly point out that you have no reasonable expectation of uninterrupted functionality using beta software. But to me, there's a bigger, more interesting picture here: There's clearly a demand for pre-release Apple software among people who don't really have any need for it.

I'm sure I'm not alone in having seen people this summer running iOS 7 betas on their personal phones, even people with no software development experience who probably couldn't tell you what Xcode is. It's not in Apple's interest for this to be happening, as it leaves a bad taste in people's mouth when things like this inevitably happen.

Restricting access clearly doesn't work. Everyone who knows the beta exists knows someone who can hook them up. There's got to be something else, some other way Apple can make these betas less appealing to the casual user, without lessening the betas' usefulness for people actually trying to test things.

<comment><USER7> I agree - they should change the registration process so each developer account only install firmware on a single phone

<comment><USER8> That's a terrible idea that assumes each developer only needs one phone. But someone who is making a full-time living off iOS development probably has several devices: a 5/5x for the taller screen, a 4/4S, until recently maybe a non-retina model...

<comment><USER9> As well as a number of beta testers (who when they offer useful feedback can be worth their weight in gold).

<comment><USER7> ya i guess i didnt really think that one through ...

</comment></comment></comment></comment></comment><comment><USER10> Got this on my iPad, thought "ohh shit, I should back up my phone right now, it's next..."

I backed it up and within 20 minutes it had been disabled.

Interestingly, it put it in a state in which it was unable to ring for incoming calls.

I wish Apple would not report that your iOS version is "up to date" in iTunes if you are running a time-bombed beta build. Even if they don't want to support a direct upgrade path from beta to GM, they could indicate in their software that your software is not up to date.

Not everyone can afford dedicated dev devices--even though that is in their terms of use.

<comment><USER11> I too was 'told' I was up-to-date, and lost a ton of parade pictures of the family from this morning. Badly done, Apple. Badly done.

<comment><USER2> You didn't have to lose those photos. You can "update" to a particular IPSW in iTunes [1].

So just download a "production" iOS 7 IPSW and "update" to it.

That's what I did to update when the iOS 7 GM came out, and I've used it in the past when I unintentionally let an iOS 6 beta expire.

[1] [http://www.jailbreaksquad.com/wp- content/uploads/2013/01/Bro...](http://www.jailbreaksquad.com/wp- content/uploads/2013/01/Browse-and-Select-iOS-6.1-IPSW.png)

<comment><USER12> Apple was also nice enough to allow the device to sync in the background while the requires authorization screen is up.

</comment></comment></comment></comment><comment><USER13> For everyone saying "you should have read the release notes" \- yes I agree. However, there are two things that made this very opaque and should have been better.

1) all sources indicate everywhere that the software is "up to date". I realize that as a developer I should be keeping better tabs on things but I usually trust things not to just lie to me. It's pretty opaque.

2) The error you get when the beta expires makes no mention of the fact that the beta expired. Without judicious twitter searches and a quick look on hacker news, I didn't know what the source of the error was and assumed something was wrong w/ apple's activation or that someone had compromised my account in some way.

<comment><USER14> So much this. And since it happened with no warning on a weekend evening I was not at home and wasn't able to even look it up since my phone all of the sudden self destructed _AS I WAS USING IT_. It just rebooted and all of the sudden was non-functional.

As the responsible DD for tonight this put me in a tough spot where the drunkies I was responsible for were unable to contact their driver.

This was a ridiculous way to handle this. I had even tried to manually update to the public release manually via iTunes last week and since it said "Up to Date" I thought it had worked.. but apparently not.

</comment></comment><comment><USER15> Just hit this error myself -- found an easier way than restoring from backup.

First, download the latest iOS7 version (I used an ipsw from this website: [http://www.iphonehacks.com/2013/09/update-ios-7-beta- ios-7-p...](http://www.iphonehacks.com/2013/09/update-ios-7-beta-ios-7-public- release.html))

Open up iTunes and go to your iPhone, and press alt/option + the "Check for Update" button.

This will open up a window that will allow you to browse to your ipsw download. Choose the iOS7 ipsw you downloaded for your phone, and choose it. After 20 minutes, your iPhone will update, and you'll be ready to go -- no restore required.

<comment><USER16> That's lucky. It didn't use to work. Before the iTunes Betas would expire and the beta iOS versions would only sync with those. Also they wouldn't allow updates to the final GM.

</comment></comment><comment><USER17> Did anyone find this extremely rude. I was suddenly locked out of my own hardware for which I paid hundreds of dollars. I stopped receiving calls in the middle of the day. Why do they have to treat people who installed beta like they are criminals on a parole. Where is the magic Apple ?

<comment><USER18> Why did you use a test operating system on your production device? The beta is for testing compatibility with apps you're developing, not for daily use.

<comment><USER19> Because apps on make on the side are a hobby. At work we have test devices, but for my home stuff i can't justify a second phone for test only.

<comment><USER18> Yeah, mobile development sucks for personal projects. You always end up needing ten different devices with ten different operating systems or screen sizes.

</comment></comment></comment></comment><comment><USER20> I was able to update my 4S by downloading the official release and updating it in iTunes by option+clicking "Check for Update" and selecting the file.

If you have a 4S: [http://thepiratebay.sx/torrent/8936924/iPhone_4S_iOS_7.0_(11...](http://thepiratebay.sx/torrent/8936924/iPhone_4S_iOS_7.0_\(11A465\)_Official_Release)

<comment><USER8> You can also just download the IPSW directly from developer.apple.com, if you have a paid-up developer account. And if you don't you probably shouldn't be using iOS betas on your device.

</comment></comment><comment><USER21> I understand the misfortunate situation revolving around this "issue", but shouldn't this of been seen miles away? I mean a beta version/GM version were running on the phone. A developer would know that beta/GM development release are mean't to expire, and for good reason.

Heck this even happened to me and it was my own fault. I knew that I needed to update to the public release of iOS7. This reminds of the kids who were buying developer accounts just to get the iOS7 betas, and walking into the apple store when their phone takes a dive.

Finally, a developer or a person who reads the TOS know that shit happens, and when it does, usually they know the instructions to recover from this.

<comment><USER2> > Heck this even happened to me and it was my own fault.

You sound like the type of developer that would read the manual before asking for help.

</comment></comment><comment><USER22> This is semi related tangent.

I've worked in at a lot of software companies where they spent a lot of time being concerned about small groups of customers that were using old builds, how we would keep their setup working, etc. It always impresses me how Apple moves forward in spite of who may be left behind and I assume that this is a conscious choice they constantly have to revisit. The counter example would be Microsoft that still supported DOS for more than a decade after they moved on from it.

I don't know any engineers who like maintaining legacy systems, so it seems to be a perk of working with Apple and I also think that this lack of concern for legacy is allowing Apple to move forward faster. At my last job every time a new project was requested by management I would ask, "What old project will we remove then? Because maintenance takes time." I pretty much never got an answer on that. It takes discipline to stay lean and to non-engineers legacy costs can be invisible a lot of times.

One area where I see progress accelerating is XCode. You basically need to be running latest XCode to publish apps to the App Store, so people always run latest. On the other hand, I've got Visual Studio all the way back to 2003 on hand because clients don't want to take the time to upgrade. It drives me nuts.

There's something satisfying about progress and something very depressing to me when I sit down to make changes to a project using Visual Studio 2003 .NET. Anyone know what I mean?

</comment><comment><USER23> I was just in the apple store and heard someone complain about this. She was there for some other reason and it just so happened to strike her phone while she was waiting. The guy helping her was pretty puzzled and kept insisting she must have reset her phone.

</comment><comment><USER24> This happened to me less than an hour ago - it puts you on an infinite loop if you try and do a login from the phone without a USB connection.

I'm a developer that's been using the beta - it seems to have only affected those that haven't upgraded.

</comment><comment><USER25> Good luck if you had "find my phone" turned on.

<comment><USER26> Required starting in DFU mode + restore. Didn't think to try option + update as eggbrain mentioned above. Does this mean Find My iPhone can be circumvented with a DFU mode restore?

<comment><USER2> > Does this mean Find My iPhone can be circumvented with a DFU mode restore?

I am just speculating, but perhaps iOS 7 GM and later cannot be circumvented but the beta versions could be. This might be intentional - after all, it's beta code. The circumvention might be a plan B.</comment></comment></comment>


A HTTP proxy middleware for merge request - <AUTHOR> https://github.com/viclm/httproxy <comment><AUTHOR> Merge multiple requests to single one; Serial, parallel or mixed; Simple syntax and easy to test; A circuit breaker is built-in.</comment>


ICE Has a New $30M Contract with Israeli Phone Cracking Company Cellebrite - <AUTHOR> https://www.thedailybeast.com/ice-has-a-new-dollar30m-contract-with-israeli-phone-cracking-company-cellebrite?ref=home?ref=home <comment><AUTHOR> The filing is here: [https://www.fbo.gov/index?s=opportunity&mode=form&id=3082dfd...](https://www.fbo.gov/index?s=opportunity&mode=form&id=3082dfd011655a4709b395ce53aa693d&tab=core&_cview=0)

Interesting that a deal like this can be made. Presumably Cellebrite cannot guarantee that their tech will work even a month from now. I suppose if there ever was an incentive for them to up their hacking efforts this is it.

Does this make us all more secure since Apple will be more likely to patch the vulnerabilities and so more secretive organisations may also lose access.. or less secure since much more research will go into hacking devices?</comment>


Apple has ruined its podcasts app - <AUTHOR> http://www.slate.com/articles/technology/technology/2017/12/apple_has_ruined_its_podcasts_app.html <comment><USER2> The new podcasts app is absolutely terrible. My girlfriend is a heavy listener and the list of podcasts she has available takes between 30-45 seconds if it loads at all. Releasing the new version of this app was absolutely a regression, and I'm shocked that it actually got past any form of QA at all.

My only guess here is that a team felt the need to ship a new shiny product, even if it wasn't close to feature parity with the old one and is pretty unusable for a normal workflow without becoming quickly frustrated.

I assume business metrics, promotions, and appeal to novelty got in the way of functionality and user experience. My girlfriend mentioned that she wanted to turn off automatic updates because she would have never updated this app to the new version, which is quite frustrating as somebody with some basic netsec knowledge.

Apple, what happened?

<comment><USER3> It really is horribly slow now - and not just in the way that you describe. Previously, I could load the podcasts app, and tap the top item in the unplayed list, and it would begin playing the entire list. Now there isn't a way to do that. Instead that tap opens the list of podcasts for that show, and then I have to tap the podcast again to select it, and once again to play it. And it only plays podcasts for that show! As far as I can tell there isn't a way to play all of the unplayed episodes I am subscribed to.

I moved to Overcast.

</comment></comment><comment><USER4> Doesn't really matter, since anyone who cares about the software they use left the Podcasts app five years ago.

<comment><USER5> This. The Podcasts app was never any good.

</comment></comment><comment><USER6> There's a reason it's the only app in the store that has its reviews and rating mysteriously hidden

<comment><USER7> To be fair, all iOS internal Apple apps that you can remove are like this in the app store. And although they appear to be decoupled from iOS completely, updates aren't pushed out through the App Store either.

<comment><USER8> I don't think they are really decoupled from iOS. Updates are still delivered through iOS updates. I think it's in the App Store because when people remove it from their homescreen, the logical place they're going to search for it to bring it back would be searching in the App Store. But it's not an actual app delivered by the App Store, if that makes sense.

<comment><USER7> The only reason I say this is because it appears it does actually have to download back onto your device. So I'm not totally sure.

</comment></comment></comment></comment><comment><USER9> Their podcast app has been garbage for quite some time. I dumped it for Overcast and I've not looked back. My podcasts instantly start, sound good and are all available. Do you your self a favor and try it.

</comment><comment><USER10> I think everyone on HN knows this already. I was using Casts for a while, even paid something for it. However it was Ok but infuriating, if that makes sense.

So i downloaded the Apple podcast app again, not wanting to pay and assuming they are all equally horrible. Not true!

Where most software tries to make you addicted to the product, the Apple Podcasts app nobly repels your best efforts to engage. And they are right — walking to the coffee shop and listening to birds chirping and the sounds of the day beginning is a pmeasure no app can provide.

</comment><comment><USER11> Overcast is by far the best podcast app in tpgone, I got fed up with Apple's spp years ago.

<comment><USER12> I'm a heavy podcast listener and have been happily using iCatcher for three years. With so many customisable options it feels like it's targeted to developers.

</comment></comment><comment><USER13> All podcast apps are terrible. Some are more terrible than others.

All a podcast app needs are the capabilities to find, list, and play mp3 files. That's it. Everything else is just trouble waiting to happen. And the finding can be just RSS feeds.

</comment><comment><USER14> I think they finally, after 3 years, fixed the bug where every podcast you streamed would start remaining in the undeletable "Documents and Data" of the app. The old solution was backup/restore of the device!</comment>


Spacecraft Propulsion Device Invented by 19-year Old Student - <AUTHOR> http://www.trueactivist.com/spacecraft-propulsion-device-invented-by-19-year-old-student/

<comment><USER2> Nice story, but does this work? It was reported almost 2 yeas ago: [https://news.ycombinator.com/item?id=3993766](https://news.ycombinator.com/item?id=3993766) (7 points, 608 days ago, 1 comment). I repeat my comment:

> _The article is not very clear, and has no technical details, and has not a > reference to a peer review journal article. So it is very difficult to know > if this theoretical device really works._

> _I 'm not sure, but it even looks like a perpetual motion example. (But it > could be a problem with the press report.)_

> _And the article says that is a variation of the "Differential sail", but > the most clear reference in Wikipedia ( > [http://en.wikipedia.org/wiki/Breakthrough_Propulsion_Physics...](http://en.wikipedia.org/wiki/Breakthrough_Propulsion_Physics..). > ) has many proposed devices that are very controversial and probably > violates some physics laws._

This new article has no more information, I still can't find a published article (or a prototype).

After reading the past article and the article linked from digitaljournal ( [http://digitaljournal.com/article/325785](http://digitaljournal.com/article/325785) ), I think that the idea is that the device create photons using the dynamic Casimiri effect and then release them as propulsion. So it doesn't release anything "material" like the combusted fuel in a normal rocket. The main question is: Is this more efficient than pointing a laser backwards? As the light of the laser goes backward the spacecraft is affected by a (small) forward force. And nothing "material" is released. Obviously you need a power source for the laser or for the proposed device. The problem is "only" the efficiency (and size, weight, cost, durability, ...).</comment>


A case for unstructured programming - <AUTHOR> http://250bpm.com/blog:53

<comment><USER2> Here's the point in time where we return to how monads are great.

What Sustrik asks for here is an imperative context where failure is a native operation. Obviously, this is most useful in a delimited way and this is _exactly_ a maybe monad.

</comment><comment><USER3> People had this argument in the late 1970s and your viewpoint won, although nobody seems to have noticed. Of course you need break or return or something like that to write a linear search that doesn't have a confusing condition variable.

<comment><USER2> That's plenty structured, though. It's just getting a hold of your continuations. The sin of GOTO is doing it with names and not scopes.

</comment></comment><comment><USER4> I once (briefly) tried to collaborate with someone who would not use `else if` statements, and used braces always even if they were optional.

        if (foo) {
            <whatever>
        } else {
            if (bar) {
            <whatever>
            } else {
                if (baz) {
                <whatever>
                } else {
                    if (spam) {
                        <whatever>
                    } else {
                        ...
                        <etc>
                    }
                }
            }
        }

It didn't end well.

He also wouldn't use break or continue or multiple returns.

As this article says, it led to really really annoying-to-read code.

<comment><USER5> Pardon me lisping, but I just read your code as pseudo linearization of trees...

        (cons a
              (cons b
    		(cons c
    		      (cons d . nil))))

        (list
         a
         b
         c
         d)

a,... being condition/reaction pairs.

<comment><USER4> Effectively.

It's one of the reasons why I wish more languages had a generalized switch statement (i.e. one that accepted arbitrary code as conditions, not just constants compared to a single value), preferably with a way to (explicitly, preferably) code a fall-through.

It means that you cannot necessarily translate it into a jump table, true. But it means that you can write code much more concisely, on the flip side. And it remains slightly readable.

</comment></comment></comment><comment><USER6> _And here 's its fully structured counterpart:_

      do_stuff1();
      while (!condition()) {
        do_stuff2();
        do_stuff1();
      }

<comment><AUTHOR> do_stuff1() is a shorthand. It can be a block of code tens of lines long.

<comment><USER6> It is a part of the structured programming idea to make modules callable by a "shorthand". It is not in the spirit of structured programming to make use of flow control flag variables.

<comment><AUTHOR> But if you extract each piece of code that doesn't fit the structured syntax into a separate function you'll end up with zillions of small functions witch have no clear semantics by themselves (only when considered within the context of the calling function). That's probably the most unreadable coding style I've seen in my career.

<comment><USER6> I did not say it was recommendable. I just said that _that_ was the structured counterpart. Your counterpart is not. Also I believe most structured programming advocates have no problem considering leaving a loop in the middle as a valid programming structure.

</comment></comment></comment></comment></comment><comment><USER7> Looks like a use case for a monad or try!</comment>


Ask HN: How do you detach yourself from your own ideas? - <AUTHOR>

<comment><USER2> IMO if it adequately solves a problem you have yourself, that's a good start. Then, try to assess how big the problem is for others in your target market.

Really nothing other than testing (could be an MVP, surveys, pre-orders, etc.) and time can tell for sure. Don't trust anyone that simply says "That's a bad idea" \- instead, get their feedback on the major difficulties of the idea, and decide if you think they are surmountable.

</comment><comment><USER3> Think about it from a measurable outcome based perspective. That way it doesn't matter who's idea it is - if the idea cannot measurably achieve the goal of the idea, then its just not good and that's that.

</comment><comment><USER4> Join FounderDating so you can be around other people who have ideas, and you can network and talk to them. Might open you up a bit.

</comment><comment><USER5> Have others tell you it's a bad idea?</comment>


What Kind of Logo Do You Get for $5? - <AUTHOR> https://medium.com/@sachagreif/in-the-past-couple-years-startups-have-started-realizing-that-good-design-can-make-the-difference-2fdeb90d390a <comment><USER2> This is how disruption works. Fiverr are doing to the graphic design industry _exactly_ the sort of disruption that many of the startups we admire have been doing in other sectors for years - vastly reducing the price to the end user by using software to connect them with the lowest cost supplier. Exactly as the taxi industry decries Uber saying UberX isn't as professional or safe or fast, the design people are saying that the user is getting a raw deal as the product they buy is demonstrably inferior, stolen, ill-thought and slow. Just as Google did to advertising, Youtube did for television, Spotify did for music, and AirBNB did for hotels.

The incumbents all said the upstarts offered a worse service while failing to understand that there are huge numbers of people that don't want, or care about, the 'essential' qualities that the incumbents insist on selling. Disruption is made possible where an industry charges for things that represent no value to the customer. In the case of Fiverr, fortunately I think, their customers are people who want a logo that's better than what they can make themselves but without the bells and whistles like rounds of design changes, high quality vector artwork and Pantone reference colours. Designers think they need to charge for those things. They are wrong. Lots of customers are quite happy taking what they're given if the price is low enough.

And one day this _will_ come to the software industry. Someone _will_ make a service that enables businesses to build applications for $5. Apps that work, that scale, and that are 'good enough' not to need a developer any more. We will have to change the way we sell what we do, just as Fiverr is going to make designers have to think about the way they sell their services now.

<comment><USER3> There is no "bait and switch" here as the author claims.

Nowhere on Fivver's website do they claim you are getting a unique one-of-a- kind hand-designed logo -- you are paying $5 for someone else to tell you what a sensible logo should be and provide a few decent choices for starting out with... and that can be valuable (I know because as an engineer, the creative side of things often escape me).

I see no issue here. For my side project websites and companies, these sorts of logos (and at this price point) is exactly what I would look for.

<comment><USER4> >>Nowhere on Fivver's website do they claim you are getting a unique one-of-a- kind hand-designed logo

I'm sorry, but if someone says in their profile headline, "I will design amazing logos for $5" then I expect it to be more than just clipart or color- shaded text.

<comment><USER3> Well, honestly, most company logo's are not much more than clipart. Apple's logo, an apple... Microsoft's logo, 4 squares, IBM's logo, their name, etc etc.

I think you can't expect to buy a Ferrari at the Hyundai price point. If you want more, you're going to have to pay more.

<comment><USER5> I think there's crossed wires here. The term clipart was being used to refer to the literal nature of the icons origin - it came from a stock library of pre produced graphics.

And when you say 'most company logo's are not much more than clipart' \- you're refering the the simple construction and form of the icon used in a logo. Apple, Microsoft, and IBM obviously didn't pull their logos from a stock library.

Although it's interesting to hear such logo's be described with such flippant regard for their conception.

</comment></comment></comment></comment></comment><comment><USER6> Apparently the work wasn't really stolen- it was a stock design that was (presumably) paid for. I would not call it a rip-off, and would ask "what about fiver makes people think they are going to get completely original designs?" If fiver (or their designers) are indeed somehow misleading customers into thinking their design is completely original, with no stock art involved, that is a problem- but it seems clear to me that for 5 bucks that you would be starting from stock.

<comment><USER7> Certainly on iStockPhoto there is a license restriction clause which states it can't be use in any logo or trademark.

[http://www.istockphoto.com/help/licenses](http://www.istockphoto.com/help/licenses)

I wouldn't be surprised if this kind of restriction is common in most stock photo sites.

<comment><USER6> I did some quick looking at the stock sites featured in the article:

Dreamstime: [http://www.dreamstime.com/terms#unauthorized](http://www.dreamstime.com/terms#unauthorized) Apparently you can use it in a logo, but you cannot trademark it- which resolves the problem of someone trademarking it and suing you- their trademark would be infringing the license.

123rf: [http://www.123rf.com/license.php?type=enhanced](http://www.123rf.com/license.php?type=enhanced)

Yes, this license does forbid use on logos, so that designer apparently did indeed violate the license. The designer should have read the fine print.

Freelancer: I couldn't find terms for stock work, however, the headline in the screenshot is "travel agency logo" so based on that, it appears it is meant to be a stock logo.

So, it appears that 2 out of 3 of the sites do allow us of their artwork in logos. It may not be a good idea, but in these 2 cases, I would not call it stealing. Nor would I expect anything more for 5 bucks.

</comment></comment></comment><comment><USER8> I'm confused. How is using a stock template a "rip-off"? If you design something with a stock photo, is your entire design a rip-off? If you use a popular library such as Bootstrap, is your site a rip-off? It's lazy, sure. But you honestly weren't expecting anything else.

>There's nothing wrong with going with a cheaper freelancer instead of hiring an expensive agency, just like there's nothing wrong with choosing McDonalds over a 3-star restaurant.

Totally, but this is like reviewing an egg mcfuffin and being disappointed they didn't serve you pastured eggs. There's a disclaimer near the beginning of the article about a potential conflict of interest. When I first read it, I blew it off thinking "oh that's not necessary, this is just a bit of fun." In hindsight, the article reads like an ad. I was expecting a little more from the tag line "An epic tale of deception, stolen artwork, and crappy logos."

<comment><USER9> Whoa, that's one hell of a bullshit disclaimer. Even after reading it (and it's not exactly highlighted), it was unclear that Folyo was his company. Definitely sketchy.

<comment><USER10> To be fair to the author, in the disclaimer it is stated, "my startup Folyo". So it is pretty clear that an opinion and competing biz model are assumed, which is why their is a disclosure. The conclusions can certainly be disputed though

</comment></comment></comment><comment><USER11> To add a related experience, but with different results... some months ago I used 99designs to get a cover for my novel. It wasn't $5 but $300, but still, I was amazed by the quality of [some of] the entries - 126 in total! See here: [https://99designs.com/book-cover-design/contests/book- cover-...](https://99designs.com/book-cover-design/contests/book-cover-action- thriller-novel-golden-seed-277703) In this case the freelancers were _required_ to disclose the licenses of the assets they used, and even provide the sources so I could verify them.

I understand why some artists complain about sites like these, but for a "consumer" like me it's a fantastic idea - and as another commenter said, "disruption". They do other things, like UI design and so on... check them out. FWIW, I'm in no way affiliated to 99designs, I just had a good experience with them.

<comment><USER12> We used 99designs and were happy with their work too. Our competition offered something like $700 -- we wanted to ensure that the better designers pitched for our logo while still being affordable to us.

What I noticed and found interesting was that the designers who participate in 99designs would do a lot of "police work" by calling out plagiarism and reuse by the other designers. I'm guessing that it's because more money was at stake than $5.

</comment></comment><comment><USER13> Then, at the other end of the scale, you have 'What kind of logo do you get for several million dollars?'

Aka, the Pepsi Gravitation Field:

[https://code.google.com/p/daxp/downloads/detail?name=pepsi%2...](https://code.google.com/p/daxp/downloads/detail?name=pepsi%20gravitational%20field.pdf)

Where their logo redesign was pumped up by a fantastic amount of tenuous justifications and logic.

<comment><USER8> Woooow. Thank you for that. It's so bad that it sounds like parody.

<comment><USER14> The missing link between the new Pepsi logo and TimeCube!

Saddest thing is I can see a board room eating this up. Remember when Marissa Mayer redesigned the Yahoo logo with a small team over a weekend? "no straight lines in nature" she said. Sounds good, except it is wrong.

</comment></comment></comment><comment><USER15> I always ask clients if they would go with a $5 plumber, or a $5 bus driver for their kids. Always the response is, "No!" So it's a matter of them not being able to judge quality of tech / design work... not just them being cheap. Any small business is going to want to pinch pennies, but if you know they make irrational decisions you should just walk away.

The cure, I think, is for our industry to develop non-subjective ways of saying, "I'm a level 60 Developer spec'd for RoR," or, "Designer with .333 Batting Average stepping up to the plate." So customers can compare apples to apples when looking at the billable rate.

If you think $5 logos are the only ones who plagiarize; I've seen this from people who charge $150 / hour too. It's still very much the wild wild west and the likelihood of someone getting ripped off doesn't seem to change no matter how much the service provider charges.

<comment><USER16> >I always ask clients if they would go with a $5 plumber, or a $5 bus driver for their kids. Always the response is, "No!" So it's a matter of them not being able to judge quality of tech / design work...

A $5 plumber might flood your offices. A $5 bus driver might crash the bus your kids are in. A $5 logo designer might... design a logo for you that isn't great?

<comment><USER17> A $5 logo designer might steal copyrighted work and get you into all sorts of expensive legal trouble.

</comment></comment></comment><comment><USER18> I got my company's logo on Fiverr and wrote about the experience a couple years ago. Quite happy with the result honestly. It offended a lot of people then (feel free to read the comments), and probably still does today. But I've heard designers at $100+/hr down to Fiverr and they serve different purposes. I've been happy with both and disappointed in both types (and everything in between). I wouldn't hesitate to give it a shot though, it's so cheap you're not really losing much budget if you have to go another direction.

[http://kevinohashi.com/26/10/2012/how-get- logo-30](http://kevinohashi.com/26/10/2012/how-get-logo-30)

<comment><USER19> In your article you say:

> A logo is what identifies you. It's the symbol that takes up space in a > customer's mind when they think about your company. There is no symbol that > is more connected to your company than a logo.

And then you end up with a logo that is, frankly, awful. Which means now customers will associate that awfulness with your company. Is that what you want?

<comment><USER18> Some companies aren't lasting brands. Mine happens to fall into that category. Nobody has ever given a shit about my logo except from that post.

The service I provide, if it does its job well, is something you never should need to go back to ever again. Almost all my visitors are one time visitors and there is little/no return value on what I do. So, in this instance, customers never think of my brand. So it really doesn't matter.

And you say it's awful. I don't think it's awful. It's functional. It doesn't distract from everything else, it doesn't add anything special. That's good enough. I don't want people thinking about my logo, I want them getting what they need and leaving.

<comment><USER19> > It's functional. It doesn't distract from everything else, it doesn't add > anything special. That's good enough. I don't want people thinking about my > logo, I want them getting what they need and leaving.

This is true of most logos. The opposite of "awful" isn't "shoots out rainbows that dazzle and disorient the viewer".

The logo should look like it was done carefully and with attention to detail. It should be balanced and pleasant to look at. Even subconsciously, people will pick up on those qualities (or their lack) and infer the same about your company.

I don't mean to slag on your logo. I know it's probably not a priority for you. But it does a disservice to others to say, "Look how easy it is to solve your logo problem!" when the end result you got was actually pretty poor.

In particular, the outermost "radio" arc cuts unpleasantly close to the "S". It doesn't match any of the other spacing and makes the "S" look like it has some weird thing attached to it. The other arc is thinner for no clear reason and the spacing between it and the dot over the "i" and the outer arc is inconsistent.

To my eye, the whole set of arcs is too tall and makes the outline of the entire logo look unbalanced.

Also, the kerning around the first "e" is bad.

I understand you think no one cares about your logo, but you took the time to animate it and put it a video. Why not at least drop a bit of cash beforehand and make sure it's worth reusing?

Argh. I hate being negative without being helpful. Here's something like I had in mind: [http://imgur.com/bpUqyKd](http://imgur.com/bpUqyKd)

Do with it as you will.

</comment></comment></comment></comment><comment><USER20> They should have tried [http://www.horriblelogos.com/](http://www.horriblelogos.com/) \- $5 for a hand-drawn logo, so no stock artwork involved.

(Logo will still suck though :)

</comment><comment><USER21> "Yet it also seemed too good to be true: how on earth could anybody make a living creating logos for $5?"

$5 is 3x minimum hourly wage in Poland. And you can create more than one logo in three hours.

</comment><comment><USER22> Neat experiment. Buying design through places like Fiverr is a hard proposition (unlike, say, voice over or something) because faking and fraud is so easy. But let's not pretend this is relegated to things like Fiverr.

I've paid pretty good money for web design work before only to find out later it was recycled or stolen from an open source project, grabbed off ThemeForest and re-colored, or straight copied and pasted off someone else's website. I worked with a startup that hired through a High Class™ marketplace for a lot of dough and they ended up with a logo that the designers eventually admitted was "heavily inspired" by another popular logo.

Just because you pay more doesn't mean you get a more honest vendor.

</comment><comment><USER23> Author here. Just to address the point that just because these logos are based on stock templates, doesn't mean they are rip-offs:

1\. If you read the original article, you'll see that the second designer assured me in writing that their artwork was original (I had my doubts so I asked).

2\. Most stock template's terms of use explicitly forbid using them as logos (presumably to avoid legal issues).

3\. At no point in the process was any hint given that the logo would not be original artwork. Here's the blurb from the logo designer's page:

> I will design a killer, high-quality, effective and custom-made logo for > your website, company or business.

And I may be mistaken, but the word "logo" itself carries connotations of uniqueness to me.

</comment><comment><USER24> $5? At $50/hr that's about 6 minutes; at $30 an hour that's 10 minutes. Barely enough time to load up a stock file, slap some text on it in Illustrator, make some default gradients, and call it a day. And that's exactly what you get.

Cheap things are cheap because 1) they take very little materials/labor to make, or 2) they cost a lot to make, but there's a lot of it and the cost is spread over many duplicates.

In this case, you're getting the latter, obviously. And you get what you pay for. I'd say, if you're the kind of person who thinks paying for a $5 logo or $300 logo is good enough, you might as well learn Illustrator yourself and whip something easy out, since it will satisfy your two constraints: 1) it's cheap/free, and 2) it looks okay to you but not to anyone else, but that's fine, because the $5 logo would have performed the same role anyways.

This is like asking: "What kind of branding do you get for $5?" "What kind of a PR rep do you get for $5?" Etc, etc.

<comment><USER25> I'm pretty sure that any attempt by me to learn Illustrator and whip out a logo will be neither cheap (as I value my time) nor look good (even to me). I imagine that's the case for a lot of (most?) non designers.

</comment></comment><comment><USER26> This reminds me a lot of sound effects in video games. At the high end you can hire a sound designer to do custom foley/SFX. For a small game, maybe $1-5k. Midrange, you can hire a sound designer with extensive knowledge to pick royalty-free sounds for you (maybe $250). On the cheap, you can browse through SFX libraries yourself and pick out what you want and pay per-effect (maybe $20-$50 worth). Ditto for music.

It's kind of a spectrum of "custom-for-you" to "off-the-shelf" AND a separate spectrum of "no-effort" (picking) to "put-in-a-lot-of-time-and-effort" (doing your own shopping).

None of these are "wrong" or "stealing" \-- in this analogy Fiverr isn't even the "cheapest" option (the author could put in some time and browse royalty- free templates on their own). It seems like more a sign of a mature market with too much inventory than anything shady.

</comment><comment><USER27> I have used the first designer's work and he did a pretty good job for the grand sum of $5. I think he's a design student, so it's a pretty good gig for him (especially because he lives in a low-cost country). I sent him a stock image that I liked and he made a similar design. No complaints from me!

</comment><comment><USER28> The larger issue here is that it's common and expected to have to trademark a logo, so if you're ever going to need to do that a logo made with stock art may be problematic.

Other than that I'm a big believer in asset stores, stock art, etc. Especially for prototyping.

</comment><comment><USER29> So the actual logo for his site is the word "Folyo" in a circle. [http://assets1.folyo.me/assets/logo- white-41e8dee74424daa460...](http://assets1.folyo.me/assets/logo- white-41e8dee74424daa4600dbbe8f1222a56.png)

Is this an original design?

If I spent $20 on Fiverr could I find a designer who could go on 123rf.com or another stock site, get a vector image, adapt it, and make a better logo that would be a less typical design?

How much did he actually pay for that logo? I assume it was quite a lot, given the context.

<comment><USER10> That logo is a vector circle with 5 characters in it. You are right. Bit ironic to decry unoriginal logo design, i would expect better for 20 into a fiverr account

</comment></comment><comment><USER30> Reminds me of "The 50 Dollar Logo Experiment" ([http://www.logodesignlove.com/the-50-dollar-logo- experiment](http://www.logodesignlove.com/the-50-dollar-logo-experiment)). Sometimes $50 isn't worth it either.

</comment><comment><USER31> I used this guy a year and a half ago: [http://www.vonglitschka.com/5MinuteLogo/index.html](http://www.vonglitschka.com/5MinuteLogo/index.html)

Loved the result. 5 USD for that kind of talent. Unbelievable.

</comment><comment><USER32> A cool article because after starting the experiment, it points out low-grade thieves are incentivized to rip-off other's work.

<comment><USER33> No one is stealing here, they are using template...

</comment></comment><comment><USER34> I used Fiverr to design logos for most of the "future-proof" business ideas at StartJumper: [http://startjumper.com](http://startjumper.com) (a side project of mine).

There are three that were "professionally" designed and not by Fiverr. Can you tell which ones?

<comment><USER35> "Logical Lodge", "Solar PV", and "Pet Friendly Florist" are the only ones that seem to have been built with any attention to modern design principles. "Foresight Strategist" is ambiguous, in that someone could have thought they were making a good logo while producing it.

The remainder would look entirely out of place in anyone's portfolio. I certainly can't say with confidence that $5 is a bad price for those images, but I can say that $500 would be.

<comment><USER34> The three are: Pet Florist, Privacy Enforcer and the StartJumper logo (so it was a bit of a trick question).

Good answers by the way. I probably would have guessed the same.

<comment><USER35> Haha, thanks for the closure, that's interesting to know.</comment></comment></comment></comment>


Ask HN: Are cryptocurrencies good or bad for America? - <AUTHOR> <comment><USER2> If you're talking about the US today, it's hard to say for sure. We don't know what people are using them for with much accuracy or precision.

A major use seems to be to commit fraud or as a risky speculation vehicle. We also know they've replaced cash in a tiny portion of the black-market economy.

Like everyone else, I have almost no data, but my guess is that it's net "bad" right now.

As for the future, anyone who says they know for sure is very naive. We just don't know what could happen. Perhaps crypto will save us all from a corrupt government.

<comment><USER3> There are quite a few local businesses near me that prefer to take cash. They say it's because of the credit card fees. Maybe it's because they don't want records that the IRS can subpoena at some point?

A distributed ledger is hardly anonymous.

</comment></comment><comment><USER4> Crypto is good for money laundry and fraud. Not good for America.

<comment><USER5> > Crypto is good for money laundry

What about cash? Is cash good for America?

> and fraud

What kind of fraud?

</comment></comment><comment><USER6> If by "America" one is referring to the USA, then I personally think that there are no legitimate benefits.

</comment><comment><USER7> Crypto currencies are agnostic to geography.

<comment><USER6> While I agree with your basic premise, I think there is some room for debate.

Firstly, regions/geography with cheap power and/or natural cooling are at a clear advantage with respect to payment for proof of work.

Secondly, regions where black markets thrive are at a clear advantage with respect to use and potential liquidity.

(imho)</comment></comment>


The Color Pink Is Bad for Fighting Breast Cancer - <AUTHOR> http://hbr.org/2011/07/defend-your-research-the-color-pink-is-bad-for-fighting-breast-cancer/ar/3

<comment><USER2> Might want to link to page 1 of the article: [http://hbr.org/2011/07/defend- your-research-the-color-pink-i...](http://hbr.org/2011/07/defend-your- research-the-color-pink-is-bad-for-fighting-breast-cancer/ar/1)</comment>


Mozaïk: create beautiful dashboards (Node.js, react, d3, stylus) - <AUTHOR> http://mozaik.herokuapp.com/

<comment><USER2> Took me a while to find this, since there are no interactive elements on this demo:

[https://github.com/PLOUC/MOZAIK](https://github.com/PLOUC/MOZAIK)

</comment><comment><USER3> In the same vein, there is AtlasBoard [1]

[1] [http://atlasboard.bitbucket.org/](http://atlasboard.bitbucket.org/)</comment>