Friday Squid Blogging: Squid Eyeballs

Details on how a squid's eye corrects for underwater distortion:

Spherical lenses, like the squids', usually can't focus the incoming light to one point as it passes through the curved surface, which causes an unclear image. The only way to correct this is by bending each ray of light differently as it falls on each location of the lens's surface. S-crystallin, the main protein in squid lenses, evolved the ability to do this by behaving as patchy colloids­ -- small molecules that have spots of molecular glue that they use to stick together in clusters.

Research paper.

As usual, you can also use this squid post to talk about the security stories in the news that I haven't covered.

Read my blog posting guidelines here.

Posted on August 11, 2017 at 4:24 PM • 236 Comments


Ben A.August 11, 2017 4:26 PM

Ad blocking is under attack

An ad server was unblocked by all ad blockers due to a DMCA request against GitHub
If you use EasyList - add this back!

Why I Was Fired by Google

He blames the companys 'ideological echo chamber'
Original article on Imgur for non-WSJ susbcribers

Good Lord: Former UK spy boss backs crypto

"A former boss at UK domestic spy arm MI5 has cautioned against a crackdown on encrypted messaging apps.

Attacking encrypted USB keys the hard(ware) way

Note: it's a 16.5 MB PDF

Windows Exploitation Tricks: Arbitrary Directory Creation to Arbitrary File Read

How the NSA tracks you - 59 minute video

'Bill Binney talks about his experiences as Technical Director at the NSA where he had a 34 yr career.'

vTZ: Virtualizing ARM TrustZone

"Unfortunately, TrustZone is not designed to be virtualizable as there is only one TEE provided by the hardware, which prevents it from being securely shared by multiple virtual machines (VMs)."

Re-identifying folks from anonymised data will be a crime in the UK

"The government says "intentionally or recklessly re-identifying individuals from anonymised or pseudonymised data" will be an offence. Those who knowingly handle or process such data will also be committing a crime, it adds."

Hotspot Shield VPN injects adverts and JavaScript into browsers

Palantir developed a surveillance network using police data and then locked in customers

"If these bills pass, they could level the playing field between the company and the public, giving citizens more of the visibility into Palantir’s operations that the company already has into their own lives."

Salesforce “red team” members present tool at Defcon, get fired

"Those two speakers, who presented under their Twitter handles, were Josh "FuzzyNop" Schwartz, Salesforce's director of offensive security, and John Cramb, a senior offensive security engineer."

Kaspersky axes antitrust complaints against Microsoft after Windows giant vows to play nice

AV vendors will: get additional time to test their software for any compatibility issues before new Windows releases, be able to use their own alerts and notifications for product renewal and there will be a persistent notification about product expiration until a choice between renewal or picking another solution is made (instead of an ignorable notification).

Beware of Security by Press Release

"At issue are claims made by Denver-based security company DirectDefense, which published a report this week warning that Cb Response — a suite of security tools sold by competitor Carbon Black (formerly Bit9) — was leaking potentially sensitive and proprietary data from customers who use its product."

Apple refuses to enable iPhone emergency settings that could save countless lives

"...Apple keeps ignoring requests to enable a feature called Advanced Mobile Location (AML) in iOS. Enabling AML would give emergency services extremely accurate locations of emergency calls made from iPhones...

Non-Profit Organizations can get Tutanota encrypted email for free

They don't offer IMAP or DKIM (for custom domains) which is a deal breaker for most organizations

The MSRC 2017 list of “Top 100” security researchers

Preserving the Right to Cognitive Liberty

"A new type of brain-imaging technology could expose — even change — our private thoughts"

Slime Mold with MustardAugust 11, 2017 5:29 PM

@Klaus Schhmeh

My concern is that the device will become vulnerable to hacking shortly. I kept demanding of my wife that she buy a 1980's style drip coffee maker, was skeptical of her tales of unavailability. Until I visited the store. Everything had a user manual. We have user manuals at work. 5 a.m. seems early.

Not to worry, soon, your coffee maker will not work until the update loads. Marketing, you know. Saboteurs will either inject tranquilizers or make weak coffee. Same results.

Blank Signatures: Brain-Dead Convenience August 11, 2017 5:31 PM

Increasingly corporations are moving to LCD screens for signatures. At the doctors office there is simply a blank screen to sign. The ‘highly trained receptionist ensures nothing to worry about. She is perturbed if you ask for a paper copy. Yet you are legally bound months or years later.

In another case an appliance was delivered with a dent. They asked me to sign a smart phone sized LCD screen that the appliance was received in good condition.
I declined and asked if they had paper to document the damage. Only then did he revert to the paper work in the truck. But had to make my own copy.

Brain-Dead Convenience
Citizens rights are being taken away. From a security point of view signing these ‘blank checks’ screens indicates a clueless incompetent lackey zombie.
I resent technology blowing-off citizens rights.

AnuraAugust 11, 2017 5:45 PM

@Slime Mold with Mustard

There is a reason most coffee privacy advocates I know use french presses.

supersaurusAugust 11, 2017 5:48 PM

"...settings that could save countless lives"

how large a number is "countless"?

ThothAugust 11, 2017 6:47 PM

@Ben A

re: Fraudulently Insecure Crypto USB

Please use the search bar and search for my comments on Apricorn and other crypto USB manufacturer in the past. You will see me already sounding the alarm in the past.

re: vTZ

This is more like virtualized Intel SGX since we have to note that ARM TZ came before SGX and thus was the grand-daddy in all these 'Secure Enclave' design. This means perpetual hardware backdoors in ARM64 for Servers as well. Good luck with almost every CPU having backdoors ranging from Intel to AMD and also ARM :) .

re: VPN

This is the problem with using someone else VPN service.

re: Palantir

How I wouldn't be surprised. As per the usual Defense Contractor practice, they will try to sell more and part of the tactics to sell more is to scare the Govts and lock-in the customers.

re: Salesforce

Not surprising for many corporations. It is better to keep quiet than talk about security these days.

re: Secure Email for NPOs with Tutanota

Define secure email :) . I wouldn't even dare call it 'secure email'. Just another marketing hype to promote Tutanota. Very cunning to use this ploy to trick the NPOs.

WaelAugust 11, 2017 10:09 PM

@Peter S. Shenkin,

another hazard of writing code in a physical object—the program decoded it backward. (A strand of DNA can be sequenced in either direction, but code is meant to be read in only one. The researchers suggest in their paper that future, improved versions of the attack might be crafted as a palindrome.)

My kind of hack! Good for a movie plot.

Clive RobinsonAugust 12, 2017 12:19 AM

@ Wael, Peter S. Shenkin,

My kind of hack! Good for a movie plot.

Tut tut, I would have expected a more reversable reply along the lines of the old,

    A man A plan a canal Panama

I don't know what, but a bit better than this 30sec thought of,

"Is too hack cahoots I"

DianaPrinceAugust 12, 2017 12:24 AM

@Blank Signatures: Brain-Dead Convenience

When parcels are delivered by courier, I get to sign a little LCD screen - all I ever do is mark an X - either the couriers don't care or don't see it. Just scrawl gibberish is my answer

RachelAugust 12, 2017 1:07 AM

Was that PTSD ? I thought I was just suffering
from the lack of clear symbolism being displayed
to indicate hierarchy.

LOL! and fascinating. Do you really suffer permanent cognitive dissonance in this regard? Perhaps you need to aquaint yourself with the text 'The Western English Guide to Japanese Honorifics for Pleasure and Profit'

Sebastian Junger was respectful and disciplined enough to limit his thesis on War and Tribe to a half hours reading. Unheard of! It's a good, concise pointed
read. His other works are fantastic and recently made the war doc 'Restrepo 'which is considered to break new ground in war reporting.

appreciate the detailed explaination of your experience with EULAizer. The distinction between trying and demoing, noted. Nice to see things like that actually spelt out, in Chrome - not that we should be surprised.
Your experience reminds me of experiences with things like No Script.
Granular data becomes too time consuming and difficult to toggle in a functional way and polarises ones decision. Either 'stuff it, not touching this page' or turning everything off when you need a site to just work, quickly, when you need it.In pracctical terms ultimately EULAizer is providing the data to inform a decision into a similar polarity
I've known legal practitioners to dump Notices on evil corps with pages and pages of terms and conditions, with the coup de grace hidden at item 147, knowing full well it won't be read
As Dirk says, this won't be an issue for European EULA from mid next year, for Europeans. I wonder if congnizance of this will force more migration from US software across the pond

65535August 12, 2017 2:08 AM

@ Rachel


Yes, the EULAlyser is granular. But, the free version of EULAlyer fair. But, I suspect the paid EULAlyzer version is better.

The real issue is that certain websites need certain browsers like Chrome… in theory… and young people are trained not to read the EULA agreements and just click them. Thus, these people give away their rights. This would include the right not to have other software downloaded automatically as in the case of Chrome browser. Worse, after reading most of the Chrome EULA it pointed to Giggles EULAs for further rules – or loss of privacy. Such chained EULA’s are a real problem.

The other problem: What is the alternative to clicking on a EULA to install software? I tried to point that out using the EULAlyzer. It’s own EULA was not testable using said program – until it was installed.

I also suspect the same is true for Noscript and other programs that are probably quietly in the data mining business.

As you say a legal department will overload a person or even a corporation with 147 pages of legalese to force the user to give up his/her rights at a weak moment. This is travesty.

In day gone by, loan sharks of decades ago would do 30 or 40 percent per year with miniature type a long paragraphs on interest bearing consumer loans. Most poor consumer never read the loan agreement and just signed the contract for a TV and got cheated. The same thing is going on with software EULA agreements today.

Eventually, the government had to step in and prevent such abuse of contract terms. I don’t know if that will happen in the case of abusive EULA agreements and the current advertising market/data mining markets of today.

RachelAugust 12, 2017 2:22 AM


I tried to point that out using the EULAlyzer. It’s own EULA was not testable using said program – until it was installed.

yes, that was hilarious! For me at least. And uncanny.
As for fine print, I am certain there are precedents against them. And per the spirit of the law, I am sure it may be upheld in favour of the consumer if it ever got to that. Gosh I sound delusional
So, here's the golden question. Will you use EULAlyzer again, or recommend it to others?

RachelAugust 12, 2017 2:27 AM


I am really happy I just remembered what I wished to tell you.
You were looking for Office alternatives. I was too a while ago and did a search for the best free or semi free ones. There was a LOT of detailed discussion as you may imagine. I was finally convinced (not being familiar with the subject at all) the points in several blogs that LibreOffice and OpenOffice used to be really good, and are not quite so much any more. Various changes were made which lost its appeal, apparently. And one program was possibly subsumed by the other.

Anyway, I picked up the most suitable for me feature wise and highly voted which was WPS.COM
It aspires to have all the Office functionality and compbatability. They used
to be quite restrictive with the free version but have more recently opened it right up, clearly having considered a different marketing strategy

Ben A.August 12, 2017 2:40 AM

There's always Corel WordPerfect and their whole office suite although it's not free and very few people use it.

I don't like WPS Office but they do still offer (for the time being) a version for Linux after threatening to halt its development on that platform.

Apart from that you've got AbiWord and other standalone office applications but none really match the functionality of Microsoft Office.

Ben A.August 12, 2017 2:53 AM


re: Fraudulently Insecure Crypto USB

I've read your previous comments although I don't use hardware encrypted USBs myself. It's much better to rely upon tried and tested software encryption.

In Linux you have LUKS, in Windows you've got BitLocker and for Mac there's FileVault. You can have the OS prompt for a password as soon as the device is inserted into the port. That's good enough for most people. For more security a third-party application can be used to encrypt individual files.

re: Secure Email for NPOs with Tutanota

Their marketing strategy is that they can't read your (stored) emails. There's nothing to stop them from maliciously recovering your password so you have to trust them. You must also trust them not to read your messages prior to encryption. The service doesn't offer 2SV either and relies on JavaScript crypto.

For €12/year to connect as many domain names as you like it's cheaper than their competitors and arguably a little more secure than other providers so it's not all bad.

ThothAugust 12, 2017 4:04 AM

@Ben A

The typical hardware encryption cycle for USB device is to use a Secure Element (i.e. SIM card) with an RSA key or master AES key stored inside the SE to encrypt a randomly generated symmetric file encryption key. It is not terribly difficult to do but that is what happens whem they want to cut corners and con their customers. Oh well ... the security industry is rotten as per usual and more emphasis on time to market delivery than actual security that is robust.

Also note that one good construct is to use something like an STM32F ARM chip with ISO7816 (SIM card support) to be used as the USB controller and to request for an embedded SIM card for crypto service. This is the more secure way to do hardware encryption but none of these hardware USB encryption device ever bothered to even attempt to take the more secure route. You can see how lazy and complacent they are. Also, some epoxy and steel case does not make the hardware tamper resistant and so they have done some marketing magick by denying being tamper resistant but are conaidered just tamper evident which is the lowest security. Tamper evident is as good as no security anyway.

Clive RobinsonAugust 12, 2017 4:05 AM

@ Rachel,

... highly voted which was WPS.COM It aspires to have all the Office functionality and compbatability.

Have you actually used it?

From what I've read you can not use it "off line" for very long as it "dials home" to at the very least pull back adds.

My primary requirement and I suspect that of others here is not to have applications "Dial Home" especially to China, as even getting adds is an attack vector both passively and actively.

RachelAugust 12, 2017 4:34 AM

Hi Clive, thanks, yes I have used the Word component of WPS for about 18 months, I don't need the other bits so far.
I have found to simply ensure I am offline when Word is open. Then no hassle with ads. If I neglect to for some reason, a pop up ad opens which requires viewing for 5 seconds. The ads are so banal as to be nonsensical,visually and content both. one was something to do with funny stories kids write on the black board at school (?)
Also, if converting a DOC to PDF, or using some other 'extended' feature, i am asked to either upgrade license, or receive 30minutes free of the feature if I view an ad. If I ensure I am offline it says 'sorry, network error, please enjoy the 30minutes free'
There used to be a 30day limit on using the WPS free version. There isn't now, but when there was I used an Uninstaller to be sure every single trace of the program was removed. And CCleaner after the last use. I could then reinstall the same ZIP of the WPS. So far so good, but I did use a trial program that managed to defeat these methods after the time period of 7 days had expired. Obviously fingerprinting my device in some other way. Despite cleaning every trace of the original installation, and even making a new download, it insisted I had surpassed the trial period. It backfired on them, as I had fully intended to pay for the program but couldn't make the further inroads I needed to do with the free version, first. 7 days was too short

Wesley ParishAugust 12, 2017 4:47 AM

Not quite news, more a culture vulture thing, but I thought the habitues of this blog might enjoy
Redgum - A.S.I.O.

I wait in perpetual hope for some song singer-songwriter of this generation to write a song about being stalked by the NSA and company.

Klaus SchmehAugust 12, 2017 5:11 AM

@Slime Mold with Mustard:
>My concern is that the device will become
>vulnerable to hacking shortly.
I'm afraid, you're right. With the growing popularity of the Internet of Things and Ubiquitous Computing we will see more and more low-tec devices becoming a part of Information Technology. In Germany even a doll ("My Friend Cayla") was declared illegal for IT security reasons.

JG4August 12, 2017 7:04 AM

Thanks to all of the usual suspects for the excellent discussion and links. No intellectual progress to report.
...[some concern is appropriate so that the safeguards are robust]
Superintelligence: The Idea That Eats Smart People IdleWords

We can stop hacking and trolls, but it would ruin the internet New Scientist. Important.

