Show HN: VNote, a fresh Markdown note-taking app - <AUTHOR> https://tamlok.github.io/vnote/ <comment><USER2> If I had a penny for every notetaking app, I'd invest that money in another notetaking app.

Jokes aside, this looks nice! Especially good to see that native C++ development (even if it's in Qt) isn't dead.

<comment><AUTHOR> Ha :)

I am not very satisfied about current Markdown editors or note-taking apps. Most Markdown editors use side-by-side live preview to minimize the gap between the edit and read of Markdown. People usually think of "live preview" when it comes to Markdown, which is really a MISUNDERSTANDING about Markdown.

So I want to develop a note-taking app with pleasant Markdown experience, which try to minimize the gap of Markdown by carefully-tuned __syntax highlights __and in-place image preview.

Give VNote a try and you will be surprised by the simple and pleasant experience VNote provides. :)

<comment><USER3> I also develop a note-taking app [0] and so far I've chosen the side-by-side live preview approach, but it's interesting you're trying to make it work with only the editor.

I'm wondering how would you go about keeping notes with many links readable? For example, in this note imported from Wikipedia [1] the left side is hard to read while the right side doesn't have this problem. Some users have also been importing entire web pages, which are a mess of tables and links. They render fine in HTML but are not readable in Markdown.

[0] [http://joplin.cozic.net](http://joplin.cozic.net)

[1] [https://i.imgur.com/Ah62JRI.png](https://i.imgur.com/Ah62JRI.png)

<comment><AUTHOR> I think link in edit mode is OK. I used the __conceal __feature in Vim to hide the URL part of the link when I used Vim to edit Markdown before. But I found that it distracted me when I moved the cursor above the link, the URL part showed, and when I moved the cursor away, the URL part hid. I think it is better to show all the text to the user and use syntax to highlight the outline of the content.

About side-by-side live preview, I hate the feeling of moving eyes left and right frequently and try hard to keep track of where you are.

</comment></comment></comment></comment><comment><USER4> you have no idea how happy i am its not written in electron/nwjs

<comment><USER5> what's wrong with electron?

<comment><USER6> Electron slow, bloated, uses a lot of resources for nothing. tl;dr: Electron is chromium browser with some disguise. It's not "The right thing (TM)".

<comment><USER7> How is that different to any other advancements we've made? C is slower than assembly. Python is slower than C. Programmers will continually pick higher level programming languages since it's easier.

I keep on seeing people complaining about Electron here, but it's brought about an age of hundreds of thousands of applications that have compatibility across OS' to do very specific tasks.

I just feel that the ~80MB memory usage and large file size (30-60MB) is inconsequential in modern computing.

<comment><USER6> Atom doesn't use 80MB, it uses 800MB. On the other side, my Eclipse installation uses ~1100MB and runs whole array of analyzers and background stuff that an IDE should run. Atom runs nothing at the back or provides the same functionality while using 800MB. Also, Eclipse is portable around all major operating systems.

Resource usage can be justified if the that resources is used toward something meaningful. C is "slower" than assembly, yes; however both assembly can be inlined into C, and magnitudes more can be done with C at near-assembly speeds.

I develop in C/C++/Python mainly and in some other languages for fun and curiosity. Python is easy, but it's not as performant unless the underlying library is native, hence nobody is using it if it can't obtain very high performance in my field (scientific computing, HPC, and related areas).

Actually, writing a low performance GUI is pretty hard since most of its cycles are idle. If you can write an application with a GUI which slow to respond to low-complexity, common tasks (naive text editing, input, menus, moving windows), something is very, very wrong (to be clear, GUI can trigger resource intensive background tasks, but that's not what I'm saying).

<comment><USER8> >Atom doesn't use 80MB, it uses 800MB.

This is an over exaggeration, and quite a large one. Facebook just released information on the average memory usage of "nuclide" (their Atom editor bundled with a metric ton of plugins which use quite a lot of memory) to be around 600mb. And that's not indicative of a "normal" Atom user (if there can be such a thing).

I personally have currently 5 windows open in atom, with about a combined 40 tabs, and about 30 plugins installed, and my instance is using 360mb of memory right now across all processes. And those windows have been open for about a week now.

And that Atom instance is running a lot of what your Eclipse instance is running. Linters, autocomplete, code analysis tools, CI server integration, a webserver for serving up my application in the editor, a debugger that links the live preview in the editor with the code in the editor, and a ton more.

Switching to something which uses a few hundred less MB of RAM for a fraction of the capability would be a monumentally stupid thing to do, as Atom makes me significantly more productive than any other editor I've tried has ever before.

There are a lot of problems with Electron, but memory usage isn't one of them any more. It can be, just like with any language/platform, but it's not "inherent" to the technology.

<comment><USER6> First of all, for the 800MB thing, there's the source: [https://medium.com/@caspervonb/why-i-still-use- vim-67afd76b4...](https://medium.com/@caspervonb/why-i-still-use- vim-67afd76b4db6?21) and I've also seen this behavior while editing small Python files. I also had no other plugins other than the default bundle. So my atom installation was pretty lean.

It looks like you're a web developer, I'm not. I develop at the system level, and for development scenarios Atom is nowhere capable as Eclipse, and seriously that's OK. Every IDE has its niche. I used atom as a pretty text and script editor for my needs, but its auto complete capabilities left too much to be desired for me.

Honestly, maybe atom was not optimized for better memory usage before. Maybe there were memory leaks. Maybe my build was buggy (I used an official deb package BTW), or maybe he tested a buggy version, but these problems were (or are) real for some other people, and they may have been solved or not; but I'm neither the only, nor the last people who talked about excessive memory usage of atom.

I loved atom when it first came out. I tried to migrate to it, but it has burned me with its radioactivity. So I returned to my dark corner under Eclipse to work and recover.

<comment><USER8> >and I've also seen this behavior while editing small Python files. I also had no other plugins other than the default bundle. So my atom installation was pretty lean.

Atom has made significant strides in the last year reducing that overhead, but the 800 mb from that article was a bug, and was if i recall fixed in the very next version, reducing the total memory usage from opening that large xml file to basically nothing. Even your article shows that it started with a ~250mb memory usage, but the article didn't go into detail about what happens when you open a ton of files (the memory usage only increases a small amount with each file). The overhead is large, but it's fairly static. And judging a program by it's baseline memory usage when using it for it's most trivial tasks seems silly. It's like complaining that your OS takes a minute to boot up just to edit a text file, when VIM can start up in a hundred milliseconds!

>I develop at the system level, and for development scenarios Atom is nowhere capable as Eclipse, and seriously that's OK.

I completely agree! I just hate when there are perfectly valid problems and issues with a technology, but people ignore them and jump on the bandwagon of a non-problem.

Just like how there was a time when Emacs was a laughing stock for being so resource intensive, things improve, bugs are fixed, programs are optimized, and hardware gets more capable. Judging programs by what they once were is an easy trap to fall into, but it's not helpful for anyone.

<comment><USER6> > I just hate when there are perfectly valid problems and issues with a > technology, but people ignore them and jump on the bandwagon of a non- > problem.

Same for me. I didn't intend to 'bash' atom and electron. I just wanted to point some problems with it. If my style sounded like bashing, I'm sorry, it was unintended.

> Atom has made significant strides in the last year...

Honestly, I may give it another shot, as a semi-IDE rather than a complete replacement to my Eclipse setup. I love to explore new applications and see what they do right and where they lack.

<comment><USER8> I may have jumped the gun here myself, I tend to get a little overzealous and read into comments too much when it comes to web tech (so often people just outright lie or just repeat what they read online and never actually look into it).

>I may give it another shot...

If you do, I recommend doing a complete uninstall of it, delete your `~/.atom` folder (or `%USERNAME%\\.atom` on windows), and reinstall from scratch. I'd also recommend trying out the new-ish "Atom IDE" set of plugins [0] which works fantastically for languages that have an IDE plugin (javascript/typescript, C#, Java, PHP, and some still-kinda-early-stage ones for Go, C++, and rust right now). I don't know what it is about the "IDE-*" packages, but they don't install well to "aged" setups, and they don't uninstall well either. If you don't like them, i'd recommend wiping clean again before moving on... (all the customizability in atom comes with the major downside of needing change-management in your goddamn editor...)

I'll freely admit that the amount of time I sunk into getting my atom install the way I like it probably approaches "not worth it" levels (I tend to do that with any editor!), but spending an hour or 2 looking for and playing with packages really pays off now.

Java will probably always be better off in a "made-for-java" IDE, but i've done a fair amount of C++, PHP, and Go work in Atom and it's a breeze.

<comment><USER6> > I may have jumped the gun here myself, I tend to get a little overzealous...

I sometimes make the same thing. It's perfectly OK, we are all human. We all have some technology we like to protect as our only child (my soft spot is low-level & high performance tech). The key is to be able to recognize one's reaction and tune it little by little. I had my share in both sides of a flamewar and I'm very well done in that respect. BTW, I didn't feel like you did. I just wanted to say we sometimes overreact, and even if we don't project it to otherside or just to outside, we can learn from the experience.

> If you do, I recommend doing a complete uninstall of it...

I've completely removed every atom related folder from my home folder some time ago. I'll install the latest .deb package and progressively experiement with it. I won't tie anything important to that setup, so it will be an experiment bench for me.

I'm using Eclipse for ~10 years, so I know the effort you put into setting it up. It's always worth it, don't worry. I maintain three eclipse installations (home, office, laptop) and they sync their settings over Oomph. So when I improve something in one, all three benefits :) When you use something for a very long time and set it up to your liking, it feels like home. :)

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> I used to use Ulysses. It's a great app, but shortly after I paid $40 for it, they switched to subscription. I'm now looking for a new app. I use Mac for work (with the old no longer updated Ulysses) Linux at home (using caret) And an Android phone (JotterPad). I sync between them using Dropbox. Once Ulysses stops working on a future MacOS update, I'll likely switch to caret there as well. It's relatively easy to get a really nice, supported polished Mac app. Working in a cross platform world is tough. I'd love to be able to replace Ulysses and caret with a native Markdown editor like this. I'll check it out.

<comment><USER10> I have less problems with the subscriptions, but with their proprietary file format. All I want to do is edit text files and maybe convert them to blog posts. It's impossible, since Ulysses doesn't seem to support batch exporting multiple files to Markdown.

For pure writing, I use _iA Writer_ , but its library/organizational features are lacking.

<comment><USER9> Since I have no Apple hardware except for a work provided laptop, I don't use Ulysses' proprietary format. I just have a folder (that's in Dropbox) with straight .md files in it, and have added it to ulysses. After the Evernote mess, I don't want anything in a proprietary format. Plus, since I'm cross platform, with different apps on each platform, I don't have a choice.

<comment><USER10> But they're then imported into Ulysses right? It's not that the original file is modified if you change the file within Ulysses. Am I mistaken?

<comment><USER9> You can use Ulysses in the proprietary format or open regular .md files. I have a folder open, so I have multiple layers of folders. It works pretty well. The proprietary is required for iCloud (if you want to share notes with the iOS app).

</comment></comment></comment></comment></comment><comment><USER11> The install from homebrew cask was painless.

I like the UI, and the mixed edit/syntax view.

The documentation hasn't really been written yet, which is a bit sad, as I kinda wanted to dive into themes and templates, but I don't think it'll take too long to work out how to make them.

Search is lacking, but high priority so hopefully I'll see it soon.

<comment><USER12> Mini-rant: What happened to Boolean search in note taking apps? It seems to have been lost over the years. When I search for docker and get 80 notes returned, then change search to "docker AND login" I want to narrow my search, not get 110 notes returned.

<comment><AUTHOR> So that is what "search in result" does?

</comment></comment></comment><comment><USER13> Clicking on "Screenshots" at the very top doesn't take me anywhere. (Also, a minor typo: "Documentations" should singular, "Documentation").

<comment><AUTHOR> This page was not created before. I just created it and it should now work! The typo is also corrected.

Thanks!

</comment></comment><comment><USER14> I was ready to complain about there being no vim mode, but there it is, right in the github readme, "Supports Vim mode". Me and a couple hundred users have been begging typora to support vim keybindings but we've been ignored so far. I'm definitely going to give this a try when I get some time.

<comment><AUTHOR> VNote is inspired by Vim, so there is no reason to not support Vim mode in VNote. However, the Vim mode is implemented by myself one feature by one feature and it does not support the `.` and macro yet.

</comment></comment><comment><USER15> For an app that I thought I absolutely don't need, pretty awesome. I like that you don't try to sync my notes for me and hide it in proprietary db and sell me subscription for it.

Thank you, I will use it and see if it will stick, thanks for making it.

<comment><AUTHOR> VNote uses plaintext for all data. The design is you could use any editors to edit your notes even after VNote is obsolete.

</comment></comment><comment><USER16> Minor feedback:

If you click "Screenshots" and then "Features" in the top menu, it will just add the "#feature" anchor to the page (instead of going to the home page.

<comment><AUTHOR> Thanks! Already fixed.

</comment></comment><comment><USER17> While I really like the lightweight approach and easy inserting of images, I don´t see a big difference to edit md-files with Sublime/Atom/Code and activated tree-view/markdown/vim-plugin. Maybe you should advertise more differences for a developer compared to his already running Sublime/Atom/Code/Vim-Setup with a Notes-Folder full of markdown-files.

<comment><AUTHOR> Indeed, VNote is inspired by Vim when I used Vim to edit Markdown notes for about a month. VNote utilize many code editors' features for note taking, such as Vim mode, vertical split, and shortcuts.

The obvious differences to code editors may be:

1\. In-place image preview. Preview of formulas and flowcharts will come soon. This really help user to focus on the content without a side-by-side live preview or alternating between read/edit mode frequently. 2\. Note management. VNote handle stuffs like images, attachments, and tags in the future.

</comment></comment><comment><USER18> Looks really cool! Thanks for the open source work!!

Do you have any thoughts/future plans of making these accessible from mobile platforms or web?

<comment><AUTHOR> Currently I am focusing on the edit experience of VNote. Next step, I will try to connect to third-party store services within VNote, which enables VNote to sync by itself. After that, we could think of the Web client. According to current development progress, I think it will take long time to achieve it.

Currently I use other apps to record thoughts anytime and anywhere via phone and reorganize them in VNote.

</comment></comment><comment><USER19> I'm really happy with VSCode as my "Markdown note-taking app", especially after the support for multiple projects was added in the last release. This means, I open a workspace with multiple projects (my dev notes, config files, markdown files for my static blog, etc.), and I can access any file by using the built-in file search (Ctrl + E).

</comment><comment><USER20> Good idea but in terms of performance, the markdown processing is super slow- making it very inefficient and not practical for everyday use.

[http://cl.ly/0y2e162s2Z3K](http://cl.ly/0y2e162s2Z3K)

VS comparing to a product such as Bear:

[http://cl.ly/371S1q241Q3G](http://cl.ly/371S1q241Q3G)

<comment><AUTHOR> There is a 500ms delay after the content change before parsing syntax. It could be tuned and optimized. Thanks for your feedback.

</comment></comment><comment><USER21> Testing it I see it mentions markdown type as I create a new document.

Does this mean it will support multiple formats?

(Asciidoc is my favorite and I'm currently using [https://github.com/asciidocfx/AsciidocFX](https://github.com/asciidocfx/AsciidocFX) or just edit in VSCode or directly on GitHub/GitLab.)

<comment><AUTHOR> Yes, it is desigbed to handle different formats. But for now, it only handles md files.

I plan to enable it to support managing and editing source files, with which we could use VNote to store code snippets.

I also want to support infinite list format like WorkFlowy. But it seems that cerrently I need to focus on md files first.

<comment><USER21> Nice. Workflowy has some really nice ideas!

</comment></comment></comment><comment><USER22> Sounds good and I really like the design choices regarding file management and sync, but honestly I don't see any advantage over just using plain Vim(which is already tuned to my preferences). Paired with a few plugins it offers all the same features except image preview, and I don't really need that.

<comment><AUTHOR> Yeah! I used Vim to take md notes before writing VNote. I intended to write VNote to manage and preview the images, formulas, and charts. Indeed, VNote bollows a lot from Vim, like the leader key, split, and so on. I am satisfied about VNote for now. :)

VNote is a Vim-inspired Note-taking app. That is where "VNote" from. Give it a try :)

</comment></comment><comment><USER23> 1) Would be neat if you could use this to edit Jekyll / statically generated sites, especially if it had basic git integration.

2) Would be especially useful if it had a mobile client. (Although I know there's several mobile markdown editing apps, if it had Jekyll / static site generation - that'd be really nice)

<comment><AUTHOR> Hi, for now you could use VNote as an editor to open and edit any md files. VNote treats internal notes and external files differently. Indeed I use VNote to edit the github page and it is really enjoyable.

VNote uses notebook to manage notes. A notebook could be local, or synced via Dropbox. So you could use git to manage your notebook, too. Integration with git will be considered in the future.

</comment></comment><comment><USER24> I like this, but for the windows version it would be better to default the notebook directory to either My Documents or something under %appdata%, currently the default is a new directory directly under the users/<user> folder.

<comment><AUTHOR> Sure! Thanks for your feedback!

</comment></comment><comment><USER25> I am yet to find a simple Markdown app that also supports Latex (mathjax).

<comment><USER26> If you're looking for KaTex, Markdownify got you covered.

[https://github.com/amitmerchant1990/electron- markdownify#key...](https://github.com/amitmerchant1990/electron- markdownify#key-features)

</comment></comment><comment><USER27> The screenshots link does nothing (leads to home).

<comment><USER28> You can see them on github:

[https://github.com/tamlok/vnote/tree/master/screenshots](https://github.com/tamlok/vnote/tree/master/screenshots)

</comment></comment><comment><USER29> Interesting, but why the persecution of people who use underline-style headings, e.g.,

        This is an H1
        </comment><comment></comment><comment>=

and

        This be H2
        </comment><comment>----

I find those to be more readable sometimes, but it seems Vnote doesn't recognize them as headings.

<comment><AUTHOR> Use this kind of syntax seems do not support up to 6 levels of headings? VNote use `markdown-it` to render the Markdown, so VNote will recognize them in read mode. VNote just choose one syntax to recommend for simplicity, so the outline seems do not recognize it as header. For another example, image links in reference forms will not be previewed in place.

</comment></comment><comment><USER30> You had me until Qt.

<comment><AUTHOR> Qt works fine to me. It is easy to develop cross-platform apps via Qt. Utilizing QWebEngine, I am amazed at the hybrid of C++ and Javascript.</comment></comment>


Ask HN: Mobile, social, geo all saturated – what's next? - <AUTHOR> Even American conspicuous consumerism seems to be on the wane.  So what does an investor do? <comment><USER2> energy

</comment><comment><USER3> crypto</comment>


Zoo Animals and Their Discontents (2014) - <AUTHOR> https://www.nytimes.com/2014/07/06/magazine/zoo-animals-and-their-discontents.html <comment><USER2> The older I get the more I think that zoos are not ethical. We should instead maintain and increase wilderness areas and if humans want to see animals they should be going there or maybe watch Webcams. It's just not right to keep animals that are used to roam large areas in small confined areas. It's pretty much guaranteed that they will develop psychological problems. And most people who have had extended contact with animals will agree that animals have emotions and personality. They can be happy, disappointed or depressed.

<comment><USER3> Yeah, there are those who argue that conservation programs benefit from the money generated by zoos, but I still don't feel great about them. Ideally it would be nice if we could work out better ways to distribute our resources so that conservation could be funded without them.

<comment><USER4> Just as a centre for forced-work gladiator fighting or prostitution would generate income for healthcare if that was legal.

</comment></comment></comment><comment><USER5> The concept of a Zoo should be retired. It's old fashioned, outdated and inhumane. It's not fair for animals to be thrown in to a area of space and you pay to see them look miserable. Just imagine yourself in that square of space for near 24/7, thrown a piece of meat twice a day. Its cruel and about time we should rethink of the whole process.

Zoo's need to be converted in to wildlife/nature reserves/sanctuaries with intent of looking after while involving education programs. Animal education lacks in today's society and it should be a big thing. You really want to see animals? Then buy a course package where you get exclusive view and proper education as well.

While you could argue that zoo's do go and put in high level standards; there are still zoo's out there which are cruel. and in replacement the animals get abused. Some zoo's don't have the space and that goes for countries too, like here in the United Kingdom.

That's just my 2cents on the matter. They should be converted.</comment>


Industry Javascript Standards Test Available - <AUTHOR> http://blogs.msdn.com/b/ie/archive/2011/06/30/test262-industry-javascript-standards-test-available.aspx

<comment><USER2> I really like the approach to standards of different vendors contributing tests to a constantly-growing test suite. It seems much more robust and less game-able than the existing standards & performance tests, like Acid and Sunspider. It's a shame that both this, and the WC3 HTML5 tests, seem to be dominated by Microsoft, but I think Microsoft is making the right decision by contributing a ton of tests and I can't fault them for other vendors not doing the same.

The reason I like this competitive, evolving style of tests is simple: it's much harder to design a browser to the test, rather than the standard. With, say, the Acid test, browsers build in the specific functionality that it tests, which results is very un-even standards compliance and altogether mis- representative test results. If it's not on the test, vendors drag their feet on implementing. With this new style, if there's any part of the standard that browsers haven't implemented, one vendor can implement it, and contribute tests around it. Now they can show how they're more standards-compliant, and everyone else will catch up because they're being tested on it. This competition encourages all the vendors to a) implement the full breadth of the standard b) contribute tests cover the full breadth of the standard. Win-win for users.

</comment><comment><USER3> Its Microsoft, but I'm still happy about it. Always a good thing to have a test like this. Hopefully very soon the numbers will be 100% across the board.

<comment><USER4> > Its Microsoft

The test262 suite was actually published by the ECMA international standards body, although Microsoft did contribute their tests.

The direct link to the suite is <http://test262.ecmascript.org/>

And the announcement from ECMA international is at [http://www.ecma- international.org/news/PressReleases/PR_ISOI...](http://www.ecma- international.org/news/PressReleases/PR_ISOIEC_and_Ecma_International_ratify_ES5.1.htm)</comment></comment>


4chan is running out of money–and Martin Shkreli wants to help out - <AUTHOR> http://arstechnica.com/business/2016/10/4chan-cashflow-problem-martin-shkreli-wants-to-join-board/ <comment><USER2> I love 4chan. It's a bastion of raw unmitigated free speech and anonymity. Because of this, people naturally use it to say things they can't normally in public or with a account that might be linked back to their real name.

There are no points, only replies. Unpopular opinions aren't hidden. Popular opinions are boring and those threads disappear from a lack of replies. The most provocative threads are the ones which thrive. This is the exact opposite of voting sites like hacker news and Reddit.

We need a place like this to exist where people aren't saddled with long term consequences for making their real opinions known. Users on 4chan are rewarded with replies for thinking outside of the box and breaking rank.

Losing it would be a terrible loss for discourse. Sure there are lots of trolls there. Yes there is lots of racism and offensive content and gore. If you dont like that sort of thing you are free to not go there. But there must be a place for people to hash these ideas out and get unpopular opinions off their chest.

Convenient anonymity on the Internet is dying, and if it does ultimately go so will freedom of speech. Because nobody will be free to speak their mind when a deviant or unpopular opinion may incur the wrath of a targeted campaign against them to destroy their professional and private life at any point in the future. Especially when those opinions which were once common are now out of style. (See Brandon Eich or Palmer Luckey)

The lack of rules and consequences is precisely the reason 4chan has always been a creative powerhouse where trends and content are born at a rate that is unmatched elsewhere. Some of the funniest things I've read have come from the unrestrained banter between people from different countries on the /int/ (international) board.

Despite all this, it's always been difficult to keep that place above water. They need a sort of Reddit gold type epiphany.

<comment><USER3> > They need a sort of Reddit gold type epiphany.

Can't you already pay for a 4chan premium account that allows you to... I can't remember, post more, ignore the captcha, etc?

<comment><USER2> You can't buy it for someone else though. That was the key to the Reddit gold success.

</comment></comment></comment><comment><USER4> I recall several netizens posting concern about the buyer of 4chan, how he ran some other Japanese sites into the ground. Now on /. there is someone claiming the new owner turned ads down and tried to promote 4chan passes, which now don't work.

Another person points out that even if you hate 4chan (or especially if you do), it'd be better left intact to contain the culture that foments there. Otherwise we might see /r/The_Donald style posts all over the internet.

In any case, when you avoid the dregs of the site, the other boards can have unique and even informative discussion.

<comment><USER5> I think it's more likely that without 4chan, the general trolling and immaturity may leak onto the rest of the internet, and the really intense racism/misogyny/conspiratorial weirdness will go further underground and anonymous. Whether this would be a good thing is debatable; I liked that 4chan was open enough anyone could check on it and see which way the undercurrents of the internet were heading, but it probably was a bad thing that lots of generally bored slightly strange teens got linked to that level of racism.

<comment><USER6> 4Chan isn't a prison, it's an incubator. See: Pepe.

<comment><USER7> Pepe is used for everything. You can take any symbol and make it horrible if you start adding nazi paraphernalia to it. 4Chan happens to add that sort of stuff to everything

<comment><USER8> It even it has its own bronze age style end of days cult which promotes Trump for a more through destruction of the world. Got to admire how they managed to sell their stuff to early Trump shills and play internet frog illuminati.

</comment></comment></comment></comment></comment><comment><USER9> 4chan is viable as an anonymous and ephemeral p2p implementation, 4chan has always suffered from the cost of running the service, which is kept to a minimum (relative to say, reddit) due to the lack of persistence. It can thrive with a peer-to-peer infrastructure since the need for advertising to sustain running costs would disappear, add encryption, restrict content to images and text to avoid the RIAA or MPAA getting close and it could be a veritable outlet for unabridged and uncensored views.

<comment><USER10> Hasn't this been tried before? If I'm not mistaken Aether is a similar concept but I'm not sure how much traction it's gotten. [http://getaether.net/](http://getaether.net/)

</comment></comment><comment><USER11> I guess they deserve each other?

<comment><USER12> Maybe /pol deserves him but quite a few boards on 4chan where actually pretty accepting and friendly, particularly /I.

<comment><USER13> /tg/ has its moments as well.

<comment><USER2> I like /k/ and /int/

/Pol/ used to be more ideologically diverse where you would always see communists libertarians and national socialists duking it out in hilarious exchanges (both sincerely and ironically). But a massive banwave in November 2014 drove a ton of users to 8chan where anyone can create their own board. So now /pol/ is the alt right equivalent of the monoculture seen at Reddit.com/r/politics and 8chan has 10 echo chambers for each political ideology. Echo chambers cement and worsen extremism and the biggest casualty has been the exchange of banter across ideological boundaries.

<comment><USER14> I've always wondered how to fix this when/if 8Chan's users move towards a peer-to-peer system.

Maybe some kind of "I use this board so I agree to share the content" style feature?

<comment><USER2> I think it would work like a tagging feature. So if you make a post, you can put a tags on it like #weapons and #politics anyone subscribed to those tags could see your post and reply to it.

Not sure how to prevent balkanization though, undoubtedly people will post to #politics-antidisestablishmentarianism and whatnot.</comment></comment></comment></comment></comment></comment>


Introducing Startup FDA: Demistifying FDA submissions through Open Source - <AUTHOR> http://themacro.com/articles/2016/05/fda-advice-for-startups/ <comment><USER2> I've spent the last 6 months in FDA 510k world and as time goes on, I'm more and more convinced of the need for something like this.

The hardest part has been to clearly define what experiments we need to run on our product for the FDA to accept it. There is nothing inherently difficult about this, but the problem is the lack of available information and feedback cycles to get the information.

For example, the FDA has a feedback process called 'pre-submissions'. This is good, but the problem is the cycle to ask a question and get an answer is 3 months.

I'm happy that there is a growing group of entrepreneurs working within the regulatory system. Hoping to see more tools soon.

<comment><USER3> Have you used a consultancy based group to help with the documentation/app.?

Doing a 510k w.o that experience/perspective seems insane (especially for a startup(?)).

Also, I'm not sure which field you are in, but I've generally been able to access the applications from previous submissions in my field (Personal exoskeletons).

<comment><USER2> Yeah we've hired a consultant. The stuff that has been most frustrating is very domain specific.

For our product category (sleep apnea diagnosis) the FDA has an unwritten rule that all devices must run a clinical study compared to existing tools.

The hard part has been extracting the exact details that would make an acceptable study in their eyes (testing environments, statistical methods...)

Also it seems like the testing standards have evolved over time and this isn't documented either. Only way we've been able to learn the standards is by giving the FDA a proposal and getting feedback on it.

We've gotten a few FOIA'ed 510ks of similar devices. Unfortunately they are 90% redacted and not very helpful.

Looking back on it, it may have been worth it to seek out a person who had gone through this exact experience before. That could have saved some time/effort.

</comment></comment></comment><comment><USER4> Hello! I'm CTO of Shift Labs. Happy to answer anyone's questions about making the FDA process more accessible to startups.

<comment><USER5> This is super cool.

Someone I know is working on a platform to help startups with FDA compliance (specifically the quality systems requirements), who I think would be complementary to this effort. Mind emailing me at email@example.com if you'd like to be put in touch?

<comment><USER6> This would be me. @koji, I think this is fantastic, as my startup's mission is precisely to demystify the process of getting (and maintaining) regulatory clearance/approval. Would love to connect. Just reached out over email.

</comment></comment></comment><comment><USER7> First of all, thank you Shift Labs for putting up their information and helping make confusing regulatory processes clearer.

Secondly, I want to let people know my company[1] works with many start-ups in the medical device space that are developing regulated products, both 510(k) and CE mark. We are engineers that understand the regulatory process not just regulatory consultants.

If anyone is interested feel free to contact me email@example.com.

[1] [http://www.in2being.com/](http://www.in2being.com/)

</comment><comment><USER8> My name is Ram and I'm interested in how to submit a beverage product to the FDA, particularly when the beverage contains a dietary supplement. According to the FDA guidelines from 2015, dietary supplements should not be presented as food. But of course, many are, eg DrinkNeuro.com. Any assistance on how to effectively work with the FDA on this would be very helpful. Please email email@example.com

<comment><USER4> We don't have any experience with food and supplements with the FDA, so don't have a lot to offer. The hope is that based on your experiences, you could contribute to github.com/Shift-Labs/StartupFDA as you learn the process.

</comment></comment><comment><USER9> This is beth, also of Shift Labs. I've been offline in Haiti for the past several days, but am happy to answer questions as well. Thanks to all for the support for the repo -- we're excited to expand the content.

</comment><comment><USER10> Hi. Im interesting to help for my [http://heartin.net](http://heartin.net) I done 501k and general documents but still need help - email me email@example.com

<comment><USER4> Alex, happy to help. First thing would be to review our 510k documents we made available on the github repo, and see if there are any specific gaps. Start a conversation and submit an error request so we can start expanding on what's there!</comment></comment>


OpenBSD 6.0 released - <AUTHOR> http://undeadly.org/cgi?action=article&sid=20160901090415 <comment><USER2> _" To deter code reuse exploits, rc(8) re-links libc.so on startup, placing the objects in a random order."_

I love this defense in depth, buried in the release notes... [https://www.openbsd.org/60.html](https://www.openbsd.org/60.html)

<comment><USER3> This is pretty much useless. Attackers have moved on to using information leaks in order to determine memory layout and placement of objects.

So in practice, this doesn't really deter anything. Information leaks are everywhere.

<comment><USER4> I don't know why you're being down voted. We've had ASLR in Linux for years and various attacks have been successful.

The string format attack is the one I remember most clearly which basically renders ASLR useless.

<comment><USER5> Attacker-controlled format strings are very convenient bugs, but they can't do everything. Consider the program:

        int main() {
            char buf[20];
            fgets(buf, sizeof buf, stdin);
            printf(buf);
            return 0;
        }

An attacker writing to the program's stdin can read at offsets to the stack (e.g. "%42$x"), read the contents of arbitrary non-null memory (e.g. "ABCD%5$s", where ABCD is a 32-bit memory address, and 5 is the positional parameter corresponding to the start of buf), and write an arbitrary value to an arbitrary address (e.g. "ABCD%38x%5$n", to write the value 42 to address 0x44434241).

A significant limitation of the vulnerability in the above program is the attacker can't, in a single execution of the program, read a value, _then_ do computations on it locally, _then_ write a value based on those computations. This flexibility is needed in order to bypass ASLR.

<comment><USER4> Kudos for the worked example!

</comment></comment></comment></comment></comment><comment><USER6> This seems like a big deal:

 _One thing to note: this will be the last version of OpenBSD to be pressed on CD. The project will now focus on internet-only distribution, giving much more flexibility in the release schedule._

<comment><USER7> It does? I was under the impression the only reason anyone still did that was to give something physical to donators.

<comment><USER8> Perhaps I'm the only person using computers in 2016 who only installs OpenBSD via CD :-)

<comment><USER9> I only do to enjoy the pleasure of old ways. Interacting with CDs and CD drives reminds me of when it was cutting edge. Tray mechanics, the speed intake of spinning motors. Even the latency and seek sounds. And somehow, the (almost since it's on DVD RW) immutability. In some ways, the sheer speed of SSD is ... boring when you're not in a hurry.

ps: a bit like vynil lovers who take their player out for similar reasons.

<comment><USER7> I do that too. I also like to imagine a post-apocalyptic, no-internet time where I have a generator, PC, BSD disk and the knowledge to use them to rule the new world while everyone else is stuck on the "Activation Required" screen.

<comment><USER10> Fortunately OS X isn't as bad as Windows. I haven't tried the most recent version, but for previous versions I have successfully installed OS X from a USB stick, without needing any internet access at all.

However, the OS X binaries are signed. So, when the key expires, people are SOL. I had this problem, and easily re-downloaded my various older OS X versions. But in the general case it's quite disturbing: [http://www.macrumors.com/2016/03/03/older-os-x-installers- br...](http://www.macrumors.com/2016/03/03/older-os-x-installers-broken-by- certificate/)

</comment></comment></comment></comment></comment></comment><comment><USER11> This is a good opportunity to ask: Can anyone recommend a laptop I could put OpenBSD on and be fully functional for busy workdays (i.e., when I need to spend 100% of the day being a knowledge worker with a reliable tool I don't have to think about, and 0% being a sysadmin trying to get their tool to work)?

On one hand I've seen threads on HN and Reddit saying how OpenBSD works flawlessly, esp. on various Thinkpads. OTOH I read in-depth reports like these, by OpenBSD insiders who know far more than I ever will, and even their results seem insufficient:

* [https://gist.github.com/reyk/80dca43c8bcfa76d2a7ff147ea64d44...](https://gist.github.com/reyk/80dca43c8bcfa76d2a7ff147ea64d442)

e.g., "The [wlan] connection is sometimes not stable or the firmware shows errors when switching the AP configuration. But stsp@ is actively working on improving it!"

* [http://www.tedunangst.com/flak/post/Thinkpad-Carbon-X1-2015](http://www.tedunangst.com/flak/post/Thinkpad-Carbon-X1-2015)

* [https://marc.info/?l=openbsd-misc&m=145275871714024&w=2](https://marc.info/?l=openbsd-misc&m=145275871714024&w=2)

EDIT: For those interested in this topic, I would start with tedunangst's excellent summary from earlier this year. Thank you Ted!:

[http://www.tedunangst.com/flak/post/openbsd- laptops](http://www.tedunangst.com/flak/post/openbsd-laptops)

<comment><USER12> I used OpenBSD CURRENT on the Thinkpad Carbon X1 for 3 months earlier this year, and my experience has been that hardware support is not a problem for a "knowledge worker" (I am assuming you don't need things like HDMI audio for that).

The main problem is software that is outdated, unavailable, or buggy on non- Linux platforms.

I came crawling back to Linux in the end.

<comment><USER11> Thanks. Though a knowledge worker sometimes does need to connect their laptop to a TV for collaboration and presentations.

> The main problem is software that is outdated, unavailable, or buggy on non- > Linux platforms

What kinds of applications could you not find a good solution for?

<comment><USER12> > What kinds of applications could you not find a good solution for?

* LibreOffice Writer (lowriter) had an annoying bug where it would sometimes take over a second to redraw the toolbar buttons, and the editor was unavailable during that time. This happened on save, resize, or unhiding the window.

* Konsole's logic to identify the name of the foreground process would occasionally go into an infinite loop and all the konsole windows would lockup and need to be kill -9'd. It can be avoided by using tmux but that's inconvenient. This is sad because it's the most featureful and user-friendly terminal emulator I know of.

* No good C++ IDEs.

* No support for cargo in the rust packages.

* No workable virtualization.

Also, if you use OpenBSD on a laptop, you'd be crazy not to use GNOME 3 in my opinion. Support for the other DEs are not on par.

<comment><USER11> Thanks for the tips; that's very helpful

> * No workable virtualization.

For those interested, they are working on it AFAIK. Look up vmm/vmd.

</comment></comment></comment></comment></comment><comment><USER13> I am not an OpenBSD user, but as in every release I am happy to check the lyrics for the release song, this time we got 6 so it's awesome :)

[http://www.openbsd.org/lyrics.html#60a](http://www.openbsd.org/lyrics.html#60a)

<comment><USER14> That song[0] brings a smile to my face. Keep up the great work OpenBSD!

[0]: [http://ftp.openbsd.org/pub/OpenBSD/songs/song60a.mp3](http://ftp.openbsd.org/pub/OpenBSD/songs/song60a.mp3)

</comment></comment><comment><USER15> One big step in this release is the mandating of W^X by default.

> "Unfortunately there is important third-party code, such as just-in-time > compilers, that still uses mmap(2) to make memory both writable and > executable, so for the time being, we have to arrange ourselves with it."

If a program wants to JIT on OpenBSD, how should it do it in a secure, OpenBSD-approved way?

<comment><USER16> Use mprotect(2) on the region of memory that the program wants to make executable. [http://man.openbsd.org/OpenBSD- current/man2/mprotect.2](http://man.openbsd.org/OpenBSD- current/man2/mprotect.2)

This is good portable programming practise anyway...

<comment><USER15> So they should create a writeable mmapping, write the code into it, then change it to W^X using mprotect?

How does this stop an attacker doing the same via ROP?

ADDED: The approach that comes to my mind is that they could have two processes. One process has the sourcecode, and pages where it can write code. The other process can execute the code. The code updates performance counters which the JITing process can read, so the JITter has feedback to know what to optimise.

However, this sounds a large architectural change, prevents programs JITting programs they generate on the fly, and causes the JIT to lack behind somewhat.

On the Mill CPU (disclaimer: I'm on the Mill team) the CPU can change processes ("turfs" in Mill terms) using a "portal" function call. This alleviates somewhat the performance concerns, as the JITted program can call into the JITer process synchronously and cheaply.

<comment><USER17> > How does this stop an attacker doing the same via ROP?

Wait, isn't that backwards? Doesn't the use of W^X necessitate the use of ROP? Right now a JIT has lots of memory that is W&X so you just need a memory exploit to inject some code and then find a way to jump to it, no need for ROP.

But if you implement W^X this won't work because now you can't inject code with just a memory exploit, you also have to set it to executable with mprotect(2). So instead you use ROP, and inject only data which includes jumps to carefully selected sections of code in libc, etc, that implements an exploit. I mean you could probably use ROP to run mprotect, but by that point it's pointless because you're already running code on the system right?

<comment><USER15> Forgive me for dreaming of a world where CPI or other approaches close the ROP vector too :)

</comment></comment></comment></comment></comment><comment><USER18> Now, that OpenBSD runs on Xen (and, by extension, on Amazon EC2), is there an official AMI?

<comment><USER19> If I understand correctly, this also means that the main excuse for it not being supported on DigitalOcean is now alleviated. :- )

<comment><USER20> Doesn't DigitalOcean use KVM?

<comment><USER19> I stand corrected, seems it's KVM.

Seems some other people were confused. I've been told in other places that it's Xen. OpenBSD has had working virtio-blk and virtio-net drivers since about 5.3/5.4/5.5 IIRC. hmm...

</comment></comment></comment></comment><comment><USER21> Talking about security, I'm hoping for a bound-checking memory-safe C compiler to eventually made it into something like OpenBSD or FreeBSD and be used by default for all ports and packages. Almost no software there would suffer from the overhead, and OpenBSD doesn't even promise or try to be very fast, it's a perfect place for it.

<comment><USER22> Is a "bound-checking memory-safe C compiler" even possible in the general case without implementing a new Rust-like language?

<comment><USER23> Yes. But, you typically have to use a theorem prover to build up static checking for functions, and then enforce proof obligations on callers to said functions. If done in a system like Coq or Isabelle, the proof obligations become a parallel markup to C that is used in conjunction with the source code to enforce policies. Bounds checking is one policy -- and a relatively easy one to implement at that -- and other policies can be stacked.

Take a look at VST for an example already in the wild. I'm currently working on a somewhat different approach that does not have the severe license restrictions that CompCert has.

[http://vst.cs.princeton.edu/download/](http://vst.cs.princeton.edu/download/)

<comment><USER24> That's not true. You just use a compiler transformation. See this:

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

Difference between memory safety and full, formal verification of correctness. You're describing the latter. Definitely check out Myreen et al's CakeML work, COGENT at NICTA, and AutoCorres/Simpl used in seL4. They might have stuff to speed up your own tool development. I wish you great luck on your project. :)

<comment><USER23> Compiler transformation can solve most of these concerns, but it is not perfect due to undecidability. Compiler transformations will always be conservative, falling back on runtime enforcement.

The main edge cases I've run into -- hence my need for building a tool like this -- is dealing with tight performance concerns found in realtime and embedded applications. Falling back to runtime enforcement is not an option, and neither is trusting developers to be able to fully analyze complex control-flow and data-flow paths without solid tooling.

For general-purpose applications, of course, compiler transformation with runtime fallbacks is perfectly acceptable.

<comment><USER24> "is dealing with tight performance concerns found in realtime and embedded applications"

I thought tools like Astree and SPARK have knocked this out the park. Copilot was also pretty good on runtime side given it works in embedded. Just gotta structure your program to use the tools. I think they should cover plenty of use-cases given stuff like IRONSIDES DNS runs in SPARK.

"For general-purpose applications, of course, compiler transformation with runtime fallbacks is perfectly acceptable."

Also true for many embedded apps given the remaining runtime hit can range from single-digits to 40% depending on scheme used. Even more combined with something like SPARK or Astree for stronger, static analysis than the minimal stuff academics usually use. Certainly a subset will benefit from or even need methods you prefer but many won't. It's just management or a consumer's preference to save a few bucks shooting them in the foot. ;)

Do shoot me an email, though, in case I get some free time to run some ideas by you. I don't know enough formal methodists these days. My mile-high perspective can only let me do so much as a generalist. Gotta have specialists to help me filter the chaff from the wheat. Then pass such recommendations onto more specialists as always. :)

<comment><USER23> "Also true for many embedded apps given the remaining runtime hit can range from single-digits to 40% depending on scheme used."

I think that depends on the definition of embedded. When one is lucky enough to work with a chipset in which a 40% performance hit still results in acceptable performance, such a tool is reasonable. I can tell you from my experience in the consumer electronics field that BOM costs often rule over software performance, and as such, firmware engineers are often stuck with finding creative ways to solve problems on nerfed hardware. Wrestling with a tool that can occasionally inject unwanted runtime overhead in unpredictable locations can compound razor-thin time-to-market timelines for last minute BOM changes.

The focus for my tool is to provide people with the ability to build additional propositions that go beyond basic correctness or memory bounding found in tools like Astree. Astree, for instance, may be able to automatically discover whether a subset of C is correct -- because it has a very reasonable policy of assuming incorrect behavior unless otherwise proven -- but it can't solve for custom policies such as, "does this seemingly correct code actually follow my architecture and specification?"

Also, Astree isn't free software. It's an AbsInt product, which means most likely that it comes with a hefty price tag. To give you an idea, their CompCert compiler is licensed in the five to six figure Euro range per seat. Of course, for the sort of customers AbsInt is interested in -- companies like Airbus or Boeing -- this isn't necessarily a deal breaker. They are willing to pay for such a tool because of the mission critical aspect of their work.

But, I'm of the opinion that the industry as a whole needs access to tools like these. The tool I'm building will be released under the LGPL. The security problem is one with which the entire industry needs to engage. My tool may not necessarily be the best one out there -- nor am I trying to build the best tool -- but I am trying to build one that is "good enough" and reasonably sound. I think I have struck the right balance, but time will tell.

I wouldn't say that I'm a formal methodist as much as a software engineer looking to be able to make strong guarantees about critical components. I have a problem to solve, and I've spent a few years studying this problem off and on. Somewhere along the way, I acquired enough hubris, if not enough knowledge, to think that I could build such a tool. So far, things have worked out better than I've thought. But, I still have a few big hurdles to overcome before I can confidently say that this tool will be useful to others. INRIA and other researchers have blazed the trail, and they have rightfully charged a small fortune for what they have discovered. I'm much more interested in ensuring that the average developer has access to such technology. My tool won't have the bells and whistles of commercial offerings, but it's hard to beat the price.

<comment><USER24> Alright, this sub-thread started with a person wondering if one could make C programs memory-safe against common errors. You replied with formal verification while I replied with automated tools that make C memory safe. One or two use formally-verified models. :) You countered with the needs of embedded making such tools impractical. There's many in that industry that can use tooling like I recommended, esp if not BOM-sensitive or hard real-time. You brought up the needs of ultra-constrained market in terms of cost or hard real-time. The increasing market-share of expensive ARM's vs 8-16-bitters and embedded JVM's makes me wonder if that's oversimplified, too. Makes me think similar companies might consider tooling like I described if it likewise adds benefit with tiny costs. The majority will do as you say and avoid these tools since they don't fit their use case. So will some non-embedded sectors focused only on performance or lowest cost.

Let's cut to some important stuff, though, as I think the argument got over semantics or at least less interesting stuff. My background is high-assurance security with generalist experience but none with formal methods or building static analyzers. You seem to have experience in those I don't. Appel, who makes the tool you linked, is a formal methodist (among other things) building stuff that's useful, achieves high-end stuff, and sometimes enabling less- skilled people. Rare type of researcher and deliverables I love seeing. You say you want to do something similar. So, let's have a more interesting conversation.

"Also, Astree isn't free software. It's an AbsInt product" (and CompCert)

I saw writing on wall with CompCert when they hesitated to FOSS it or answer questions. So sad such a wonderful tool got locked up. Thanks for confirming with a dollar range what I suspected. Same with Astree. We need replacements for both like you said about CompCert. My first idea was for a team to clone CompCert based on high-level description of what it does with dependent types a la Chlipala or just FLINT ML-style compiler. Add Design-by-Contract, QuickCheck, and a few other things with take little time but collectively knock out tons of errors. Compile it with MLton for development speed and CakeML for release version with equivalence checks. Be 90+% to quality of formal verification without CompCert and have a nice foundation for whoever wants to go fully formal.

Far as what formal people were doing, first I saw were trying to use a micropass approach to piecemeal build one for a MIPS machine where they spent tiny fraction of time of CompCert. Don't have link handy or know their status. Fortunately, Myreen et al's method already got used in seL4. A lot more than that actually haha. Perhaps a short-cut to CompCert replacement is to automate the process of running a C subset through such tooling with possibly guidelines for programmers a la MISRA to keep automated part feasible? Existing tools, esp AutoCorres/Simpl, _should_ have solved hardest problems in that.

"But, I'm of the opinion that the industry as a whole needs access to tools like these." "The security problem is one with which the entire industry needs to engage"

You preaching to the choir. I was designing and preaching high-assurance security, at least for critical stuff (eg kernels, compilers), way before the Snowden leaks. The stuff mainstream, "INFOSEC professionals" said was hypothetical in risk or overkill in solution was often validated by specific attacks in leaks. ;) Odd thing is they still argue with us and dismiss high- assurance as red tape or 100% impractical. Same with things like SPARK. (rolls eyes) Anyway, I published for free a summary of high-security INFOSEC on Schneier's blog in 2013 in an argument about secure code != secure systems:

[http://pastebin.com/y3PufJ0V](http://pastebin.com/y3PufJ0V)

"but I am trying to build one that is "good enough" and reasonably sound. I think I have struck the right balance, but time will tell."

I encourage people to do exactly what you're doing. There will be no one-size- fits-all. Tools that approach these analyses balancing ease-of-use with properties proven or bugs found are best bet because it's all time-constrained developers will likely use. I'm also glad you're FOSSing it. I don't expect a community to show up as FOSS types ignore most high-security stuff. The model I'm pushing for is businesses licensing software or selling hardware leveraging high-assurance components with a percentage of revenue put into improving or maintaining them. On top of what practical, grant-funded academics contribute. FOSS is still a pre-requisite to this model working as likes of AbsInt or Alt Software keep barrier-to-entry too high with licensing costs. Medium-to-high assurance might cost money and time to develop but access to it has to be cheap and easy for uptake. Ironies of life.

"I wouldn't say that I'm a formal methodist." " Somewhere along the way, I acquired enough hubris, if not enough knowledge, to think that I could build such a tool."

Lol. That's how it starts. You'll be asking me to trust 100 pages of proof because the checker said so within 3-5 years. :P

Seriously, though, I'm glad you're not cocky as being careful & using many methods for correctness is best route. At least one always misses something. Even happened to CompCert where the spec was wrong 2-3 times but at least the code faithfully implemented the bad spec. You might dodge that if more careful & testing every part of lifecycle.

" My tool won't have the bells and whistles of commercial offerings, but it's hard to beat the price."

Good luck to you on that. While we're at it, the last time I heard something like this was someone telling me about Liquid Types analyzer for C programs (below). What do you think of it for this problem area or versus your own approach? Or if someone like me with no specialist skill should attempt to mess with it? Very hard for me to evaluate that aspect. I fear I will waste dozens to hundreds of hours on the wrong approach haha.

[http://goto.ucsd.edu/csolve/](http://goto.ucsd.edu/csolve/)

<comment><USER23> I agree with your synopsis on Pastebin. It's pretty close to what I have been trying to practice. As an interesting aside, I worked with a few researchers about a decade ago on tracking SMM vulnerabilities in various Intel chipsets. They were the experts though. I was just a hired hand. Still, I learned a lot about the very real threat of hardware vulnerabilities.

The Liquid Types approach used in CSolve -- if memory serves correctly -- makes use of an SMT solver to attempt to find counter-examples given a particular set of constraints. This is similar to the approach that Frama-C uses. SMT solvers are interesting and can do quite a bit, but they are still incomplete. Many linters have started incorporating SMT solvers. It's better than much of what is out there, but there are still significant limitations. Furthermore, the markup languages provided are often limited in the amount of customization that can be performed.

My tool is designed as a framework that can be used to build much more comprehensive proofs. Similar to what you posted in Pastebin, the security of a system is intimately tied to the architecture of a system as a whole. I want to formally verify the architecture, then demonstrate that the implementation is operating under the constraints of the architecture using a combination of equivalency and bounding proofs. This, in conjunction with a strong understanding and integration with the sorts of runtime features available in a system (i.e. MMU protections) can be used to build a compelling verified proof of security similar to what was done with seL4.

But, ultimately, even this is not enough. Few systems today are contained within a single machine. IoT has demonstrated just how complex the current software ecosystem is becoming. Security proofs must extend beyond individual applications and systems and cover heterogenous and widely distributed systems with many different potential attack vectors. This can be formally verified, but as far as I'm concerned, such a verification is an architecture-first approach. I don't think that in this sort of environment, a correctness tool is enough. It's a great addition to the toolbox, and it is a damned useful tool at that, but correct software can still violate policy unless this policy is part of the constraint of "correct".

<comment><USER24> I'm mixed about the post, esp the science part. The science of developing robust software is great and pretty consistent going back decades varying mostly in specific tools and tactics. Mainstream programming just doesn't apply it although more adoption in past decade of key techniques. Here's some computer science from the 1960's-1980's used in robust and secure system development (esp Orange Book B3 or CC EAL6) people might want to copy. I'm taking an empirical route where I reference techniques that were applied to many real-world projects with lessons learned in papers or studies that were consistent. All one can do with limited data & these aren't in order of importance.

1\. Formal, non-English (eg math/logical) specifications of requirements or abstract design. English is ambiguous and misreadings of it caused countless errors, even back then. CompSci researchers tried formal specs with both English as a start and precise notations (eg Z, VDM, ASM's, statecharts) for clarity in specifics. Result was many inconsistencies caught in highly assured systems and protocol specs before coding even began.

2\. High assurance stuff often used mathematical (formal) verification. Whether that worked or made sense was hit and miss. More on it later. Yet, virtually all of them said there was benefit in restrictions on the specs, design, and coding style to fit the provers' limitations. Essentially, they used boring constructs that were easy to analyse and this prevented/caught problems. Don't be too clever with design or code. Wirth and Hansen applied this to language design to bake safety & comprehension in with minimal to low loss in performance.

Note: Led to Nick P's Law of Trustworthy Systems: "Tried and true beats novel or new." Always the default.

3\. Dijkstra's THE project showed that modular, layered design with careful attention to interfaces (and interface checks) makes for most robust and maintainable software. Later results confirmed this where each module must fit in your head and control graph that's pretty predictable with minimal cycles prevented all kinds of local-becomes-global issues. Many systems flawless (or nearly so) in production were built this way. Dijkstra correctly noted that it was very hard to do this even for smart people and average developer might screw structuring up a lot. Solid prediction... but still worth striving for improvement here.

4\. Fagan ran empirical studies at IBM that showed a regular, systematic, code review process caught many problems, even what tests missed. Turned that into formal inspections with the periodicity and prioritizing tuned per organization for right cost-benefit. Was generalized to whole SDLC by others in high robustness areas. Improved every project that used it from then on. Exactly what parameters to use is still open-ended but periodically looking for well-known flaws with reference sheet always works.

5\. Testing for every feature, code-path, prior issues outside of code base, and common use-case. All of these have shown repeated benefits. There's a cut- off point for each that's still an open, research problem. However, at a minimum, usage-based testing and regression testing helped many projects achieve either zero or near-zero, user-facing defects in production. That's a very important differentiator as 100 bugs user never experiences is better than 5 that they do regularly. Mills' Cleanroom process combined simple implementation, code review, and usage-testing for insanely-high, statistically-certifiable quality even for amateur teams.

6\. By around 60's-70's, it became clear that the language you choose has a significant effect on productivity, defects, maintenance, and integration. Numerous studies were run in industry and military comparing various ones. Certain languages (eg Ada) showed vastly lower defects, equal/better productivity, and great maintenance/integration in every study. Haven't seen many such studies since the 90's and most aren't constructed well to eliminate bias. However, it's grounded in science to claim that certain language choices prevent common negatives and encourage positives. So, it follows to adopt languages that make robust development easier.

7\. By the 80's or 90's, it was clear that computers were better at finding certain problems in specs and code than humans. This gave rise to methodologies that put models of system or code into model-checkers and provers to show certain properties always hold (the good) or never show up (the bad). Used successfully with high-assurance safety and security critical systems with results ranging from "somewhat beneficial" to "caught stuff we'd never see or test for." Back then it was unclear how applicable it was. Recent work by Chlipala, Leroy, et al show near perfect results in practice when specs/proofs are right and much wider application than before. Lots of tooling and prior examples means this is a proven way of getting extra quality where high-stakes are worth the cost and where core functionality doesn't change often.. The CompCert C compiler, Eiffel's SCOOP concurrency scheme, and Navy team's EAL7 IPsec VPN are good examples.

8\. Static analysis, aka "lightweight formal methods," were devised to deal with specialized skills and labor of above. Getting to the point, tools like Astree Analyzer or SPARK Ada can prove absence of common flaws with little to no false positives without need for mathematicians in the company. Just a half dozen of these tools by themselves found tons of vulnerabilities in real-world software that passed human review and testing. Enough said, eh?

9\. Software that succeeded with testing often failed when random stuff came at it, especially malware. This led to various fault-injection methods like fuzz testing to simulate that and find breaking points. The huge number of defects, esp in file formats & protocol engines, found via this method argues for its effectiveness in improving quality. It ties in with stuff above in that well-written code that validates input at interface and preserves invariants throughout execution should simply disregard (or report) such erroneous input.

10\. Interface errors themselves posed something like 80+% of problems. This was noted as far back as the 60's in Apollo project when Margaret Hamilton invented software engineering, fault-tolerance, and specification techniques to fight it. Dijkstra and Hoare pushed for pre- and post-conditions plus specific invariants to document the assumptions of code during procedure calls. Modern version is called Design by Contract in Eiffel, Ada, and numerous other languages (even asserts in C). Many deployments and tests showed such interface checks caught many issues, esp assumption violations when new code extended or modified legacy.

11\. Concurrency issues caused all kinds of problems. Techniques were devised by Hansen (Concurrent Pascal) and later Meyer et al (SCOOP) to mostly immunize against them at language level with acceptable performance. Languages without that, especially Java, later got brilliant tooling that could reliably find race conditions, deadlocks, or livelocks. Use of any method inevitably found problems in production code that had escaped detection. So, using prior, proven methods to immunize against or detect common errors in concurrency is A Good Thing. Note that shared-nothing, event-driven architectures also emerged but I have less data on them outside that some (NonStop, Erlang) worked extremely well.

The above are just a few things that computer science established with supporting evidence from real-world projects so long ago that Windows didn't exist. Anyone applying these lessons got benefits in terms of code quality, security, and maintainability. The rare few applying most or all of them, mainly high assurance community, got results along lines of space shuttle control code with extremely, low defects or zero in production. So, given the past and present results of these methods every time they're put to the test, I'm irritated every time another person talks like there's no good science to quality software. I just listed a bunch of it, it's been tested in production as scientific method requires thousands of time, tweaked probably hundreds, and core approaches remained even if tactics got modified.

Now people can feel free to use and improve on the science. CompSci continues to in every area I listed with a chunk of proprietary and FOSS developers using a subset of the techniques. Just need more uptake. Use what's proven. And do note that there's plenty of examples for specific design and implementation decisions for common types of functionality. Many things that were shown to work or not work that could be encoded in libraries, DSL's, templates, whatever. No excuse except for our field's continual failure to learn and hand down the lessons from the past.

[http://pastebin.com/xZ6m4T8Z](http://pastebin.com/xZ6m4T8Z)

<comment><USER23> It is upon the shoulders on these giants where I stand. Dijkstra, Floyd, Hoare, Knuth, Curry, Church, and Turing, among others.

The science exists. The trick now is bringing it all together in a way that is useful enough to others that they actually start using it. :-)

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER25> Farewell sparc32. You will be missed by the retrocomputing geeks.

<comment><USER26> Still supported by NetBSD.

<comment><USER27> Through emulation. How useful...

<comment><USER26> NetBSD/sparc runs on real hardware as well as emulators.

</comment></comment></comment></comment><comment><USER28> I love BSD and would like to use it, but we're kinda in a Linux world.

Question: If I am building a custom hardware device (and we will be in the future, I believe) can we run OpenBSD on it using the ARM port, but also invoke binaries created for linux?

It appears that support was removed.

In the near term I need to build for Linux, But eventually we'll be able to target our own hardware, and one of our toolchain items doesn't support BSD right now (and is closed source, though we are considering an open source alternative.)

Any thoughts?

<comment><USER26> Linux ARM binaries require the OS to map a page at the top of the address space that is shared between the kernel and userspace, you would need to check whether OpenBSD ever included this in their Linux emulation.

The support for this isn't in NetBSD either but there has been a request to add it in order to run a Citrix app.

<comment><USER29> They removed Linux emulation support in 6.0.

</comment></comment></comment><comment><USER30> For those of you who are looking at a reason to play around with openBSD, there might be some progress at getting it to run at the Raspberry pi 2 and 3: [http://marc.info/?l=openbsd- cvs&m=147059203101111&w=2](http://marc.info/?l=openbsd- cvs&m=147059203101111&w=2)

Probably not going to happen, but it runs on some other ARM7 SBCs. Mine is running FreeBSD currently, but where is the geek cred in that?

<comment><USER31> this is currently being worked on as I type this reply :)

<comment><USER30> _nice_.

For my pi I want something that I don't have to think about. A colleague pwned my rpi because I hadn't updated it in ages. OpenBSD seems like a better choice...

</comment></comment></comment><comment><USER32> I'm trying to use the austrian mirror, ftp5.eu.openbsd.org, but I'm getting empty directories or "Permission denied" when trying to access the packages folders [http://ftp5.eu.openbsd.org/ftp/pub/OpenBSD/6.0/packages/](http://ftp5.eu.openbsd.org/ftp/pub/OpenBSD/6.0/packages/)

<comment><USER33> Have you tried ftp2? I had problems today with one of them (can't remember which worked and which didn't).

EDIT: [http://ftp2.eu.openbsd.org/pub/OpenBSD/](http://ftp2.eu.openbsd.org/pub/OpenBSD/)

</comment></comment><comment><USER34> _"...the kern.usermount sysctl is also no more. Administrators who want to let users mount devices will need to configure doas(1) for that task."_

For convenient laptop use I prefer allowing my user account to mount USB drives and have that done by mouseclicks in some way.

Antoine Jacoutot's toad package is not in the 6.0 packages collection, but xfce4-mount is, so I assume I can set up the appropriate doas rule for a user and then configure xfce4-mount to ignore the local drive. I shall have a play on Sunday.

</comment><comment><USER35> I've never really had a separate /usr/local partition, but it looks like that might not be such a bad idea given the upgrade guide: [https://www.openbsd.org/faq/upgrade60.html](https://www.openbsd.org/faq/upgrade60.html)

<comment><USER36> I like having separate partitions (or slices) for everything. The guy who introduced me to UNIX did it so he could mount certain filesystems "ro" or "noexec". He also told me that partitioning can help avoid inode exhaustion but I really doubt that is an issue with modern filesystems.

I still partition with NetBSD. It just feels right; even if not necessary.

<comment><USER37> I never run out of disk space, but I frequently run out of inodes. It's definitely still an issue. And if you don't stop to think about when you're creating your file system, it tends to bite you in the arse at a later date.

<comment><USER36> Out of curiosity, can you share what platform/file system you generally use? I had assumed inodes would not be an issue with modern operating systems; especially 64-bit ones.

<comment><USER38> On traditional Unix filesystems, a fixed number of inodes is provisioned when a filesystem is created. Though of course the upper bound on that is limited by the width of the numeric type ino_t (or whatever plays that role in kernel space) have you, in practice, the actual limit is lower.

I'm looking at a filesystem I have handy here; the root FS in an Ubuntu Linux VM. dumpe2fs /dev/sda1 says that the inode count is 1146880. Just a million and something: way less than what a even a 32 bit inode number can represent.

That filesystem simply cannot have more objects than that, in total.

With this type of filesystem, you have to estimate how many objects you will ever need to store in it, not only how much total storage. If you estimate too high, you waste inodes. Suppose inodes are 128 bytes wide and you provision four billion of them. Oops, that's like half a terabyte of storage dedicated to the array of inodes!

</comment></comment></comment></comment></comment><comment><USER39> Yay! I get to spend 5 hours figuring out how to update the syntax for my pf.conf rules.

<comment><USER40> I'm assuming you run 5.9.

There is only one entry in [http://www.openbsd.org/plus60.html](http://www.openbsd.org/plus60.html) so I would assume you don't have to change your rules. Also pfctl -n should tell you.

"In pf.conf(5), change the parser to make af-to on pass out rules an error. This fixes a bug where a nonworking configuration could be loaded."

</comment></comment><comment><USER41> It's good that they have their priorities straight. No more Linux binaries support (who need compatibility anyways?), but instead you get 5 songs sung by the project leader.

<comment><USER42> If you're running OpenBSD, likely you're running it for the features it provides (security and code correctness)

If you want to run Linux apps, run them on your Linux box and use your OpenBSD machine to firewall it off</comment></comment>


Zooming user interface - <AUTHOR> https://en.wikipedia.org/wiki/Zooming_user_interface

<comment><AUTHOR> Every now and again I come back to this, and think that this is the future in user interfaces. It would unite tablets, pc and mobile platforms around a single ui concept. I could use my PC to write something and then grab my tablet and connect to the same canvas and proof-read it.

We can have different viewports connected to the same infinite canvas at the same time and visualise them.

Much of our lives, even at home, is spent in this virtual space, so why not share it with one another?

If I was sharing my home computer with my partner over remote viewports, I can pan over to the place at the canvas she was currently using as her viewport and get a visual connection with what she was doing and interact a bit.

Of course you could have a "redacted session" in which case the area used as viewport would be blacked out, if you need secrecy for e.g. work.

I really enjoy the concept of sharing one computer and at the same time, like virtual space in addition to apartment space. This is, pretty much, a user interface extension of finger[1].

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

<comment><USER2> I think I upvoted you (darn tablet). Anyway, I completely agree. It's too bad it seems to have been passed over in the rush to "innovate on mobile" and whatnot

<comment><AUTHOR> It's common that good ideas exist for a very long time before technology enables them, yet I feel that we are at that point /now/ and have been for a while, yet there is little-to-no activity in this area.

</comment></comment></comment><comment><USER3> I've always thought that ZUIs would be confusing for users. It's a completely modal interface. If you can zoom in infinitely or zoom out infinitely, it would probably be hard to determine where you are conceptually. Can anyone address this?

<comment><AUTHOR> I imagine that a minimap could help with that, or showing nearest neighbors at the edges of the viewport, and perhaps being able to alt-tab between applications as well as groups would help.

You can use space to have a visual organisation of things, but you don't have to navigate the space since it's virtual. You should be able to navigate suitable to your platform running the viewport.

Pinch-to-zoom, drag to move, two-finger tap to bring up list of applications to move to instantly on a tablet.

Keyboard based navigation and manipulation of the canvas if you prefer to not use a mouse on your workstation.

Click to drag and scroll-to-zoom to navigate with a mouse, when that is more appropriate, for example.</comment></comment>


Teddy Roosevelt Would Not Understand the E.U.'s Antitrust Fine (2017) - <AUTHOR> https://www.newyorker.com/business/adam-davidson/teddy-roosevelt-wouldnt-understand-the-eus-antitrust-fine-against-google <comment><USER2> This deeply misleading piece misrepresents the history of antitrust, pretends the Borkian price metric is the only valid measure of consumer harm, conflates antitrust with monopoly, and much more.</comment>