Feds Can't Force You to Unlock Your iPhone with Finger or Face, Judge Rules - <AUTHOR> https://www.forbes.com/sites/thomasbrewster/2019/01/14/feds-cant-force-you-to-unlock-your-iphone-with-finger-or-face-judge-rules/#12fbd51842b7 <comment><USER2> Relevant excerpt:

 _> "The undersigned finds that a biometric feature is analogous to the 20 nonverbal, physiological responses elicited during a polygraph test, which are used to determine guilt or innocence, and are considered testimonial."_

So it's analogous to a passcode because you're divulging something stored by your body, as opposed to e.g. a metal key which is artificial.

Tangentially related, it's astounding to me that polygraphs are still considered valid evidence given how widely they've been discredited.

<comment><USER3> I thought that polygraphs were not accepted as evidence in court, but are still used by some government and private agencies.

Also, just curious, have they been discredited as in that double-blind trials show no more than a 50/50 chance of being correct (i.e., flipping a coin)? Or is it that a high enough percentage of people will fail them even if innocent, or pass them even if guilty?

The thing I don't like about them is the method of reading them, where it is up to the subjective judgment of the examiner. That is, there isn't an algorithm that can be written down so that, for example, an untrained person or computer program can read it (and therefore be subjected to large enough random tests).

<comment><USER4> > have they been discredited as in that double-blind trials show no more than > a 50/50 chance of being correct?

Yes. The reading of polygraphs is very subjective and it's been found that they reflect only whether the person administering the test thinks the subject is guilty.

<comment><USER5> They also reflect whether or not the subject of the test believes the test works. In practice polygraphs are used as a form of psychological torture, used to frighten people into giving confessions.

