Build a burner phone with Twilio and Kotlin - <AUTHOR> https://www.twilio.com/blog/2017/07/building-a-fully-featured-burner-phone-with-kotlin.html <comment><USER2> You might want to use the term "single-purpose number" or something similar. Burner phone is colloquially used as a term for non-registered/anonymous phones, which this isn't. Sure it sounds cool but people might assume that's what they are buying...

<comment><USER3> i was going to call you out for being overly precise, but given that this is literally hosted by essentially a Telecom company its a pretty valid point.

That being said, burner doesn't mean anonymous. Burner means disposable. Obviously you're not going to dispose of your account, application, and server every time you're done with the number.

It's also not even a phone. I guess its a phone application in the most minimal sense of the word..

<comment><USER4> So here's by detailed response [https://www.twilio.com/blog/2017/07/building- a-fully-feature...](https://www.twilio.com/blog/2017/07/building-a-fully- featured-burner-phone-with-kotlin.html#comment-3423920873)

But I agree with kchr in principle. "Burner" may not _mean_ anonymous but it's more often than not associated with anonymous and anonymity. It's the go-to perception or association if you will.

So I think kchr and I are saying the same thing: the article is using the burner/anonymity context as a little click-bait IMO and it's not a big deal but it's a valid point.

</comment></comment></comment><comment><USER5> The challenge for Twilio is that phone #s are a fixed quantity. The same #s have been circulating across lots of different companies including being used by spammers and in marketing campaigns and published across the Internet. Make sure to search the Internet for any phone # you acquire from Twilio before buying it. It may already have substantial call spam/undesirable organic traffic associated with it.

On the flip side, there are already companies out there specializing in monetizing misdials. They specifically look for phone #s that have been retired recently with a lot of volume and then take those calls and resell as leads for cars, insurance, etc.

<comment><USER6> Greg from Twilio here.

Agreed on the challenge of working with a fixed number of phone numbers (and I say this as someone who recently moved to NYC and would _love_ to own a 212 number).

In the industry, phone numbers that have a high-volume of unwanted traffic are called "dirty numbers." Think of a number used by someone who signed up for every sweepstakes they came across for 40 years, or maybe a number that's particularly cute (you probably don't want to have a cellphone tied to XXX-867-5309).

If we sold them, dirty numbers would be worse-than-useless for (almost all) of our customers. So, whenever a phone number is released by a Twilio customer, we reserve it for a minimum of two months before it can be purchased by another account. We also monitor each reserved number until it reaches an acceptably low number of phone calls.

If you do find yourself getting unwanted calls, you can use the <Reject>TwiML verb[^1] to create a blacklist - your account won't receive or be charged for those calls.