...[a quagmire of conflicts of interest - one being that China doesn't want an even bigger thriving quasi-capitalist quasi-democracy on their doorstep]
North Korea’s “not quite” ICBM can’t hit the lower 48 states Bulletin of the Atomic Scientists (JTM)

The Madman With Nuclear Weapons is Donald Trump, Not Kim Jong-un Intercept (Sid S)

New Cold War

CIA Director says WikiLeaks is a ‘hostile intelligence service’ McClatchy (Altandmain)

Top diplomat warns military force will not solve Donbass problems TASS

The Nation Article About the DNC Hack Is Too Incoherent to Even Debunk New York Magazine. Lambert: “Really awful. They couldn’t risk Chait on this either.”

Imperial Collapse Watch

The Terrorism of Moral Indignation Counterpunch

U.S. power increasingly seen as threat to countries Pew (UserFriendly)

Things are bad, and David Frum makes them worse The Outline (UserFriendly)

Big Brother is Watching You Watch

Is Alexa spying on us? We’re too busy to care — and we might regret that McClatchy (Altandmain)

Ai Weiwei Transforms the Park Avenue Armory Into a High-Tech Surveillance State (and It’s Fun!) Artnet News. Chuck L: “Daughter Anne is visiting from NYC and told me about this exhibit she saw not long ago. From her description I suspect NC readers there would like to see it.” Moi: “I’d worry that if I went, the exhibition would be gathering info on me. There are facial ID obscuring tricks, but would I also need to get contacts that cover my iris?

...[artificial intelligence is going to be a key component of security systems]
GM Tests Fleet of 46 Robocar Taxis in SF: Driverless Car Timeline Promises by Manufacturer Michael Shedlock

...[an interesting overlap to the “impregnated with carbapenem-resistant Pseudomonas aeruginosa,” in that you implicitly trust people not to push you into traffic or shoot you in the leg with an umbrella. that story could be disinformation]
Guillotine Watch

Partner at private equity firm denies being jogger who pushed woman into bus Guardian (DO). If this story is new to you, please watch the video. Unbelievable. The perp really did change his path to knock the woman over.

The Death and Life of Helicopter Commuting Bloomberg

ab praeceptisAugust 12, 2017 2:52 PM


This might be a good solution ->

It's free. *Really* free.
Perhaps a startup nagging screen (don't remember as I use the full version) but no time limits or other attempts to force you into buying the full version. Which btw. is rather cheap. 50$ or 70$, something in that range and the license allows for 3 systems.

Side note: once or twice a year they go "insane" and actually give away money to some charity for every downloaded free version. So, one might take that as a hint and give a couple of $ to a charity when downloading and using their (really nice and very mso compatible) software.

Unlimited possibilitiesAugust 12, 2017 2:53 PM

@Blank Signatures: Brain-Dead Convenience

Have you ever considered that there are folks who have submitted for each circumstance.

Change signifies each and every when you feel like or when under duress

Ben A.August 12, 2017 4:48 PM

@Rachel, @ab praeceptis

Take a look at page 2 of their comparison chart for the software's limitations to see if it meets your needs - for example being unable to edit a DOCX file in the free version is a deal breaker for me:

I'd never heard of FreeOffice but it seems the company behind them make a number of other products.

Apart from that, as already mentioned you've got:

Microsoft Office (also an online version)
Corel Office
WPS Office

AnuraAugust 12, 2017 5:39 PM

For those that don't want to read the articles, a radical white nationalist extremist terrorist drove a car into a group of peaceful, anti-racist protestors, and the President condemns "many sides" for "violence" refusing to specifically call out white nationalists or even call it a terrorist attack.

This is such a sharp contrast with the emphasis of "Islamic terrorism" the right had during the previous administration, that it's obvious to see the intention was to reinforce the association of the word "Islam" with words like "extremism" and "terrorism", while we can see here that they want to avoid making those same association for white nationalism (and they want to avoid alienating their supporters).

TatütataAugust 12, 2017 7:25 PM

To add to the list of IoT crap:

A "Bluetooth enabled fidget spinner".

They can also catch fire, but apparently (not) yet directly as a result of malware - presumably.

I recently bought a plain one from a street vendor, but I couldn't figure out the overall point of the thing. Can anyone tell me what the peripheral roller bearings are for anyway?

The McFarlane Medal of ValorAugust 12, 2017 8:22 PM

More exculpatory Marcus Hutchins fact! FBI really stepped on their crank with this patsy, even by their ordinary slipshod standards.

If some third-tier toilet FBI LLBean would like to give me $2,000 American dollars for my fiendish VAPOROS money-stealing malware:

# printf ("$") BIG.AMOUNT
# please remit immediately
# return0;

I will take my chances in court.

65535August 12, 2017 11:04 PM

@ Rachel and Clive

I thought WPS Com was the successor to the old Word Perfect of the DOS and 3.1 days which I used. WPS is a Chinese company and it may dial home with metadata or worse. But, I’ll check it out.

I like Personal Computers because of “personal” part where you keep your work on your own equipment… at least in theory.

I am leery of setting up a lawyer’s office with software that dials home and could possibly leak highly confidential information to said lawyer’s adversaries [Data leakage is a real problem these days].

I have been using Clive’s old trick of getting a full version of Office 2000 or Office 97 and using it without up dates. These versions are stable, functional and don’t dial home if properly configured [for the most part].

@ ab praeceptis

I see FeeOffice is a German company. I will also give it a go.

List of Office Suites

My main goal is Privacy, security and usability with these Office Suites. I really don’t like Office 365 because of communications with the mother ship.

Elon Makes SenseAugust 13, 2017 4:49 AM

A brilliant Google Engineer speaks: “For many, including myself, working at Google is a major part of their identity, almost like a cult with its own leaders and saints, all believed to righteously uphold the sacred motto of “Don’t be evil.”
Echo chambers maintain themselves by creating a shared spirit and keeping discussion confined within certain limits. As Noam Chomsky once observed, “The smart way to keep people passive and obedient is to strictly limit the spectrum of acceptable opinion, but allow very lively debate within that spectrum.”
Last night I saw he movie The Circle starring Tom Hanks and Emma Watson. Mind blowing!

Both of these subject matters are further reinforced by Elon Musk claiming that people should be more worried about Artificial Intelligence (AI) than the threat posed by North Korea. Really?

Already the Silicon Valley elite big-data/trackers/news generators are making a concerted effort to win the 2020 elections.
Then every citizen will be directed by the government through their personalized mandatory social media accounts.

Clive RobinsonAugust 13, 2017 4:51 AM

@ SpoofedGPS,

Russian Cell Towers may be jamming and spoofing GPS signals.

This capability has been known about for some time, it's not a question of "may be".

It's been seen as a response by US and more importantly NATO to using "fire and forget" smart munitions and drones.

It plays on US "body bag fears" that go back to the Vietnam war in the late 60's and early 70's.

Historically wars have been "Come back with your shield or on it" whereby the horrors of the battlefield stayed on the battlefield. The results of a battle or even war could take days if not months to get back to the home country thus there was little the politicians or the public could say or do about a war to change it's outcome. This started to change about a century ago with WWI and reached "live action reporting" by radio in WWII[1].

For reasons that are not clear daily almost hourly reporting of the Vietnam war on television was allowed. Around the world news programs brought the horror of war into the civilian populations homes in a very visceral way. This had a politicaly negative asspect in the US and exposed a significant divide between the political class and their MIC profiteers and the ordinary citizens, that has never realy healed.

The result is the US military is almost the most risk averse national armed force in the world pushing heavily into technical solutions and stand off weapons. To as more thanone reporter said "to minimise the body bag count".

This has given rise to a policy of smart weapon and delivery systems design that is not only eye wateringly expensive it is also significantly inefficient.

Unfortunatly smart weapons have numerous Achilles heels and are actually ineffective against dispersed low tech forces and other high tec forces.

One aspect people need to consider as Pres Trump sends aircraft carriers and other forces to the South China seas is that whilst North Korea is low tech, China is high tech. Aircraft carriers had their brief moment in time during towards the end of the Pacific war in WWII. In much the same way heavy cruisers had their moment in WWI. Modern naval power lies beneath the sea not on it where it is highly vulnerable from both above and below.

Russia has known this for quite some time along with the US political fear of body bags. They have developed a series of systems that play against Smart Weapons and their delivery systems Achilles heels of which GPS spoofers are just one asspect. It can be fairly safely assumed that both Russia and China have developed sub surface systems to deal with aircraft carriers.

Further it has long been said by South Korea that North Korea has also developed and trialed GPS spoofers.

It is also known that Russia has put tri-corner reflectors on it's GPS equivalent satellites that can be used by systems that can fit easily into a man pack that can take "star sights" on their satellites so spoofing of their system can be fairly easily detected by their armed forces and corrections made via secondary systems[2].

[1] Radio commentary from neutral Uruguay's Montevideo was brodcast publically in various parts of the world in the final stages of the first decisive naval battle in WWII, known as "The Battle of the River Plate". The battle technically ended by the scuttling of the Graf Spee by it's Captin Hans Langsdorff. Adolf Hittler was known to have been incandescent with anger over the outcome because of German home propaganda being widely exposed as lies. It was reported that Captin Langsdorff took his own life a day later and was buried with full military honours.

[2] There were secondary systems developed for GPS when the SA code was used back last century. In essence there were regional GPS receivers at precisely known locations that transmitted a low frequency signal with a realtime difference signal that other GPS based systems could use to correct the signal they received and thus strip of the SA effect.

JG4August 13, 2017 8:17 AM

Thanks for the discussion of open-source office tools. Back in the day, I wrote a couple of million dollars in winning proposals with Open Office. I still use it occasionally, but not enough to make any helpful comments as to how favorably it evolved. The spreadsheet has been working well for me in recent months, but I don't use the advanced features. Can't recall if I am on 3.x or 4.x version.

I bought one of those awesome 10x to 200x microscopes on Amazon for about $25 (link available on request). It runs well with Amcap free software, but that doesn't support timelapse. The software that comes with it is horrible, although I thought that I got it to run a few years ago. I scoured the intertubes looking for a timelapse webcam software and downloaded a Soviet bloc one. Sadly, it doesn't recognize the microscope, which I thought has the same interface as a webcam. Can anyone point me to a software that would snap and save a picture every 10 to 200 seconds? Have we talked about SciLab before? That's worth a discussion in its own right, and it has plenty of tools for implementing the audio system that I described recently. I wouldn't be surprised if a simple SciLab program would do. The SciLab software correctly recognizes sound cards and is able to bring audio in and out.

on to the news

I don't think that this is a break from prior US policy. My main concern is that the notice of restricted areas be done well. The current US law is a joke, where the roaming security zone around POTUS can put you in jeopardy of life and limb without any notice. Just another reason to get the flock out. Base perimeters generally are well marked so that you won't accidentally get in trouble.

U.S. military can now destroy your drone if you fly it in a restricted area
The U.S. military is now permitted to disable UAVs that violate drone restrictions by flying over a military base. The drones can be tracked, disabled, impounded, or destroyed, according to the policy.

@Clive - You alluded to this

Beijing is using underwater drones in the South China Sea to show off its might
China has deployed underwater drones in the strategic waterway for scientific purposes, but the technology could be used as a political and military tool

see also:

Best practices for passwords updated after original author regrets his advice
Fourteen years later, Bill Burr says his tips were misguided
by Nick Statt@nickstatt Aug 7, 2017, 3:53pm EDT

the daily news dump
American investment banker accused of pushing London woman in front of bus is cleared in investigation NY Daily News (MF). Update from yesterday.

Silicon Valley under attack both from within and without CNBC And about high time indeed.

Google warns 700 publishers digital ads will be blocked by Chrome update NY Post

Police State Watch

Federal Court Rules Citizens Have No Right to Film Politicians & Police in Public Free Thought Project (Jess)

Ex-MI5 chief warns against crackdown on encrypted messaging apps Guardian

Flier’s battery caught fire on Lufthansa A380 with 410 people on board; all safe USA Today. Good thing it caught fire in the cabin and not in the hold.

Drone enthusiast ‘amazed’ as he lands device on deck of £3bn HMS Queen Elizabeth without being detected Yahoo

ab praeceptisAugust 13, 2017 2:23 PM

@ 65535, Rachel

Yes. softmaker is a german company. And a friendly one btw (I occasionally had a chat with them). A couple of times I also recommended SMO also to (usually not big) companies/clients and until now I've always got positive feedback.


The office suite I recommended (and use myself since years) is *not* opensource. But it's very reasonably priced (as opposed to mso) and quite cool about their license which officially allows for use on 3 systems(!) but they certainly won't start a war if a family or small company used it on 4 or 5.

The reason, however, why I use it in the first place does touch oss/open office. I of course tried to use OO - and I found it to be utterly miserable. Very bad quality, unreliable, weird decisions (like a java based db), bloat monster, etc. A typical case of "fun oriented oss hacking hord", sorry.

I also tried all other oss office suites, even weird or quite unknown ones which to compile was a major task (typ. because the software was so old and/or unmaintained). One of them, I think it was called "Siag Office" or something similar, was quite nice, albeit all but unusable nowadays (and with a tcl/tk-ish gui). If pressed, however, I would rather use that one than OO.

65535August 13, 2017 10:48 PM

@ ab praeceptis

I will give SoftMaker FreeOffice a go.

“I also recommended SMO also to (usually not big) companies/clients” –ab praeciptis

Are you talking about the KPMG [the CPA merger] software management package?

Nick PAugust 13, 2017 11:14 PM

@ All

Do you like stories about people tracking down obscure bugs that teach them new things? Do you like esoteric attacks like what we discuss here? Do you like it when stuff gets increasingly wild? If so, you might love this story:

Coding Machines

It took me around 40min to 1hr to read *without me intending it*. I just couldn't stop reading it since it was so well-done on a topic I've been exploring recently. Probably favorite long-form article since Atavist's An Arrogant Way of Killing about the crime lord that started TrueCrypt's predecessor (maybe TrueCrypt itself... maybe...). To avoid spoilers, I'll post my response (esp solution) to new one in a day or two.

WaelAugust 14, 2017 12:30 AM

@Nick P,

Do you like stories about people tracking down ...

No! ;)

Do you like it when stuff gets increasingly wild? If so, you might love this story:

Fascinating story. I don't believe it. The mailman delivering a letter describing the 'Machine stuff' is too much of a coincidence. I have seen my share of wierdness, but this borders on science fiction. Not saying it can't be true; I just don't believe it. Enjoyed it though. Thanks, and that's coming from someone who doesn't like compilers. Then again, why haven't we heard about this since 2009?

It took me around 40min...

That's more like it. It took me about the same. I guess you've learned the lesson!

I have a few technical comments, though:

It was subtracting a register from itself. That’s not necessarily odd in itself: it might be an efficient way to set a register to zero.

No, the efficient way is to XOR the register with itself:

xor eax, eax

Rather than:

mov eax, 0

The one thing I didn't understand is how was the weird instructions propagating. I didn't follow the explanation! The skull is dull today, like everyday.

“You look at the switch and call out each packet you see. I’ll do that with the scope.”

Riiiight! That'll work flawlessly!

Some stupid comments:

Dave walked up to my desk with a grin and a cup from Peet’s Coffee. I thought all coffees tasted fine, but he was picky

Dave must have bad taste! Phill's coffee in mountain view had much better coffee!


Are you freakin' kidding me? +2? That's at least a +3 ;)

Nick PAugust 14, 2017 9:11 AM

@ Wael

Good catch. It's fiction by a programmer who may or may not be strong on assembly. Great fiction, though. I have no idea why it was under the radar this long. I imagine there's more gems to be found out there. Far as real attacks, I've found only two reported: one on Visual Studio and one on Delphi. Good choice of targets. :)

@ Figureitout

Philociraptor says, "It's was a real story that didn't happen for real. Isn't the existence of the story enough in itself? Hmmm."

@ All

Repost of last comment about this story:

"The story shows what people typically do if there’s a Karger/Thompson attack. They freak out in a big way. The attack is beyond simple to counter if you can trust an assembler and linker like them. Just write an interpreter for a simple, subset of C in easily-parsed LISP expressions or Tcl style. Hand-code whatever component, a backend or whole compiler, in that. Use it to do the first compile. Optionally, do that in combination with ancient source working way up to versions without adding the infected one. If one wants whole system, then Moore’s Forth, Hansen’s Edison, and Wirth’s Oberon (best) are available. If a CPU, my current suggestion is NAND2Tetris with resulting knowledge used to implement a tiny CPU on an open, cell library (they exist) that’s hand-checked. Run simulated version of that on diverse or ancient hardware if you can’t fab it.

rain1 and I are collecting all the stuff needed to counter these attacks or just enjoy ground-up building of tools here:

Bootstrapping Collection

The other thing I noticed is them jumping on machines. Occam’s Razor should’ve immediately brought them to idea that a person or group made it for any number of common reasons. A challenge with high of pulling it off unnoticed, a test of an operational capability to be weaponized later, or an epic trolling operation. I’d think the latter the second I got that letter like “probably was these assholes sending the letter trying to mess up our heads after they messed up the compiler.” Matter of fact, the whole thing would just take… aside from the tricky work on the compiler… an unpatched vulnerability in the repo with the compiler source. All this bullshit follows from one person doing one smart thing followed by one system hacked. That’s it. It’s why SCM Security 101 says one must have access controls, integrity protections, and modification logs (esp append-only storage). Paul Karger also endlessly pushed for high-assurance, secure kernels underneath everything to stop both subversion and traditional vulnerabilities. Anything in TCB or clever attackers will run circles around clueless defenders.

CzernoAugust 14, 2017 10:01 AM

@Wael : minor prick,

For zeroeing eAX, "SUB eAX,eAX" or "XOR eAX,eax" - make no difference whatsoever, on any iron as modern as a 486 or later X86 CPU. Using one or the other is entirely a matter of preference or the programmer's mood at the moment

Also, when optimizing at an insanely low level, "mov eAX,0" does win in certain circumstances, because it does not touch the eFLAGS.

WaelAugust 14, 2017 10:20 AM


@Wael : minor prick,

Is that a typo, or are you calling me names?

When I did assembler many years ago, the preferred method was XOR. This was the fastest way, statistically speaking. There were corner cases as you imply where other methods were as fast, but not faster.

xor and add or sub instructions are logically related. At the time, we looked at the specs and saw the number of cycles each instruction took, it's side effects, cache, etc...

If I have the time, I'll give it a try. You may do so as well with the help of:

Then there is AMD and ARM and other architectures.

WaelAugust 14, 2017 10:28 AM

@Nick P,

Great fiction, though.

Good thing you didn't originally identify it as fiction, otherwise I may have skipped it.

CallMeLateForSupperAugust 14, 2017 11:37 AM

I love it. Internet Of S**t meets not-ready-for-prime-time firmware push.

"LockState RemoteLock 6i is a "smart lock" ... allowing [one]to generate and expire unique, per-tenant unlock codes.

"On Aug 8, Lockstate pushed an over-the-air firmware update to its products in the field, and a defect in the update bricked at least 500 locks, causing them to lock down and stay locked.

"According to a letter sent by Lockstate, there is no way to unbrick the locks now; they have to be returned and replaced."

Why didn't the update brick *every* RemoteLock 6i? Did some locks escape bricking because they didn't get updated... because lousy WiFi reception prevented it? Or did lousy WiFi connections trash the updates received by the locks that *did* get bricked?

BTW, the BoingBoing article says the RemoteLock 6i costs US$469, but that's a special price, according to the LockSafe site. The regular price is US$549. Five and a half frankins for a frickin' entry lock........ I'm definitely in the wrong business.

ab praeceptisAugust 14, 2017 12:15 PM

Czerno, Nick P

From what I remember you are both right. I remember being confronted with that issue for the first time with i 80386 and ns32x32. I myself preferred 'and [someregister], 0" because it seemed the clearest to me.

On a normal level (of assembler programming) it's pretty much like Czerno said, largely a matter of personal taste.

Where it gets interesting is two things, a) the assembler (programm) and b) microcode. For a) it's not at all clear that a good assembler just passes on what he is given. It may well optimize, knowing about particularities of the processor. An example is whether a register cleared (set to 0) is part of a loop or cmp/jxx or not.
Also keep in mind that there are indeed minor differences such as setting or not setting flags, invalidating bits and pieces (bus, cache, etc) that may or may not be needed/wanted. Also b) is relevant because, for a start, what we see is typically just a "public interface". Internally many of the "public instructions" are basically microcode "macros". Moreover, every processor has its preferences and weaknesses as any design is always a construct of tradeoffs. Hence processor microcode, knowing about those, strongly prefers or dislikes certain mechanisms and shifts quite a bit around; one might call that some kind of very low level optimizations. Internally, all those ways to expressly set some register to zero typically end up as a couple of internal instructions like "clear [register], set z-flag", "clear [register], no flags".

Short version: (nowadays) use the one you like as long as it's reasonable; the cost should always end up to be the lowest possible.

Hedge Fund Oil ‘God’ Blames Algorithms for LossesAugust 14, 2017 12:15 PM

Hall complained that it was nearly impossible to trade oil based on fundamental trends in supply and demand, leaving the market at the mercy of computer-based trading systems.

Until recently humans have always found new ways to manipulate the stock markets. Hedge Fund managers taking 30% losses and then being forced to liquidate is a most welcome trend.
Also why employees have switched their retirement funds in passive ETFs, as humans again cannot easily take away their hard earned savings.

Shoot in Foot
The administration is exasperating this trend by not implementing the rule where financial advisors must put the interests of clients above their own financial gain. All the more reason not to hire humans.
I hear Amazon is hiring - until the robots and drones again reign supreme.

CzernoAugust 14, 2017 12:33 PM

@Wael : not calling you names Sir, I meant to write "a minor nitpick"... apologies for the typo (actually, more a /lapsus calami/due to not practicing enough the fine English tongue)...

As for XOR versus SUB, I am certain they're fully equivalent on AMD (my preferred platforms) and Intel as well, costing 1 CPU cycle each on a 486, and virtually zero on subsequent, more fully pipelined CPUs, being usually overlapped with other activity. Since you mentionned AMD, interestingly on AMDs the ADC (add with carry) has always been exactly as fast as a simple ADD, while on Intels ADC was not optimized and cost a lot of cycles, last I checked (which was years ago...)

Clive RobinsonAugust 14, 2017 2:17 PM

@ Wael, Nick P, Czerno,

When I did assembler many years ago, the preferred method was XOR.

You guy's are such youngsters, and I guess never went below assembler in your programing lives, to either Micro-Code or the underlying Register Transfer Logic.

The first issue you have to understand is that not all "registers" were "dual ported" as that made them slow to use and it was very infrequent when you would read and write to the same register in a single instruction. Because it only makes sense for counters that are usually made as counters that could be both reset and written to (think program counters). Thus you would have the "CLR" instruction in thr likes of RISC CPU designs. Also some CPU's did not have ALU's but seperate "logic" and "adders" (as we tend to do again these days). The reason for the seperation is that adders are "word wide with carry" which is "two legged dog" slow compared to the logical instructions that were in effect bit wide with no carry. Thing a single NOR gate with 0.1nS delay in ECL or 30nS in 74 TTL. By the time you had rippled across even 16bits your delay would be effectivly 18 times that which with TTL dragged your clock speed down to around 1MHz. It was not untill the likes of the 29000 Bitslice chips from AMD in the late 70s early 80s that non ECL board level computers crossed the 10MHz threshold reliably. There were fin tricks like carry look ahead circuits, and belive it or not adders are still an active research field.

