CryEngine out on GitHub - <AUTHOR> https://github.com/CRYTEK-CRYENGINE/CRYENGINE <comment><USER2> This might be fun to look through; first thing I saw that I never thought of before was how to define flag enums.

From [https://github.com/CRYTEK- CRYENGINE/CRYENGINE/blob/release/C...](https://github.com/CRYTEK- CRYENGINE/CRYENGINE/blob/release/Code/CryEngine/Cry3DEngine/BreakableGlassRenderNode.cpp):

        // State flags
        enum EGlassRNState
        {
        	EGlassRNState_Initial     = 0,
        	EGlassRNState_Weakened    = 1 << 0,
        	EGlassRNState_Shattering  = 1 << 1,
        	EGlassRNState_Shattered   = 1 << 2,
        	EGlassRNState_ActiveFrags = 1 << 3
        };

Als a C# dev, I write Enum flags from time to time, but I always just write out the values; never thought of using bit-shifting to prevent typos :)

<comment><USER3> In the Go language, there is something called iota which is like a iterator that counts up from 0:

        type EGlassRNState int

        const (
            EGlassRNState_Initial EGlassRNState = 1 << iota
            EGlassRNState_Weakened
            EGlassRNState_Shattering
            EGlassRNState_Shattered
            EGlassRNState_ActiveFrags
        )

<comment><USER4> In python you could probably do

        def makeflag():
            flag = 1
            while True:
                yield flag
                flag = flag << 1
        flag = makeflag()
        E_GLASS_RN_STATE_INITIAL = next(flag)
        E_GLASS_RN_STATE_WEAKENED = next(flag)
        E_GLASS_RN_STATE_SHATTERING = next(flag)
        E_GLASS_RN_STATE_ACTIVE_FRAGS = next(flag)

        flag2 = makeflag()
        UNRELATED_FLAG = next(flag2)
        UNRELATED_FLAG = next(flag2)

Also no chance of fatfingering a number.

<comment><USER5> Another option is to assume at most 128 bits then do something like:

      >>> _bitflags = [1<<i for i in range(128)]
      >>> (E_GLASS_RN_STATE_INITIAL,
      ...  E_GLASS_RN_STATE_WEAKENED,
      ...  E_GLASS_RN_STATE_SHATTERING,
      ...  E_GLASS_RN_STATE_ACTIVE_FRAGS,
      ...  *rest) = _bitflags
      >>> E_GLASS_RN_STATE_ACTIVE_FRAGS
      8

</comment></comment></comment></comment><comment><USER6> Wow.

[https://github.com/CRYTEK- CRYENGINE/CRYENGINE/blob/release/C...](https://github.com/CRYTEK- CRYENGINE/CRYENGINE/blob/release/Code/CryEngine/CryPhysics/livingentity.cpp#L1300)

Intensity.

<comment><USER7> Carmack has some interesting comments on this sort of coding: [http://number- none.com/blow/john_carmack_on_inlined_code.htm...](http://number- none.com/blow/john_carmack_on_inlined_code.html)

<comment><USER8> Seeing Carmack's thoughts on programming always reminds me that I have such a long way to go. When he was my age, he had already created DOOM and DOOM 2 (along with the wtf? r_sqrt trick).

<comment><USER9> Fun story: both ID and Epic started out making 2D games. When Tim Sweeny saw Quake for the first time, he literally gave up on gamedev because he thought he wouldn't be able to keep up with game tech. But, shortly afterwards a friend of Tim wrote a Quake-like 3D renderer as a fun project. Tim figured if that guy could do it, he could do it and went on the make Unreal.

<comment><USER10> Is this true? There's leaked Unreal alpha stuff from 1995, which was already doing almost everything Quake's bsp renderer ended up doing.

<comment><USER11> One important insight into all of this is that, while there might not have been BSP renderers until 1995, the BSP rendering _algorithm_ was probably 10-20 years old at that point.

Another good example of this is the Phong shading model. IIRC it was invented in the mid-70s, and some software rasterizers implemented it, but it didn't really make its way into graphics cards with fixed pipeline rendering until the mid-90s.

Graphics tech in the 90s and even early 2000s involved a lot of hardware and software catching up to theory from the 70s and 80s because we were finally getting enough compute power to make it worthwhile to use "approximate" rasterization-based algorithms in order to get real-time rendering.

<comment><USER9> I had to dig up my source for this. I did misquote. It was Wolfenstein that gave Tim a shakeup and it drove him from coding to management, not out of games.

> Did you think about doing a first-person shooter after their success with > Wolfenstein 3D and Doom?

> TS: It was funny how we got to that point. When I saw Wolfenstein for the > first time, that was truly shocking. I'd never envisioned that you could do > 3D in a computer game; I don't know why.

> The research had indicated that you could do that for at least 15 years > before that, but it was this 3D game with real-time texture mapping; you > know, real-time bitmaps scaled up and displayed in 3D on the screen. It > never occurred to me that you could actually write code to do that. It was > just another lack of foresight there.

> But seeing that for the first time, I was like, "Wow, I'm totally not > worthy. I need to get out of programming now, because I'm never going to be > able to compete with this." So they just basically demoralized me into > becoming a manager for a few years.

> Around 1994, James Schmalz had written this 3D texture-mapping code, and I > was starting to think, "Hmm, maybe that's not so hard." So I started reading > up on references there and experimenting with it, and it turns out that, > yeah, it's just another piece of code that you can learn how to create.

[http://www.gamasutra.com/view/feature/4035/from_the_past_to_...](http://www.gamasutra.com/view/feature/4035/from_the_past_to_the_future_tim_.php?print=1)

<comment><USER11> Yup, in hindsight it's interesting because the key innovation was realizing that real-time 3D was possible.

The algorithms themselves (like 3D texture-mapping) are college third year problem set level difficulty to actually implement, but having the curiosity, courage, and ambition to be the first to do it real-time is huge!

The algorithms used in today's 3-d game engines are definitely more complex than something I'd expect a college student to do, but the state of the art has also progressed substantially since the 90's.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><AUTHOR> I'm one of the developers of CryEngine, so if there's any questions, we are watching :)

<comment><USER12> Did you lose the source code at some point? Because it looks like the output of a decompiler.

<comment><AUTHOR> Haha, definitely not. Which part looks like that?

</comment></comment></comment><comment><USER13> What caught my eye immediately is their licence agreement that prohibits using the engine to develop, quoting "Serious games". That's a rather vague and broad statement, what's a serious game?

<comment> vertex-four 1.10. "Serious Games", i.e. 'games' which are not developed for the sole purpose of entertainment but for purposes training, simulation, science, architecture etc.

<comment><USER14> How is 'purpose' a legal term? What is the purpose of a game? To milk money from fans? To obey to some company's internal schedule? To entertain..... review sites? To entertain me? To showcase technology? To insert subliminal messages and DRM? All of the above? None?

What was the purpose of tamagotchis?

We may never know.

<comment><USER15> From what I've seen, courts are frequently asked to answer questions just like this one. They do not seem to be as troubled by slippery slopes because it's their job to decide where the line is.

If you're a student using CryEngine you're probably not worth suing for copyright infringement (at worst a C&D maybe). If you're a corporate entity who is distributing a game which licenses CryEngine, you certainly may be worth suing for infringement.

<comment><USER16> Which subsection restricts a corporate entity from distributing a game built on CryEngine?

There are restrictions on Serious Games, but amusingly a Serious Game isn't a game.

<comment><USER17> I disagree, re: serious game. It's why we have the term gamification. Taking something mundane and making it, for my lack of a better term, gamey.

I'm thinking of things like Starfighters.

</comment></comment></comment></comment></comment></comment><comment><USER18> I really wish Epic and/or CryTek would release their engines under a strong copyleft license such as AGPL, with the option to purchase a proprietary license for developers who do not want to release their games as free software. This would allow developers of free (as in freedom) games to use the engine while also allowing the company behind the engine to make money.

<comment><USER19> That would be great, but both Epic and Crytek have no reason to do that. Releasing under copyleft would mean there will be forks with changes they can't use for their proprietary branch.

They of course have no reason to use permissive licensing too since that would mean someone else can make money off it.

<comment><USER20> The x264 library is GPL (i.e. not LGPL). To use it in a closed-source product you can pay for an interesting kind of commercial license, the terms of which are you /must/ submit your changes upstream (privately). The upstream can choose to accept anything that's possibly useful, and will reject anything that was application-specific.

<comment><USER19> I have no idea if this business model work for x264, but I sure it's work for Qt and few other open projects.

Unfortunately companies that developing game engines not going to benefit from copyleft licensing since there is no demand for GPL from real game developers. After all there is very few open source games around and only bunch of them aren't clone of something else. Probably none of these projects ever going to need anything as complex as CryEngine: there is enough of good open source engines for indie games.

So if they release engine as GPL they simply won't get any more developers in community. At best there will be few incompatible forks made by developers who only want to release changes under GPL.

PS: So just keep in mind that in case of CryEngine "source available" offer appear because it's only way to compete with other commercial engines and make money. They intentionaly keep it proprietary instead of going open source since it's better for their business.

</comment></comment></comment></comment><comment><USER21> This is quite powerful for some: [https://github.com/CRYTEK- CRYENGINE/CRYENGINE/blob/release/E...](https://github.com/CRYTEK- CRYENGINE/CRYENGINE/blob/release/Editor/Python/Lib/antigravity.py)

<comment><USER22> Looks like they've included the entire python stdlib, which that file is part of.

<comment><USER23> But it also looks like they forgot to include the license, which is required:

[https://wiki.python.org/moin/PythonSoftwareFoundationLicense...](https://wiki.python.org/moin/PythonSoftwareFoundationLicenseFaq#If_I_bundle_Python_with_my_application.2C_what_do_I_need_to_include_in_my_software_and.2For_printed_documentation.3F)

(I Am Not A Lawyer, and all that.)

</comment></comment></comment><comment><USER24> Doesn't have issue tracker so can't ask them directly. Hoping they will see it here.

I think that instead of just linking to the license, they should include a copy of it in the root of the repository and refer to that. It is the proper way to do it.

<comment><AUTHOR> Just sent this comment to the right people, thanks! :)

<comment><USER24> Thank you too :)

</comment></comment></comment><comment><USER25> Ah man, I was curious to take a look at the early development history of this, but seems like they didn't push the full history of the engine :(

</comment><comment><USER26> It's been about a year since I tried cryengine last, but I have experienced nothing but pain with it, functionality wise, not to mention the lack of dev response to the users and the other drama surrounding the company behind it, I am going to continue to steer clear of it, especially with such restrictive terms.

To me, this is a halfhearted attempt to catch up with Epic and Unreal Engine 4, which has really shown the market how to do things right. I actually look forward to engine updates with UE4, not to mention the increasingly better marketplace content. Also, I am hoping to eventually move over to devving completely on linux...

unity and CryEngine are feeling the hurt, ans struggling to respond.

<comment><USER27> > To me, this is a halfhearted attempt to catch up with Epic and Unreal Engine > 4

I do rather think it's a last desperate attempt to get it out before crytek is going bankrupt.

</comment></comment><comment><USER28> Unreal makes you 'attach' your account to their repo so they know who has had access to the source code. I'm surprised CryEngine just releases it in its entirety without any such 'protections'.

The coding style is very Microsoft-like, which is I suppose not a big surprise given it's DirectX roots. 8-space tabs seems to be the convention (ugh). They use XML for their readable format (which explains a little their slow load times).

The code itself is not very well documented but relatively clear to understand. Overall not a bad engine to learn a few things from but if you're new to Game Engines a lot of stuff will probably seem very complex (check out BreakableManager.cpp).

It's no Quake 3 in elegance but it's got a lot of advanced functionality (especially in the editor). Overall, it's pretty awesome that they released this. Its a huge gift to everyone that is curious what a world class game engine that has shipped a ton of AAA games looks like.

<comment><USER19> > The coding style is very Microsoft-like, which is I suppose not a big > surprise given it's DirectX roots.

Just in case first CryEngine and early versions of CryEngine 2 had OpenGL renderers, but code style was pretty much the same.

</comment></comment><comment><USER29> What do the !XT, !B, !U etc. mean in the commit messages?

<comment><AUTHOR> Internal codes to know what the check in is about: bug, feature, update, etc.

</comment></comment><comment><USER30> So .. why would anybody care about Amazon's Lumberyard now that this exists?

<comment><USER31> No serious game developer should care about Amazon Lumberyard in the first place, other than informationally.

Lumberyard is an immense lock in to the amazon stack with a lot of small print, a huge risk if you believe your game to be worth anything.

<comment><USER32> Apparently developers of serious games shouldn't care about cryengine eighter. ;)

<comment><USER31> What are you talking about?

CryEngine has (had?) fairly bad licensing terms overall but they're working on them (this OSS strategy is likely part of that) and they are _nothing_ like the Lumberyard terms which essentially buy out your soul.

> _57.4 Operating Restrictions. Without our prior written consent, (a) the > Lumberyard Materials (including any permitted modifications and derivatives) > may only be run on computer equipment owned and operated by you or your End > Users, or on AWS Services, and may not be run on any Alternate Web Service > and (b) your Lumberyard Project may not read data from or write data to any > Alternate Web Service._

<comment><USER32> I am talking about "serious games", because you aren't allow to develop them professionally with cryengine without written consent. It was a word play to your "serious game developer".

<comment><USER31> Haha woops, completely missed that.

</comment></comment></comment></comment></comment></comment><comment><USER33> 2.4. Restrictions on Use: Crytek reserves all rights not expressively granted in this Agreement. Without limitation, Licensee shall not:

distribute, sublicense or exploit in any other form: the CryEngine (except for the Redistributables), e.g. as a stand-alone development engine; the CryEngine Documentation; the CryEngine Tools; use the CryEngine for the development of any product other than Games, including without limitation: military projects gambling; simulation (technical, scientific, other); science; architecture; pornography; Serious Games.

Serious Games? did lawyers actually even read this?

<comment><USER34> A cursory Wikipedia search would yield an explanation:

"A serious game or applied game is a game designed for a primary purpose other than pure entertainment. The 'serious' adjective is generally prepended to refer to products used by industries like defense, education, scientific exploration, health care, emergency management, city planning, engineering, and politics."

</comment></comment><comment><USER35> What I like and what I'd like to understand better from a price economics view is their "Pay what you want" model; on the following link you see the page where the user can decide which amount he likes to pay (€0, €10, €25, ...):

[https://www.cryengine.com/get-cryengine](https://www.cryengine.com/get- cryengine)

I am just wondering how the distribution is, so how many pay 0, how many 10 etc.?

Could imagine that this pricing could lead to higher total revenues than the classical three-prices-page.

</comment><comment><USER36> It would be nice if the README mentioned what CryEngine is.

(By visiting [https://www.cryengine.com/](https://www.cryengine.com/), I found out that it's a game development platform.)

</comment><comment><USER37> Hasn't that been there for quite a while?

<comment><AUTHOR> For the past couple of months you could get it from the website as a .zip file, but now it's source controlled properly in GitHub and connected internally to Perforce.

<comment><USER37> I see, thanks for the clarification.

</comment></comment></comment><comment><USER38> It would be great if the great hobbyist talent out there can also push to further optimize the CryEngine. From what I've experienced, the engine performs well, you just need to put a lot of hardware behind it.

</comment><comment><USER39> Wow, that's quite the restrictive license they got out there. Just about the only thing that's allowed is looking at the source code. You can't modify or redistribute, definitely not sell, and there are tons of restrictions on how to use it:

[https://www.cryengine.com/ce-terms](https://www.cryengine.com/ce-terms)

<comment><USER40> Modify you can:

 _2.1. Grant: Subject to strict and continuous compliance with the restrictions of this Agreement Crytek grants to Licensee a non-exclusive, non- transferable, non-assignable, non-sublicensable, limited license (the "License") only:

[...]

2.1.2. to develop, maintain, extend and/or enhance CryEngine pursuant to the CryEngine Documentation;_

<comment><USER39> Yeah, that's a big restriction on modification. You can only modify it in the ways that they document that you can modify it?

<comment><USER40> Hm, you are right, I didn't read that right the first time round. Really depends on what that documentation looks like I guess.

</comment></comment></comment></comment><comment><USER41> My 2c, but its too little too late. Unreal and Unity are the big boys fighting for game developers, especially indie game developers.

</comment><comment><USER42> It's like the release of the source code of Doom and Duke Nukem 3D. We're getting old.

</comment><comment><USER43> Does anyone how the complexity of setting up a multiplayer session stacks up against unity?

</comment><comment><USER44> This is the kind of thing you git clone just in case it winds up being an accident.

</comment><comment><USER45> Is it purely header files and this is commonplace at game studios that use C++?

Edit: What I mean is that the implementation of C++ classes seems to be in header files and I'm wondering if this is a common way to do things at game studios.

Found cpp files, but it's interesting that so much of the class implementations are directly in the headers.

<comment><AUTHOR> It's the full source code, so headers and code

<comment><USER46> Could you comment on why there are lots of (non-templated) function definitions in the headers? Looking at it, it doesn't actually look like there is that much, from the two random files I opened. In the first random file I opened[0] I didn't really understand why some of the functions (see link) were defined in the header.

In another file[1] it seemed to make more sense (getters and setters, along with a smallish class where I guess you didn't want to bother making a new file).

[EDIT] Could I also ask why you have defined some very large classes entirely in the cpp files[2]

Also, thanks for this, very interesting to read the source for other large projects.

[0] [https://github.com/CRYTEK- CRYENGINE/CRYENGINE/blob/63418e7c9...](https://github.com/CRYTEK- CRYENGINE/CRYENGINE/blob/63418e7c9e998272ba79c4a6693f61c382f88e15/Code/CryEngine/Cry3DEngine/3DEngineMemory.h#L53)

[1] [https://github.com/CRYTEK- CRYENGINE/CRYENGINE/blob/63418e7c9...](https://github.com/CRYTEK- CRYENGINE/CRYENGINE/blob/63418e7c9e998272ba79c4a6693f61c382f88e15/Code/CryEngine/Cry3DEngine/3dEngine.h)

[2] [https://github.com/CRYTEK- CRYENGINE/CRYENGINE/blob/63418e7c9...](https://github.com/CRYTEK- CRYENGINE/CRYENGINE/blob/63418e7c9e998272ba79c4a6693f61c382f88e15/Code/CryEngine/Cry3DEngine/3DEngineRender.cpp#L71)

<comment><USER11> There are a few reasons you would do this in CPP, though I'm not sure whether they apply to this case.

You might put function definitions in headers to (1) avoid linking a library (2) explicitly declare a function as inline, maybe (3) it's simple enough that you don't lose readability by inlining it.

The one about putting large classes entirely in CPP files: I wouldn't do it this way for readability reasons, but putting it in the CPP file directly does restrict anybody else from using what is supposed to be a one-off helper class. I think that's the intent here.

</comment></comment></comment></comment><comment><USER47> This is very hearsay-ish, but I have a friend of a friend who had to work with the CryEngine (I think it was for one of those Sonic games) and it was described as so incredibly buggy and you have to debug it constantly.

Maybe this is their attempt to have the community fix it for them =)

</comment><comment><USER48> Nice. I hope Vulkan support will arrive soon too.

</comment><comment><USER49> I wish the README said what CryEngine is. What is CryEngine?

<comment><USER50> I wish people didn't need hand-holding to tell them where to look for answers, but then lmgtfy.com became a prominent linking tool.

<comment><USER49> Thanks for the reply. I certainly know where I can get such information, but I think a project's README is a great place to have at least a single sentence explaining what the project is. Moreover, I suspected other HN readers may also not know what it is offhand and would find a quick summary in a comment here (such as the other reply above) useful so that each person doesn't need to perform the extra step to Google it.</comment></comment></comment>


The Gift of Privacy - <AUTHOR> https://www.privateinternetaccess.com/blog/2013/11/the-gift-of-privacy/

<comment><USER2> I'd love to more about how gift cards in general work. Is it like a numbered swiss bank account where when you buy a card and the account number/password under the scratch-off on the back is your only access?

Clearly there are multiple gift card networks, but how does a company go about getting a card setup for their brand/product? And how would a business like PIA be allowed to use other brand's cards? The idea of a gift card being a deposit would make sense in this case.

<comment><USER3> PayGarden processes the gift cards for them.

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

<comment><USER2> I saw the reference to PayGarden, but I was curious how it worked on a technical level.

</comment></comment></comment><comment><USER4> I like the concept. More for the consumer than anything else. I didn't try the demo, but it would be neat to be able to post multiple cards for a transaction.

Is there mention of the cost to the merchant and or consumer? I looked, but did not see it in the expected places. Also how the merchant receives the funds would good to know. Apologies if it's in there and I did not see.

</comment><comment><USER5> OK, thanks for the HNvertisement. That's actually nice, but how do we know that you won't roll over when $govt asks for logs?

<comment><USER6> [http://arstechnica.com/tech-policy/2013/10/how-one-small- ame...](http://arstechnica.com/tech-policy/2013/10/how-one-small-american-vpn- company-is-trying-to-stand-up-for-privacy/) is a good overview of the company. IMHO it is unlikely you'll get better than that inside the US.

</comment></comment><comment><USER7> It's silly to use a US company and expect privacy. Expect that PIA is backdoored out the wazoo and avoid them entirely.

<comment><USER8> Please tell me about these other countries that respect your privacy. I'm all ears.

<comment><USER7> Seychilles, Croatia, Iceland, Ecuador. Are you a shill or just ignorant?</comment></comment></comment>


Making remote work work: An adventure in time and space - <AUTHOR> http://blog.mongohq.com/making-remote-work-work-an-adventure-in-time-and-space/

<comment><USER2> The hardest part about working remotely is convincing the non-remote developers to stay engaged. When everyone is in the same office except for one or two people things can fall apart. Hallway chats happen over coffee, decisions get made offline and things start to happen without keeping the remote people in the loop.

I like the idea of encouraging people in the office to, "work as if you're not here." The advantages will add up over time and not just for remote people: you'll have databases and logs of everything! Throw search engines on it, watch trends evolve and use it to be more productive!

<comment><USER3> There is the flip side of it too. This networking effect of having developer hanging around the business people and sales is also the added value of those developers.

As one of my manager put it, why would I hire a remote worker in the UK when we can just add more people to our office in Poland. ( Polish dev are just as good, well qualified and hard to find but they are cheaper )

To me "work as if you're not there" is just volunteering to prove your job can be outsourced.

<comment><USER4> > This networking effect of having developer hanging around the business > people and sales is also the added value of those developers.

At my last on-site position (now I'm contracting remotely) the dev team was originally going to be in another city (London) from the rest of the company (minor EU capital), however because of this reason it was decided we should all be together. I rarely saw the advantages of this, or felt value from being around the business folks. Most decisions were made in hallway chats and we were kept out of the loop, except when something 'super urgent' needed to be changed and a PM walked over and grabbed someone. Disadvantages were apparent, as it was a lot harder to find decent Rails developers compared to London.

</comment></comment></comment><comment><USER5> There's a fun activity that makes the remote work day feel like a game. I call it "platforming," as in jumping from platform to platform.

Travel to an uncharted area of your city and bring your laptop. Set about 10-20 concrete objectives for the day. Each time you complete 5 objectives, you get to transition to a new place such as a coffee shop (or anywhere with WiFi).

This segments the day and makes it feel a little more structured, not to mention fun.

<comment><USER4> That's a pretty nice idea. I like exploring new places when I can (I usually work from a village in the middle of nowhere), so try to find a new place each day.

The only issue is getting coffee, settling in, then finding the wifi doesn't work >_<

</comment></comment><comment><USER6> I just recently started at MongoHQ and have found the experience really interesting and wanted to share a few observations.

\- Remote work makes a company more transparent. The documentation and writing that makes remote work possible has an interesting side effect of giving insight into all corners of an organization. While this might not be desired in some organizations, I think it empowers individuals to get a sense of the overall company goals and health and make the best decision of how to use their time.

\- Remote work breeds trust. Instead of getting the trickle of information from closed door management meetings, you get a log of what is happening and a sense of what decisions are to be made and the implications.

\- Remote only works if everyone is on board. I have been at organizations that tried to make remote possible, but it never quite worked as some groups refused to monitor the central chat for fear of it taking too much time. You do really need everyone on the same channels and using the same tools to maintain the level of communication required to make remote work.

</comment><comment><USER7> > We have an apartment near our San Mateo office that anyone can use when > they're in town. People tend to travel to San Mateo about once every 6 > weeks on average.

This is one of the most important parts of the post IMHO. You have to see people _at some point_ even if they work remotely or work occasionally from home. It's particularly helpful to coordinate travel schedules to get as many people in the office at one time no matter how small or large the company is.

</comment><comment><USER8> Working remotely can be hard. Tools like the sqwiggle, google hangouts, doubles, hipchat all help.

The most important thing though is having the culture that includes remove workers in the day to day conversations. The water-cooler is where a lot of magic happens, and that's the first thing that you miss if your corporate culture doesn't embrace remoteness.

<comment><USER9> I do pair programming with my brother and we used Skype for face video and VNC for remote screen. Skype has audio problems (noise cancelling is bad) and VNC requires an external routable IP to let anyone connect and that is not possible in all situations. I found other tools, such as TeamViewer but they slow down my desktop considerably.

What tools are best for remote screen + cam video on an IP behind DHCP?

<comment><USER10> Have you ever tried Screen Hero? We use that from time to time here and it works nicely.

<comment><USER8> screenhero is great too, no video, but it has voice

</comment></comment></comment></comment><comment><USER11> Remote work works great in the early days when everyone has their head buried deep in code and most of the team is scattered around the globe. But let's not forget how we homosapiens evolved - via collaborative face to face group interaction. It's like Facebook wont replace the real human touch component of building friendships and staying connected. Remote work will not be the shape of work to come.

When the team starts to expand you need human interaction. People need to engage in debates, intense debates that spark creativity and get to feel the energy in the room. That energy is the driving force which aligns everyone for the same common mission. Quarterly team assemblies are always great, as we revive the power of being in touch on a human level. Not 1s and 0s.

Cloud tools are great to exchange information but not to grow a company, culture and keep the fire fueled for a very long time. There are exceptions (outliers) but let's not use those since we know that to draw conclusions from data we need statistically significant sample of data.

Saying this, work environments are changing and need to change to allow a piece of isolation (just like meditation provides) and a piece of connection (that human component). All wrapped up in a flexible schedule so employees do not feel like prisoners.

<comment><USER2> As I get older I tend to be more selective of who I would like to share my time with. I'd rather make connections with my family and friends than my co- workers. For me it's just a job. It's not summer camp.

I'm certain creativity and collaboration don't require any phantom energy in a room of people to happen. The majority of people who build open source software have never met. And in projects like Apache, OpenStack, Mozilla and what-not there are thousands of contributors at every level.

I contribute to projects with people whom I've only talked with on IRC and through commit logs and code reviews. It hasn't stopped any of us.

I think you're mistaken that there is some evolutionary heritage that requires us to be in person in order to effectively collaborate.

<comment><USER11> Yap because in those projects one works best in isolation. Growing a company is a lot different.

Have you read this? The Lethality of Loneliness - We now know how it can ravage our body and brain [http://www.newrepublic.com/article/113176/science- loneliness...](http://www.newrepublic.com/article/113176/science-loneliness- how-isolation-can-kill-you)

<comment><USER12> I'm not sure your link is relevant to him as he said he does not want to see too much his colleagues so he can see more his family and his friends. Therefore, he is not alone.

<comment><USER2> You're right on the button. I spend more _quality_ time with people who have a meaningful impact on my life. It isn't a lonely life. I feel much more enriched by having the privilege and opportunity to be so selective.

Growing up I know my parents were forced to work and commute by necessity. They made friends at work because those were the people they were forced to spend their most time with and that's what most people do in that situation. It's not useful or necessary and it takes away from the time they could have spent with their real friends and family.

I'm friendly and professional with my co-workers. We get along. However at the end of the day our relationship is ephemeral in the grand scheme of life. In a few years they or I will leave the company and it's not like we're going to be sitting on the porch together when we're 80 and remembering, "the good old days." (Outliers not withstanding).

</comment></comment></comment></comment></comment><comment><USER13> This is great news and it's a sign that this company looks into the future. Working remotely isn't just about the place where you work. It's a sign of trust that leads to higher productivity and engagement. Kudos

</comment><comment><USER14> Working remote for a while now, first 10km away from the office (so, hopping in was always possible), now ~70~ km away (still easy, but I'm not there in a moment and actively try to discourage on-site meetings).

I have to agree with the article about possible distractions at home. Got a 1.x year old son, will have a daughter in < 30 days. I'm confident that I'm doing a good job, I really prefer working without the (especially in our company culture) regular interruptions in the office. But .. family and home office needs really strict rules _and_ the right environment.

We moved 11/13 for the most part to give me a room that is isolated from the daily noise of a family. If you're having a family and consider remote work: It is possible, but you need to make sure that your SO is on board and you need to expect some downtime while you're trying to adapt. I think it's totally doable, but anything but easy.

</comment><comment><USER15> One of the best things weve done to help with the water cooler problem was to have a group im chat (hipchat). we try to avoid private im whenever possible. This means that not only is it easy to see what others are talking about, you can read it over after.the fact if youre busy.

<comment><USER10> Indeed ... Hipchat has proven to be a great way for our teams to communicate. Also, it creates a nice log of conversations for historical reference.

Secondly, Hipchat is a great central posting ground for all your apps, both internal and external services. The same apps that we have created to increase internal transparency on work being done are set to be relatively spammy in Hipchat, which allows the team to receive passive updates on activity with no extra work from individual team members.

Works nicely.

</comment></comment><comment><USER16> I think the Hackpad page/read ahead/agenda which becomes the meeting notes are a terrific way to collaborate when everyone is connected to a screen.

Has anyone used any Enterprise-wide tools like this? We've got stuff we absolutely must keep inside the firewall.

<comment><USER17> Our tool Sococo (I work there) works audio/video P2P so it all can stay inside the firewall.

But chat is generally aggregated/federated so ends up on an encrypted server in the cloud. That can be an issue to fix; either its saved on everyone's own machine (and not your pad at home when you want it later), or its on a server and theoretically 'at risk'.

<comment><USER18> What OS/platforms does your product support? is it web-based? couldn't find these answers on the site. thanks

<comment><USER17> Supports Mac, iPad, iPhone, WinXp/Vista/7/8\. We run it on Linux but only in the datacenter as a 'media node', we couldn't settle on a presentation layer.

Also we've ported it to Android pucks for conference room stations, but not selling that - no deal with a vendor yet.

There's a web client, but the audio situation there is fragmented so now (sigh) you have to call in. Its OK if you're just attending a meeting but less tolerable for all-day use.

</comment></comment></comment></comment><comment><USER19> I agree that the commute creates a healthy firewall between work and personal life, this is why I recommend remote workers to find a coworking space to commute to.

Not only you get a clean separation between "home" and "office", but you also can socialize and have colleagues to go with to lunch. And you still have all the advantages of remote, because if you feel like working from home rather than the coworking space one day (or from a different country for a few weeks) it doesn't make any difference for the people you work with.

<comment><USER20> Interestingly, I consider the lack of such a firewall to be one of the benefits of working from home. If I am having trouble getting into the swing of work during the day, I can go play with my dog. If I'm thinking late at night about a problem from work and have an idea, I can go try it... no need to setup the computer because it's exactly how I left it earlier.

</comment></comment><comment><USER21> Congrats to MongoHQ for being bold enough to head in this direction

</comment><comment><USER22> I've been working remotely for 2 years in Barcelona with the main office being in NYC. The 6 hours I have for myself before people wake up in NYC are incredibly focused and productive and I have 3 hours of overlap for meetings and catchup which seems to be working out quite well.

One important thing is to reach out and chat with people on a daily basis to avoid feeling isolated and also of course visit in person once in a while to have a bit of face time.

</comment><comment><USER23> Are there any good resources on the legal and tax issues related to being a US based startup having remote workers overseas (say, the UK or Japan?). I've heard this can be a pain.</comment>


Microsoft 2017 event lineup - <AUTHOR> http://blogs.microsoft.com/blog/2016/12/07/microsoft-2017-event-line/ <comment><USER2> love tech events and how technical they go. Anyone know the organizers of the event? I built a product that helps event-goers find places to sleep around the venue through a widget. Would be cool to get it out there with big events! Here's a few examples: [http://www.tractionconf.io/accommodations](http://www.tractionconf.io/accommodations) [http://en.esl- one.com/csgo/cologne-2017/information/#stay22-...](http://en.esl- one.com/csgo/cologne-2017/information/#stay22-widget)</comment>


What ISIS Really Wants - <AUTHOR> http://www.theatlantic.com/magazine/archive/2015/03/what-isis-really-wants/384980/?single_page=true <comment><USER2> This article explains so much. It is fascinating.

It seems difficult to find a potent ideological hack that would tarnish isis. Such an elegant solution would save so many lives though.

</comment><comment><USER3> link to frontline documentary [http://www.pbs.org/wgbh/pages/frontline/rise- of-isis/](http://www.pbs.org/wgbh/pages/frontline/rise-of-isis/)</comment>


This Fireplace video (netflix) makes me smile. Simple, yet demanded. - <AUTHOR> https://movies.netflix.com/WiMovie/Fireplace_for_Your_Home/70222873?locale=en-US

<comment><USER2> This is actually one of netflix's better movies. Better content is years away.

<comment><AUTHOR> Hah!</comment></comment>


ReactJS vs. AngularJS - <AUTHOR> http://freezeprosoftware.com/news/reactjs-vs-angularjs.aspx#.V4S5GJN97pA <comment><USER2> From the giant table-as-JPG:

        | metric | AngularJS | React |
        |</comment><comment>--|</comment><comment>-----|</comment><comment>-|
        | speed* |    1.35s  | 310ms |

-* "based on loading 1500 rows [according to some 2014 blogpost]

Also, the OP recommends AngularJS for "Experienced developers and coders", while React is for "Casual developers and designers"

edit:

The narrative text is not much better. This sounds like something generated by a Markov chain:

> _I'll just mention that "one-way binding" in AngularJS 2.x and in ReactJS > isn't the same thing. The binding mechanism is completely different. It > provides wider functionality in AngularJS 2.x compared to ReactJS. We'll > have to wait and see how it works in AngularJS 2.x. In ReactJS, the one way > rendering flow is very straightforward, fast and easy to understand, debug > and trace in comparison to "two-way binding" implemented in AngularJS 1.x._

<comment><USER3> >Also, the OP recommends AngularJS for "Experienced developers and coders", while React is for "Casual developers and designers"

Yea, I'd like the author to explain why.

<comment><USER4> He's trying to force a narrative, likely to justify his own personal choices of technology.

</comment></comment></comment><comment><USER5> While I'm totally pro-React for my own development projects, I appreciate the fact that Angular 2 comes will a full set of predefined practices, so that people who work with in are more "interchangeable" than in case of React. If two different developers write a project in React, the project will likely have very different sets of libraries and approaches. With Angular 2, it's the opposite: two different developers will write their Angular 2 projects more or less the same way. This can be valuable in enterprise environment.

<comment><USER6> Yes, I think this is what will make Angular 2 win out over the long run. Unless an ubiquitous React bundle comes along to solve that problem with the React ecosystem.

It's just so much easier to build large projects when the framework solves common problem for you in an opinionated way. Saves a whole lot of arguing among developers and reduces the need for education when transferring between projects.

<comment><USER5> Considering my arguments above, I can conclude that React and Angular 2 have niches that only moderately intersect, so it's not going to be a single winner out there.

</comment></comment></comment><comment><USER7> I don't think I've seen an article on this subject with more misinformation. How is this even on the front page?

<comment><USER8> It is weird - and the recommendation of using angular for model/controller and react for the view is more peculiar - how would that work?

<comment><USER7> I mean, I'm sure it's possible... but definitely not recommended.

</comment></comment></comment><comment><USER9> Every time I've noticed I'm on a page using Angular or React the experience feels terrible. Like there are 100 different unnecessary things going on in the background. Though to be fair these are only the times I've noticed I'm on a page using one.

Every time I've tried to pick up and learn Angular or React or etc, I've gotten the impression that it is wildly over engineered and ultimately just bloat. Like if I tried to do something with it, there would be 100 different unnecessary things going on in the background.

I've been happily and successfully building javascript heavy apps for the client side which work very well and are quite functional without the need for a giant framework. I never feel this way about the server, on the server frameworks seem elegant.

Why is it as soon as I move client side I'm overcome with the feeling it is over engineered? My theory is that none of these things are even necessary there.

<comment><USER10> Wow I never thought I'll see someone else with my same concern. I really hate using too much third-party code (to the point that I need a generator just to start), and I like knowing what each and every file in my project is for/does.

I would really appreciate it if you'd share the application structure you use when building a client side MVC with vanilla JS/Jquery.

I know there wouldn't be a single structure to rule them all, but I think if developers start sharing structures that work regardless of frameworks used, it would be much better than sharing frameworks that are very complex and get replaced every year.

<comment><USER9> I create a separate file for each concern, and I dump them into the same directory together. If the files list become significantly long I separate them into subfolders of more general concerns. For example a folder for everything to do with "recording" functionality.

Views are very simple. There is generally a class instance which is using a DOM element somewhere. So I store a reference to that element on the instance. Then I have a simple object containing references to all of the important elements within it. I have a function which generates the element if it hasn't been created yet and adds it to the page. Now I can change whatever I want to about the element or any important elements within it. I use classes like "is- hidden."

Sometimes I'll decouple the UI from it's functionality. In which case I usually implement a simple eventer system on the underlying code which the UI connects to for status updates.

Bingo bango. I haven't run into a circumstance yet where any one file was longer than maybe 200-300 lines total. It's simple to read, it does anything I want.

I have never needed to construct anything client side that warranted laying it out like a server implementation. But maybe that's my issue, I'm thinking too small and other people have a better idea of what the future of the web looks like than me.

I still prefer having control.

</comment></comment></comment><comment><USER11> The article seems to be biased in favour of Angular.

The option of using any flavour of JS or compiles-to-JS is presented as a negative for React, compared to Angular's decision to go all in on Typescript. I would say that being able to stick with standard JS, for varying values of "standard", is a good thing for library developers and very large corporate teams. Having options like Elm or Clojurescript are good for small teams or individuals who are looking for some advantage over their larger competitors, such as a higher chance of building a correct system on the first try, or being able to build faster than me to a smaller, more expressive codebase. It was this line of reasoning that led me away from JQuery back when everyone seemed to think JS = JQ. When I made the jump to Clojure/script, I scored an auto generated Swagger interface for the back end, which saved a ton of effort on documentation and Q&A, and the test suite has stayed very simple and small - I ended up not needing anything like Sinon's mocks and spies.

The infographic suggests that because Angular tries to take on larger role in an MVC framework, the complexity that resulted from that decision makes it better suited for advanced developers. React, with it's tight focus on the View, is better suited for amateurs, who will then have to make a bunch of architectural decisions (Redux, Immutable, React Router?). I would say that the opposite is true; an all-in-one framework is best suited for younger developers who have the humility to know that they do not want to make these types of decisions themselves. If you are going to build a large application, then the ability to integrate a selection of third party solutions for various architectural concerns can save you a huge amount of risk, in the greater scheme of things, but evaluating those options and designing solutions for the issues that come with multi-way integrations is a task for experienced developers (although there is plenty of low hanging fruit in banging out UI components and wiring up CRUD APIs for junior devs).

</comment><comment><USER12> I have used react and angular2. Plus some other frameworks like polymer and vuejs. And have studied a few others. The one that makes me more productive is riotjs. Simple, minimalist design, yet it has the best implementation of components of them all. Components are custom tags written in html, with scoped javascript and css styles, in a single file. This is easier than React because your html is actual html, not trapped inside of render jsx functions. It is easier than angular, because it is simpler, faster to write and read.

It has one way data binding, like React, that is simpler to reason than 2-way in Angular. Riotjs is the framework that I recommend.

<comment><USER13> In angular 2 Components are also custom tags written in html, with scoped javascript and css (you can choose the scoping) in a single file (also optional). So how is it different?

<comment><USER12> The base structure may be somewhat similar. However Angular 2 makes things more complicated with more stuff: dependency injection, class decorators, services, etc. Riotjs takes a simpler approach, inspired by React, but improved with better design. In Angular 2 inline html templates that are not syntax-highlighted by code editors. Full html templates require spliting the component in separated files.

In Angular 2 there are multiple data bindings syntaxs: There is one way up, one way down, or 2 ways. In Riotjs, there is only one, and you can use it with the Flux architecture or similar for a simpler, easier to reason about, and proven architecture. In my opinion Angular 2 is over enginered, with a lot of stuff that you can easily do without it. See React. And by not having over enginered stuff, you benefit of a simpler architecture that is easier to learn, and simpler to use. I have found that simplicity makes many people more productive. And React and Riotjs both are simpler than angular 2.

</comment></comment></comment><comment><USER14> [http://imgur.com/4ppfbjK](http://imgur.com/4ppfbjK)

The social share widget makes the text very annoying to read ! It's ON the text

</comment><comment> maz-dev > Experienced developers and coders should use AngularJS. Casual developers > and designers should use React.

Well.. I wish I could approach every tech choices with this simple mindset.

</comment><comment><USER15> I've never used AngularJS, so I would stick my comment to ReactJS.

I would like to point that with ReactJS you have a suggested way of implementing the data-part of your application by using Flux-like architecture ( Redux, Fluxible, AltJS, etc. ). This combined with the views itself also brings more complexity to the application.

Still I believe that 5-6 years ago ( when Backbone was the way to go, most cases ), the current state of front-end is far more complicated ( in terms of build tools, css / html defined in JS files, hot-reloading, isomorphic code libraries, etc. ).

I'm still missing a front-end workflow, supported by a big company, which reduces the complexity and increases stability.

</comment><comment><USER16> >should be used together

That's a wonderful idea /s

</comment><comment><USER17> That picture at the start is really outdated.

</comment><comment><USER18> Angular and React are two different things. How could anyone make a meaningful comparison between them?

<comment><USER19> Cars and motorbikes are two different things but they can be compared as means to get from one place to another. It isn't very hard to use the same analogy with angular x React concerning the development of web interfaces.

</comment></comment><comment><USER20> Didn't now Top Gear started reviewing JS frameworks.

</comment><comment><USER21> Hardly a comparison.

</comment><comment><USER22> None, VueJS</comment>


Facebook Is Recycling Your Likes To Promote Stories You've Never Seen - <AUTHOR> http://www.forbes.com/sites/anthonykosner/2013/01/21/facebook-is-recycling-your-likes-to-promote-stories-youve-never-seen-to-all-your-friends/

<comment><USER2> This sort of thing can only further degrade the quality of information that Facebook has at their disposal. Let me elaborate:

When Google started with Pagerank, making a link was technically hard, so each link was a vote of confidence made by a person, who is on average technically literate, and so on average is well-educated. As the first CMS systems emerged, they were still a pain to use, so only the most motivated people were making links, presumably those people also put some effort into researching their subject. The community of less educated and/or motivated people then could use Google to discover information that was effectively hand-sorted for them by the more educated and motivated. As adding weight to the link graph became easier, the quality of information began to fall.

Enter Facebook - liking a page is the easiest thing you can do, takes no effort and there are no educational barriers. On the contrary, the most educated people will see this sort of shenanigans and they will stop "liking" anything at all. The less educated will continue to "like" things left and right, making it even more repulsive for the educated. Long term the entirety of information Facebook has in their possession is filled with celebrity gossip, urban legends, chain letters, cute kittens, horoscopes, feel-good wisdom quotes, etc - all that information that is heavy on emotional engagement, but light on actual _information_.

There in lies the problem with "social search" - garbage in, garbage out.

<comment><USER3> A couple of months ago, I un-liked everything except for a couple of bands.

Main reason was that I don't have the time or patience for their changes in privacy. I couldn't even remember some of the things I had liked back when the feature was first introduced and I didn't want that to come back to haunt me at some point when I am not paying attention to their privacy policies.

</comment></comment><comment> grey-area There's a serious issue of integrity here - Facebook is already appropriating people's identity for use in advertising, which in itself is disconcerting. The real world equivalent to their ads where you have 'liked' a page would be something like a ski resort using your ski pass photo on a billboard next to an endorsement of their resort.

On top of that misrepresenting the opinions of its users like this to promote content that they have never even seen to their extended network is misleading in the extreme. Most people would not agree to this sort of manipulation, and there are even questions about how some likes have been generated: [http://readwrite.com/2012/12/11/why-are-dead-people- liking-s...](http://readwrite.com/2012/12/11/why-are-dead-people-liking-stuff- on-facebook)

Facebook have to be careful here, as if they lose the trust of their users by continually abusing it, people will just shut down their accounts. Their actual site offers little that can't be easily done with other services, their only pull with users at present is the network effect, which works both ways as if trust starts to slip and people notice others leaving, it can easily snowball.

<comment><USER4> Integrity is something FB does not seem to concern itself with. And sadly, FB will largely get away with it, as everyday people just keep coming back for more.

</comment></comment><comment><USER5> To clear it up a bit, it's NOT what everyone is making it seem like. Facebook is NOT auto 'liking' a post on your behalf.

Basically, what is happening (per his example) is that "Johnny" liked "Vice", and what Facebook is saying is "Johnny liked Vice", and it's pulling in a recent/popular "Vice" article to expand more on the brand. To help get more likes for the brand (which is a good thing, for pages/brands). It's NOT saying "Johnny liked this Vice story", which is what he [the guy in the video] is implying. That's why it says "Related Stories", that story is related to "Johnny" liking "Vice", because it's a "Vice" story/post.

Facebook should just make it more clear that you like "Vice" as a whole, and because Facebook wants to promote that you like "Vice" they should phrase it like it's a recent "Vice" post and NOT an article "you" specifically liked. They currently have a horizontal rule with "Related Story" to show this, but that probably isn't enough since everyone is getting confused. That's the confusion here.

It's just a confusing UI/UX element, it's not like they are saying you "Like" this weird article that you never liked.

People need to take a "chill pill" over this, because it's not as bad as it seems.

<comment><USER6> The suspicion - and I think it's a reasonable one - is that the confusion is completely intentional. In which case it really is as bad as it seems.

Why they don't just make the search facilities work better and attach adverts to those instead of these sorts of shenanigans is beyond me.

<comment><USER5> I would argue that it's not intentional. I will agree they are trying to bring more exposure to a brands by pulling in a related story in a confusing UI way, but I think they could argue that they don't force you to 'like' anything. If you don't like the things pages you 'like' are posting, 'unlike' them. It's that simple. I tested it with a few test accounts and if you 'unlike' the page there will be no posts like this. So, I will keep with my statement that it's not as bad as it seems.

People just need to watch what they 'like' and maybe go back through those 'likes' to do some cleaning. I actually like this, because it puts the full blame on the user to be more responsible on what they 'like', and not to just 'like' everything possible.

<comment><USER6> There's a big difference between what Facebook _could argue_ and what Facebook's _actual intentions_ are.

I'm very skeptical that this was accidental. Even if it was, it _looks_ intentional: users don't see the promoted posts that are associated with their past likes so they don't have any intrinsic feedback that would make them curate their likes. That _looks_ underhand. If it didn't we wouldn't be seeing the fuss.

</comment></comment></comment></comment><comment><USER7> Why is this simple idea so hard: I don't want _anything_ posted on my behalf unless I say so- ads, apps, likes, anything

Old Feb 2012 story on this about a guy who became associated with a "personal lubricant" via Amazon: [http://news.cnet.com/8301-17852_3-57386733-71/facebook-ad- pu...](http://news.cnet.com/8301-17852_3-57386733-71/facebook-ad-puts- lubricant-joke-on-slippery-slope/)

<comment><USER8> _I don't want anything posted on my behalf unless I say so_

Maybe they know that. Maybe it turns them on? Just consider people who grope, or even rapists. They know their victims don't want it, and in presence of physically fit people who pay attention they hold their feet quite still; but as soon as the attention or the ability for self-defense wanes, they come a-creeping again.

Sure I could have used a less loaded comparison, but for me that's what is going on here and elsewhere. Facebook, Google, Apple, Microsoft to name just those who certainly will not stop unless they've been disabled.

But of course, it's really hard to knock someone out for good when for anyone adding 2 and 2, there are ten people with Stockholm Syndrome doing their best to stop them; so that's why we're still _here_ , instead of, say, the information age. Bill Hicks kindly asked advertisers to kill themselves; they didn't. So can we at least fucking stop putting food on their table? I'd like to know how an information age, as opposed to a naked emperor advertisement age, would actually look like. Since they won't do the decent thing, let's do it for them.

Fool me once, shame on you. Fool me twice, shame on me. Fool me a hundred times, and people get confused and think that's just how it is. Well no, and it isn't over until the heat death of the universe, either.

</comment></comment><comment><USER9> I have recommended a article on an alt FB account. I never did this (I just logged on the website with FB connect), I can't see it on my wall and remove it, and I revoked any rights for this website on FB preferences.

I would be a lot more annoyed if it was in my real account.

Following that I removed most of my infos and page likes. Seeing the new Graph Search, I'm glad.

</comment><comment><USER10> The quality of content on my Facebook feed has taken a turn for the worse lately. I regularly see sponsored or related posts that I have absolutely no interest in, leaving me with a more negative impression of that business and of the value of the Facebook experience. I don't mind ads, but they should at least be relevant. If you are putting ads directly in my feed that are as far from relevant to me as possible, then you've got a problem.

It all started when I saw a post about purchasing country-style boots from a discount country store. Then it got worse with posts promoting Walmart. I believe those posts suffered from the problem noted in this article. It looked somewhat like a friend promoting Walmart.

Does anyone know if there is a way to hide this stuff?

</comment><comment><USER11> There's been a running joke with my friend who always shows up as liking T-Mobile in my timeline (along with the timeline of everyone he's friends with) with whatever the latest T-Mobile update is, but he "unliked" T-Mobile over a year ago - pretty trivial, but also pretty annoying

</comment><comment><USER12> 'It turns out that Facebook also adds likes any time a user messages a link to a "likable" page.'

Is this true? If I share a link so something on HackerNews, can PG now run social ads against that action?

<comment><USER13> yep, this is true, basically every shared link inside a message counts as a vote

</comment></comment><comment><USER14> I'm not sure if this is the case with just me or something really changed got changed behind the scenes, I've been seeing less of these 'sponsored' stories lately since this news created buzz sometime back.

<comment><USER6> If the difference is real (I've not seen it) then perhaps it's a result of more users becoming aware of the option to disable "Pair my social actions with adverts" via settings: [http://www.facebook.com/settings?tab=ads&section=social&...](http://www.facebook.com/settings?tab=ads&section=social&view)

In my own case I've come to see "likes" as a liability and removed all existing "likes" for commercial organizations or any uncommercial org for which I see these paid-for posts. Hardly the desirable outcome for Facebook or the organizations! I hope my reaction becomes more prevalent.

<comment><USER15> I did the same and removed all my likes out of fear of showing up in ads. Whether the ads were misleading is irrelevant; I don't want my friends to associate me with ads.

<comment><USER16> Me too. Just went in and unliked everything I could.

</comment></comment></comment></comment><comment><USER17> Sort of a meta question: If you manage to use Facebook without ever "Liking" anything, will your face never show up in advertising for your friends?

<comment><USER18> Interested to know, since I've never "liked" anything other than friend's status updates, (and I "unliked" all the autoliking they did when they converted a bunch of profile fields into likes a couple of years ago).</comment></comment>


We are Sorry ~ GoDaddy - <AUTHOR> http://ontechies.com/2012/09/15/were-sorry-godaddy-com/

<comment><USER2> Hahah I got this email - luckily I had switched away from their hosting literally days before!</comment>


Keeping your account protected - <AUTHOR> https://blog.adafruit.com/2016/11/01/keeping-your-account-protected/ <comment><AUTHOR> Shared as an example of the _right_ way to talk about a security threat.</comment>


The strict Pragma is a Cultural Marker - <AUTHOR> http://www.modernperlbooks.com/mt/2013/11/the-strict-pragma-is-a-cultural-marker.html <comment><USER3> Worth reading even if you aren't a perl guy. Every language has this type of 'cultural markers' that set your expectations for a codebase by skimming a few files or just the project structure. On that first dive into someone else's code[1], this markers are invaluable, they are the first cue into the author's mindset and background. They are a signal for future maintainers or collaborators. It's like stepping off the plane and hearing people around you speak with your own regional accent. Even if you've never been here before, now you know some of your knowledge still applies.

[1] Rule of thumb, if you haven't touched your own code for a long time, think of it as being written by someone else. You are not the same person you were when you wrote it.

<comment><USER4> > Rule of thumb, if you haven't touched your own code for a long time, think > of it as being written by someone else. _You are not the same person you > were when you wrote it._

This is really insightful, most especially the part I italicized.

I can think of a few particularly embarrassing moments when I've dug through old code of mine and immediately thought "What kind of idiot wrote this crap?" followed by a brief moment of horror when the realization sets in that the idiot was me. :)

I think it would also make a fantastic addendum to this [1] discussion (and the article to which it is attached), especially since many new programmers often don't think much of code maintenance. Usually it's comprised of "I (or someone else) will eventually rewrite this." Then it enters production.

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

<comment><USER5> I've come to (try to) document / code like I assume the next person reading it will be both insane and stupid.

Usually that's me. Usually it was worth the extra effort :) And at the very least it's a measure of progress, as I'm no longer _that_ insane and stupid.

<comment><USER4> Oh gosh, yes. I've found that approach to be the most helpful. In a year (or three?), I know that I won't remember _anything_ about what it was supposed to do. I'm pretty sure I'm stupid or forgetful. Probably both.

I like your assertion of documentation being a measure of progress. As dumb as it sounds, even if you're the only consumer of an API you wrote internally for some on-off application, documenting it thoroughly is a tremendous time saver. Granted, I still slip up occasionally, especially if it's a quick script of sorts, but I find more often than not that when I do regret not having taken the time to document something, it's (now) usually something deceptively simple that I _wish_ I had better curated, because it eventually finds new life as part of a greater work.

<comment><USER5> Yeah, especially with one-off scripts I keep upgrading my machine / reinstalling to clean things up, and wondering wtf -nRT means and why I thought it was important. Something like half the time I google / manpage around for a while and find out it _wasn 't_ important, or assumed something incorrect about what it was trying to do.

I've started wrapping everything I do frequently in small bash scripts, and documenting what _and why_. Saves a lot of time when migrating to a new system, since I can glance and say "nope, don't need it" within a couple seconds, or remember why it was useful (and sitting in a cronjob somewhere) and reinstall the things I actually use.

<comment><USER6> When writing scripts don't use the shortened flags, use the long version.

For example, the deploy script from a simple php app I wrote:

        rsync --recursive --links --verbose --rsh=ssh --exclude-from ./exclude_from_deploy.txt --delete ./ kazan:/srv/simple-paste/

</comment></comment></comment></comment></comment></comment><comment><USER7> I find that when I use 'struct' in my Perl, I have a psychological mind shift in how I write the code. Instead of hacking together some code, I start to take it more seriously, and start to care about everything from what I choose as my variable names to the overall sructure of the code. I start to care about maintainability. To be honest, I end up eliminating lots of clover Perl idioms and make the code much more 'C' and Java like, explicitly declaring most of my variables at the top of functions and making them verbose and consistent. I start to document everything and write lots of comments explaining what I'm doing. It really doesn't add much overhead to the overall development to be honest.

I think as if I have to give the code to somebody else, even if that other person is me in the far future.

It's served me well, I've returned to old pieces of code I wrote years before (even multiple 10s of KLOCS) and after a couple read through was able to get to work without much fuss.

Fitting in with Larry's idea of programming languages as real languages, it's as if I've code-switched from a colloquial language to the kind of formal language I might use when giving a presentation.

<comment><AUTHOR> > explicitly declaring most of my variables at the top of functions

While i largely agree with the rest of your code, that one bit i can't generally agree with.

If you take care to keep all your functions below 15 or so lines, i.e. such that they fit on one screen, then that's fine.

As soon as you write bigger functions you end up impacting your code quality in two ways:

\- readability and refactorability go down, because coders after you have to read more code to see the context of a variable

\- the chance of bugs goes up because you're more tempted to reuse a predeclared variable in a loop, instead of redeclaring it at every start of a loop; or more insidiously, reuse the same variable as the counter in multiple loops

So please: Declare your variables as late as humanly possible, optimally only directly before they're used.

<comment><USER7> I don't disagree with your points at all. Short life variables I do tend to declare later in the code.

But most of the major state variables (especially the ones that get returned, or important data structures I want to keep track of in the code flow) I stick at the top with comments and explanations of what the variable is and why it exists.

<comment><AUTHOR> That's better to hear. I'd still invite you to try and make a conscious efforts to make your functions smaller and more numerous. That might help you reduce the number of variables you need to make an effort to actually keep track of. :)

</comment></comment></comment></comment><comment><USER8> Perl was my first language that I really engaged with, it started my career. Why did it fall out of favour? (I left web development to write applications/C, then returned some years later to write APIs but everyone had stopped using it).

<comment><USER9> It was Perl 6.

As soon as it became clear that the move from 5 to 6 was going to be discontinuous, if you wanted to be a Perl developer you had to decide if that meant being a Perl 5 developer or a Perl 6 developer. Being a Perl 6 developer was the clearly marked path to The Future, but Perl 6 was years away from being ready to use in production environments, and it never seemed to get any closer. Perl 5 was practical for real-world use, but choosing to be a Perl 5 developer meant worrying that you were investing time and energy learning skills that were already marked as obsolete and writing code that would end up having to be re-written.

That kind of uncertainty is fatal to a language. Why put up with it when there's so many other languages out there with clear upgrade paths? Especially when the upgrade path for the one you're using now appears pretty similar to learning a new language anyway?

So developers drifted away from Perl to other languages, and that, as they say, was that.

<comment><USER10> Ah, that old chestnut again. The argument falls down when we see what really happened: Perl 6 had and continues to have a huge positive influence on Perl 5, the future belongs to both as there turned out to be no discontinuous move, and Perl 5 stays up-to-date.

<comment><USER11> Even if it is only the way things are perceived, and not the actual truth - <USER2> can still explain the decay of the community.

<comment><USER12> What decay? The Perl community still continues to grow - [https://news.ycombinator.com/item?id=6738619](https://news.ycombinator.com/item?id=6738619)

</comment></comment></comment></comment></comment><comment><USER13> Interesting to think about the sorts of cultural markers that other languages have. Maybe this is just another way of saying 'code smell', but there must be similar elements for JS/Ruby/Python (for example) where it the code isn't strictly 'wrong' (or even debatably wrong), but is still clearly indicative of a particular cultural approach towards coding in that language.

Like overriding Array.prototype.push in JS - it might be just fine, but I tend to pause and re-evaluate my attitude towards the code when I see that going on, because it's a very different approach to coding in JS than I personally use.

<comment><USER14> I tend to see much clearer indicators in JavaScript code. Global variables? Lots of functions outside any closure? Old skool js coder ahead.

You can also tell javascript only programmers a mile off. Anonymous functions everywhere? Functions have multiple concerns? Use 'var aFunction = function()'? Mono linguist and spaghetti code ahead.

<comment><USER15> A lot more JS coders could benefit from adding "use strict" to their code too. It's frankly amazing it isn't used more.

<comment><AUTHOR> Honestly, in practive it falls short and doesn't do nearly enough. :(

<comment><USER15> True. It does far too little at compile time. I don't understand why. Maybe we need a "use compile strict" ;)

</comment></comment></comment></comment></comment><comment><USER16> I just don't understand why anyone developing a language would think dynamic scope would be a good idea.

<comment><USER17> Richard Stallman gave an excellent use and rationale for dynamic scope in the EMACS manual:

[http://www.gnu.org/software/emacs/emacs- paper.html#SEC17](http://www.gnu.org/software/emacs/emacs-paper.html#SEC17)

One of my favourite things about perl and CL is the ability to have lexical (my/let) and dynamic (local/special) scope in the same program _depending on what is clearer_.

In fact, it comes up often enough that programming in a language lacking dynamic scope (e.g. basic, JavaScript, or python) feels limiting sometimes, and I end up emulating it (settings+extend, observables, etc).

<comment><USER18> That rationale may be a bit revisionist, here is Olin Shivers' take on RMS's justification for elisp's dynamic scoping:

"Some context: Common Lisp did not exist (the effort was just getting underway). MIT Scheme did not exist. Scheme was a couple of AI Lab tech reports and a master's thesis. We're talking the tiniest seed crystal imaginable, here. There was immense experience in the lisp community on optimising compiled implementations of dynamically-scoped languages -- this, to such an extent, that it was a widely held opinion at the time that "lexical scope is interesting, _theoretically_ , but it's inefficient to implement; dynamic scope is the fast choice." I'm not kidding. To name two examples, I heard this, on different occasions, from Richard Stallman (designer & implementor of emacs lisp) and Richard Fateman (prof. at Berkeley, and the principal force behind franz lisp, undoubtedly the most important lisp implementation built in the early Vax era -- important because it was delivered and it worked). I asked RMS when he was implementing emacs lisp why it was dynamically scoped and his exact reply was that lexical scope was too inefficient. So my point here is that even to people who were experts in the area of lisp implementation, in 1982 (and for years afterward, actually), Scheme was a radical, not-at-all-accepted notion. And _outside_ the Lisp/AI community... well, languages with GC were definitely not acceptable. (Contrast with the perl & Java era in which we live. It is no exaggeration, thanks to perl, to say in 2001 that _billions_ of dollars of services have been rolled out to the world on top of GC'd languages.)"

[http://www.paulgraham.com/thist.html](http://www.paulgraham.com/thist.html)

(emphasis _not_ my own)

That whole page is a good read, particularly if you are a fan of Shivers' writing style.

<comment><USER19> Cool, I hadn't read Olin's take.

However, the cited rationale can't really be revisionist of what RMS told Olin, because it was published in 1981, about 14 months before Olin came to MIT in 1982.

It appears verbatim in RMS's paper, "EMACS: The Extensible, Customizable, Self-Documenting Display Editor," A.I. Memo 519a, ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-519A.pdf (March 26, 1981). He doesn't mention an efficiency justification in there.

The whole document is also fascinating for including RMS's nascent but not- fully-baked early thinking about free software.

<comment><USER18> Hmm, good catch, I didn't notice when that was published.

</comment></comment></comment></comment></comment><comment><USER20> As the child of anthropologists, I think there's a lot of room for cultural analysis of technologies. Languages, for instance, have cultures as well as affordances, and a careful comparative analysis would be really interesting.</comment>


Visualizing the Riemann zeta function and analytic continuation - <AUTHOR> https://www.youtube.com/watch?v=sD0NjbwqlYw <comment><USER2> I approve of this video.

(Seriously. There's so much flawed hand-waving going around. But this video is solid)

</comment><comment><USER3> His visualizations are great. If you've never had a mental picture of what a matrix does, I recommend his series of videos about linear algebra.</comment>


The Arbitrary Logo - <AUTHOR> http://blog.arbitrary.io/the-arbitrary-logo/

<comment><USER2> This page uses close to 100% of one of my CPU cores. (Ubuntu/Chrome), not sure if it's because of the logo.

<comment><USER3> Looks like the page is spending an inordinate amount of time converting pixel data into a data URL. That's probably the favicon update then?

To find out, I took a process sample with OS X Activity Monitor. The main thread is spending most of its time in a requestAnimationFrame() callback, and about 77% of the work done there is inside toDataURL() calls.

Here's the relevant bits of the sample:

        +                   !   : |     +   773 WebCore::DisplayRefreshMonitor::displayDidRefresh()  (in WebCore) + 347  [0x10e41ac6b]

        +                   !   : |     +   ! 772 WebCore::ScriptedAnimationController::serviceScriptedAnimations(double)  (in WebCore) + 407  [0x10e4309c7]

        +                   !   : |     +   ! : 771 WebCore::JSRequestAnimationFrameCallback::handleEvent(double)  (in WebCore) + 240  [0x10e430dd0]

        +                   !   : |     +   ! : | 770 WebCore::JSCallbackData::invokeCallback(JSC::JSValue, JSC::MarkedArgumentBuffer&, bool*)  (in WebCore) + 598  [0x10e431146]

        +                   !   : |     +   ! : | + 770 JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&, JSC::JSValue*)  (in JavaScriptCore) + 63  [0x10dcefbaf]

        +                   !   : |     +   ! : | +   770 JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&)  (in JavaScriptCore) + 462  [0x10db1a0ce]

        +                   !   : |     +   ! : | +     770 JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*)  (in JavaScriptCore) + 35  [0x10de565f3]

        +                   !   : |     +   ! : | +       770 callToJavaScript  (in JavaScriptCore) + 311  [0x10ded24a1]

        +                   !   : |     +   ! : | +         601 ???  (in <unknown binary>)  [0x4ab59b07e64d]

        +                   !   : |     +   ! : | +         ! 597 ???  (in <unknown binary>)  [0x4ab59b170afb]

        +                   !   : |     +   ! : | +         ! : 597 ???  (in <unknown binary>)  [0x4ab59b001034]

        +                   !   : |     +   ! : | +         ! :   597 WebCore::JSHTMLCanvasElement::toDataURL(JSC::ExecState*)  (in WebCore) + 180  [0x10e45a854]

An easy fix would be to throttle the favicon update down to a lower frame rate -- it doesn't need to be updated on every requestAnimationFrame() call.

<comment> TD-Linux The animated Favicon doesn't seem to work on Firefox at all.

Also, CPU usage is also high with firefox, and according to the profile, over half of it is spent in GC.

<comment><USER4> Fun fact: If you open the logo on firefox, it'll show the shirked logo as a favicon: [http://blog.arbitrary.io/content/images/2014/Mar/arbitrary_l...](http://blog.arbitrary.io/content/images/2014/Mar/arbitrary_logo.gif)

It's a shame that gif favicons never made it back in the day. :(

</comment></comment></comment></comment><comment><USER5> Really nice result, but there's one thing about it that really bugs me. [http://imgur.com/KYQDTYD](http://imgur.com/KYQDTYD) (Chrome on a Windows machine, if that's of any help).

<comment><USER6> I believe this is caused by .clip() being "wonky" in Chrome. I think the better alternative to .clip() is:

      context.closePath();
      context.fill();
      context.globalCompositeOperation = "source-atop";

In action: [http://codepen.io/anon/pen/mJOOxv](http://codepen.io/anon/pen/mJOOxv)

[1] [http://www.w3.org/TR/2015/WD-2dcontext-20150514/#dom- context...](http://www.w3.org/TR/2015/WD-2dcontext-20150514/#dom- context-2d-globalcompositeoperation) [2] [https://developer.mozilla.org/samples/canvas- tutorial/6_1_ca...](https://developer.mozilla.org/samples/canvas- tutorial/6_1_canvas_composite.html)

</comment></comment><comment><USER7> It's neat I guess but the edges are aliased.

</comment><comment><USER8> I was expecting one of those trendy HTML5 logo generators...

</comment><comment><USER9> Pretty cool effect, though as others have stated it looks very resource intensive. Reminds me of an old project from Hakim El Hattab [http://hakim.se/projects/meru](http://hakim.se/projects/meru)

<comment><USER10> So much of that guy's work is just great. I love the DOM Christmas tree especially (even if it's not the cleverest or prettiest thing of his): [http://hakim.se/experiments/css/domtree/](http://hakim.se/experiments/css/domtree/)

</comment></comment><comment><USER11> The logo is meh, but the grammatical error in the _first_ sentence of TFA is obnoxious.

</comment><comment><USER12> Kudos to throw so much developing time on an ugly logo.

</comment><comment><USER13> Looks like the stargate icon

</comment><comment><USER14> But why? Why would you dynamically render your logo like this? Is the extra overhead really necessary?

</comment><comment><USER15> It looks like a capital lambda.

<comment><USER16> For the record Capital Lamda in Unicode: Λ

Unicode uses the spelling "lamda" in character names, instead of "lambda", but I could not find the reason for that.

<comment><USER17> "Lamda" is the modern pronunciation, while "lambda" is the ancient one, apparently. However, for the letters Μ and Ν they use the ancient Mu/Nu, instead of the modern Mi/Ni, so I fail to see the logic.

<comment><USER18> Do you pronounce mu as mee? Nu as nee? I've always heard them as mew and new in the US.

And what is the difference between lamda and lambda for pronunciation? I'd say them the same.

<comment><USER17> I also call them 'mew' and 'new' in English, but their modern names are 'mee' and 'nee'. I'm not sure what the ancient Greek pronunciation is, but I think that's where the 'ew' sound comes from.

The same goes for lambda. I use that in math & programming, but the letter Λ is actually called [lamða] in modern Greek ('ð' is the sound of 'th' in 'the'). That's apparently how 'lamda' is supposed to sound.

</comment></comment></comment></comment></comment><comment><USER19> The resource / CPU requirements of this are not something to be proud of. If your logo means the rest of your site is going to take a serious performance hit, then your priorities are way off.

</comment><comment><USER20> -1 for disabling zoom on mobile devices</comment>


Interactive Maps of the Accents and Dialects of the UK - <AUTHOR> http://www.bl.uk/learning/langlit/sounds/index.html <comment><USER2> Does anyone know of anywhere else with similar properties? I've never come across anywhere with such a huge variation of accents and dialects over a relatively small piece of land, but my experience is limited.

To me (non-American), Americans' differences are far more subtle (and the variations are nowhere near as numerous as in the UK), even when comparing between regions that are far-apart.

</comment><comment><USER3> It's a shame that Firefox doesn't know what to do with the links to the recordings.

</comment><comment><USER4> WMA? That's a disappointment.

<comment><USER5> I'm getting right sick of the British Library being a Microsoft shill.

I've just been reading, again, about their involment in the embarrassment that is the ISO approved OOXML.

</comment></comment><comment><USER6> Would be cool to have Australia, New Zealand, South Africa so you can learn to spot the differences</comment>


Is This the Future of Punctuation? - <AUTHOR> http://online.wsj.com/article/SB10001424052970204618704576641182784805212.html?KEYWORDS=punctuation#articleTabs%3Darticle <comment><USER2> I think it's about time British-style or "logical punctuation" of quotes becomes standard.

Especially coming from a programming background, it just makes more sense. Periods should go outside the quote if they aren't actually part of the quote.

</comment><comment><USER3> I used to be a grammar nazi, but now I accept that we are witnessing hyper- evolution of written language. Before the internet, I didn't realize how pervasively people confused _its/it's_ and _lose/loose_. (I knew _there/their/they're_ was a common problem.)

I previously assumed languages typically evolved through "erosion" by dropping letters or spaces as a matter of saving time or space. But in today's computerized world, time and space are cheaper, so grammar _exceptions_ seem to what is eroding: _its/it's_ is an apparent punctuation exception and _lose/loose_ is a pronunciation exception.

<comment><USER4> I am not a native English speaker, but I'm constantly dumbfounded as to why anyone would even entertain the idea that "its/it's" are in any way similar. When you substitute one with another, _the sentence just does not parse_. It stops making sense.

By conflating "its" and "it's", you are overloading the meaning of "its", making the language more ambiguous.

Perhaps this also has to do with me being accustomed to more formal (programming) languages.

<comment><USER5> The reason it's confusing is that 's after a personal pronoun usually indicates possession, whereas this is the opposite for it's/its, so in that sense it's an exception to a rule, which people have a hard time remembering.

<comment><USER6> What personal pronouns have 's for the possesive form? Mine's? Your's? Hi's? Her's? Their's?

<comment><USER7> Ah, you found the rule for when you don't use it. Contrary to many textbooks, teachers, and websites, the lack of an apostrophe in "its" is not an exception --you don't use the apostrophe for pronouns. "His". "Hers". "Yours". As apposed to "Jack's", "Julie's", "the user's".

<comment><USER8> "Its" is only used in places where "his", "her", and "your", which don't have the s's, are used. People don't use "its" in places where they'd use "hers" or "yours". It's awkward.

<comment><USER5> That's a better example. My explanation was wrong, but it's still an exception in the context you provide.

</comment></comment></comment></comment></comment></comment></comment><comment><USER9> This reminds me of Keith Houston's wonderful blog, Shady Characters (<http://www.shadycharacters.co.uk/>). Keith has written at length on the pilcrow, interrobang, and sarcasm marks (all touched upon briefly in this article) amongst other punctuation marks.

I am somewhat surprised that Shady Characters was not cited by the article. There is simply no better place to learn the surprising, entertaining histories of our punctuation.

</comment><comment><USER10> The problem with the apostrophe is that possessive forms in English are just so horribly screwed that nobody has any idea how to even say them properly, much less how to apply punctuation.

<comment><USER11> Sometimes, but most cases are quite simple. I learned the difference between they're/there/their sometime before grade 8, and I generally expect people I converse with to recognize that distinction.

As for possessive forms - that's even easier. In most cases, if something belongs to someone, use an apostrophe. If it doesn't, then don't. Okay, it can get confusing, but in most cases, it's not.

<comment><USER12> LeafStorm was talking about _saying_ them properly. How do you say:

"That [thing] is Jess's"?

(conversely, is it Jess' or Jess's or should we be forced to say 'belongs to Jess')?

Now, imagine you're not a native speaker and you have to figure out how to say that. That's the difficulty.

<comment><USER11> The thing is, I'm not a native speaker; it's not really something I struggled with when I learned English. I believe the general rules I learned were:

plural & no possession: no apostrophe

singular, possession & name doesn't end with _s_ : 's

singular, possession & name ends with _s_ : '

plural, possession & name doesn't end with _s_ : s'

<comment><USER3> I'm a native English speaker and my name ends in 's', yet even I waffle about whether I just use an apostrophe. I generally include an apostrophe just for consistency.

My heuristic is: if I would pronounce the extra sound, then include the apostrophe. Unfortunately, this would not help non-native speakers.. <:)

<comment><USER13> We can say that Shenglong's rules are "English", and then whatever you do in real life is your "dialect".

<comment><USER14> And yet if you try to trace back why those "rules" have any authority and you're likely to end-up back at a claim that it was what everyone did in their real life.

<comment><USER13> The rules have the authority we give them. Either we give up on having an English language that we can agree on, or we have arbitrary rules.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> I think the sarcasm mark (snark) is stupid. Doesn't make any sense⸮

<comment><USER16> I think it's useful when having a conversation via IM.

Avoids misunderstanding and adds humour.

I've also heard it referred to as the sarcastrophe :)

</comment></comment><comment><USER17> I like the Snark symbol. Is that in unicode?

<comment><USER18> The closest is the reversed question mark '⸮'. You can read more about it at The Wiki, [https://secure.wikimedia.org/wikipedia/en/wiki/Irony_punctua...](https://secure.wikimedia.org/wikipedia/en/wiki/Irony_punctuation)

<comment><USER19> That showed up as a blank square on my iPhone. Here on HN, I've seen /~ used to denote sarcasm. Alternatively, the winking emoticon ; ) or tongue sticking out emoticon : P work as well.</comment></comment></comment>