[1]: [https://www.twilio.com/docs/api/twiml/reject](https://www.twilio.com/docs/api/twiml/reject)

<comment><USER7> Hey Greg, uneducated but interested inquirer here: Once you're inside a phone network, phone numbers can be as long as you like, can't they?

Could Twilio not arrange for a new "country code" to be assigned, possibly to an industry working group of some kind, and then make the numbers ~64 digits long? Then there should be more than enough to go around and to discard dirty numbers, and the numbers could always be made larger in the future if needed?

<comment><USER8> No, because 98% of peoples' phone systems out there expect a destination number in a specific format. You can't just have a NANPA area phone number that is arbitrarily long or has extra digits in it.

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

If you are way, way bigger than Twilio you can create a country code. Country codes exist for special purposes like the Iridium satellite phone network. But you cannot just create a country code for arbitrary purposes and expect it to work with the world's PSTN/SS7 infrastructure, any more than you can choose an arbitrary non-RC1918 /8 of IP space and start using it on the public Internet.

<comment><USER9> Maybe Twillio isn't big enough by themselves, but if you add in Google Voice, Plivo, all the internet VoIP providers, and all the Cable Company VoIP services, you are big enough.

Is there a VoIP trade association they are all members of? If so, the trade association would be big enough to push for a new country code for the special purpose of software-based telephony just like Iridium has one for satellite- based telephony.

If that fails, Iridium is struggling. That hypothetical trade association could acquire the country code from Iridium with special agreements to ensure that Iridium still can lease numbers for no-cost for satellite-phone purposes.

<comment><USER8> You're wrong that Iridium is "struggling", they're in the process of launching and commissioning their next generation satellite system. It is used so extensively by the US DoD, NATO militaries, aircraft based phone systems and maritime systems that it's quite well positioned. It is the only real LEO truly global coverage satellite phone network that includes high latitude polar regions. The globalstar bent-pipe network architecture and coverage is a joke.

</comment></comment></comment></comment></comment></comment><comment><USER10> Recently tried to use Twilio as a burner for registrations (project to set up unique personas online). All modern websites that require a phone number are also using a CNAM lookup and discriminate against VOIP numbers. I won't be ditching my prepaid phone any time soon in exchange VOIP services.

<comment><USER11> Twilio even has a web UI for this lookup: [https://www.twilio.com/lookup](https://www.twilio.com/lookup)

<comment><USER12> That's really cool, I'm plugging in my cell phone number and it's returning my name and carrier. I didn't know services like these were available.

<comment><USER13> A lot of cellphone companies have this information displayed as an option for numbers not saved in your contacts. My provider (Verizon) gave me this option for a month for free when I first signed up then sent me a text that it was additional cost if I wanted to keep it. Then they started displaying that information for business lines for free. Later when I got my new phone it stopped for some reason.

</comment></comment></comment></comment><comment><USER14> I think that the disconnect here is that this isn't a "burner phone" the way many people think of them, but rather some sort of call/SMS firewall.

</comment><comment><USER15> At the risk of sounding silly, what advantage does this provide over buying a $20 TracFone for cash and activating it without an account on TracFone.com over a public Wi-Fi?

Or, better yet, not bothering to "activate" it, but using it only over Wi-Fi, creating a new Google account, and downloading Talkatone (or the Hangouts Messenger to create a Google Voice account connected to your new account)?

<comment><USER6> Greg from Twilio here.

Not a silly question at all. Developers certainly have a propensity to recreate the wheel for the sake of recreating the wheel -- though I think that many of us would agree that the act of creating is itself the advantage.

That said, a few things:

1\. Costs less. A Twilio phone number is $1 per month (in the US). A minute of calling costs $0.01.

2\. You can get a new number any time you want.

3\. You get to write code.

Don't want to speak for Marcos (though he happens to be sitting 10 feet from me at the moment), but my guess is that what excites him most about writing this post isn't that other developers will copy it line for line. It's that they'll use it as a jumping off point -- that it inspires and equips developers to ship their own inventions.

For an example of this, check out the folks at Burner app who used the similar concept (pre-Kotlin) to build an entire business around this idea.

[1]: [https://www.twilio.com/blog/2012/08/burner-app-offers- alias-...](https://www.twilio.com/blog/2012/08/burner-app-offers-alias-phone- numbers-powered-by-twilio.html)

<comment><USER16> For example, this is the same model Uber uses to anonymize the driver's and rider's phone numbers. Probably when a driver signs off their number is released for a new driver to use until they sign off.

<comment><USER17> Do they use a unique number per driver per shift? If you know the rider's and driver's phone numbers, then you can connect them anonymously with just a single phone number. When I call that number, see if I have a ride in progress, and put me through to the right driver.

This assumes no pooling. With pooling you might need 4 numbers, as the driver could have up to 4 separate passengers they want to contact.

</comment></comment></comment></comment><comment><USER18> I've been doing this for a long time and there is one big, real-world, gotcha - most business (such as Uber, Lyft, Microsoft) can't send text messages to Twilio numbers. I filed a ticket with their customer support a few years ago and they basically swept it under the rug.

<comment><USER18> BTW, nor can you use your Twilio number to send a text message to a short code provided by Twilio to a third party such as Uber: [https://www.twilio.com/help/faq/sms/can-my-twilio-number- sen...](https://www.twilio.com/help/faq/sms/can-my-twilio-number-send-sms-to- a-non-twilio-short-code)

</comment></comment><comment><USER19> Or download a real burner phone app that lets you buy numbers and associate them for different things. There are plenty on the app store for iOS and Android.

Still looks like a fun project.

<comment><USER20> That defeats the purpose of a burner phone by not being anonymous.

<comment><USER13> Neither is this. I don't know much about Twilio but when I clicked on the link in the article it asked for a bunch of personal information.

I also don't know how this is any different from, say, Google Voice?

</comment></comment></comment><comment><USER21> Is it just me or wouldn't everyone just rather live in a world where privacy is respected by third parties just like a first party would. The do not call law has developed too many exceptions or needs strengthening methinks. If I'm getting a spam call on a burner number vs. my normal number, have I really saved any time? or privacy or security if the number can be reused in malicious ways?

I save numbers for 2nd factor auth, and I seem to get yahoo/msft messages from the same numbers, also github sometimes. Number reuse is definitely a problem. A PKI cert system for numbers/calls would be great to have in this case. I want to know for sure that I'm getting my 2nd factor auth code from msft, regardless of the number they're using.

</comment><comment><USER22> Then you'll pay for all the phone calls from marketers. Thanks but no thanks

<comment><USER6> Greg from Twilio here.

Totally understand the concern there, especially since you're already paying for your cellphone.

I did something similar a couple years ago when we were shopping for a car. A lot of car shopping sites are basically lead generators for dealerships and you need to provide a number to get real info. I used a Twilio number forwarded to my cellphone.

The deluge of calls started immediately. After 48 hours, when we had all the information we needed, I released the Twilio number and incurred no further charges.

Total cost was $1 (per month) for the phone number and $0.01 per minute for the inbound calls. Upside was that my phone stopped ringing the moment I was done talking to salesmen.

<comment><USER22> So what you're saying is this tutorial was written by a twilio sales/marketing employee?

<comment><USER23> It's on the Twilio.com blog, so I think that it is pretty reasonable to assume that it's written by a Twilio employee. :-)

<comment><USER22> I'm still waking up... :/

<comment><USER2> Stick it to the Man!

</comment></comment></comment></comment></comment></comment><comment><USER24> Nice idea, confusing title (burner phone??).

<comment><USER13> "Burner phone" is a colloquium used in the United States referring to limited use prepaid phone, separate from your main phone, that's not tied to your identity. Usually used for drug deals or other criminal behavior.

This isn't really a burner phone as the Twilio link I clicked asked me for a bunch of personal information first.

<comment><USER13> I meant to write colloquialism not colloquium. Burned (heh) by auto correct.

</comment></comment></comment><comment><USER25> Author is building a Spring MVC application but labels it as a "Kotlin app". Is it because Kotlin is the new hotness and the Spring Framework is "old" and "uncool"?

<comment><USER26> I imagine it has more to do with the fact that simply saying "Spring app" will make most people assume it's written in Java. It would perhaps be better to say it's a Kotlin Spring app, but honestly the web framework being used is probably less important than the language it's being written in.

</comment></comment><comment><USER27> I've been using ring4 for throw away numbers and it's been decent. Plus there are often lots of promo codes to use.

Code for 20 extra credits if you check it out: INV-DKCSGJHX

</comment><comment><USER28> Er, you realize Twilo logs everything, right? You can log into Twilio and read your own logs.

<comment><USER6> Greg from Twilio here.

Privacy is _incredibly_ important to us. You can delete the logs of any call or message that you don't want residing on our servers.

[https://www.twilio.com/blog/2014/11/introducing-delete- api-n...](https://www.twilio.com/blog/2014/11/introducing-delete-api-nt.html)

<comment><USER9> According to that blog entry, it just makes that data hidden on the front-end and from the API, but it still resides on your servers. Has that policy changed?

Soft-deletes, which the blog indicates that you are doing, is very different from actual deletion.

To make the distinction clear, if a log of a call or message is deleted, can it be given to law enforcement? If so, it's not truly deleted.

</comment></comment></comment><comment><USER29> Is this a USA solution only, or also applicable in UK, EU, Rest of World?

<comment><USER30> UK for sure, dunno about RoW number availability. When you pick a number though, do check that the number supports voice and SMS. Not all do.

</comment></comment><comment><USER31> bur.nr is available for $679.99 :D</comment>


Man gets Windows Vista to work with printer - <AUTHOR> http://blog.seattlepi.nwsource.com/microsoft/archives/141343.asp

<comment><USER2> I thought all the belly-aching about Vista was just people hating changes. Until I actually had to deal with a Vista PC. When my girlfriend bought a new HDTV, I built an HTPC to go with it, running Vista. Every driver just stops working (in interesting and confusing ways) every now and then, and has to be reinstalled. Yesterday I spent an hour poking at the network driver because it wouldn't connect and I couldn't watch the latest episode of Battlestar Galactica (and not being able to watch Battlestar Galactica makes me angry). Every once in a while the HDMI audio driver just stops working and has to be reinstalled. When switching between inputs on the TV, sometimes the video signal goes black, and the machine has to be hard rebooted. I'm sure these are all the fault of the hardware people writing crappy drivers, but it sure is a pain in the ass.

Amazon's Unbox software does something even worse on Vista. For some reason I can't figure out, it will only run once--on the next boot, it fails to start. That would be fine, except it tries to start again, and Vista pops up one of its "application has encountered an error and will be closed" or whatever...and Unbox tries to start again. Infinite loop. Since the Vista popup steals focus and cannot be ignored, the system has to be rebooted, and the app has to be uninstalled before the infinite loop kicks in.

I'd been led to believe that constant rebooting was a thing of the past in Vista...I think I reboot this box more than the XP install on my gaming system.

Vista is the worst computing experience I believe I've ever had. (And I've been using Linux as my primary OS since 96, when there were like five well- supported pieces of hardware, and I've also used every Windows since 95 in my life as an IT support contractor. I think many would say that Windows ME was the worst, but now I'd have to disagree. At least all of the drivers from 95/98 worked on ME.)

<comment><USER3> Damn... and I thought all the belly aching about Vista came from the techie people who liked *nix or Mac... but to hear a real live story about it being that bad is almost, well, touching. Good luck setting it up to actually work!

</comment></comment><comment><USER4> The title was so Onion-like that I seriously thought nwsource.com was going to redirect to the Onion. Does Vista have any long-term chance for survival, with stories like this?

<comment><USER5> _Does Vista have any long-term chance for survival, with stories like this?_

Sure, as long as it's forced down people's throats. What else are they going to use? "Windows" is synonymous with computing for most people. They don't know they have other options, they don't want to learn something that looks or feels different, and they are trained to think mistakes the computer makes are their fault.

If Microsoft releases something else, Vista will go away. But it won't go away because users rebel. They think Vista's bugs are _their fault_ , so they just say "I'm dumb" and give up. It's sad.

</comment></comment><comment><USER6> Vista required UAC to be enabled in order to install any network printer. And with UAC enabled, the drivers won't install for non-made-for-Vista products... it's a total Catch-22.

[http://neosmart.net/blog/2007/windows-forces-you-to-use- uac-...](http://neosmart.net/blog/2007/windows-forces-you-to-use-uac-to-add-a- printer/)

</comment><comment><USER7> Why don't we just cut all the pretenses and have news.ycombinator.com redirect to reddit?</comment>


Treasury wants warrants, repayment from major US airlines on 30% of grant money - <AUTHOR> https://www.reuters.com/article/us-health-coronavirus-usa-airlines-progr/treasury-wants-warrants-repayment-from-major-u-s-airlines-on-30-of-grant-money-sources-idUSKCN21S1Y7 <comment><USER2> Aren't warrants at current prices worthlessness?</comment>


Cantvote.org - <AUTHOR> Hacker News,
I've become increasingly concerned about voting interference and was surprised to hear there's no national repository for reporting difficulty in voting.
There's 866-OUR-VOTE, but that's voice only. FairFight.org has a Google spreadsheet. So far I haven't really found a website dedicated to collecting reports of disenfranchisement.
I bought CantVote.org and would like to develop a simple PWA for submitting reports of voting-related shadiness or outright interference.
This would obviously be ripe for abuse, but my main goal is to log the reports and worry about filtering out fake data later.
People would be reasonably suspicious, so the code would be open-source. My current plan is to dump submissions into an S3 bucket or DynamoDB and find low-cost ways to share anonymized data afterward. Come join https://github.com/CantVote if the tech side of this project interests you.
But before getting started, does anyone know of any:
1. Similar efforts?
2. Obvious dealbreakers?
3. Good people to contact?
Thank you, fellow patriots. <comment><USER2> There's probably some BS law somewhere outlawing a private citizen from collecting this type of information.</comment>


Show HN: Parinfer – a simpler way to write Lisp - <AUTHOR> http://shaunlebron.github.io/parinfer/index.html <comment><USER2> To copy a comment I made elsewhere: I'm seriously impressed. This is amazing.

Paredit always ended up being a requirement for me, but this takes it to the next level. What other editing problems out there could have excessive hotkey usage replaced by something automatic with the same level of power, I wonder? This is a great example of an area where user interaction experts can really have a lot of impact, and I think shows why engineers ought to be more accepting of disciplines like that.

</comment><comment><USER3> Hi folks -- I've been working with Shaun on the tail end of this project.

Have an early prototype of Parinfer working with the Atom editor here: [https://github.com/oakmac/atom-parinfer](https://github.com/oakmac/atom- parinfer)

It's pretty early software, but feedback appreciated :)

<comment><USER4> Parinfer + Atom -- what a dream come true. Awesome work. (Edit: just took it for a spin, and it "just works", even with atom-vim -- doubly awesome. I really feel like having to navigate parens while learning the language was such a barrier to diving in to ClojureScript. Cant wait to get started.)

<comment><USER3> This comment makes me so happy; thank you :)

I'm glad it "just works"!

<comment><USER5> Your project seriously makes me want to learn lisp.

<comment><USER6> Me too!

And I already wanted to learn Lisp. Because I kind of half-assumed this tool to be there already :-P

I always assumed, obviously Lisp didn't get this popular if people had to keep track of all their parentheses. Sure they probably had to in "the old days" (although I wonder even when?). It just seems like a tedious thing to have to do in order to work with such a consistently structured language.

Of course you can get most of it with highlighting matching parens and auto- formatting shortcuts. Like most languages.

But I kind of expected Lisp tooling to go the extra mile. Because it is _that_ structured.

From my limited knowledge of Lisp, I figured some vague ideas on how such a tool would work / should be designed. It's kind of cool to see that the author's initial steps match up with that idea: define a grammar, some invariants, and "have at it" (ok, so I didn't figure that far). And then he made it work!

Maybe a silly question, but since the author is in this thread: Was it hard to make? :-)

BTW the idea of switching between these two modes is a very clever approach to keeping certain invariants invariant while still being able to modify the code --because the trivial way to preserve the invariant would be the tool immediately reverting your edit :)

</comment></comment></comment></comment></comment><comment><USER7> I don't know what's more impressive: The work itself or the beautiful documentation which accompanies it. Very impressed!

</comment><comment><USER8> For emacs, there's the electric-indentation-mode and the fantastic aggressive- indent-mode.

[https://github.com/Malabarba/aggressive-indent- mode](https://github.com/Malabarba/aggressive-indent-mode)

<comment><USER9> A more direct comparison for Emacs would be `adjust-parens`:

[https://elpa.gnu.org/packages/adjust- parens.html](https://elpa.gnu.org/packages/adjust-parens.html)

<comment><USER10> Wow! This is fantastic! This seems to do just what Parinfer does. Why isn't this mode more well-known?

This makes it even better:

        (defun my/lisp-dedent-adjust-parens ()
          (interactive)
          (save-excursion
            (x4-smarter-beginning-of-line)
            (call-interactively 'lisp-dedent-adjust-parens)))
        (defun my/lisp-indent-adjust-parens ()
          (interactive)
          (save-excursion
            (x4-smarter-beginning-of-line)
            (call-interactively 'lisp-indent-adjust-parens)))
        (local-set-key (kbd "<M-left>") 'my/lisp-dedent-adjust-parens)
        (local-set-key (kbd "<M-right>") 'my/lisp-indent-adjust-parens)

Now you can just M-left and M-right to adjust the indentation of any line, regardless of where the point is, and adjust-parens fixes the parens for you.

</comment></comment></comment><comment><USER11> Wow, this is a fantastically documented and executed idea. I'm not enough of a Lisper to have an opinion on the content (though it certainly seems cool), but the presentation is top notch.

<comment><USER12> As a lisper, the content is similarly well executed. It's a rarity to see both in one place.

</comment></comment><comment><USER13> > Most programming languages have several syntax rules. Lisp has one: > everything is a list.

Oh, not again.

The author is confusing s-expression syntax with Lisp syntax. Even s-expressions are more than lists (conses, cyclic conses, symbols, vectors, strings, various numbers, structures, ...) and the s-expression reader knows about more than pure s-expressions - for example comments.

Not every s-expression is a valid Lisp expression. For example (let "let") is not a valid Common Lisp expression. The syntax for LET is:

        let ({var | (var [init-form])}*) declaration* form* => result*

This is also using the syntax definition for 'declaration' and 'form'.

Lisp has built-in syntax (provided by special operators in Common Lisp) and arbitrary complex syntax provided by macros.

This is valid for other languages with a notation based on s-expressions, like Scheme or Clojure.

<comment><USER2> We all knew what it meant, including the author. This is pointlessly pedantic.

<comment><USER14> I'm the first to call out grammar nazi's and pedantic crap. Despite that, lispm is right to call it out for a correction. It's a factually inaccurate statement that's gives non-LISP readers a misleading impression about what the language and its machine code are likely capable of. It's also spread like wildfire due to constant repetition as lispm noted.

So, it's worth mentioning and replacing with something more accurate.

</comment></comment></comment><comment><USER15> Looks like what Jetbrains would implement if they implemented a proper Lispy language support.

Very nice.

<comment><USER16> Am I the only one who is _incredibly annoyed_ by how Jetbrains IDEs indent code?! Really, the fact that they totally fail to indent even mildly broken code is infuriating. At least ten times a day I feel like yelling at webstorm "YES, I know that that code is broken, that there are two unpaired {s and one unpaired ', but I'll fix that F LATER! NOW I just want to type this code _here_ and have it properly indented even if there's broken code 10 lines above it and 20 lines below it. I KNOW, and I DON'T care NOW!".

I just want to download stuff from my head to the editor before I forget it, then later fix the mess, and have the IDE/Editor still help me in the meantime. If it needs to temporarily revert to a caveman-style indent-like- the-previous-line or event to temporarily _disable_ auto-indent, I'm ok with that, but don't horribly mess up what I type in failed attempts to semantically auto-indent broken code that I don't wanna fix _right now_...

<comment><USER17> No - you aren't the only one, this infuriates me sometimes. The worst is when you have a file that someone accidentally mixed indentations or something, or use 2 spaces instead of 4 (even 4 spaces seems to break for me) for continuation/promise stuff. I'll enter insert mode and it'll be in-explicably tabbed out 5-6 times further than it should and I have to exit insert mode and manually move over to the correct spot or finish typing the function in shit- mode then manually fix the indenting. There's been several times where I've given up in frustration and opened up VIM or sublime text because I don't want to deal with it anymore.

<comment><USER18> Parsing correct code is easy. Parsing broken code is really hard because they have no way to predict the mistakes people will make.

</comment></comment></comment></comment><comment><USER19> Good to see more people working on editors for Lisp, but I don't really see this as an improvement over the (immaculate, IMO) Paredit for Emacs.

<comment><USER20> If it lets people write lisp with the same ease of writing Javascript or Python (i.e. without investing time learning a tool specifically for editing s-expressions), then that's an advantage over Paredit kinda like Sublime's advantage over Vim/Emacs.

Trying it out in Atom, it looks really promising. You just kinda start writing, like on the blank line at the end of a function body, and Parinfer fills in the parens depending on your indentation level in an intuitive fashion, merging your form into the tree above it.

In fact, it seems to strictly complement Paredit. Parinfer puts the parens where you want them, and Paredit is there for explicitly editing the tree.

<comment><USER21> Did I miss something and Sublime somehow got some advantage over Emacs? When did it happen and what kind of advantage, exactly?

<comment><USER22> Sublime Text's advantage in this context is the advantage that all GUI text editors share, including Atom and GEdit. This advantage is a combination of being more familiar and having better defaults.

Some ways that Sublime is more familiar are that it uses the OS-standard editing hotkeys, such as moving by words with Ctrl-arrows or Option-arrows. It also uses OS-standard terminology, like "close window" instead of "kill buffer" and "paste" instead of "yank". The result is that new users don't have to learn anything to be productive – they just edit as if they are in Microsoft Word, while enjoying the programming-specific features of a text editor such as syntax highlighting and block folding.

The better defaults include easily creating more than one scratch buffer (just run "New File" multiple times), automatically balancing parens when you type, support for pixel-by-pixel smooth scrolling, and scrollbars that don't confusingly shrink when you start scrolling past the end of the buffer. I'm sure Emacs supports all these things, but you have to manually configure it to do so first. Many users are scared off from Emacs after seeing that it requires up-front investment to get features that other editors already provide with no work.

<comment><USER21> > more familiar

To whom? There is still a _huge_ number of incompatible text editor cultures. Mac bindings, Microsoft bindings, Wordstar, etc.

> better defaults.

There are dozens of "better" .emacs pre-cooked packages. Choose any. No need to stick to the out of the box defaults.

> OS-standard

Which OS?

> he result is that new users don't have to learn anything to be productive

The "new" users had to learn all those "OS default" bindings and terminology first. Not that "new" in my book then.

> it requires up-front investment

They simply forgot their up-front investment into learning the defaults of their chosen OS. I understand that - I still cannot use Microsoft Office, can't be bothered to learn it.

So, the only advantage is familiarity to those who already invested a lot of time into learning something else. Nothing of a value for the _new_ users.

<comment><USER22> Yes, pre-cooked packages of defaults make things a lot easier for new users, but not quite equivalent to GUI text editors. I don't get the impression that most people being introduced to Emacs are told to use a package of defaults. I think a lot of users will want to try out Emacs, so they download Emacs, then try to configure some things they don't like by Googling the specific issues. After they have too big a list of things they don't like about the defaults, they go back to their old editor, without ever learning of the existence of defaults packages. Which is a shame.

Apart from defaults, I agree that GUI text editors provide no advantage to _completely_ new users. But I'm not sure that " _new_ users" of text editors, unfamiliar with OS conventions, is a category worth talking about – I think it's really small. It shouldn't take more than a year for a new computer user to absorb the OS conventions while browsing the web and writing documents. And how many people might want to try out Emacs within their first year of using a computer?

I guess that about 10% of eventual programmers started trying out programming in their first year of computer use – the other programmers started later in life. The number of fledgling programmers who care about editors enough to look into Emacs has to be even less than that – it's probably something like 1% of all programmers. The other 99% of programmers will find GUI editors more familiar than Emacs, because they have already internalized the conventions.

<comment><USER21> > GUI text editors

Emacs is a GUI text editor too, btw.

I can be wrong, but my impression was the opposite - all the new tutorials I saw recommended one or another starter pack with all the bells and whistles out of the box.

> while browsing the web and writing documents

I'm not sure if a proportion of users who write documents in a specialised software (like Word) is significant enough. And web browsing is largely clicking, no hot keys are used in general, so no habits to be picked up.

Another thing to consider is that now more and more users are coming from mobile platforms, without any desktop exposure whatsoever. For them, any desktop conventions are equally alien.

<comment><USER22> Good point, I hadn't considered the new generation of mobile-first users.

> I'm not sure if a proportion of users who write documents in a specialised > software (like Word) is significant enough.

I thought that most computer users learn to use computers while in school, for which they use a word processor to write essays and reports for the teachers. From around 2004 to my graduation in 2009, my middle and high school's teachers even _required_ essays to be typed and printed, so that they wouldn't have to struggle to read students' handwriting.

I guess some students prefer writing essays on paper, but those students probably wouldn't become potential Emacs users.

Am I missing a common backstory for programmers that doesn't involve using computers to write reports for school?

<comment><USER21> To be honest, I'm not quite aware of the current school requirements here, in my days all reports were hand written. But I've seen quite a lot of young people (here in the UK, do not know about the other countries) who obviously got no defining exposure to any desktop software at all. It is almost funny to see people discovering the copy and paste idea for the first time.

And with all the tablets and smartphones, even the basic touch typing skill is now extremely rare among the young.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER23> Wow, I totally want to do my programming with this now... is there support for matching indents on 'let, as with align-cljlet?

</comment><comment><USER24> Taken a step further, a structural editor could prevent incorrect syntax outright, and even allow you to view/edit the structure of your code in ways that simple syntax-highlighted text cannot.

Here's one such experimental editor: [https://github.com/darwin/plastic](https://github.com/darwin/plastic)

Edit: I see now that Parinfer refers to Plastic under its Acknowledgements section. :)

</comment><comment><USER25> I'm wondering what Parinfer would feel like if used when editing the expression to submit in a REPL. (In other words, it could be nice outside of source editors.)

<comment><USER20> This is a good point. I immediately dismissed Clojure when I played with the in-browser REPL [http://www.tryclj.com/](http://www.tryclj.com/). Within moments, I imagined the daily plight of the professional Clojure developer tediously balancing parens like I had to do in that REPL.

Had I known how polished my workflow would be a year later with Paredit + Emacs in-buffer line-by-line code evaluation, or that tool-supported s-expression editing would let me write/refactor/move/nest code much faster than in other dynamically-typed languages, I would've stopped what I was doing and started learning Clojure immediately.

But you don't know any of that if you're someone going to [http://www.tryclj.com](http://www.tryclj.com) for the first time.

Seems like Parinfer could be used in environments where you don't have Paredit available or, perhaps more importantly, where the user hasn't already credentialized in a niche tool for editing s-expressions.

</comment></comment><comment><USER26> In the Parinfer introduction, 'C Style indentation' is mentioned.

What I can't understand is why 'C Style indentation' isn't the default convention, at least in modern user-friendly Lisps. One of the biggest problems people have with Lisp is the readability of grouped parentheses, but the C Style indentation example shows you can write Lisp without them.

I get that it's nice when programs fit in less lines of code, but isn't readability more important than line count?

<comment><USER27> C brace style has nothing to do with readability. Indentation alone shows the block structure just fine; Python proves this.

The purpose of C brace style is to make _editing_ easier in primitive editors that don't do delimiter matching. In such an editor, selecting where, in a long string of closing delimiters, to insert a new element requires counting the delimiters, which is tedious and error-prone. With delimiter matching, the editor does the work for you, so splitting delimiters across lines is completely unnecessary.

<comment><USER28> Eh, yes and no. Python at least has `elif` statements.

When execution control depends on the order of nested arguments, I find "c" style to really enhance the following contrived example, even with rainbow parens:

      (if true
        (whatever this is an (example
           that is (kind of hard)
             (-> to
               (read %))))
         (this is an ELSE but hard to figure out))

<comment><USER20> Your example arbitrarily indents and new-lines. If that's what's on the table, then nothing is really going to help you.

        if (x
        > 100) { console
          .log('hello') } else
        { console.log
        ('world')}

When it comes to if/else and if you indent with some sanity, then lisp is like Python: if the 'else' branch is too hard to spot or if you forget the context by the time you reach the 'else', then your 'if' branch is simply too many lines long. Or you should flip the condition so that the short branch comes first.

Meanwhile, I can't even write your lisp example as-is in any of the editors I tried it in.

</comment></comment></comment></comment><comment><USER29> When I started working on a Clojure web app full time, I forced myself to spend a week learning and configuring Emacs, and learning Paredit.

To this day I have not found a tool that works as well as Paredit for editing and navigating s-expressions.

Parinfer looks like a cool subset of Paredit's abilities. I'd love to see it expanded to include all of what Paredit can do.

EDIT: I was mistaken, Parinfer does things Paredit doesn't. They could totally work together, that'd be pretty awesome.

<comment><USER30> I see no reason they couldn't coexist. Parinfer to guess paren insertion; paredit to cover the operations parinfer can't infer.

I'm more concerned that Parinfer appears to be modal, based on whether you manage indentation or parens. This seems overly complicated; it would be nice if there's some elegant way to merge the features of both into one mode. But I don't know how to do this, and I haven't actually used Parinfer, so maybe there's nothing to worry about.

<comment><USER31> It looks like one of the modes is mainly intended for fixing unmatched parens before switching into the other mode.

</comment></comment></comment><comment><USER32> You've done great work. But speaking as an old lisp programmer it doesn't seem useful.

Code, for me, is a means of communication with both the machine and the human reader. The machine doesn't care about lisp indentation but code format matters when trying to communicate with human readers. Communication with future readers, including yourself, is what makes programs maintainable.

Pretty-printing is fine since the code format follows a standard, which makes it easy to ignore and easy to read, generally a "good thing". On the other hand, there is information in the choice of code format, similar to the information found in a poetry format.

Properly indented code is "good code" and, over time, is likely to be what flows from your fingers regardless of the editor. But excellent code is an art form that requires thought. Lisp is a language where indentation is meaningless but shape communicates. It is not something to delegate to an editor.

</comment><comment><USER33> Emacs people, I want this.

<comment><USER10> [https://elpa.gnu.org/packages/adjust- parens.html](https://elpa.gnu.org/packages/adjust-parens.html)

</comment></comment><comment><USER34> I would even find this useful when writing python and defining nested dictionaries and lists.

</comment><comment><USER35> Wow, this is really something. I never really thought about it and assumed that paredit would be as good as it gets. But, this seems to show that is not the case. I really need to check this out.

</comment><comment><USER36> Wow! This is really impressive! I can't wait until someone ports this to vim. I might even take a stab at it myself. Great work!

</comment><comment><USER37> I'm curious about this point from the article:

> And alternative syntaxes (Lisps without parens) have faultered since they > sacrifice some of Lisp's power that seasoned users aren't willing to part > with.

Could Elixer be an example of one of these Lisps without parens? [1] Can anyone give an example of what kinds of Lisp powers are sacrificed in a syntax where the parens are implicit rather than explicit? I can't think of anything off the top of my head.

It seems to me that Parinfer, when working as intended, almost turns a regular Lisp _into_ one of these parenless Lisps, by performing parens manipulation for us, which in turn allows us to treat whatever Lisp we're working with as if it was a parenless Lisp.

[1]: [https://blog.8thlight.com/patrick- gombert/2013/11/26/lispy-e...](https://blog.8thlight.com/patrick- gombert/2013/11/26/lispy-elixir.html)

<comment><USER22> I think the author is talking about minor variations on Lisp syntax that include indentation-sensitivity, not about different languages that are homoiconic. Such variant syntaxes include i-expressions ([http://srfi.schemers.org/srfi-49/srfi-49.html](http://srfi.schemers.org/srfi-49/srfi-49.html)) and sweet-expressions ([http://readable.sourceforge.net/](http://readable.sourceforge.net/)), which the author mentions in the Acknowledgements. For example, here are some sweet- expressions:

      define factorial(n)
        if {n <= 1}
          1
          * n factorial(- n 1)

This desugars to:

      (define (factorial n)
        (if (<= n 1)
          1
          (* n (factorial (- n 1)))))

I think the Lisp power that the author is referring to is homoiconicity, and the corresponding ease of writing macros. For example, i-expressions sacrifice homoiconicity in some contexts.

But the author seems to have overlooked that sweet-expressions, which were developed later, do not sacrifice homoiconicity. A human reader can still easily understand the AST from reading sweet-expression syntax. The real reasons that sweet-expressions have faltered relate more to the increased difficulty of collaborating with other developers, the lack of editor plugins that highlight sweet-expressions correctly, and incompatibility with Clojure syntax.

</comment></comment><comment><USER38> Eh, not sure I like it. For this to work, they have to make the indentation part of the syntax. Otherwise stuff is way too ambiguous to infer the correct parenthesis. A result is that the programmer has to be intimately familiar with how the inference works and what the syntax of indentation is. I feel that this just shifts cognitive load from managing parenthesis to managing indentation and inference. From the documentation:

      The rules for what happens when inserting/deleting parens must be
      learned. Also, the case necessitating a "Paren Mode" comes at the
      cost of forcing the user to understand when and how to switch
      editing modes.

      Also, the preprocessor step performed when opening files will cause
      more formatting-related changes in your commit history when
      collaborating with others not using Parinfer.

<comment><USER3>
      they have to make the indentation part of the syntax

The syntax remains unchanged. Parinfer only "infers" the structure of your code based on the same indentation that you typically would do anyway as part of formatting your code to be readable.

      shifts cognitive load from managing parenthesis to managing indentation

Yes, exactly :)

</comment></comment><comment><USER39> Love the fact that it is written in Clojure

</comment><comment><USER40> In the example:

      (foo [1 2 3
            4 5 6
            7 8 9])

How does one change it to:

      (foo [1 2 3]
           [4 5 6]
           [7 8 9])

?

edit: Ah, it works if you put all the forms on one line. I suppose it would be considered non-standard to indent that particular syntax in such a way.

<comment><USER3> You could also just put a "[" in front of "4" and "7".

Parinfer will infer the closing brackets.

<comment><USER40> That yeilds

      (foo [1 2 3
           [4 5 6]
           [7 8 9]])

</comment></comment></comment><comment><USER41> A beautifully written web site. It made me happy just to look at it.

I haven't been doing much Clojure or Common Lisp development this year but I am putting Parinfer on my look-at list.

</comment><comment><USER42> If I go to lisp for day to day work, I plan on using the syntax from SRFI-110 to encourage other people to work with me: [http://srfi.schemers.org/srfi-110/srfi-110.html](http://srfi.schemers.org/srfi-110/srfi-110.html)

Even if the code at rest is in S-expression syntax, editing it in this syntax would be slick.

</comment><comment><USER43> Very neat demo, I hope it gets integrated into the major Clojure IDEs soon as it could make the onboarding experience smoother. I'm happy with just vim though -- I never liked the fashion of editors inserting/deleting/replacing non-whitespace characters (even that took a while to get used to) when they think they can to 'help' me.

</comment><comment><USER44> This is great! I would love to see similar functionality integrated into Dr. Racket.

</comment><comment><USER14> Great improvement on dealing with the parentheses!

</comment><comment><USER45> Is there a version of this site without the distracting animated text, so I can see what is going on?

<comment><USER46> The main way to see what's going is is the animated text -- because what's going on is live re-indenting of code.

</comment></comment><comment><USER47> I look at it and keep wondering why it hasn't always been this way.

</comment><comment><USER48> What tools did you use to make the documentation? It's excellent.

</comment><comment><USER49> Man I wish the paren management stuff for vim didn't suck.

</comment><comment><USER50> This would make `git diff` an absolute nightmare.

<comment><USER3> I can speak to this as I've been using Parinfer on existing code for the last week or so.

There can potentially be a "big diff" when you run Paren Mode on a file for the first time, but that's typically a one-time event. The beauty of Parinfer is that most Lisp code already uses these conventions.

Once you start using Parinfer's Indent Mode regularly it feels crazy to write or edit lisp without it.

One of my plans for atom-parinfer[0] is to have a comment flag in a file that will automatically signal "use Parinfer on this file". Similar to JSHint inline configurations [1].

[0] [https://github.com/oakmac/atom-parinfer](https://github.com/oakmac/atom- parinfer) [1] [http://jshint.com/docs/#inline- configuration](http://jshint.com/docs/#inline-configuration)

</comment></comment><comment><USER51> As an aside, I love the lego diagrams.

</comment><comment><USER52> Automagical.

</comment><comment><USER53> Made just good enough to get a job Rejection</comment>


Symmetry454 - <AUTHOR> https://en.wikipedia.org/wiki/Symmetry454 <comment><USER3> I love it when ideas that have absolutely no chance of adoption get fully thought through anyway. Esperanto is a similar idea for language - <USER2> moonshotty, but complete.

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

<comment><USER4> Esperanto has actually been criticized for being half baked. There's this whole website on the subject from a respected expert. In particular it's really eurocentric.

<comment><USER5> I assume you mean [http://jbr.me.uk/ranto/](http://jbr.me.uk/ranto/)

</comment></comment></comment><comment><USER6> The two problems as I see it:

\- A leap week is worse than a leap year. 7 days of birthdays that just don't exist most years.

\- No variety in day of week for your birthday. I know it's just a cultural thing, but always celebrating a birthday on say a Tuesday sounds depressing to me.

<comment> martin-adams Also the excessive variability of being paid monthly but having only 4 weeks of expenses vs 5 the next would be a challenge.

<comment><USER7> I assume if the entire world is spending billions of dollars reworking culture, infrastructure, software, etc., that swapping to making weekly pay the norm is just a bit of noise in that transition.

<comment><USER8> I wonder what the gamification effect would be if we paid everything by the second. I think for example transitioning from social support to employment would be more attractive.

Switching everything to any other system all at once would indeed be a huge waste of money.

</comment></comment></comment></comment><comment><USER9> [https://qntm.org/calendar](https://qntm.org/calendar)

</comment><comment><USER10> They need to give the months different names, so the two can coexist as long as needed.

Worldwide flag days are fatal to progress.

</comment><comment><USER11> I've been thinking about alternative calendars recently. This is quite interesting. I wonder if we will ever get to a point that we can have a "base 10" calendar (10 day weeks, 10 months in a year, etc.)

I suppose in-grained traditions that are so hard to change (birthdays, memorials, etc.) make this nigh impossible.

<comment><USER12> Too much risk that 10 day weeks would end up still only having a 2 day weekend off of work leaving an 8 consecutive day work week.

<comment><USER13> What?

The obvious conclusion is that they would have only 1 day off.

</comment></comment></comment><comment><USER14> The thing is though, our current calendar, while maybe not super logical and/or always practical, is not broken in the sense that we're dealing with major unfixable problems. So changing to anything other than what we currently have is creating more issues than it's trying to solve.

And I say that as a purist and nitpicker who loves everything being perfect and organized.

</comment><comment><USER15> [https://en.wikipedia.org/wiki/International_Fixed_Calendar](https://en.wikipedia.org/wiki/International_Fixed_Calendar)

Sounds similar, and IMHO a bit better, because every month is the same and has only one leap day, instead of a whole leap week.

</comment><comment><USER8> My [alarm] clock displays unix time and a count down in seconds. After a few years I've only partially got used to it. The half alseep version of me does appericate the count down a lot. I just remembered I should experiment counting the seconds of the day.

</comment><comment><USER13> Friday the 13th doesn't exist on this calendar. Neither do it's cousins Friday the 17th and Tuesday the 13th. Interesting.

This sounds great except the fact it would be a complete nightmare for developers the world over.

</comment><comment><USER16> I remember in 2004 being fascinated with the tons of alternative proposals to the current calendar. Read about them on the kind of sites one can now find using wiby ;)

</comment><comment><USER17> The irregular-length years must cause the equinoxes and solstices to shift around, although probably not enough to notice.

<comment><USER18> by up to a week over a 6 year period rather than up to a day over a 4 year period.

</comment></comment><comment><USER19> Why having months at all if they don't correspond to moon?

<comment><USER20> Why have a horsepower if it doesn't correspond to a horse?

<comment><USER21> That's why they're trying to make us conversation to kilowatts

</comment></comment></comment><comment><USER22> Lousy Smarch weather!</comment>


Linux Assembly How-to - <AUTHOR> http://www.tldp.org/HOWTO/Assembly-HOWTO/index.html <comment><USER2> I was quite adept at 6800 and 68000 assembler but I can't imagine getting to that level with modern x86. Maybe some glue routines, but beyond that give me any of the current compilers.

<comment><USER3> [https://nickdesaulniers.github.io/blog/2014/04/18/lets- write...](https://nickdesaulniers.github.io/blog/2014/04/18/lets-write- some-x86-64/)

<comment><USER4> It looked promising right up until the first code, and then I saw you're writing in AT&T syntax. AT&T syntax is such an abomination against nature and the gods of computing that every time I see it I want to gouge my eyes out.

AT&T syntax is this weird awful syntax only used by GNU as. The syntax is some leftover from an assembler from the early UNIX days which was clearly written by a very lazy person. Whoever came up with it apparently thought to themselves, "If we make source files put a % character in front of registers and a $ character in front of constants, then I don't have to think too hard about how to write a parser. If we make source files specify their width in a suffix, then we don't have to think too hard about how to get this information out of the register name. And let's put our operands in (source, destination) order instead of (destination, source) order just to be evil and confuse people!"

Aaagggghh. If gas wasn't used as the backend of gcc, I guarantee exactly zero people would use it, because AT&T syntax is so awful.

You should consider posting an update using NASM / YASM (or if you feel you must use GAS, use its directive for Intel syntax). Your readers will thank you.

<comment><USER3> You should do it on your blog.

</comment></comment></comment></comment><comment><USER5> From [http://www.tldp.org/HOWTO/Assembly- HOWTO/external.html](http://www.tldp.org/HOWTO/Assembly-HOWTO/external.html):

About m4 macro-processor: "However, its disfunctional quoting and unquoting semantics force you to use explicit continuation-passing tail-recursive macro style if you want to do advanced macro programming (which is remindful of TeX -- BTW, has anyone tried to use TeX as a macroprocessor for anything else than typesetting ?)."

This is a great point! The TeX Macro language is so much better than M4 quoting syntax. I'd love to have it available for e.g. writing blog-posts in HTML or coding.

It seems that the tex macroprocessor can not be used independently of latex, which is a pitty. There are m4 clones with TeX-like syntax (e.g. [http://www.nongnu.org/t4/](http://www.nongnu.org/t4/)) - but none of those seems to be used much.

To see what's possible with just assembly and macros see Tannenbaums paper: [https://www.computer.org/csdl/trans/ts/1976/02/01702350.pdf](https://www.computer.org/csdl/trans/ts/1976/02/01702350.pdf)

<comment><USER6> I'm a fan of TeX2page[1] for converting (La)TeX to HTML. There are also similar TeX/Scribe-inspired markup processors. Scribble[2] comes to mind, and Chibi Scheme[3] even comes with a very lightweight, very configurable "Scribble" processor in the form of `chibi-doc`. Chibi's flavor is a little more similar to TeX (using '\' as the leader rather than '@', for example), if that's important to you.

[1]: [https://ds26gte.github.io/tex2page/index.html](https://ds26gte.github.io/tex2page/index.html)

[2]: [https://docs.racket-lang.org/scribble/index.html](https://docs.racket- lang.org/scribble/index.html)

[3]: [http://synthcode.com/wiki/chibi-scheme](http://synthcode.com/wiki/chibi- scheme)

And here's Chibi's own manual written in it: [https://github.com/ashinn/chibi- scheme/blob/master/doc/chibi...](https://github.com/ashinn/chibi- scheme/blob/master/doc/chibi.scrbl)

I think it would be freakishly easy to adapt chibi-doc into a general text preprocessor rather than an HTML generator, and honestly I've thought about it before. I may just do it yet :)

<comment><USER5> Wow, tex2page looks really great. I'll might setup a JEKYLL workflow for using it to write blog posts. LaTeX doc semantics are so much better than Markdown / HTML.

Also I can see a LISP style macro processor being super awesome. Let me know if you are going to adapt chibi-doc that way.

</comment></comment></comment><comment><USER7> Trying to read through "Programming From the Ground Up" (a GNU book on Assembly), and having some trouble keeping track of what I've thrown into what register.

Does anyone have a recommendation for an IDE or debugger that can let me inspect my registers at a given step of the program?

<comment><USER8> gdb is magic once you get the hang of it, I'd definitely recommend spending some time getting comfortable with it.

<comment><USER7> I know my way around GDB, but only as a C debugger. Haven't really used it for Assembly.

<comment><USER9>
      (gdb) help si
      Step one instruction exactly.

      (gdb) help ni
      Step one instruction, but proceed through subroutine calls.

      (gdb) help info registers
      List of integer registers and their contents, for selected stack frame.
      Register name as argument means describe only that register.

      (gdb) layout reg # to enable view of registers in split screen

Also, you can use register names in expressions. e.g. p $r11

All of this is applicable when debugging a C program as well.

<comment><USER7> `layout reg` Did exactly what I wanted. Thank-you so much!

</comment></comment></comment></comment></comment><comment><USER10> It would be nice to see this document updates, pages like [http://www.tldp.org/HOWTO/Assembly- HOWTO/gcc.html](http://www.tldp.org/HOWTO/Assembly-HOWTO/gcc.html) still references gcc 2.7 and older.</comment>


Pussy Riot members freed from prison - <AUTHOR> http://www.usatoday.com/story/life/music/2013/12/19/pussy-riot-members-freed-from-prison/4123959/ <comment><USER2> They are still in prisons and are due to be released according to the amnesty law that was passed. It may take up to six months for them to get out according to the text of the law. Their sentences end in March, so it's unclear at this point whether they will even benefit from the amnesty.

</comment><comment><USER3> +1 Putin :-)

<comment><USER4> They were peaceful dissidents imprisoned by him for complaining about him. Releasing them is good, but there is still all of that stuff they were protesting about...</comment></comment>


Amazon just entered the food delivery game - <AUTHOR> http://www.theverge.com/2014/12/7/7349981/amazon-local-restuarant-delivery-in-seattle

<comment><AUTHOR> I knew this was coming for a long time. I work for an Aluminium products manufacturer in NW Kansas and we've been building material handling solutions for Amazon for over a year now.

</comment><comment><USER2> Makes sense from a strategic point of view. Amazon becoming the marketplace for any kind of purchase.</comment>


Evil Oracle says Java 7 will not support VMware and Microsoft Hypervisor - <AUTHOR> http://weinshenker.net/blog/2011/07/28/oracle-playing-fair-vmware/ <comment><USER2> I think they said they wouldn't support you in case something went wrong, not that it won't run under VMware or Hyper-V.</comment>


Comma-Separated Tree - <AUTHOR> https://observablehq.com/@mbostock/comma-separated-tree <comment><USER2> I've often found it's better to be more verbose in situations like this, but providing the "tree" entries as rows.

      name,value,color
      World
       Asia
        China,1409517397
        India,1339180127
        Indonesia,263991379

becomes

      region,subregion,country,value,color
      World,Asia,China,1409517397
      World,Asia,India,1339180127
      World,Asia,Indonesia,263991379

This still compresses very nicely, and allows data to be output in any order. The tree form is more of a presentation thing, which should be the last step of a data processing pipeline. As it is, the tree nodes themselves have no names or context, so it makes it harder to consume. Is the second-level entry a region? Easy to tell from this example, but if you're consuming a large data set you're forced to first give names to these columns.

<comment><AUTHOR> Your suggestion requires a fixed-depth hierarchy (such as three levels in your example), and then it requires a lot of redundancy. Here, I want to eliminate the redundancy not primarily for performance reasons, but to make it easier to edit the data by hand, for example to cut-and-paste some lines to move them around within the tree without having to change the leading values.

To get a sense of what I mean, see this editor which lets you interactively construct a treemap: [https://beta.observablehq.com/@mbostock/treemap-o- matic](https://beta.observablehq.com/@mbostock/treemap-o-matic)

<comment><USER3> Something that I've used in the past: store the hierarchical data as a breadcrumb-like string in an ordinary column. This means the parsing is just ordinary csv parsing, followed by a relatively trivial extra step to parse the breadcrumb columns. You also retain the ability to describe arbitrary depth hierarchies:

        country,value
        World/Asia/China, 1409517397
        World/Asia/India,  1339180127
        World/Asia/Indonesia, 263991379

An added benefit of this approach is that you can have hierarchies in multiple columns. For example:

        datetime, source_account, destination_account, amount
        2016-07-01, Assets/ProjectFunding, Assets/Capital/Delivery, 134.2
        2017-07-01, Assets/ProjectFunding, Assets/Capital/Delivery, 72.2
        2016-07-01, Assets/ProjectFunding, Assets/Capital/Other, 5.0
        2016-07-01, Assets/ProjectFunding, Expenses/Development, 4.7
        2017-07-01, Assets/ProjectFunding, Expenses/Development, 1.6
        2017-07-01, Assets/Cash, Expenses/OPEX, 0.96
        2018-07-01, Assets/Cash, Expenses/OPEX, 1.62

<comment><USER4> That has the meta-problem of only allowing two different levels of hierarchies. For one more, you'd have to introduce a new separator.

I feel like the fixpoint of this function is going back to only one separator, or something, but I am not seeing the reasoning clearly.

</comment></comment></comment></comment><comment><USER5> A well-known format in phylogenetic tree software circles is the Newick format:

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

</comment><comment><USER6> I would call "Comma-Separated Trees" a subtype of Tree Notation ([https://github.com/breck7/jtree](https://github.com/breck7/jtree)). The first time this style of notation appeared was in Egil Möller's SRFI from 2005 ([https://srfi.schemers.org/srfi-49/srfi-49.html](https://srfi.schemers.org/srfi-49/srfi-49.html)).

I really enjoy this style of format. It makes reading and writing structured data a breeze, and can handle any format with no escaping save indentation. You can embed csvs,tsvs,psvs, et cetera, right in the tree, like in these Comma-Separated Trees. You can write a grammar file to ensure strong type checking. Finally, you can easily do conversions "fromCsv/toCsv, fromJson/toJson, fromXml/toXml, fromSql/toSql" et cetera...

Here's another example showing an embedded PSV (and also same type later expressed as a tree) and some source code embedded showing how you don't need escaping.

      cobol
       books
        title|year|author|id|rating|ratings|reviews
        Cobol Programming|1983|M.K. Roy|4944251|4.11|9|1
        Structured Cobol Programming|1979|Nancy B. Stern|9030220|4.33|15|0
       fileType text
       year 1960
      lua
       fileType text
       books
        book
         title Programming in Lua
         year 2001
         author Roberto Ierusalimschy
         id 1321894
         rating 3.97
       example
        function factorial(n)
         local x = 1
         for i = 2, n do
           x = x * i
         end
         return x
        end

</comment><comment><USER7> No disrespect to mbostock, but I'd have used S-expressions, which can still be indented for readability without being brittle to indentation mistakes.

<comment><AUTHOR> Use whatever you like. There's not one data format that will be perfect in all situations. While S-expressions are more explicit, they also make it more likely that you'll get a syntax error because of mismatched parentheses. The purpose of this format is to make syntax errors almost impossible (at the expense of possible ambiguity), to favor interactive editing as in the Treemap-o-Matic example I've linked.

<comment><USER8> Significant whitespace is syntax. Errors will happen, a lot, and the parser will have no chance to catch it.

<comment><AUTHOR> The parser has well-defined behavior for malformed whitespace, and it's not to throw a syntax error: if you advance the indentation by more than one space on a following line, the extra spaces are ignored.

<comment> munk-a Wait so...

        a
        ..b
        ..c

Would be interpreted as (a (b (c)))

<comment><AUTHOR> That was the initial behavior, but I've changed it to ignore missing intermediate parents. Your example would be (a (b c)). See the "Handling ambiguity" section I added to the notebook. The nice property of this design is that you can use whatever indentation style you prefer (tabs, 2x spaces, 1x space, etc.) and it will do what you expect as long as you are consistent.

<comment> munk-a Oh neato.

I still think there's something for the philosophy of developing tools that expect a strict format and fail if that format is violated. I've worked in a variety of settings and with a variety of tools, as time goes by I am finding the value of tools that are strict about expectations to provide a more maintainable product over the long haul. If I were writing a project using this style I'd prefer to receive a parse failure in the case of ambiguity, rather than carrying on and hoping it is correct.

If data correction needs to happen (i.e. one file that should be single-space indented is triple space indented) I'd prefer to explicitly pre-process the data rather than have a tool that can handle it gracefully.

</comment></comment></comment></comment></comment></comment></comment><comment><USER9> I tend to be wary of semantic white space. It is so easy for some tool or function to screw up your white space and you have a huge change in meaning that may or may not be visually apparent. I tend to prefer having characters like braces or parentheses (s expressions) denote the tree level and white space purely as non-semantic pretty printing.

<comment><USER10> I can see both sides of the sematic whitespace arguments, but CSV intentionally uses commas as delimiter to avoid the problems caused by using white-space as a delimiter. I'd rather use something that required delimiters (json, s-expr), or one that didn't (YAML, indented TSV) over an odd mix of the two.

<comment><USER11> CSV uses commas to avoid the problems of using whitespace for column delimiters, but it still uses whitespace for row delimiters. It's already an odd mix of the two.

</comment></comment></comment><comment><USER12> So if you look carefully at the ASCII code, there are some interesting characters down in the low area. Like RS, GS, FS. If we had used those in CSV, there wouldn't be all this nonsense about having to add quotes or not.

Similarly, with leading spaces to delimit fields--what could possibly go wrong?

Its ASCII, folks.

<comment> ISO-morphism Totally unsubstantiated, but my opinion on why we use commas instead of the built in record/field seperator characters is simple: the special ASCII characters don't have a cononical printed representation and they don't have keys on a keyboard to make them easy to type. Therefore they're neither human readable nor human writable, and the human interface is really what matters with a plain text serialization format.

Edit: spelling

<comment><USER13> Indeed. Otherwise we could just use a binary representation.

</comment></comment></comment><comment><USER14> Not sure what this brings over JSON.

<comment><USER15> From a comment by the author,

> to make it easier to edit the data by hand, for example to cut-and-paste > some lines to move them around within the tree without having to change the > leading values

I wouldn't even consider trying something like that with JSON.

</comment></comment><comment><USER16> How do you escape spaces in fields that start with spaces?

I think this should be specced out early to avoid falling into the trap good old plain CSV fell into, which now now has multiple ways programs escape commas.

</comment><comment><USER17> The mantra of the Real World (aka non-technical persons): CSV is an acceptable serialization format for whatever data structure you deal with.

(and the corollary: any data can be authored or visualized in Excel).

</comment><comment><USER18> Love the work you're doing on observablehq mbostock! I am really impressed with the volume and variety of content you create. Especially love the generative art stuff!

</comment><comment><USER19> I think that ObservableHQ is a really cool idea. BUT. Every time I get to the end of a notebook I am left scratching my head with how it ends.

This example is no exception. Here is how my mind interprets it...

Makes sense.

Makes sense.

Makes sense.

Makes sense.

WTF?

<comment><AUTHOR> Heh, thanks for the feedback! What you're seeing at the end here is the implementation of the parser itself.

You might not be interested in how the parser is implemented; more likely you only care about the design and usage of the proposed data format. Which is fine! But we designed Observable to share one interface for both authors and readers under the view-source philosophy that made the early web so great: all the source is there, accessible, if you do want to dive in and understand it.

But we could do a better job of making the segue from narrative to internal implementation less jarring. I've edited this post to make that more explicit with an "appendix" header for the implementation. And we've been thinking about ways to formalize this convention, so that the code is still accessible with a click or two if you want it, but doesn't distract from a normal read.

</comment></comment><comment><USER20> Why not use multiple commas, instead of spaces? The first level branches would require 2 commas, instead of one space, else it's less error prone.

</comment><comment><USER21> I love that neither the data format or the _article itself_ ever actually identify what the numbers represent.

(It appears to be population)

</comment><comment><USER22> Have you hear of YAML?

<comment><USER23> Have you heard of S-expressions? Whitespace optional:

      (World
        (Asia
          (China 1409517397)
          (India 1339180127)
          (Indonesia 263991379)))

With an editor that supports Paredit or Parinfer, it's impossible to create an invalid tree, because you manipulate the structure of the tree (nodes and leaves) instead of manipulating error-prone text.

<comment><AUTHOR> Parinfer is very cool! If you're willing to use a custom editor for trees, you can clearly offer better usability than a standard text editor. But having a usable data format for standard text editors is also nice.</comment></comment></comment>


Coding for Hospitality - <AUTHOR> http://blog.thebakery.io/post/63566867979/coding-for-hospitality

<comment><USER2> This is a maximum hospitality zone. The guests have disembarked.

<comment><USER3> They're on their way. Any second now...

</comment></comment><comment><USER4> Was good to have you bakers down in Salento! #Daje</comment>


Btcd: Not your mom's Bitcoin daemon - <AUTHOR> https://blog.conformal.com/btcd-not-your-moms-bitcoin-daemon/ <comment><USER2> I haven't been following Bitcoin very closely. This looks great, but I'm confused why the authors went to so much trouble to duplicate the existing daemon down to every last bug. It sounds like their architecture improves on the design of the original implementation quite a bit, which is awesome. But if they don't want to cause a fork in the Bitcoin community (by adding features, fixing bugs, etc.), what's the point of having a well written one over the poorly written one? Isn't the thing more or less a "locked" piece of software?

* I don't participate in the Bitcoin community, so I'm sorry in advance if this is an ignorant question! Congratulations to the authors - I think this is a pretty significant accomplishment regardless.

<comment><USER3> A "fork" of the blockchain is devastating. If you are unaware you have forked from the main chain you risk double spend attacks on all of your transactions (and mined block rewards become worthless). Thus any implementation needs to follow the exact same rules (including "bugs") for determining which transactions are valid.

That doesn't mean _every_ bug needs to be implemented. It's possible there are DOS or remote code execution bugs in one implementation but not another. Diversity between clients is a good thing. If such a bug is discovered in one client it won't take down the entire network (except currently the vast majority of full nodes use the original bitcoind implementation)

Various different architectures may have benefits too (e.x. I like how btcd is splitting the blockchain and wallet pieces into separate processes)

</comment></comment><comment><USER4> Hmm. My Mom was a trained engineer. She's no longer with us, but if she'd lived long enough to select a Bitcoin wallet, I have no reason to believe she'd have picked a poor one...

(And yes, I get the irony that they probably picked this headline out of fear that "not your dad's..." was sexist.)

<comment><USER5> Still, few moms are likely to be computer experts.

<comment><USER6> Few people are computer experts, period ;-)

</comment></comment></comment><comment><USER7> Alternate implementations make me uncomfortable. The original client is not documented much at all, and there's very little room for error.

I salute the amount of effort that's gone into this though.

<comment><USER8> Being uncomfortable about alternate implementations makes me uncomfortable.

<comment><USER7> It's a system completely designed around gaining a consensus. Any slightly differentiation in behaviour means a fork in the chain with catastrophic network-wide consequences. Both the original creator and the current developers are typically against re-implementations, with good reason.

<comment><USER9> > Both the original creator and the current developers are typically against > re-implementations, with good reason.

That is not true. Gavin Andressen supports alternate implementations. Take the following quote [1]:

"Diversity is a good thing. Diverse, inter-operating implementations of the Bitcoin protocol make the network more robust against software bugs, denial- of-service attacks, and vulnerabilities. There are several projects re- implementing Bitcoin; if you are a Java or Go or Python or C programmer who wants to see Bitcoin succeed, you should consider helping them out by reviewing, testing, or contributing patches."

He then goes on to list several alternatives, including btcd.

[1] [https://bitcoinfoundation.org/blog/?p=204](https://bitcoinfoundation.org/blog/?p=204)

<comment><USER7> Alright, it's at odds with the developers I've spoken to about it. GMaxwell cautions most developers when they attempt it, for example.

</comment></comment></comment></comment></comment><comment><USER10> Yeah, as if there weren't any nerd moms. Stop the headline sexism already.

<comment><USER11> Isn't it just ageist? After all, it implies that your mom already has a bitcoin daemon but your new one is better.

<comment><USER12> Indeed. It pretty clearly implies your mom does have a bitcoin daemon, thus making her a nerdy mom.

Having said that, the article would get more upvotes here if the headline mentioned it was written in Go. ;-)

</comment></comment></comment><comment><USER6> Not my dad's either.

<comment><USER13> Neither of my parents have a bitcoin wallet.

<comment><USER14> Sounds like a great thing to do over thanksgiving! (or some other upcoming holiday, if you're not in the states)

<comment><USER15> We have thanksgiving in Canada too!

It's earlier though (next weekend).

</comment></comment></comment></comment><comment><USER16> I think we need a version of Bitcoin that _is_ designed for my mom if widespread adoption is the goal.

</comment><comment><USER17> very cool stuff. Could some subcomponents be used for the JS implementation? ([https://github.com/bitcoinjs/bitcoinjs- server](https://github.com/bitcoinjs/bitcoinjs-server)).</comment>


How to create your own custom IFFT recipe - <AUTHOR> http://natachaspringer.tumblr.com/post/90809218248/ifft-hacking

<comment><USER2> IF Fails Then... what?</comment>


Google becomes world's first $100 billion brand - <AUTHOR> http://techcombo.com/google-becomes-worlds-first-100-billion-brand

<comment><USER2> How are they computing "brand value" ? MSFT's market cap is ~$184B, and GOOG's is ~$127B. They're just using some subjective measure?

<comment><USER3> > How are they computing "brand value" ?

I found page 6 of this pdf: [http://www.millwardbrown.com/Sites/Optimor/Media/Pdfs/en/Bra...](http://www.millwardbrown.com/Sites/Optimor/Media/Pdfs/en/BrandZ/BrandZ-2009-Report.pdf)

The summary is that it's the NPV of the brand's future earnings, multiplied by the fraction of that revenue due to the "brand" itself and not location/price/etc (this is estimated by market research experts), multiplied by an estimate of future growth (more market research hand-waving).

<comment><USER4> It's all bs, basically.

</comment></comment></comment><comment><USER5> That's a totally arbitrary list and leaves off some of the world's most recognizable brands and/or biggest companies. In comparison to Google, HP and IBM's revenues are off the charts in excess of 100 billion. In terms of profits, for tech companies, Microsoft is in a league of their own.

[http://royal.pingdom.com/2009/04/30/the-money-made-by-big- te...](http://royal.pingdom.com/2009/04/30/the-money-made-by-big-tech- companies-like-ms-google-apple-ibm-and-more/)

<comment><USER6> I think the argument is that Microsoft, HP, and IBM's revenues aren't as dependent on their brand. If Microsoft changed their name to "Bill's Awesome Software Company" their revenues wouldn't dip that much, people would still use Windows and Office.

With a company like Google the rules are different because the value is in the domain name. I think they're equating brand name with domain name, which makes for an apples to oranges comparison with companies like HP.

<comment><USER7> agree. interesting, though, to see at number 10 a company that will give you lung cancer...

</comment></comment></comment><comment><USER8> Is that picture really a photograph of a computer screen? Heard of a screenshot, guys? :P

<comment><USER9> i guess they just wanted to take a more interesting perspective.I mean a screenshot of the Google website would be very boring...</comment></comment>


The Facts In The Case Of Dr. Andrew Wakefield - <AUTHOR> http://tallguywrites.livejournal.com/148012.html <comment><USER2> Rather than merely putting this whole unpleasantness behind us and moving on, I think the medical establishment (Doctors in particular) needs to take a serious look at why the public was so ready to distrust them and assume the worst.

Medicine in this country is a rotten business. Hospitals have shoddy billing practices, routinely gouging their patients ($5 for a single Tylenol) and giving them vague, indecipherable bills. Doctors engage in protectionism, limiting the supply of doctors by restricting the accreditation of medical schools, ensuring that they earn more than their counterparts in any other developed nation by at least a factor of 2. Practicing physicians are also if not outright in bed with, then certainly far too close to the drug companies. I went to see a dermatologist a few years ago, and in the waiting with me and the other patients were two attractive pharmaceutical reps waiting to see the Doctor who owned the office. Doctors need to realize that trust must be earned, and can easily be lost. As of late, they haven't been doing a whole lot to deserve it. Until the medical establishment cleans up its act, you can expect many more debacles like this one to occur.

<comment><USER3> Upvote for this. The reason people are so quick to distrust real life-saving medical advice (e.g., about vaccinations) is because the medical world spouts with implied certainty so much garbage that later turns out to be false-- nutritional advice being the most obvious example.

<comment><USER4> When you talk about "the medical world," do you mean popular news reporting on medical topics? Populars news is frequently wrong or sensational (or both) about science news. A small study about fat absorption becomes "What doctors are saying about your diet - more details at 11."

That's not the fault of "the medical world." News orgs are no better prepared to disseminate accurate medical news than they are accurate news about computers and tech.

<comment><USER3> Much of the bad nutrition advice of the past few generations (e.g., the food pyramid, "good" vs. "bad" fats, etc.) was regularly propagated by family physicians. That is the very definition of most people's interaction with the medical world.

</comment></comment></comment></comment><comment><USER5> My favorite site on the subject: [http://www.jennymccarthybodycount.com/Jenny_McCarthy_Body_Co...](http://www.jennymccarthybodycount.com/Jenny_McCarthy_Body_Count/Home.html)

</comment><comment><USER6> This is absolutely fantastic. The sooner we put this vaccine/autism bullshit to rest the better.

<comment><USER7> Don't you see the wider message on the last page?

This destined to happen again, since journalists don't fact check, don't have relevant expertise and the press favour sensationalism over accuracy.

<comment><USER8> There's a lot of hate here for Wakefield's paper (much deserved) and for mainstream journalists (also much deserved), but the fact that it got published in the supposedly prestigious and rigorously peer-reviewed _Lancet_ goes by nearly unmentioned.

Journalists notoriously screw up their interpretations of scientific papers, but that doesn't seem to be the case here -- they accurately reported what was published in the _Lancet_. The problem was that it was published in such a journal at all -- once that cat was out of the bag, the rumor had all the credibility it needed.

<comment><USER9> Surely you noticed the part of the article where Wakefield falsified data? That the paper he submitted to the Lancet was at odds with the actual clinical records at the hospital? And the fact that his damning financial connection was not disclosed to the journal?

What is the journal supposed to do? They certainly couldn't have predicted that a tiny 12-person study would blow up in the way it has. In the end, they retracted the paper, which is exactly how it should have worked. Sometimes bad papers get published--peer review can't catch everything.

<comment><USER8> I noticed the part where Wakefield falsified data, as well as the part where the author criticized his sample size and methodology... so why didn't the journal's peer review process notice it? I find it hard to believe they couldn't predict that a study concluding that a poorly-understood but prevalent disease among children was caused by universal vaccination wouldn't be big news. Why would the journal even consider publishing an article making claims as big as Wakefield's on the basis of a dozen study participants?

The "in the end" where they retracted the paper was like six months ago, right?

<comment><USER9> > so why didn't the journal's peer review process notice it?

Because peer review, like every other human endeavor, is not perfect?

> I find it hard to believe they couldn't predict that a study concluding that > a poorly-understood but prevalent disease among children was caused by > universal vaccination wouldn't be big news.

But the study did not conclude that. The paper stated "we did not prove an association between measles, mumps, and rubella vaccine and the syndrome described". It reported interviews with the parents talking about MMR, but did not conclude that itself. The conclusion was more about the relationship between gastrointestinal issues and autism (also false, but less obviously so).

No decent scientist would draw a sweeping conclusion like "autism is caused by universal vaccination" from this study. One study--especially one so small, with no controls and no randomization--does not demonstrate causation no matter how significant the correlation. The Lancet study (false, but still subtle enough) was misinterpreted due to Wakefield's spin machine and a gullible media.

And to be honest, I have no idea why they didn't retract sooner. I do hold them at fault for that.

</comment></comment></comment></comment></comment></comment><comment><USER10> Just yesterday I saw a child in a local park who clearly had measles. It was a pretty rare sight not long ago, but in the part of London where I live it's trendy to not vaccinate your children.

<comment><USER11> That's like saying it's trendy to sexually abuse your children. These are real diseases that actually kill people. Appalling.

</comment></comment><comment><USER12> Lumbar punctures for children in a study designed to strengthen a bogus lawsuit? Yikes! That makes me angrier at the parents that volunteered(/were paid for) their kids' participation than at the doctor. Though still pretty angry at him, too.

</comment><comment><USER13> Ben Goldacre on badscience.net has a lot to say on this sibject, including a new related post today. [http://www.badscience.net/2010/05/a-staggeringly- weak-interv...](http://www.badscience.net/2010/05/a-staggeringly-weak- interview-of-andrew-wakefield-on-the-today-programme/)

</comment><comment><USER14> So hard to still like Jim Carrey. He was great in "I love you Phil Morris".

<comment><USER15> He's an actor, not a scientific advisor.

He really believes this. The problem is that there is a bunch of people who readily believe his medical advice over what a certified doctor would give.

<comment><USER16> Most certified doctor's aren't really doing much different than Jim Carey- they have just chosen the CDC as their trusted source instead of the anecdotes that Jim Carrey uses. So I would say people are choosing anecdotes over their country's public health recommendations.

I think not trusting public health recommendations is a good thing given that they are often not based on sound science. But unfortunately people are turning to anecdotes instead of critically evaluating the evidence of both sides.

<comment><USER11> you seriously think that a man who has made millions as a professional liar (actor) is just as good as a army of public health officials who are dedicated to improving the lives of everyone?

I think not trusting public health recommendations is a good thing given that they are often not based on sound science.

Where is your critical evaluation of your own statement? Where is your proof for attacking a entire profession?

<comment><USER16> My point is that neither an actor, doctor, or government agency is a good source of information: you have to look at the sources they are using (and determine if they are accurately portraying the sources).

The only really good public health recommendation I can think of is to wash your hands. Read the book Good Calorie, Bad Calorie if you want to learn how dietary public health recommendations are not at all based on good science.

In the best case scenario our public health recommendations have generally distracted us from the truth. I would probably get heavily down-voted for discussing the worst case.

<comment><USER15> But wouldn't you then be trusting a book?

<comment><USER16> No, trusting scientific sources. If you see someone (including an author) correctly interpreting scientific studies (and not cherry-picking them) then you can think about trusting their arguments.

<comment><USER15> Still, you have to trust the book's author did not cherry-pick studies in order to make his case for selling the book. This may go against his economic interests.

That's a hard pill to swallow.

<comment><USER16> You don't need to put trust into any one book. Of course it would be foolish to look at just one book or just books from one point of view on a subject. If you look at the evidence from different sources site it will become apparent who is cherry-picking and mis-interpreting. Maybe everybody is, and you make up your own mind.</comment></comment></comment></comment></comment></comment></comment></comment></comment>


Recovering Ransomware-encrypted files from packet capture - <AUTHOR> https://www.extrahop.com/community/blog/2016/recover-ransomware-encrypted-files-from-packet-capture/ <comment><AUTHOR> This approach will likely be most useful for large enterprises that get attacked, since they're more likely to have a buffered packet capture of network traffic. This is still incredibly powerful given that most ransomware- prevention mechanisms are completely useless once the ransomware is already in your system.

</comment><comment><USER2> I was pretty impressed that the blog post author thought of this. Pretty classic Eureka moment! I wonder if there's a way for regular people to do this with something like Packetbeat and tcpdump?</comment>


Internet Outage in North Korea, Network Researcher Says - <AUTHOR> http://www.bloomberg.com/news/2014-12-22/north-korea-undergoing-internet-outage-network-researcher-says.html

<comment><USER2> Rather than spawn a whole bunch of different submissions on this same story, I am replying to this submission, the first I have seen on this breaking news story, with some links to other reporting. The _Washington Post_ blog report is titled "North Korea's Internet is going suspiciously haywire" and links to some other online sources. _Verge_ reports "North Korea's internet is having serious problems"[2] linking to one of the same sources, a site called North Korea Tech.[3] The _New York Times_ reports, "Attack Is Suspected as North Korean Internet Collapses."[4] Most of the usual news outlets are confirming this story now.

I suppose once the breaking news aspect of this story is followed up some more, there will be the usual rounds of speculation and claims and counterclaims about what is going on and who is causing the apparent country- wide Internet outage. I'll refrain from speculating here until I have gathered more news.

[1] [http://www.washingtonpost.com/blogs/the- switch/wp/2014/12/22...](http://www.washingtonpost.com/blogs/the- switch/wp/2014/12/22/north-koreas-internet-is-going-suspiciously-haywire/)

[2] [http://www.theverge.com/2014/12/22/7434201/north-korea- inter...](http://www.theverge.com/2014/12/22/7434201/north-korea-internet- problems-after-obama-response-sony-hack)

[3] "North Korea's Internet link is flaky today"

[http://www.northkoreatech.org/2014/12/22/north-koreas- intern...](http://www.northkoreatech.org/2014/12/22/north-koreas-internet- link-is-flaky-today/)

[4] [http://www.nytimes.com/2014/12/23/world/asia/attack-is- suspe...](http://www.nytimes.com/2014/12/23/world/asia/attack-is-suspected-as- north-korean-internet-collapses.html)

</comment><comment><USER3> All this solves nothing.

The 20+ million in North Korea who never even heard of the internet still are starving while this petty "war" goes on.

<comment><USER4> Indeed. I really wonder how long their junta can hold it...</comment></comment>


RandalLinden/Doom-FX - <AUTHOR> https://github.com/RandalLinden/DOOM-FX <comment><AUTHOR> Randal Linden has GPL'ed the source code for the SNES+SuperFX port of DOOM. The 6502 assembly is surprisingly clean and easy to read if you're familiar with some assembly.

<comment><USER2> so how we do build this into a ROM to play? Or that a question that can't be answered to due to "reasons" (piracy, legal, etc)</comment></comment>


Twelephone adds real-time communications to Twitter using Node.JS & WebRTC - <AUTHOR> http://bloggeek.me/webrtc-twelephone/

<comment><USER2> As a code demo, awesome. However if you're old enough to remember the Nextel "walkie talkie" feature it's easy to see why quiet, asynchronous messaging is so appealing. Why do people keep trying to add voice back into the evolution of communication?</comment>


Russian hackers tracked Ukrainian artillery units using Android implant (2016) - <AUTHOR> https://www.reuters.com/article/us-cyber-ukraine/russian-hackers-tracked-ukrainian-artillery-units-using-android-implant-report-idUSKBN14B0CU <comment><USER2> Why is this being posted now? This is not only from 4 years ago- but the claims Crowdstrike made were disputed by Ukrainian military authorities and Crowdstrike themselves even revised their original findings. They apparently misinterpreted the IISS data and vastly overestimated artillery losses. In addition, the application used for artillery targeting at the time didn't have access to any network or gps data.

Jeffrey Carr, cybersecurity researcher points out his own concerns about the crowdstrike allegations here:

[https://www.linkedin.com/pulse/crowdstrike-needs-address- har...](https://www.linkedin.com/pulse/crowdstrike-needs-address-harm- causedukraine-jeffrey-carr)

<comment><USER3> I have no stake in this, but here are my points of opposition to that linkedin article:

1\. don't need GPS permissions for location data (IP address is still valuable intelligence especially if I'm spear phishing my target(s))

2\. the claim that the app is outdated and doesn't use the internet misses the point (I would add emphasis if I could)

re 2: what crowdstrike describes is an effort to get people to download a fake version of the same app, which has added features/tracking.

note the disparity in quotes:

Linked Quote (link is broken, but from Crowdstrike CEO): Russian hackers … tricked Ukrainian servicemen into downloading a contaminated version of the software - [https://www.telegraph.co.uk/news/2016/12/22/russia-linked- dn...](https://www.telegraph.co.uk/news/2016/12/22/russia-linked-dnc-hackers- targeted-ukrainian-army/)

Poster: Crowdstrike claimed that the GRU identified a targeting app, wrote malware for it, and used the compromised apps to geolocate and bomb their artillery.

See - this is not what's being said, we're mincing words. The attack, as I understand it, is they found an app they knew their target used. Made a fake version, and spear phished people (let's say, all new recruits) into downloading their malware version. What happens after that is wide open. GPS, location, network connection, anything, we can't say (probably Crowdstrike can) so the Ukranian soldier who made the app saying his version wasn't compromised is totally besides the point.

</comment></comment><comment><USER4> This blogspam and the accompanying CrowdStrike report[0] are from late 2016.

> The implant leveraged a legitimate Android application developed by a > Ukrainian artillery officer to process targeting data more quickly, > CrowdStrike said.

Ouch.

[0] [https://www.crowdstrike.com/blog/danger-close-fancy-bear- tra...](https://www.crowdstrike.com/blog/danger-close-fancy-bear-tracking- ukrainian-field-artillery-units/)

<comment><USER5> This has been debunked

[https://medium.com/@stranahan/timeline-of-crowdstrikes- russi...](https://medium.com/@stranahan/timeline-of-crowdstrikes-russia-hacks- ukrainian-military-debacle-comey-s-cleanup-7871c1710961)

<comment><USER3> I'm open minded, but are there any sources from within the security industry that have debunked this? Like one of Crowdstrike's peers or a similar organization?

<comment><USER5> See the article and links therein

</comment></comment></comment></comment><comment><USER6> I can't see myself ever owning an Android phone, I simply don't trust them to be secure enough for a device that controls, or can monitor, pretty much my entire life.

<comment> blaser-waffle I can't understand why ANY cell phones would be allowed in a military Area of Operations. Even a 1998 flip phone will dial home and give off all sorts of signals. And you can absolutely download and allow similar apps with an iPhone.

<comment><USER6> > I can't understand why ANY cell phones would be allowed in a military Area > of Operations.

Yup.

> And you can absolutely download and allow similar apps with an iPhone.

The article referenced malware, is there malware that can run on an up-to-date iPhone?

<comment><USER7> [https://www.nytimes.com/2020/01/22/technology/jeff-bezos- hac...](https://www.nytimes.com/2020/01/22/technology/jeff-bezos-hack- iphone.html)

</comment></comment></comment></comment><comment><USER8> It seems mind blowing to me that military would use off the shelf Android hardware! We have come so far from military being at the forefront of tech.</comment>