The SUB instruction would have been as slow as a one legged pooch because you'ld have to do a "two's complement" which is a five step process the equivalent of,

2, XOR R[x] ACC',
3, STA in ACC',
4, CLR Cin,
5, ADD R[n] to ACC',

Steps 7&6 can often be done in parallel depending on how the Z flag is calculated.

ACC' is a hidden accumulator latch (not register as it does not have to be dual ported) for storing temp values and can also be SET or CLR in hardware. It's used in Microcode for building more complex instructions such as CMP and masking bit flags for branches and similar. ACC is used on simpler architectures and may also be called the Wreg, in the PDP architecture because they went for dual ported registers throughout the register you could write to any of the registers so would have been an STA R[n].

The point is you can see that you have an inbuilt XOR. But hardware wise.

1, CLR ACC',
2, STA R[n].

Would be faster, however the fastest if you had the real estate would be to make the registers in your register file to be not just dual ported but both setable and resetable. Thus,

1, CLR R[n].

Oh note I've left out the other things going on such as the microcode ROM reading and incrementing of it's counter and any pipelining. It's the output of the ROM that drives the lines to the ALU and Register file and Program counter and data and address bus latches and various MUXes.

Hope that has given you a glimpse behind the Microcode/RTL curtain without having to use a spotlight.

WaelAugust 14, 2017 2:30 PM

@Czerno, @Clive Robinson,

apologies for the typo (actually, more a /lapsus calami/due to not practicing enough the fine English tongue

None needed. It's a finger, in this case. How's that for nitpicking? :)

Courtesy of:

Now I normally don't use stackoverflow for references in these matters, but it's the thing I found first. I asked a couple of ex-colleagues who still have their hands dirty, so to speak. One of them said: "They may be same, and of course the HW is always changing, so it may differ between models even". Unfortunately the replies I got are divided, so I'll accept your "matter of preference" stance.

I don't have the bandwidth to read @Clive Robinon's reply.

WaelAugust 14, 2017 3:37 PM

@Nick P, @Clive Robinson, @Czerno,

The post got truncated maybe because of a malformed tag. This is the part I was referencing:

Technically a SUB should take longer than XOR because the carry has to "ripple" through all the bits, whereas XOR is bit-by-bit parallel.

If there are microcode / RTL folks here, please chime in.

The point I was originally trying to make is if I were in the developer's shoes (in the story) I wouldn't have dismissed the instruction so fast as a possible optimization technique.

Clive RobinsonAugust 14, 2017 3:51 PM

@ CallMeLate...,

Five and a half frankins for a frickin' entry lock........ I'm definitely in the wrong business.

Trust me unless you are into "nocturnal aerial migration" you are not in the wrong business.

Electronic locks their design, manufacture and after sales are horrible. They require you to find the security cusp for mechanics, electronic, software and human nature and Even though I was considered good at it I'm very happy not to be doing it anymore.

The number of "idiot designs" I've seen far out weigh the "belt and braces designs" but both fail miserably at some point, often in after sales.

Just think on this, you mention that an electronic lock got bricked by an OTA update. Such OTA activities are known to be problematic especially with battery powered equipment. The manufacturer says "return for rework" but does not say how you get it out of the door to do so...

Have a think on how you would get a lock out of a locked door, when it was installed into the door from the edge that buts up against the door frame...

That's just one little after sales problem, there are plenty more...

65535August 14, 2017 4:24 PM

@ ab praeceptis

I got it.

My "acronym module" locked up for a second. I don’t know why I was thinking of the KPMG package – may be an Old Krebs on Security article.

Clive RobinsonAugust 14, 2017 4:24 PM

@ Wael,

I don't have the bandwidth to read @Clive Robinon's reply.

What's your excuse?

WaelAugust 14, 2017 4:27 PM

@Clive Robinson,

A meeting :) Besides, I need to understand what you're talking about. I won't ignore it.

CzernoAugust 14, 2017 4:40 PM

@Wael : all things being equal, XOR indeed /could/ be faster than an ADD or SUB, because of the time needed to propagate carries, bit by bit, from least to most significant in the naive (and economic) design, BUT in practice, the adders of the ALUs of our favourite (?) microCPUs are so fundamentally important that they afford a lot of circuitry to "anticipate" carry calculations, in parallel, several bits at a time.
Ultimately even if, under the hood - at the logic levels evoked by Sir Clive upthread - the XOR result /might/ be stably acquired a tad earlier than its ADD or SUB couterpart, it makes no difference as far as the programmer is concerned - since the microprocessor is clocked sequentially, from the moment a result is guaranteed to be generated in under one CPU clock tick.
Finally, on the X86 unlike some other microCPUs, almost all instructions have to generate well defined flags, including XOR and this need contributes to nullifying a time advantage that bit-parallel "logical" operations OR, AND, XOR ... might have over integer "arithmetic" ADD/SUB.
Actually even MUL is made surprisingly fast on modern X86 designs at the expense of an awfull number of transistors. Integer divisions remain slow, still and it's a well known programmer's trick (as I'm sure you are aware) to mutliply by an inverse instead of DIV at least when repeatedly dividing by a fixed divisor.

Clive RobinsonAugust 14, 2017 4:43 PM

@ Wael,

You misspelled my name almost immediately pulling up someone else for similar...

So let's here your excuse ;-)

There is also another reason for using an XOR on some 8bit processors they had no CLRA or CLRX which were single byte instructions. The XORA, was a single byte, but the STA 0x00 would be two bytes in memory.

As the clear register is a frequently used function saving a single byte of program memory in each use was very much worth it as you started heading to your 1Kbyte / 4Kbyte or whatever real ROM limit you had.

Somewhere I still have a prototype Z80 PCB which has two 4bit wide 1Kbit SRAM chips and a bytwide ROM socket with 12V supply as well as links to select 1/2/4 Kbyte ROM size... Back then every byte counted.

JG4August 14, 2017 6:14 PM
News of the Wired

“What is Hinternet, in simple terms?” [Stack Exchange]. Do we have an ham radio operators in the commentariat who know about this?

“Introducing (n+1)sec — a protocol for distributed multiparty chat encryption” [].

“There are only four types of Facebook users, researchers have found” [Quartz] (original study). “Facebook has a Rashomon effect: various user groups interpret the experience of using it very differently. Surprisingly, however, the researchers also found they could easily categorize users into four broad types: ‘relationship builders,’ ‘window shoppers,’ ‘town criers,’ and ‘selfies.'” Study uses Q-methodology, FWIW….

“Recap / Game Of Thrones S 7 E 5 Eastwatch” [TV Tropes]. Awesome recap, but best of all the author lists the tropes! For example:

Fandom Nod: Davos mentions he thought Gendry was still rowing, in reference to the fandom’s consensus that he’s been rowing since his last appearance in Season 3.


Ragtag Bunch of Misfits: The team going on the mission beyond the Wall consists of a Wildling, a red priest, a disgraced knight, a former Kingsguard, an undead outlaw, and a bastard son of a king, all led by a bastard son who is a king

I wish we had a source with the same wit and level of detail for domestic politics…

tyrAugust 14, 2017 8:06 PM


Hire a burglar.

He will climb in through another access point
pop the hinge pins and you can then easily
remove the fancy electronic lock that was
supposed to keep him/her out. Locks are to
keep honest people honest.

He might also know someone who will get you
a piece of the lock vendors precious hide
for a souvenir.

WaelAugust 14, 2017 10:39 PM

@Clive Robinson, @Nick P, @Czerno,

So let's here your excuse ;-)

Got none except to say I'm not infallible.

Back then every byte counted.

That was still the case when I did BIOS. At one point I had to fight for 20 bytes. Went through all sorts of convoluted stuff to optimize the code since I wasn't given it. That's before UEFI.

Backtracking to an earlier post:

You guy's are such youngsters,

Thank you! That's a complement :)

and I guess never went below assembler in your programing lives ...

Debug-wise, yes. Development-wise, no.

[...] Hope that has given you a glimpse behind the Microcode/RTL curtain without having to use a spotlight.

Cut to the chase! What's more efficient: xor or sub? :)

I'll continue to use xor. We do cryptography, too. Lol


Integer divisions remain slow, still and it's a well known programmer's trick (as I'm sure you are aware) to mutliply by an inverse instead of DIV

Also shift right to divide by two or it's multiples, which makes a huge difference in performance on some micro controllers.

@Nick P,

You read the story:

Patrick said, now in full form. “A hacker adds this code to the compiler and distributes it to everyone. The code detects that it’s compiling the compiler and adds itself back into the binary. One revision later the hacker removes the code from the official source distribution. The hack then perpetuates itself forever, with no trace in the source.”

Now that they root-caused the problem, how could they have recovered from this infection loop?

WaelAugust 14, 2017 10:58 PM

Speaking of optimizations and shortcuts:

Which is more efficient?

for(i= 0; i < 10; i++) or
for(i= 0; i < 10; ++i)

Why and under what conditions. Which is the one that should be used all the time? (This is related to the story @Nick P shared and the xor vs sub thing)

I Got this from: Effective C++ by Scott Meyers, I believe.

Suppose that:

int i; // Obvioulsy i is an integer

How do you "elegantly" force i to be 0 or 1 (meaning it behaves like a Boolean)

Clive RobinsonAugust 15, 2017 12:52 AM

@ Wael,

Got none except to say I'm not infallible.

So fallible huh.... Hmmm I shall have to talk to the fetid foot apparel if it can hear anything above the embarrassed bubbling ;-)

Cut to the chase! What's more efficient: xor or sub? :)

As I said it depends on how the CPU is internaly structured but generically "CleaR reg A" was usually the fastest and least ROM consuming all round. Then the bitwise "eXclusive OR of the A register with it's self" then a very very long way behind that "SUBtract reg A from reg A".

Why the CLRA or equivalent never appeared in some CISC processor family lines is a mystery to most and says more about the designing organisation than perhaps some would like to know...

Oh speaking of IAx86 processors and their ISA, I'll say again that which I did a few weeks ago...

Understanding the machine code structure becomes one heck of a sight faster when you know that the register file used 3bit or Octal numbering. You can find a helpful guide at,

However if you can find the original "A Summary of the 80486 Opcodes and Instructions" Mark Hopkins posted to the alt.lang.asm newsgroup back in the 90's it will hopefully save you having to manually reformat it back to 80 column mode to sort out some of the tables.

Clive RobinsonAugust 15, 2017 1:23 AM

@ Wael,

Now that they root-caused the problem, how could they have recovered from this infection loop?

In theory they can not go back to what was originaly there as it's now gone...

However there is the option of hacking the compiler code with a disk image editor. It's a way people used to get rid of viruses back before the term "malware" had been coined... Whilst a pain with ".com" files it became a nightmare with ".exe" files.

It sounds easy when you say,

    Examine the binary image of the compiler in a debugger and locate the first instruction of the malicious code. Then change it to a JMP instruction that jumps over the malicious code...

As you probably know from you preceading comments "It just ain't that easy".

WaelAugust 15, 2017 1:24 AM

@Clive Robinson,

I shall have to talk to the fetid foot apparel if it can hear anything above the embarrassed bubbling ;-)

That wouldn't be a wise endeavor. It's knitted tongue is as acrimonious as it's pungent odor. You know that, right? Besides, it's ears got burned out in a small fire accident - it doesn't hear sh*t ;)

However if you can find the original "A Summary of the 80486 Opcodes...

I have an old version for the i386. Haven't looked at it in a couple of decades.

WaelAugust 15, 2017 1:38 AM

@Clive Robinson

It sounds easy when you say...

That's what they said, and I didn't buy it.

In theory they can not go back to what was originaly there as it's now gone...

There's got to be a way other than what they tried. More efficient too. I just can't think of it now. I'll sleep on it as I said a mouthful today. If I stay up any longer I'll be replying in limerickese.

For some strange reason, I can't keep my eyes open. Perhaps I thought about one of the books you reccomended in the past.

Bong-Smoking Primitive Monkey-Brained SpookAugust 15, 2017 4:37 AM

@ Clive Robinson:

Whilst a pain with ".com" files it became a nightmare with ".exe" files.

While your description of .com and .exe is true,

I spent the rest of the morning browsing feeds and refreshing the live blog of a MacWorld event.

The setting of the story shows they're handeln an Apple computer not a windows computer.

JG4August 15, 2017 5:43 AM

This is a response to several active discussions, where some form of AI is the only hope of maintaining an edge. How to avoid that AI being corrupted is part of the question. Government is meant to be a kind of composite intelligence (not quite crowdsourced) that assists with resource allocation, including national defense and interstate commerce. In some sense, that initelligence is an artificial construct, particularly at the current scale of operations. I'm going to ignore for today the fact that the government has long been repurposed.

Not sure if I commented on the EULAzyer. I've suggested similar tools in the past, hopefully including here in the comments. I may even have linked Yves context-sensitive highlighting of speeches, which is a stroke of genius. That is spot on my recent comment that if humans are in your control loop, data visualization is critical to loop function. So it is with the glass cockpit. The average person has no hope of keeping up with the 6000 pages of new "laws" that are put on the books daily. Is it really your law if it is copyrighted by a private entity? Is it really your law if it was written by a lobbyist? Is it really your law if it sets 800 years of legal precedent on its head? Just substitute the word 'code' for 'law', '50' for '800', and 'engineering' for legal. BTW, NakedCapitalism had an excellent series by a VC on the topic of how computer code becomes law. It already determines who stays in jail.

There are hundreds of other vital applications of natural language processing, but one of them is balancing the power of the individual against the power of corporations and governments. Their teams of fancy lawyers will cringe in fear of the light that can be shined with NLP on their dirty work, to say nothing of the light that deobfuscation will shine on their code. They will scurry for the nearest slice of darkness in the cracks of the finish work. It's not just EULAs, NLP is empowering to the hypothetical uncorrupted Congresspersons who don't have time to read 800-page bills that are presented to them 5-minutes before voting.

It is a short step from a EULAzyer to AI tools for analyzing code. Of course, you can only analyze expected code behavior in light of documented hardware behavior. The only hope of maintaining documented hardware behavior is to exhaustively analyze the behavior of the hardware in a limited parameter space, then lock your programs into that known-good space. And run a hypervisor on trusted hardware. I'm sorry to say that I don't understand C-v-P well enough to know how you can lock down each piece of a CPU and each piece of a hypervisor, but that is where you have to end up. Dividing the power so that it requires as many points of failure as affordable for the purpose. BTW, your government is failing. Always has been. Unclear if it always will be, until the Buddhist paradox is resolved at Woody Allen's crossroads or if there are other options. You could hope that it fails gracefully, but that appears to be inconsistent with every previous example.

JG4August 15, 2017 6:24 AM

two of Clive's interests in this podcast. I don't listen to things, because I can read them much faster. so far as I know, they have not complied with the Americans with Disabilities Act by providing a transcript of this podcast for those of us who are differently abled.

it's a short step from making a circuit board out of self-combusting materials to lining a safe with metal-metal oxide composite. that sort of composition also would make a nice chip package or even insert on top of the die that could be certain of fusing all of the metal on the semiconductor and thoroughly rediffusing all of the dopants and insulating layers. you'd be a dumb-ass if your Orion P-3 was forced down with all of the critical technology intact.

it's a short step from impedance matching your 9 kHz RF transmitter to free space using a backpackable network (ignoring the Tesla dynamics around the backpack and your hair on fire) to a 1-bit per minute HF transceiver that is completely legal and all but impossible to eavesdrop or localize. the issue of near-field behavior came up yesterday in my brief comment on the North Korea standoff. as I understand it, the civilian population in Seoul are not only hostage to Nork nuclear devices, but also to conventional artillery that has a range of 30 to 40 miles. hence my thought of locating all underground bunkers and tunnels on the other side of the border and arranging for them to be simultaneously hit by smart weapons like cruise missiles. the detection of underground structures can be done with muons, but only at very low data rates. it also can be done with near-field RF at wavelengths that penetrate the ground well and it would very handy to have a transmitter or receiver in the near field of the possible bunker or tunnel location. the impedance matching device implied in the podcast could be either a receiver or transmitter, where the far field (and any reasonable powerlevel) is provided by low-earth orbit satellites with longwire, by aircraft with longwire, or by a ground-based longwire array south of the border.

“Voices from DARPA” Podcast
Episode 11: The Thin-Air Specialist
In this episode of Voices from DARPA, get inside the full-spectrum engineering head of Dr. Troy Olsson, a program manager since 2014 in the Agency’s Microsystems Technology Office (MTO). Listen in as Olsson describes progress toward vanishing materials that can keep sensitive electronic components out of adversaries’ hands; unmanned air vehicles that can deliver provisions and then just disappear; massive miniaturization of low-frequency antennas for underwater radio communication; and stand-alone sensors that require almost no power at all yet for years remain vigilant to sounds, radio signals, and other environmental signals of interest to warfighters. And then there’s those really far-out technologies that Olsson hopes to enjoy one day.

JG4August 15, 2017 6:36 AM

Karl Denninger of the rabid stripe had a good post up yesterday. Cui bono?

What If 'Unite The Right' Isn't Really Right?

some of the daily news
...[some early investor in Hitler and/or Stalin must have come to regret it]
I invested early in Google and Facebook. Now they terrify me. USA Today. Must-read.

You Are the Product LRB. Also must-read, but grab a cup of coffee.

Benchmark says the firm warned Travis Kalanick over a month ago that it would sue him Recode

Imperial Collapse Watch

When a Superpower leads with its chin Macrobusiness. Very good.

Army Command & General Staff College grads celebrate perfect record of losing wars Duffel Blog

New Cold War

A Guide to Russia’s High Tech Tool Box for Subverting US Democracy WIRED vs. Dissecting Trump’s Most Rabid Online Following FiveThirtyEight. Guess which was more important?

Trump Isn’t a Threat to Our Democracy. Hysteria Is. NYT

Trump campaign emails show aide’s repeated efforts to set up Russia meetings WaPo

Clive RobinsonAugust 15, 2017 6:42 AM

@ Wael,

How much do you trust Open Source codes and projects ?

I never have trusted OSS, the same as I do not trust closed source or firmware.

For that mater I don't trust code I've written, unless it's on hardware I've personally designed and built and made the tool chains for.

There is an old joke about the Central Intelligence Agency. If you look at the seal they have set in stone in the entrancy way of their "head office" it says "In God we Trust". The joke is that there is a secret part of "All others we check" but if they tell you they will have to kill you, but... "Only when you leave the country".

As you might know these days I don't even trust the hardware in PC's or other consumer level equipment. I'm not the only one of this viewpoint which is why years ago I started thinking about mitigation and what became Castels-v-Prisons, which Wael reduced to CvP, and it appears others including academics are only now catching up with...

CvP is just one of many "future directions" people will find on this blog often five to eight years ahead of academia, industry, and as far as we can tell the SigInt agencies.

Speaking of,

@ Wael,

The setting of the story shows they're handeln an Apple computer not a windows computer.

What did your mother tell you about assumptions?

It is some time since Apple switched over to *nix of a BSD varietie. Thus the same edit the disk level files apply, only now it's a.out and ELF etc.

The thing is OS's are much like humans in that "The beauty is skin deep" and most others do not want to view let alone play with the guts. It's why below the presentation level vulnerabilities can hang around for absolutly ages. For instance do you remember the original teardrop attack it worked across so many OS's because they were all using BSD networking code or a modified version of it. Likewise more recently WanaCry...