Of course whether a polygraph can frighten an innocent person enough to falsely confess is another matter, but if the subject is guilty _and_ understands how polygraphs (don't) work, they can deceive the person administering the test very easily. There is no shortage of spies that have passed polygraphs regularly and reliably with flying colors.

<comment><USER6> Obligatory scene from The Wire: [https://youtu.be/AJ5aIvjNgao?t=115](https://youtu.be/AJ5aIvjNgao?t=115)

</comment></comment></comment></comment></comment><comment><USER7> I doubt this will hold up.

You can be compelled by a court to have your blood withdrawn if a warrant is issued while you're under suspicion of DUI. Why would it not be similarly allowable to have your finger placed on the unlock button?

Testimonial privilege (against being forced to testify) is about not being made to say / speak statements against your own prosecution. Speech. Testimony.

Having evidence taken is not forcing you to speak, testify, or make a statement, at least in the current interpretation of evidence.

This ruling is not for sure at all.

<comment><USER8> In the eyes of the law, how is this different to being compelled to give your passcode though? Of course it's easier and they could maybe even unlock a phone with your corpse but in jurisdictions where the law protects the individual's privacy above all else this shouldn't make a difference.

<comment><USER7> It is fundamentally, very importantly, different.

Being compelled to say / give your password is forcing you to admit or testify that you know the code and can unlock your phone. You can choose not to give testimony (statements) that could be used against you.

On the other hand, if you are in possession of a physical key or code written on a piece of paper... or fingerprint... you can be compelled to turn that piece of evidence over to the government.

<comment><USER9> And this ruling is simply stating that your fingerprint is more akin to testimony than it is to an object. I personally don't think it will stand up (unfortunately) but for the moment, in this jurisdiction, it will.

</comment></comment></comment></comment><comment><USER10> I won't believe this ruling is safe until it goes thru higher levels. The Executive Branch has over the past 2 decades has shown a large propensity for attempts to disregard the 4th and 5th amendments, and I see no change in this posture or the attempts to subvert them with the current political climate.

<comment><USER11> Bio identification is for usernames... not passwords.

NEVER use a fingerprint or an iris scan for a password. That's insane!

Just don't do it.

<comment><USER12> Well out of convenience you kind of have to. But if you really wanted to you can just disable it at ports of entry.

<comment><USER13> Which is easy enough to do on iOS: Hit the sleep/wake button 5 times quickly.

<comment><USER14> Careful - after iOS 12 that defaults to calling 911 for you (while also locking your device). You can change that in the settings though.

<comment><USER15> Correct, I just did this yesterday while idly fidgeting around with my phone. Fortunately I cancelled it in time to avoid creating a false alarm. Glad to hear it can be turned off, doing that now. WTF were they thinking, making it so easy to trigger by accident?

(Edit: OK, I'm confused. There doesn't seem to be an option to disable the emergency trigger entirely, but there's an "Auto Call" slider whose relationship to the feature is unclear. This slider is turned off, yet the phone still went into emergency mode when I clicked the button a few times. What a half-assed feature, sadly typical of Apple's work lately.)

<comment><USER16> They made it easy to trigger so that people can use it as a panic button. That was a customer request.

<comment><USER15> Apple gets a lot of customer requests, 99.9% of which they ignore, and 95% of which they _should_ ignore. This was a funny one for them to select for implementation.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER17> This nice and all in theory but looking through the lens of reality where police are legally allowed to lie to get a confession - claiming they have evidence that they don't have to coerce a confession and seeing that "rubber hose decryption" is real, it really doesn't mean much in practice.

Edit:

Since people don't seem to believe that police are actually legally allowed to lie during an interrogation:

[https://www.njmoorelaw.com/10-ways-police-can-lie-to- you](https://www.njmoorelaw.com/10-ways-police-can-lie-to-you)

<comment><USER18> Police are absolutely allowed to lie during an interrogation. I've seen it done multiple times. The most disturbing interrogation I've ever seen was actually the one where a teenager murdered his own father while under the influence of magic mushrooms. He was taken into the interrogation room shortly after the murder but enough time had elapsed that he was sober and just starting to understand the gravity of what he had done. The police sent in a soft-voiced female who spoke in a very caring and patient way. 99/100 people who watch that interrogation video would say that the woman was a therapist or councilor of some kind. Everything she asked and stated appeared to concern the wellbeing of this kid and the resolution of the terrible even that had taken place. In reality, everything she did was a cunning ploy with some kind of hidden goal. The entire interaction was calculated to extract information from him, very specific information, to be used against him in court. Every tangent of questioning she went on, seemingly random to the untrained eye, was highly specific in its value in a legal context.

An interrogation like this is not an example of outright lying, which is legal and commonly practiced, but it is much more sinister. It is an example of an interrogator assuming another identity and drawing the suspect into a false sense of warmth and security in order to make the suspect incriminate himself. To me, it is the same as having a conversation with your mother after a traumatic event, only to see her rip her own face off, a mask, to reveal the grotesque face of a police interrogator, and then going to jail for what you disclosed. Absolutely terrifying and dystopian. You absolutely must be proactive and protect yourself in this world. Even in "free" countries like the USA. [https://youtu.be/rBpDHJIwcUk?t=1495](https://youtu.be/rBpDHJIwcUk?t=1495)

TLDR: the police are allowed to lie to you [https://youtu.be/_WnhP91NJeU?t=1600](https://youtu.be/_WnhP91NJeU?t=1600)

<comment><USER19> Did you expect the guy to get off free for murder?

<comment><USER20> Guilt is orthogonal to due process. What if the kid hadn't committed the murder but was duped into making incriminating statements anyway? Furthermore, considering testimony given while under the influence is ridiculous.

<comment><USER5> > _" What if the kid hadn't committed the murder but was duped into making > incriminating statements anyway?"_

Then maybe it would make a better example for discussions like this. As it stands, that anecdote is little more than _" the police are good at their jobs and they caught a murderer which is unambiguously good for everybody, but what if they were instead using their skills for something bad?"_

> _" Furthermore, considering testimony given while under the influence is > ridiculous."_

I'm sorry but expecting cops to never talk to drunk people is just absurd. There are plenty of valid objections to modern policing, but this isn't one of them.

<comment><USER18> As long as a witch is burned who cares how they did it? Cops lying and deceiving is fundamentally wrong. Don't pretend that it's required for police to get convictions. There are other ways.

<comment><USER5> Comparing the arrest of a murder to witch hunting is absurd. You know that's absurd, you don't need me to explain it to you.

> _" Cops lying"_

You already admitted the cops in your example didn't lie. They're guilty only of having a calm demeanor when interrogating a murder suspect, which for some reason you consider morally abhorrent.

<comment><USER18> I went through ur comment history and I have to say that I respect you.

It isn't meant to directly compare this to witch hunting. It's a case of people overlooking brutality because witches are bad anyway right? There are zillions of examples of this. It's the concept that's important. Saying that the technique of lying is ok because it gets rid or murderers is wrong especially in light of the fact that there are other ways to do it.

And yes, there is a grey area where interrogators don't outright lie but are still highly deceptive. I don't care about the grey area, I just care that police are allowed to outright lie. That is not grey. The example that I illustrated reveals how sinister the police can be. It is more emotionally stirring than mechanical lying. But the interrogator did reveal her title and so whatever. Seriously twisted still. But making outright lying routine is wrong. I don't want to live in a world where police tell flat out lies to people. That is why we have Miranda rights. Under your logic there should be no reading of Miranda rights, allowing the police to tell the suspect literally anything like "if you don't confess we will do x" or "you have to tell us something or you'll be locked up forever" or whatever. Miranda rights exist for an extremely good reason. And stopping outright lying is a continuation of the spirit of Miranda rights.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER21> This might be a good time to let others know: Android (at least my OnePlus) has a "Lockdown" mode in the shutdown menu that locks the screen and prevents the usage of the biometric methods. You have to use the password. This is good because passwords have already been hashed out in court and are unequivocally protected by the fifth amendment; you don't have to tell an officer your password (and entering it for them constitutes telling them).

<comment><USER22> In iOS 11 and higher, you can disable Touch ID by pressing the power button 5 times in quick succession:

[https://www.macrumors.com/2017/08/17/ios-11-emergency-sos- di...](https://www.macrumors.com/2017/08/17/ios-11-emergency-sos-disables- touch-id/)

> _In iOS 11, Apple has added an "Emergency SOS" feature that's designed to > give users a quick and easy way to summon emergency services should the need > arise. As it turns out, there's a secondary benefit to Emergency SOS - it's > also a way to quickly and discreetly disable Touch ID. ... This is a handy > hidden feature because it allows Touch ID to be disabled discreetly in > situations where someone might be able to force a phone to be unlocked with > a fingerprint, such as a robbery or an arrest. With Touch ID disabled in > this way, there is no way to physically unlock an iPhone with a finger > without the device's passcode._

<comment><USER23> "Pressing power button 5 times in quick succession" doesn't work on my iPhone 8 Plus running iOS 12. To achieve the same effect, I need to hold the power button _and_ one of the volume buttons for a couple of seconds.

<comment><USER22> Sorry - looks like the power button x5 trick only works on iPhone 7 and earlier (had tested successfully on a 6S before posting): [https://support.apple.com/en-us/HT208076](https://support.apple.com/en- us/HT208076)

<comment> basil-rash On later phones its power and volume simultaneously.

</comment></comment></comment></comment></comment><comment><USER24> As a Root Android user, any time I have reason to believe that a situation with the police is going to end even slightly bad on my end, I power off my phone. And as a Root user I have several layers of security on all my devices. I also take a mental note of what my battery percentage is at, that way I know if my phone has been turned on at all.

As for a little back story on myself; I am wrongly labeled as a drug felon. My wife (separated for over a year) decided to try meth shortly after our wedding and got hooked in a bad way. I have a history with said drug and didn't want her to try but she insisted saying that it would help her understand why I am the way I am. I didn't know about her use of the drug and was in jail for 2 weeks because she had them in the car and I got pulled over and searched. After my release the cops in the area basically harassed me by pulling me over every other day at minimum. I was in and out of jail several times within 2 months. I had come into possession of the phone she had when I was in jail because she got a new one and I always saved the old phones to test my rooting and hacking skills with. Even though the phone was wiped, by her deleting all of her account info and messages, I was able to do a text recovery on the phone. I found in a few chats that she had with some of her friends and family while I was in jail for the 2 weeks, her telling them that I was in jail for her drugs. Of course everyone thinks that it's weed first, but we were in Colorado, so she clarified that it was for meth.

Now because of specific laws I can't even use those messages to clear my name and she won't take the stand to the law and accept her punishment for the use of the drugs.

</comment><comment><USER25> As others have noted, this decision comes from a low-level court. And from what I've seen recently, it won't stand.

Indeed, the basis of the opinion is iffy:

> "If a person cannot be compelled to provide a passcode because it is a > testimonial communication, a person cannot be compelled to provide one's > finger, thumb, iris, face, or other biometric feature to unlock that same > device," the judge wrote.

Because defendants' right under the 5th to withhold passcodes is not at all settled. And even if they can't be compelled, they can be jailed _indefinitely_ for contempt of court. Even if, as that ex cop in Philadelphia claims, they've forgotten it.

So anyway, this is iffy advice:

> The best advice for anyone concerned about government overreach into their > smartphones: Stick to a strong alphanumeric passcode that you won't be > compelled to disclose.

<comment><USER26> I didn't read the opinion but even the quotes that Forbes pulled are eyebrow- raising. Like:

"The undersigned finds that a biometric feature is analogous to the 20 nonverbal, physiological responses elicited during a polygraph test, which are used to determine guilt or innocence, and are considered testimonial."

This is the kind of wacky magistrate judge ruling that I'm sure the US Attorney rolls their eyes at.

</comment></comment><comment><USER27> It'll be just a short time before this is overturned. Fingerprints are non- testimonial. So is a photograph of your face. So is a sample of your handwriting. You can be forced to give a handwriting sample. As to polygraphs, at the federal criminal level, they have been approved in only one federal circuit, and then only under limited circumstances. See, U.S. v. Picinonna. Despite this federal non-acceptance, they are widely used at the federal administrative level for security clearances and the like. In the private sector, there are little restrictions on their use. You could also use divining rods, tarot cards, crystal balls and similar implements to discover the truth of a statement if you wanted to. However you can't weight a person down and throw him in the lake to see if he floats.

</comment><comment><USER28> Tip 1, which most people know: To quickly disable Face/TouchID you can squeeze left and right side buttons together (any combo) for two seconds to bring up the power off display.

Tip 2, which probably most people don't know: If you aren't holding the phone -- if someone shoves it in your face -- you can close your eyes to prevent FaceID from working and say "Hey Siri, who's phone is this?"

Not that it's wise to do this to frustrate a violent attacker, but it might work for some situations.

<comment><USER29> >...you can close your eyes to prevent FaceID from working and say "Hey Siri, who's phone is this?"

That's specific to Apple and I wouldn't be surprised if that got you an obstruction charge in the states. Plus, if you don't produce the password, afterwards, you're now sitting in jail for contempt - even if you may have _actually_ forgotten it.

It's a much safer avenue, legally, to just use a password to unlock the device.

</comment></comment><comment><USER30> Any idea if and how this ruling (if upheld) can be used to refuse phone seizures / password requests by CBP when entering the country? The ruling relies on the 5th amendment so its scope is limited to American citizens I guess. And whatever the rule of law it's probably not a good idea to piss off a CBP agent... but still, it'd be nice to be able to travel to the US without having to wipe one's phone and social media accounts.

<comment><USER31> I highly doubt it, even for American citizens at the border. The "Border search exception" pretty much says that anywhere within 100 miles of a boarder, the fourth amendment doesn't apply[1]. I imagine they would make a similar rule for the fifth amendment.

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

<comment><USER32> Citizens can't be denied entry. Worst case if you refuse to turn over your phone password is a short (hours, maybe days) detention, and confiscation of your phone.

Non-citizen admittance is at the discretion of the immigration officer and they can turn you away for just about any reason.

Either way, yes, this ruling wouldn't change anything there.

<comment><USER33> they can detain you for a limited amount of time, but they can confiscate your devices for an indefinite period.

<comment><USER25> Well, you couldn't trust the device after they returned it. So losing it isn't a problem.

The best option is not carrying devices across borders. Have whatever you need online somewhere. Securely encrypted, of course. Buy a device at destination. And discard it before return. That's accepted best practice for security- conscious firms. They'll provide devices and online storage.

If you must carry a device in transit, it ought to be plain-vanilla, with nothing sensitive on it. Again, security-conscious firms supply such devices for staff. And private individuals can just say that they're too concerned about theft to carry their primary devices.

<comment><USER19> Exactly. If the government takes your phone and gives it back its time to wipe the phone and sell it. Restore a backup on to a new phone.

</comment></comment></comment></comment></comment></comment><comment><USER34> My bet is that this doesn't stand, because (from the haphazard reading I've done) it doesn't comport with the reasoning used to allow people to refuse passwords, which is that the act of disclosing a password is a form of self- testimony --- _not_ that rifling through a phone is intrinsically self- testimony. If I understand correctly (and there are lawyers on HN who can shoot this down) people have tried and failed to make this same claim about breathalyzer and blood tests and failed.

Just having an opinion about the case isn't all that interesting, and other people have said roughly the same thing on this thread, so what I'd like to contribute is the offer to go in on a long bet _against_ the precedential value of this particular case. If it's eventually overturned, $100 to the charity of my choice; if it's exhausted procedurally and allowed to stand, $100 to yours. Any takers?

<comment><USER35> But this ruling has to do with a sort of bulk unlock. Isn't there case law that the police can't go around collecting blood from a whole group looking for a match?

</comment></comment><comment><USER36> There is something extremely disturbing about the state wanting to go through your private papers.

The only way this should be possible in a democracy is rarely and only by due process with a judge's order and ample safeguards, explicit conditions built into the law with no room for abuse by 'friendly judges' or 'overzealous' state machinery.

Anything else is a police state in the making. This is fundamental to the definition of a democracy and you can't dilute this without diluting the meaning of democracy at which point you should use some other word to describe your system.

<comment><USER37> This is 100% true.

I really wish the lobotomized "I have nothing to hide" sheep would understand this.

For every one of these laws, you need to think about what a world in which searches like this happened routinely to everyone - even the "good guys™" \- would be like.

</comment></comment><comment><USER38> As someone not from the US how could you be compelled to unlock your device using biometrics? Does this actually involve violence?

<comment><USER39> Aren't all laws ultimately backed by threat of force whether to take your property or imprison you (not sure I'd call this violence)? You can be held in contempt if you ignore a court order but I doubt they would like smash your thumb down on the screen.

</comment></comment><comment><USER40> But can they seize your phone and crack it and look through your stuff without your permission or getting a warrant/judicial oversight?

Otherwise, the only thing this does is add one extra step ( and additional cost which doesn't matter since taxpayers are footing the bill ) for the Feds to break into your phone.

<comment><USER41> They do need a warrant now, although they did not used to, and obviously don't need one if you hand an unlocked phone over upon request (same as if you go along with 'let me see your backpack').

It's unlikely this ruling will be upheld since providing biometrics to unlock a phone is difficult to construe as 'testimony' since it's performing an action, like complying with a court order to unlock your front door in response to a warrant should you not desire for the police to kick said door in.

The biggest gray area currently is whether typing in a password is 'something you do' or 'something you know', and you can find different precedent to support both conclusions in US jurisprudence for the time being. Hopefully SCOTUS will come down on the side of 'something you know' if/when such a case ever makes it before them.

<comment><USER42> > It's unlikely this ruling will be upheld since providing biometrics to > unlock a phone is difficult to construe as 'testimony'

Agreed, feels like this rises and falls with the forced blood draws issue that was decided in the 60s [0]. Maybe if you claim the phone isn't yours, unlocking it with your face or password would be testimonial? Not sure if that defense would survive them calling the number that was registered to you.

[0] [https://en.wikipedia.org/wiki/Schmerber_v._California](https://en.wikipedia.org/wiki/Schmerber_v._California)

</comment></comment></comment><comment><USER43> This is a magistrate's response to a warrant application. It doesn't have _minimal_ jurisprudential value, it has _zero_ jurisprudential value.

The headline is wrong to even use the word "judge" \- at the federal level, there is a meaningful distinction between a judge and a magistrate.

</comment><comment><USER44> If you fall asleep, can the police just hold your finger to your phone?

It seems very clear to me that this is not a testimonial act. Nor is their 'coercion' here in the communicative sense. I'm guessing there are other laws that prevent police from handling your body to retrieve evidence, or at the very least, laws that require a warrant for such actions.

</comment><comment><USER45> > _Stick to a strong alphanumeric passcode that you won't be compelled to > disclose._

I can imagine this having value against criminals as well. The number of people willing to beat a password out of a victim is smaller than the number of people willing to hold a victim up against the wall for a second to press their finger to a reader.

<comment><USER46> Except criminals that could beat you up on a street are not interested in your data, they just want to sell the hardware and have money for drugs. It's easier for them to just type wrong passcode 10 times and have the phone wipe its whole content.

<comment> basil-rash Does the wipe put it back into factory default mode? It was my understanding that it would put it into a "locked to X user" mode, requiring an iCloud password to reactivate.

</comment></comment></comment><comment><USER47> As if a court order ever stopped a highly motivated group of people from using technology however they wanted, with or without either your consent or the consent of the company providing the technology platform ...

<comment><USER48> Actually court orders do that all the time. Sure, it can't stop physical force being used but it can invalidate the results for legal purposes.

</comment></comment><comment><USER49> > U.S. District Court for the Northern District of California

Ah, OK, so this is as meaningful as the judge who decided that the ACA was unconstitutional.

</comment><comment><USER50> > The FAA would require that drones have "an anti-collision light illuminated > and visible for at least three statute miles," as well as testing and > training.

I'm a private pilot, and I have the hardest time spotting airplane traffic from 3sm miles away. Ready to sit back and have some popcorn reading articles about how manufacturers are supposedly complying with this rule. Unless there's some novel lighting technology I don't know about, this seems like a nontrivial problem to me.

<comment><USER51> Wait.... What?

Did you get lost on your way here? [https://news.ycombinator.com/item?id=18907490](https://news.ycombinator.com/item?id=18907490)

</comment></comment><comment><USER52> I guess they will just put your phone to your face and claim it was unlocked.

</comment><comment><USER53> So they just need to reproduce your likeness to unlock your poorly-secured device? Sounds significant, when you're already in custody. /s

<comment><USER32> And do so within 48 hours, and with enough fidelity not to trigger a lockout with failed attempts.

<comment><USER53> Sounds like a process that will be quickly automated and sold to law enforcement for a pretty penny.

Immediately take retinal scan and face scan, fingerprint, and photograph. A minute later a 3d-printed head and finger emerges back in the basement of the station.

</comment></comment></comment><comment><USER54> so, I get arrested and fall asleep and then the fingerprint reader works, so is the face rockon, unlocking my phone... do not trust human mediocracy of law enforcement or otherwise,</comment>


Wild bird feeding probably affects avian urban ecology [pdf] - <AUTHOR> https://camargue.unibas.ch/Amrhein_Chapter3_Avian_Urban_Ecology.pdf <comment><USER2> Is it just me or does this seem really, really obvious? Any significant inputs to a system will significantly affect that system - unless you're a climate change denier.

All I see is a proposal for further research. Am I missing something?</comment>


After six years of living in Canada, Montreal, Tonight I got hit by Racism - <AUTHOR> http://majid.mmxgroup.net/?p=356

<comment><USER2> The only adult I know who is scared of dogs is from Pakistan. You are an adult, scared of dogs, and from a country that borders Pakistan. Is this racism or is it an observation based on fact?

<comment><USER3> No it is just ignorance on your behalf.

It is pretty easy for me to make associations like this as well. There are people will a myriad of profiles in all countries and if we start generalizing people from other countries based on one individual things will get pretty bad very soon.

Just relate to someone in your town, for example, that is an a-hole and you'll understand what I am talking about. I could very well put you in the same basket as him.

<comment><USER2> Calling every asshole a racist is a slippery fucking slope.</comment></comment></comment>


Felix - a fast scripting language - <AUTHOR> http://felix-lang.org <comment><USER3> The web page rubs me the wrong way. How can you claim to be the fastest anything without a single benchmark? How can you claim to be a "scripting language" when you're statically-typed and compile to C++? What does "scripting language" even mean then? How can you say things like "it will be a bit slow the first time but subsequent runs will load much faster than any VM." _Any_ VM? Are you really "much faster" than:

      $ time lua empty.lua

      real	0m0.005s
      user	0m0.002s
      sys	0m0.002s

      $ time ./luajit empty.lua

      real	0m0.005s
      user	0m0.001s
      sys	0m0.002s

Maybe there's cool stuff going on here but I can't get past being annoyed at these over-hyped claims.

<comment><USER4> are you referring to the "The fastest scripting language on Earth" tagline? i saw that as a way to say "look, this is a compiled language that you can use as a scripting language" with a touch of whimsical humour.

<comment><USER3> Interesting. If that's the way it is intended I missed it completely; I'd definitely be much more receptive to that line of meaning.

<comment><USER5> Python and Lua are both compiled languages, almost all languages are compiled these days. They compile to bytecode rather than native machine code, then run an interpreter which may well do on-the-fly compilation to machine code (JIT). Bytecode target makes the compiler platform independent. Felix does the same, except the "bytecode" is ISO Standard C++.

<comment><USER6> _Python and Lua are both compiled languages, almost all languages are compiled these days._

For some strange reason, certain misconceptions in CS/programming have half- lives measured in several decades, such as this annoying distinction between interpreters/VMs/compiled languages. We're at least 20 years out from interpreters being meaningfully distinct from VMs and compiled languages.

<comment><USER3> > We're at least 20 years out from interpreters being meaningfully distinct > from VMs and compiled languages.

Compiled languages generally don't support eval. That's a pretty meaningful difference.

<comment><USER6> _> Compiled languages generally don't support eval._

Python is compiled to bytecode. It supports eval. So does Smalltalk. Lua would fall into this category as well, and a whole bunch of others. I don't think "compiled" means what you think it means anymore, which is my whole point.

<comment><USER3> > I don't think "compiled" means what you think it means anymore, which is my > whole point.

See my other reply (<http://news.ycombinator.com/item?id=5012218>). "Compiled language" is an informal term that usually means "to machine code." If you take it to mean "compiles to any kind of IR at all," then basically all languages are compiled and the term is meaningless. But that's not how the term is generally used -- for example, see the Wikipedia article (<http://en.wikipedia.org/wiki/Compiled_language>).

There is a real difference between languages that can meaningfully be compiled directly to machine code and those that can only JIT-compile type-specialized traces/functions (with guards that fall back to the interpreter if the assumptions do not hold).

<comment><USER6> _> If you take it to mean "compiles to any kind of IR at all," then basically all languages are compiled and the term is meaningless._

That's my point. It's a _misnomer_. It's the same thing as calling technology with the ability to parse context free grammars "regexes." It's a common usage that pollutes the precise meaning of technical terms. (And at the same time, generates misconceptions based on those technical terms.)

 _> There is a real difference between languages that can meaningfully be compiled directly to machine code and those that can only JIT-compile type- specialized traces/functions_

Well, not so much as you'd think. In theory, the ability to do things like eval cuts off a lot of direct compilation to machine code, but in practice, we know this isn't necessarily true.

<comment><USER3> > That's my point. It's a misnomer.

I disagree (as do the books sitting on my shelf), but I'm not really interested in debating this point of terminology.

> Well, not so much as you'd think.

No, really there is. Trying to deny this isn't insightful, it's myopic. Take the C function:

      int plus2(int x) { return x + 2; }

You can directly compile this into the following machine code, which needs no supporting runtime:

      lea    eax,[rdi+0x2]
      ret

Now take the equivalent function in Python:

      def plus2(x):
        return x + 2

Yes, it's true that this "compiles" (internally) to the following byte-code:

      3           0 LOAD_FAST                0 (x)
                  3 LOAD_CONST               1 (2)
                  6 BINARY_ADD
                  7 RETURN_VALUE

The question is: can you execute this byte-code without implementing an entire Python interpreter? The answer is no, because the BINARY_ADD opcode has to handle the case where "x" is an object that implements an overloaded operator __add__(). In this case, the user's __add__() method can be arbitrary Python code, and therefore requires an entire Python interpreter to fully and generally execute.

I expect you will want to talk about the limited circumstances where you can specialize this function ahead-of-time, thereby avoiding the fully-general implementation. This would again be missing the point. Python and C are different beasts, and this difference has far-reaching consequences on their implementations. Trying to draw an equivalence between all "compiled languages" does a disservice to people who are trying to understand the differences between them.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> @nmcfarl thanks for resubmitting with a different url. I find the home page a bit baity but the tutorial page <http://felix-lang.org/web/tutorial.fdoc> is great.

Depending on how you look, it is C++ speed OCaML, or perhaps more correctly C++ in a fully type-inferred (unfortunately, nowadays almost everything gets called type-inferred. Hence the added qualification "fully"), ML like language.

It does whole program optimization. It uses a mix of lazy and eager evaluation strategies for speed.

I believe it can generate Python modules too, thanks to how well it interacts with C. The details have to be gleaned from the mailing list though.

<comment><AUTHOR> I was actually using submissions as a poor man's substitute for HN search :)

I found the tutorial ( <http://felix-lang.org/web/tutorial.fdoc> ) to be a bit info sparse when I had no clue what I was looking at. Once I'd poked a round a bit it was much better, and started answering questions I was having - <USER2> how FFI is handled: <http://felix-lang.org/web/nutut/intro/intro_01.fdoc>

A very cool project.

</comment></comment><comment><USER8> While I enjoy reading about new and interesting languages (note: Felix has been around for over ten years), I really wish that language designers would put example code for something like FizzBuzz right on the front page to give people a flavor of the syntax.

I can't remember how many times in my life I've done a link expedition through a website or docs just to see a simple programming example.

<comment><USER5>
      for var i in 1 upto 15 do
        println$
          match i % 3, i % 5 with
          | 0,0 => "Fizz-Buzz"
          | 0,_ => "Fizz"
          | _,0 => "Buzz"
          | _ => str i
          endmatch
        ;
      done

Did I get the job?

</comment></comment><comment><USER9> They are smoking crack if they think anyone will use a scripting language that doesn't have a functioning REPL.

My goto-languages for quick development are Perl 5, Clojure and Javascript.

All 3 are adequately fast for real tasks. All are cross-platform, and all 3 support a REPL that allows doing real work interactively.

These conditions are the absolute minimum to be viable as a scripting or sketch/prototyping language.

<comment><USER10> What REPL do you use for Perl?

<comment><USER11> As aflott does, I use the built-in debugger as REPL for most simple uses.

I also use re.pl from Devel::REPL (<https://metacpan.org/module/Devel::REPL>).

</comment></comment></comment><comment><USER12> I've kept an eye on felix-lang the last several months, and the project seems to be progressing continuously.

I'm curious though: has it been used in production? I'd be _very_ interested in reading real use stories, with up and down sides!

Also, how is the community doing, and what about contributors? Do both groups grow?

<comment><USER4> i've been keeping a vaguely interested eye on it for years, because it does look interesting. it has failed to make it to the front of my "learn this language next" priority queue due to the fact that i can't find anyone using it for _anything_ , not even a hobby project on github. also, the documentation is a bit sparse.

one killer feature that would make me start learning it immediately is good, well-documented qt bindings (i'm sure it is possible, since felix compiles down to c++, but with the sparse documentation i have no idea how i would go about getting it up and running, and insufficient motivation to first learn the language and then figure out how to do it).

</comment></comment><comment><USER13> See fridgescript (<http://code.google.com/p/fridgescript/>) - because you are going through C/C++ it is faster in its domain (x87 floating point work) if given good clean code. Its not big or clever - just that C/C++ kills its performance a little with restrictions like struct layout rules and standard library math functions being rubbish... (note the compiler uses almost no optimisation strategies and the language is very specific and almost useless though)

That being said, I like the idea very much, I just object to the claim of fastest and the value the claim implies. Beating C is very easy if you know some very basic things about the restrictions placed on it by standards... :)

</comment><comment><USER14> Why do language designers continue to insist on semi-colon terminated lines?

<comment><USER15> Perhaps to dissuade the lowest common denominator of programmers that get hung up on such superficial trivialities.

<comment><USER14> But it's not triviality - it's noise - Signal: Good - Noise: Bad, got it?

If you REALLY need end of line markers, any half-way competent text editor can display them for you.

<comment><USER16> You obviously have no idea what signal-to-noise ratio is about if you think semicolons are noise. Who are you trying to impress?

<comment><USER17> End of line is already encoded in source files as \n. Redundancy isn't noise, but it is redundant.

<comment><USER18> If end of line always means end of statement, by all means get rid of semi colons. If some non-trivial algorithms is used to infer end-of-statement boundaries that is more complicated than detecting end-of-line, then...there will be subtle problems.

I went through this transition before in Scala, the error messages got a lot worse after semi-colon inference was added. I wound up telling people to add semi-colons to their code when they were scratching their head at some sort of parse/type error message.

</comment></comment></comment></comment></comment></comment><comment><AUTHOR> This is interesting, but the home page is the most coherent and readable on the site. Better resources look to be:

The Facebook group: <http://www.facebook.com/groups/243958412369802/>

And google group: [https://groups.google.com/forum/?fromgroups#!forum/felix- lan...](https://groups.google.com/forum/?fromgroups#!forum/felix-language)

</comment><comment><USER19> Looks very interesting, well done to whoever did this. After an admittedly quick and superficial glance at the tutorial, I'm not fan of chapter 6 though. Why so many ways to write calls? With no idiomatic syntax, it means I have to know all these variations if I hope to understand Felix code (since it is ok for anyone to choose whichever style).

<comment><USER20> I just don't understand why there are both gen and proc functions. Why have a separate kind of thing for functions that don't return anything?

<comment><USER21> Functions aren't supposed to have side effects and procs are. It makes sense since functions without side effects would allow for some nice compiler optimizations. The part that scares me is that the compiler doesn't enforce no side effects. This means you need to be extra careful when using someone else's code.

<comment><USER20> Yeah, I got that, but gen's and proc's both have side effects. Why?

<comment><USER5> Basically this is to support "expression" like syntax such as people are used to in C, for example i++ and x=y are expressions with side effects in C and a lot of C idioms depend on such things. This kind of thing was originally not allowed but I personally found it clumsy to manually split out the imperative parts from the functional parts, so I taught the compiler how to do it for me :)

<comment><USER20> But those expressions also return things. Why can't they be gen? Why would I use a proc instead? It seems like I must be missing something, but I can't see it.

</comment></comment></comment></comment></comment></comment><comment><USER22> I'll stick with Lua. I wouldn't give up the dynamic aspects of a language like Lua just for a bit more speed. LuaJIT is more than enough, and if you are doing the hard number crunching that makes speed an issue there's a good chance it's not trivially harder just to write it in C++ to begin with.

<comment><USER23> For raw number crunching, LuaJIT is plenty fast anyway (when you use the FFI to instantiate native types), so unless you need something real special (SSE perhaps), it may not even buy you that much to use C++ over LuaJIT.

<comment><USER24> Just a small clarificatation: the 2.x version of LuaJIT only compiles floating point operations to SSE2 (<http://lua- users.org/lists/lua-l/2010-03/msg00142.html>). I'm not sure, however, whether it does vectorization or just operates on one float at a time.

</comment></comment></comment><comment><USER20> I like the array type syntax: an array of five ints is

      int*int*int*int*int === int^5

instead of something like int[5]. Lots of interesting little ideas.

<comment><USER25> How is

        int*int*int*int*int

or even

        int^5

better than a plain int[5]? To me, the use of mathematical operators * and ^ causes dissonance.

<comment><USER26> If you're coming from a type theory background (which, granted, few are), this operator is actually perfectly natural.

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

<comment><USER27> Aren't product types just tuples, whereas arrays correspond to list types? The '^' operator can only construct arrays whose elements are of a single type, right?

<comment><USER5> That's correct. However, somewhat problematically, Felix considers the tuple int * int to actually be an array int ^ 2. It's not entirely clear this "automatically applied isomorphism" is a good idea though. However it means arrays "drop out" of the notion of a tuple as a special case.

Internally such arrays have a special representation which allows arrays of 100,000 values, something which could never be represented by a tuple type (and still get reasonable compile times :)

</comment></comment></comment></comment></comment><comment><USER28> how does this compare with haXe (haxe.org)?

I see that it's billed as a "C++ code generator" and as a "scripting engine".... Does it generate C++ code that I could use without Felix afterwards?

<comment><USER5> Yes, provided you collect all the required library headers and either sources or binaries: the generated C++ still requires run time libraries and the top level driver if it's a program.

There is actually an option of flx, --bundle=dirname, which puts the generated C++ in a single directory, to make it simpler to ship the generated C++ to another platform.

This does not do a full bundle, i.e. it doesn't package all the run time support code as well. That's on the TODO list, so you could literally copy the target directory to another machine and run "make" or something and only need a C++ compiler to build it.

There's another aspect to your question: if by "use" you also mean "modify" then the current state is that Felix generated C++ is a bit hard to read. The code is "good enough" to add debugging prints but not much more. It would be good to improve this so the code is more readable.

</comment></comment><comment><USER29> At first glance, it seems fairly complex. For instance, 4 different kinds of variables, 3 different kinds of function. But I guess that's understandable if it compiles to C++ and is looking to be highly efficient.

</comment><comment><USER30> Which high level optimisations are we talking about?

<comment><USER5> As a whole program analyser, Felix does a lot of optimisations. The most important one is inlining. Felix pretty much inlines everything :)

When a function is inlined, there are two things you can do with the arguments: assign them to variables representing the parameters (eager evaluation) or just replace the parameters in the code with the arguments (lazy evaluation).

Substitution doesn't just apply to functions: a sequence of straight line code with assignments can be converted into an expression by replacing occurrences of the variables with the initialising expressions.

For a small number of uses, substitution is the usually the most efficient. For many uses, lifting the common expressions to a variable is more efficient. If we're dealing with a function (in C++ the model is a class) for which a closure is formed (in C++ the model is an object of the class) lazy evaluation is very expensive because the argument itself must be wrapped in an object to delay evaluation.

By default, Felix val's and function arguments use indeterminate evaluation semantics, meaning the compiler gets to choose the strategy. This leads to high performance, but it also means we need a way to enforce a particular strategy: for example vars and var parameters always trigger eager evaluation. This leads to some complication in the language.

Felix also does other optimisations, for example it does the usual self-tail call optimisation. This one works best if you do inlining at the right point to convert a non-self tail call (which cannot be represented for functions in C) into a self-tail call (which is replaced by a goto).

Felix also does parallel assignment optimisation.

It ensures type-classes have zero cost (unlike Haskell which, by supporting separate compilation, may have to pass dictionaries around).

There is quite a lot more: eliminating useless variables, functions, unused arguments, etc. There are even user specified optimisations based on semantics, such as

      reduce idem[T]  (x:list[T]) : list[T] = x.rev.rev => x;

which says reversing a list twice leaves the original list, so just get rid of these two calls.

Actually one important aspect to the optimisation process: by default a function is a C++ class with an apply() method. This allows forming a closure (object). The object is usually allocated on the heap. However Felix "knows" when it can get away with allocating such an object on the machine stack instead (saving a malloc and garbage collection). Furthermore, Felix "knows" when it can get away with a plain old C function, and generates one of those instead if it can. And all of that occurs only if the function wasn't entirely eliminated by inlining all the calls.

So although you should think of Felix functions and procedures as objects of C++ classes allocated on the heap and garbage collected, any significant program implemented with this model without optimisations would just drop dead.

<comment><USER30> These are very good optimisations indeed. Inlining adds a lot more speed than people think. I don't understand why people want closures in their languages. You basically want a function that cheats her own scope... I don't get where the big deal is.

<comment><USER5> One needs closures, that is, functional values bound to some context, for higher order functions (HOFs). For example in C++ much of STL was pretty useless until C++11 added lambdas. Many systems provide for closures in C, by requiring you register callbacks as event handlers, and these callbacks invariably have an associated client data pointer. A C callback function together with a pointer to arbitrary client data object is a hand constructed closure.

The utility of closures derives from being able to split a data context into two pieces and program the two halves separately and independently. For example for many data structures you can write a visitor function which accepts a closure which is called with each visited value. Lets say we have N data structures.

Independently you can write different calculations on those values formed incrementally one value at a time, such as addition, or, multiplication. Lets say we have M operations.

With now you can perform N * M distinct calculations whilst only writing N + M functions. You have achieved this because both halves of the computation are functions: lambda abstraction reduces a quadratic problem to a linear one.

The downside of this is that the abstraction gets in the way of the compiler re-combining the visitor HOF and the calculation function to generate more efficient code.

There's another more serious structural problem though. The client of a HOF is a callback. In C, this is very lame because functions have no state. In more advanced languages they can have state. That's an improvement but it isn't good enough because it's still a callback, and callbacks are unusable for anything complex.

A callback is a slave. The HOF that calls it is a master. Even if the context of the slave is a finite state machine, where there is theory which tells you how to maintain the state, doing so is very hard. What you really want is for the calculation part of the problem to be a master, just like the HOF itself is. You want your calculation to read its data, and maintain state in the first instance on the stack.

Many people do not believe this and answer that they have no problems with callbacks, but these people are very ignorant. Just you try to write a simple program that is called with data from a file instead of reading the file. An operating system is just one big HOF that calls back into your program with stream data, but there's an important difference: both your program and the operating system are masters: your program reads the data, it isn't a function that accepts the data as an argument.

Another common example of master/master programming is client/server paradigm. This is usually implemented with two threads or processes and a communication link.

Felix special ability is high performance control inversion. It allows you to write threads which read data, and translates them into callbacks mechanically.

Some programming languages can do this in a limited context. For example Python has iterators and you can write functions that yield without losing their context, but this only works in the special case of a sequential visitor.

Felix can do this in general. It was actually designed to support monitoring half a million phone calls with threads that could perform complex calculations such as minimal cost routing. At the time no OS could come close to launching that number of pre-emptive threads yet Felix could do the job on a 1990's desktop PC (with a transaction rate around 500K/sec where a transaction was either a thread creation or sending a null message).

<comment><USER30> I'm learning a lot thank you. Felix is pretty impressive!

</comment></comment></comment></comment></comment><comment><USER10> Out of curiosity: How did you generate the slides?

<comment><USER5> The webserver, which is written in Felix, translates a particular format called "fdoc" to create the tutorial and slides, including embedded colourised hyperlinked Felix and C++ code. The translation is to a mix of HTML5 and Javascript. This link shows the source of the first slideshow:

<http://felix-lang.org/web/slides/language-overview.fdoc?text>

All the documentation and layout needs a lot more work. [BTW: I'm the primary developer]

<comment><USER31> Yttrill, I see that Felix is 12+ years old. I remember reading about Felix on Lambda the Ultimate a few years ago. :)

Over those 12 years, what are some of the biggest changes (in the language or its implementation) you have made? Where the changes mostly evolutionary?

<https://github.com/felix-lang/felix/commits/master?page=135>

<comment><USER5> This is a hard question to answer. In general the emphasis changed from getting the compiler to work, and to generate efficient code, to using the technology to implement a rich set of libraries (feedback into compiler), and then writing some simple tools (feedback into libraries and compiler).

Probably the single biggest feature was the introduction of Haskell style type classes as a way to systematically provide "generic" features like comparisons and conversions to string which are de rigueur in dynamically typed scripting languages.

Less obvious but quite important was switching the parser from Ocamlyacc to Dypgen combined with OCScheme, which together put the grammar in user space, allowing almost the entire grammar to be put in the library. A lot of new features were added with very little or no change to the compiler by just adding some EBNF grammar and suitable Scheme action code to the parser.

This can be very effective. For example, with only one extra term in the compiler, I added a dynamic object system that looks a lot like Java with objects and interfaces including "implements" and "extends" stuff. It just uses records of closures (the compiler mod added record extension), but the syntax is neat and almost immediately I used it to factor the webserver into separately compiled plugins. I originally implemented this as a kind of joke, to show off the expressive power in respect of Domain Specific Sub-Languages, but not intended for use. The joke was on me :)

<comment><USER31> Thanks for the background. Moving the grammar into "user space" from the compiler is a particularly interesting feature!

</comment></comment></comment></comment></comment><comment><USER32> I find it definitely a nice language proposal, but there are a few issues, I guess. A first one is that many of the distinctions introduced (such as proc,fun,gen) are all optimization issues. I would appreciate if it were possible to do that long after you're done with just making the program work. The language may force the developer way too early in the process to think of things that do not matter at that point. In the best case, it will matter later on, when the program truly works. Another issue I have is that the "simplifications" introduced initially lead to introducing lots and lots of additional symbols such $ and #, just because the simplification was apparently not leading to something simple. So, the language suffers from enforcing a premature optimization mindframe as well as from overly complex administrative simplification.

<comment><USER5> The proc/gen/fun distinction isn't entirely an optimisation issue, its a semantic one, heavily related to the implementation model. In principle fun and gen use the machine stack for return addresses whilst proc uses a heap allocated list which allows cooperative multi-tasking using channels for communication: such so-called spaghetti stacks are easy to swap. Machine stacks can only be swapped in a conforming way in C/C++ by using pre-emptive threads which is precisely what we're trying to avoid.

I said "entirely" above because semantics and optimisation are heavily intertwined in any system.

The comment about "syntactic sugar" is valid: there are at least four operators with different precedences all meaning "application of function to arguments". However note that in most languages this is true anyhow: x + y is really just add (x,y). Finding a good set of squiggles and marks that's acceptable to many people isn't easy.

However the syntax is defined in the library, in user space, so you can add your own grammar or design your own domain specific sub-language, and add your favorite squiggles that way. Any contributions to making the standard syntax simpler would be welcome: I'm constantly struggling with this issue because I'm well aware syntax matters, especially early in learning a language.

<comment><USER32> I have created a blog post explaining why I think the language has too many problems to ever take off: [http://erik-poupaert.blogspot.com/2013/01/the- felix-programm...](http://erik-poupaert.blogspot.com/2013/01/the-felix- programming-language-or-how.html)

</comment></comment></comment><comment><USER33> Love at first sight, but the build script is broken.

<http://pastebin.com/raw.php?i=WzB5Jqyf>

<comment><USER5> It works with this:

~/felix>python3 Python 3.2.3 (v3.2.3:3d0686d90f55, Apr 10 2012, 11:25:50) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin

and also on Linux with this:

skaller@felix:~$ python3 Python 3.2.3 (default, Oct 19 2012, 20:10:41) [GCC 4.6.3] on linux2

I have been told that the script fails if you use a slightly different version of Python:

      File "/usr/lib/python3.3/subprocess.py", line 906, in communicate

So it is an incompatibility in Python 3.3 subprocess module I think.

<comment><USER33> Indeed, I tried it on a fully up-to-date installation of ArchLinux.

<comment><USER5> I am sorry about this problem. I have had a look and I understand what is happening but not how to fix it. Python 3.2 does not provide a timeout in the subprocess module. fbuild is using a module by Peter Astrand which derived a new class and adds a timeout. Unfortunately Python 3.3 adds the exact same argument to the API, but defaults it no None, which is clobbering the value used in the derived class somehow, leading to timeout of None being added to a floating point value.</comment></comment></comment></comment>


Ask HN: Advice for someone struggling to learn Django - <AUTHOR> Hello HackerNews.  I've been trying to learn Django for about a half a year now. After completing many tutorials I find myself struggling to build projects that deviate from said tutorials.  Any suggestions? <comment><USER2> Deviate, identify what is the problem, solve that problem, repeat. When you can describe a very specific problem, stackoverflow is great. Otherwise, IRC or some django-specific community may be a better place. If you think you're struggling, break down the issue into small bits: what are you trying to achieve, what have you tried, what's the smallest bit of progress you can make right now / what's the immediate issue that's stopping you.

You'll always find new problems if you try new things. That's learning, not struggling. :-) (worth repeating to get a more positive outlook)

<comment><AUTHOR> Thank you viraptor. I've been on irc since posting this. Should've been using that resource ages ago. Really needed someone I could ask specific questions and didn't really know where to turn for that. Excited to be learning not struggling :)

</comment></comment><comment><USER3> It might be worthwhile to use a library like Flask which has less batteries included. This will force you to figure out which pieces of the puzzle you are missing and will (hopefully) allow you to learn a lot through exploration.

Once you understand what everything is doing, going back to Django, you should understand what all of the components are doing.

Django & Flask are not exactly one-to-one with the way they handle a lot of things, but I think it would still be a useful exercise.

<comment><AUTHOR> Thanks Idonley. I have heard that flask is easier. At this point I feel too deep into Django to give up. However, picking up some flask stuff on the side could be worthwhile. Would certainly broaden my understanding of it all.

<comment><USER4> I would second this advice. Flask is structured much more intuitively than Django. The first time I tried Flask after Django everything just clicked into place immediately.

</comment></comment></comment><comment><USER5> Before learning Django, did you already understand the fundamentals of the web, relational databases, and basic programming?

Django abstracts away the tedious aspects of the use of SQL databases, form validation, HTTP requests and responses, and the like. It does not absolve you from understanding the underlying structures.

</comment><comment><USER6> Try to understand why things are done the way they are and what is actually happening instead of just following the tutorial systematically. If you have some knowledge gap, say in basic HTTP or data modeling concepts, make sure you read about those as well. This will strengthen your understanding of the framework. Also, if this is your first time with Python, I highly recommend learning Python before learning the framework. This applies to any language out there.

<comment><AUTHOR> Thanks Wreath. That's good advice. I have been brushing up on my python skills as I was concerned that may be my problem. I unfortunately did learn Django very very shortly after i started diving into python. Will continue to further my python education for sure!

</comment></comment><comment><USER7> Learn HTML and CSS, Python, and then Django. Think of a new idea. Try build when learning Django.

<comment><AUTHOR> Thanks Pydox. I do know html and css. I've been doing that for a little over a year now. Currently design a lot of landing pages for work. I'm currently working on www.correlate.pro with Django :) My website www.samuelpiecz.com is built with Django and I've built a couple other little projects. My website does need to be updated badly though..

</comment></comment><comment><USER8> Hi, I'd suggest finding a local Python or Django user group and asking for help. Also it's worth joining #django on irc to ask questions.

<comment><AUTHOR> Thanks for the advice. I will certainly start taking advantage of irc. Unfortunately no meetups around here.

</comment></comment><comment><USER9> Email me any questions. Id love to help. If you are on twitter, then Id connect you to some great django people.

(Check my profile)

<comment><AUTHOR> Thank you very much! I really appreciate it. Have added you on twitter, however, I'm not super active on social media.

</comment></comment><comment><USER10> Which tutorials have you done thus far?

<comment><AUTHOR> I've done all the teamtreehouse python and Django tutorials. Which took a few months. Even did it a second time. Then also the django polls tutorial on the Django docs site. Plus the local library tut that is on the mozilla site. Also built a storefront using Django but I used 3rd party integrations to deal with payment processing and the shopping cart (stripe and snappycheckout).

<comment><USER11> Have you read through "Two Scoops of Django" yet? I am not really a fan of any Django learning resources (that I'm aware of) outside of that one, and the docs. It helped me because it explicitly lays out an opinionated but sensible way of structuring projects.

<comment><AUTHOR> I have read about half of it so far. All projects I have worked on recently I've used the Cookiecutter that Audrey and Danny offer. It's extremely helpful. Thanks for reminding me I need to finish it!</comment></comment></comment></comment>


UC Berkeley Asking Incoming Students For DNA  - <AUTHOR> http://www.ktvu.com/news/23592937/detail.html

<comment><USER2> So, how long until the database is lost / leaked?</comment>


Adblock filter rule list modified politically in Finland - <AUTHOR> https://github.com/uBlockOrigin/uBlock-issues/issues/285 <comment><USER3> Adblocking list should be what their name says: lists that match ads (and advertising-related trackers). There is no place in such a list for politically motivated blacklists.

Content based blacklists have their place too. Users are of course free to create hate-speech-block, union-block, trump-block, liberal-block, nazi-block or any-other-category-block, but if these lists are distributed through an adblocker they should be off by default and clearly labeled.

<comment><USER4> I really wish the internet would be client-side filtered by default, instead of centrally moderated.

We'll end up with filter bubbles either way.

<comment><USER5> Adblock plus is a client side plugin, the issue was that the blacklist was maintained by someone who wanted to block more than ads. Perhaps there needs to be reviewers from multiple sources for when changes are made to these sort of lists.

<comment><USER6> Requiring a review before release requires a rather large change to how the current system works, adding more centralization, and slows down how quickly new threats can be blocked. This event took two days to notice and be changed, and that's for a list with a relatively low amount of users. The current method seems fine.

</comment></comment></comment></comment><comment><USER7> The fundamental problem is that these filter lists are maintained by random volunteers, who everyone just assumes are trustworthy.

The browser makers avoid the issues by having ad-blockers be third-party extensions. The extension makers don't make the filter lists either, they just import from EasyList and similar. It's surprising there arent't more cases of corruption and broken trust.

I wish I could get ad-blocking some somebody I can trust. Unfortunately the only way to turn ad-blocking into a business is to charge advertisers to un- block them. That defeats the whole purpose of ad blocking, and is basically blackmail.

<comment><USER8> I'm not familiar with it but aren't Apple doing things with built-in adblocking these days?

As an aside (but still relating to your comment) I tend to trust my adblocker based on the "many eyeballs" theory and I think the OP and ensuing discussion here is proof that the system mostly works.

<comment><USER9> I know Firefox uses Disconnect.me's filter lists, which do have a company backing them.

I trust gorhill to make the right decisions when it comes to uBlock Origin and the filter lists it uses, based on his previous track record, his stance on Adblock's "acceptable ads" and his refusal to take donations from anyone.

I don't necessarily trust the individual list maintainers[1], but I do trust that gorhill will quickly purge any filter lists that try to put in shady changes.

[1] I do trust the maintainer of the DNK list. He's a former colleague of mine, and I know how strictly principled he is in regards to ads and tracking.

<comment><USER10> How much is gorhill paid, and by whom, and for how long can he be expected to be The One?

<comment><USER9> As fair as I know, nothing and by no one.

[https://github.com/gorhill/uBlock/wiki/Why-don't-you- accept-...](https://github.com/gorhill/uBlock/wiki/Why-don't-you-accept- donations%3F)

He'll work on it for as long as he feels like it. I've made sure to thank him for his work and signal that I appreciate what he does very much indeed. All in the hope that he will continue the good work.

Will the project die at some point? Maybe. Or maybe someone will take over. Maybe another better adblocker will come along. The need is there, as long as ads/trackers exist.

</comment></comment></comment></comment></comment><comment><USER11> A volunteer abusing their position? You get that in the best of projects.

> Remove FIN-0 list due to breach of trust

Looks like u-block is handling this well.

</comment><comment><USER12> I found that for me a whitelist makes more sense then a blacklist.

I use umatrix with these two default rules:

        * * * block
        * 1st-party * allow

So by default a site can load whatever it wants from its own domain and nothing from 3rd party domains.

Then I add rules as needed. The Umatrix interface makes this super easy.

<comment><USER13> Can you teach me this skill? I usually don't mind steep learning curves and taking a while to familiarize myself with a piece of technology if I believe that I'll end up benefiting from it (I type in dvorak, use a tiling window manager, I'm a shell power user etc...) but try as I might I just can't wrap my head around umatrix.

I understand what it does, I just don't understand how to use it effectively. Like I just tried it: I enabled uMatrix and went on the website of the NY Times. I end up with a rather large matrix with a bunch of domains like "a.nytimes.com", "api.nytimes.com", "samizdat-graphql.nytimes.com", "optimizely.com", "js-sec.indexwww.com" and many others, includind a bunch of google and amazon domains.

How am I supposed to figure out what I should whitelist in there? Trial and error?

There are a few obvious candidates for blacklisting (amazon-adsystem.com for instance) but I'm sure that those would already be blocked by my uBlock filters. Actually so far uBlock with a few ad + privacy enhancing filters seem to do a decent job which makes uMatrix even more frustrating because I feel like I'm doing something by hand that uBlock does just fine automatically.

But at the same time I often see people praise uMatrix here on HN and that makes me feel inadequate and noobish so I really want to understand what I'm not understanding.

<comment><USER14> Not sure if you know, but you don't need uMatrix when using uBlock Origin - <USER2> has build in the same functionality. You just need to tell uBlock that you're advanced user by checking option in settings.

What TekMol is using sounds like Hard Mode. Personally, I chose Medium Mode (blocking only 3rd-party scripts) as there isn't much difference between them. [1]

[1]: [https://github.com/gorhill/uBlock/wiki/Blocking- mode](https://github.com/gorhill/uBlock/wiki/Blocking-mode)

<comment><USER15> Thank you for posting that, I had no idea it existed. I've been running both but this looks like something I could get used to.

</comment></comment></comment></comment><comment><USER16> It's crazy that the maintainer of that list thought this would be a good idea. This is a huge breach of trust.

<comment><USER17> Just practically, anything that's going to have a political effect seems like it would stand out and get your meddling noticed.

</comment></comment><comment><USER18> That was fast. Not only has the list been yanked from hosting, but Juvander Consulting, who was responsible for it, has deleted the Facebook page for the list, and all mention of it from their site, even scrubbing old blog entries about it.

<comment><USER19> In fairness, Ilpo Juvander's web log stopped getting AdBlock entries in 2015, the same time as xyr Twitter account stopped getting entries, and the web log ceased getting any entries at all in 2017.

<comment><USER18> True, but that makes it all the more weird that they'd delete them in the first place. It's like they wanted to remove any evidence they were involved at all.

The only remaining indication is the domain, and their iOS app that's still up on the App Store.

</comment></comment></comment><comment><USER20> I am becoming to doubt the value of adblock and the mindset of filter maintainers these days.

It cause a lot of issues on their side but the customer blame the server.

I've heard a story that web-based game not working for some people for no apparent reason.

The developer used their psychic power and change the file name of image files which was something like "foo_ads_bar.png"(the user supplied error log indicated they faild to fetch that resources which shouldn't happen) to not contains the "ads". And he got less bug report.

The image file was not AD but a essential resource for the web-based game. Blocking that, you break the game implementation.

Blanket blocking based on partial three-letter string match on client side? Fine do what you want. It's your computer after all. But don't come toward us crying for help because it's non of our problem.

<comment><USER21> Similar situation: The company I work for uses the word "ads" in their website's asset filenames, for all images. When uBo is enabled, their website is basically text-only. They were oblivious until my first day when I mentioned I reviewed their website from home.

</comment></comment><comment><USER22> Shameless plug: I'm building BlockedBy.com, a tool to monitor adblock rules that start blocking your content. Adding them is very quick but removing them isn't and you start getting a lot of complains from your users.

I've had the issue at one of my projects where an overly broad rule blocked all my images.

<comment><USER10> That's technologically cool, but isn't "switch from adblock to uMatrix" a more direct and comprehensive solution?

<comment><USER22> The target audience is website owners.

If my users are all using list based blockers (adblock, uBlock, mobiles, proxies, ...) and those lists block my content, I'd like to know quickly so I can appeal to the list maintainers.

<comment><USER6> Even in the rare instance you convince a list maintainer, forking a list is trivial. If your content is being blocked, stop tracking your users.

<comment><USER23> What if it's a false positive due to overly-broad heuristics? For example, try looking at [https://en.wiktionary.org/wiki/ads](https://en.wiktionary.org/wiki/ads) with Adblock enabled. It shows a blank page for me. (Actually I just wanted to see whether "ads" might have a different meaning in another language.)

<comment><USER24> I've been noticing this a lot more lately. Lots of websites have broken elements from my adblocker. I have to turn it off and reload the page to get those elements to load. A lot of the time they aren't even close to ads, it's like a drop down menu or button that doesn't render.

<comment><USER6> Though false positives happen, an ad can also contain the code for another part of the site. Most common is a site using some kind of Google script that could be an ad or tracking.

<comment><USER22> The goal of the service is not to be an anti adblock tool. It's futile and publishers I've discussed with start to realize this more and more.

The goal is to let you know if you're about to be impacted by a false positive. I've been there and it sucks as your users leave your site or contact your support team.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER25> This is not precisely about the filter list but the whole shenanigans that led to it. Persons from other countries might be interested in this little quirk of Finland. Especially as it relates to workers rights in general.

In Finland, unique among Nordic countries, political strikes are allowed. What does this mean? Let's say you're not happy about a decision made by Trump you can go to a strike. Sure the company doesn't have to pay you but they also must allow you to come back to work without repercussions when you decide. It's basically unlimited unpaid holiday. Or alternatively keeping the employer hostage in order to affect the behavior of an unrelated third party.

So obviously we as a country are bit torn on the issue as what can the employer do about it? Go to white house and take Trump as hostage so that he would change his decision? It is also questionable from democratic perspective. Why should a subset of population have more saying than the rest. Shouldn't everyone have a single vote and based on that decisions are made. Instead of a minority having a vote + a veto right.

Similar overreactions like this adblock may come as right now bunch of major unions are protesting against government and that has brought political strikes back into limelight.

<comment><USER26> The fact that people are abusing tools for ad-blocking to achieve political goals is a major breach of trust. This is the main issue.

For the record, political strikes happen in the other Nordic countries as well. According to a quick search on the Internet, the only Nordic citizens who are _not_ allowed to partake in a political strike are public servants in Sweden.

<comment><USER27> Correction on that: any employee in Sweden is forbidden from striking if they are currently bound by a collective bargaining agreement. This means strikes are only legally recognized as strikes in the period between the expiry of an agreement, and the signing of the next one. This is generally every three years.

In other words, political strikes are effectively banned i Sweden.

I'm not aware of any exception to this rule for public servants but I could be wrong.

<comment><USER28> You're not bound by the CBA if you're in another union that has no CBA with the company. Sadly, there are ongoing attempts to stop this.

<comment><USER26> Ah, that's it -- I remember now. Basically you're free to go on strike unless you have agreed not to. If you do, it will simply be treated as a breach of the agreement and the other party will be able to sue for damages.

So yeah, strikes are perfectly legal.

</comment></comment></comment></comment></comment><comment><USER29> I'm eagerly waiting for the Brave AI-based blocking to be rolled out. That will hopefully be a start to the end of unwieldy and hard to maintain filter lists in general. I know there are lot of good people who put time into these things, but the blacklisting techniques these extensions use seem rather outdated in 2018.

<comment><USER30> ML is not magic, it's just statistics.

<comment><USER29> Thanks for that input. Fully aware of that. Just saying that using a statistical model would be much better than huge lists of URLs.

</comment></comment></comment><comment><USER31> IMVHO this is the umpteenth sign that WE MUST GO NOW for distributed or if not actually possible for decentralized tech. NOW. Sorry for the caps.

It go nice with [https://lwn.net/Articles/768483/](https://lwn.net/Articles/768483/) in FOSS world we must understand actual IT evolution path and know how we work freely in the past.

So please reconsider Usenet, advertise it, enforce email instead of ANY actual "communication platform" from WhatsApp to Slack passing trough Reddit, StackExchange etc. We know that finding past information on usenet for newcomers it's not as easy as these modern platform, but we have wiki's, blog's for that. We need to act now us all, anybody who understand because tomorrow it will be too late.

</comment><comment><USER32> This isn't the first time bad-faith alterations have been made to filter rule lists. The maintainer of a popular porn site (can't remember off the top of my head which one) famously requested a special exemption for the ads on his site.

</comment><comment><USER33> Adblock broke websites more than once for me. `.btn.btn-primary { display: none }` and similar things. They are fixed relatively fast, but if user uses adblock, he must be aware that this addon can and will broke websites, so he must know how to disable it if something doesn't work. Not saying that politics has place in adblock, of course, but worse things happened.

</comment><comment><USER34> I run a Raspberry Pi/Pi-hole along with uBlock Origin w/ all filters enabled, Decentraleyes, Privacy Badger, Webmail Ad Block, Tracking Token Stipper, Neat URL, and No Coin. I also have about:config set to disallow referers, fingerprinting, sites reading history, no geo location, etc. Works a treat.</comment>


Ask HN: Review my bootstrapped startup, Quantonomics - <AUTHOR>

<comment><USER2> If I'm going to take a service seriously, I don't want to spot spelling errors within 20 seconds of hitting the homepage.

stradegies->strategies

That said, interesting idea using JS to create buying/selling patterns and test them against historic data. That could be handy, if not just geeky fun :)

</comment><comment><AUTHOR> Please checkout my new startup and let me know what you think. Its a marketplace to buy, sell, trade stock applications.

Homepage: <http://quantonomics.com>

Example Source: <http://quantonomics.com/community/forum/3-trading-systems>

Marketplace: <http://quantonomics.com/applications>

Documentation: <http://quantonomics.com/documentation>

</comment><comment><USER3> <http://quantonomics.com/>

Looks kind of neat, although being in the middle of 'A Random Walk Down Wall Street', and being pretty convinced of the "buy an index fund and hold it" strategy, I don't think I'm the target market.

</comment><comment><USER4> Interesting concept. Some major JS errors going on all over the site which doesn't give me much confidence on the accuracy of the experiments. Needs some major work but the concept overall is solid.

</comment><comment><USER5> Here's a small change you can make to engage users:

Tell them benefits not features. Users will like that more. Make all the bullet points speak for how awesome your product is!

<comment><USER5> PS: Also you need to choose who your target market is and appeal to them by probably writing it - For wallstreet veterans, new age tech ninjas, etc (I made these target demographics up- you could do it much better)

</comment></comment><comment><USER6> Top left: fix the typo in the most important part of the page - the title! (Should be 'Quantonomics')</comment>


Ask HN: Can you be CEO and have major role in product at a huge company? - <AUTHOR> Trying to figure out my priorities for boot-strapping vs. being a venture-backed/high growth company.
Biggest con of the latter to me is I always want to  have a firm grasp on the product direction/design wheel.
Can you do both if you become a very large company?
Did/Does say Steve Jobs/Elon Musk actually spend major time designing, thinking, innovating product or is that more of a media/storytelling facade and the truth is that they just make more decisions in these areas than the traditional CEO? <comment><USER2> As a CEO your job is to sell, sell and sell. For you to become a very large company, you need lots of customers, not a lot of VCs.

As a CEO of a company that makes products, you should know your product. So, like Jobs or Musk, be good at knowing your product. Go to Xerox Parc to spy or talk to a lot of rocket scientists to test your theories on reusable rockets.

Then use your expertise on the product to set the direction for your product team. They need to have your vision tattooed on their chests because at this stage you, the CEO, are the key customer for them. Jobs was very adamant (probably too much) when trying to convey his vision to the team. But they knew, beforehand, what Steve would think and say. That's like having a doppelganger (another you) roaming around the product team. It's very good for the company.

Do only the necessary meetings and reviews for that vision to be implemented. Maybe do more in a first design phase so that they (and you) have a clear vision of what needs to be built. No more, no less. Then work on taking that vision to potential customers and try to sell them the idea. If you get some upward graphs, some proof or validation, than VCs will give you the value you deserve. If you finally go into high-growth mode you'll have other problems to solve, but always keep that grasp on product and sales as your work will shift into making them work together smoothly.

<comment><USER3> Selling the vision is both an in-house as well as marketing aspect. When you have hundreds of people working on the product design and realisation, the CEO has to figure out how to make payroll, keep investors happy, get suppliers to extend greater levels of credit, ensure that manufacturing ramps up. Successful CEOs are not micromanagers. Steve Jobs is well known for providing scathing feedback, but not for actually sitting down and sketching out designs.

</comment></comment><comment><USER4> First build your product and find your market niche. Once you've got enough customers to pay the bills, then you can worry about your role in the organisation. Until then you're just daydreaming.

</comment><comment><USER5> I think you'll find that CEOs, like anyone, usually have strengths and interests in one particular area or another - like the examples you cited, yours might be product.

Having opinions on and being able to quickly dive deep into product is a valuable skill, but I'd recognize that it will quickly become one of a dozen major areas that are vying for your time. You'll eventually need product leaders whose thinking aligns with yours and you can trust to make decisions while you are focused on whatever the business needs at a given point in time.

From what I've seen, getting to the point as a CEO where you have a lot of optionality over where to spend your time relies on you being great at hiring people who can fulfill your vision in as many corners of the company as possible. Then you can choose who and where to spend time with and what to go deep on.

</comment><comment><USER6> As a CEO, you should know the Why and What of the product, not necessarily How. Your primary job is to run the company and you cannot get into too much low level details of the product.

Forget large companies. I run a team of 15 and I m technically the CEO (sounds silly when so small) but I already have very less time to get into detailed product reviews etc. I m too busy trying to get new clients, fighting fires with existing clients/infrastructure, working on growth startegy, doing demos and even sometimes addressing disputes and protecting my team.

</comment><comment><USER7> As a CEO (and a manager more generally), part of your role is to build an efficient TEAM to deliver the PRODUCT, not to deliver the product by yourself ! Actually, a good manager is someone that is good at recruting, motivating and good better and more competent employee than himself.

As a manager, doing the work of your employees is REALLY REALLY bad because:

1) you spend time on something that has less value for your company than your role (finding custumers, developping market and product vision)

2) your employee will know that how good they are in their job, you will shot- circuit them just for your pleasure. So the best will leave and the others will be demotived

If you want to keep working on a product, your company has to stay small (let's say: less than 50 people) or your role has to be some kind of Design Architect (and you'll have to hire a CEO for all the business administration)

</comment><comment><USER8> > _Trying to figure out my priorities for boot-strapping vs. being a venture- > backed /high growth company._

I think the priority is to validate the idea and build the product.

The rest is mostly the art of imagining wrong approaches to unlikely situations; as useful to product as Aikido is to fighting, or pornography to courtship.

</comment><comment><USER9> I bootstrapped a company and I believe the decision to remain self-financed contributed to a more tightly knit culture with more T-shaped roles than you'd typically see in venture-backed companies.

We could have raised money but the reason we didn't had something to do with both me and my team desiring a certain degree of learning and freedom to operate in fields where we have intrinsic motivation.

It might or might not have happened simultaneously, but I remember reading that one of the founders of Basecamp, a company famous for being mostly bootstrapped, created Ruby on Rails around the same time.

I believe it can be done in different ways, also in ways more sustainable ways than the examples of Jobs and Musk that you're referring to.

</comment><comment><USER10> Giving up control is hard.

The real question isn't can you have a firm grasp on the product direction/design wheel at a small company. It's can you build something anyone wants at all.

Secondly, can you make a sustainable business at all?

Just build something people want. The rest might follow.

</comment><comment><USER11> It looks like Evan Spiegel of Snapchat still spends a lot of time on product and design.

</comment><comment><USER12> Of course, if you are a product-focused CEO. Zuck still does product reviews. Bill Gates did product reviews at MSFT. This really applies more to tech, whereas in finance and other industries the CEO tends to be more of a sales job.

</comment><comment><USER13> Steve Jobs actually studied calligraphy, and had a design esthetic.

Elon Musk has a fundamental understanding of physics, and the drive to make things happen.

Those 2 founders/business leaders are legit in every way.

But when you get outside the realm of founders into professional managers/MBAs, then you're right to be suspicious.

> Trying to figure out my priorities for boot-strapping vs. being a venture- > backed/high growth company.

Most people don't get such a choice. You can find out by asking for the money, and seeing what happens.</comment>


About Removing Medium from Hackernoon.com - <AUTHOR> https://hackernoon.com/about-removing-medium-from-hackernoon-com-7c72353ba6e <comment> frosted-flakes > We were relying on a lot of free technology. We're gonna continue to have > free hosting. Google gave us $100,000 grant in credits. So, that was gonna > be our largest non people expense. So, that's definitely reducing a lot of > risk.

Interesting. Why would Google do this? Is it a bet that Hackernoon will get big enough that having them locked in to Firebase will pay off in the end?

</comment><comment><USER4> I don't like the medium paywall stuff, but I'm finding myself annoyed by Hackernoon's "Medium is bad" positioning.

I posted a few things on Medium, and got contacted by Hackernoon (and some other publications) about putting them on their "publication", which I allowed (and later removed). So presumably this happened a lot and lots of Hackernoon pieces came from Hackernoon contacting people using Medium, and those people putting things into a Medium publication called Hackernoon, via Medium.

So some business model drama happened and now neither party is happy, and Hackernoon is moving away and that seems fine.

I don't think they're wrong to move off Medium, but their positioning - <USER2> Medium is a big bad preventing publications and authors from moving - <USER3> like bullshit. There is clearly a muddled symbiotic relationship here, neither is wrong, neither is right.

Tl;dr This is giving me a very poor opinion of Hackernoon.

<comment><USER5> Similar thing just happened to freecodecamp. It's clear Medium is facing pressure from investors to aggressively monetize and it's rubbing some of their partners the wrong way.

<comment><USER6> relevant discussion: [https://news.ycombinator.com/item?id=20062690](https://news.ycombinator.com/item?id=20062690)

</comment></comment></comment><comment><USER7> what's wrong with the old school static website? maybe with some fancy backend for contributors but that's it right?</comment>


What Would It Take to Reskill Entire Industries? - <AUTHOR> https://hbr.org/2020/07/what-would-it-take-to-reskill-entire-industries <comment><USER2> Since they brought up memes, why is this not just #learntocode all over again?

[https://knowyourmeme.com/memes/learn-to- code](https://knowyourmeme.com/memes/learn-to-code)</comment>


Speed Reading is Bullshit - <AUTHOR> https://medium.com/the-mission/speed-reading-is-bullshit-f5acbee7f59e#.xj3w9ny4s <comment><USER3> I used to be a deep reader when I was younger. Then I discovered some really bad advice on how to read faster via the internet. At the end of a period of experimenting with speed reading, I started being able to read very quickly, grabbing the essence of a page without reading all the words. But I found that my retention of that material was no longer as clear or as detailed as it used to be. This continued until I eventually could no longer read slowly at all, at least not without great effort.

Tl;dr: speed reading creates terrible habits, don't do it.

</comment><comment><USER4> \- Take a pen with black finish and run it under the letters, you'll read at 1,5 speed (and it's not a trick, it's something children dp with their finger when they learn to read so it's quite natural).

\- Stop saying words aloud in your mind when you're reading.

\- Try to catch two or three words instead of one.

Now, none of this is bullshit or skimming, I'm doing it and have same retention as I'd be 'spelling' in my mind word by word, I believe human brain is smart enough to process more than one word or you think it's a crazy idea? hehehe if so then good luck ;)

It's not about skimming or reading whole page in a matter of a couple of seconds (I don't think you can have great retention with that unless you have really great/photographic memory), but about basic skill which you can improve (just like riding bicycle or doing tricks on skateboard). There are some 'bad habits' of reading and eliminating this would improve your reading speed.

btw. I also know couple of mnemonic techniques that lets me remember things permanently and very quickly - again, no bullshit, just a technique as old as ancient Greece.

<comment><USER5> That's not speed reading, that's reading.

<comment><USER6> If there are techniques available, generally not thaught in school, that speed up reading quite easily. Why not call that speed reading? Perhaps x10 is not attainable to most (if any), but +50% is a massive time saver for anyone.

Same goes for mnemonics. The easy tricks are pretty easy to learn and worked for me as well (remembering lists by visualizing a house with rooms). Might have been natural to you, but a learning moment for me.

Obviously don't tunnel your life's savings into any scheme. But in the basics learning more of the skills you use most.. is pretty efficient. (Ever seen your accountant, or doctor type for that matter? Most nurses I saw recently single finger type..)

<comment><USER4> I agree, if you speed up by 50% I guess that's an speed improvement... as for mnemonic techniques I've learned them from books, didn't cost me more than £50 and three months of 2 hours practice per week.

Roman Room (remembering lists by visualizing a house with rooms) is one of more popular ones. The other popular one is 'chain' method where you remember just one element connecting to another and this leads you to whole list.

There are mode advance ones like 'mnemonic tables', the idea is simple - <USER2> remember 100 elements perfectly with their number in the table (they're just images/slides whatever coded to numbers in your head), once you know them perfectly you add adjectives to extend the table to 1000 elements so... number one would be a pioneer, 101 would be wooden (or whatever) pioneer, number 1101 would be let's say wooden pioneer riding on a tiger (riding on a tiger is for 1k).

That's how you can use it to remember for example dates - at point of most practice I was able to remember around 40 historic within two-three minutes (permanently).

Why it works for everything else than dates? because memorizing things is a process of creating and connecting new neural paths and as we repeat this paths becomes stronger and that's one of the things that leads information from our short term to long term memory.

Mnemonic tables are great because you already got something in your brain you know perfectly on/to which you 'hang'/'connect' the new information so half of the job is done - just as Roman room, a bit more advanced, but I guess you could make a hybrid technique where house rooms have numbers ;) The key is to make these images in your head as funny, vivid or emotional (can be scary or any other strong emotion) as possible. That will make sure your brain will have better chance of making strong neural paths.

Sorry, wrote to much stuff off-top, but maybe will be useful for someone.

<comment><USER7> Do you have any book recommendations for these techniques? I tried the "memory palace" or the method of loci and had a small degree of success, but never found it practical. I'd love to give it another go though.

<comment><USER4> Check out books of Tony Buzan, use your head etc. as well look for some books on mind mapping. As for that mnemonic system I cannot find it :/ but similar thing is GMS from 'Phenomenal memory', look it up on google & you shall find it... :)

<comment><USER7> I'll check them out, thanks!

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> I quickly skimmed the blog post. Seems to be about reading.

</comment><comment><USER9> Try to read a Lee Child book skipping sentences.

You will be lost in no time.

It is amazing how much information he can put in a paragraph.

<comment><USER4> I don't think you should read any story books this way or for example poetry - that would be just a nonsense!

Personally I like to imagine what Im reading so it kind of sucks if you read too fast - skipping or 'scanning' sentences is where you need to 'weed out' stuff, not really for books that are suppose to work on your imagination... I think in here you dont want to skip nothing :D

</comment></comment><comment><USER10> Speed reading is a skimming technique.

</comment><comment><USER11> Oh and....?</comment>