How Do I Declare a Function Pointer in C? - <AUTHOR> http://fuckingfunctionpointers.com <comment><USER2> Just use the typedef. Even if you personally find the other variants readable, chances are that your peer reading your code doesn't.

<comment><USER3> Personally I don't like when people hide a pointer behind a typedef. If you want to use a typedef, typedef the function and then declare a pointer to that:

        typedef int func(void);

        func *func_ptr;

Avoids the mess of the function pointer syntax, but still makes the fact that it is a pointer clear.

<comment><USER4> Correct me if I'm wrong, but isn't a "function" always a pointer in C? That is, there's no such thing as a "value function" in C, right?

Given that, what's the advantage for "your version" of the idiom?

(This may just be nitpicking.)

<comment><USER5> One advantage is that you can declare functions with it, which is useful when you have many different operations of the same type. For example, take a toy calculator:

        typedef double binary_operation(double, double);
        binary_operation add, subtract, multiply, divide;
        double add(double a, double b) { return a + b; }
        /* ... */

        struct binary_operator {
            char const *name;
            binary_operation *operation;
        } binary_operators[] = {
            { "+", add },
            { "-", subtract },
            { "*", multiply },
            { "/", divide },
            { NULL, NULL },
        };

You can also use the function type in parameter lists, but it's equivalent to a function pointer type.

        int atexit(void function(void));