Down at the CPU ISA and machine code level the aim is to load into core memory (RAM) a binary image from hard disk or similar storage. That's what .com and a.out files did. It was resource issues that gave rise to library files and the problems they caused with linking which ment that you now need a bit more than a simple linker so you also get the equivalent of souped up jump tables as well to do the segment and address translation.

The thing is that these low level formats do not change very often and they are almost always backwards compatible. Thus if you are of a mind to do so translating from a.out to ELF can be done by hand, not that you would wish to do so, as it's one of Dante's seventh level of hell activities that our computer "idiot savants" are so much better at.

Tender Baby Arabush Hearts in Milk GravyAugust 15, 2017 7:15 AM

@JG4, thanks for the usa today piece. Slick example of CIA's propaganda m.o.: write a hand-wringing piece that feebly laments illegal monopoly and restraint of trade by InQtel investments in addictive social control, while subliminally slipping in CIA's anti-Russian war propaganda: "America's intelligence agencies have concluded..."

Amid all the gnashing of teeth and rending of garments by repentant vulture capitalist McNamee, highly effective genocide propaganda [CPPCG Article III(e)] didn't occur to him as an example.

Funny how that works.

CallMeLateForSupperAugust 15, 2017 7:25 AM

@Clive re: LockState door lock

"Trust me [...] you are not in the wrong business."
Okay, I guess. But $500 a pop is so alluring. Can I at least sketch my ideas for a solar-powered, IR activated, wifi-enabled can opener?

"Have a think on how you would get a lock out of a locked door, when it was installed into the door from the edge that buts up against the door frame..."

Apparently, just a sub-assembly - "the back portion from the lock" - gets removed and returned. But you have a point either way: how does one access even the "back portion" of the lock, from without, when the door is locked down?

The photo here reveals the solution:
This $550, wifi-enabled, digital masterpiece also has a traditional cylinder lock. Which can be picked, of course. :-)

My apologies for not linking to the article in my OP

ThothAugust 15, 2017 7:34 AM

@Clive Robinson

re: How much do you trust Open source codes and projects

I assume you are addressing the response to me ?

ThothAugust 15, 2017 8:21 AM

FOSS Web Browser, Mozilla Firefox, attempted to stop the installation of EFF's Privacy Badger plugin and labeling it as untrust.

Should we trust FOSS Web Browser Mozilla Firefox and Chromium ? I guess from the above it shows that Mozilla Firefox is in bed with ads companies and when detecting the installation of privacy enhancing ad blocker software (Privacy Badger), it triggers a warning.

A Web Browser not in bed with Govt Agencies and Big Corps would be much more preferable but it I guess it will never ever happen as usual.

WaelAugust 15, 2017 10:20 AM

@Clive Robinson,

How much do you trust Open Source codes and projects ?


The setting of the story shows

Why are you attributing these to me? You should drink your 3 pints of tea before you make comments here!


I shortened it to C-v-P not CvP

Nick PAugust 15, 2017 11:14 AM

@ Wael

"Now that they root-caused the problem, how could they have recovered from this infection loop? "

The answer was in the story and my original comment. They need a clean compiler or interpreter that can convert the source to object code the first time. That's called bootstrapping. The link I gave was to a ton of projects helping people do that. Alternatively, you get the clean source from the repo, revise if necessary to make sure it's vanilla (language), and hand-translate that to unoptimized assembly for a clean binary. If that's a lot of work, write a simple compiler for tiny subset of (language) to unoptimize assembly, hand-translate the source into that, compile whole thing to assembly, and now you got the binary. This first binary you work to create is used to compile the clean source to bootstrap the compiler.

An example I had in mind for the Oberon system involved its stack-oriented CPU. It's meant to be kind of close to the language itself. The system comes with full description and source code. The source can be checked against the description, tested in isolation on arbitrary systems/tooling, and so on for verification. Then, to counter this attack, I might straight up write stack assembly for each source file of the compiler and SYSTEM module. That should be enough to receive the rest of the system over I/O, compile it in ram, and output it back. Alternatively, do the filesystem source, too, so I can just add the binaries to the system as it receives and compiles the source. Eventually, restart the system to get the rest of its functionality online. That system could be trusted down to the CPU which itself is open-source if one wants to implement it.

Clive RobinsonAugust 15, 2017 12:29 PM

@ Thoth, Wael,

I assume you are addressing the response to me ?

Sorry folks, yes the first half was for Thoth, the second for Wael.

Been a busy day involving our legal brethren.

WaelAugust 15, 2017 12:36 PM

@Clive Robinson,

And just like that, @Clive Robinson wrote Bong-Smoking Primitive Monkey-Brained Spook's obituary!

I shall have to talk to the fetid foot apparel if it can hear anything above the embarrassed bubbling ;-)

The foot apparel is the sockpuppet. Suddenly everthing makes sense now.

But: I neither confirm or deny the relationship between my left hand and the sock.

Clive RobinsonAugust 15, 2017 12:43 PM

@ CallMeLate...,

Can I at least sketch my ideas for a solar-powered, IR activated, wifi-enabled can opener?

You can already get a WiFi enabled electric can opener and bar code reader... Yup I found out about it a while ago, it appears to be for "old folks" children, so that they can tell if granny is having soup or beans for lunch or to reorder.

The openers are made in China and according to a friend who has played with it with a Dremal and other tools / "weapons of mass deconstruction", it's not that difficult to turn it into an AP/bridge that could inject traffic... Apparently they have now got a few more bits to put in their home robot out of the deconstruction...

Gerard van VoorenAugust 15, 2017 12:48 PM

@ Thoth,

A Web Browser not in bed with Govt Agencies and Big Corps would be much more preferable but it I guess it will never ever happen as usual.

Guess why? Because it takes hundreds of man-years to create a browser and to maintain it. And why is that? That's because "The web" is such a piece of cr*p, it just ain't funny. And why is that? Two reasons. 1. Rough start. "The web' wasn't properly engineered, it was grabbed together. 2. After the rough start, corporations took over.

Bong-Smoking Primitive Monkey-Brained SpookAugust 15, 2017 12:52 PM

Here lies @Bong-Smoking Primitive Monkey-Brained Spook;
The last agent victim uncovered by my godfather, the eccentric kook;

Two shots in the head
Left the stoner dead :(

WaelAugust 15, 2017 1:05 PM

@Nick P,

The answer was in the story and my original comment.

Something tells me there is another efficient way. Not sure how, yet.

AnuraAugust 15, 2017 1:10 PM

With marijuana users going more and more high tech, I wonder how long it will be until we have IOT-enabled vaporizers.

ab praeceptisAugust 15, 2017 1:30 PM


Usually I (still?) get strange looks when saying that. Both tor and the festering CA abscess provide *very* strong hints that, as I call them, the browser mafia is in bed with rather unpleasant groups; maybe it would even be better matching to describe them as a mafia family.

But people have been brainwashed and know - and religiously believe in - the holy credo: "mozilla are the good guys, tor are the good guys, lets encrypt are the good guys".

At that point I'll include

@Gerard van Vooren

Yes. While a naked browser might be feasible for a small group of developers the whole festering abscess is not. In other words, a "dillo" is feasible, an "opera" is not. And even if one somehow managed to, they, being largely in control of the diverse relevant standards gremia, would simply create funny standard extensions or play other dirty tricks to kill off the *really* free and for-the-people (as opposed to for their mafia and the spooks) browser.
And rest assured that those guys wouldn't get millions of grants and support thrown at them.

Browsers are what in old times bridges along one of a few central routes were and "do no evil" google, "like me" facebook and others would do just what their analogues some hundred years ago did when someone shook their monopolies; they'd start and fight very bloody wars.

But we must not worried because, as everyone knows, google does no evil, facebook is all about love, the spooks defend your privacy and mozilla are the-good-ones (TM).

Btw: and why should one develop another html/css/javascript/and more crap browser?

The day will come (maybe driven by a state or a large corp) when the 2nd rounds starts fresh, maybe json based, no vm built in (or a rather limited and for a statically typed, limited, and fully verifiable dsl). I expect that one to be less dynamic or to offer a basic mode (no funny jumping balls but simply quasi static content) and an idio^h^h^h^h "extended" mode with jumping balls). In other words: It will be a modern version of what has worked well with mainframes decades ago. In yet other words: It will be, do, and deliver what is really needed - and not what a plethora of lurking scammers, criminals, and spooks want to force-feed.

ab praeceptisAugust 15, 2017 1:45 PM

Nick P

While you are largely right theoretically that issue also demonstrates nicely why I stick to my boring pragmatic line. Brutally put: Even *if* - which is very hard to achieve - some party, say a state, were in full control of the full stack, starting at the silicon level, there would *not* be 100% security (i.a. because humans make errors and because among tens of thousands of people needed there will be some rotten ones).

But as luck has it our problem isn't really the absence of 100% security. Nope, our problem is the presence of utterly lousy code and dangerous chip designs (e.g. trustzone, amt, etc.).

Our problem is not that, say, a Modula or an ML compiler aren't 100% perfect. Our problem is that a very concerningly large part of software is still written which all but guarantee to create problematic software. Our problem is that an immense pile of the very underpinnings (OS, libararies) in existence - and use! - are of ridiculously poor quality. Our problem is that even the most critical building blocks are vomitting bugs, vulnerabilities and leaks almost every week.

Hence the urgently needed solution is not to focus on the 0.1% margin from 99.9% to 100% safe, secure,reliable - it rather is to get at least to 99% in the first place.

Elmer FUDAugust 15, 2017 1:55 PM

tor provides "*very* strong hints that, as I call them, the browser mafia is in bed with rather unpleasant groups"

This is cheesy innuendo for a lion-hearted defender of integrity in software. In fact, rigorously parsed, it is meaningless poesy, words, words, words - unworthy of a soi-disant master of software design. So, Mister Expert in Unspecified Stuff, here is the source.

Why don't you show us the very strong hints that you're very lamely hinting at? You're a software expert, as you never tire of telling us. Cmon, you could do it baked, right?

Nick PAugust 15, 2017 2:34 PM

@ Wael

It depends on the complexity of the problem. C and UNIX were barely designed. The original chip from Intel might have been but x86 is a mess. The proprietary and FOSS development models for the toolchains usually create enormous complexity with much of it little documented. So, whatever solution is used to create a trusted executable for UNIX, C, and x86 will probably be complex.

Now, the solution can be much simpler if you use simple system or one designed for verification. The Forth work, for instance, has a tiny core. It about doesn't matter what Forth dialect they are using as an interpreter for it will be easy to write. Then, run their code through it. Done. A high-level language that must be parsed, compiled, and run will naturally be harder to bootstrap. One cheat I saw, inspired by Hansen's Edison and "While" languages in verification, is to just build an interpreter or template-driven compiler for a language having only expressions, stack operators, heap operators, C calling convention (esp FFI), basic modules, and standard I/O. The source of the compiler is rewritten in terms of this language for initial bootstrap. Since it's close to a C subset, it can also output standard C that lets one recompile the compiler with other compilers. Automated tests can also be run through EXE's each produce to find compiler errors.

Another idea was to use term-rewriting languages to convert the non-standard, preprocessor-loving source into standard C. META II illustrates those can be really, really simple. Alan Kay et al use that approach with tools like OMeta to build usable OS's in a few tens of thousands of lines of code with many DSL's. The result is a re-usable tool that can support other efforts. Rosu et al of K Framework used a more formal version of that to build a whole C compiler from executable specs. Although built on Maude, something like that could be done on simpler tool especially if user specified heuristics in each rule or set of them

So, there's opportunities for improvement. It's just that we're working with garbage not designed for verification with lots of accumulated cruft. The solutions can look ridiculous.

@ ab praeceptis

"Hence the urgently needed solution is not to focus on the 0.1% margin from 99.9% to 100% safe, secure,reliable - it rather is to get at least to 99% in the first place."

People investing in robust things already did that with safer languages and strong specs. Then they went for the 0.1%. The result in compilers were Scheme48/PreScheme, CompCert for C, and CakeML for Standard ML. Especially for Coq and Isabelle/HOL work leveraging latest advances, the final TCB is ridiculously tiny. Get the specs and that one implementation right, then you're done far as trust in whatever results so long as you trust specs and the implementation.

Remaining bugs will be rare. Monitoring and recovery mechanisms are still necessary but attacks will be so rare the 0-days will probably be $1+ mil. Number of attacks will drop much like we see with iPhones just using medium-assurance methods with whitelisting. We already see groups like Praxis getting defect rates around the Space Shuttle control software with just 50% premium over regular development. So, you're overstating how bad things are in either medium or high assurance. It doesn't need to be perfect to vastly improve the status quo. We also have a few nearly-perfect things to draw on so why not. :)

Nick PAugust 15, 2017 2:47 PM

@ ab praeceptis

"But people have been brainwashed and know - and religiously believe in - the holy credo: "mozilla are the good guys, tor are the good guys, lets encrypt are the good guys"."

This sounds to be FUD. I wonder why you push it.

Mozilla publishes its source, fixes what problems they can, are heavily-constrained by a mess of a job with piles of code that predate modern Web, and let people change search engines despite revenues coming from search. Recently, they created a top contender for safe programming that they're using in Project Quantum improve security and performance of web browsers. They're the least risky of the browser vendors that I can tell.

Then, we got Tor. It's originally a military project to facilitate covert activity online. The CIA/State-connected groups still fund it for that reason. The developers are an odd bunch without the security engineering skills necessary to stop nation states in the long run. The anonymity goal itself is a cat and mouse game. The protocol and implementation does get intense review with constant improvements. The NSA validated them accidentally thanks to Snowden where it's one of the things that piss them off the most. They also indicate some success in breaking it. Regardless of Tor Project intentions, their work has protected a lot of people with enough anonymity to partly hold off mighty NSA with their global surveillance (worst attack model per Tor Project itself).

Let's Encrypt solves a problem that's long overdue: certs for everyone. They produce open tooling for that. They achieve their goal of ridiculous amount of certs out there. I haven't seen them do anything evil like their many competitors. They're also a non-profit incentivized to help instead of just further corporate greed. An organization that should only receive praise in terms of overall impact regardless of what I think they could improve in security implementation.

So, you're just slandering two organizations without any proof despite a ton of evidence of positive benefit countering you. You're also misleading people about one which is in bed with shady people but to do *exactly what they claim* since that's what the shady people needed. A different, competing group of shady people also confirmed they're doing it. So, again, you're just straight-up lying or misrepresenting beneficial products in a way that might drive users away from them toward more malicious or ineffective tech. I'm not even going to guess at your motive.

WaelAugust 15, 2017 2:52 PM

@Nick P,

Now, the solution can be much simpler if you use simple system or one designed for verification...

Good analysis (as almost always.)

Time's up...

Which is more efficient?
for(i= 0; i < 10; i++) or

for(i= 0; i < 10; ++i) <--- This is!

int i; // Obvioulsy i is an integer
How do you "elegantly" force i to be 0 or 1 (meaning it behaves like a Boolean)


Gerard van VoorenAugust 15, 2017 2:53 PM

@ ab praeceptis,

The day will come (maybe driven by a state or a large corp) when the 2nd rounds starts fresh, maybe json based, no vm built in (or a rather limited and for a statically typed, limited, and fully verifiable dsl). I expect that one to be less dynamic or to offer a basic mode (no funny jumping balls but simply quasi static content) and an idio^h^h^h^h "extended" mode with jumping balls). In other words: It will be a modern version of what has worked well with mainframes decades ago. In yet other words: It will be, do, and deliver what is really needed - and not what a plethora of lurking scammers, criminals, and spooks want to force-feed.

I don't know. I am not a prophet. I do see however that "the web" is getting each year more down the drain.

pup socketAugust 15, 2017 3:00 PM

@Wael: 1. shouldn't matter because of DCE, 2. two shots to the head is one way, yes.

Nick PAugust 15, 2017 3:30 PM

@ All

You might find this project interesting far as educational OS's go. Here's a description:

"This is an educational OS designed to get students prepared to work on software aimed at parallel, distributed, multicore clusters. PIOS consists of a boot loader, a microkernel, a user-space runtime embedded in a minimal C library, and a set of sample applications, all sliced into subsets forming an instructional curriculum as described below. The microkernel itself only has four system calls. The course also covers weakly-consistent, state replication and distributed, shared memory."

Nick PAugust 15, 2017 3:37 PM

Actually, I'll add their publications page since they did a lot of good work. The main guy, Bryan Ford, behind PIOS also worked on Flux OSKit, Vx32 sandbox, and recently CertiKOS. Lots of work in anonymity and distributed systems, too. Just thought readers might find something that interests them among this list.

WaelAugust 15, 2017 3:42 PM

@pup socket,

You're pretty impressive! The answer applies to two posts! but you're wrong on (1) and DCE - think vectors, not scalars. You're right on the three other permutations.

Do I need to explain?

AnuraAugust 15, 2017 3:43 PM


Think of pre-increment and post-increment as these (C++) functions:

int preinc(int &a) {a+=1; return a;}
int postinc(int &a) {int x=a; a+=1; return x;}

In this case, you are not looking at the return value, so there is no reason to return x (or a), and if there is no reason to return x, there is no reason to declare it or assign it; both functions, if inlined, will get optimized into just a+=1. This is one of the easier optimizations for compilers to make.

ab praeceptisAugust 15, 2017 3:48 PM

Nick P

"99.9%, languages"

Sorry to be boring but this is once more a case of reading papers vs. working in real world.

CompCert (besides being partly commercial), rust, cakeml, etc have quite insignificant uptake/use and are largely alpha/very early stage. Besides the elephants C, C++, php, java, et al they are hardly ants, if that.

And that's not irrelevant. For paper purposes they might look impressive, for real use, however, good documentation is needed, feature stability, libraries and ffi, editor support, and more is needed.

And anyway, the *vast* majority of the existing and used code base is in the elephant languages, mostly C and C++. Funnily that's also true for the tools behind the languages: antlr - java, llvm c++, many tools (like e.g. tla+) - java (a major part of PL design and engineering has been all but taken over by java).

My concern isn't papers or paper solutions. My concern is the real world. And don't get me wrong, I like to read good papers and I'm exited, too, by some of them. But looking at the real world one finds a distance of light years (from cakeml, rust, compcert, etc, let alone agda, idris and co.) and a situation that is very sad.

A final example: After decades(!!) at least the current tls version is formulated in F*. After decades! *That* is the real world.

"tor, 'fud'"

Oh well, feel free to see it any way you like. I'll just pick out 1 of your statements:

Let's Encrypt solves a problem that's long overdue: certs for everyone.

That's akin to lauding a treatment of final stage cancer for having solved the patients dandruff problem. Yes, price was one (of many) factors - but certainly not the pressing one.

In other words: let's encrypt ignores the real problem and probably even aggravates it. Why? because the really grave problem here is the whole festering PKI, of which CAs and, more specifically, the price they ask are but one - and a minor - subproblem.

I don't care whether catpoop is finally free for everyone or costing 5$ or 50$ per year. What I *do* care about is security. letsencrypt is the solution to pretty precisely one problem, namely to not have browsers complain about self-signed certs. *That* is the problem letsencrypt really solves. Otherwise it is, if really different at all (besides price) possibly *worse* than CA certs (because those at least might actually check anything).

