2,028 karma · joined October 3, 2009
- http://hackthology.com
- https://github.com/timtadh/
- https://twitter.com/timtadh/
- https://plus.google.com/u/0/109232399292705173597
- https://scholar.google.com/citations?user=n_se9mMAAAAJ
[ my public key: https://keybase.io/tadh; my proof: https://keybase.io/tadh/sigs/ec8yqyArGNcSDjXNT5rSoYRp-H0vMM3lxVmlY4bpcUQ ]
FOSS proved over two decades ago that you can build complex competitive systems with people you have never met. The fact that you couldn't make it work doesn't mean that it doesn't work. It means your company could not figure out how to make it work for you.
> gcc was in fact set up to explicitly not be able to do this.
GCC was originally very difficult to integrate with so that non-free programs could not be built on top of it. However, the creation of LLVM does not reduce to: "GCC was difficult to work with so we made this." There had been many attempts to make "Universal Compiler IRs". These attempts had not gone well. LLVM instead chose to do something at a unique level of abstraction that wasn't good for everything but was very good for its particular niche. Once again, read the paper, LLVM really wasn't created as a reaction against GCC.
The GPL is not harmful and I encourage you to utilize it when appropriate for it protects you (the original author) and your target users far more than BSD or other similar licenses.
[1] http://llvm.org/pubs/2004-01-30-CGO-LLVM.html Read full paper not just the abstract to get the full picture.
Is reading an uninitialised variable or struct member (with a current mainstream compiler):
(This might either be due to a bug or be intentional, e.g. when copying a partially initialised struct, or to output, hash, or set some bits of a value that may have been partially initialised.)
a) undefined behaviour (meaning that the compiler is free to arbitrarily miscompile the program, with or without a warning) : 128 (43%)
b) ( * ) going to make the result of any expression involving that value unpredictable : 41 (13%)
c) ( * ) going to give an arbitrary and unstable value (maybe with a different value if you read again) : 20 ( 6%)
d) ( * ) going to give an arbitrary but stable value (with the same value if you read again) : 102 (34%)
e) don't know : 3 ( 1%)
f) I don't know what the question is asking : 2 ( 0%)
--------------------
I know of one datastructure (a sparse set of integers from 1-n) which relies on this behavior: http://research.swtch.com/sparse . I always thought it was a neat trick. However, from the article is seems that may NOT give stable values to uninitialized members. Which may make that data structure behave strangly or cause the program to miscompile.
So what is powering this thing?
1. http://sawja.inria.fr/ This is a OCaml library for parsing .class files into OCaml datastructures. There is some built-in analysis it uses
2. Clang and LLVM which is the popular thing to build you C family analysis framework on.
I use https://github.com/Sable/soot for Java analysis myself. It is extremely powerful out of the box and can analyze: java source code, jvm bytecode and dalvik bytecode. I recommend taking a look at that if you are interested in that sort of thing.
The innovation in the released tool seems to be the incremental checking. Haven't had a lot of time to dig into that but that seems to be the important part. In general it is great that they created something useful and practical, that is always a challenge.
> Source? Particularly with respect to "weaponized". The worst I saw was North Korea alledgedly being responsible for pirating a crappy movie, and a 10 minute shutdown of github a few months ago.
Arguably it has been "weaponized" by the NSA and their allies. See, stuxnet and related threats. There is good reason to believe other nation state actors also have "weaponized" threats. For instance the recent "man-on-the-side" DDOS attack via the great firewall on github. There is also a healthy business for buying and selling vulnerabilities and exploits and the .gov organizations are known buyers.
So yes, I think it is fair to say that "hacking has left teenage basements". That part of the statement the gp's statement it obviously true when you look at say sophisticated carder rings.
Then I saw that famous talk by Linus on git in 2007 (https://www.youtube.com/watch?v=4XpnKHJAok8). Since I had never managed to get SVN working properly for me git was awesome. No server software to install. By the time I wanted to put up another project on the web Github was a thing and I used that. I never looked back, I loved how it was about the code, not how many installer downloads you had.
That for me was the main problem with sourceforge. In the end it was a game (for the devs) to get the most downloads because that was how your projects were judged and ranked. The Github "game" is slightly better and there are multiple ways to play.
That said, I think the benefits of Nix are real. The existing configuration management systems do not have the ability to fully understand the system. Nix does, because everything about the system is contained in the configuration file. As a consequence, you can up and down grade servers without fear of breaking everything. You can check to see exactly what changes between different versions. There is much more control and more assurance that the nodes are in the proper state.
One part of your comment which I do not understand is:
> When you can stand up a fresh VM using Ansible in a few minutes, the value of being able to roll a server back easily is hard to justify.
Isn't this also true for Nix? You just launch the image and push your desired configuration? If you mean time to write a new ansible playbook/role then in my experience, although I am fairly productive with ansible, I would not put it at "a few minutes" from nothing to a new service. Maybe you are talking about the learning curve? Nix definitely seems steeper so a clear win for ansible on that front.
The cool thing about the ALIX and APU boards is they often support buying things like 3g modem cards which you can use to multi-home your connections with pfSense. You could also create an SMS gateway or similar service.
I should probably not just complain but explain
1. How to prove via pprof and other tools that you have problems related to memory allocation or GC.
2. Some strategies for addressing that problem that don't involve writing an allocator. Using sync.Pool or a recycler pattern. Keeping allocations on the stack etc...
3. How to write a allocation interface in Go for allocating arbitrary objects. Aka emulating New and Make.
4. How to write a allocator backed by a memory mapped files.
I have been working for a while in this space because of my academic research which involves frequent subgraph mining. That particular data mining problem is exponential and certain techniques can use a lot of memory. In order to scale my solution I have need to get the memory allocations under tight control. Sometimes I think I should just re-write in C++ or Rust but Go has provided me a lot of benefits from the concurrency angle so it isn't a win/win to move languages.
Maybe I will write up all of this stuff at some point. It is a bit much for an HN comment.
It is more comparable to a Mac Book Pro and can be configured with 16 GB of memory as well as the hi res display.
>>> sum(x*x for x in xrange(1,11))
385
You could use a map in Python as well, but really, the generator expression is much cleaner: >>> sum(map(lambda x: x*x, xrange(1,11)))
385Also if you are interested in B-Trees start with "The Ubiquitous B-Tree" by Comer. [ http://dx.doi.org/10.1145/356770.356776 ].
[1] Proposed by Bayer and McCreight, and independently developed by Chiat and Schwartz, and also by Cole, Radcliffe and Kaufman, improved by many including D. Knuth.
[2] C-Store: A Column Oriented DBMS. Mike Stonebraker, Daniel Abadi, Adam Batkin, Xuedong Chen, Mitch Cherniack, Miguel Ferreira, Edmond Lau, Amerson Lin, Sam Madden, Elizabeth O'Neil, Pat O'Neil, Alex Rasin, Nga Tran and Stan Zdonik. VLDB, pages 553-564, 2005.
It isn't really a deal breaker to not have it built in. There are other ways to use git than following rigidly to the current github model.
However, changing to a market system for water would never happen overnight. People are not used to paying for water and cannot move on a dime. However, long term I think it is our only solution. The midwest, who many on HN seem to have a bad impression of, has the world's largest fresh water reserve in the world (the great lakes). Meanwhile, the plain states and California will have continuing water difficulties moving forward. Long term, people are going to need to move to where there is abundant water. It is not sustainable for so many people to live in marginal areas.
One way to encourage people to move is by having market forces act. If the price of water is cheaper in the great lakes region there will be a slow but steady migration there over time. This will in turn ease the brewing crisis in the west. This isn't the only action which should be taken but we should consider (from a policy perspective) the idea of allowing market forces to act in the water market.