<comment><USER4> Well, yeah, obviously there's less redundancy, but I'm specifically not seeing the advantage that OP mentioned. (Which is all that I'm questioning.)

<comment><USER6> Here's an example:

        typedef void (*sighandler_t)(int);
        sighandler_t signal(int signum, sighandler_t handler);

Without the typedef, it's much less clear.

Edit: It could instead be written as the non-pointer type:

        typedef void (sighandler_t)(int);

And then used as:

        sighandler_t *signal(int signum, sighandler_t *handler);

And as a function declaration:

        sighandler_t foo;

With the pointer in the typedef, the type can't be used to declare functions.

</comment></comment></comment></comment></comment></comment><comment><USER7> The new c++ alt function syntax talked about here: [https://blog.petrzemek.net/2017/01/17/pros-and-cons-of- alter...](https://blog.petrzemek.net/2017/01/17/pros-and-cons-of-alternative- function-syntax-in-cpp/)

mentions replacing function declarations for

      void (*get_func_on(int i))(int);

with

      auto get_func_on(int i) -> void (*)(int);

which looks a lot more readable to me.

<comment><USER8> I'd say this is even more readable:

      auto get_func_on() -> std::function<void(int)>

<comment><USER9> It's more readable, but using std::function here introduces a second layer of indirection vs using a plain function pointer.

More specifically, std::function's operator() is virtual, and calls into a subclass that's specialized to function pointers of type void(int). The subclass then performs the actual function pointer call.

<comment><USER10> Technically function::operator() is not virtual (which wouldn't be very useful as std::function has value semantics), but it does runtime dispatching internally using an unspecified mechanism.

This can be virtual functions, or, more commonly, an hand rolled vtable. In the last case, if std::function is constructed with a function pointer exactly matching its signature it could in principle avoid the thunk and directly point to the function itself. I don't think most implementations bother.

/pedantic

</comment></comment></comment></comment><comment><USER11> The trick to reading crazy C declarations is learning the "spiral rule": [http://c-faq.com/decl/spiral.anderson.html](http://c-faq.com/decl/spiral.anderson.html) (here are more examples, with nicer formatting: [http://www.unixwiz.net/techtips/reading- cdecl.html](http://www.unixwiz.net/techtips/reading-cdecl.html))

<comment><USER12> The "spiral rule" doesn't work all the time. See this previous HN comment by stephencanon: [https://news.ycombinator.com/item?id=12775862](https://news.ycombinator.com/item?id=12775862) .

Also this comment by Linus Torvalds (copy pasted because I don't know how to link to Google+ comments):

> I don't think that works. It breaks trivially for consecutive [] or * cases, > something that he carefully didn't have in his examples.

> So the examples were made up to make it look like it's a spiral, but type > parsing is about precedence, not about spirals. It so happens that the > higher-precedence operators ([] and ()) are on the right-hand side, which is > why it "works" to start on the right.

> And it doesn't explain why

> typedef int _(_ _fn_t[][2])(void);

> is ok, but

> typedef int _( __fn_t[2][])(void);

> is not.

> "Spirals"? I don't think so.

<comment><USER11> All these years I assumed that the 'spiral rule' and 'right-left rule' (linked from the stephencanon comment above, and also described in my second link) are two ways to describe the same algorithm, but, reading closely, they aren't! I guess 'spiral rule' is a stickier name, which is why it's something that people remember even though it's janky.

</comment></comment></comment><comment><USER13> For anyone unable or unwilling to access that domain name for work purposes or filtering purposes, the linked page lists this alternative: [http://goshdarnfunctionpointers.com/](http://goshdarnfunctionpointers.com/)

<comment><AUTHOR> Thanks! Unfortunately, the page currently uses Hover's "stealth redirect" which embeds the profane URL in an iframe. So, if the profane URL is actually blocked by content filtering, you probably still won't be able to access it.

I'm actively working on the page. Once it stabilizes, I'll consider mirroring a sanitized version instead of using the "stealth redirect".

<comment><USER14> Wait, what type of fucked up world do people exist in where a website is blocked due to the word "fuck".

<comment><USER15> You don't think perhaps a filter might assume that a website whose URL contains "fuck" might have something to do with porn?

</comment></comment></comment></comment><comment><USER16> The easiest and best way to learn the syntax is to not memorise specific cases but the grammar itself, which IMHO is no more difficult than the existing concept of operator precedence. Everyone using C should hopefully already know that multiplication has higher precedence than addition, so likewise function call (and array subscripting) has higher precedence than pointer dereference. Thus this table should make it clear that combining the two operators creates pointer-to-function:

        T x;                      T *y;
        T f();                    T (*g)();

        T                         pointer to T
        function returning T      pointer to function returning T

and the alternative, T _h(); , is parsed as T_ (h()); and thus becomes "function returning pointer to T".

The apparent struggle I see with this syntax has always somewhat puzzled me, because I don't see the same level of complaints about e.g. arithmetic expressions (like 6+3*4/(2+1)) which are parsed with precedence in much the same way. K&R even has a section on writing a parser that recognises this syntax, so I suspect it's really not that hard, but the perception spread by those who didn't learn the syntax but only memorised the "easy cases" is making it appear more difficult than it really is.

<comment><USER17> What we need realize is that simple grammar does not always lead to simple comprehension. Nesting the grammar elements more than a few levels is always difficult for our current biology equipment.

</comment></comment><comment><USER18> Every time I have to deal with the declarator syntax in C or C++, I can't help but ponder what K&R were thinking when they designed this. It's not like there weren't other languages back then with a saner approach.

It looks like what they did was take the syntax from B:

        auto x[10];

and generalize it such that the type name ended up before the variable name, as in Algol. But in B this worked much better, because it didn't have array _types_ (or pointer types, or function types) - everything was a machine word. So [] in a variable declaration was just to allocate memory to which the variable would refer; the variable itself would still be a word. When they made [] part of the type, and added pointers and function types, the result was a mess.

<comment><USER19> What they were thinking can be see in K&R C - there is no "typedef" in early C. Without typedef, the syntax of C is context-independent and LALR-1. You don't have to know if a name is a type to parse the syntax. Then came "typedef", which broke parsing. C parsing became context-dependent. To parse C with "typedef", and especially C++, you must read all the header files first.

With name-first declaration syntax (Pascal, Modula, Go, Rust), parsing is context-independent again. Readability improves. Error messages improve. Syntax-coloring editors with a single-file view don't get lost.

<comment><USER20> That's interesting -- I was wondering in which cases typedef changes the parse tree, and came across a few [1]:

        a (b);      /* function call or declaration */
        a * b;      /* multiplication or declaration */
        f((a) * b); /* multiplication or deref and cast */

> With one further change, namely deleting the production typedef-name: > identifier and making typedef-name a terminal symbol, this grammar is > acceptable to the YACC parser-generator.

[1] [http://eli.thegreenplace.net/2007/11/24/the-context- sensitiv...](http://eli.thegreenplace.net/2007/11/24/the-context-sensitivity- of-cs-grammar)

<comment><USER18> С++ takes it all the way to 11 with templates. Here's a program that is parsed differently depending on whether pointers are 32-bit or 64-bit:

        template<size_t N = sizeof(void*)> struct a;

        template<> struct a<4> {
            enum { b };
        };

        template<> struct a<8> {
            template<int> struct b {};
        };

        enum { c, d };

        int main() {
            a<>::b<c>d;
            d;
        }

Depending on which instantiation is used, the first line of main is either a variable declaration, or two operators < and > applied in sequence.

This is especially fun to deal with for C++ IDEs that support semantic highlighting (i.e. typenames are in a different color etc). If I remember correctly, the first one that could handle this right was VS 2012 - it only took 14 years after ISO C++ standard was released...

</comment></comment></comment></comment><comment><USER21> See related:

[http://fuckingblocksyntax.com](http://fuckingblocksyntax.com)

[http://fuckingclangwarnings.com](http://fuckingclangwarnings.com)

</comment><comment><USER22> Or if one doesn't have cdecl installed there's an online version[1] which has proven as a useful check on several occasions

[1] [http://cdecl.org/](http://cdecl.org/)

<comment><USER23> cdecl is nice and all, but it will fail if there is any type that isn't a simple built-in C type. It's rare that I can just copy-paste a declaration into cdecl.

</comment></comment><comment><USER24> This is one of those cases where I prefer C++

        template <typename Func> using function_ptr = add_pointer_t<Func>;

and now declarations are a bit more sane:

        void foo(function_ptr<void (int)> callback);

<comment> Const-me In C++, pointers to member functions are even more cumbersome than C function pointers.

<comment><USER25>
      auto greet = std::mem_fn(&Foo::display_greeting);

Looks pretty simple to me, much simpler than C function pointers. :)

Pairs nicely with std::bind, too, like so:

      Foo foo;
      std::function<void(int)> setter = std::bind(&Foo::setValue, &foo, std::placeholders::_1);
      setter(42);

<comment> Const-me If you need to keep that pointer in a collection, or in a class member, or pass as a function argument, "auto" won't work.

And std::function introduce some performance overhead.

<comment><USER25> > If you need to keep that pointer in a collection, or in a class member, or > pass as a function argument, "auto" won't work.

Trivially solved with decltype, no need to remember anything.

decltype(std::mem_fn(&Foo::Whatever))

Typedef it if you want.

> And std::function introduce some performance overhead.

It's the same performance as a virtual function call. Pretty much the same as a function pointer invoke.

</comment></comment></comment></comment></comment><comment><USER17> I never got used to having variables sandwiched inside a type. I know I am not supposed to suggest out-of-the-box, but why can't we add a new syntax, e.g.:

        return_type Fn(parameters) var;
        typedef return_type Fn(parameters) TypeName;

where Fn is a new keyword -- or not, if compiler understands dummy syntax -- (I would suggest λ when using greek letters in code become norm).

It simplifies the C syntax a lot IMHO.

PS: now I am out-of-the-box, maybe this is better:

        Fn{return_type, param1, param2} *var;

<comment><USER26> You'd have to call it something like `_Fn` instead, or you're going to conflict with existing code (the C standard reserves identifiers starting with an underscore followed by a capital letter; it also reserves identifiers starting with two underscores, but it's fairly common for code to ignore that and use identifiers like that anyway).

</comment></comment><comment><USER27> One of the only reasons I had "The C Programming Language" on my desk when I was a C coder. The only thing I could never remember...

</comment><comment><USER28> The syntax is atrocious, but there isn't much C can do about it.

</comment><comment><USER29> Needs more profanity. The whole syntax is profane.

</comment><comment><USER30> noscript shows a nasty looking XSS warning when I click any of the 'example code' links.</comment>


Trump vs Clinton: Bitcoin Illiteracy in 2016 Presidential Election - <AUTHOR> https://news.bitcoin.com/trump-clinton-bitcoin-illiteracy/ <comment><USER2> quote

As Newsweek recently lamented, "Over the next four-year presidential term, a swarm of fantastic new technologies, such as artificial intelligence, virtual reality, blockchain, personal genomics and drones, will profoundly alter society, business and geopolitics in ways we have never seen. And our two major-party presidential candidates do not have a clue."

endquote

Personally, I'm glad they don't address them. The moment they do, the next it will be infested with capitalism, smear campaigns, and everything else those two stand for. However, it is dangerous that they don't even realize that these new techs are the future. The future that they're supposed to be leading.</comment>


Really Bad Chess makes chess fun even if you're really bad - <AUTHOR> http://www.theverge.com/2016/10/13/13262994/really-bad-chess-zach-gage-iphone-ipad <comment><USER3> When my daughter was little, we played "turn around chess". She could, at any time, start her turn by turning the board around and taking over my position. I simply played my best chess (which isn't all that great, frankly) and when she felt cornered she would turn the board around and get the opportunity to attack from a superior position while I would try to fight my way out.

We both had a lot of fun, and I didn't have to do anything fake to make it fun for her.

<comment><USER4> That is a _great_ idea, and I wish I had had it in my back pocket about ten years ago.

My daughter invented "coin flip chess" when she was little. I had showed her how to flip a coin to pick between two choices, and she wanted to add it to the game. So before you moved you had to flip a coin, and if you guessed wrong you lost your turn.

On move four she took my queen.

</comment></comment><comment><USER4> Martin Gardner noted in one of his Mathematical Games columns that chess variants are great for evening the playing field between players of different skill levels. There are so many variants out there. I like how this one works well with a computer-run game (a physical Really Bad Chess would require lots of extra pieces).

</comment><comment><USER5> My first college roommate* and I played chess a couple of times. He beat me within a few moves both games. After winning the 2nd game he said to me (in jest): "That's called the Fools Mate. You know why it works on you?"

I haven't play since. This Really Bad Chess looks like it could be fun though...

(*) Bob P.: If you read this, I miss ya buddy!

<comment><USER6> I don't remember if he was a roommate or just a suite mate but I played a few times with a friend at school and he could beat me when he was blindfolded. I was "barely passable" at one point but I haven't played in years.

</comment></comment><comment><USER7> > This gulf in skill and experience meant that the two couldn't play together > in a meaningful way; if they tried, Gage would get crushed, and the match > wouldn't be much fun. So he decided to fix the problem.

This problem has already been solved for hundreds of years. [https://en.wikipedia.org/wiki/Chess_handicap](https://en.wikipedia.org/wiki/Chess_handicap)

<comment><USER8> In my opinion, there is no acceptable handicap system for chess; its symmetry isn't conducive. It is also something that is almost never done - I've never seen a handicap (beyond time and color) used in any chess club. Allotting more time to the weaker (and less to the stronger) player is probably the best method of balancing skill discrepancy. This is one of the reasons I abandoned chess for go (baduk, weichi, igo, etc.), where the handicap system is fully functional up to 9 additional stones (pieces) for the weaker player. The gameboard sizes can range from 19x19 to 5x5 (refers to the intersecting lines within grid). While this system is almost perfect in go, it is at best a blemish to the game in chess. However, loser's chess can be quite entertaining. [https://en.wikipedia.org/wiki/Losing_chess](https://en.wikipedia.org/wiki/Losing_chess)

<comment><USER9> I think a good handicap system for chess would be too allow [unlimited] undos to the weaker player but no undos to the stronger player.

That would allow the newb to quickly try different strategies and see their outcomes right away, enabling them to learn faster.

</comment></comment></comment><comment><USER10> There used to be a game online (that was popular in my childhood) called Kung Fu Chess[0] -

This removed the "Turn Based" application of Chess and instead made it real- time online - with only a period of 1-5 seconds of waiting to be able to move a piece again, depending on your settings.

The other "novel" feature was the introduction of a 4 player chessboard - <USER2> added to the strategy having three other opponents all looking to get the jump on you.

The game unfortunately shut down in 2008 - not sure where it ended up.

[0] [https://en.wikipedia.org/wiki/Kung- Fu_Chess](https://en.wikipedia.org/wiki/Kung-Fu_Chess)

<comment><USER11> Kung Fu Chess was fantastic! If you're looking for a modern strategy game, Check out Arimma - designed to be difficult for computers, easy for humans

</comment></comment><comment><USER12> Anti-chess is fun.

1\. You win if you get rid of all your pieces

2\. The king is just any other piece. No castling, no check/checkmate. A pawn can promote to king.

3\. If you can capture you must capture. You can only decide if you have more than one capture option.

</comment><comment><USER13> I like chess960 but I like to go further and randomize the positions of the hind row completely and do it differently. I havent tried varying the composition of the pieces or messing with the pawns, but once I started learning opening books plain ordinary chess became depressing for me.

</comment><comment><USER11> [https://en.wikipedia.org/wiki/Chess960](https://en.wikipedia.org/wiki/Chess960) \- by Bobby Fischer

</comment><comment><USER14> I'd be interested to see how the poster in this article compares to the same poster but with a QR code instead of a tag to tear off.

</comment><comment><USER15> This looks like such fun, I wish there was a website I could play against others on instead of an iOS app.

The idea feels fresh, challenging, curious. It has me thinking about other ways to add variety to old games, similar to the flood of creativity board games have experienced the past couple decades.

</comment><comment><USER16> Wikipedia: List of chess variants

[https://en.wikipedia.org/wiki/List_of_chess_variants](https://en.wikipedia.org/wiki/List_of_chess_variants)

</comment><comment><USER17> usually when I want to play someone at about my skill level I go to one of any number of free chess servers where there are literally hundreds or even thousands of players of nearly every playing level. And if I want to play a game where the pieces are shuffled I play fischer random on said server. But I guess if you're clueless about chess but know how to write an app this is what you end up with.

<comment><USER18> This is different from FRC, and different from just playing against someone as your own skill level.

</comment></comment><comment><USER19> They're advertising an URL that shows an "Download iOS app" button. This is so dumb, I will gladly take all your down-votes. What were they thinking?!

P.S. Progressive Web Apps.</comment>


The 3D Software Rendering Technology of 1998's Thief: The Dark Project (2011) - <AUTHOR> http://nothings.org/gamedev/thief_rendering.html <comment><USER2> Funnily enough, I've been playing Thief recently (this one, not the rubbish new one). And _wow_ that game is hard.

It's also an absolute blast to play, and an important piece of gaming history (one of the first First Person Stealth games, helped codify 3D stealth as a genre, engine later used in System Shock 2, had some influence on Warren Spector's next game, Deus Ex).

While the renderer wasn't particularly impressive for the time, the AI, sound, and lighting engines were, which was essential for a stealth game.

<comment><USER3> > And wow that game is hard.

It's brutal. I ended up way down at the far end of a level (a sewer I think) only to find that I was missing something I needed to do or have from back near the beginning. Lack of attention gets punished hard. Great game though, you really feel like you earned beating each level.

<comment><USER4> Finished that and Thief 2 on max objectives on every level. Not because I'm particularly fond of rock hard gameplay, but because you got to appreciate the game to its fullest extent.

Games that up the difficulty by making the mobs bullet sponges, meh.

(With that said, some levels in the first were a real grind to deal with all the guards.)

<comment><USER5> I really appreciated the fact that one of the ways they ramped up the difficulty was by increasing the required objectives.

<comment><USER4> There's literally entire areas you don't need to visit if you use the lower difficulties. On the other hand, the extra cash you get lets you buy a lot more stuff... which you're going to need to accomplish all those objectives.

I don't particularly ever wish to revisit The Cathedral. Spent three hours retracing my steps trying to find about 15 gold...

</comment></comment></comment></comment></comment><comment><USER6> The amazing thing here is that Looking Glass studios was known for its well- written stories and innovative gameplay, in addition to its technology. The first two generally come from highly creative people that are not necessarily trained in the minutiae of high-performance technical design. It must be incredibly difficult to assemble a team like that while also recruiting someone with the technical chops to create the engine.

<comment><USER7> I remember reading some rumors that part of the dev team behind Thief also works on Dishonored. Thief was a fantastic game, so is Dishonored, and the similarities are striking. It would be interesting to know if this fact is true.

<comment><USER8> This would not surprise me at all. One of the main level designers for Dishonored also did City 17 in Half-Life 2. When I first played through it I was like "wow this person really got inspired by HL2". Turns out it was the same guy. Dishonored was honestly a better Thief reboot than the new Thief, but then again the new Thief really made me furious. I think I got < 2 hours in before I just couldn't stand it anymore.

</comment></comment></comment><comment><USER9> For those wondering what it looked like: [https://youtu.be/38tJGachSfg?t=10m13s](https://youtu.be/38tJGachSfg?t=10m13s)

It looks pretty amazing to me and fluid for a purely software rendered video game.

<comment><USER2> ...Actually, I'm pretty sure Thief _did_ get hardware rendering at some point. For one thing, the finished product uses D3D.

<comment><USER10> This was even mentioned in the post.... The author left the company for a short while and returned to add hardware rendering.

</comment></comment></comment><comment><USER11> This game was beautiful and truly exciting to play when it came out. The graphics really contributed to the feeling of being there, sneaking around, watching light dancing from torches and shadows of moving NPCs.

<comment><USER12> The audio was done well too, gave a real sense of atmosphere. I find their latest installment with all the fancy graphics, high quality models, cutscenes and so on just not as fun to play. They just don't capture the same atmosphere.

<comment><USER13> The mental abstraction layer primitive graphics provides may communicate more value than we gain from a near accurate simulation.

I'm not sure if this is because realism in a game contains mostly unnecessary information and our brains don't have to filter all of that out, or it is something else. The part of me that is bearish on VR is for this reason.

<comment><USER14> It's a problem with a lot of newer games. As someone who remembers playing on the old Atari 2600, the hyper realism gets tiring really fast.

It manifests itself, not just in the graphics, but in forcing me to watch yet another ladder climbing animation, my character not being able to stop on a dime and turn completely around, ad nauseum.

I vastly prefer games that don't go for realism.

</comment></comment></comment></comment><comment><USER15> I find software 3D rendering really interesting, as somebody who works on indie games. GPU-accelerated rendering is obviously much faster and you can get much better results; but it does have drawbacks!

With GPU rendering, I spend the majority of my time testing and debugging on various platforms. 3D APIs are very complex, hardware capabilities vary a lot and driver quality is very poor. So even though you can get much better results in principle, in practice you _can 't_ get it as good as you hoped (or at least I can't) while also making it robust and reliable.

With software rendering, you needed a ton of effort (by really smart programmers like Barrett) to get viable results, but at least you had confidence that it would _work_ on everybody's computer, rather than crashing randomly on drivers that don't implement a 300-page 3D spec correctly.

I'm told that Vulkan should improve matters, being simpler and better- specified than OpenGL, but I'm skeptical. It still seems very complex, and it doesn't run everywhere yet so it's not a great fit for low-end indie games.

<comment><USER16> "Much Faster" is a bit of an understatement. The last software rendered title I can think of is the first Unreal Tournament. No CPU can handle the load of a modern game's graphics, not even close.

Even badly integrated OpenGL is still orders of magnitude faster than the most optimized software rendering. And you're getting a lot more in terms of image quality on the GPU: texture filtering, anti aliasing, "free" conversions to gamma/linear space and more.

Vulkan IS simpler than OpenGL, theres no arguing about that. But simpler does not mean easier. There's just much less stuff to worry about as engine developers to hit the fast path. On the other hand, you're managing a lot more memory by yourself.

And even in software rendering you still get different results on different hardware. And even different results in debug vs release. Floating point arithmetic is fun like that. CPUs varies in power just like GPUs do; cache sizes vary greatly, number of cores, base clock speed, amount of available memory, memory speed, etc. And we're not even touching SIMD yet.

You can't replace having to learn the hardware and the APIs to access it in order to build a game engine. That was also true of software renderers; they're closely tied to the properties of the CPU they target.

That's why you get access to Unreal4 or Unity3D; very, very few people can actually make stable and portable game engines. Its just a hard problem space to begin with. Making it easier only means losing lots of flexibility and performance.

<comment><USER17> One thing to consider there is that today most 2D inide games are in reality rendered by 3D hardware pipeline (because of some middleware that just maps anything to Direct3D/OpenGL ES, today this includes even SDL) and that is the use case where you (a) don't need hardware acceleration for rendering at all and (b) trigger obscure driver/hardware bugs that nobody cares about because they are irrelevant for truly 3D engines.

<comment><USER16> So long as your 2D game doesn't have lighting or require shaders. You'd limit yourself to vector rasterizing and blitting bitmaps.

There are loads of 2D games out there pushing the GPU far enough that they would never run in software rendering.

</comment></comment></comment></comment><comment><USER18> A small incise : On 2001 Blade, the edge of darkness (aka Severance : Blade of darkness outside of Spain), did a really nice job displaying indoor/outdoor dungeon ambient.

The ambient, and the water effect and realtime shadows was really awesome.</comment>


Show HN: 3DTin - 3D modelling in browser - <AUTHOR> http://www.3dtin.com/ <comment><USER2> I clicked the link, thinking, "Please be like Blender, please be like Blender". Then I clicked the link, found a cool voxel modeler, and was satisfied. To clarify...

This is 3D modeling with voxels.

</comment><comment><USER3> Opera is not listed among the supported browsers, but everything I tried works fine (version 11.00). Did you forget it, or does it actually have show stopping bugs?

<comment><USER4> I confirm this. Opera 11 on Linux (11.01 - 1160).

<comment><AUTHOR> Yes, it should work find in Opera too (except Opera doesn't support WebGL, so it will use Canvas 2D, hence will be comparatively slower). It's not on supported list, because I don't test on it regularly. -3DTin Developer

</comment></comment></comment><comment><USER5> Impressive! It seems to be 90% of an online 3D CAD app that I've envisioned and blogged about: <http://hacking-shindyapin.tumblr.com/tagged/3dCAD>. Any plans on making it open-source?

</comment><comment><USER6> That's really very impressive, I can imagine coming back to this as a rapid- sketch tool in a way that I never could with SketchUp.

One suggestion: To aid camera/scene navigation, you might want to consider hotkey + drag to temporarily flip into camera move modes, even when in draw mode; many desktop 3D/CAD tools offer this. I'd opt for ctrl/⌘+drag for rotate, and allow your existing shift+drag for panning to work in draw mode.

<comment><AUTHOR> That's a good suggestion. Thanks. Not sure if hotkeys like WinKey or ⌘ can be detected in javascript, but ctrl+drag seems doable. -3DTin Developer

</comment></comment><comment><USER7> Since you gave credit to even your operating system, the fact that that you leave out any canvas/webgl libraries probably means you didn't use any -- I'm superly impressed! Was thinking you may be using three.js or pre3d to get it working on both canvas & webgl.

@everyone: Try it in webgl like in Chrome Canary or FF4, huge difference in performance and panning angle allowed.

</comment><comment><USER8> That is awesome use of canvas. What is it for?

</comment><comment><USER9> It's nice to see that you can do stuff like this without plugins now thanks to Canvas and WebGL, even if the performance and stability aren't quite there yet.

One particularly strange bug: Setting smoothness 'too high' (how high you can set it seems to depend on the number of cubes) causes random parts of the model to vanish.

The responsiveness also leaves something to be desired, especially since it causes the browser/tab to freeze up - I thought it was supposed to be possible to use web workers to solve that problem, but I've yet to see a HTML5 app that actually uses them :(

<comment><AUTHOR> 3DTin does use Web Workers. However the smoothing algorithms generate too much data if there are lot of cubes and/or the smoothness is high, that makes the tab/browser unresponsive. The problem of vanished parts of the model at higher smoothness is a known one (happens when WebGL is the backend). I've further optimizations planned in the near future that should improve the performance gradually and fix the bugs like vanished parts. Stay tuned. Thanks for the feedback. -3DTin Developer

<comment><USER10> I think smoothing of ONE is just fine - Maybe you should just leave at that.

Cool app :) - Lots to learn from it (using WebGL, etc.).

Before looking in the source code - was something like marching cubes used for the smoothing?

<comment><AUTHOR> 3DTin uses Catmull-Clark subdivision to create smooth surfaces. Details here: <http://blog.3dtin.com/smoothing-or-subsurfacing> \- 3DTin Developer

</comment></comment></comment></comment><comment><USER11> Nice tool to make funny startup logos! :)

</comment><comment><USER12> awesome. love it. it's almost like having lawnmower man right in the warmth of my home.</comment>


A bum deal? EU to roll out toilet flush law - <AUTHOR> http://www.cnbc.com/id/101159340 <comment><USER2> Every country has standards for this. Heck, in the US different states have different standards for how much water a flush should use. Replacing those national standards with a single EU-wide standard would be a step forward.

</comment><comment><USER3> They should get rid of those gross toilets with the shit-shelves.

</comment><comment><USER4> So when the 6 liters is not enough to flush away the culprit then people going to flush 2 times, flushing away 12 liters instead of maybe 8 or 10.

Yeah, real improvement there...</comment>


Your startup's first iOS App - <AUTHOR> https://medium.com/ninjarobot-apps/your-new-ios-app-ed46aba15154#.dia40pur2 <comment><AUTHOR> 5 things to keep in mind when bringing your startup's idea to iOS for the first time</comment>


Proposed Parole for International Entrepreneurs to Stay in the US Needs Comments - <AUTHOR> http://www.regulations.gov/document?D=USCIS-2015-0006-0001 <comment><AUTHOR> USCIS is proposing new rules that grants parole to International Entrepreneurs to stay in and operate from the US, but these rules aren't perfect. Here are a few flaws:

1\. Your startup would have to have raised $345k from 'qualified investors' or $100k from federal/state grants (difficult for bootstrappers to leverage this)

2\. Should have created 10 jobs for Americans in 2 years

3\. This parole will be granted for 2 years, and then extended by another 3, but after that there's no provision to let founders stay.

4\. You need to have at least 15% stake in your company (which can be easy initially but could get diluted going ahead, specially with multiple founders)

USCIS is accepting comments on this proposal till Oct 17. You can do your part by stating personal anecdotes or easy to imagine plausible examples to suggest improvements to the rules.</comment>


Ask HN: Is it possible to sign up for a Google account without Gmail and phone? - <AUTHOR> Normally you can sign up for a Google account using your own (non-Gmail email address) here:
https://accounts.google.com/SignUpWithoutGmail?hl=en
But of late, the reCAPTCHA has been replaced with a phone number requirement.
Is there no way to remain anonymous with Google now? <comment><USER2> Your phone number is anonymous. In the US, you can go to a store, buy a $40 prepaid phone with cash, and use Google anonymously.

<comment><USER3> Other jurisdictions, such as Australia, require identity checks [http://acma.gov.au/Citizen/Phones/Mobile/Prepaid- mobiles/new...](http://acma.gov.au/Citizen/Phones/Mobile/Prepaid-mobiles/new- rules-streamline-identity-checking-for-prepaid-mobiles)

<comment><USER2> Burner[1] (or similar services) might be an option for people in such jurisdictions.

1\. [https://www.burnerapp.com/blog/2015/3/26/burner-is-now- avail...](https://www.burnerapp.com/blog/2015/3/26/burner-is-now-available-in- australia)

<comment><USER4> Google often just shows up a 'This number cannot be used for verification' message.

</comment></comment></comment></comment><comment><USER5> Why are u so worried? 1\. Sim card location? Google can get an approximate location from your IP, WiFi like Starbucks. 2\. If u are so paranoid you need a different service!

Buy a sim card activate; enable 2FA with authenticator. Destroy sim. I am not sure google can ASK operator for name and SSN.

</comment><comment><USER6> :) Leave the phone number field empty and click "Next Step". It's an optional field, they just trick people to collect phone numbers.

<comment><AUTHOR> Clicking Next Step then asks you to enter a phone number to either receive a call or text message for verification.

<comment><USER7> If you list you age between 12 - 14, tgey will let you sign up without providing any other information.

<comment><AUTHOR> Haven't been able to replicate this.

<comment><USER8> I was able to register an account without a phone number using this method.

</comment></comment></comment></comment></comment><comment><USER9> Ironically, google have stopped enabling me to create gmail accounts because my phone number has been used too many times for activation.

Doesn't matter anymore, I self-host as much as I can anyway.

<comment><USER10> how many accounts you had?

<comment><USER9> At least three.</comment></comment></comment>


Ask HN: Are you using any internal company website/wiki? - <AUTHOR> In your company, how do you organise the information and do you have a central place to host it? I'm specifically talking about: - policies - news - handbook - employees directory - travel booking - etc. <comment><USER2> DokuWiki is good with enough plugins and not so complex as other solutions. Main problem as always is having "everybody" learn the syntax to add content.

</comment><comment><USER3> We just started using Documize after trying out a few solutions including wiki.js and Confluence.

[https://www.documize.com](https://www.documize.com)

</comment><comment><USER4> I have used Confluence, GitBook, Sphinx, & MkDocs in the past.

</comment><comment><USER5> We run a self-hosted Mediawiki instance, and also use Google Docs.</comment>


Ask HN: what's the best guide to code licenses you've come across? - <AUTHOR>

I've got a working grasp of open-source code licences, but I'm determined to get my head more fully around them, so that I can be 100% confident about the side-effects of using open-source projects with a given licence.
I want to end up with a good, working grasp of GPL (incl versions), AGPL, BSD, MIT and as many other [relatively] common setups as I can, and be able to explain them quickly and correctly to others. To get me on the road to that, it'd be great to get a few pointers to good/trusted sources of knowledge that are relatively easily graspable.
I am not a lawyer, and I am busy making things, so summaries/grids/lookup tables are particularly welcome. :o) <comment><USER2> I've found Jeff Atwood's article on the topic to be the most useful selector of when what license is appropriate: [http://www.codinghorror.com/blog/2007/04/pick-a-license- any-...](http://www.codinghorror.com/blog/2007/04/pick-a-license-any- license.html)

<comment><USER3> good one, missing only one important license: CDDL

</comment></comment><comment><USER4> By far the best work on this subject has been written by Lawrence Rosen in his book "Open Source Licensing":

<http://www.rosenlaw.com/oslbook.htm>

Free to read online - or buy a hardcopy.

Unlike less useful works, Rosen actually provides a model for thinking about open source models. Even if you only care about commercial software licensing, this this information in this book will be valuable.

</comment><comment><USER5> Don't forget MPL2 at <http://www.mozilla.org/MPL/2.0/>

</comment><comment><USER3> it's very easy:

GPL: nobody can distribute your software as a closed-source system. Nobody can also link your software with non-opensource ones.

BSD, MIT, Apache: anyone is allowed to do anything with your code, provided that reference to your name is preserved.

If you code an open-source product, but it's intended for enterprise integration with lots of non-opensource components, go for a non-GPL licence, like MIT.

In most other cases, GPL is everything you need.

For non-software products that you want to share, use Creative Commons licenses.

<comment><USER2> _For non-software products that you want to share, use Creative Commons licenses._

That selection in itself isn't easy, which is probaby why they have a page dedicated to that decision: <http://creativecommons.org/choose/>

<comment><USER3> of course, every such decision needs research and reading. Nothing is easy :)</comment></comment></comment>


The Talented Mr. Khater - <AUTHOR> http://www.texasmonthly.com/story/university-of-texas-grad-versus-international-conman

<comment><AUTHOR> This isn't about startups, nor does it have anything to do with technology. That said, it's a sort of fascinating story.

I've found a number of similar types of tales on HN, and always find them enjoyable reads. :-)</comment>


How to Avoid the Desperate Future of "Interstellar" - <AUTHOR> http://nautil.us/blog/how-to-avoid-the-desperate-future-of-interstellar

<comment><USER2> Space is still expensive. SpaceX is awesome, and they're making things cheaper.

Really though, the solution is increasing productivity. If all 6 (7?) billion people's productivity doubles, the cost to go to space is cut in half. Our infrastructure isn't good enough to make space cheap.

As powerful as Microsoft was for business, Gate's curing malaria will probably have a bigger impact. millions of people not dying means a larger market. Millions of minds trying to make the world a better place - at least making stuff and buying stuff.

In the long run, getting everyone enough food and clean water is probably the best answer to lowering the cost of going to space (and everything else). If the billion people that get by on a dollar a day can produce more because they're not sick and dying, everything gets cheaper.

<comment><USER3> It is far from given that Microsoft has had a positive impact on the world's economy!! It shouldn't have to be stated but you cannot measure contribution by the economic size of an organisation, or even assume it is a positive one (counterfactually).

It is all speculative, but in my opinion by being a monopoly provider they have held back innovation by several years, and effectively taxed large amounts of money out of the rest of the economy.

</comment></comment><comment><USER4> Just too many of us. Yet several generations of a 'one-child-per-couple' policy would quietly reduce our numbers enough for us to cope with our over- population and unsustainable use of resources.

But that sort of thinking is taboo. 'Interstellar', here we come. But unfortunately, there won't be that convenient wormhole waiting for us.

<comment><USER5> Forcing developed nations with relatively decent educational systems to lower reproduction rates is not the answer. We need more problem solvers on Earth, not less. Malthus has consistently been proven wrong - [http://en.wikipedia.org/wiki/Green_Revolution](http://en.wikipedia.org/wiki/Green_Revolution)

</comment></comment><comment><USER6> I up-voted this article just because of the video of Neil deGrasse Tyson. His little rant was that good.

</comment><comment><USER7> Can someone explain to me what nautil.us is? It looks like some sort of Wired 2.0 (if anyone remembers Wired at the beginning, it was kind of well written and on-topic, now its really trashy).

</comment><comment><USER8> Sort of a 25¢ answer to a $1B question, no? Yes, I put together the bit about reusable rockets on my own.

The author doesn't really close the loop on the imagination problem, also known as the political problem. How much of the power of this idea in the 60s was due to the cold war? Hard to say, but I would characterize the interest in space exploration among the non-technical people I know as _non-existent_ \-- and tweeting the latest pictures from the Hubble doesn't count as interest.</comment>


Germany to meet EU guidelines to ban single-use plastics by 2021 - <AUTHOR> https://mymodernmet.com/germany-single-use-plastic-ban/ <comment><USER2> From my reading of the data, I feel that banning plastic bags (for example) would do more harm than good (in 1st world countries). The alternatives require more reuse than actually occurs in order to be environmentally viable [0], waste management makes sure that no garbage gets into the ocean and is either kept in a landfill or incinerated responsibility. And "dumping plastic overseas" is a non issue: Its at most 10% of the exporting country's plastic waste.

It's not that plastic doesn't cause expenditure of resources but rather that life requiees that anyway and in most use cases plastic may be the most enviormently friendly way to answer a need such as a carrying vessel for forgetful people (again, in 1st world countries with excellent waste management)

[0] [https://www2.mst.dk/udgiv/publications/2018/02/978-87-93614-...](https://www2.mst.dk/udgiv/publications/2018/02/978-87-93614-73-4.pdf)

<comment><USER3> > The alternatives require more reuse than actually occurs.

Where I live, we banned plastic bags in 2017. Every store at first sold cloth bags, for buyers who didn't bring their own. Some weeks later, everyone had several reusable bags, that they would bring when buying stuff, not a hard thing to do.

Those bags last even years, so I don't understand why you think people wouldn't reuse them. They actually are quite better (they don't make my fingers hurt, won't break so easily, etc).

<comment><USER4> Because there is a study showing that some bags needs to be reused 50,000 times, degradable plastic bags which are then reused as rubbish bags or put into recycling are a better option than the trendy cloth bags that have a pretty substantial environmental impact and not the beneficial kind.

I don't know about you but even if a bag lasts for years I don't think it will be reused more than 1000 times.

<comment><USER5> It's not 50000 times. It's 131 times. Paper bags 3 times.

You can use a cloth bag 131 times easily.

[https://stanfordmag.org/contents/paper-plastic-or- reusable](https://stanfordmag.org/contents/paper-plastic-or-reusable)

If like you assume the bag will not be used more than 1000 times, it beats it's target to be better than plastic bags by a factor of 10.

</comment></comment></comment></comment><comment><USER6> I hope this doesn't turn out like the ban on single-use plastic shopping bags in Austin.

Many grocery stores "complied" by replacing the single-use bags with much thicker "reusable" plastic bags. So now customers still don't bring their own bags into the store, the new bags still aren't easily recyclable and I suspect most are thrown away just as before.

Edit: on the other hand, the city of Austin's waste management is very supportive of recycling and hopefully they'll support plastic film in the single-stream collection and make it much easier for the average person to do the right thing.

<comment><USER7> This _may_ be a just factor of culture and attitude.

In Germany, single use plastic bags have not been allowed in supermarkets for several years now and it has worked quite well IMO.

Yes you can buy thicker re-usable bags (sometimes made out of textiles or a mixture of textiles and plastic) but by far many people bring their own bags, or just load the stuff into shopping trollies and take it to their cars (unfortunately the petrol/diesel car culture is still going strong :( ).

Also, in places like Lidl and Aldi, it's quite normal to just look for an empty box of some product on the shelf(e.g. a box that had some canned goods) and use that as your 'basket', stuff your items there, pay, go home and dispose of the box in the paper recycle bin.

EDIT: I also forgot to mention, as an example of culture/attitude: plastic bags are still available for fruit & vegetables but even then, people do make their own choice to just take the produce without a bag, and place it 'loose' at the cashier for them to weigh.

<comment><USER8> I'd like to see a return of paper bags. That technology is very ecologically friendly.

Really crummy paper bags for (dry) fresh food isolation, heavier re-usable for takeout and carry. It's nice to have bags to be able to give to others and forget about.

Re-usable produce containers should be sold too, and I'd prefer if those were sold from a special part of the store so that consumers could pack in their own togo containers.

<comment><USER9> > I'd like to see a return of paper bags. That technology is very ecologically > friendly.

How? Random search turned up

>According to the previously cited U.K. study, it takes three reuses of a paper bag to neutralize its environmental impact, relative to plastic. A bag's impact is more than just its associated carbon emissions: Manufacturing a paper bag requires about four times as much water as a plastic bag. Additionally, the fertilizers and other chemicals used in tree farming and paper manufacturing contribute to acid rain and eutrophication of waterways at higher rates.

[https://stanfordmag.org/contents/paper-plastic-or- reusable](https://stanfordmag.org/contents/paper-plastic-or-reusable)

I guess you can argue that paper bags are compostable, but I'm not sure whether that matters much. Plastic bags that are sitting in the landfill doesn't harm the environment, and their bulk is negligible due to how thin/light they are.

<comment><USER10> > I guess you can argue that paper bags are compostable, but I'm not sure > whether that matters much. Plastic bags that are sitting in the landfill > doesn't harm the environment, and their bulk is negligible due to how > thin/light they are.

The biodegradability of paper bags is the whole point here. You've seen the sides of the roads. You've seen the streams and rivers. People get done with their garbage and just throw it wherever. With garbage made out of plastic that doesn't break down, this is a big deal.

<comment><USER9> >You've seen the sides of the roads. You've seen the streams and rivers.

My local rivers are relatively plastic-free. Same with roads. They're not completely free of plastic, of course. Given that there are thousands of plastic bags being dispensed in my neighborhood every day and that the roads/rivers aren't being regularly cleaned, the fact that the neighborhood isn't completely filled with plastic bags makes me think that the overall disposal rate is pretty good.

Plastic litter might be the most _visible_ externality of single use plastics, but I'm not quite sure whether tripling our co2 emissions from plastic bags is a worthwhile trade for eliminating plastic bags from our neighborhoods.

</comment></comment></comment></comment></comment></comment><comment><USER7> I have strong feeling that in the coming decades we will see strong growth in the re-usable / repairable product market.

It's high time we got more creative in the products we mass produce, we've grown complacent, something as simple as the plastic bag or the plastic straw have caused such environmental destruction yet can actually be phased out with behavioural modifications.

I would also argue that reusability and repairability is a part of the equation of 'long-term economic mass production', at least for day-to-day necessities where sterilisation isn't paramount.

Seriously, just looking at what I have lying around at home, even something as mundane and as simple as a broom seems to have special plastic elements (plastic hook on the top to hang on a wall, plastic lining in on the pole).

There's a lot of unnecessary un-recyclable waste out there and while banning Single-Use plastics is a great step in the right direction, we need a paradigm shift in how we think about the objects we construct.

<comment><USER11> I miss having glass Coke bottles. I can't remember what shopping ing was like when I was really young, but I'd imagine plastic containers were rare. (1970's)

</comment></comment><comment><USER12> It's always good to have less waste and single-use items. At the same time, maybe it's better to use the oil in it's processed form (plastic) before burning it[1] instead of burning it right away[2]? On the go, now you're forced to pick up a 500g single-use glass bottle instead of a 20g plastic bottle. Only 1-10k tons of German trash ends up in the ocean from 50M tons and I don't think plastic spoons are a material % of that.

It's not that I love plastic, it's just the optimal choice for food packaging now. Saying "I don't use plastic spoons" while following current consumption standards makes no dent whatsoever.

[1] [https://www.tz.de/muenchen/stadt/muenchen-grosse-muell- luege...](https://www.tz.de/muenchen/stadt/muenchen-grosse-muell-luege-warum- verbrennen-wir-so-viel-abfall-9828158.html) [2] [https://en.wikipedia.org/wiki/Energy_in_Germany#Energy_consu...](https://en.wikipedia.org/wiki/Energy_in_Germany#Energy_consumption)

<comment><USER13> > It's not that I love plastic, it's just the optimal choice for food > packaging now. Saying "I don't use plastic spoons" while following current > consumption standards makes no dent whatsoever.

IMO the value is not only in the concrete measures taken (e.g. using wooden spoons) but in the overall trend. We have the movement away from plastic right now and while some single actions or policies may only have a negligible effect there is a huge value in the big picture: Research for alternative materials, lots of companies and consumers trying to figure our ways to reduce waste and plastic usage. And boom, after a few years or decades we might have a plastic free future where everyone consumes less and close to 100% of materials are recycled.

Could we search for alternatives without banning single-use plastic bags? Probably yes but the workings of society are messy and not always rational so better take the path that actually works.

</comment></comment><comment><USER14> Oh my gawd! Now vee vill be burried under heapz of dogpoop!

No, really. What about the dogpoo-bags?

It's mandatory to pack the shit of your dogs into bags, and drop them into some trashbin in most places here.

Example: [https://www.hamburg.de/saubere- stadt/7174714/gassibeutel/](https://www.hamburg.de/saubere- stadt/7174714/gassibeutel/)

[https://www.hamburg.de/behoerdenfinder/hamburg/11260865/](https://www.hamburg.de/behoerdenfinder/hamburg/11260865/)

[https://www.hamburg.de/hundegesetz/](https://www.hamburg.de/hundegesetz/)

<comment><USER15> I don't see why they can't be made out of paper.

</comment></comment><comment> pl-94 This measure is more of a symbol than an effective way to reduce carbon emissions. Attacking symbols is a always nice, but isn't it a little bit late for that? I can't wait the day where EU will try for real to follow Paris agreement.

<comment><USER7> I think you are talking about two different environmental issues.

Correct me if I'm wrong here, but the Paris Agreement covers climate change, carbon emissions, energy production, etc.

The topic of single-use plastics, while related to sustainability, covers an entirely different emerging issue, namely: the infiltration of micro-plastics into our environment.

Besides the environmental effects that microplastics already seem to have, such as hindering plant growth [1], microplastics are also entering the food chain, and making their way back to us. The long-term affects are as far as I know, quite unknown.

[1] [https://pubs.acs.org/doi/10.1021/acs.est.9b01339](https://pubs.acs.org/doi/10.1021/acs.est.9b01339)

</comment></comment><comment><USER16> As said in the body of the article, it's a EU directive, Germany is just the first country to act on it but other will follow. I feel that should be part of the title instead of singling out one country.

<comment><USER17> There are also other non-EU countries that are following this directive, Canada and Wales, it's a nice global movement.

</comment></comment><comment><USER18> Does this also apply to medical devices? Some are disposable (like syringes) for sanitization reasons.

<comment><USER19> A different source [1] describes certain product categories. Initially products like swabs, forks, plates, cups, stick for balloons that have non- plastic alternatives.

[1] German: [https://www.spiegel.de/wirtschaft/umweltschutz-verbot-von- ei...](https://www.spiegel.de/wirtschaft/umweltschutz-verbot-von-einweg- plastik-kommt-mitte-2021-a-51e5fb32-7dca-4139-a8a9-734a4b893d00)

</comment></comment><comment><USER20> They also banned all ads for cigarettes & vapes. I think that's great.</comment>


Join the Movers & Shakers of Silicon Valley - <AUTHOR> http://letslunch.com/ <comment><USER2> Just like Thursday Lunch in Santa Monica <http://promenade.thursdaylunch.com/>

<comment><USER3> Hum, is there some kind of algorithm that tries to match people together?</comment></comment>


Introducing Modelling by Example - <AUTHOR> http://everzet.com/post/99045129766/introducing-modelling-by-example

<comment><USER2> Does anyone know what this means? Can you explain it to an old C++ hacker? Near the end, it looks like "ubiquitous language" (UL) is being used to generate API function signatures. Is that how UL connects the business reqs to the implementation?

<comment><AUTHOR> I'll try and summarise it.

Ubiquitous Language is a term used in BDD and DDD and just means 'the shared language that you build with non-technical people'. It largely involves using business terms as much as possible, but often you have to try and agree some naming when talking to non-technical folk to resolve ambiguities. UL is not a technical concept, it's a way to focus on how you're expressing concepts in conversation.

In BDD we use this shared language to have conversations with customers about requirements, in the form of examples. In DDD we use a shared language to have conversations with customers about business process and rules. This article is bringing those two approaches together.

The stuff at the end is showing how the internal domain modelling (class naming, method naming, argument choice) can be taken directly from the conversation you had with the customer when you've had that conversation effectively. The significance is that the 'modelling' effort happens less in the developer's realm and more in the collaborative realm of customer communication.

Disclaimer: I work with the author of the article, use these techniques, and profit from their adoption

</comment></comment><comment><USER3> I am getting shades of Literate Programming from this article. I thought that idea was laid to rest in the early 90s.

<comment><USER4> 1\. No, I don't think this is LP at all. LP is about controlling ordering and pretty rendering. This is more like Cobol in the support for parsing english. (/me ducks.)

2\. Are you aware of any comprehensive rebuttals of LP? I'm working on one myself at the moment, so any pointers would be most appreciated.

<comment><USER3> > 1\. ...

[snerk!]

> 2\. ...

If LP has essentially yielded to what we now know as DSLs, I might just be ok with it. I am not aware of any comprehensive rebuttals of LP, except... where's the market?

<comment><USER4> Literate CoffeeScript, Literate Haskell, Docco? There's still projects using CWeb, like the recently-on-HN [http://c9x.me/edit](http://c9x.me/edit). Anyway, I recently published my rebuttal: [http://akkartik.name/post/literate- programming](http://akkartik.name/post/literate-programming)</comment></comment></comment></comment>


Ask HN: What startups use C and Python? - <AUTHOR> I know Mixpanel uses both of these, but what are some other startups that use both C and Python?<p>EDIT: Bonus points for any companies hiring junior developers! <comment><USER2> Skoobe, a new ebook subscription service based in Munich/Germany.

C and Python are in fact our most-used and loved languages.

We developed a cross-platform library in C that makes our codebase reusable across multiple platforms, currently we support iOS, Android, Linux and MacOSX. Next: maybe Windows/Windows Phone?

Most of our backend services and our web site are running on Python/Tornado. Additionally, we use Python a lot for infrastructure automation on AWS.

Btw: we are currently hiring in both areas, send me a mail in case you are interested: email@example.com

If you want to take a look at our app, go here: [http://itunes.apple.com/de/app/skoobe-e-books-leihen- statt/i...](http://itunes.apple.com/de/app/skoobe-e-books-leihen- statt/id425361265?mt=8)

<comment><USER3> Why've you got one of Thilo Sarrazin's books featured in your screenshots?

</comment></comment><comment><USER4> Don't pigeonhole yourself by languages you want to use. Interestingness of work is not correlated with language very much.

<comment><USER5> Good advice in general, but if C and Python are the only languages that he currently knows, getting a job at a company that uses them might be much easier than convincing an employer that he could quickly learn Ruby or Haskell.

<comment><AUTHOR> This is pretty much my line of thought in a nutshell.

</comment></comment></comment><comment><USER6> Enthought - www.enthought.com

We are the scipy/numpy folks and use Python/C to solve interesting scientific / engineering problems. I have been writing interesting Python C extensions for the last six months.

<comment><USER7> Python and C (maybe C++ more than C) are very popular in scientific programming. In the fields I know something about (crystallography, bioinformatics, molecular dynamics simulations) probably the majority of projects that started in this century is in C++ and Python.

Consider interesting, underpaid academic jobs for programmers. There is a good chance that your software will make a bigger difference to the world than in a startup.

</comment></comment><comment><USER8> The server side code of <http://www.cyclinganalytics.com/> is almost entirely Python with a small amount of C.

There's one particular bit of data processing that gets a couple of orders of magnitude speedup by writing the code in C rather than Python. It involves lots of loops and indexes, and it's possible there's a faster way to do it in Python, but I couldn't think of one.

<comment><AUTHOR> I've been considering getting a bike for some time now. It should be in the budget soon, so I'll bookmark your app and use it some time. Thanks!

<comment><USER8> Thanks. You might want to check out Strava too.

My site is focused on the niche of "serious" cyclists who use power meters. The three main ones are PowerTap, Quarq and SRM, none of which are cheap (you can get a PowerTap wheel for about $1k, and that's the cheapest). They're widely used by competitive cyclists, and as somebody who loves numbers, I highly recommend them (power data is the most revealing data that can be collected on a bike), but the vast majority of bikes don't have them (yet).

I'm not trying to dissuade you from using my site, but you might be more satisfied with Strava. That said, it's possible to use both — rides uploaded to my site can be automatically uploaded to Strava.

(I'm going to remake the front page to make it more informative soon.)

</comment></comment></comment><comment><USER9> I know that Google is using C and Python. The first version of Google was written in Python. Today the webserver and the web page are written in C, for performance reasons. But internally they still use a lot of Python.

<comment><USER10> So far I have only seen C++ from Google, never C. Are you referring to anything specific from them?

<comment><USER11> We have some C; adb for example.

</comment></comment></comment><comment><USER12> Orvant has lots of Python under the hood. It allows us to move quickly. There are very few things we actually need to use C or C++ for. The main reason we'd use C is to write Python bindings for a C library. :)

<https://www.orvant.com/>

<comment><AUTHOR> Orvant looks really cool! Are you hiring, by chance?

<comment><USER12> We are not actively hiring right now. Though if you think what we do is interesting I encourage you to send your contact info and resume to firstname.lastname@example.com

</comment></comment></comment><comment><USER13> The company I work for uses C and PHP mainly , but as our platform is Gentoo that also makes us users of python. I also write most of the utility scripts I use in python.

<http://sevone.com>

<comment><AUTHOR> SevOne's careers page says that a Bachelor's degree is a requirement. How strict is SevOne (or any other company, for that matter) on this requirement? Do you know of any software engineers that don't have a degree?

<comment><USER14> > SevOne's careers page says that a Bachelor's degree is a requirement

Don't let this stop you. Every. If you honestly think you have the skills for the job after reading the description, seek it out. Let them determine if you are right for the position.

Don't be the no in your life.

<comment><AUTHOR> > Don't be the no in your life.

I feel like this is from the movie Yes, Man! That aside, I take your advice to heart. I don't want to be the no in my life. :)

<comment><USER14> It's not. At least, I've never seen the movie. I forgot where I heard that. So I googled it.

In a search looking for that exact quote, I came up with only a few links. All from either comments I made previously or a blog post.

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

That was where I originally used it.

I was proud of it, mostly because it was short and to the point. I'm usually not short and to the point.

Anyways, in writing about this on my blog, I had a wonderful surprise happen.

<http://www.jasonlotito.com/advice/sometimes-i-amaze-myself/>

From his LinkedIn profile, I take it he never got/took the job. But, he seems to be doing well.

But yeah, I think it's good advice.

</comment></comment></comment></comment></comment><comment><USER15> Nest is using both C (for embedded Linux on the thermostat) and Python (some of the API services) they are also hiring for lots of positions, some are listed at nest.com/careers

<comment><AUTHOR> Nest looks really cool and I like the idea of having a physical (as opposed to virtual) product. Are you interested in hiring any junior engineers? Feel free to drop me a line (my email is in my profile) or leave your email here, I'd love to chat.

</comment></comment><comment><USER16> Repustate.com

Our machine learning code is in C and accessed from Python via Cython.

<comment><USER17> did you write the libraries yourself? is it libsvm with a python wrapper? I'm curious

<comment><USER16> Definitely influenced by a few existing libraries (libsvm, svmlight etc.) but ultimately custom built to really ramp up performance and scaling. Our customers throw the Twitter firehose at us, so we need to be able to analyze data quickly.

<comment><USER18> Sibling comment is impressed, but I'm skeptical that you've improved libsvm. Sorry, can't help it. :)

Can you speak a bit about how you optimized it? I took libsvm to be fairly optimized as far as SVM libraries go...

<comment><USER16> Yeah, in terms of performance "improved" is the wrong term. We've tailored things more to our use cases, especially since we need feature weighting and multi classification, rather than simply binary classification.

<comment><USER18> Very cool! I geek out over SVM optimizations and tweaks--have you collected your work anywhere (post? HN comment?) by any chance?

<comment><USER16> Not really, sorry, but we're adding a new API to be able to setup and configure your own svms. Stay tuned or follow us on twitter @repustate

</comment></comment></comment></comment></comment></comment></comment><comment><USER19> <http://www.needle.com>

the core chat/webserver is written in C and accessed via Python. And yes, we are hiring jr devs

</comment><comment><USER20> At metalayer.com we use Python heavily for our web app and some C for backend/scalability stuff. We're also hiring. Would love to chat.

<comment><AUTHOR> I checked out the website, but I didn't see a jobs page. I'd be interested in chatting too, so feel free to drop me an email (my email can be found in my profile) or leave yours here.

</comment></comment><comment><USER21> I'm pretty sure Spotify is mainly C/C++ in the client and python for the web

</comment><comment><AUTHOR> Just a note: I plan on replying to every comment here. I'm on the tail end of my lunch break right now and don't have the time, but I'll do it first thing when I get home.

</comment><comment><USER22> Maybe Youtube does?I heard they were using Python.And if you doing a video share site,you will use ffmpeg or something like that.It's must be written in C。

</comment><comment><USER23> I worked for Veridae (veridae.com) doing some really interesting EDA software and we used both very heavily. They got acquired by Tektronix last year.

</comment><comment><USER24> OrionVM in Australia.

We do alot of async and evented I/O in Python/C/Cython using Gevent.

Python is just one of those languages that is so easy to extend with native code.

</comment><comment><USER25> Check out www.omnicloudapp.com - they're hiring devs in Stockholm / the US for disrupting the hosting world.

<comment><AUTHOR> I checked out the jobs page, but I got a 404 error. I'd love to talk though, so feel free to drop me a line (my email is in my profile) or leave your email here.

</comment></comment><comment><USER26> Counsyl uses Python and C. <https://www.counsyl.com>

</comment><comment><USER27> bitly is overwhelmingly C and Python

<comment><AUTHOR> Bitly has always interested me because it looks like it would be such a simple project, but there are obviously interesting scaling problems to be solved at Bitly.

</comment></comment><comment><USER28> Kontagent uses both.

<comment><USER29> Just FYI, that means butt-agent in Dutch :)

<comment><AUTHOR> I found this funny enough to tell a co-worker about it.</comment></comment></comment>


Online Career Choices You Can't Go Wrong With - <AUTHOR> https://skillcode.com/online-career-choices/ <comment><USER2> You seriously make money from writing articles for websites?

Jeezus! —I lost count of the grammatical howlers in that piece, by about the third paragraph. Hint: learn the difference between a comma and a full stop. Then read up a bit on sentence construction.</comment>


VLC threatens to sue Secunia over full disclosure - <AUTHOR> https://secunia.com/blog/372/ <comment><USER2> VLC/Jean-Baptiste Kempf rebuttal: [http://www.jbkempf.com/blog/post/2013/More- lies-from-Secunia](http://www.jbkempf.com/blog/post/2013/More-lies-from- Secunia)

Comments on rebuttal ask "why don't they provide you with working exploit? (in example EIP = 0x41414141)"

So someone claims they did attaching an example mkv file? [http://seclists.org/fulldisclosure/2013/Jul/71](http://seclists.org/fulldisclosure/2013/Jul/71) [https://twitter.com/coolkaveh/status/354716804783943680](https://twitter.com/coolkaveh/status/354716804783943680)

<comment><USER3> That screenshots doesn't really prove anything. I mean....i can't even tell is it's the latest vlc version.

Anyway....interesting debate about statically linked libraries. Seems like the original vulnerability was in ffmpeg (vlc statically links to it). So in this case what should/can videolan do ?

<comment><USER4> One can argue that for a user it doesn't matter if it's ffmpeg, VLC or something else that's buggy. A user is installing VLC, has probably no knowledge of what ffmpeg is, and it's the use of VLC that exposes the user to the security bug.

As such, it's VLC responsibility to not ship a product that may harm a user's computer, even if the error is not in their code.

<comment><USER5> All the known vulnerabilities have been fixed. Which one are you referring to?

<comment><USER4> None in particular, just the general concept that you are responsible for all the parts in the end product, even if not made by you.

<comment><USER5> Oh, yes, we agree on that. Which is why we patched FFmpeg for the SWF issue.

</comment></comment></comment></comment></comment></comment><comment><USER6> Discussion here: [https://news.ycombinator.com/item?id=6015509](https://news.ycombinator.com/item?id=6015509)

Also see the response from VLC: [http://www.jbkempf.com/blog/post/2013/More- lies-from-Secunia](http://www.jbkempf.com/blog/post/2013/More-lies-from- Secunia)

</comment><comment><USER7> > VLC threatens to sue Secunia over full disclosure

Not full disclosure at all, just security claims that no one can back up.

</comment><comment><USER8> As far as I knew VLC is an open-source project. It completely replaced any other media players I used as it worked great and was free. I believed they finally made a great open-source media player. Now they're threatening to sue some company. What the hell, where do they even get the resources? And why do they need to sue anyone anyway? I'm not sure I like VLC as much anymore...

<comment><USER9> As it is an open source project, and they obviously have some internal communications issues at VLC, it is likely that you would get a different response and opinion about this depending on who at VLC you talked to. They don't have a traditional legal/PR/management structure, so they're naturally going to be more chaotic when dealing with things.

This isn't necessarily a bad thing, they're probably more resilient as well due to that loosely coupled structure, it just means that sometimes you get inconsistent communications, sometimes about important topics. It would be a mistake to think that VLC has some underlying dislike of vulnerability reports or an aversion to fixing known bugs, and I would be really surprised if counsel has been retained (or has vetted) this 'plan' to sue.

</comment></comment><comment><USER10> Surprisingly childish behavior from both companies. Stop trying to embarrass each other and spend thirty minutes on the phone like adults.

<comment><USER11> VideoLAN nor VLC are companies.

<comment><USER10> True, thanks.

</comment></comment></comment><comment><USER12> Secunia has in my eyes never been a particly nice company. This just seams silly.

</comment><comment><USER13> Well maybe VLC did something wrong or not. How can we say that simply from that article. The only things I can see for sure are (A) that Secunia failed to communicate their issues to VLC and (B) that Secunia seems to consider their own policies as god given laws which all other companies must abide to as well. Both points don't seem all too convincing.

</comment><comment><USER14> This is a dup (with a / appended to the URL) from yesterday, which already had discussion:

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

</comment><comment><USER15> Well VLC does have a case for libel if they were to take secunia to court. Would be interesting to see.

</comment><comment><USER16> why should secunia feel so insulted ?

why shouldn't secunia work with him about the exploit ?

</comment><comment><USER17> To Secunia. Law 101. Don't talk about incidents when you're being sued. Wide open grounds for incrimination.

</comment><comment><USER18> More lies..

<comment><USER19> From whom? To me, Secunia seems to be acting much more mature and in good faith here.

<comment><USER5> [https://news.ycombinator.com/item?id=6019172](https://news.ycombinator.com/item?id=6019172)

</comment></comment></comment><comment><USER20> If this is an ffmpeg bug why is VLC in the middle?

<comment><USER5> Because VLC uses ffmpeg for some codec modules.

<comment><USER21> Thank you for working on VLC. It's a great software.

But I have to ask, why it is so important to VLC, or you, that secunia take down their advisory? Does it really affect VLC negatively?

<comment><USER5> That is a great question.

Because we receive a LOT of emails, from PSI users and from clueless users telling us that our software is insecure. This is a lot of support load and takes quite a bit of time.

</comment></comment></comment></comment><comment><USER22> Seems to be a clever marketing campaign by Secunia. Exploit an OS project to promote your own company. Make noise. Clever!</comment>


Ask HN: Employee services providers and stock options - <AUTHOR>

Maybe somebody here can help me understand something: There are companies out there (such as Paychex [http://smallbusiness.paychex.com/]) that provide "employer as a service". In other words, a company contracts with them to be the employer of record for an employee, then the company hires that employee as a contractor from the provider.
The benefit to this is around things like group health care benefits. Instead of a group plan with four people, you are part of a group plan with thousands. It also removes the day-to-day accounting crap associated with employees.
The question I have: Does anybody know how those types of arrangements work with stock options in the actual small business? Has anybody had any experience with that kind of an arrangement (either as the employee or the employer)? <comment><USER2> You don't want to be an employee of PayChex in reality or as a matter of record.</comment>


Too many layers of abstraction -- worthless crap (2007) - <AUTHOR> http://blogs.msdn.com/b/ricom/archive/2007/02/02/performance-problems-survey.aspx

<comment><USER2> I choose point 3. - not _too many_ layers of abstraction but rather a _bad abstraction model_ which, sort of, results in 1. (bad algorithm). Not because an inexperienced programmer did it, but because the architecture makes an efficient algorithm _impossible_ to implement.

The best example that comes to mind is the "n+1 selects" problem in bad ORMs: if your ORM hides the power of SQL joins behind a crappy abstraction, then you need n selects for what could be achieved with one.

</comment><comment><USER3> From my experience, it's not "over-abstraction" per se which is causing performance issues. Rather, it's that people who work at the upper levels of abstraction don't understand how layers below work. E.g. web-developer not understanding what SQL their ORM library generates and how database execute that SQL. Abstractions are supposed to hide details at certain level. However, in practice you still need to understand how things work at lower level, as Joel Spolsky's famous Law of Leaky Abstractions states.

I've seen that problem frequently in the world of enterprise software, where you often have many layers developed by different groups of developers. Developers at level N treat level N-1 as black box. This often leads to performance issues.

</comment><comment><USER4> If #1 is pervasive throughout an application, e.g. badly done SQL code, then it can be a pain to get performance up, but with #2, there may be no way to get the codebase back under control, or bring new developers on at a reasonable pace.

I think the consensus seems to be that #1 is manageable, but #2 is a potentially project threatening issue.

It's a shame that 'You Ain't Going to Need It' hasn't permeated to all areas yet, but with many people working at cost+, hours billed often tends to be maximized in worse projects. It's a shame that there's very little mechanism to be paid more for doing a great, undramatic job, than a 50% over-budget cluster-flock code-dump that people hate.

</comment><comment><USER5> Well, #2 should be "the code is a mess" which sometimes is a result from too many layers of abstraction, sometimes from improper abstractions, sometimes from lack of abstractions. In my experience novices underengineer, while experienced coders do tend to overengineer.

<comment><AUTHOR> No, it's not "a mess." People who write it follow a lot of rules. The problem is, following rules just "because it should be done so" and uncritically applying them leads to very weird things (^) I believe you haven't seen what a lot of programmers working under bad lead can produce in a year of two out of the simple goals... Really experienced programmers don't "overengineer."

(^) It looks like: "public class RecursiveFactorialImplementation implements FactorialAlgorithm" from: <http://news.ycombinator.com/item?id=2143310>

<comment><USER5> I agree with you, I just say there are other similar sources of avoidable complexity.

</comment></comment></comment><comment><AUTHOR> The results of a survey:

[http://blogs.msdn.com/b/ricom/archive/2007/02/08/performance...](http://blogs.msdn.com/b/ricom/archive/2007/02/08/performance- problems-survery-results.aspx)

</comment><comment><USER6> Interesting - a lot of people are saying that #2 has become more common with time.

</comment><comment><USER7> I would give a lot to work only on projects where there were too many levels of abstraction. It's a very real problem, I agree, but at least it implies that the people working on the project understand the concept of abstraction and trying to build a large code base with some kind of systematic design. The most common alternative seems to be having little deliberate software architecture at all, and that is _much_ worse.

</comment><comment><USER8> I see #2 (over-abstraction) daily. People pick an "architecture" and almost religiously apply it without concern as to whether or not it's too complicated for the job at hand, which it usually is.</comment>


Executives Play Down the Possibility of Raises - <AUTHOR> https://www.bloomberg.com/view/articles/2018-05-30/executives-comments-about-raises-are-not-what-they-seem <comment><USER2> The idea that pay raises come from some sort of collective negotiation with a bunch of executives is just bizarre on its own. Executives do not get to decide the pay level of employees.

The point of the tax law was to lower the cost of employment and investment in the US (specifically, the cost of repatriating foreign profits to pay US salaries and buy US-based infrastructure). The hope being that lower costs cause companies to value US labor more, which tightens the labor market.

A tight labor market causes the raises: companies will continue to offer what they want to offer, and they will be unable to replace attrition because the would-be new hire can do better. The employer is either forced to offer more wages directly, lower their standards to poach employees from lower-paying employers, or do without and leave profit on the table.

But none of that involves buttering up CEOs and getting them to pinky-swear that they're going to give out raises just because they can. The wage level is always "as low as they can get away with"

<comment><USER3> Is there any verifiable time in history when such a complicated multi-actor system actually did increase wages? Or is this the cold fusion of government policy?

<comment><USER4> No, not at all. There is no evidence that tax cuts lead to higher wages or economic growth. It's been studied and debunked to death but it never dies.

<comment><USER5> There is evidence, its just that the evidence is weak and mere co-relations. All of macro economic theory is like that - just models explaining aggregate human behavior. Anything people propose can probably be shown to work in some model or another.

On the flip side, higher taxes also don't "lead to" any wage increases or economic growth. Given the massive waste and inefficiency in most government programs, very little of our taxes actually go to anything useful. Most of it goes towards war and to pay government contractors invoicing a $200 "military spec" screwdriver.

<comment><USER4> > Given the massive waste and inefficiency in most government programs, very > little of our taxes actually go to anything useful.

There is very convincing evidence that higher taxes and greater government spending do lead to long term economic growth. These days even the old fuddy duddies at the IMF have been forced to admit that higher taxes don't lower growth [1] and that many times the fiscal multipler is greater than 1 [2]. Certainly from 2008-2015, despite all the austerity hawks going on and on about inefficient government spending, actual evidence indicates the fiscal multipler was nearly 2!

[1] [https://www.independent.co.uk/news/world/politics/inequality...](https://www.independent.co.uk/news/world/politics/inequality- imf-international-monetary-fund-high-tax-rich-jeremy-corbyn-a7995826.html)

[2] [https://www.washingtonpost.com/news/wonk/wp/2013/01/03/an- am...](https://www.washingtonpost.com/news/wonk/wp/2013/01/03/an-amazing-mea- culpa-from-the-imfs-chief-economist-on-austerity/?utm_term=.8b9c2def2ad0)

<comment><USER5> If you wanted to, you could fill a cup of water by dumping a gallon bucket on top of it. The point here is that the government has never been efficient in allocating resources.

Also FYI: I'm not a representative or a supporter of the IMF. The fact that some of their people have said things which didn't turn out to be true doesn't concern me. In fact I'd probably expect that most bold predictions don't come true, especially on economic matters.

</comment></comment></comment></comment></comment></comment><comment><USER6> My favorite scam I've seen lately has been the "We're gonna give you a promotion with no salary increase, see how you do, and then discuss a pay raise after X months! You should be grateful for this opportunity!"

And then of course in six months, the pay raise is basically a small bump, versus what one might be paid if brought in as a manager/higher title.

<comment><USER7> You are supposed to take the promotion, update your linkedin, and find a real position with that title elsewhere for more money.

<comment><USER8> I've had the privilege to have the proactive version of this discussion: A discussion was had about an employee and then the question was asked "If they left, how much would we pay to hire someone the replace them? Let's give them a raise to that amount now and avoid that mess."

<comment><USER9> That sounds like a Sorkin production where everyone is unrealistically smart and rational.

</comment></comment></comment></comment><comment><USER10> > In fact, one basic result in the theory of cheap talk is that if you assume > the cheap-talker will do what's best for him and worst for you, you can > often get him to reveal more of the truth.

This is basically the definition of enemy.

These people are your enemies.

By that I mean, in the context of fair wages, employees ought to treat executives as enemies, not as slightly conflicted parties with slightly divergent interests. To win the pay he or she deserves, the employee must have both resolve ("I don't want this person to beat me") and clarity ("this person would gladly pay me half of what I make"). Mind and heart must be ready to fight, thus the word "enemy". A dangerous label but sometimes, a courageous one.

Pretending that these people care about your best interests, that they'd be willing to sacrifice a little because they're so forward-thinking, smacks of conflict-avoidance. I.e., "Oh my boss's boss is just trying to minimize and maximize like any rational actor. It's normal. Happens to everyone. I'm scared!"

<comment><USER11> This is very reductive. You could use the same logic to argue that your coworkers are your enemies because the money being paid to them could be paid to you instead.

<comment><USER10> If a person had a coworker who thought "well I could get a 40% pay increase if I get <person> fired", then that person should consider that coworker an enemy.

Fortunately, the world does not revolve around game-theory and most other parties with whom we choose to associate, will at least consider and value our interests. Enemies do not do so, or value our interests at something close to zero; thus their calculus: "worst for you, best for them".

<comment><USER12> If you would get a 40% raise if you switched companies, would you? Should execs see you as the enemy, then?

There are no "sides", everyone is just maximizing their own payouts.

People here don't seem to mind when profit-focused engineers switch companies for better salaries, but seem to mind when companies do the same.

<comment><USER13> Which means it's essentially a free-for-all. If everybody is your enemy, then you still have enemies.

<comment><USER12> > Which means it's essentially a free-for-all. If everybody is your enemy, > then you still have enemies.

Being a free-for-all doesn't make it enemies, just a game. The two prisoners in the prisoner's dilemma aren't enemies.

Employment is just another case of game theory. There are times when the best outcome for you is to collaborate with your employer, other times is to play against them. And so on.

A reductive vision of me vs. the world, or us against them is naive and counterproductive. Particularly because you'd do the same in their shoes.

<comment><USER13> > Being a free-for-all doesn't make it enemies, just a game. The two prisoners > in the prisoner's dilemma aren't enemies.

You're disregarding the fact that while the prisoner's dilemma is a non-zero sum game, employment in general is - any value added over your marginal usefulness is your loss and your employer's gain.

Some people even "solve" this problem by being minimally valuable.

<comment><USER12> > employment in general is

You're absolutely, utterly wrong. Voluntary employment only exists because it isn't a zero-sum game.

Any voluntary trade is not a zero-sum game, by definition.

And any value generated in excess of your cost is capture by you and the employer based on the price elasticity of the demand for labor.

<comment><USER14> Can it really be called "voluntary" if you starve if you don't have a job?

<comment><USER12> Still is.

When you're trading your labor for money, you end up with more value than before. And excess value is split between you and the employer as I explained above.

<comment><USER14> That's some pretty dubious logic, that is not completely backed up by reality.

And the idea that the split is governed by the value of labor at the time has also been debunked. Businesses everywhere are complaining of a labor shortage, yet they're not raising wages. I'm sorry, but the simplistic Econ 101 stuff isn't really applicable in the real world.

<comment><USER12> Wrong again. This isn't "logic", this is well established science.

It's like gravity, you can dismiss it all you want, but if you jump out of the window, you'll still end up on the floor.

And you clearly didn't understand what price elasticity of demand means.

<comment><USER14> "This isn't "logic", this is well established science."

No, it very much is not.

"It's like gravity"

Gravity behaves the same way every time you observe it. Economic activity most certainly does not.

"And you clearly didn't understand what price elasticity of demand means."

Because clearly anyone who disagrees with you is only doing so because they don't understand?

<comment><USER12> > No, it very much is not.

Well, Nobel-prize winners and millions of economists around the world disagree with you, but I'm sure that your personal opinion trumps all of that.

> Because clearly anyone who disagrees with you is only doing so because they > don't understand?

No, because you mixed "value of labor at the time" and "price elasticity of labor demand". If you had understood what price elasticity of labor demand meant, you wouldn't mix the two.

If cost of labor is X, demand for labor is Y, then "value of labor at the time" is X and "price elasticity of labor demand" is dY/dX.

<comment><USER14> "Well, Nobel-prize winners and millions of economists around the world disagree with you, but I'm sure that your personal opinion trumps all of that."

Very few economists would classify what they do as a science, like biology or chemistry.

And no, I didn't mix anything up. I disagreed with you on your point. But because you can't back up your point, you have to resort to petty retorts. The fact of the matter is, what most economists have traditionally believed regarding wage growth and tightening labor markets has been turned on its head, due to many companies complaining about labor shortages yet there not being any real gains in wages.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> I like the concept of "cheap talk". In my company they always celebrate sales growth and higher profits loudly. It really seems to motivate a lot of people while at the same time salaries are frozen so most of them get no benefit from the "good news".

<comment><USER16> My favorite is when this happens in the same meeting. "Best year evar!1!" Can we finally get a raise? "Oooooohhh, sorry."

</comment></comment><comment><USER17> For a typical working man job, this is the unfortunate reality of the job market

For tech jobs, this is why people jump ship every few years.

<comment><USER18> it's also why they try to instill&enforce the 'job hopper' stigma

<comment><USER11> Is it really a stigma when it is perfectly rational to prefer employees who will stick around for a while?

<comment><USER19> the point is that it's a stigma because they have made it into one because it benefits them.

to the employee, it's an artificial social barrier to getting their economic worth by hopping jobs.

<comment><USER20> I think his point is that its not and artificial barrier because not having to replace someone in 12 months provides a real value to the employer.

<comment><USER14> If that were the case, then they should be willing to pay to keep people. People hop because companies aren't giving raises.

</comment></comment></comment></comment></comment></comment><comment><USER21> Given that this was an event organized by the Dallas and Atlanta Federal Reserve Banks, we should consider the possibility that the CEOs were simply trying to encourage the Fed to keep interest rates low.

Here is most likely the event being referenced: [https://www.dallasfed.org/research/events/2018/18ted](https://www.dallasfed.org/research/events/2018/18ted)

</comment><comment><USER22> I'm curious as to whether that "median wage growth" chart takes inflation into account.

<comment><USER23> The data appears to come from here[1], which describes it as,

> _Once we have constructed the individual hourly earnings data, we match the > hourly earnings of individuals observed in both the current month and 12 > months earlier. The matching algorithm results in an average of 2,400 > individual wage growth observations per month. We then compute the median of > the distribution of individual 12-month wage changes for each month._

That seems to indicate that it does not take inflation into account.

[1]: [https://www.frbatlanta.org/chcs/wage-growth- tracker.aspx?pan...](https://www.frbatlanta.org/chcs/wage-growth- tracker.aspx?panel=1)

</comment></comment><comment><USER24> In the end, it is back to the fundamental question : How should the business benefits created by the workforce be distributed?

</comment><comment><USER14> I mean, why on earth would they give raises? It's not like we just passed a huge tax cut bill with enormous cuts to corporate taxes with the justification that the money would go back to workers...

Oh wait.</comment>


Offer HN: Free SEO For Your Startup/Company (SF bay area) - <AUTHOR>

The deal:
I will do SEO for your startup and/or company for free. The number of hours? As many as it takes, whilst it's still fun to do. It usually takes 5-10 hours to do the basic stuff (strategy and on-site optimization), and then another 10-50 to initiate the harder stuff (developing content and building backlinks).
I will examine your site or product, develop a complete SEO strategy, give you tips and clues on what needs to be corrected on your site, do keyword research and develop content for your site - eventually starting the grind job of building backlinks.
Who am I?
I'm a SEO professional making $170K a year doing project lead and SEO work. I really, really love SEO. SEO is one of my main passions in life. I love logical link hierarchies, finding new sources of backlinks, explaining the importance of digital distribution of content to newbies, doing technical SEO and seeing Google gradually index a site. I love Penguin and Panda - and I love the sheer amount of intelligence that goes ranking in Google. I also own 10-20 sites with Pagerank ranging from 4 to 6. My own sites attract 150-200.000 visitors per week, largely because of SEO.
Why the deal?
Together with a few friends, I'm moving to the SF Bay area in august/september of 2013. I don't know too many people there yet, but I think I'm pretty aligned with most of the guys here on Hacker News. This is a nice way to (possibly) get some new friends whilst doing something I love. (friendship is non-mandatory) ;-)
Who are you?
You're someone in tech, leading a startup or a company. You're great at what you do and you understand the importance of SEO; but you're no master at it - and you understand that your time and talents are better used on other tasks. You live or operate out of the SF Bay Area, and you have a really great product (I can't work on stuff I don't like).
If you are interested, please email me at email@example.com introducing yourself. Thanks, and good luck to all fellow entrepreneurs. <comment><USER2> This is amazing! I wish I had my site up and running to take advantage of your amazing service! Although I don't live in SF, it is my goal to one day get there! Would it be alright for me to e-mail you, just introducing myself so that one day in the near future you can give me tips about SEO? I'm just a college student/aspiring entrepreneur studying Computer Science at the University of Arizona.

<comment><AUTHOR> Sure, of course :)

</comment></comment><comment><USER3> What's your strategy? SEO is an ongoing process. How can you get everything done that you need to in that amount of time? I've worked in the industry, and that seems like too little time to make an impact.

</comment><comment><USER4> Awesome offer! I wish I had a tech company and lived in SF because both of my service companies could use help with SEO!

<comment><USER3> Where are you located. I know a company that is great for that type of thing. They work with clients all over the US, but they're based in the DC area.

</comment></comment><comment><USER5> Fantastic. How can I reach you?</comment>