But again, feel free to propagate the "tor equals security" or "letsencrypt is great" fairy tales. I again feel free to point out that it's not me who needs to prove tor being insecure (although that prove is existing) - it's tor who must prove that their stuff is secure.

You are free to state your opinion and so am I. And I happen to think that there are clear hints pointing to a browser/CA mafia ("collusion"). Just one hint of many: Rather than providing a relatively secure way to feed login data through domain sockets, the browser mafia sticks to the (utterly insecure) copy/paste scheme and, to add insult, seriously offer "wallet" plugins and other "we keep and fill in your login data" schemes. I don't know about your universe but in the one I live in that clearly demonstrates the true interests and intentions of the browser mafia; they want as much control as any possible (ideally via plugins) and they don't care a rat's a** about the users security.

9090DBAugust 15, 2017 3:52 PM

I don't want to get political here but the NYT has this

"Justice Dept. Demands Data on Visitors to Anti-Trump Website, Sparking Fight"

They got a warrant for Trump dissidents visiting hosted by DreamHost who are fighting the constitutionality of the warrant saying its overly broad. The Justice dept is demanding that it turn over data identifying all the computers that visited its customer’s website and what each visitor viewed or uploaded.

WaelAugust 15, 2017 3:58 PM


Thanks. I wasn't sure of the context. @pop socket blockquoted nothing. Funny that his answer applies to two posts, and I wasn't sure which.

This isn't about DCE, though! This is about making a copy of a variable that maybe a vector or just incrementing it in-place. It makes little or no difference if i is a scalar (built in type, like an int) Not sure if compilers treat that the same way as DCE. Still: in the for loop: ++i is the more efficient way.

@pop socket's response applies to these two posts:

See, one talks about two shots to the head, and another talks about !!i; '!' is called a 'bang' so there are two bangs to the 'eye' which is in the head. Freakin' amazing response! That's why I wanted to see how "DCE" applies to the first part of the poem!

Me and my pattern matching ;)

WaelAugust 15, 2017 4:06 PM

@pup socket,

You're a genius! It's no accident as your choice of handle shows! You deliberately replied to two posts in two lines. Most impressive!


Wait a second! -1 for the DCE answer. .+9 isn't bad, still :)

AnuraAugust 15, 2017 4:41 PM


The point is that the for loop is where it matters the least. If you aren't reading the return result, it makes no difference. Hell, in GCC it won't compile differently even without passing optimization flags. Also, the increment operator only works on numeric types; I don't really know what you mean by scalar vs vector. Primitive vs composite? Value vs reference?

WaelAugust 15, 2017 4:51 PM


Give me sometime. I'll prepare a concise answer...
but you can search for that on the World Wide Web?

md5August 15, 2017 6:02 PM

XOR vs AND etc, you are all thinking in-band,
each choice gives you an extra bit of entropy for changing the file checksums, each choice also may affect the compression efficiency or allow the dual use of the code-data as something-else-data, also there may be situations where the only opcodes must be also printable characters / valid inputs to some uncontrolled gatekeeper...

AnuraAugust 15, 2017 6:17 PM


Well, in that case, you are just using syntactic sugar to call a function; which is faster depends on how it's defined, and whether it can be inlined. Since C++ templates are basically just a turning-complete macro language, the full definition for the functions will (normally) be defined in every file that they are used and, thus, easily made inline.

Test it out - compile with optimization flags, and see if there is a difference.

WaelAugust 15, 2017 6:30 PM


I used it in the past. My for loops use preincrement rather than postincrement (or decrement). Sometimes we use external libraries that we don't have source (or time) to investigate. Just use ++i in the loop and you're fine.

This was just one example, by the way ;)

But, when I have the time, I'll verify it again. Don't hold your breath, though.

AnuraAugust 15, 2017 11:16 PM


Woah! What year is it there? 1997? It seems it's all about Durban Poison and Girl Scout Cookies here in the future.

WaelAugust 15, 2017 11:43 PM


It's the same year! But rumor has it pre 1999 'stuff' is unlikely to be subverted, haven't you heard? ;)

JG4August 16, 2017 6:47 AM

I made a modest increment of progress in applying OODA to understanding of living systems and vice versa. That would be the evolutionary development of intelligence. I probably said before that observe = sensor input, orient = filtering operation, decide = filter operation, and act = change output. The filter variables are set and preset by a combination of nature and nurture.

Loosely speaking, intelligence is the ability to connect and utilize cause and effect. In the context of data visualization for "human-in-the-loop" systems, that means tailoring the data to the orient/decide filter functions so as to achieve rapid and correct response.

What I have not said clearly enough is how to use adaptive filters to capture and invert transfer functions. Adaptive filters require feedback, which quickly devolves into supervised and unsupervised learning. The easy cases are where you know what you want the filter output to be. You can take a device under test, feed it a series of known inputs, while observing the output. If you use the DUT output as feedback to the Widrow-Hoff LMS filter, you force the filter weights to a state corresponding to the forward transfer function of the DUT, while if you use the input of the filter as feedback, your force the filter weights to a state corresponding to the inverse transfer function. These both are useful.

Application of these ideas to computers is somewhat more difficult than your run-of-the-mill linear, time-invariant electronic components. Moreso to wet computers. Let us suppose that there are billions of networked computers on your blue marble. We would like to obtain datasets that can be extracted to produce feedback for recognizing malicious code. It's not unlike the recognition of DNA as self or non-self in the biology world. This topic can be unpacked at length, but we need to consider the conflicts of interest that drive the feedback paths in the adaptive system known as government.
...[observe orient decide act]
Dung Beetles Navigate Via the Milky Way, First Known in Animal Kingdom National Geographic. A bit stale, but since we haven’t run it before…

...[you know why they call it mort gage]
Goldman Tops Banks Betting on a New Type of Hedging Bloomberg

AIG shops $2 billon death benefits portfolio: sources Reuters

...[I figure that companies automatically fall under computer security]
Everything Benchmark used to love about Uber’s Travis Kalanick is what it hates now Quartz

Jeff Bezos Should Put His Billions Into Libraries WIRED

...[I include this only to say again that none of the problems are new. more eloquently and long ago, "there is nothing new under the sun" by any reasonable measure, the sun is a very deep gravity well; thus it could be "above the sun," except that the viewer is in a local energy minimum]
Thucydides’ Ignored Lesson The Diplomat

...[you'll need physical security, political security, food security, shelter security, water security and emotional security to ride out The Unfolding Great Collapse(tm)]
Surviving America’s Political Meltdown Jeffrey Sachs, Project Syndicate (Furzy Mouse).

New Cold War

New report claims DNC hack was an inside job — not Russia NY Post and What if the DNC Russian “hack” was really a leak after all? A new report raises questions media and Democrats would rather ignore Salon. When you’ve lost Salon…

Russia’s biggest war game in Europe since the cold war alarms NATO Economist

Trump and the Allies Foreign Affairs

Julian Assange, a Man Without a Country The New Yorker

...[fire security and class insecurity]
Class Warfare

Grenfell Tower inquiry accused of ‘whitewash’ for ignoring social housing policy International Business Times

JG4August 16, 2017 7:40 AM

I haven't seen Sancho_P for a while, but I was pleased to see his comments from 2014 in one of the recent wayback links. I probably missed it then because it was one of my rougher patches. I am interested in all aspects of security and systems. I'd like to see a clear exposition of what should be open sourced and what shouldn't, from both small business and big business perspectives.

10 years ago today was the first serious squall in the financial hurricane of 2008/2009. please note for the record that we have been in the eye of that storm for 7 or 8 years. the other eyewall could be quite ugly. spoken like a true collapsitarian

we could read this as an attempt to constrain feedback paths
...[but we're all in the five eyes family together]
Australia’s game of tit-for-tat party politics took a diplomatic turn on Tuesday, with New Zealand drawn into a row over whether Deputy Leader Barnaby Joyce should be thrown out of parliament amid revelations he has dual citizenship.

missed this in the nakedcapitalism newsdump
wtff? they're engaging in fitness training together? or fitness testing? it's a good thing that they're not allowed to have guns and bullets or someone might get hurt. all 2.4 billion of them.

Chinese troops armed with iron bars and rocks brawl with Indian soldiers near border, New Delhi source says South China Morning Post

Smartphone Separation Anxiety is GrowingAugust 16, 2017 9:33 AM

Its a worldwide disgrace when 80% of easily impressionable teenagers are already addicted, having been programmed and conditioned by Silicon Valle engineers.
Parents,teachers, government, military and even churches are of little help as they too have become addicted zombies. Studies have shown the minorities and low-income are the most susceptible. Yet there is no one protesting. For shame on America

Someone close to me will not put down her new Samsung S8+. Her political views are driven to the extreme by tailored/biased/one sided news from Facebook. The feeds magnify what gets her emotional and upset. Social media programming exasperates political issues and viewpoints. The personalized (diabolical) news feed is the catalyst. How the angry target responds allows the data-miners even further insight. Do they fear the public being able to associate the extreme violence in Charleston with social media?

Hitting Home
Many women had mental breakdowns after Trump won the election. The social media programming brings shame upon America, a county full of drug addicts and alcoholics. Now people must have marijuana! They’ve changed my marriage for the worse as they take daily control of my wife.

She already a fan of Zuck’s 2020 presidential run, but insists she will NOT vote for him. (I’ve told her she will have no choice as he will stand for everything she will)

Look at the last election. Everyone involved could not put their phone down. Social media makes politicians angry and emotional too, so nothing gets done. Hence the daily outbursts of anger on social media. The day-to-day inconsistencies are troubling.

The ruthless data-miners have taken away citizens privacy. Now for-profit corporations are America’s Moral Authority. So, like, what did we do to deserve this load?

Clive RobinsonAugust 16, 2017 11:14 AM

@ JG4,

Chinese troops armed with iron bars and rocks brawl with Indian soldiers near border

A fairly typical tactic. They send "unarmed" soldiers to attack armed soldiers, eventually one will shoot... That's then the "first strike" which means they can thrn send in the steam roller pretending that they are defrnding thrmselves.

Various nations have done this at one point or another. Perhaps the worst was Israel, who realised that an NSA vessel was off shore and had seen them committing the attacks on unarmed civilians. So Israel sent a motor torpedo boat out to sink the NSA vessal.

The Israel's almost succeeded but the ship and the crew hung in there. However the then US President tried to cover it up in order that "the jewish vote would not be lost"...

And others wonder why some US citizens think there is a Zionist cabal or similar controling asspects of the US Government...

WaelAugust 16, 2017 11:42 AM


Quick and dirty (for blog size constraints, too).
play with ++p vs. p++ in the bolded lines,
Compile and run the program. I get, on average:
++p: 1.138 Seconds
p++: 1.41 Seconds
On MacOS, Xcode, compiler defaults. Don't have time for other platforms or compiler flags. My guess is it won't make much difference.

// preincrement vs. postincrement
// replace p++ with ++p in the three places it occures and check the time
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
int main(int argc, const char * argv[]) {
vector<int> v(100000);
double start=clock();
// create an iterator over the vector container
vector<int>::iterator p;
int i = 0;
// populate vector elements
for(p = v.begin(); p != v.end(); ++p) {
*p = i;
// display the contents
for(p = v.begin(); p != v.end(); ++p) {
// cout << *p << endl;
double stop=clock();
cout << "time: " << (stop - start) / CLOCKS_PER_SEC * 1000 << endl;
return 0;

pup socketAugust 16, 2017 12:00 PM

@Wael: 1.138 v 1.41? Or 1.138 v 1.141? (Exactly 3 hours left. Tick-tock, Clæwice...)

WaelAugust 16, 2017 12:12 PM


Sorry - minor bug fix. Timings now favor ++p vs. p++ more prominently... (I had an unneeded iterator incrementation.) Only two places to mess with pre vs. post. All I could afford for this was 6 or 7 minutes... Apologies to the host - net time I'll use past bin or something. but the code here is tiny

// preincrement vs. postincrement
// replace p++ with ++p in the two places it occures and check the time
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
int main(int argc, const char * argv[]) {
vector<int> v(100000);
double start=clock();
// create an iterator over the vector container
vector<int>::iterator p;
int i = 0;
// populate vector elements
for(p = v.begin(); p != v.end(); ++p) {
*p = i++; }
// display the contents -- commented out on purpose to remove common denominator I/O timings
for(p = v.begin(); p != v.end(); ++p) {
// cout << *p << endl;}
double stop=clock();
cout << "time: " << (stop - start) / CLOCKS_PER_SEC * 1000 << endl;
return 0;

Surprise! I had a bug in my code because, of course, I used C++. Had I used a different programming language, this would not have happened, for sure ;)

WaelAugust 16, 2017 12:18 PM

@pop socket,

The former: 1.138 v. 1.410. Your sarcasm can cut through thick fog (and shock 600 electric eels connected in series.) Welcome to the club :)

oup socketAugust 16, 2017 12:21 PM

@Wael: now won't compile because of commented out closing braces... Tsk, tsk...

WaelAugust 16, 2017 12:26 PM

@pop socket,

what's with the ++p in that second loop‽

Iterates over the vector elements, to supposedly display them and make sure the container is working. I commented out the cout line afterwards. You can delete the whole loop now and work with the first loop that puts the value of i into the container. You'll arrive at similar results (ratio preserved!)

If you have a bug in a 9 letter word (your name), can you blame me for a bug in a "demo program"?

pup socketAugust 16, 2017 12:30 PM

@Wael: this is why VSP insist on spec and formal—oops, sock's slipping! (^^^ Too late!)

WaelAugust 16, 2017 12:30 PM

@pop socket,

Tsk, tsk...

@ifreakin'anf? Where have you been hiding, man? Only he said tsk, tsk ;)

Huey PilotAugust 16, 2017 12:33 PM

Read a bit of this description of and related bitcoin and the like purchase processing methods

the system is getting so convoluted and complicated it is hard to tell who is paying for what, when and how.

All the players, big and small, are trying to create their own money (Amazon gift cards, credits to your account, escrow accounts...) to make some money on the hold time etc. A lot of them are likely making “profits” on those who tire of following through or forget about transactions/returns/rebates/exchanges/escrow conversions... So though the persistent 20% off and gift exchange process sounds appealing, for most I suspect it is not worth the risk and effort.

As this progresses, I fear we may eventually lose track of reality in this process.

As a manufacturer or worker, the first thing I would do is get the hell out of these things with my payment. But what would I put my “savings” into? It is all fiat now. There are no savings any longer – they are all “Republic Credits” in one form or another. Until you turn it into tangible property by swapping with a greater fool, you own nothing. Dollars, Rupees, bitcoin, amazon gift card...Imagine the money to be made chasing your tail around and through these financial vehicles (arbitrage) ! No doubt the tail chasing is going to get much faster with computers so only those well equipped with fast connections will be on top. The lowly worker or small manufacturer will get stiffed.

pup socketAugust 16, 2017 12:37 PM

@Wael: considering my demise, but you still have doubts, so maybe not. Use brain.

pup socketAugust 16, 2017 12:50 PM

@Wael: you could do that in 3 (I have, once...). No more hints. Pull trigger? Doubts?

WaelAugust 16, 2017 12:59 PM

@pup socket,

I prefer you use a blockquote tag to save me the time needed to guess wtf you're talking about ;) You're not planning to get another +9, are you?

WaelAugust 16, 2017 1:23 PM

I need to take a breather - can't hog the blog. And I have to make a living, too.

pup socketAugust 16, 2017 2:00 PM

@Wael: (LOL) No can do on quotes. Part of cover.

Not planning to get another +9. Handing in my brother before I end it all. He was only 3 when you met him, and still you called him mister. So polite. But I'm 9, and you call me names (ianf) instead! Not nice at all! ;-)

Take that breather, and make that living. But find the two answers. :-)

Exactly one hour left. Tick-tock, Clæwice...

pup socketAugust 16, 2017 3:00 PM

Time's up, Clæwice! You can find me and my brother at the base. (I think you knew.)

ab praeceptisAugust 16, 2017 3:56 PM


As you, for a welcome change, posted something related to security and of a technical nature, that post got my attention. But first: Thanks for that welcome exception.

Unfortunately, your code is next to worthless (failing to achieve the desired insight) for multiple reasons.

One reason for that is that simple wallclock timing is far too crude. What you'll want is to include time.h and to use

clock_gettime(CLOCK_MONOTONIC_RAW, &t_start); // and t_end
to get some some timings that are at least not dimensionally off.

Here is the relevant part of your code, accordingly enhanced:

struct timespec t_start, t_end;
uint64_t tstart, tend;
//... start timer, for loop
clock_gettime(CLOCK_MONOTONIC_RAW, &t_end);
tstart = t_start.tv_nsec + t_start.tv_sec * 1000000000L;
tend = t_end.tv_nsec + t_end.tv_sec * 1000000000L;

Running that test, however, unsurprisingly shows that any potential performance difference between ++pre and post++ are so ridiculously small (if existing at all) that they are dwarfed by other factors that make microtiming hard (e.g. OS thread switches).

Repeating the test, in the same file, with a second vector w but this time post incrementing the loop variant shows a funny variety of results, ranging from some ten musec to some hundred musec.
In other words, the whole loop is pretty much lost in the "OS noise". Which, well noted, isn't even disturbing as you chose to use a C++ vector rather than simply an array which makes the operation in the loop heavy enough to dwarf the i++ vs ++j issue anyway.

More generally speaking, which is merited by the fact that we frequently need to micro-benchmark in crypto, a lot of rules and factors must be observed and taken care of to arrive at anything meaningful. When developing KDFs and/or ratchets, for instance, the greatest care must be taken as timings are a very major factor of what the whole mechanism is about (memory cost being the other major factor). One helpful hint I'd like to provide is to have a separate testing system that is as "naked" as any possible (no non vital services running, no other programs, as far as possible nothing that creates interrupts (e.g. networking).

Oh, and regarding the original question: the difference between ++i and j++ to inc/dec a loop variant is ... not existing, i.a. because any non brain dead compiler will understand and implement it simply as an inc/dec operation.

tyrAugust 16, 2017 4:02 PM


The Chinese military in peacetime functions
as a boundary defining unit. Once in awhile
they push against the border to make sure it
is a clearly defined border. In one famous
incident they pushed India and the Indian
troops faded away leaving them a clear shot
at taking over India. The commander had no
orders about what to do. He wasn't going to
grab India without clear orders to do so.
After they sat for awhile India finally
mounted some defense and they retreated to
the border happily. You saw the same thing
when VietNam ended, they pushed the Viets
and ended the fight with a clear border in
place. The same efforts against the Rus
looked like a reinactment of WW2 but it was
only a boundary test by both sides. Very
easy to misread the continually jockeying
along the boundaries as unwarranted agression.

I've often speculated about what the Maoist
Chinese would have done with (India), a few
more mouths to feed... : ^ ). You hear a lot
of loose talk from western government types
about asia but most of them don't know much
about the area or its cultures.

The current Rus exercise is because some
unnamed fools are trying to start a nuclear
war on their doorstep.

The Liberty episode almost worked, the 5th
fleet had a nuclear strike in the air on
the way to Cairo before the attack was IDed
as Israelites. Just another cliffhanger of
the cold war era.

I haven't even thought about a disc image
editor for years. That was the way to go
if you were sincere back in the day.

I haven't had to make any paper tape for a
bootload lately either. I doubt Nick P.
wants to load from front panel toggle
switches to begin his cleanup restart

AnuraAugust 16, 2017 4:09 PM


Make sure that's a release build, and that you run it *outside* of the debugger. I also recommend running it through console via the time command to get accurate results.

JG4August 16, 2017 4:22 PM

the afternoon news dump was a bit thin

@Clive - Thanks for reminding me about that. I understand that either the Chinese and/or North Koreans emptied their prisons and/or insane asylums. The inmates were given pots and pans and told to bang them and run, or get shot in the back. Thus, they were the first wave to engage US troops at one or more battles in the Korean conflict and get shot in the front. It probably is well known that the US troops who marched to Berlin in the aftermath of the Berlin airlift carried rifles, but no bullets. There were bullets on the trucks, but in the event of a skirmish, they likely would have died before getting to them.

@tyr - Thanks for the helpful comments. I should resist the inclination to cast everything in terms of system identification, but probing border locations fits neatly into that paradigm. In the Secret History of Silicon Valley it was cast in terms of something like order of battle, in identifying which electronic systems were at various points in space over Soviet territory. I didn't explicitly say that the adaptive filter method is system identification technique, but that is the substance of "force the filter weights to a state corresponding to the forward transfer function." It's more difficult for computer systems, because you may not a priori know what you want the response to attack to be. There are some useful analogies in living systems, where blood clots, inflammation kills healthy tissue at sites of infection and injury, and the police administer hardwood shampoo to anyone still standing. Hope to have some further insights tomorrow.

ab praeceptisAugust 16, 2017 4:26 PM


No. That would lead to even more crude and meaningless results (time on console).

If one really wants to know probably the most sensible thing to do would be to look at the generated assembler code.

RatioAugust 16, 2017 4:29 PM


Looks like I'm late to the party (been busy, you know how it goes...), but how about diffing the generated code for the two versions instead? I'd expect identical code for ++i and i++ in this context for ints, say. Not sure for something like your vector.

AnuraAugust 16, 2017 5:25 PM

@ab praeceptis

Putting timers in-code can sometimes be unreliable due to optimizations. If you are not taking at least a couple of seconds to run a test like this, your benchmark is useless anyway - if 100,000 iterations don't show a difference, do a million; Wael's results took over a second to execute only because he's running it from within the xcode IDE, which attaches a debugger.

snur-peleAugust 16, 2017 5:27 PM

@wael, ratio, ab p, conserning post vs pre increment

i'm not fluent in c, or any other hll, being strictly in the hw bin myself.
therefore i gladly yield to the experts,
but it seem to me the type of potential difference would show up at a higher percentage when the loop is short.
So why not test using thousands of loops with a depth av two?
or please enligthen me

D-503August 16, 2017 5:34 PM

Re: office suites
@65535 @Rachel @ab praeceptis

I've used LibreOffice with some success, even when opening the sort of large and complex files that often cause Microsoft Office to crash. I can't claim to have tested everything, but it seems to be able to do most of what Microsoft Office can do, and seems to have a much more active developer community than OpenOffice. The main drawback of LibreOffice is a minor one: a clunky, retro user interface that feels like a throwback to the year 1990. It's a problem shared with most noncommercial, crowdsourced projects.

If you happen to be livestock owned and groomed for slaughter by Apple (as I am), there's NeoOffice, a fork of OpenOffice/LibreOffice that's been tweaked to be more compatible with MacOS. I haven't tried it. It costs money up-front, albeit only a trivial amount compared with Microsoft Office.

Typeface licensing is a massive headache if you need to view old files or work collaboratively with other people. This applies no matter which office suite you use. Whenever you move files containing formatted text around, typeface licensing is going to be your achilles heel. It's a major cause of vendor lock-in in workplaces, whacking anyone who attempts to escape Microsoft's high-walled feedlot. And if you use system fonts instead of Microsoft Office's prepackaged fonts, you'll often run into trouble sharing documents and presentations between operating systems. A long-term solution would be to use only a standardised set of free (in the Free Software Foundation sense) fonts, and convince everyone else to use them as well. One caveat: Currently, most free fonts are disparaged by typographers, with only a few exceptions:

ab praeceptisAugust 16, 2017 6:32 PM


No. Simple reason: there is no difference, ergo nothing to measure.

++pre means: increment value then assign it then do operation. post++ means: assign value then inc it then do operation (the last part may be inverted, no difference). The important point to understand is that pre vs. post isn't different per se but only in a (i.a. chronological) context - which typically isn't existent wrt a loop variant.

It might be helpful to look at a for loop construct as 3 blocks, namely the init block, the check block, and the "walker" block, i.e. the one where the variant is changed, which btw. not coincidentially happens to be the way such devices are typically implemented.

Like this:

do init block. // e.g. "int i = 0;"
check: // label
check condition // e.g. i if false jmp to exit
// loop_body:
do stuff // e.g. printf("%d\n", i);
// stuff done. change loop variant and loop
do loop variant change // e.g. i++
jmp check: // OK, go to check for next iteration.
exit: // done. clean up and leave loop construct

It's important to understand that ++pre or post++ happens in a block that is executed fully and quite independently, so the pre/post difference is relevant to context *within* that block - and *not* to the full loop device.
Imagine, for example, that we needed to compute the loop variant for each cycle, say via "i = somearray[j++]" then that would be the context and the pre/post question would make sense. Without context, however, it simply doesn't matter whether i is pre or post incremented.

For C++ it's very slightly different as an object "++" op method is typically used. However, it doesn't know about pre or post; the difference is simply where the compiler puts it into the AST, either before or after assigning, so the basic story is the same and obviously neither is faster.


Noted. But I'm an engineer which pretty much translates to "I don't need lots of office functionality and/or exotic functionality. I simply want usually utterly unimportant (to me) stuff done and off my back, typically of an administrative nature. And I want that to be simple, painless, and reliable", plus, very unfortunately there occasionally are still lobotomized people who molest me by sending mso documents. Formertimes I plainly refused to look at their stuff which more often than not led to time consuming questions and discussions, not rarely accompanied by declarations of some corporate standard forcing them etc blabla; I found that way too time consuming and desired therefore for very good mso doc. compatibility. A few bucks and a major hassle off my back; still sounds great to me.

All of that I find in SMO. Moreover their license is about 20 or so $ per seat which is a very acceptable price for not at all bad software that scratches a considerable itch. So I stuck with it and upgrade every couple of years at a very reasonable price to a major new version (which I need to stay compatible with microsofts merciless version plundering scheme). All minor updates are free anyway.

Plus, I'm *not at all* opposed to commercial software - if it's reasonably well made. Paying others for their work seems quite reasonable and healthy to me so I simply see no problem at all paying 50$ or 70$ for a fully office suite of quite reasonable quality.

ab praeceptisAugust 16, 2017 6:37 PM


Haha! That's what I did. I decreased the loops size by a factor of 10 and then put the loop inside a 0..99 outer loop (for a total of 10 mio iterations). And yes, of course, I compiled for release.
You seem to be right, though, wrt wael. His timings do, indeed, strongly suggest a debug run with xcode. But as that doesn't play a major role for our question I didn't make fuzz about it.

RatioAugust 16, 2017 7:05 PM


Don't be distracted by the loop. It's only used to try and measure the impact, but the issue itself doesn't necessaily have to do with loops.

I'll assume you know there's a difference between the values of ++i and i++ as expressions, and understand what that implies. The question basically is: does the compiler generate code to preserve the prior value in the postincrement case, even when that value is never used?

RatioAugust 16, 2017 8:28 PM


Forgot to add: in C++ there's the added twist of overloading the increment operator as operator++() for prefix and operator++(int), with a dummy integer argument, for postfix. The postfix version is of course expected to preserve and return the prior value, doing extra work compared to the prefix version. And that leads us right back to the question in my previous comment.

WaelAugust 16, 2017 9:16 PM


Yes, I gave you a debug build. I'm surprised to hear all the ignorant comments (not from you. I know that you're an expert developer from the few comments you made in the past) even after I gave links!


You're on the right track!

T T::operator++(int)
T old( *this ); // remember our original value
++*this; // always implement postincrement
// in terms of preincrement
return old; // return our original value

Shows the difference between someone who talks out of his ... I guess some here will fail medium difficulty tests miserably.

If I have the time I'll write another demo. But I don't see why given the information available. goddamn!

I really need a couple of days off.

AnuraAugust 16, 2017 9:23 PM

Okay, here's a simple function, and the assembly diff, to show what you can expect in the general case.

#include <vector>

std::vector<int> foo(int x)
std::vector<int> a(1000*1000);
for (auto i = a.begin(); i != a.end(); ++i)
int x = 0;
*i = x++;
return a;

And the diff of the assembly:

--- incpre.s	2017-08-16 20:18:07.154471774 -0600
+++ incpost.s	2017-08-16 20:15:48.923759360 -0600
@@ -36,7 +36,7 @@
 	movl	$0, (%rdx)
 	addq	$4, %rdx
-	cmpq	%rdx, %rsi
+	cmpq	%rsi, %rdx
 	jne	.L3
 	movq	%rbx, %rax
 	popq	%rbx

So there actually was a difference. So uh, there you go.

Now, if anyone can tell me why my C++ comes out double-spaced and my assembly single-spaced...

WaelAugust 16, 2017 9:41 PM


Sorry. I can't resist this one...

Now, if anyone can tell me why my C++ comes out double-spaced and my assembly single-spaced...

Will it make a difference if you put the assembly before the C++? :)

RatioAugust 16, 2017 9:55 PM


Shows the difference between someone who talks out of his ...

It's all certified experts in here, I tell ya! *snort*

I really need a couple of days off.

I ehmm... see you've been kept quite busy here. ;)


Now, if anyone can tell me why my C++ comes out double-spaced and my assembly single-spaced...

WAG: the code is a copy-paste from your editor and has \r\n line endings, the diff is a copy-paste from the terminal with \n line endings (as FSM intended). Blog code converts both \r and \n into newlines somehow.

ab praeceptisAugust 16, 2017 9:57 PM


No. It simply shows how clueless your talking is (and how contradictory, btw).

What Anura's diff shows is quite probably (it doesn't show what rsi holds) the outcome of a compiler optimization, a smart yet another variant of assigning and comparing pre or post increment.

