Base58 - <AUTHOR> https://en.wikipedia.org/wiki/Base58 <comment><USER2> Why base-58 instead of standard base-64 encoding?

\- Don't want 0OIl characters that look the same in some fonts and could be used to create visually identical looking data.

\- A string with non-alphanumeric characters is not as easily accepted as input.

\- E-mail usually won't line-break if there's no punctuation to break at.

\- Double-clicking selects the whole string as one word if it's all alphanumeric.

[https://github.com/bitcoin/bitcoin/blob/master/src/base58.h](https://github.com/bitcoin/bitcoin/blob/master/src/base58.h)

<comment><USER3> This is a similar encoding as airline reservation numbers, except it also has lowercase characters. But the requirements are very similar. It's amazing how much confusion is removed by suppressing ambiguities between number 0 vs. letter O and number 1 vs. letter I.

For reservation numbers, doing away with case makes it easier to speak the number over the phone.

<comment><USER2> It's amazing how user experience can be affected from this deep in the stack.

</comment></comment></comment><comment><USER4> If you can't get enough of Base-encodings, there is a project called "multibase" ([https://github.com/multiformats/multibase](https://github.com/multiformats/multibase)) that lets you encode which Base-encoding you are using, together with the data itself, so it's easier to know what data you are received/sending.

The basic format is `<varint-base-encoding-code><base-encoded-data>` and the "varint-base-encoding-code" comes from [https://github.com/multiformats/multibase/blob/master/multib...](https://github.com/multiformats/multibase/blob/master/multibase.csv)

</comment><comment><USER5> Not to be confused with Base85.

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

(used with various alphabets for denser binary encoding in PDF, git binary patches, and the scene files of the Arnold renderer).

<comment><USER6> In my personal project, I'm using my own Base92 encoding. I wonder why Base85 stops at 85? In particular, you can implement Base92 with one table lookup and one conditional exception. (Which could also be implemented as a table lookup to save branch prediction misses.)

</comment></comment><comment><USER7> Reminds me of Crockford's [https://www.crockford.com/wrmg/base32.html](https://www.crockford.com/wrmg/base32.html)

<comment><USER8> When the new SegWit feature was introduced to Bitcoin, it came with a new address format called Bech32. [https://github.com/bitcoin/bips/blob/master/bip-0173.mediawi...](https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki)

</comment></comment><comment><USER9> Take a look at the node js library 'base-x'

[https://github.com/cryptocoinjs/base-x](https://github.com/cryptocoinjs/base-x)

Which can do base58 and any base you throw at it using the same algorithm.

</comment><comment><USER10> Neat. Side note, there's another project called HashIds with many language implementations for encoding integers (or array of integers) into simple alphanumeric strings, and decoding back again.

[https://hashids.org/](https://hashids.org/)

</comment><comment><USER11> Another neat encoding is the base-20 character set that Open Location Codes ("plus codes") use:

> The characters that are used in Open Location Codes were chosen by computing > all possible 20 character combinations from 0-9A-Z and scoring them on how > well they spell 10,000 words from over 30 languages. This was to avoid, as > far as possible, Open Location Codes being generated that included > recognisable words. The selected 20 character set is made up of > "23456789CFGHJMPQRVWX".

[https://github.com/google/open-location- code/blob/master/doc...](https://github.com/google/open-location- code/blob/master/docs/olc_definition.adoc#open-location-code)

</comment><comment><USER12> I've replaced UUID v4 with nanoid + base58 in the last several projects.

[https://www.npmjs.com/package/nanoid- base58](https://www.npmjs.com/package/nanoid-base58)

<comment><USER13> What's the advantage here?

</comment></comment><comment> ur-whale Base58 isn't a great choice from an implementation point of view.

It basically requires a bignum library (or a specialized version that can do divisions of arbitrary long numbers by 58), and conversion is slow as hell.

Either you end up pulling in a full bignum library, or you have to use error- prone, clunky specialized code you don't have time to try and understand and verify.

Of all the design choices Satoshi made, this is far from the best one.

<comment><USER14> The implementations at [https://github.com/search?q=Base58](https://github.com/search?q=Base58) don't look like they use a bignum package, nor do that look particularly slow or complicated. The main encoding loop for [https://github.com/luke- jr/libbase58/blob/master/base58.c](https://github.com/luke- jr/libbase58/blob/master/base58.c) is:

        for (i = zcount, high = size - 1; i < binsz; ++i, high = j)
    	{
    		for (carry = bin[i], j = size - 1; (j > high) || carry; --j)
    		{
    			carry += 256 * buf[j];
    			buf[j] = carry % 58;
    			carry /= 58;
    		}
             }

<comment> ur-whale There's a divmod by 58 in there. That's dog slow compared to the shifts a power of two basis would require - even when the compiler gets smart about it because it's a constant.

<comment><USER15> That divmod can be replaced with table walking like CRC code does for division and remainder of fixed values, which is certainly fast, and does not require bignums. Unless you now want to claim all CRC code is also slow as hell or requires bignums. These are solved problems.

Many compilers even expand the code inline to generate fix size divides into mult and shift.

Here's a 4 year old Hacker news thread on compiler tricks then [1]. They're even better now.

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

<comment> ur-whale >Many compilers even expand the code inline to generate fix size divides into mult and shift.

This is what I meant when I said:

>even when the compiler gets smart about it because it's a constant.

<comment><USER15> You also claimed it's dog slow, and earlier you claimed it requires a big num lib. All of these are wrong. Many compiler/architecture combinations can reduce the divmod to one asm instruction, that on some architectures is very quick. If it is slower than shift/mult trick, that compiler can choose to do that.

Go look at some decent implementations and the assembly they generate. Don't spread unfounded or unchecked claims.

<comment><USER16> It's OK for different people have different impressions about the speed of dogs. On x64 for 64-bit registers, built-in assembly DIV is about 10 times slower than MUL, and 10 times faster than a lookup from RAM. Whether this makes it fast or slow depends on what you are trying to do.

I'm interested in your comment that "some architectures" have a fast divmod. Do you actually know of one where it's faster than a shift and a multiplication? Or the same? We're finishing up a paper where this would be very relevant information.

<comment><USER15> Intel flavors often do both with a single idiv instruction. Agner Fog has performance tables for many variants [1]. I'd guess a few pipeline to similar per loop cost of shift and add.

I suppose if you're writing a paper you're aware of quite a bit of literature on exactly this problem. Recent papers have quite fast methods to do this. I've not looked at recent state of the art to see if 58 has a near zero cost divmod, but numbers of many forms do. I'd not be surprised if state of the art has it reduced to a few non-mem access branchless no division instructions on most architectures.

Maybe later I'll poke at 58 and see what I can design. I've made quite a few such algorithms over the years.

[1] [https://www.agner.org/optimize/instruction_tables.pdf](https://www.agner.org/optimize/instruction_tables.pdf)

<comment><USER16> I feel comfortable with the x64 approaches, but am much less familiar with the efficiency of other architectures. The paper also benchmarks ARM (which is relatively faster) and Power 8 (which I don't understand well). I'd be particularly interested in knowing if any other architectures are much faster for division/modulus (which would weaken the paper) or much slower (which would strengthen it).

I'm might be exposing my ignorance, but what's 58 in this context? Is this an ARM Cortex series, or something else?

<comment><USER17> FWIW I don't think other architectures are significantly faster than x86 for the div or divmod instruction. The GP said that "it can be reduced to a single assembly instruction" which is certainly true, but this one instruction is _dog slow_ and produces 30+ uops[1]. Which is exactly why compilers choose to flip fixed divides to a multiplication and a series of corrections that often add up to ~10 instructions but even then it's still worth it.

Divide is a hard problem and I'm not aware of any breakthroughs. It's been getting faster, but it's still 10 slower (at least) than multiplication as you point out. Intel has thrown hardware at it a few generations back, speeding it up (it used to be over 100 cycles), and AMD has a fairly fast divider in Ryzen as well (for many inputs faster than Intel).

I expect POWER to be in the same range. ARM architectures are all over the power/performance map, obviously, but for the biggest/fastest, I would guess they are within a factor of 2, either way, of contemporary x86 implementations.

\---

[1] This point is important: it means you can't get as much work done while the division is happening. There are other slow instructions, such as floating point div, sqrt, transcendental and trig functions. However, these functions are only a single uop and then occupy only their respective execution unit for the duration, so you can use the rest of the EUs at full speed. So if you only need to do one every 50 cycles or so, and have work to do in the meantime, they can be also free. idiv is not like that: it spews out many uops which compete for the same EUs as the rest of your code.

<comment><USER15> IDIV on Skylake-X is 10 uops [1,p246], not 30+. Some other Intel chips are even lower (Goldmont is 3 uops, for example, but slower overall, Piledriver is 2 uops for r32, etc.). IMUL is often 2-3 uops on the same chips.

However, uops are not the bottleneck, pipelined throughput is what matters for performance. Multiple IDIV can be in flight at once on different register sets (real or virtual). Register renaming gives even more room.

A compiler can unroll the loop, use different registers (or the CPU can use renaming), and pipeline them, getting better throughput. r16 IMUL has a relative throughput of 2, r16 IDIV then has a relative throughput of 6. This is 3 times slower, not 10. Pretty much any other 10 instructions are going to be slower, not faster as you claim.

Compared to the overhead of looping and memory access, these are not the bottleneck. These represent a small amount of the time to do the computation.

Do some timing and check. IDIV is not what it once was.

[1] [https://www.agner.org/optimize/instruction_tables.pdf](https://www.agner.org/optimize/instruction_tables.pdf)

<comment><USER17> To be clear, I'm generally talking about machine-width operations, in this case 64-bit output, not smaller operations like 8 or 16 bits.

For Skylake, we have 36 uops and 35-88 cycles of latency for a 64-bit div, and for idiv it is even worse: 57 uops and 42 to 95 cycles of latency. These can execute one every 20 to 80 cycles, so the throughput is fully _twenty to eighty_ times worse than 64-bit multiplication.

> IMUL is often 2-3 uops on the same chips.

On Intel chips multiplication is almost always 1 uop if you need a 64-bit result (this is what a multiply in C will compile to), and 2 uops if you need the full 128 result. In in either case it can sustain one every cycle.

> However, uops are not the bottleneck, pipelined throughput is what matters > for performance. Multiple IDIV can be in flight at once on different > register sets (real or virtual). Register renaming gives even more room.

How do you know uops are not the bottleneck? They often are: it depends on the surrounding code.

More importantly, div is slow in every way that could matter: if latency is the bottleneck, div sucks (20 to 80 cycles, vs 3 for multiply). If uop throughput is the bottleneck, div sucks. If pure div throughput is the bottleneck (as you are suggesting), div _still_ sucks: the inverse throughput for 64-bit div is 21 to 83 cycles: almost the same as the latency, so it is barely pipelined at all, and fully 21 to 83 times slower than multiplication.

Now one might say that you are mostly interested in 32-bit values, as these are common even in 64-bit code, and Intel has good support for them.

In this case div is quite a bit faster, but still dramatically slower than multiplication. In latency terms it is 26 cycles on Skylake, versus 3 for multiplication, so about 9 times slower. In "pipelined throughput" terms, it is 6 cycles per division, versus 1 per multiplication, so 6 times slower.

As a summary, we can say that on the most recent Intel, which probably have the fastest dividers around (and which have seen recent improvements), 64-bit division is anywhere from 11 to 90 times slower than multiplication, depending on how you measure it (and the input values), and 32-bit division is between 6 and 9 times slower, depending on how you measure it. I think my "10 times slower" which actually falls towards the faster end of that range is actually quite conservative!

On chips older than Skylake (which is the vast majority of chips you'll still find in datacenters and in the cloud, since SKX is quite recent), the situation is worse for div, since mul had the same 1/3 latency/tput performance, but div was slower.

> Do some timing and check. IDIV is not what it once was.

Here, I agree.

It _has_ gotten much faster! In other words, it has gone from shockingly slow to merely very slow. It is still way slower than multiplication in every respect (which itself has gotten faster to the point where it has 1-cycle throughput now), and almost all of the tricks to avoid actual div instructions still apply.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER18> I'm actually using base 58 to encode numbers for the gopher URL shortner with the Ripple alphabet. It works as advertised, and is great for an old protocol like this.

gopher://fld.gp/1/gopher/shorten (shortened URL example: gopher://fld.gp/1j/r or [http://fld.gp/1j/r](http://fld.gp/1j/r) )

</comment><comment><USER19> I love interesting representations of binary data, base 58 included, but this article is so scant on details. I'm sure someone could even add a brief overview of the algorithm and samples and it's limitations and idiosyncrasies, such as how it handles things like padding etc.

<comment><USER20> I think the article is good as is, because base58 is actually pretty dissimilar to most binary-to-text encodings. Surprisingly many encodings are just base 2^k (16, 32, 64 and 128 [1]), some have converged to base 85 (because 85^5 / 2^32 ~= 1.03, i.e. just enough to represent 4 octets in 5 units). This is because binary-to-text encodings are not expected to use costly bigint operations for an arbitrary-length payload. Base36 and base58 are the only common exceptions, and for this reason I actually think that they should be termed "bigint-to-text" encodings.

Given that base58 is actually just a big number with translated digits, the list of alphabets (actually, digits) is almost enough to decode base58 encodings. There is always an exception, of course: Bitcoin base58 calculates a minimal length from the original payload length so that it has to be "zero"-padded with one (which is the first alphabet, thus acts as a digit zero) [2]. This preserves the original payload length, but is still quadratically expensive and should be used for a reasonably short, known- length data like hashes.

[1] This is actually not normally viable as a binary-to-text encoding, but base122 ([http://blog.kevinalbs.com/base122](http://blog.kevinalbs.com/base122)) does use this to exploit UTF-8 encoding.

[2] [https://en.bitcoin.it/wiki/Base58Check_encoding](https://en.bitcoin.it/wiki/Base58Check_encoding) (note that I've used a significantly simpler explanation here, the gist is same however)

<comment><USER14> "Base36 and base58 are the only common exceptions"

Isn't Ascii85/Base85 at least as common as those? Quoting the Wikipedia entry for it, "Its main modern uses are in Adobe's PostScript and Portable Document Format file formats, as well as in the patch encoding for binary files used by Git"

Python includes it as part of the standard library. Using the example from the WP entry:

      >>> s = r"""<~9jqo^BlbD-BleB1DJ+*+F(f,q/0JhKF<GL>Cj@.4Gp$d7F!,L7@<6@)/0JDEF<G%<+EV:2F!,
      ... O<DJ+*.@<*K0@<6L(Df-\0Ec5e;DffZ(EZee.Bl.9pF"AGXBPCsi+DGm>@3BB/F*&OCAfu2/AKY
      ... i(DIb:@FD,*)+C]U=@3BN#EcYf8ATD3s@q?d$AftVqCh[NqF<G:8+EV:.+Cf>-FD5W8ARlolDIa
      ... l(DId<j@<?3r@:F%a+D58'ATD4$Bl@l3De:,-DJs`8ARoFb/0JMK@qB4^F!,R<AKZ&-DfTqBG%G
      ... >uD.RTpAKYo'+CT/5+Cei#DII?(E,9)oF*2M7/c~>"""
      >>> import base64
      >>> base64.a85decode(s, adobe=True)
      b'Man is distinguished, not only by his reason, but by this singular
      passion from other animals, which is a lust of the mind, that by a
      perseverance of delight in the continued and indefatigable
      generation of knowledge, exceeds the short vehemence of any carnal
      pleasure.'

<comment><USER20> I have explicitly mentioned this:

> [...] some have converged to base 85 (because 85^5 / 2^32 ~= 1.03, i.e. just > enough to represent 4 octets in 5 units).

Base 85 does _not_ use bigint, it is just a clever approximation of optimal encoding with 85 symbols.

<comment><USER14> I think I was confused between "baseX" as the specific program name and 'base X' as the base of the specific numbering system.

</comment></comment></comment></comment></comment><comment><USER21> I'm more of a fan of BasE91 and I believe more people should be using it.

<comment><USER22> Why? It's only a minuscule improvement over ASCII85, which is a well- established encoding. I couldn't find a rationale for it anywhere.

</comment></comment><comment><USER23> There are many dimensions to utility.

</comment><comment><USER24>
        oO0 I1l B8 S5 b6G</comment>


Five Reasons Why Google+ Died - <AUTHOR> http://www.forbes.com/sites/stevedenning/2015/04/17/five-reasons-why-google-died/

<comment><USER2> What a strange article. I use G+ frequently, how is it dead? None of the reasons Forbes lists even defines if G+ is dead or not.</comment>


Placing name and specialty on scrub caps improves patient safety in hospitals - <AUTHOR> https://www.boredpanda.com/doctors-write-names-profession-scrub-cap-rob-hackett/ <comment><USER2> Heh, a long winded article (also with pictures! And Twitter embeds!) for something that fits in a Powerpoint slide or 2.

Benefits of having names on scrub caps:

\- Improves communication

\- etc...

<comment><USER3> Long winded?

Is that why the panda is bored?</comment></comment>


Princeton University: Social Exclusion Can Lead to Belief in Conspiracy Theories - <AUTHOR> https://psychcentral.com/news/2017/02/18/social-exclusion-leads-to-belief-in-conspiracy-theories/116589.html <comment><USER2> >>"When developing laws, regulations, policies, and programs, policymakers should worry about whether people feel excluded by their enactment," Coman said. "Otherwise, we may create societies that are prone to spreading inaccurate and superstitious beliefs."

I know, right! How many times do I have to keep hearing about the so-called "moon landing"!?</comment>


Jeff Bezos' net worth rose $67B this year – $8M per hour - <AUTHOR> http://theweek.com/speedreads/794105/amazon-ceo-jeff-bezos-net-worth-rose-67-billion-year--8-million-hour <comment><USER2> Ultimately either a ton of value will be created for consumers or shareholders will be wrecked.

Bezos is spending their money until then :)</comment>


Fotki Blocks Paid Users From Accessing Their Data - <AUTHOR> http://forums.dpreview.com/forums/readflat.asp?forum=1018&thread=41737579&page=1

<comment><AUTHOR> Just to be clear, paying customers were locked out from accessing their own data until they paid _more_ money to unlock it. They are not asking for much money, but is this really the right way to go about it?</comment>


How a $9B startup deceived Silicon Valley - <AUTHOR> http://www.businessinsider.com/john-carreyrou-how-theranos-deceived-silicon-valley-startup-bad-blood-sample-technology-2018-5 <comment><USER2> I want to know what was wrong with the prototype. Why didn't it deliver as promised and if the technology can be salvaged.

I think the way I feel about this story depends completely on whether or not they knew they were going to be able to deliver on their promise soon.

One thing that this article gets wrong is the fact that they say it's not a software company. Do they think these machines are built mechanically or something? Of course it is a software company.

The kind of AI that would be required to analyze a couple of drops of blood and be able to tell what is wrong with people would have to be extremely sophisticated.

Not only that but they would probably need to start gathering a lot of blood from people to be able to build up the AI's intelligence when it comes to discerning the properties of healthy blood samples when compared to diseased blood.

These are the kind of questions that are worth asking. But instead we just have the media who wants to get the jump on a juicy story.

What Elizabeth Holmes did was fraud in that she was dishonest. But how dishonest and was that dishonesty necessary?

Like I said there is a lot more here than meets the eye. Otherwise she wouldn't be trying to get share holders to take more shares to not sue.

From what I gather, she either expects to get acquired (which means the technology and patents are very valuable but for whatever reason there is something getting in the way) or she expects that she will actually be able to deliver on her promises.

I personally think that she is an unsettling and creepy woman, but I do think that having a machine that you can go into a walgreens, get your finger pricked and run a quick blood lab, with "better than most doctor" diagnostics printing/sending out results right there in front of you, has crazy life saving possibilities.

I really don't think Silicon Valley was duped. I am thinking that they saw the crazy potential something like this could bring to the world if it actually existed.

So like I said before, I really want to know what is wrong with the prototype and can it be fixed?

Also the notion in the article that these things tend to be developed in open forums is nonsense. Big Pharm doesn't spill the beans on drugs they are developing until they have to when filing for Patents/FDA Approval. And Doctors don't spill the beans on procedures/tools they are developing until they have to when filing for patents/FDA approval.

You have to be very skeptical when dealing with these kind of disruptive "job killing" innovations. Who needs to go to their local doctor when medicine is become more and more electronically driven?

Some day people will be able to go to a CVS or Walgreens and step into a photo booth like machine, get a finger prick, EKG, MRI, blood pressure taken, answer a quick survey and have their prescriptions printed out in less than 15 minutes.

And it will actually work better at making people healthy than doctors do today.

All these doctors who spent $320k going to an ivy league med school and have 3 million dollar 30 year mortgages don't like the idea of being replaced by HAL. So why should we believe they wouldn't try to curtail any innovation that makes them more and more redundant?

Nobody likes having to have a person stick a finger up your ass to tell you whether your baby maker is still good to go.</comment>


Node/Ember/Parse (Neptune) app w/ Facebook login - <AUTHOR> https://github.com/jdolitsky/neptunejs

<comment><AUTHOR> This is a fork of an awesome repo I found last week called Neptune by bwship. It included a TON of stuff out of the box, including user register/sign- in/forgot password functionality. I added Facebook login (and Twitter soon) to make it a perfect starting point for future projects.</comment>


Four Steps to Maintaining a Clean Git History - <AUTHOR> https://spin.atomicobject.com/2017/04/23/maintain-clean-git-history/#.WPzYazyOBCU.hackernews <comment><USER2> I always felt that rebasing as part of a workflow was part lack of discipline when creating commits, and part desire to hide work that is incomplete or "imperfect".

As with most things, there's no silver bullet that applies to every single case; different workflows work best for different teams and projects. Gitflow is both reasonable and fairly simple to understand and implement, but so is commiting straight to master and tagging "when it's done" for a single-person hobby project.

There's also no free lunch, and maintaining a clean history (whatever that means) takes more effort than just applying a set of rules (such as, always rebase, squash commits) after the fact. Linus Torvalds has said it better than I could ever do[0].

As far as the article itself goes, the author maintains that:

> A few common commits on my branches are: "WIP," "Run Rubocop," and "Fix > typo."

And then goes on to say that the solution to this is to rebase, rather than creating better commits from the get-go, or just deferring any commits until the end of the feature work, and then staging interactively in order to create multiple thematic subdivisions, or just commiting the entire workspace.

[0]: [http://www.mail-archive.com/dri- email@example.com/...](http://www.mail-archive.com/dri- firstname.lastname@example.com/msg39091.html)

<comment><USER3> > that rebasing as part of a workflow was part lack of discipline when > creating commits

Because we have rebase, there is not as much need for discipline when creating commits, because you can change change them later.

> and part desire to hide work that is incomplete or "imperfect"

When I do any kind of work, I usually submit the finished work to whomever needs it. It's not hiding, it's just giving people what they need.

When I use `rebase -i` in my workflow to alter my commit history, it's almost always for the purpose of helping code review. I want my commits to lead a reviewer logically down a path that helps them understand the role each change makes in a push request.

</comment></comment><comment><USER4> Im always surprised by the amount of effort people put into trying to maintain a "clean" git history, and how much information they are willing to throw away to do that.

I kept wondering whether I was missing something.

I think maybe I had an epiphany just now, the last couple of sentences where the OP spoke about maintaining a clean _project_ history suddenly made things click.

Personally, I don't want that, on the very occasional time I go into the git history what I am looking for is _code_ history.....the story of how a piece of code arrived at its current implementation....that means I need all the commits, the "fixing a typo" commits, the "oops, overlooked a logic error" commits...

I don't want to see the history of the _project_ when I look at git history, I want to see the history of the _code_.

Its messy, but it tells me so much. I can see how this piece of code arrived at its current state, who worked on it, and what they did.

The idea of git history as a way of tracking the project history just never occurred to me. Now I understand it, I definitely don't want it, but its nice to have a mystery cleared up.

</comment><comment><USER3> I don't think I will ever understand people's fascination with squashing feature branches.

Develop on a branch, yes; rebase the branch instead of merging in master, sure. But why delete the history by squashing, when a merge into the mainline can look just as neat without requiring history to be deleted.

The argument that I've heard is "so that I don't have to all of that detailed history." But that is a display problem, not an argument for removing history.

<comment><USER5> I like to either squash feature branches into develop/master, or squash the commits in that branch into multiple commits (for example, an unrelated fix I made, and then the main feature commit) and then do a fast-forward-only merge, so there's never merge commits from feature branches.

The reason I like doing squashes is not because I don't want a detailed history. It's because (1) it allows me to commit often, even when the code isn't fully finished, might not build or pass all the tests and (2) during code review, I might need to fix a typo, change the code, or make other changes. By squashing these commits into one feature commit, I can ensure that each commit builds and passes tests, which is very helpful when doing git bisects later. It also removes history that doesn't matter (those code review fixup commits, as well as all my work-in-progress commits), so what's left is a nice history of the project, hopefully with each commit describing in high- level detail what changed and why, as well as linking to a ticket/issue/bug report.

That also lets me only use merge commits for things that really are "merging", such as merging develop into master, where master has additional hotfix commits. I always use merge commits for that (never fast-forwarding), so it's always clear when code was merged from develop and released.

<comment><USER3> What you are describing is not what the author of the article is advocating, which is `git merge --squash`.

What you've described -- committing often and later combining commits together into cohesive units that don't break tests -- is a lot like how I work. I use `git rebase -i` for this; never `git merge --squash`.</comment></comment></comment>


But the question is: will it recurse? Part 1: fibonacci(40) - <AUTHOR> http://www.saltwaterc.eu/but-the-question-is-will-it-recurse-part-1-fibonacci40.html

<comment><USER2> Recur is to make a recursive call. Recurse is to curse again.

<comment><USER3> Thanks. Missed that one. My "3rd party" language support is not perfect.

</comment></comment><comment><USER4> Don't want to get into the language shootouts here. But this seems like a horrible way to compare language performance.

There are many more interesting real-life programs tested on computer language shootout website.

In particular, you can't compare C and JVM performance on programs that run for such a short time. The JVM time will be dominated by the time to start up the the JVM and to do the first JIT optimization. I think it is very likely that for a larger fibonnaci number, the JVM performance will come asymptotically close to optimized C's.

<comment><USER3> This may be the subject for a part 2. Aka more intensive testing for the implementations that actually perform. And other recursive algorithms (such as the classic factorial). I didn't test the language (implementation!) performance, but the recursion and how the various implementations can actually handle the bad recursion algo.

A proper testing suite that tests various aspects of a specific runtime takes time. I am aware of that, but I am not aware of any test suite that does this.

</comment></comment><comment><USER5> Okay, I don't get this. I thought the original node.js article was using a terrible implementation of Fibonacci precisely because it was stupidly slow.

Why are people writing articles looking at how fast different languages / implementations are at running this terrible code? Does that give us any useful information whatsoever?

<comment><USER3> There isn't an original article. In fact, my article isn't something to give the node.js police ideas on how to "fix" various stuff. This is about how various runtimes handle bad recursion. In fact, V8 isn't stupidly slow compared to PHP, CPython, and the de facto Ruby implementation.

If you aren't writing recursive code, then the valuable information for you is NULL. Otherwise, it may give you some food for though.

<comment><USER5> I do write recursive code. However, I certainly do my best not to write _bad_ recursive code...

<comment><USER3> In fact it is _good_ recursive code, mathematically speaking. It's just that some compilers are _bad_ at it aka doing brute force instead of tail recursion. The main selling point of these "interpreted" languages is the programmer productivity. Now why the hell one would have to write more complicated algorithms just to go around the compiler? C does this just fine. The 0.6 seconds to 5 minutes difference for the same simple algorithm shows that something is fundamentally broken.

</comment></comment></comment></comment><comment><USER6> Try using compiler optimisations...

<comment><USER3> Good catch.

fib|⇒ gcc -O4 fib.c -o fib fib|⇒ time ./fib ./fib 0.65s user 0.01s system 100% cpu 0.657 total fib|⇒ gcc -O3 fib.c -o fib fib|⇒ time ./fib ./fib 0.66s user 0.00s system 100% cpu 0.657 total fib|⇒ gcc -O2 fib.c -o fib fib|⇒ time ./fib ./fib 1.54s user 0.00s system 100% cpu 1.535 total fib|⇒ gcc -O1 fib.c -o fib fib|⇒ time ./fib ./fib 0.00s user 0.00s system 0% cpu 0.001 total

For some reason, it hates the O1 flag. Printing the result brings it close to the result without the optimization.

<comment><USER7> O1 probably sees you don't use the result or have side effects in fibonacci(40) and optimizes the call away...

<comment><USER3> One of the reasons I get why people advise against certain levels of optimization without understanding its implications. As I write few lines of C code, usually I don't bother with deep understanding of all the concepts of compiler optimization.

</comment></comment></comment></comment><comment><USER8> Wow meaningless article. Try tail recursion, and a functional language - although that won't be able to help you with your terminal banality...

<comment><USER3> Can you post something that actually means something?

</comment></comment><comment><USER9> "sucks" "suckier" sucks that hard " "makes me laugh so hard up to the point of bursting into tears"

In these sorts of posts, I tend to find that flavor comments like the above:

a) add nothing of value to the post

b) are likely to provoke hostile responses (or turn people off from responding), actively detracting value from the conversation surrounding the post.

Thank you, though, for taking the time to write up your benchmarks.

<comment><USER3> Buzz marketing. These days nobody gives some attention to a purely technical article without any incentives. Seriously, on HN usually it matters who wrote the article, not the factual contents of it.</comment></comment>


Mind controlled levitation (neurofeedback + harness) - <AUTHOR> http://www.youtube.com/watch?v=yGvsDD50cb8

<comment><USER2> So you think really hard and you rise up?</comment>


Spelling Corrector in 21 lines of Python  - <AUTHOR> http://norvig.com/spell-correct.html <comment><USER2> Interesting that the shortest (and among the most readable) is the 15-line version written in old-school AWK: [http://pacman.blog.br/wiki/index.php?title=Um_Corretor_Ortog...](http://pacman.blog.br/wiki/index.php?title=Um_Corretor_Ortográfico_em_GAWK)

A surprise is that the Perl implementation weighs in at 63 lines. I would have expected much less. I expect a much shorter version is possible, relying on idiomatic constructs at the expense of readability.

<comment><USER3> If you run a2p on the awk, then remove some boilerplate and unformat as per the original, you end up with only about 18 lines of perl.

</comment></comment><comment><USER4> I'm no Python expert, but I liked doing this in Haskell:

[http://www.partario.com/blog/2009/10/a-spelling-corrector- in...](http://www.partario.com/blog/2009/10/a-spelling-corrector-in- haskell.html)

[https://github.com/timrobinson/spell- correct/blob/master/Cor...](https://github.com/timrobinson/spell- correct/blob/master/Correct.hs)

<comment><USER5> liked your Haskell version. Makes me want to learn the language!

</comment></comment><comment><USER6> I have seen this one before somewhere, and what amazes me is that how you can solve problems without a hassle if you get the "trick" right. Another case I read was that Google use(at least used) two vectors(each consists of many 0s and 1s, which in turn represent whether the web page has the keyword or not) to represent web pages, and calculate the angle between the vectors to figure out the similarity(a value) between web pages.

<comment><USER7> It sounds like you're conflating two techniques here. The first (as others have mentioned) is cosine similarity, which measures the angle between the vectors. However, the bit about 0s and 1s sounds like you're talking about locality-sensitive hashing (<http://en.wikipedia.org/wiki/Locality_sensitive_hashing>). LSH is often used to estimate cosine similarity, as cosine similarity can be quite expensive to calculate. I know Google and others are using it for such.

</comment></comment><comment><USER8> Scrolling to the bottom of the article gives you a list of similar implementations in other languages.

Very interesting to see how other have tackled this programming problem.

<comment><USER9> I was somewhat amused to see that most other implementations take around 30 - 60 lines of code, except Java : 372.

But the comparison may not be fair, as the Java author may have tweaked the algorithm or added new features

<comment><USER10> There are two implementations listed for Java. The first is 35 LOC and the second is 372.

</comment></comment></comment><comment><USER11> Anyone else having trouble parsing this list comprehension ?

      e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS

<comment><USER12> In a traditional for loop fashion:

      def known_edits2(word):
        L = []

        for e1 in edits1(word):
          for e2 in edits1(e1):
            if e2 in NWORDS:
              L.append(e2)

        return set(L)

<comment><USER11> Thanks for the clarification. I didn't realize that list comprehensions mapped so directly to nested loops, I was particularly confused by the variable name scoping rules.

</comment></comment></comment><comment><USER13> In PHP, you can use the levenshtein() function.

<http://php.net/manual/en/function.levenshtein.php>

<comment><USER14> Levenshtein is good for many languages.

However, for English nothing beats soundex type algo. I believe major SQLs and php do soundex.

Soundex is an old algorithm, century old, designed to find immigrants by their last name, no matter how they converted it from their native language to english. For example: if one came and had name Szczybliewski or had it Shcheeblevsky , then soundex should return close match.

Metaphone is improved version of soundex (available in php). And if you are careful, you can find double-metaphone out there.

Kind regards

<comment><USER15> I dropped by to say this.

The examples in Future Work 2 would all have been resolved by checking results against Soundex, a simple check with significant improvement.

There are two classes of errors: misspellings and typos. Edit distance (Levenshtein) is reasonable for typos, while the examples in Future Work 2 are misspellings.

Another trivial improvement is to weight edit distance by typo distance.

</comment></comment></comment><comment><USER16> If anyone is interested in other applications of this technique, this is a Ruby library I wrote to do sentence tokenization: <https://github.com/SlyShy/Tactful_Tokenizer>

</comment><comment><USER17> I found it fascinating that you can actually implement something seemingly so magical in such a small amount of code.

I'm down as 22 lines of C#, though to be fair I am cheating vastly and the lines are huge :)

[http://www.codegrunt.co.uk/2010/11/02/C-Sharp-Norvig- Spellin...](http://www.codegrunt.co.uk/2010/11/02/C-Sharp-Norvig-Spelling- Corrector.html)

C# does offer some nice features to give you some succinctness but there's no getting away from the verboseness of a java-like language.

<comment><USER18> Clean, but I think your 'idiomatic' version should use words.TryGetValue( key, out value) instead of the duplicated dictionary lookup of known words in words.Contains( key) and words[ key]

<comment><USER17> Thanks, good point. Fixed :)</comment></comment></comment>


Conservative Blogger's Visit to Google HQ Triggered Security Panic - <AUTHOR> http://archive.is/PCrWc <comment><USER2> Please link to the primary site, which in this case is [http://www.breitbart.com/tech/2018/01/08/conservative- blogge...](http://www.breitbart.com/tech/2018/01/08/conservative-bloggers- visit-to-google-hq-triggered-security-panic/) , and not a mirrors.

This gives people more context than the archive.is link gives. For example, from the URL I can tell that it's from Breitbart and that it's from several weeks ago.

Eg., if I knew about this when it first came out, then I wouldn't need to read it again thinking it was a new instance.

And if course if I had already read the link in this browser then the link would have been colored as 'visited'.

<comment><AUTHOR> I originally submitted the Breitbart link, but it seems like all Breitbart links are auto-killed on HN. Look: [https://news.ycombinator.com/from?site=breitbart.com](https://news.ycombinator.com/from?site=breitbart.com)

</comment></comment><comment><USER3> I imagine that simply being iconoclastic and skirting the edges of racism isn't enough to get you flagged from lunchtime visits. Whatever happened here, about the only thing I'm sure of is that we have far from a complete picture of this story, this list, and what it takes to get your name in it.</comment>


Top 55 most popular programming books on Reddit - <AUTHOR> http://booksreddit.com/product-category/most-popular-programming-books-on-reddit/ <comment><AUTHOR> Best rated related books across r/askprogramming, r/programming, r/cscareerquestions, r/learnprogramming. This is an updated list, calculated on data since 2011 up to September 2019 and based on a number of upvotes, mentions, and Reddit golds. The selection contains Top 55 best books including their top comment.</comment>


Audit Cleared Facebook's Privacy Practices Despite Cambridge Analytica Leak - <AUTHOR> https://www.wsj.com/articles/audit-cleared-facebooks-privacy-practices-despite-cambridge-analytica-leak-1524190550 <comment><USER2> If it was any other consulting firm other than the upstanding professionals of PricewaterhouseCoopers, then I might suspect haberdashery.</comment>


Ask HN: Why do people CC themselves on email? - <AUTHOR> We have all seen it. Some people often CC themselves on an email they send. Why?<p>Best reason I've thought of so far: They use Microsoft Outlook and CC'ing themselves inserts their reply into the thread view, as well as makes the email searchable in the inbox (not just sent mail). <comment><USER2> Both of these and when I send from my ERP, if I don't CC myself, there will be no (easily) searchable/usable copy, or proof that it was sent. Plus it makes it easier for follow up emails.

</comment><comment><USER3> to have a copy to store in the same folder as all the other related mails (you could technically move it from your "sent" folder, but then you can't find it there, or you'd have to copy it, which I'm not sure all mail clients do or like).

</comment><comment><USER4> To make sure the receiving party knows there is a record of the email.</comment>


Ask HN: Finding a startup or tech job after college? - <AUTHOR>

I am graduating next May (2013) with a Bachelors of Science in Applied Computing Technology (CS/Biz hybrid) from Colorado State University. I have 3 years IT & Network Support experience and just about 2.5 years web development experience through Student positions. I've done the whole freelance thing for the last 5 years as a Wordpress theme guy. How do I approach getting a full time job after college?
I've got some experience with startups, I spent almost a full year in startup mode trying to start a social networking company with some friends & we even got some money. Before that tried to start two other companies and I have done a ton of freelancing.
My main interests are:
1. Web Development (lots of jQuery, PHP & Coldfusion) 2. Mobile Development (No experience)
3. Security (No experience) 4. Parellel Programming (No experience)
Beyond course work my internships entirely consisted of web development and IT support, I've done lots with OOP and MVC (building a CMS for the USDA), YII, Coldfusion etc... but I am not sure how I can tailor that to applying for jobs.
My main questions are:
1. How do I find a job before I graduate that will start after I graduate?
2. I'm going on a fantastic honeymoon, and won't be able to start for 1 month after graduation. Will this be a problem? Graduation is around May 10, I won't be able to start until after June 10. Will most employer's care?
3. When do I start applying for jobs?
4. I have lots of experience, lots of people have told me to come talk to them at the career fair when I'm ready to graduate--How do I sell myself to them?
5. I'm looking at Continental United States, but will prioritize companies in Arizona (Phoenix area), Colorado (anywhere), Dallas or Austin or somewhere without beaches or snow. What's the job market like for Web Developers across the country?
6. How hard will it be for me to get a job given 6 years IT/Web experience + a 4 year degree @ 24?
Any tips or advice is greatly welcomed (other then, don't married so soon). <comment><USER2> 1,3,4 & 6: Just fill out a Linkedin profile right now. The recruiters will start calling.

2\. No, it's a seller's market now.

Go to some meetups and meet with local developers. If you're any good, you'll get lots offers for freelance work or jobs.

Since you're still a student, you should take the time to learn mobile programming. Pick ios or android. If you're going the ios route, look at the Stanford Fall 2011 video lectures on Itunes university by Paul Hegarty. That will give you the basics. The rest you can look up on stackoverflow or the Big Nerd Ranch book. If you can make a non-ugly app or two, there will definitely be more recruiters calling.

<comment><AUTHOR> What are the routes for learning Android?

<comment><USER3> Download Eclipse and the Android Development Kit. The emulator and development environment are free.

</comment></comment></comment><comment><USER4> Shoot me an e-mail. I work at Mapquest and we are hiring right now in Denver. I'd be happy to give you some of my time.

<comment><AUTHOR> Email sent! Thank you so much!</comment></comment>


Hiding Nobel prizes in plain sight - <AUTHOR> http://en.wikipedia.org/wiki/Aqua_regia#History <comment><USER2> Clever, touching and funny ... but I'm not sure that "a jar of chlorauric acid, formed by dissolving the gold from two Nobels in aqua regia" _quite_ counts as "Nobel prizes" any more, never mind "in plain sight".

<comment><USER3> It's more like hiding the gold from Nobel prizes from the Nazis in plain sight. Still, it's a very interesting way to hide gold that most non-chemists would never think of.

But it does give an interesting exercise: how else could you hide gold in a chemistry lab in such a way that at least the gold is retrievable? I can imagine submerging the prizes in various dangerous chemicals, but getting them clean enough to be safe afterward would be worrisome.

<comment><USER4> if I was in that situation I would have likely just melted the gold and poured it into a hallowed out brick or something..

</comment></comment></comment><comment><USER5> I liked the episode of lupin the third where they melt down the gold and apply it the body of a truck and then paint it and drive it over the border. the guards search the truck, but the gold IS the truck.

<comment><USER6> Like the episode of Monk where an eccentric rich fellow wrote hundreds of volumes of his diary talking about his treasure. Nobody can figure out what his clues mean. Turns out _he wrote them with gold ink_.

<comment><USER7> The story is cool, but not actually possible in real life (there's just not enough ink): [http://en.wikipedia.org/wiki/Wikipedia:Reference_desk/Archiv...](http://en.wikipedia.org/wiki/Wikipedia:Reference_desk/Archives/Science/2011_January_10#Hiding_gold_in_ink)

<comment><USER6> Monk lied to me? Are you saying Monk _lied_ to me?

</comment></comment></comment></comment><comment><USER8> Aqua regia is nicknamed 'Tzar's vodka' in Russian.

<comment><USER9> I like the humor, although it's a bit scary.

</comment></comment><comment><USER10> I imagine it takes some mighty wherewithal to so cleverly hide such important historical items under that level of pressure, what with the Nazi regime breathing down your neck and all.

</comment><comment><USER11> According to other accounts, the trick was performed by Bohr himself. Turing only won silver supposedly ...I guess bronze went to cannon shells.

<http://www.plexoft.com/SBF/B.html>

<http://www.oppapers.com/essays/Nies-Bohr/28076>

</comment><comment><USER12> That's a creative solution!

</comment><comment><USER13> Our AP chemistry teacher told us this story back in high school, and I have always loved it.

</comment><comment><USER14> If this hadn't happened in real life, it certainly would have happened in a Neal Stephenson novel.

<comment><USER15> Or the Stephenson novel would outline why the idea wouldn't work (some people suggest in comments melting the gold into the frame of a car, which is specifically avoided in Cryptonomicon).

<comment><USER16> vs. using it to plate the hull of a ship?

<comment><USER15> Heh, I feel like an idiot for forgetting that one. :-)

<comment><USER16> I think you can be forgiven as it comes in around page...3000 of 4000? I'm 50% of the way through the third of three books, so enh.

</comment></comment></comment></comment></comment><comment><USER17> as a german I'm a bit disturbed they didn't call it Nazi-Germany in the text. And the nazis tried to get any gold for foreign exchange, even from gold teeth of jews they executed, so I have some doubts about this story ..

<comment><USER18> The text mentions World War II, so it's clear from context who was running Germany at the time.

Germany was still Germany during the Holocaust, just as the United States was still the United States when it was committing genocide against Native Americans, Belgium was still Belgium when it was responsible for atrocities in the Congo, etc., etc.

<comment><USER19> >Belgium was still Belgium when it was responsible for atrocities in the Congo, etc., etc.

Funny you should mention that, because at the time that the atrocities were occurring, the Congo was _not_ a Belgian colony. Rather it was the personal colony of King Leopold of Belgium and was handed over to the parliamentary government of Belgium after the atrocities came to light.

<comment><USER20> "L'État, c'est moi"

</comment></comment></comment></comment><comment><USER21> For those that didn't get this immediately, here is the relevant component from Wikipedia:

 _When Germany invaded Denmark in World War II, the Hungarian chemist George de Hevesy dissolved the gold Nobel Prizes of the German physicists Max von Laue and James Franck in aqua regia to prevent the Nazis from confiscating them. The Nazi government had prohibited Germans from accepting or keeping any Nobel Prize after the jailed peace activist Carl von Ossietzky had received the Nobel Peace Prize in 1935. De Hevesy placed the resulting solution on a shelf in his laboratory at the Niels Bohr Institute. It was subsequently ignored by the Nazis who thought the jar—one of perhaps hundreds on the shelving—contained common chemicals. After the war, de Hevesy returned to find the solution undisturbed and precipitated the gold out of the acid. The gold was returned to the Royal Swedish Academy of Sciences and the Nobel Foundation who recast the medals and again presented them to Laue and Franck.[5][6]_</comment>


The next era of human progress: what lies behind the global new cities epidemic? - <AUTHOR> https://www.theguardian.com/cities/2019/jul/08/the-next-era-of-human-progress-what-lies-behind-the-global-new-cities-epidemic <comment><USER2> Reminds me of the burbclaves in Snow Crash.</comment>


Firecracker now supports raspberry pi 4B - <AUTHOR> https://github.com/firecracker-microvm/firecracker/pull/1235 <comment><USER2> Really it's more that the firecracker supports ARMv8 64bit, and the author tested it on a raspberry pi (as well as a HiKey970 board) but anyway.

This is really cool we'll likely see custom arm servers running in AWS as a way to reduce cost / improve scalability.

<comment><USER3> They already have ARM instances; [https://aws.amazon.com/ec2/instance- types/a1/](https://aws.amazon.com/ec2/instance-types/a1/)

<comment><USER4> Is it just me or are those ARM instances rather expensive compared to other EC2 options?

<comment><USER5> It's the price for a not-very-specific vcpu. Your performance could be better on the A family, more than offsetting the price difference. Of you're really considering the choice - you should test your workload on both. Or maybe they save you time in a different way - for example you save time not having to run a virtualised linker after cross-compiling.

</comment></comment></comment></comment><comment><AUTHOR> have tried on this prebuild 64bit ubuntu kernel with kvm enabled

[https://github.com/TheRemote/Ubuntu-Server- raspi4-unofficial](https://github.com/TheRemote/Ubuntu-Server- raspi4-unofficial)

</comment><comment><USER6> I don't suppose anyone could direct me to a resource outlining how to develop targeting this environment.</comment>


Chuck Moore: Programming a 144-computer Chip to Minimize Power [video] - <AUTHOR> http://www.infoq.com/presentations/power-144-chip?utm_source=infoq&utm_medium=videos_homepage&utm_campaign=videos_row1#.UrMEcjUlt_s.reddit <comment><USER2> I've been looking forward to this one! I have a soft spot for eccentric inventors that challenge the status quo simply by doing things their way and not blindly following conventional wisdom. Even if you disagree with them it's good to have your assumptions challenged, if only because it makes you aware of the fact that you have them.

</comment><comment><USER3> The incredibly low-power usage of the chip is interesting, as is his perspective of counting the energy of each operation.

You can run the chip full-throttle with a solar panel the size of your hand, but where it shines is when it's not fully utilized. This is for (odd) general-purpose computation, not ASICs.

</comment><comment><USER4> Not sure how many people remember, but back in the PowerPC days of Macintosh, the OpenFirmware chips actually contained a Forth interpreter implemented in hardware. It always struck me that, should the need arise, you could use the Forth interpreter to write a bootstrap C compiler, then use that to build a proper C compiler and from there compile and load a minimal kernel. In other words, starting with bare metal you could, in theory, get to a fully functional desktop computer...

...one of these days maybe I'll actually have the time to find out if that really works in practice.

<comment><USER5> The OLPC XO machines also have it, as well as SPARC-based Sun workstations.

<comment><USER6> If only a geek could buy the latest version of the OLPC laptop...

<comment><USER7> If only a low-income parent could buy the latest version of the OLPC laptop for their child....

</comment></comment></comment></comment><comment><USER8> Chuck Moore is definitely one of the great computing heroes, especially if you're an idealist.

The problems with the GreenArrays product seem to be that it's too separated from the rest of the world, and in order to successfully interface peripherals (even SRAM, as covered in this video) to it requires completely grokking this alternate way of doing things, in addition to understanding the low level details of absolutely every interface.

Maybe I'm in the wrong circles, but right now if you can't shoot UDP packets out of something it doesn't really meet the minimum baseline for connectivity. If you're going to head off on your own (and certainly for energy purposes there would be good reason to do so) you need to have a simple bridge back to more standard land.

<comment><USER9> Two of the GA144 evaluation boards on my bench here in my office both shoot UDP packets out to learn the date and time when they boot. UDP over IPv4 over bit-banged 10baseT. You may ping one of them at g144.minerva.com.

<comment><USER8> That's on the standard eval boards? You've managed to get me interested in this rabbit hole again!

<comment><USER9> We have a little piggyback board with transformer, 10 MHz fox osc, and a dual op-amp to let us swing enough V to make the spec for twisted pair. Haven't started offering them publicly yet, but the code has been running two years. We gave an overview of the software defined NIC at SVFIG Forth Day 2012; video and powerpoint available thru SVFIG. The code is in the current arrayForth distribution. Still waiting for time to finish converting TCP to run on the 16-bit polyFORTH model but IP, ICMP, ARP, UDP all work. TCP only knows how to send a proper RESET.</comment></comment></comment></comment>


Marc Jacobs vs. The Graffiti Artist, Round 2 - <AUTHOR> http://observer.com/2012/05/11/marc-jacobs-kidult-shirt-graffiti-05112012/

<comment><USER2> That is some pretty lame graffiti. Check out Style Wars, or just watch a train next time one goes by. Three monochrome letters in a shaky script is extremely underwhelming compared to real graffiti art.

<http://en.wikipedia.org/wiki/Style_Wars>

<comment><USER3> Indeed-- this is closer to performance art than graffiti.

</comment></comment><comment><USER4> Can we please stop calling them "artists" and start calling them what they really are, vandals? There is nothing creating about what this guy did.

People slap the label "art" on crap too quickly. No, not all of it is art. Some of it is; but not all. Just because you can sling some pigment against a flat surface doesn't make it art, and just because you can draw disapproving looks from people doesn't make you an "artist".

<comment><USER5> This had an artistic and communicative intent, although i would concede that it's not particularly clever or innovative.

Fucking up Marc Jacobs or other massive commercial brands is a cogent statement to be made, and i don't think one that should simply be dismissed as thoughtless vandalism (though vandalism it may be).

<comment><USER6> RE you contending that simply because something has artistic intent it is, by definition 'art'?

<comment><USER5> I have argued for days about what does and doesn't constitute art, and it's almost always a futile endeavor.

The artist intended it to be art, and had a message to convey. Those are definitely components which make me lean towards considering it art.

</comment></comment></comment></comment><comment><USER7> It's funny because this article missed the whole other half of this "Story".

1\. It went meta:

[http://www.highsnobiety.com/news/wp- content/uploads/2012/05/...](http://www.highsnobiety.com/news/wp- content/uploads/2012/05/fry-marc-jacobs-kidult-tshirt.jpg)

2\. The artist himself made T-Shirts and sold them for $6.89:

<http://kidultone.com/?p=1763>

<comment><USER8> Yeah but that's genuinely lame.

Kidult's shirts play as completely non-clever. His original prank was interesting, but Marc Jacobs' definitely out clever'd Kidult.

</comment></comment><comment><USER9> Ever since I saw the following image, I have disliked this guy. <http://imgur.com/gallery/CQvWO>

<comment><USER10> This is satire.

<comment><USER9> Really? I feel bad now, I had no idea. My opinion of him has changed :-)

Edit: wait, how do you know this? I've googled a bit but found nothing to suggest it. Whilst it definitely seems like it could be satirical, I wouldn't put it past the fashion industry.</comment></comment></comment>


Tools for faster back end development BaaS - <AUTHOR> https://linx.software/baas-tools/ <comment><USER2> This (marketing) piece oddly leaves out Firebase which is the only successful baas that I know of. My understanding is that baas never really took off and the concept is kind of dead now. Does anyone have more current perspective?

<comment><USER3> `Baas` as a term might be dead, but `JAMStack`, which Netlify invented [0] is alive and perhaps thriving -- it's a bit hard to say. Maybe not the same exact concept, but it seems similar.

[0] - [https://www.netlify.com/oreilly- jamstack/](https://www.netlify.com/oreilly-jamstack/)

</comment></comment><comment><USER4> im not sure just what they are going for here...i'd not count auth0 as a "baas" offering...this reads more like a quasi jamstack business function api list...</comment>


New Details On Apple's Budget iPhone 5 - <AUTHOR> http://www.ilounge.com/index.php/backstage/comments/new-details-on-apples-budget-iphone-5/

<comment><USER2> Drill this into your heads: Apple doesn't do "Budget".

<comment><USER3> Like the iPod mini/nano/shuffle?</comment></comment>


Outsourced IT for Startups? - <AUTHOR> Anyone aware of a "good experience" company for startups that need start providing hardware to employees, but don't want to build an IT department?<p>Seems like a startup should exist to take this pain away. <comment><USER2> Go to a good hardware vendor, they will set all this up for you and do it for basically free. If you have custom images you want they charge a small fee per install, but I have used CDW, PCConnection and other companies for this type of work in the past. You send an order to them for a standard business setup, or Engineer setup and then they can drop ship it directly to the employee or to your headquarters. They can image the machines, setup default accounts, make sure specific software is loaded and the correct licenses are on there etc. They are IT in a box for the most part.</comment>


Apply HN: Sohoko.io – iBeacon Cloud Platform for Interactivity, Not Marketing - <AUTHOR> Sōhōkō is a cloud platform for associating content and defining interactions with Bluetooth Low-Energy (BLE) beacons.
Existing platforms in this space are largely focused on pushing content (with a bias towards marketing); our platform is focused on bi-directional experiences between users and hot-spots of interaction represented by beacons.  Apps running on Sōhōkō can share users, beacons, and content, which helps app discovery.
Instead of launching the platform directly, we plan to build it through internal dog-fooding as we build the first set of applications available on the platform.  These first apps will be focused around letting individual users create experiences with a single beacon.
The first app we are building is Sōhōkō Messenger, a messaging app where BLE beacons are used to deliver messages contextually.  Instead of a message being sent when composed, delivery is triggered when either the sender or the recipient enter or exit the region of a beacon they have shared with each other.  In the single-user use-case, this could be used to send contextual reminders; when sharing a beacon with friends, family, or co-workers, this provides a new way to receive messages in the right context and we feel this creates a little nicer feeling compared to the current state of affairs where we send messages regardless of the recipient's context.  We feel such a personal use-case is a great place to start because messaging in the home is a place where we will be forced to be very careful about protecting user privacy.
400M beacons are estimated to be deployed by 2020[1], creating a revenue opportunity from micro-transactions for user interactions payed by developers on the platform.
Short term, there will be some revenue from premium app features and in-app beacon sales, but will mainly be from SDK licensing and developer partnerships with early adopters.
http://sohoko.io
1. http://www.reuters.com/article/ny-unacast-idUSnBw265779a+100+BSW20160126 <comment><USER2> What's your go-to-market plan -- how will you find the partnerships and SDK licensees?

<comment><AUTHOR> > What's your go-to-market plan

First we will promote the Sohoko Messenger app to developers who likely already posses beacons to use with the app; they will be reached through beacon manufacturer forums and other developer forums.

We are pursuing some leads for other early deployments with managed residential buildings in Boston that are interested in using an app like this.

Our current thoughts for the third go-to-market step for the Sohoko Messenger app is to run a user acquision experiment with targeted social media advertising.

> how will you find the partnerships and SDK licensees?

Before the Sohoko cloud platform is available for public release, we want to promote growth of our apps built on the platform. Instead of trying to focus on pure growth or trying to monetize our early users, we are trying to create some revenue through these licenses. Having other developers licensing technology or using the platform before its public release allows for more testing of alternative use cases.

We are currently evaluating the right balance between pursuing licensing deals and user growth for our apps.

I have been consulting in the beacon/IoT space for the past 2 years and my business partner and I have some connections with beacon manufacturers. This has provided us with some leads for developers who could benefit from technology we have/are developing to get their work done faster; we are planning to pitch these developers and reach out to our network to find other developers to pitch.

After releasing the Sohoko Messenger app, one of our next ideas is an interactive hotspot app for university campuses---based in Boston/Cambridge, there are a lot around. We are thinking about offering the platform free to students/faculty to encourage students to develop projects on the platform and spur outside development and licensing.</comment></comment>


If protesters can march, why can't businesses open? - <AUTHOR> https://nypost.com/2020/06/02/if-protesters-can-march-why-cant-businesses-open/ <comment><USER2> This is exactly the kind of whataboutism that people have rightly come to expect from the tech world, but it never ceases to disappoint

<comment><USER3> Is this a counter argument or just another thing worth addressing?

It doesn't detract from the goals of BLM to ask this question. It appears that we are not getting huge numbers of covid cases from these protests. Maybe this is evidence it's safe to open now.

<comment><USER4> It takes at least 2 weeks to know? Incubation is around 2 weeks?</comment></comment></comment>


Selling a website for charity - <AUTHOR> http://codingforamission.com/

<comment><USER2> While this is a nice idea, I don't understand why someone would pay for a simple site like you're describing when they can simply use a wordpress template.

Or, really why you would code out a site of this level of simplicity when you can do the same. If nothing is going to be custom at all, which is pretty much what you say, why not use a template?

Obviously if you've got the code saved in a few files anyway that's pretty much the same thing as a personalized template I think.

Am I missing something?

<comment><AUTHOR> OP here: it's simple, but not cookie-cutter. I'm going to use Bootstrap to try to keep things manageable, but even Bootstrap can be quite expressive. Part of the process is meeting with the client, sorting out what they need, and guiding them towards a good, manageable website. I've explicitly targeted academics because they are notoriously too busy or too unknowledgable to set up even a simple WordPress template. I've posted this with the hope that others might get inspired and take their own spin on it. I'm really an academic, not a hot-shot dev, so this is just my modest attempt.

</comment></comment><comment><USER3> I think this is very cool, and I think using a skill set and applying it to charitable need is great.

I would feel more inclined to pick a local charity that needs a site / site update and take them on pro bono for x amount of hours of work, especially if you can improve the way they take donations or something; might have an overall greater effect.

</comment><comment><USER4> awesome! its always cool to be able to use our technical skills to help charity.

BTW, for those who wish to help charity with their skills, but no opportunity to do so, you can find for those with needs at <http://www.onlinevolunteering.org> Its part of the United Nations Volunteers (UNV) programme.

Sorry to the OP if this is rude or anything, I don't mean to hijack the thread or anything, just wanted to get the information out there, :)</comment>


China now requires face scans for all new mobile phone accounts - <AUTHOR> https://venturebeat.com/2019/12/02/china-now-requires-face-scans-for-all-new-mobile-phone-accounts/ <comment><USER2> This is funny, I'm sure future criminals could find easy way to workaround it like buying identity from someone poor</comment>


Ask HN: Is there space for a fresh Twitter-like platform? - <AUTHOR> With Twitter stocks at record lows, and a constant display of ineptitude from executives, is there space for a similar platform?
What made Twitter great in it's infancy was the developer platform support, which has all but disappeared (interestingly, Instagram seems to be going the same way with it's sandboxed mode).
As Snapchat has illustrated time and time again, there is a definite market for close-circle sharing, particularly among 18-25 year olds. Facebook is no longer cool, so what's next? Snapchat is ideal for short-term communication, but there seems to be nothing between permanent storage in Facebook's datacenters and 24h expiration on Snapchat.
If a new competitor were to launch, from my perspective it would need to focus on:
1) Strong (and on-going) developer support 2) Close-circle sharing 3) Medium-term storage
Any thoughts? <comment> Mk-0 There's always space.

There have been countless attempts by new platforms to take over Facebook, Twitter, etc, but they always fail because 90% of users are so glued to what they already know. They don't want to join a network that all their contacts aren't already on. Additionally, a good portion of said users also don't mind ads or privacy invasion, so those aspects of new platforms only ever seem to appeal to users who know a thing or two about infosec.

For what it's worth, I'm no longer a Twitter user, but when I was I'd go through my activity each month or so and delete the majority of my tweets, retweets, and likes. Sure, they're still stored server-side, but it just reminds me how much I wish a platform could exist with little to no retention, like you said. Maybe a (transparent) purging of data regularly? Way too much to ask for, but it's a novel thought.</comment>


BrightContext Adds Support for Node.js - <AUTHOR> http://www.brightcontext.com/brightcontext-expands-real-time-platform-with-support-for-node-js-2/ You can now process real-time data streams in your Node projects using BrightContext's JavaScript SDK. <comment><USER2> looks sweet!</comment>


'A Bargain with the Devil'–-Bill Comes Due for Overextended Airbnb Hosts - <AUTHOR> https://www.msn.com/en-us/money/markets/a-bargain-with-the-devil-bill-comes-due-for-overextended-airbnb-hosts/ar-BB13k3T4?li=BBnbfcN <comment><USER2> I love Airbnb, but don't have a lot of sympathy for the property owners and speculators in this situation.

There is nothing wrong with owning a rental property, but the answer to loss of income is simple - sell the property and cash out while ahead.</comment>


Rundown of the newest features in C++11 [pdf] - <AUTHOR> http://dl.dropboxusercontent.com/u/13100941/C%2B%2B11.pdf

<comment><USER2> Great slides. This is the first time I am seeing a direct C++03 and C++11 comparison. Makes it much easier to understand.

That said, c++11 is a language that wants to be everything. Functional, object oriented, procedural, imperative, declarative and what not. The end result is slush.

<comment><USER3> Slush? Depends how you use it. It's extremely easy to write horrible C++ code, but when used by a talented developer I think the result can be extremely elegant.

I like how it's a lot more expressive than C, but without the needless verbosity of a language like Java.

<comment><USER4> C++ still has quite a bit of needless verbosity. You need to explicitly specify how variables should be captured in lexical closures. You need to explicitly choose weak pointers versus non-weak pointers. There are few useful defaults; you are forced to explicitly write a lot of boilerplate as a result. It may be better than Java, but that is not saying much.

<comment><USER5> > You need to explicitly specify how variables should be captured in lexical > closures.

I prefer that to some "it's automagically captured" behavior (in the context of C++). At least so I know and can choose if the closure captures a reference or makes a copy - which can be a very important detail.

For the stuff I usually do in C++ I love this kind of freedom. For other stuff where speed and/or memory layout/usage are not that important there are higher level languages like Python or Common Lisp.

<comment><USER4> It seems to me that you could just as easily _always_ create a copy of the captured variable, and in cases where you want to capture a reference, just create a reference to the variable and capture that instead. That is exactly what you see people doing when they capture "smart" pointers. You would not lose any freedom if captured variables were always copied, you would still be able to avoid expensive copy operations as needed (or just fix the problem at its source by making copying less expensive).

A high level feature like lexical closures should not get bogged down with low-level details (like the mechanics of how variables are captured). It's a waste of time and mental energy, distracting programmers from important issues and making debugging more complicated and time-consuming. Spending time deciding which method of capturing variables is faster screams "premature optimization."

</comment></comment></comment></comment></comment><comment><USER6> I have read quite a few overviews, and I really like the direct C++03 vs C++11 code comparisons in this one. It's get right to the point of showing the things that C++11 is trying to fix.

</comment><comment><USER7>
       string test=R"(C:\A\B\C\D\file1.txt)";

Hmm, that's ugly. Why are those parens needed?

<comment><USER8> The parentheses are used as delimeters so that you can use quotes in the literal.

      string test = R"(the Star Trek catchphrase "Beam me up, Scotty" did not appear)";

If you want to use quotes in the string, you can add up to 16 chars to the delimiter, but you still have to use the parentheses.

      string test = R"[de=limiter!(the (Star Trek) catchphrase "Beam me up, Scotty" did not appear)[de=limiter!";

</comment></comment><comment><USER9> Personally, I'd like to see some of these features added to C where they make sense. Raw strings, bind, lambdas, constexpr, and ranged for loops would all make sense in C.

<comment><USER10> How could lambdas make sense in C? Keeping closures around means having to keep free variables around. C doesn't have garbage collection, so it would be quite awkward to establish conventions about who gets to free the variables that each closure references.

<comment><USER4> How does any of that not apply to C++?

<comment><USER5> Closures work pretty great with std::shared_ptr.

<comment><USER4> Unless you have a cycle.

</comment></comment></comment></comment></comment><comment><USER11> Even with those enhancements, C++ remains incredibly complex language, with such a great variety of features the learning curve would be rising very slowly over time.

<comment><USER12> _with such a great variety of features the learning curve would be rising very slowly over time._

That is not necessarily true. The point behind C++11 is to provide new features that are easier to learn than the features they replace. So C++11 on its own has a lower learning curve than C++03.

Of course, if you're maintaining older code, then your point stands, and the learning curve would be rising because of the extra new features.

</comment></comment><comment><USER13> This is really helpful. I'm kind of thrown by the page about "final". The C++ example shows a method that is both virtual and final, which seem to be in contradiction of each other. Or am I missing something?

<comment><USER14> Yes, you are missing something, which is a bit of a quirk of C++. Normally, having two functions with the same signature in a parent and child class results in overloading.

      struct A
      {
          void f() {std::cout << "A";}
      };

      struct B : A
      {
          void f() {std::cout << "B";}
      };
      //.,...
      A a = B();
      B b = B();
      a.f();
      b.f();
      b.A::f();

This would print ABA, as the child's f() function simply hides the parent one when working in the context of B(), but it does not override it.

Now, what virtual does is it tells the compiler, "from here on out, resolve clashing signatures for this function in child classes by overriding. I'm sure you know how our example changes when you mark f() as virtual.

That's all old news, though. The more interesting bit, final, acts like so: from here on out, prevent overloading in child classes. Now, that only makes sense in the context of virtual, so that's the only place where you're allowed to use final, and here the actual difference to the first example becomes apparent. You see, final does not negate virtual, what it actually does is completely lock up the function signature from being used in any child classes. Adding virtual final to our example would not cause B's function to hide A's - it will simply not compile.

If you think that's all pointless semantics, you are absolutely right. Locking up names is not the point of "final". In fact, declaring something as virtual final in the base class is completely pointless from any practical standpoint. The actual problem that final is meant to solve is this:

As I mentioned earlier, virtual changes the way resolving names works in child classes forever. These two pieces of code are absolutely equivalent.

      struct A
      {
          virtual void f() {std::cout << "A";}
      };

      struct B : A
      {
          void f() {std::cout << "B";}
      };

And:

      struct A
      {
          virtual void f() {std::cout << "A";}
      };

      struct B : A
      {
         virtual void f() {std::cout << "B";}
      };

Therein lies an interesting dilemma. What if I wanted to prevent any child class of B, and only B, from changing the implementation of f. Under C++03, that is not possible. In C++11, final solves that.

But why go through the trouble of introducing a new keyword - and a keyword that is only a keyword in class and function declarations to boot (Holy context dependent grammar, Batman!) - and not just drop the virtual qualifier? Backwards compatibility - ever a dreaded thing when you wish you could undo your old mistakes.

It isn't all that big of a deal (said the C++ developer about every strange rule in the language, ever), though, since when you use "final" for the intended purpose, you won't actually be needing the virtual qualifier.

      struct A
      {
          virtual void f() {std::cout << "A";}
      };

      struct B : A
      {
          void f() final {std::cout << "B";}
      };

      struct C : B
      {
          void f(); //I'm afraid I can't let you do that.
      };

</comment></comment><comment><USER15> This is a great overview. However, in order to use the new C++11 features correctly and avoid pitfalls, one must dig a bit deeper. A good example is auto and decltype:

[http://thbecker.net/articles/auto_and_decltype/section_01.ht...](http://thbecker.net/articles/auto_and_decltype/section_01.html)

</comment><comment><USER16> I just have to thank my lucky stars i don't work with it. It's like they are trying to iterate a power saw into an aeroplane by gradually adding features while remaining backwards compatibility as a power saw.

Please hurry up and finish Rust, is all I can say to that.

<comment><USER17> I think it's a great update. Everyone already using C++ on a platform that has the required tooling (also considering libraries, IDEs) will benefit from updating.

Compare to that Python 2.x to Python 3.x. I have no interest in updating my XX kloc of Python code so that... unicode becomes cleaner?

</comment></comment><comment><USER18> The last slide:

          gcc (38/39) -- Not implemented: threads, regex

I think this is no longer true. I've some threads and regex code running well with gcc 4.7 and 4.8.

Anyone knows when was this presentation given? It doesn't have any date.

<comment><USER19> libstdc++ is still missing C++11-features. Regex and thread are still not complete: [http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#s...](http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x)

</comment></comment><comment><USER20> Very concise. Great!

</comment><comment><USER21> proposal: cpp.wikipedia.org - to categorize and store all the stuff cpp had and have.

</sarcasm></comment>


What to care about in a job - <AUTHOR> https://www.benkuhn.net/job2 <comment><USER2> Wrong question, wrong perspective. Even the very best jobs where everything seems to be perfect still have significant setbacks because of the nature of a job:

\- Employees suffer from one single dependency which can make their live miserable—their manager; just compare: Entrepreneurs should be independent and build as many options as possible (e.g. not just one client but many)

\- A job locks you in, means all side activities are forbidden or made complicated (because of IP, time, etc.) which again harms you because you are not able to build options outside the company

\- The urge to stay employable + get high compensations, means: seamless job transitions with no gaps, min 2 years at one job, steady growth re titles, headcount, responsibilities—all to show that you are a good hire and it doesn't matter if your current employer is a pile of s __* and you just have 7 months and need stay some more months

Getting jobs and being an employee has opportunities, it's easy for many in our industry to get 200K+ salaries but the price is high: reducing your options until you hit a depression.

<comment><USER3> > seamless job transitions with no gaps, min 2 years at one job, steady growth > re titles, headcount, responsibilities

> Getting jobs and being an employee has opportunities, it's easy for many in > our industry to get 200K+ salaries but the price is high: reducing your > options until you hit a depression.

This is not how it works in most of the EU, in particular DE/IT/AT/CH. There they value loyalty the most and they assume something is wrong with person changing an employer after couple of years. Frequent job hopping? Even worse. At some point one hits salary ceiling (70-80k EUR in some regions, 30-40k EUR in most of the EU) and that's it - changing job means the same salary or even lower with the risk the new place will be full of assholes and going through, humiliating at times for an experienced professional, vetting period as a new employee. Sometimes I wonder perhaps there is some non-competing agreement between companies? I have hard time understanding this deadlock situation.

<comment><USER4> I am not sure how well this generalises over the entire EU. My experience in the Netherlands is that job hopping occurs frequently and is a great way to get on a higher salary. However, I do agree that there is a salary cap around 70-80k for software engineers. If you want to earn more than that you either need to go into management or move to a better paying region (US/Ireland/UK).

<comment><USER5> Or go contracting. I've been contacted about 500-600 EUR/day contracts in Amsterdam. Not sure how common they are, but the option is there.

<comment><USER6> very common, also in Germany ([https://www.gulp.de/knowledge-base/17/iv/mehr- ist-mehr-3-pro...](https://www.gulp.de/knowledge-base/17/iv/mehr-ist- mehr-3-prognosen-zum-stundensatz-2018.html))

</comment></comment></comment></comment></comment><comment><USER7> I think one important factor to consider, that is not mentioned explicity in the post, is: Manager.

Your immediate manager can have a lot of impact on job satisfaction. A good manager would follow a bottom-up approach where he asks the team members what they need (time, equipment, etc.) and would try to get those things so that the team can succeed. This creates an overall higher job satisfaction.

An ineffective manager may enforce ridiculous deadlines coming from upper management on his team or hog all the credit of the good work done by the team or not be supportive which would lead to stressed, overworked, and unhappy work life.

<comment><USER3> > A good manager would follow a bottom-up approach where he asks the team > members what they need

> An ineffective manager may enforce ridiculous deadlines coming from upper > management

This is not how it works in modern workplace. In large companies the pressure mechanism is delegated to a whole group of employees in the same place in the hierarchy - POs, PMs, Scrum masters, various process lunatics. In case of problems they feed the line manager with negative feedback thus creating an image of bad team player, the line manager itself is a divine being rising concerns at most during friendly one-to-one conversations. Once it's clear you are not a good team player, it's better for everyone if you'll be let go. Ideally this process should be catalyzed during the trial period.

<comment><USER8> > In large companies...

You could have stopped right there. In large companies the politics have firmly taken their place at the top of everything. And if you don't enjoy politics, they are terrible places to work and you should avoid them like the plague.

<comment><USER3> There are too many places in Europe (e.g. Dublin, Prague, Warsaw, smaller cities with job market dominated by one company/industry) where local branches of global companies are the only viable places to work in.

<comment><USER9> My local home town (20,000) had several small software vendors 15 years ago, so not buying you on that one. I also then lived 30-45 minutes from a large town (might be called city in the US, 200,000+) which had tons of them. I now live in a city smaller than the ones you list, Nottingham, and work with 3 different local companies as clients, 2 of them are 5 minutes walk from me. And I haven't tried to get a new client for like 2 years. Our job market is "dominated" by global companies like Capital One and Equifax, but I personally know of a bunch of local software companies crying out for devs, who ask me every time I meet them at a meetup if I know anyone.

There are also tons of digital agencies these days in every locality, which employ lots of programmers.

On top of that, a lot of businesses now need software internally, whether these are shitty positions is entirely dependant on how good the company is.

A quick SO jobs search shows that Dublin has plenty of non global company jobs going. [https://stackoverflow.com/jobs?sort=i&l=Dublin&d=20&u=Miles](https://stackoverflow.com/jobs?sort=i&l=Dublin&d=20&u=Miles)

Within 10 seconds I find 2 Dublin founded companies looking for software devs in the last 2 weeks:

Datahug - [https://stackoverflow.com/jobs/144383/start-building-a- socia...](https://stackoverflow.com/jobs/144383/start-building-a-social-graph- product-datahug?so=i&pg=1&offset=5&l=Dublin&u=Miles&d=20)

EmydexLtd - [https://stackoverflow.com/jobs/companies/emydex- technology-l...](https://stackoverflow.com/jobs/companies/emydex-technology- ltd)

2 Dublin companies are on this month's who is hiring: [https://news.ycombinator.com/item?id=16282819](https://news.ycombinator.com/item?id=16282819)

Have you considered that it could be that you're not great at job hunting and networking?

<comment><USER3> > Have you considered that it could be that you're not great at job hunting

Among the few places I haven't yet applied to are Russian intelligence agency and South Pole Station.

> and networking?

Beat me to it. The best I'm able to do in this domain is arguing with strangers on the internet.

<comment><USER9> Honestly, it's just turning up to dev meetups for a year. A lot of local CEOs or CTOs will go to the meetups to try and meet new devs, as well as you meet a bunch of other devs and they'll never be resentful if you ask if there are any jobs going. Lots of companies do internal referral bonuses of a few hundred £/$/€ if an existing employee refers someone, so they're often keen to refer you!

I actually got my first client at the first meetup I ever attended with virtually the first words I said to anyone. I sat down next to someone and the conversation went, "Hi, I'm Matt, I'm a C# dev looking to start freelancing", "Oh, hi, I'm Jon, we need a C# freelancer".

Like I could list 5 local companies right now I know of off the top of my head that are always looking for devs and I personally haven't even been to a networking event for like 2 years.

I've had some great nights too, some long interesting chats. One that always sticks in my mind is someone who'd just setup his own ML cluster on AWS and him telling me all about Nick Bostrom's Superintelligence, which had just come out (wow, 4 years already). Or sometimes just having fun and a few drinks.

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> I particularly like the "anti-priorities" section. You can't optimise for everything, and it's refreshing to see someone be upfront about the things which they're prepared to let be sub-optimal.

Of course, it's important to read that section as "what _I_ don't prioritise", not "what _you_ shouldn't prioritise".

<comment><USER11> Yeah, I think everybody need to always think about what to say NO

</comment></comment><comment><USER12> Love the fact and the way that the topic presented. I find it hard to apply to other lines of work though, especially classic working class jobs and for example healthcare and teaching. How would you guys modify the list? I for one would rate the security much higher even tough I understand that it's not as important for everyone. For physically demanding jobs (practical nurses, nurses, construction workers etc.) I'd also rate long term health very high

<comment><USER13> Not hard to get a job in healthcare (at least where I love) so I wonder why you'd rate security so high.

<comment><USER12> It's not hard to get a job, by to get a job that you can be sure to still have tomorrow when you wake up is another cup of tea. Working on day to day contracts and filling in for ordinaries does not grant you and your family a stable income. The physically demanding aspect of nursing for example often lead to premature retirement due to injuries or worn out joints and backs. The security aspect for me reflects the ability to stay healthy and being able to continue working in the long run. It also reflects the need for a job that doesn't disappear over night or cease to exist - family matters you could say

</comment></comment></comment><comment><USER14> Are the problems that this company is trying to solve actually worth solving?

</comment><comment><USER15> Aren't we all just maintaining legacy code at some level?

</comment><comment><USER16> Do your perfect 100% just simple.</comment>


Ask HN: What books would you give a 16-year old interested in Math? - <AUTHOR>

My son is going to turn 16 in a week. He is a junior (11th grade) in a US High School, and loves math. He participates actively in various math competitions (AMC, ARML and the like), in which he does reasonably well if not at the top. He is taking Calculus now and would like to pursue math major in college.
I want to give him three (or more) math-related books as his birthday present, books that would inspire him, expand his mathematical thinking and introduce him to new concepts. I am also looking for books that won't exceed his current aptitude level too much, lest he might be turned off completely from reading the book. I realize it would be difficult to judge this without knowing him closely, but I hope the information I gave is adequate.
I am not new to HN, but I created a new account specifically to post this question, as I my son is also a HN reader and I don't want tip him off.
I have found a MathOverflow thread (http://mathoverflow.net/questions/8609/favorite-popular-math-book) which gives me some ideas, but I am looking for the collective wisdom of HN readers. Please bear with my indulgence. <comment><USER2> My son (an occasional Hacker News participant) was in a similar position a few years ago. I'll list here a variety of books that should be helpful, some of which were recommended to him by summer program instructors, and others of which were recommended to me by parents of other children with similar activity backgrounds.

For access to a lot of mathematical concepts at a reasonable reading level, not at all expensive, I recommend Concepts of Modern Mathematics by Ian Stewart.

[http://www.amazon.com/Concepts-Modern-Mathematics-Ian- Stewar...](http://www.amazon.com/Concepts-Modern-Mathematics-Ian- Stewart/dp/0486284247/)

Ian Stewart is a mathematician who loves to write popular writings on mathematics, and you can hardly go wrong with anything he has written.

From Zero to Infinity: What Makes Numbers Interesting by Constance Reid

[http://www.amazon.com/Zero-Infinity-Makes-Numbers- Interestin...](http://www.amazon.com/Zero-Infinity-Makes-Numbers- Interesting/dp/1568812736/)

is very accessible and covers a number of interesting topics.

The Art of Problem Solving by Richard Rusczyk and Sandor Lehoczky

[http://www.artofproblemsolving.com/Store/viewitem.php?item=p...](http://www.artofproblemsolving.com/Store/viewitem.php?item=ps:aops1)

[http://www.artofproblemsolving.com/Store/viewitem.php?item=p...](http://www.artofproblemsolving.com/Store/viewitem.php?item=ps:aops2)

is a straight-up contest preparation book, in two volumes, that your son may find interesting. Volume 2 is for high school level contests.

For an interesting (in places laugh-out-loud funny) book about the place of mathematics in modern life and how mathematicians think about mathematics, I recommend The Pleasures of Counting by T. W. Körner.

[http://www.amazon.com/Pleasures- Counting-T-246-rner/dp/05215...](http://www.amazon.com/Pleasures- Counting-T-246-rner/dp/0521568234)

This one is more challenging as to reading level and as to mathematical level than the recommendations above, but well worth having around the house.

</comment><comment><USER3> How about an e-reader and an account at library.nu, have him check out <http://www.khanacademy.org/> and <http://ocw.mit.edu/index.htm> too.

</comment><comment><USER4> Godel, Escher, and Bach

[http://www.amazon.com/G%C3%B6del-Escher-Bach-Eternal- Golden/...](http://www.amazon.com/G%C3%B6del-Escher-Bach-Eternal- Golden/dp/0465026567)

</comment><comment><USER5> When I was 16 I liked the Clifford Pickover books, such as Mazes for the Mind. They seem ridiculous now, but at the time I thought they were pretty cool and inspired me to major in math.

</comment><comment><USER6> GEB, Who Is Fourier?, The Little Schemer

</comment><comment><USER7> A book on linear algebra.

</comment><comment><USER8> "A tour of the calculus"

[http://www.amazon.com/Tour-Calculus-David- Berlinski/dp/06797...](http://www.amazon.com/Tour-Calculus-David- Berlinski/dp/0679747885)</comment>


Show HN: Embed PDF Viewing into Webpage - <AUTHOR> https://www.adobe.io/apis/documentcloud/dcsdk/viewsdk.html <comment><AUTHOR> There are several solutions today that will embed PDF viewing into a web page. But in many cases, users suffer from a fractured and inconsistent experience that often introduces confusion when opening new tabs. Often, those solutions do not even adhere to standards for rendering PDFs

So Adobe has published a View SDK that is based upon our Document Cloud platform.

The Adobe Document Cloud View SDK provides a significant benefit to display PDFs in an environment that you control natively. It's simple to use — only a few lines of JavaScript are all you need to get it done. And it delivers an "Adobe quality" reading experience that matches Acrobat rendering for text and font, graphics, images, and page objects. All of this is important for content owners to ensure their users are getting predictable experiences across all desktop and mobile devices for all major browsers.

The SDK allows the content owner to control how the PDF appears using pre- configured embed modes such as in-line, full window, or sized container. You can customize viewing experiences with commenting, print, download, and save functions for your PDFs.

Document Cloud View SDK also provides out-of-the-box integration with Adobe Analytics, so you can quickly gather insights and analytics on how your audience is engaging with the PDFs</comment>