Anura actually really showed understanding and experience. You, however, tried to show off and failed not on one but on multiple accounts, i.a. misunderstanding of how for loops work and of proper micro-benchmarking. And btw, choosing C++ to show your (wrong) assumption also wasn't particularly smart as it, at least the way you did it, adds weight to the control code both by using vector rather than simply an array and by the ++ op method. Doing that alone utterly messed up the whole micro benchmarking.

Now, to avoid misunderstandings, I don't care that much about how experienced anyone here is as a developer. But what you tried to pull off, namely to demonstrate cluelessness but then arrogating to judge and scold others as if you were a master was really rich.

WaelAugust 16, 2017 10:09 PM


I like this quote from the link I gave you last:

Some mothers (who are also [sic] software engineers) ...

A bucket and a half of sh•t -- same old same old.

Hey! Cool it down with @Clive Robinson ;)

I'm outta here for good this time. A few days only, don't celebrate yet :)

RatioAugust 16, 2017 10:37 PM


I hear ya.

I'm outta here for good this time. A few days only, don't celebrate yet :)

Yeah, same. Need a couple of days to finally really get sh•t done and get rid of stress.

Catch ya later! :)


If that cmpq is only used for the immediately following jne then the order of the arguments doesn't really matter, does it?

AnuraAugust 16, 2017 10:54 PM


Yeah, it's purely superficial. These are the next three lines:

.cfi_def_cfa_offset 8

ab praeceptisAugust 17, 2017 12:14 AM

Anura (and Ratio, if interested)

For the sake of complete understanding:

- cmpq %rdx, %rsi
+ cmpq %rsi, %rdx

Those two lines are *not* equal, i.e. they can not be interchanged. Reason: cmpq is *not* analog to a == b; it rather works like subtracting the first argument from the second and sets flags just like sub would do, which then is picked up by the following jXX instruction.
Example for better understanding: if rdx was 4 and rsi was 8 then the first line above would not trigger carry, however the second line would.

That's why I assumed that there was some smart optimization. If one increments a pointer one adds 4 (or 8, depending on arch.). So, we have the pointer to end-of-array (or vector) and we have the current pointer. Subtracting current from last gives a positive result, i.e. non 0. The same subtracting when current equals end sets zero and subtracting beyond end pointer from end pointer sets carry. This allows for smart optimization, plus it allows for elegant constructs like more efficient pre or post increment followed by the check.

The end result, however, is the same in both cases and works just like I explained, i.e. pre or post can be used for funny side effects (e.g. depending on the compiler enforcing a do at least once or a late variant entry loop, which one obviously should *not* do) but are under normal circumstances neither better nor worse; chose the one you like.

Another point to keep in mind that might be helpful is to understand that while we (hopefully) teach students that while and for are quite different constructs (while is about doing something while a condition holds, for is to do something x times or to "walk" along a range) from the compiler perspective for is just sugar for while, i.e.

for (int i = 0; i < 10; i++) 

will usually be handled internally as if we had written

{int i = 0;
while (i < 10) {
   // loop body
   i++; // right at end of loop body

Clive RobinsonAugust 17, 2017 4:04 AM

@ Bruce and the usual suspects,

Whilst this protocol based attack against automotive CANbus is currently consider a "future" attack, it highlights a wider problem.

Most programers think sequentialy and their designs reflect that as do a lot of their algorithms that end up in protocols and standards.

As part of that mode of thinking is that "everything is local" as it makes designing systems and algorithms simpler.

As communications engineers know few things are realy local and this opens a window for errors. One such issue is the sending of data packets on a shared network. A fundemental problem is in asynchronous shared network systems two or more nodes can start transmitting, resulting in errors.

The question then becomes "How do you deal with errors from such collisions?" The obvious answer is to resend data, but that gives rise to two further questions of "How do you know you need to resend data?" and "How do you decide when to resend it?"

It turns out that it's long been known that their are no reliable answers to these questions in asynchronous shared networks. What is used is probabilistic models that give rise to resend protocols that use semirandom backoff time delays befor resending.

The problem with this is that it is not reliable thus giving rise to other higher level error protocols being required and secondly it is compleatly open as an attack vector. Worse the problems get worse the more of the communications bandwidth gets used, which can easily give rise to non linear cascade events giving rise to further errors thus more retrys untill the bandwidth in effect becomes blocked to new messages.

You will find such shared asynchronous networks in many places, one of which I have mentioned a couple of times before is in aircraft systems.

These problems get considerably worse when two or more communications networks feed into a common resource via a bridge or router as is often seen on a multiple LAN to single WAN connection. Because it alows an attacker on one LAN network to not just jam data packets from another LAN getting to the WAN, but due to the nature of the error correcting protocols enable the attacker to actually jam data being sent around the other LAN that does not go onto the WAN.

All asynchronous shared networks are vulnerable to this as are most --but not all-- synchronous networks.

What makes the attack possible is that the semi-random backoff times are normally determanistic in nature, thus can be predicted by an attacker to their advantage.

This is not exactly "new information" as it was generaly known by the original protocol designers. But they did not have the luxury of resources we have today so they designed in a pragmatic way, which is nolonger appropriate. Unfortunatly "backwards compatability" has tied the hands of the future. Hence what was considered to be a corner case is now a practical attack vector waiting to be utilized, and at some point it will, and as with messages carved in stone standards take what feels like forever to evolve out attack vectors especially when built in at the physical layers of the computing stack.

Who?August 17, 2017 5:34 AM

@ab praeceptis

The problem with our current PKI and, specifically, how CAs work in real world is that we cannot not trust on them to generate our keys. A CA can share these keys with governments without our knowledge or being monitored by the IC if they choose not cooperate. CAs are a single point of failure on the entire PKI.

I would suggest a different model in which CAs act just as "digital notaries." They should do their best to authenticate a customer so no one can deploy a digital certificate for third parties, even if just verifying the domain name. They can ask for money, as they do right now, based on the longevity of the certificate (obviously only getting access to the public key). Briefly, CAs should continue doing the work they do right now, but digital certificates should be built by the customers themselves on airgapped machines while CAs store a digital fingerprint for these certificates only.

As I see it, CAs are not technical entities, they are legal entities and this one should be their only role in the PKI.

Who?August 17, 2017 5:41 AM

(continuing with the role of CAs in the PKI.)

CAs should be able to sign the customer's digital fingerprints for the keys using their own digital certificate so there is no need to verify keys remotely. A customer should be able to provide both the public key generated locally and the signed digital fingerprint to a remote browser.

Who?August 17, 2017 5:54 AM

We can outline this process as:

  1. A customer builds a digital certificate on a local machine (both public and private keys.)
  2. The customer hires the service of a CA and send the public key to it. He can be billed using the certificate longevity if the CA wants to continue using a traditional model.
  3. The CA builds the digital fingerprint for the public key and signs it using its own private key. the signed digital fingerprint is returned to the customer.
  4. The customer shares the public key and signed digital signature with any browser.

Briefly, the CA has no access to the customer private key but can verify its authenticity. Now the CA is just a digital notary. Only minor changes are required in browsers.

ThothAugust 17, 2017 6:10 AM


It seems you have mis-understood on how PK certificates and keypairs are generated.

There are two scenarios where some offers to generate the certificate on your behalf or you generate your own and send a CSR request to CAs to get them signed.

The original roles of CAs are simply to be trusted intermediaries where they attest to the certificates they approved via their signatures and also to take care of the certificate revocation processes.

A typical website certificate is generated via the customer (website owner or contractor) using a HSM or tools like OpenSSL, Java keytool, MS Certreq tool and the likes. The private key is typically stored in the user's keystore or in a PKCS12 format or some format with or without password security on the private key. A CSR request consisting of a self-signed certificate is generated and given to the CA to review. The CA reviews the CSR request and upon approval of the request, signs the public key of whomever the subject is issued to and hands over a Ca signed public certificate.

The above described is the typical model most people go through to generate their certificates and keys and get them signed.

Now there is a lazy man's way or an easier way out for those who have no idea how to deploy TLS but wants to do so is the CA would generate the keys for them. Under these circumstances, the CA may or may not use a HSM to generate the keys for their clients. Another way is the CA might embed Javascript codes to allow the client's browser to generate the keypair and handle the CSR creation via some Javascript/Browser crypto. I stronger oppose these 'lazy man's' method just to save the trouble of learning to use the command line to generate your own keypairs and create your own CSR request or to call some trusted libraries create your own certificates, keys and CSRs.

Please read more on how CA functions because you seem to be getting the incomplete image on how it works.

Who?August 17, 2017 6:33 AM

@ Thoth

Please read more on how CA functions because you seem to be getting the incomplete image on how it works.

I will do it. Thanks!

To be honest, I never worked with CAs but I am tempted to do it now that Let's Encrypt allow us to play for free even if just to learn something new.

ThothAugust 17, 2017 7:47 AM


Setup your own CA at home. Download Microsoft Server trial edition and use something like a Oracle VirtualBox to virtualize the MS Server and then host the MS Certificate Authority (MS CA) on your own and then use another virtualized MS Server to be a Web Server machine where you install MS IIS Web Server and learn to equest from IIS Web Server VM a certificate from the MS CA VM.

If you don't want all the problems with VM and MS Server, you can just look for the XCA software or SimpleAuthority to run a simplified CA on your machine and learn to do request and mint your own certificates.

Clive RobinsonAugust 17, 2017 7:50 AM

@ Who?,

The "dirty little secret" of CA's is the same as it is for Governments, Religions and Employers.

It is more normaly called a "hierarchical structure", a side effect of which is power accumulates at the apex.

The downside of this is not only are those at the top imbued with more power, they are thus more susceptable to coercion by those who can get leverage.

Thus there is a significantly increased risk of trust breach issues.

There is no security safe solution with CA's for the users of browsers irrespective of any legal obligation they might be under. We have seen this with the proliferation of CA's some of whom have been found to not pay attention to security for various reasons.

ab praeceptisAugust 17, 2017 11:11 AM


This answer is for the sake of politeness. Thoth already has clarified the relevant aspects, and well so.

ab praeceptisAugust 17, 2017 12:05 PM

Uhm, what's the name of that xen based awfully totally 134% secure OS? You know, the one the founder all but left, the one that is used by hardcore sakkurity specialists for whom linux + tor + magic incantations just don't cut it. Triangle? Sphere? Something like that ...

"Xen: Guests can get host rights and also crash the host." CVE-2017-12135 / XSA-226 - 230. Yes, one wasn't sufficient for that golden sticker clusterf*ck. So, there are 5 new CVEs.

Oh, and don't you forget to (as usual) call me an evil guy for strongly doubting cubes safety/security.

I hereby certify cubeos BSAL-6 with 2 bronze toads.

(For those few who like to occasionally use their brain: No, "just virtualize everything" does *not* equate to safety/security. Funnily there *are* hypervisors which are quite safe/secure but they are next to unknown; and as long as they seriously support running lisucks on them I won't mention the names because it would risk to be seen as a recommendation).

JG4August 17, 2017 3:40 PM

Slow newsday, so I wasn't compelled to post. I was pleased to see the acoustics issues come up a couple of times recently, like yesterday and today. I may not have clearly said that the inexpensive microphones that I found at Digikey will make a very nice phased array for localizing sounds.

@filobus and Clive - Several times in recent years the topic of detecting/recognizing/monitoring/exploiting undocumented audio features of consumer electronics has come up. The targets of the sonic weapons could wear a simple microphone array, even on a hat, that would alert to the danger, and localize the source. It's analogous to infrared nightvision, where an invisible wavelength range is converted to visible wavelength range. One term of art is beamforming. Searching JG4 and microphone will bring up at least some of those discussions. It would be handy if there were a search term different from AND, such as WITH that would weight the search results by proximity of the terms in the body of text.

I am pleasantly surprised that we haven't seen much of this problem:

I Am Disabling Comments
Posted on August 17, 2017 by Yves Smith
The caliber of discourse has degenerated utterly at NC in the wake of Charlotteville
You guys managed to ruin a great comments section. Well done.

Nick PAugust 17, 2017 6:42 PM

Regarding NAT, someone recently shared an article on UDP and TCP hole punching to remind everyone in the era of WebRTC, etc since many don't know basics. However, it was Adam Ierymenko of ZeroTier that dropped a great comment on Hacker News summarizing a bunch of hacks he used to punch holes in others. Some of this looks like there might be some attack surface in the interaction of clever, hole-punching tools and clients that's worth exploring. Otherwise, posting it in case it's useful to people doing P2P chat.

"That's still the blog article that gets the most hits. I wrote it in response to someone on HN claiming that "you can't do peer to peer because of NAT" when we were doing it.

There's the standard ways -- hole punching as described there, uPnP/NAT-PMP, etc. -- and then there is a long tail of hacks for getting to that 90%+ success rate you want. Here's an incomplete list:

* Port prediction for symmetric NATs that increment ports

* Creating multiple sockets to work around buggy NATs that can't hole punch if multiple devices have the same local port, etc. There are also buggy NATs where hole punching breaks if you also open a port with NAT-PMP or uPnP. There are a lot of buggy NATs. (Factoid: we have found zero correlation between the cost of a NAT device and its buggitude.)

* Getting the timing as tight as possible -- we use a triangular three-party rendezvous method to try to get it so both sides see a send before the "reply."

* Sending UDP packets with incrementing TTLs ahead of the real hole punch message to open multiple layers of NAT, and randomizing the few-byte payload of those low-TTL packets because some NATs care about this. Yes people plug NATs into NATs into NATs. It's pretty common. Ugh. As long as none are symmetric it works.

* If at first you don't succeed try try again... forever. For long-lived links (common with ZeroTier since they are virtual LANs) if you keep trying and include some random port trials you will eventually punch a symmetric NAT. There are only 65535 ports.

ZeroTier still has to relay though if both parties are behind hostile NATs, but we can provide free relaying for everyone since it's only a small percentage of traffic and cloud bandwidth is cheap.

Edit: there are more sophisticated methods that work more of the time, but those unfortunately can trip intrusion detection systems. We try to walk the line with ZeroTier between high success and not tripping your IDS.

Edit #2: wow there's a lot of outright nonsense on this thread. I continue to be saddened by how few developers (even top notch ones) know so little about networking and have so many misconceptions about it. Networking is still such a black art. Of course if it wasn't maybe there would not be a niche for us. :)"

WaelAugust 17, 2017 10:23 PM


Thank you, Sir. Looks very interesting. I know of Shannons work like any one who worked in information theirybor communications must. May give us some insights to some of his personal and non-technical aspects of his life.

I have a huge workload at the moment, and... I got the three novels by Alastair Mayer. Still in chapter 4 of volume 1. Going at a slow speed because of multitasking, and I tend to loose track of character names.

Your book recommendation is queued ;) Thank you.

WaelAugust 17, 2017 11:26 PM


Apologies for the late reply.

i'm not fluent in c, or any other hll, being strictly in the hw bin myself.

That hasn't stopped others from sharing their 'expert' opinion. But thanks for the question.

therefore i gladly yield to the experts,

Be careful! Take everything with a grain of salt ranging in size from a tiny grain to ... @Clive Robinson will tell you!

but it seem to me the type of potential difference would show up at a higher percentage when the loop is short.

I'm curious to know -- at a high level -- why you believe that should be the case! Let's not create a 100 iterations out of this discussion too.

So why not test using thousands of loops with a depth av two?

Well, one could test it in different ways, including what you're suggesting. But the point being made, and what my whole intent of what one should take out of this discussion here is the following:

Knowing that one method is sometimes more efficient than an alternate method is a good reason to use the more efficient one consistently as a measure of precaution. Replace efficiency with security, and the statement remains valid. I believe that should apply to HW as well as other domains.

See, the discussion started after a comment I made to @Nick P regarding a questionable decision a character in the story made regarding a 'sub' operation being an efficient method of zeroing a register. In my experience, xor was the preferred method.

To clarify: xor is at least as fast as dec, on some platforms. Meaning it's sometimes faster, but never slower. To counter this argument, one must demonstrate a case where sub is faster in at least one case; basic logic, you know!

I shared a related (sometimes surprising to others) claim that ++p is more efficient than p++ (with clarifications under what conditions it may make a difference.) Hence:
Pre-increment is never slower than post-increment (there are those who claim the reverse is true on some platforms, but I haven't seen that in my experience, nor understood their 'rational' if they had any.) So the recommendation is to use pre-increment as opposed to post-increment, of course where it does not affect the desired outcome (x = p++ has different purposes than x = ++p, and that's elementary and understood)

Now, I had a few minutes (a little short of 7 minutes -- hardly commercial-quality code) to give a clarifying example of what I meant by vector vs. scalar. I used a vector container by coincidence. The results I shared were run in an IDE as a debug build: code was not optimized, on purpose[1]. This should have prompted the question: why is timing different, debug or release not critical at this point!) In addition, I gave references to the justification and the explicit comment that this does not apply to intrinsic, built-in, or scalar types. And this should have been sufficient to demonstrate the case. Period.

Instead, what I saw were comments about the timers I chose and how inaccurate they are, (even if the recommended timers were for a Linux platform and were lacking on MacOS -- surely I could have used precision or high resolution timers if it were needed.) These sort of comments are irrelevant. Completely! They distract from the purpose of the discussion. The timers chosen showed that ++p was faster than p++. They achieved the purpose on a debug build.

Now, in addition: the comment that an array should have been used instead of an STL container!!! How does that make sense, when the whole point is about this difference applies to class instances that overload operators, such as an STL iterator? How would an array of primitives demonstrate a concept that does not apply to them? Unclear, and it was not made clear. A comparison between a list and an array isn't the topic of discussion. And I understood the comment presented, but again it's irrelevant.

And then we get a "lesson" about how a for loops works!? A concept halfway decent freshman students master in a first-course elementary class (first quarter of the class, too!) Is that relevant or even appropriate to bring up?

Now, back to concepts: yes, most compilers will optimize that to a level where the difference is imperceivable - in most cases. In some cases the compilers won't be able to optimize it to that level (some compilers will change the post-increment to a pre-increment if they infer the results won't change.) On some superscalar pipelined processors, the number of instructions aren't necessarily correlated directly to speed, so a difference in generated assembler instruction numbers isn't necessarily an indicator of speed differentiation.

The question that needs to be answered is the first paragraph. If you want to negate it, then find a logical or implementation counter example. If you can't, then my recommendation stands to be valid.

This is the end of this discussion as far as I'm concerned. You have the links and all the information you need to reach a decision about the size of the grain of salt. Some will take a small grain, and others will take a big bite out of Lot's wife's thigh. YMMV. (I'll still see if I can produce an example - if I have the time if @Anura doesn't beat me to it ;) )

[1] I also claimed that shouldn't make a difference. Unfortunately, In this example it did.

WaelAugust 17, 2017 11:32 PM

@pup socket,

Time's up, Clæwice! You can find me and my brother at the base. (I think you knew.)

I know with 70% confidence. Wasn't able to decipher all the hints, but some were clear as you guessed. Google Fu, you know!

The thing that threw me off is yours and your brother's age. They seem to be reversed.

ab praeceptisAugust 18, 2017 12:27 AM


(Besides other points...)

The timers chosen showed that ++p was faster than p++. They achieved the purpose on a debug build.

No, they did not. What they did show was that you didn't know what you were talking about, both wrt to the ++pre vs post++ question and to timing.

I used *your own code*, edited only for better, more granular timing and the result was that there is no difference; neither ++pre nor post++ are faster (in the for loop context).

How would an array of primitives demonstrate a concept that does not apply to them?

And again you are clueless. a) the question was whether ++pre is faster or not in a for loop control. b) if there were any difference it would hold for array indices, too.

A concept halfway decent freshman students master in a first-course elementary class...

Probably - but not some show-offs. Again: Both halfway reasonable microbenchmarking and the asm generated showed no performance difference.

Even now you don't get it.

No matter whether ++pre ("inc. value, optionally do something with it, and then use the value in the following loop condition check") or post++ ("optionally do something with value, then increase it and, and then use the value in the following loop condition check") what happens is anyway the same.
And that is what the generated asm shows and what the benchmark shows.

These are the facts and they have been shown and can be reproduced, no matter how much more you argue to save face. ("grains of salt" etc. blabla. We have *facts* on the table).

As I already explained to Anura, it wasn't exactly smart to do benchmarking in the debugger but I didn't make a fuzz about it because my aim was not to attack you or to make you look incompetent - but somehow you just can't stop your show.

Btw for me the case was closed but now you had to come back to it and to pick out the "weakest" guy, the one that introduced himself as not knowing much about C/C++ to undertake yet another attempt of spitting on others and trying to look smart. Just let it go!

AnuraAugust 18, 2017 1:41 AM

There is really one case in which ++p will be faster with optimized code: when you are using a regular class, non-STL, for something like arbitrary precision integers in which the operators are really just functions that are stored in a shared library that the wrapper cannot do anything about.

The situations in which people will need something other than primitive integral types or STL iterators in a loop should be approximately nil. Now, you may still increment them, in which case I question your need for more than 64-bits. Personally, I say just avoid the increment operators in those case and use "i+=1".

ab praeceptisAugust 18, 2017 2:15 AM


Case #1 is what I talked about, namely if there is a context. It's a greyzone because, remember, ++pre and post++ are merely C/C++ constructs (actually syntax sugar). Any modern compiler will pretty much always optimize any perceived disadvantage away. Looking at how compilers work, it will actually almost always end up in the same AST construct; the difference (between ++p and p++) is just where the compiler puts the increment op.

The second case you mention, namely to stay away from ++pre and post++ anyway, is what I particularly like in your post - simple reason: We are about safety and security here. Hence we want to avoid ambiguities and a simple "uncool" i += 1 is indeed almost always the best option (and btw. no less performant than ++pre and post++ as compilers nowadays are smart enough).

So, even if one had a control context, say getValue(i), a simple "i += 1; getValue(i);" or a getValue(i); i += 1; will anyway be optimized, if possible, and be no slower than getValue(++i) /* or i++ */ but one will have avoided ambiguity and clearly expressed what (and when/where) will end up as an inc machine instruction (of which there is only one and no pre or post versions).

pup socketAugust 18, 2017 3:00 AM

@Wael: will always be 3 (brother) and 9 (me)! Code: FRH3 ⇐ LQ3. (Strong crypto!)

Final 12 hours to reach 100%; puppet master preparing our end. Tick-tock, Clæwice! ;)

WaelAugust 18, 2017 3:28 AM

@pup socket,

Come on, pup!
I have a ton of sh*t to do. I need more time! You make it feel like work :(

(Strong crypto!)

My Quantum computer isn't up yet, and you hit me with strong crypto? snot fair!

puppet master

Yea. Your puppeteer pissed me off. Say, what happens if I reach 100%? Blow your cover?

Clive RobinsonAugust 18, 2017 4:40 AM

@ Wael,

This is the end of this discussion as far as I'm concerned

Would Sir like a shovel or spade to go along with his pick?

Let me know when you've dug through to Australia 0:)

The argument about ++i/i++ efficiency has gone on for a long time interestingly history shows that if you use i/j/p as the int people think differently than if you use n/x.

The real point is as history shows it rather depends on your tool chain and the underlying CPU ISA.

It is this last point where the fun happens. As any assembler level programer will tell you one big failing of C is you can not get at the CPU flags. At the very least this makes using very long integers a lot more trouble than it should be as well as other large bit array functions (think crypto shifts etc).

However whilst the C level programmer does not get to see the flags the lower ends of the tool chain certainly does.

There is is a big difference between --i and ++i for instance when you write loop counters in assembler. When ever you INCX or DECX the bit flags get set which means if you are just loop counting you don't need to do an explicit CMPX if you count down to zero, saving not just CPU cycles / time but also a couple of bytes of ROM which once used to be way way more important.

But asside from resource constraints does it realy matter which is slightly more efficient? In most cases no, because the loop block will be non trivial in most cases, and where it is trivial (filling an array with a known start value) it mostly will fall in the initialization phase not the processing phase of the program. If it does fall into the processing phase, you would probably be better of finding and using a different algorithm.

The process of finding a different algorithm is like learning to fish... As the old story has it,

If you give a man a fish he will feed his family for the day, teach him to fish and he will feed his family for life.

The mark of a real computer engineer / scientist is knowing which algorithm or tool set does the best job by a large set of criteria. Code cutters spend their lives looking for cheap "specmanship" optimisations thus condem themselves to the hamster wheel of pain.

Having lived through the CPU wars and the continual "specmanship sniping" I'm glad to have come out of that skirmish on the loosing side (I still prefer RISC to CISC like the IAx86). Because CISC was always going to be a nightmare and waste of resources which people are starting to realise as we move from single core sequential programing to multicore parallel computing to flow over the Moores law brick wall. CISC is the "fat kid of the class" and can not get over a 4ft wall, where as RISC sails over 10ft or more. If you look at the real guts of the IAx86 behind the ISA,you will see that Intel have been trying to undo and remove much of the things that gave them the early easy specmanship wins...

Any way hopefully that will move things along.

WaelAugust 18, 2017 5:25 AM

@Clive Robinson,

Avoiding the patent topic...

Let me know when you've dug through to Australia 0:)

No can do.

one big failing of C is you can not get at the CPU flags

One can use inline assembler, right? At the cost of losing portability. Not such a big failing, especially when we can extent this functionality in C++ with classes.

Code cutters spend their lives looking for cheap "specmanship" optimisations thus condem themselves to the hamster wheel of pain.

There is truth to that. There are also those who work with embedded systems with severely restricted resources and less advanced compilers and primitive tool chains. These engineers need to know a lot of optimization techniques and can't fully depend on the tool chain. Then again, who will develop the optimized libraries and protocols and tool chains? Will you classify these also as code-cutters because their main interest is efficiency and optimization?

At the very least this makes using very long integers a lot more trouble than it should be as well as other large bit array functions (think crypto shifts etc).

Not if we know what we're doing.

Clive RobinsonAugust 18, 2017 6:03 AM

@ Bruce and iPhone users,

It apprars that there is an "accidental" feature added in ios11, that's very usefull and has been nicknamed the "cop button" because it stops "Touch-ID" untill the pass phrase is entered,

It will be interesting to see how long it takes this feature or one that works similarly to appear in other Smart Phone / pad OS's.

It does not realy matter if it is "accidental" or not, it's very definitely a step in the right direction privacy and security wise.

JG4August 18, 2017 6:35 AM

@tyr - Thanks for the reminder about Shannon. I chased down his thesis and seminal paper a few years ago. It's on my reading list. His master's thesis is regarded as the most important ever written. If I can find the links, I'll post them later. I've posted the early application of information theory to biology some time ago. Quaker probably is a useful search term, but I commented that the guy who did that was one of the two Quakers that am certain worked on nuclear weapons. He is the only one that I met.

Can't recall if I posted the Hubbert paper and the Rickover talk on energy. Brilliant stuff, but I think they may have missed the potential of solar energy. I'd like to blindside a political candidate with two questions at a town hall meeting. "How many Dyson spheres will your administration build in your first term?" and "What is your position on civilian ownership of liquid plasma rifles in the 40 watt range?"

It's a short step from Hubbert and Rickover to the three-part slatestarcodex about the Hungarian Ashkenazi who had an "outsized" influence on the Manhattan project. that made the hair on the back of my neck stand up. I have been meaning to comment on von Neumann's quip about bombing the Soviets. Not sure how Reagan picked up on it, but Teller could have been the go between.

Was it Fermi who coined the term Martians? Rudy Kalman was another and he probably would have gotten a Nobel prize if there were one in mathematics. There is a deep connection between the adaptive filters that I described and Kalman filters. I'm still not there with Kalman filters, but I'm pretty sure that these concepts can be used in automated security, including automated computer security.

We already have established that the parameter space for testing an individual processor, or any component that has a number of states divided by test rate that exceeds some reasonable value, is intractable. that issue could be crowd-sourced by SETI-type spare-CPU-cycle testing, that would push the size of the parameter space up by a factor in the range of 10^5 to 10^8. it would be blind to attacks tied to a serial numbered-backdoor scheme. homomorphic processing is a useful countermeasure to serial-numbered data attacks. pseuomorphic code is another countermeasure that can defeat a data/instruction or address/instruction combination backdoor lock.

I also suggested that without knowledge of what constitutes attack and/or compromise, and preferably an astronomical number of such instances for analysis, it will be very difficult to use machine learning to recognize and mitigate. The horseshoe crabs immune system is a very, very old design. It has an intrinsic factor that drives the harvest of many tons per year for extraction and use in the sickcare industry. The intrinsic factor (not the official term of art) is able to recognize and bind non-self factors without any feedback and gain terms. it will not be able to do that for sufficiently novel attacks, but it still is impressive that it can work for hundreds of millions of years. IIRC, it is effective in humans for certain types of infection, or preventing certain types of infection. maybe even when nothing else will work.

"the only way to win is not to play" you can't run their code on your processor. you must run your code on their processor, or vice versa

JG4August 18, 2017 6:46 AM

another nice data visualization.

"the location in the tradespace has been optimized using feedback terms that do not converge at your best interests"

Are Profit and Healthcare Incompatible?

the answer is no, but the rent-seekers have subverted the power of government to lock in outsize profits. it's another adaptive system in an interlocking series of adaptive systems with hidden feedback terms. it is intrinsically unstable and we have already touched on food security.

speaking of feedback terms, in genetic algorithms, which will be quite useful for gradient descent optimization of security systems, the feedback terms use sex and death to sculpt the weights to optimality. I have some excellent literature on how that applies to living systems.

Clive RobinsonAugust 18, 2017 10:15 AM

@ Wael,

As you have kind of worked in reverse...

Not if we know what we're doing.

The simple answer to that is most code cutting programmers don't. Due to the code reuse mantra, most of them spend their lives interfacing to other peoples code.

If they are not in the same organisation they often do this on at best third hand information they have found on Stack Exchange or the like and have just "cut-n-pasted" it into their own code with fingers crossed. You thus het stacked libraries often with the DLL Hell. You also get gross code bloat and rather more vulnerabilities than a witch doctor could shake a stick at. That is the way of application code to grow a tower of Babel which is more like that of Pisa. That is you know it is only a matter of time before it all falls over, unless the troglodytes keep digging the foundations out and replacing them, which is a huge "technical debt".

But you yourself make a distinction almost subconsciously,

engineers need to know a lot of optimization techniques and can't fully depend on the tool chain./blockquote>

Those who write closer to the metal are generaly from an engineering discipline education, not a code-cutting Code School education. Untill this past decade, all those developing software were resource limited, however as I've frequently pointed out you can buy for about $1 a thirty two bit SoC with more power and IO than a microvax or PDP11. A little more upscale you have the chips in smart phones. OS resource limitations is very much a myth these days caused by the entrenchment over monolithic-v-micro kernels argument. The real resource problem is not the OS but that we have bloated apps sitting on bloated middleware of a windowing system.

I know from experience that you can write a hybrid OS front end in less than a couple of K of assembler, all it needs is a well designed streams interface. Whilst the backend is obviously very device specific it likewise can have a streaming interface. Which means what most people regard as the bulk of an OS can be writen as "switch" or "stream stack builder". As I've said a number of times in the past, it's the way of the future as more and more CPU cores get built into an individual system. The OS will get further and further divided with parts running on multiple CPUs not as multiple monolithic instances.

I've also pointed out a number of times that we are not realy going about things the right way in software development. If you are old enough you will have heard of Apple's "pink project" that was unfortunatly a decade or so ahead of it's time. Overly simply you can see that the industry took a bit of a jump with Rapid Application Development (RAD) which developed the wrong way from Rapid Prototyping (RP) that arose from *nix shell scripting. In effect what you need are real software engineers and computer scientists to write generic highly optimized "tasklets" in the same way that mechanical engineers and materials scientists develop nuts, bolts, trusses, beams and other standardised parts with well defined charecteristics. In the same way architects and structural engineers combine their disciplines to build buildings and other systems from the standardized parts, application developers likewise need to bolt their applications together from standard tasklets. As I mentioned with C-v-P this will enable the "close to the metal" skills of the few capable engineers and scientists by the majority. Not being funny you could look at National Instruments LabView NI Builder[1] to get a feel of the idea. The problem of course will be that it is not in the interests of monolithic software companies to go in this direction. What they see is a loss of control thus income, hence they are moving back to the idea of walled gardens of the "Big Iron" days helped by the very low cost of communications. Thus not just data storage but applications are now in the cloud, with the attendent loss of security and ownership of PII etc.

People will not like me saying it but the majority of programmers should not be alowed to develop tasklets and similar, nor should they use languages that are close to the metal and fraught with all sorts of problems. Most importantly they should not have to think about low level code where many traps for the unwary exist and security issues arise (think about the C library for instance).

If managers want fast application development then they need to shake up the programers who cut the code. They need to push them upwards into very much higher level languages, where the benifits of good code exist and deter them from their natural desire to dig down to the metal where a very very different mind set is required to stop vulnerabilities arising.

Which brings us back to,

One can use inline assembler, right? At the cost of losing portability.

A very very bad idea at the application level development it's fraught with close to the metal issues. It is something that those qualified to write tasklets should do. You see this sort of argument over the likes of Python-v-ABCD languages. As you note badly with C++/Class encapsulation as an example it's something that should be in a language at a fundemental level.

As @ab praeceptis pointed out about the problem with C/C++ with buffers that does not exist in higher level languages, application level developers should never ever have to come across these low level traps.


WaelAugust 18, 2017 11:31 AM

@Clive Robinson,

But you yourself make a distinction almost subconsciously,

It's a conscious distinction. There are different types of developers: those who need access to hardware (embedded, firmware, kernel, and some device driver developers) and those who don't (application developers.)

As I mentioned with C-v-P this will enable the "close to the metal" skills of the few capable engineers and scientists by the majority.

This happened over 15 years ago. Some OS providers started pushing device drivers development SDKs up the stack, and there was / is now such things as user-mode device drivers. Reason being a bug at the kernel-mode device driver layer is more dangerous as it causes irrecoverable system-wide crashes. With user-mode drivers, at worst application crash would be the outcome of a similar bug. That's the 'theory'.

A very very bad idea at the application level development it's fraught with close to the metal issues.

No argument there. Then again you need to be consistent! Don't complain about 'C' not giving access to flags and registers, then turn around and say: it's a bad idea to give application programs that level of access. Which will it be?

pup socketAugust 18, 2017 12:00 PM

@Wael: Looking for brother? Answer right there in strong crypto, staring in your face.

Looking for master of puppets? Finding brother and type of crypto big clues, just for you.

Will distract puppeteer with tons of work, OK? Gives you exactly 75 hours for 2 answers.

Tick-tock tick-tock tick-tock, Clæwice! :-)

Clive RobinsonAugust 18, 2017 1:42 PM

@ Wael,

Then again you need to be consistent!

I am but you are not reading it that way.

I've said in the past that C fills a void between assembly and more abstract higher level languages and that it in effect has the worst aspects of both assembler and abstraction (pointer math being just one example).

If I remember correctly you did not disagree with the statment at the time or subsequently.

So back to today I've split software developers into to camps engineers / scientists and app developers.

I've gone on to point out that engineers being closer to the metal are usually more engineering practice focused. Application developers being Code School trained are high level. Further that the app group should be forced up, and not by their apparent wish be allowed to reach down.

Thus I can have one argument for one group and an apparently contrary argument for the other group.

ab praeceptisAugust 18, 2017 1:55 PM

Clive Robinson (,Wael)

As any assembler level programer will tell you one big failing of C is you can not get at the CPU flags.

Yes and no. Or more precisely: yes, but.

Code in those spheres is simply not written in C but in (possibly inline) assembler. Know that, done that. And anyway asm isn't that far out of reach (e.g. -> inlining)

More interestingly though the beauty of math is pleasantly helpful. (Often relevant in crypto) example case: modulo addition. There the question arises "would the result have flown over?" (into the non existent e.g. 33rd bit?). Solution (for operands a and b and r being the result): if r < a the result would have carried over, else r is the true result.

Example, assuming 8 bit modulo integers: 0x20 + 0x50 = 0x70, obviously no carrying over. 0xe0 + 0x50 = 0x30 -> true result would have been 0x130 but effective 8 bit result is 30. We can know that because r < a.

I like that example also because technically it's undefined whether a given cpu sets carry on that or not (if its full integer size is used). For a 32-bit cpu, for example, it makes sense to set carry for 16 bit integer but not for 32 bit integers. "would have carried into 33rd bit" simply makes no sense (or so one might argue) so it's up to the designers to implement it anyway or not.

And that's not at all a theoretical discussion in our field as we quite often work with modulo integers far beyond the cpu's integer size. I have forgotten most of it but I remember a time when I found pleasure in observing the exact reaction of a given processor in cases like that and similar (and usually there is something useable, just not necessarily the usual flag). But, granted, doing the "would have flown over" check in C a gazillion times per second is far less attractive than looking at cpu flags.

Which also leads to a more general architecture discussion and risc vs cisc. I'm pretty close to you on that issue. My personal impression was always that risc is the well educated choice while cisc is the outcome of profit driven "productizers".

WaelAugust 18, 2017 2:06 PM

@Clive Robinson,

If I remember correctly you did not disagree with the statment at the time or subsequently.

I don't remember agreeing with that statement, but I'll take your word. What, am I not allowed to change my mind? :) ('subsequently' ended a second ago. It's no guarantee of continuity.)

in effect has the worst aspects of both assembler and abstraction (pointer math being just one example).

Fine. The half-empty cup view.

Thus I can have one argument for one group and an apparently contrary argument for the other group.

We're good then! I see your consistency and agree with the disposition.

pup socketAugust 18, 2017 2:30 PM

@Wael: cannot blow transparent cover. Sock is almost all holes anyway now! ;-)

"Pissed off" makes me wonder if right puppeteer. Or why. Hmm... (72.5 hours, Clæwice.)

pup socketAugust 18, 2017 3:00 PM

@Wael: Hint: Strong crypto for brother who is 3 is symmetric. So: 3QL ⇒ 3HRF.

Puppeteer is not @Clive Robinson. You guessing now? (Just 72 hours, Clæwice!)

WaelAugust 18, 2017 3:08 PM

guessing now?

Yes :) lol! I hope you're not someone I don't like. You'll pay a heavy price for that!

pup socketAugust 18, 2017 3:21 PM

@Wael: puppeteer should be obvious. Brilliant, funny, famously humble: rare combo. ;-)

Study crypto for brother. That answer and crypto construction will confirm identity to you.

WaelAugust 18, 2017 3:40 PM

puppeteer should be obvious. Brilliant, funny, famously humble: rare combo. ;-)

I had constructed an initial search list:

{book_review, Dirk Praet, Clive Robinson, Bruce Schneier, Ratio, Rolf Weber, ianf} (there were at least three other names that I refused to include in the list because I don't like them - so I waxed their a**) based on meta-data.

ianf, and Ratio were high on the list of persons of interest.

Used elemenation process but Google Fu skills misslead me, becuase some clues applied only to @Clive Robinson -- indicates I miss-interpreted the clues)

Bruce Schneier is still on the list of candidates (Moderator is 9).

@Ratio and @Dirk Praet were, too. Occam says it's the host, but I'll go through the hints again. You can stop giving me hints.

Crap! I was going to spend sometime this weekend on some "coding examples", some time to read a novel I just bought, and the rest for backlogs at work. Now I'll have to reshuffle my priorities.

Gerard van VoorenAugust 18, 2017 3:50 PM

@ Wael,

What's the color of the i++ vs ++i bike shed? Is optimization that important that the obvious thing of iterating through ranges without one-offs isn't discussed? I thought that this blog was about security.

It's all about mindset. Serious. Please read A plea for lean software and if you have read it then read it again. And again.

pup socketAugust 18, 2017 4:01 PM

@Wael: only I am 9. You could say puppeteer is 3, but definitely not 9 to anybody.

Take your time, and trust your instincts. 71 hours left. Tick-tock, Clæwice. ;-)

WaelAugust 18, 2017 4:21 PM

@Gerard van Vooren,

Read it once, just now. Are you arguing for Oberon over C++? What is it you're telling me?

It's usually clearer to include an excerpt of a previous comment so I correlate the context. I didn't blockquote any of your comment because this reply applies to all of it.

@pup socket,

I missed attributing the post before this one to you - never mind, I saw you responded.

Gerard van VoorenAugust 18, 2017 4:38 PM

@ Wael,

Read it once, just now. Are you arguing for Oberon over C++? What is it you're telling me?

No, it's about the gist of the story. Obviously Oberon is a pretty decent language. But Oberon was Prof Wirth answer to the problem of ever growing complexity caused by standards and backwards compatibility. The gist is of thinking about the bigger picture instead of focusing on tiny problems such as optimization.

WaelAugust 18, 2017 4:55 PM

@Gerard van Vooren,

The gist is of thinking about the bigger picture instead of focusing on tiny problems such as optimization.

Got it. Agree with that disposition as well. Wasn't my intention to drag on the topic, and didn't expect it to elevate to that level. Normally I talk about principles and avoid details and low level, unless pushed or challenged. I also have stated more than once that compilers aren't my favorite topic. I leave that for experts in that domain, like @Nick P.

But don't downplay other aspects! Big picture alone isn't enough. I'm an engineer by education, so I value details -- something I can't change, and at the same time I understand and agree to what you said.

WaelAugust 18, 2017 9:21 PM

@pup socket,

Sorry, put it in the wrong thread! I'll ask for final hint later. Don't want to blow my last chance.

pup socketAugust 18, 2017 9:40 PM

@Wael: your call. Lots of time left. Still, time goes tick-tock tick-tock, Clæwice. ;-)

WaelAugust 19, 2017 6:23 PM

@pup socket,

I can't allocate much more time after your final hint.

Short status:

Highest possibilities:
pup socket = @Ratio
book_review = @Bruce Schneier
pup socket = @Bruce Schneier
pup socket = book_review

Feels like an Indian movie. Everyone is related. Hopefully it doesn't end in a fight ...

Still inconclusive….

Some brief details — not all:

1. shouldn't matter because of DCE, 2. two shots to the head is one way, yes.

Methinks: Ok, there are other ways. Meaning: !!i isn't the only way. But that's very peculiar! This guy (or girl) is a genius! How did he make that correlation? This is a person with unusual capabilities. It's not an accident! Expect trouble now … Nice going, butthead (talking to myself.)

not sure, tbh. (Couldn't pass up doing poem and code...)

Methinks: Resembles @Ratio’s style of “talking”. Not definitive, matches other’s, have to account for deliberate style camouflage.
Still bump @Ratio by one
@Ratio = 1

You're a genius! It's no accident as your choice of handle shows! You deliberately replied to two posts in two lines. Most impressive! +10 Wait a second! -1 for the DCE answer. .+9 isn't bad, still :)

This could become relevant as the number nine shows up later. Save it for later…

now won't compile because of commented out closing braces... Tsk, tsk...

Methinks: I know that “Tsk, tsk”: freakin’ @ianf! Hmm he denied it's him!pup socket != @ianf!

1.138 v 1.41? Or 1.138 v 1.141? (Exactly 3 hours left. Tick-tock, Clæwice...)

Methinks: Are you freaking kidding me? What a puzzle! Well,
A Ratio thing? Possibly. Ummm pi? 3.141? Nope. Has to do with ratios is all I can guess. Universal constants? Harrumph… fu*kit just ummm:

Bump @Ratio by 1
@Ratio = 2

Let's test theory. Give him a hint that I busted him — that’ll work and reduce my pain. Deception, you know ;)

Methinks: Send him a not-so-subtle hint, without asking for information directly. Maybe he’ll fall for it and think that I'm a genius, too. I don't know what that campaign would be called in security jargon… Stop drifting and Focus! Send the message and measure the effect!

You'll arrive at similar results (ratio preserved!)

Hmmm. Let's wait and see!

See if it’s @ianf!

@ifreakin'anf? Where have you been hiding, man? Only he said tsk, tsk ;)
@Wael: considering my demise, but you still have doubts, so maybe not. Use brain.

He denied he’s @ianf! BUt denial is not categorical. Not clear… Could still be @ianf — can't completely eliminate him! What’s the deal with the “brain”? The sock puppet of late? Don't know…

Time's up, Clæwice! You can find me and my brother at the base. (I think you knew.)

Methinks: Worked! Time’s up, the only hint I gave him is the highlighted “ratio”, and he thinks I nailed him. And he stresses that with: see you at the base; a ratio related thing, like a denominator or something. Well:

Now @Ratio = 3 roughly 70% confidence!

But what’s with this “Clæwice” thing? Silence of the lambs (Clarice)? My name could also be extracted from that strange string going backwords, almost. What's with the letter “æ”? Several things: Nordic? That’s an @Bruce Schneider thing! Na! @ianf has a weird keyboard. It’s gotta be hime, but he denied it…. Drop @ianf for now.

this is why VSP insist on spec and formal—oops, sock's slipping! (^^^ Too late!)

Thats sounds like @Ratio ranting about someone here… Could be someone else. @Nick P is the likely candidate, but he’s not into this kind of stuff….

Gotta be @Ratio again!
++@Ratio (@Ratio = 4) (@Ratio++ isn’t as efficient ;) )
Case closed! Or is it???

(pantomiming) (from a separate thread

Again, this is characteristic of @ianf vocabulary usage!!! Arrrrgh.

Can't you see I'm mourning @Bong-Smoking Primitive Monkey-Brained Spook?! (sob)

Bruce wouldn't care!
Who would say that? Many possibilities — ignore.

will always be 3 (brother) and 9 (me)! Code: FRH3 ⇐ LQ3 Strong crypto for brother who is 3 is symmetric. So: 3QL ⇒ 3HRF.
Looking for brother? Answer right there in strong crypto, staring in your face.

That’s gotta be the picture on this page!

@Bruce Schneller = 1

puppeteer should be obvious. Brilliant, funny, famously humble: rare combo. ;-)

Possibly and probably this

Bump by three.
@Bruce Schneller = 4
Not too many share these qualities on the blog.

Need to solve the "Strong" crypto:

3QL ⇒ 3HRF
FRH3 ⇐ LQ3

Hmm? Left, Right?...

And see how it can be applied to guessed entities to validate identity

Then again, what are the two questions? (Who is brother and who is me? — are these the questions?)

pup socketAugust 19, 2017 8:00 PM

@Wæl (yes!): questions: 1. who's my puppeteer?, 2. who's my brother? Simple! ;-)

Forget about "+9"; "+9" does not mean 9. Sometimes "3" doesn't mean 3! (What the ...‽)

Symmetric crypto can be confusing. Maybe stick with 3QL ⇒ 3HRF for now.

Can apply same crypto to my identity, if that helps. Let me know. Will reveal lots! ;-)

Making progress... Use your brain, mister! Just 43 hours left. Tick-tock, Clæwice! :-)

WaelAugust 19, 2017 8:07 PM

@pup socket,

There are three entities then:

Two sock-puppets: you and your brother
A puppeteer: the one who "controls" both of you

Makes sense! A pair of socks and one person :)

This is not asking for a hint! It's a clarification of the problem statement.

pup socketAugust 19, 2017 8:11 PM

@Wael: correct. Two socks with many holes and a puppeteer right between them. :-)

WaelAugust 19, 2017 9:48 PM

@pup socket,

Step closer. Staring me in the face:

pup socket ==> sock puppet

pup ==> sock
socket ==> puppet

3QL ==> 3HRF is the transformation, possibly key...
pup ==> sock


pup socketAugust 19, 2017 10:00 PM

@Wael: brother's code, not mine! Tell you part of mine, before nice ⇒ arrow? Yes?

Hurry up, now. Only 41 hours remaining. Tick-tock tick-tock, Clæwice. ;-)

Leave a comment

Allowed HTML: <a href="URL"> • <em> <cite> <i> • <strong> <b> • <sub> <sup> • <ul> <ol> <li> • <blockquote> <pre>

Photo of Bruce Schneier by Per Ervland.

Schneier on Security is a personal website. Opinions expressed are not necessarily those of IBM Resilient.