Altimir: Life in the depopulated Bulgarian countryside [video] - <AUTHOR> https://www.youtube.com/watch?v=c9Ufhi_42h0 <comment><USER2> Very bored with "documentaries" showing Bulgaria as under developed country with people living in villages, thinking it will be "original". 74% of the population is in urban areas, so showing this village with no roads is really trivial. If you wanted to look into the problem you should have filmed the young people who are living the country and why. Also why you present content which is a few years old without specifying that?

</comment><comment><USER3> 1\. It's NOT the world's fastest shrinking country 2. Filming a god-forgotten village located in the poorest region of certain country does not depict anything. It's like saying that the ghetto part of Detroit depicts America.

<comment><USER4> It actually is the world's fastest shrinking country due to facts that it is.

<comment><USER5> [https://www.populationpyramid.net/bulgaria/2029/](https://www.populationpyramid.net/bulgaria/2029/) Yes see context

See Denmark for comparasion: [https://www.populationpyramid.net/denmark/2029/](https://www.populationpyramid.net/denmark/2029/)

</comment></comment></comment><comment><USER6> As bulgarin I don't see anything sad in this video. This happens everywhere in the world, everyone is going to big cities for better perspectives. In some countries the depopulation of rural areas is happening faster. It's how the world works nowadays.

</comment><comment><USER7> I grew up in Bulgaria in the 90's and these villages were quite derelict back then as well. During summer break, a lot of parents used to send their kids to their grandparents for weeks/months. I wasn't one of them and I remember being very bored as all my friends would go to "selo" (village)

Now, as a parent living in the US, I can't imagine ever sending my kids to places like these but I wonder what they'd be missing out on development-wise. The villages were great, vast playgrounds.

<comment><USER8> I go back to Bulgaria every summer exactly because I want my kids to spend time in places like Altimir, not rot in toxic urban environments in the US. In fact, my kids spend their time in a much smaller village. They are around farm animals, they roam free all day long unsupervised and only come back when they are hungry, i.e. twice a day. My only worry is the ticks, but so far, we've been lucky, plus, I have Tetracycline always handy.

<comment><USER9> Where human populations are lower, there are fewer ticks that bite humans.

Bits of woodland near cities and also with wild animals are where you should be most worried.

<comment><USER8> It makes sense.

</comment></comment></comment></comment><comment><USER10> As much as the story pains me as Bulgarian, I'd like to provide some more facts rather than emotions.

Before the end of communist rule in Bulgaria everything was distributed rather evenly across the country and believe it or not the majority of people were content, there was work and some pay and most people got the same. The exceptions were not visible. After this the country "reset" and places with critical mass of well-educated people did well and the rest not. This is one of the latter ones. It had the bad luck to be close enough to the capitol (50-100km) which basically has zero unemployment rate and good salaries. It is nevertheless not so well connected so you can't easily commute there to work. The population is not enough to have critical mass to attract good investments. There are no universities in this part. Then Bulgaria joined EU and it became even easier to have better life quickly. It's one of the negative effects of globalization if you are not on the winning side.

In contrast, there are places in Bulgaria that are doing great. Plovdiv sports 150+ factories with Magna, Airbus, Liebherr and is currently the European Cultural Capitol. In Sofia you can find pretty much any IT company - HP, IBM, Paysafe, SAP, etc.

<comment><USER11> > the majority of people were content

Definitely they couldn't complain.

(By the way, you meant "capital", not "capitol".)

</comment></comment><comment><USER12> Joining EU had this effect on my country as well (Romania). There are entire villages (I lived in one of them for 6 years and I can make a difference) where just old people can be found. The young left for other countries (mostly UK and Italy) and to the bigger cities but the latter did so because, for some reason, they couldn't find anything abroad.

What you're left with is nothing but old people who are easily manipulated into voting for whoever promises a bigger pension - sad but true, they dictate the future by majority. It's been years since we're fighting corruption at the highest level without success.

Bulgaria is even scarier than that. We travel to or through Bulgaria almost each year (going to their beaches or to Turkey) and we happen to go through huge areas without seeing people at all. Often times, when stopping for gas (true story, happened to us last year), you encounter really shady people that simply look for trouble - especially with the ladies. In one occasion we stopped for more than 30 mins and the individuals started "gathering up" and doing whatever they can to spark a fight with us.

I have friends who traveled at night and swear to not do it again. They encountered the same type of individuals that were cutting trees onto the road to prevent you from going any further and try to rob people. We have a rule, never travel Bulgaria alone, even if you're alone at the border you need to find someone else going to the same direction and go in packs.

Sad to see a country go down like that. We have witnessed this country getting worse and worse each year. Also, they seem to be even more corrupt than us, we prepare batches of 10 euros for police because we know they will stop us, we just get the paper out of the windows, salute and go...that's all they want.

I'm curious if other Bulgarians are aware of the difficulties we have to deal with while traveling in their country.

Edit: I see some folks complain that I'm fabricating. I own a tourism small business and we always warn people of 2 things when doing Bulgaria:

1 - Never park your car where it's not being guarded, filmed, monitored (lots of cases with people left without their vehicle) 2 - Never stop at night on the road (if you can)

Romanian journalism (requires translation). The internet is filled:

\- [http://www.reporterntv.ro/stire/vacanta-de-cosmar-pentru- o-f...](http://www.reporterntv.ro/stire/vacanta-de-cosmar-pentru-o-familie- din-constanta-hotii-din-bulgaria-i-au-lasat-fara-masina-video)

\- [https://www.romaniatv.net/romani-lasati-fara-masini-in- timp-...](https://www.romaniatv.net/romani-lasati-fara-masini-in-timp-ce-se- aflau-in-vacanta-in-bulgaria_341849.html)

\- [https://www.promotor.ro/opinii/george-buhnici-despre- problem...](https://www.promotor.ro/opinii/george-buhnici-despre-problema-cu- masini-furate-in-bulgaria-6113082)

\- [https://www.digi24.ro/stiri/actualitate/social/romani- ramasi...](https://www.digi24.ro/stiri/actualitate/social/romani-ramasi-fara- masina-in-bulgaria-le-a-fost-furata-din-parcarea-hotelului-787526)

\- [https://movafaq.wordpress.com/2017/02/10/romanian-cars- bulga...](https://movafaq.wordpress.com/2017/02/10/romanian-cars-bulgaria-ro/)

\- [https://www.b1.ro/stiri/auto/varna-hoti-romani-furati-in- bul...](https://www.b1.ro/stiri/auto/varna-hoti-romani-furati-in- bulgaria-221797.html)

\- [https://www.libertatea.ro/stiri/masini-furate-in- bulgaria-17...](https://www.libertatea.ro/stiri/masini-furate-in- bulgaria-1751574)

\- [https://stirileprotv.ro/stiri/actualitate/vacanta-in- bulgari...](https://stirileprotv.ro/stiri/actualitate/vacanta-in-bulgaria-s-a- transformat-intr-un-cosmar-pentru-o-familie-din-constanta-cum-au-ramas-fara- masina-in-bansko.html)

\- [https://observator.tv/social/vacanta-la-schi-in-bulgaria- a-l...](https://observator.tv/social/vacanta-la-schi-in-bulgaria-a-lasat-o- familie-din-constanta-fara-masina-de-30-de-mii-euro-200016.html)

\- [http://www.bmwclub.ro/forums/topic/171395-bmw-furat-in- bulga...](http://www.bmwclub.ro/forums/topic/171395-bmw-furat-in-bulgaria/)

I can go on but there's no point.

<comment><USER13> A few years ago I traveled solo through Bulgaria for a few days from Serbia to Greece on a 50cc Yamaha DT50R, avoiding major roads (due to small engine and it's just fun - spent a month going from Marseille to Istanbul - loved all the ex-yugoslav countries).

Never noticed anything dangerous while traveling in Bulgaria, although Sofia has that normal big city be-careful feel to it. No bribes required either.

Obviously only a few days and not a local and maybe I didn't see the rough areas...

Edit: obviously there is danger throughout many parts of Europe. I just wanted to say that travelling solo through mountainous roads on a 50cc motorbike and often staying in hick areas, I felt welcome. Then again: I wasn't in a campervan or riding a BMW; I am not from a usually hated country; YMMV.

<comment><USER14> Did you also travel through the night?

<comment><USER13> After dark - yes. Very late at night - no.

</comment></comment></comment></comment><comment><USER15> It's interesting, but I found myself wondering if you could find similar places in the USA these days, also ...

<comment><USER16> Absolutely... neighborhoods, towns, and roads surrounding former major industrial centers (or mining towns), and occasionally the city itself. By land area, a lot of the US is like this, you just have to do a lot of driving if you are on the coasts, or fly to a small airport and drive to a different small airport.

</comment></comment><comment><USER17> I was reading on the history of Bulgaria from wikipedia, and came across this curious snippet:

> _Facing declining birth rates among the ethnic Bulgarian majority_ , in 1984 > Zhivkov's government forced the minority ethnic Turks to adopt Slavic names > in an attempt to erase their identity and assimilate them

So the population decline is not just some recent post-communist depression, but something more deeply ingrained in the society. This is especially weird as it seems the nation was doing relatively well for an underdeveloped communist country in the 80s ("per capita GDP quadrupled by the 1980s").

<comment><USER18> It's really not especially weird.

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

Bulgaria and Romania experienced extreme level of emigration but almost every country in Europe is dying out. The countryside in these countries is depopulated and dead, in a country like the UK or France it is merely grim and miserable.

</comment></comment><comment><USER19> Perhaps it's actually better in environmental terms to concentrate development in fewer places?

</comment><comment><USER20> That's a good example of the results of the healing powers of capitalism, that the western propaganda talked so much about, when they were collapsing the Soviet Union.

<comment><USER21> You think the Soviet Union needed help collapsing? It was mostly doing that on their own, Reagan et al just sped up the process a bit.</comment></comment>


2013 "Year In Review" music stats from Spotify - <AUTHOR> https://www.spotify.com/us/2013/

<comment> k-mcgrady I usually don't like these scrolling animated pages but this one is done pretty well. I think it's the fact that scrolling a little bit doesn't make info disappear - it hangs around for a bit.</comment>


Intel's first 10nm Ice Lake CPUs revealed: here's your decoder ring - <AUTHOR> https://www.theverge.com/2019/8/1/20748224/intel-first-10nm-ice-lake-11-cpu-processor-laptop-decoder-ring <comment><USER2> I really wish I knew and understood more about the things that govern cpu performance (not just the physics but also the problems people are trying to solve). For example it seems that CPUs have been stuck at around 2ghz for a decade now despite them getting harder to make and more expensive. Are we really seeing what amounts to I'm sure billions of dollars of research worth of benefits from seemingly incremental performance gains? Or am I just so far off the mark that it's ludicrous?

<comment><USER3> Not sure what you mean about stuck at 2 GHz? My current Dell laptop and the previous one used 45 W CPUs and can hold a sustained 3.2 GHz while compiling with 8 threads.

That immediately drops as soon as I start using the iGPU or even the Nvidia dGPU, because of power limits and thermal limits.

On the desktop, my 5960x from 2014 sustains 3.3 GHz and overclocks to 4.1 all- core, if I want to bother. Ryzen 1700x does 3.7 and the Ryzen 3900 seems to do 4.2 pretty easily. So there's no 2 GHz limit there. Intel is even better, with many desktop chips able to do 5 GHz.

<comment><USER4> They aren't desktop CPU's but both the Sparc M8 and Power8 CPU's ran at 5GHz

</comment></comment></comment><comment><USER5> Are margins on CPU binning getting smaller? I've always wondered something: how likely is a CPU to fail after some time if it's been enabled for X, Y, Z features when it should've actually been some other variation and just barely managed to pass QC for its bin?

I believe my question is more about material engineering... is it possible the CPU could degrade a certain way and cause it to fail? Or is the enabled feature set, if passed QC, basically solidified forever?

<comment><USER6> > Are margins on CPU binning getting smaller?

Very likely so for Intel if their yields are as low as rumoured, and they don't have "a room to manoeuvre" with binning.

In that case, they will struggle to fill even the baseline model, and will be putting most of their output into it.

</comment></comment><comment> dis-sys when you can't beat your competitor on performance or performance per $/watt, just upgrade your naming scheme to confuse everyone

well done!

</comment><comment><USER6> > [The] main performance difference between the 12W and 15W will be seen on > multithreaded applications, which are more power limited. 3W of extra power > will be used to increase average frequency into higher performance. We have > seen between 5-15% performance increase on some benchmarks such as Spec06, > SYSmark and 3DMARK.

So, nearly no gain. A disappointment.

</comment><comment><USER7> Sounds like we might finally get more than 16GB of ram on the 13 inch MacBook Pro. Intel has been dragging their feet on supporting LPDDR4 for way too long.</comment>


Wily Cockroaches Find Another Survival Trick: Laying Off the Sweets - <AUTHOR> http://www.nytimes.com/2013/05/24/science/a-bitter-sweet-shift-in-cockroach-defenses.html?hp&_r=0

<comment><USER2> AP article is more detailed: [http://bigstory.ap.org/article/cockroaches- quickly-lose-swee...](http://bigstory.ap.org/article/cockroaches-quickly-lose- sweet-tooth-survive)

</comment><comment> steve-howard This is kind of interesting, I'm seeing three different headlines for this article.

Tab title: "Some Cockroaches Avoid Sweet Flavors as a Defense"

URL: a-bitter-sweet-shift-in-cockroach-defenses

Article title: Wily Cockroaches Find Another Survival Trick: Laying Off the Sweets

<comment><USER3> They edit the articles after they post them, sometimes including the title.

<comment> steve-howard True, but I would think that at least the page title and article heading would be pulled from the same database field.

</comment></comment></comment><comment><USER4> It bothers me when reporting on evolution seems to attribute it to some invisible hand shaping the way populations change, or in this article making it seem like the cockroaches have made some conscious decision as a group to stop eating sweet things.

"They switched their internal chemistry around so that glucose, a form of sugar that is a sweet come-hither to countless forms of life, tastes bitter."

Either the author of this article doesn't really understand how evolution works or they are poor at explaining the mechanism behind it. I think one of the reasons people grapple with the idea of evolution is because mainstream reporting on it is poor and uses confusing language to deal with the concepts behind it.

Of course science reporting is generally quite poor but with evolution being such a battleground in some places I think it behoves people writing about it to present it clearly and precisely.

</comment><comment><USER5> If only tech people were so smart: <https://news.ycombinator.com/item?id=5751329>

</comment><comment><USER6> a pill that would taste sweet foods bitter and bitter foods (vegetables, basically) sweet would be a blockbuster.

<comment><USER7> Not exactly what you're looking for, but you may find this interesting nonetheless --

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

<comment><USER8> Found this interesting from the Wikipedia article:

 _An attempt was made in the 1970s to commercialize the ability of the fruit to turn unsweet foods into sweet foods without a caloric penalty, but ended in failure when the U.S. Food and Drug Administration (FDA) classified the berry as a food additive._

I remember first hearing about these berries a few years ago when they were all the rage for a while, but had not heard that before.</comment></comment></comment>


Monkeypatching is Destroying Ruby - <AUTHOR> http://avdi.org/devblog/2008/02/23/why-monkeypatching-is-destroying-ruby/

<comment><USER2> Writing tip: When the first paragraph of your essay is an extensive apology for the poorly worded title... your title is poorly worded.

If you're gonna linkbait do it like you mean it. Otherwise the effect is that of Darth Vader saying "I beg your pardon".

<comment><USER3> He used a dramatic title to bring attention to an issue which he believes (1) is important and (2) can only be fixed if a lot of people become aware of it. He explains this clearly, honestly, and without apology.

</comment></comment><comment><USER4> Absolutely agreed. So much of what makes Rails "easier" than other frameworks is based on a disregard for established best-practices -- particularly with regard to encapsulation and data-hiding. Monkey-patching is but one example.

Another is rails' attitude toward private data. Every DB field on an ActiveRecord object is world-writable, whether you like it or not. That's fine for prototyping, and works adequately well when you have a small team of developers who never get rushed or sloppy, but is a _terrible_ idea for long- term code stability.

Now, you can hack around this and make attributes private-ish, but it's not easy, and as best as I can tell, nobody in the rails community actually does it on a regular basis. This blows my mind. Yes, sometimes you want the ability to rapidly hack up a prototype, but if your framework precludes the ability to turn that prototype into a robust model with minimal effort, then I think your framework is flawed.

/flame-proof suit _on_ /

</comment><comment><USER5> From the article: Emacs Lisp, the language it is written in, is every bit as dynamic as Ruby.

Warning! Author thinks in Blub ( <http://www.paulgraham.com/avg.html> ).

More seriously, Ruby's apparent class patching combinatorial explosion of bugs makes a very good case for aspect oriented programming ( [http://video.google.com/videoplay?docid=8566923311315412414&...](http://video.google.com/videoplay?docid=8566923311315412414&q=engedu) ).

<comment><USER6> As a committedly multilingual prgrammer, I'm not sure what you mean by saying I think in Blub (and yes, I'm familiar with that article). Is it because I failed to note that Lisp is in many ways far more powerful than Ruby?

I don't think it makes a particularly good case for AOP myself. AOP is just another, slightly more structured, form of the same thing - a structured COME FROM (see INTERCAL), if you will. The ability to globally append to or modify arbitrary functions in existing code is no substitute for a) _limited_ extension within the scope where the extension is actually used and b) actually coding classes with well-documented extension points, whether Emacs- style "hooks" or some other mechanism.

<comment><USER5> I was joking about Blub. In the context, it would have been extremely unreasonable to describe the merits of Ruby and Lisp in more detail.

Regarding AOP, when I saw the video, I thought "OMG! Someone invented OO COME FROM by matching stackframes!". Indeed, a question in the video subsequently alluded to a stack implementation.

Anyhow, although it is possible to write an entire application in aspects, it is likely that the worthwhile threshold for doing anything in AOP is larger than the threshold for doing anything in OO. In trivial cases of OO and AOP the execution overhead is minimal. Furthermore, there's opportunity to reduce overhead when you've got a bytecode implementation. I'll give an example using testing and asserts.

If we had a bytecode implementation which supported aspects and we loaded a test harness, the test harness aspects could effectively add asserts throughtout the code. If you don't load the test harness then the asserts aren't formed. Languages like Ruby are ideal in this situation because the bytecode can be devised such that trivial and non-trivial cases can be easily added into already compiled bytecode. This means that you've got hooks everywhere without forethought and with minimal overhead. Planning ahead remains a better option but its nice to have a fall-through case which scales.

<comment><USER5> I've read a lot of ELisp code, and I have very rarely seen the equivalent of Ruby-style monkey patching. Even the advice mechanism, an AOP-like feature which enables functions to be dynamically wrapped and chained, somewhat like Rails' alias_method_chain, is used sparingly. Instead, every mature Emacs extension exposes a plethora of "hooks", extension points that other packages can attach their own handlers to. Other packages add their handlers to these hooks, and to hooks that the core Emacs code provides, and thus they cooperate largely without collisions. -- [http://gilesbowkett.blogspot.com/2008/02/never-complain- only...](http://gilesbowkett.blogspot.com/2008/02/never-complain-only-ever- code.html)</comment></comment></comment></comment>


Friends of the S.S. United States Send Out a Last S.O.S - <AUTHOR> http://www.nytimes.com/2015/10/08/business/friends-of-the-ss-united-states-send-out-a-last-sos.html <comment><USER2> I thought the ship had been saved when the current nonprofit bought her. Apparently not.

Although the interiors were stripped long ago to remove asbestos, the power plants are in reasonably good shape.

The S.S. United States was the fastest transatlantic liner ever built - England to US in about 3 1/2 days. She was built with some Government funding with the potential to be used as a troop carrier. This included warship-like features, such as more bulkheads and watertight doors than most passenger ships, heavy fireproofing (no wood except the piano and the butcher's block), multiple engine rooms, and a warship-like hull and propulsion plant. If the US needed to get an army somewhere in a hurry, the ship was ready.

That's why conversion to a cruise ship didn't work out. Norwegian Lines considered it. But cruise ships today look like Vegas hotels built on barges, with huge interior open spaces, swimming pools, water slides, casinos, shopping malls, etc. The SS United States was built for speed and survivability, not recreation.

</comment><comment><USER3> A boat is _" a hole in the water, into which you throw money"_, so a big boat is a big hole in which you throw lots of money.

I don't know this ship, but given that it was built around 1950, chances are that the builders used asbestos for isolation.

That means that, even if the ship were new, it would cost millions to make it suitable for almost any use.

For an example, see [https://en.m.wikipedia.org/wiki/SS_Rotterdam](https://en.m.wikipedia.org/wiki/SS_Rotterdam). The English page doesn't say it, but restoration of that ship to its original state cost over €100M.

<comment><USER4> The asbestos was stripped in the '90s, so that problem has gone. I'm quite sure there are all kinds of other nasties there though.

Maybe Paul Allen will get involved. He likes large boats and has the capital to finance a refurbishment.

</comment></comment><comment><USER5> Perhaps Donald Trump could make it his presidential yacht.

I find such ships fascinating, but also sad in that many of them are floating superfund cleanup sites. Restoring one is something a billionaire might do on a whim but since such ships became impractical commercially, their eventual fate was decided.

</comment><comment><USER6> Heh, before seeing the (nytimes.com) and clicking through to RTFA, I half expected this to be an over-the-top, hyperbole filled article about NSA surveillance or draconian copyright law.

<comment><USER7> I thought it was going to be an article complaining about the US Navy's tendency to give up cool names in favour of naming ships after politicians who voted to give more money to the Navy, but I was thinking of the USS America. (Which was, I believe, the proposed name for one of the new Ford-class carriers until they decided to name it after a politician and stick the "USS America" label on a lesser ship.)

</comment></comment><comment><AUTHOR> It is frustrating that this beautiful ship is relatively unknown considering the fascination with all things Titanic. [http://www.ssusc.org/](http://www.ssusc.org/) Surely Bill Gates or Jeff Bezos could free up a few million from petty cash.

<comment><USER8> I live in South Philadelphia and have to look at this eyesore all the time.

Bill and Jeff should spend the money on helping the sick and the starving and skip the boat.

Philadelphia should invest in things that make the waterfront more accessible and encourage a recovery of the natural flora and fauna.

<comment><USER9> It's quite strange to say that private individuals should spend their personal money on social causes instead of whatever projects they prefer, while the city should spend taxpayers' money on your pet beautification and ecology projects.

<comment><USER10> You think it's contradictory to say that private individuals and cities should both fund public-benefit causes?

Come on, man. That's not even coherent. If you get mad when people tell other people how to spend their money, just say so.

<comment><USER9> Nice strawman. Let me explain like you're five:

A) Waterfront improvements are somewhat more socially important than saving the ship. But helping the sick and starving is _massively_ more socially important than both.

B) Public bodies such as the city of Philadelphia have a much stronger obligation to focus on socially important causes than do private citizens.

C) However, frankrizzo was imposing a much stronger condition on private citizens ("no ship while the sick and starving are suffering!") than on the city ("let's make the waterfront prettier!" "but what about the sick and starving?" "sssh, don't worry about that"). This violates either A or B. Since A and B are commonly held beliefs, C is strange.</comment></comment></comment></comment></comment>


How to implement a spreadsheet - <AUTHOR> http://semantic-domain.blogspot.com/2015/07/how-to-implement-spreadsheet.html <comment> david-given If you're interested in spreadsheets, don't miss sc, the Standard Unix Spreadsheet™ which nobody has ever heard of (the un-Googleable name doesn't help). It was originally written by James Gosling in the 1980s and is in Debian. It runs in a terminal and uses vi keybindings:

[http://www.linuxjournal.com/article/10699](http://www.linuxjournal.com/article/10699)

<comment><USER2> Is there a more recent version than 7.16 from 2002? [http://ibiblio.org/pub/Linux/apps/financial/spreadsheet/](http://ibiblio.org/pub/Linux/apps/financial/spreadsheet/)

<comment><USER3> The package version in Arch is 7.16, so I assume it's the latest.

</comment></comment></comment><comment><USER4> Back in 2000, a winner of the International Obfuscated C Code Contest (IOCCC), had an implementation of an X-based graphical spreadsheet in 2kB of very unreadable C: [http://www.ioccc.org/2000/jarijyrki.c](http://www.ioccc.org/2000/jarijyrki.c) . Details here: [http://www.ioccc.org/2000/jarijyrki.hint](http://www.ioccc.org/2000/jarijyrki.hint)

<comment><USER5> This is amazing. It compiles and runs under cygwin fine too.

<comment><USER6> How'd you get it to compile?

        gcc -I/usr/include/X11 jarijyrki.c  -o jarijyrki
        jarijyrki.c:15:33: error: 'U' undeclared here (not in a function)
        int   q,P,W,Z,X,Y,r,u; char   E[U][U][T+1] ,D[T];   Window J; GC k;  XEvent  w;
                                         ^

<comment><USER5> I downloaded the Makefile from the same site [1]. I changed CC to gcc (not sure if necessary) then just ran "make jarijyrki". The relevant build command makes it clear why your compile command fails.

       	${CC} ${X11CCFLAGS} ${CFLAGS} -DNeedFunctionPrototypes \
       	    -DU=40 -DT=98 '-Dz=(T+1)*U*U' -DQ=80 -DS=20 -DN=10 -DB=5 -DG=23 \
       	    -Dp=7 '-DM=((p+1)*Q)+S' '-DH=(G*S)+S+S' -DC=XK_Up -DL=XK_Down \
       	    -DO=XK_Left -DV=XK_Right -DR=XK_Escape -D_=XK_BackSpace \
       	    $? -o $@ ${X11LDFLAGS} -lX11

I guess there was a limitation on the length on the compilation command too and the winner made use of it fully. You have to run it as "./jarijyrki < sheet1.info > myedits.info", sheet1.info is in the same site[2].

[1] [http://www.ioccc.org/2000/Makefile](http://www.ioccc.org/2000/Makefile) [2] [http://www.ioccc.org/2000/sheet1.info](http://www.ioccc.org/2000/sheet1.info)

<comment><USER6> Oh geeze, I didn't even see there was a Makefile there .. sorry about that.

</comment></comment></comment></comment></comment><comment><USER7> Tangentially, the Löb function over (Haskell) functors implements spreadsheet- like computations in an unexpected way: [https://github.com/quchen/articles/blob/master/loeb- moeb.md](https://github.com/quchen/articles/blob/master/loeb-moeb.md)

ex.

        loeb [const 1,
              const 2,
              \xs -> x !! 0 + x !! 1]

gives you [1, 2, 3].

Naturally, it doesn't allow for mutations or anything fancy, but it is an interesting curiosity.

<comment><USER8> Isn't that the same as using vanilla laziness:

        > let xs = [1, 2, (xs !! 0) + (xs !! 1)] in xs
        [1, 2, 3]

It's order independent as well:

        > let xs = [(xs !! 1) - 1, (xs !! 2) - 1, 3] in xs
        [1, 2, 3]

Why do you need loeb?

<comment><USER7> I guess it finds fixed points over a functor without requiring you to have a reference to the functor (having about the same usefulness as `fix`).

</comment></comment></comment><comment><USER9> Emacs comes with a couple of built in spreadsheets: ses-mode supports emacs lisp formula in cells, org-mode tables allow simple formulas in table cells. Furthermore, there are half a dozen or so other packages that users have written that are older or are more specialized in some way. See [http://www.emacswiki.org/emacs/SpreadSheet](http://www.emacswiki.org/emacs/SpreadSheet).

All of these spreadsheets are, naturally, written in emacs lisp.

</comment><comment><USER10> Actually, the Borland's Turbo C 2.0 for MS-DOS had an example how to implement one.

Nice to see it in OCaml though.

<comment><USER11> I believe all of Borland's compilers all the way back to the original Turbo Pascal came with it.

<comment><USER10> I don't remember seeing it in the Turbo Pascal manuals. Used 3, 5.5, 6 and TPW 1.5.

But it might have been there as well.

<comment><USER11> It's definitely in TP3 for PC. I still have the original floppy disk. I don't remember if it was in the earlier CP/M versions though.

</comment></comment></comment></comment><comment><USER12> One of my good friends worked with some researcher to offload the work to a GPU ten years ago.

I have stumbled on massive spreadsheets in the wild where most of the cells needed to be recalculated when you changed something, and that could take a long time to recalculate.

It seems like most software out there today does this, which is pretty cool.

</comment><comment><USER13> I wish there was a interface for data analysis that people could cut and paste any data into it and it outputs a magical spreadsheet that business people can use.

<comment><USER14> Maybe not quite what you're looking for, but i was surprised at how well Microsoft Excels handles pasting HTML tables.

</comment></comment><comment><USER15> I once had to implement a tiny spreadsheet with cell references and simple ranged formula in Perl given 2 hours. Possibly the most interesting programming test I've had for a job yet.

</comment><comment><USER16> Grok this and you will know everything you need to about spreadsheets: [http://jsfiddle.net/ondras/hYfN3/](http://jsfiddle.net/ondras/hYfN3/)

You'll probably also end up learning a thing or two about JavaScript. Even now, 2 years after I first saw this, I'm seeing new things in it, and I've been doing JS for 20 years.

<comment><USER17> This thing is getting me confused, there seems to be some black magic going on, I can't understand how it can possibly work.

<comment><USER16> Look at the calls to defineProperty, then focus on figuring out why the with() block has been used in the `getter` function.

</comment></comment></comment><comment> anton-107 Does anybody know any good open source spreadsheet implementation with JS+DOM?

<comment><USER18> We´re using [http://handsontable.com/](http://handsontable.com/) in our project and are very happy with it so far.

</comment></comment><comment><USER19> I remember good old CALC.PAS that Borland included as a demo program with early versions of Turbo Pascal

[http://z80cpu.eu/files/archive/rlee/B/BORLAND/TURBO%20PASCAL...](http://z80cpu.eu/files/archive/rlee/B/BORLAND/TURBO%20PASCAL/V1-00/8086/CALC.PAS)

</comment><comment><USER20> I've been thinking recently it would be nice to have an easy to work with open standard for spreadsheets - maybe based on JSON.

NB I know you can get Google spreadsheet data as JSON, but I was more thinking of something where you could have "headless" operation that could be embedded in other applications.

<comment><USER2> You can use OpenDocument Format files. These are supported by most spreadheet implementations. It comes in two variants: 1) a zip file with XML inside 2) a single XML file

[http://docs.oasis- open.org/office/v1.2/os/OpenDocument-v1.2-...](http://docs.oasis- open.org/office/v1.2/os/OpenDocument-v1.2-os.html)

</comment></comment><comment><USER21> Why the "reads" field? It is just filled and cleared, but never used. This also solves GC issues.

<comment><USER22> It seems "reads" is used in "invalidate" to remove the cell from "observers" in the cells in "reads".

<comment><USER21> Yes. I missed that.

Nevertheless, removing the "reads" seems more worthwhile than removing "observers". You want to model the data flow efficiently, not the data dependencies. The dependencies are provided indirectly in the code anyways.

</comment></comment></comment><comment><USER23> Spreadsheets rule. For ClojureScript there is the Javelin library: [https://github.com/tailrecursion/javelin](https://github.com/tailrecursion/javelin)

It has a few novel features like transactional input.

We use Javelin for state management in the hoplon.io web framework.

</comment><comment><USER24> Why do all the simple spreadsheet implementations forbid circular references? A colleague of mine made a very nice solver for temperature and pressure calculations in a transformer which would have been much more complicated without circular references.

<comment><USER25> Presumably a naive implementation would run the risk of having an infinite loop? Have you got any references of the theory proving them safe and/or removing the references?

<comment><USER24> I don't know if an arbitrary set of cell formulas could be proven to converge but I do know from experience that it is a useful technique. The trick is in setting the initial conditions; usually there will have to be one or more cells that contain a check for a wildly out of range value that will force the cell value into a reasonable range. Excel, and other spreadsheet programs, have counters that are used to halt circular calculations after an arbitrary limit. This is really no different than using a while loop to compute a value iteratively.

</comment></comment></comment><comment><USER26> I feel there is an interesting bit (or example) missing: how does the (OCaml) code look that implements the expressions that are evaluated? The code returns a value and the list of cells it read - how is obtaining this list best organised?

</comment><comment><USER27> Every time I read about reactive patterns, I hope that some data dependency or cells like behavior is included, and every time it's just some thin wrapper around basic pub/sub.

<comment><USER28> Can you expand on what you mean by "data dependency" and "cells-like behaviour" in this context? I'm afraid I'm drawing a blank on the terminology.

<comment><USER27> By cells, I mean something like this: [https://common- lisp.net/project/cells/](https://common-lisp.net/project/cells/) (there's even a HN discussion about it here: [https://news.ycombinator.com/item?id=1885974](https://news.ycombinator.com/item?id=1885974))

which basically allows to express interdependencies between data (a.k.a. formulas) in a way that updates sink variables when source variables are changed.

At the moment, I think not even Rx extensions for .NET (which I consider to be the most advanced reactive implementation in a mainstream language) do support this style of computation.

</comment></comment></comment><comment><USER29> I implemented a spreadsheet in react, flux, immutable, and used a command pattern here: [https://github.com/NickStefan/rixif](https://github.com/NickStefan/rixif)

I did not take the approach of cells actually observing each other. Instead I had a recursive function that worked from the entered cell to:

\-- parsed a string DSL of "=sum(B4:B8)" into a javascript function, that pulls some premade functions like sum, vlookup etc, and makes a string list representing what an arguments getter will need to fetch ("a_r3c1_r7c1" ie array, row 3, col 1 to row 7 col 1). The user still just sees "=sum(B4:B8)"

\-- note who "I depend on",

\-- note who "depends on me"

\-- recurse 'outwards', skipping cells in "depends on me" that are still waiting on 'needs recalc' of their own "I depend on".

The update algorithm is not the hard part. Microsoft also has a very detailed documentation of their own update algorithm online (cant find it at the moment though).

The hardest part was updating the string representations of the formulas when you insert a new column or row, and then re-updating each cell's dependencies arrays.

Definitely not a performance problem, but more of a "how the fuck do I wrap my head around all the different ways someone could want to insert, cut, copy and paster here".

One mistake I made was trying to impliment the undo/redo to be totally reversable at every step. So every command stores the way to go both back and forward. In hindsight, I should have just stored forward commands and rebaked from the beginning when someone wanted to go back in time.

I wish I had more time to work on the project, but I've been busy with other work.

notes: \- an excel to JSON parsing library in node :) [https://github.com/NickStefan/parsexcel.js](https://github.com/NickStefan/parsexcel.js)

\- A lot of people mentioning Handsontable.js. That library has some major design flaws. We used it in our git style version controlled spreadsheet app ([http://www.gridhub.xyx](http://www.gridhub.xyx)). Handsontable only takes simple 'number' or 'string' value for each cell. It should have been an object that could store CSS for that cell, formula for that cell, and the value for that cell. I made a few pull requests, but they largely ignored me. The code is odd (they use labels, continue, and other C style code).Handsontable is great only for presenting tables. Its terrible for implementing a full excel clone.

</comment><comment><USER30> Twitter detects the URL as dangerous. O_o

</comment><comment><USER31> Well I think the title should be "How to implement a spreadsheet in OCaml" It's impossible for me to follow the article :(

<comment><USER32> Any programmer with much experience should be able to follow the structure of that article and translate the concepts to the programming language of their preference.

There is nothing language specific here, just think of the OCaml as pseudo- code.

</comment></comment><comment><USER33> Totally of topic to spreadsheets but why oh why does blogspot still change the domain based on ip? (Yes, I know that it is related to selectively blocking certain blogs in certain areas but there has to be a better way to do this, seriously.)

<comment><USER34> BlogSpot is owned by Google, they should know better.

<comment><USER22> google.com does the same.</comment></comment></comment>


Show HN: Proof-of-Work Vote counter widget - <AUTHOR> https://indutny.github.io/vote.wdgt/ <comment><USER2> Interesting but can still be spammed, we need both techniques in play. This plus cookie/ip tagging.

        for (let i = 0; i < 20; i++) (() => {
        	const elem = document.querySelector('.votewdgt');
        	let widget = new VoteWidget(elem);

        	function vote () {
        		console.log('voted');
        		widget._state.voted = false;
        		widget.vote(vote);
        	}
        	vote();
        })()</comment>


Can we have a journalism trust system through Blockchain technology? - <AUTHOR> https://hack.ether.camp/#/idea/journalism-trust-system <comment><USER2> that's ... literally "ideas man" buzzwords glued together.

"please write me how do you think this system should work"</comment>


Harrison Bergeron, a short story by Kurt Vonnegut - <AUTHOR> http://www.tnellen.com/cybereng/harrison.html

<comment><USER2> I don't think I need to mention 1984 by George Orwell, but you might be interested in the movie Equilibrium which has a similar theme: <http://www.imdb.com/title/tt0238380/>

</comment><comment><USER3> This isn't news, but it is a classic story about "equality" gone awry. Required reading.

</comment><comment><USER4> I had to read this in 7th grade when we were doing a unit on Utopias, but had long since forgotten the title. I've tried many times to find it again after trying to describe it to people. Thanks so much for posting it!</comment>


Black Hole Imaged for First Time - <AUTHOR> https://www.universetoday.com/134996/black-hole-imaged-first-time-event-horizon-telescope/ <comment><USER2> I'm super impatient to read this kind of article.

all I want to see is a picture and yet, they don't show you any.

this is the fourth time I got tricked by similar articles on this topic.</comment>


StackOverflow Man Remakes Net One Answer at a TIme - <AUTHOR> http://www.wired.com/wiredenterprise/2012/07/stackoverflow-jeff-atwood/ <comment><USER2> The mere idea of creating the site was revolutionary. The platform and the concept of creating a site where you house questions and FOCUS on the quality of questions is pure genius.

Making it an addicting game is great too. People love the social proof.

I use stack overflow and its sister sites nearly every day. On theoretical computer science stack exchange its allowed me to ask better questions. It has increased my research maturity by one hundred times. I know more about topology and I am sincerely in debt to the quality of this concept and platform.

Cheers to Jeff. This is his magnum opus. I can't wait what he thinks of next.

<comment><USER3> It's certainly better than the alternatives that preceded it. I can't tell you how many times I've searched for <topic>, found my question in a forum about <topic>, and instead of answers or straightforward discussion I find a bunch of attitude from high-postcount forum jockeys saying "use the search function", "RTFM," changing the subject, and otherwise contributing lots of useless static noise (often they won't even bother to actually link a FAQ).

</comment></comment><comment><USER4> Ironically I see this the day after I've decided to quit Stack Overflow due to interacting with moderators.

For the last few months I've been in the habit of searching for algorithm questions, and answering them for fun. And then [http://stackoverflow.com/questions/11314077/algorithm-for- ex...](http://stackoverflow.com/questions/11314077/algorithm-for-exclusion-of- numbers/11317787) came along. It was the most fun algorithm question that I had seen in the last week. I put a fair amount of effort into rewriting a response I learned a nice trick from into a response that programmers with no theoretical background should be able to understand. But 4 moderators decided that it should be closed despite multiple votes, stars, and so on.

I then asked at [http://meta.stackoverflow.com/questions/138678/can-we- please...](http://meta.stackoverflow.com/questions/138678/can-we-please- reopen-this-programming-question) and the immediate response was that I got downvoted into oblivion, the question got deleted by clearly senior members of the community (it since has become undeleted, but there is no question what the "wise elders" think should have happened), and I got a lesson in what they really do and do not want to see on their site.

I understand what they are aiming for, and clearly what I find fun is simply not a fit for what they want on their site. The site that they'd like me to go to instead is <http://http://cs.stackexchange.com/>. I looked. It is practically dead in comparison. What little does appear there seems strongly geared towards computer science students. Given that I'm self-taught in CS, I doubt I'll stay there.

So, goodbye Stack Overflow. I wonder how many other people you don't see there any more.

<comment><USER5> I don't see your problem.

They are trying to put specific questions to specific stackexchange subsites. So, there is <http://programmers.stackexchange.com> for conceptual questions , <http://cs.stackexchange.com/> for "easy" computer science and <http://cstheory.stackexchange.com/> for "hard" computer science.

I don't see the problem in trying to split the horde of questions into more subsites.

<comment><USER6> The problem is that by splitting the community into these micro sites they are making the whole stack-exchange universe less valuable and interesting.

First, the idea that questions can be easily classified into discrete categories is bullshit. Why have they set it up so that multiple tags can be assigned to individual questions? Because most, if not all questions span genres. Not only is it possible for a submitter not to know what category a question goes in, but it is also possible for the same question to legitimately belong in multiple categories.

Most importantly, however, the populations asking and answering these questions (or that you want asking and answering these questions) are not different. Do you really think that people answering questions under "programmers" and under "cstheory" wouldn't also be suitably answering questions under "cs"? Would a question posted under "cstheory" not be useful to people posting under "cs"? At what point in one's academic path does one transition from asking questions in "cs" to doing so in "cstheory"? After your second year of college, after graduating, or after being accepted to a phd program?

Think about it mathematically. Take 1,000 people posting in stackoverflow, divide that population in half and distribute one half of them equally between programmers, cs, and cstheory. The total possible connections and interactions between people in communities of size 500, 167, 167 and 166 is far fewer than the total possible connections and interactions within a single community of size 1000.

I had actually not heard of there being different stackexchange sites for "programmers", "cs" and "cstheory" before reading your comment. What a ridiculous thing to do, to split up these sites. And then to shut down popular questions inside stackoverflow in order to push people into these marginal sites? Talk about shooting yourself in the foot.

<comment><USER7> The example I like to use here is Skiiers vs. Snowboarders. Both are about going downhill really fast on snow, so should the all be on they all share the same site? How different could they be?

I'd argue that Snowboarders have a very different _culture_ than Skiiers, with their own sets of terminology, equipment choices, and social norms. That's why they need a community to themselves, with their own moderators, reputation systems, and ideas of what kinds of questions they find on or off topic.

</comment></comment></comment></comment><comment><USER8> "But the biggest reason for the site's success is the use of game mechanics."

No. No no. No. It isn't.

The biggest reason for the site's success is that it provides a really broad range of useful and detailed content in a useable (and search-indexable) format and doesn't charge for it. It helps that there is a community of thousands (millions?) of developers who need this information on a daily basis and keep going back to the site out of necessity.

If the lesson you take from Stack Overflow is "Wow, I should really add game mechanics to my site. That'll do the trick!" you are simply beyond help.

<comment><USER9> Well, you're right, but:

"provides a really broad range of useful and detailed content"

...which it gets from users. Who are motivated to contribute using game mechanics.

No, you can't just slap a points mechanism at any site and magically make it great. But "get credit for your work" is a motivation that is basic to human nature.

I say this as a longtime user with more than 10k points. I like helping others, but I must admit that having points to show for it is also a motivation.

<comment><USER10> It's slightly embarrassing, but the first time I answered a question, got an upvote and a check mark, well, it felt pretty good.

<comment><USER7> No reason to be embarrassed!

Learning from/teaching your peers, while leaving useful breadcrumb trails for other people to follow -- that's supposed to feel good!

<comment><USER9> That's what I like about SO's points: they prove my answers have helped someone, which does feel good. It's not like an actual video game, where you're like, "Hey, I got 5,000 points, which means... absolutely nothing outside the game."

</comment></comment></comment></comment></comment><comment><USER11> Is it just me or has the quality and quantity of answers dropped in the past year or so?

I find SO perfect for the simple problems you have when you're new to a language/framework/whatever but when you get into the real nitty gritty problems its like nobodys home.

<comment><USER12> I have found lots of good answers on SE sites (almost all completely via Google) and I don't think it's getting any worse. I do find it hard to participate in the sites as I almost never have a question that is not already answered, which is a drag because without sufficient rep you can't vote on answers, and I don't want to just add comments because it feels like I'm just adding noise.

I did finally get enough rep on Server Fault that I can upvote things, which may help there. But I don't want to go through a concerted effort on each and every SE site I care about in order to participate. Maybe that's what SE wants (I know they want strong communities, I listened to the SE podcast since the very beginning) but it feels like a limiting factor to me.

<comment><USER13> You can vote before you can comment (15 and 50 rep generally speaking).

Once you get over 200 rep anywhere in the network, you'll automatically get a +100 rep bonus on other sites you join so you don't have to "grind it out" for the basic privileges.

The low rep hurdles (anything < 100) are basically "know how everything works" bars (the number of people who mistake "answer" for "forum-style reply" and "community close votes" as "moderators" backs up the need for such hurdles), the high ones (down vote, edit, close, etc.) are the "strong community" ones.

<comment><USER12> Thanks, I wasn't aware of some of those numbers. I still find the question hurdle to be the biggest... I personally just haven't found the time or energy to go and find questions I can answer, or do research necessary to answer.

My gut feeling is that SE's post structure, handling of reputation and permissions is overly complex... feature creep in a way.

I am glad to hear that your rep can affect other sites rep. I feel like the fractured approach doesn't work very well and it is good to see some improvements in account handling from the beginning like: \- Easier account creation and management(openid feels very arcane and this has smoothed out a lot since the beginning I think) \- Logging you back on when you visit (I guess they changed how they did session cookies or something, I get these 'welcome back' messages now) \- Cross-site notifications and relationships

Maybe if they had gone with centralized SE accounts at the beginning with per- site reputations it would have been simpler. The current method might be because of how SE evolved from the 'original trilogy'.

</comment></comment></comment></comment><comment><USER14> What a lousy headline. And the article is almost content-free.

<comment><USER15> Clearly a paid-for article. Jeff is onto something these days and needs some press.

Regarding the down-votes: it's the second time in a week that Jeff publishes something free of any interesting content and makes it big enough to reach a large audience while mentioning each time that he's onto something but can't say anything about it. If that's not a PR exercise, please tell me what it is.

<comment><USER9> PR exercise, maybe. "paid-for" is an accusation you can't back up and shouldn't make.

<comment><USER15> You're right, it's just my opinion based on the tone of the article and what I perceive of Wired. I'd change the wording to reflect that if I could edit the post. Also, this was not really meant as an accusation in the sense that I make no value judgement on Jeff based on what he did or did not pay for the article (but I hear I'm strangely wired (yeah, hum) when it comes to translating my opinions into judgements; YMMV so, you've got another point there because I should be more cautious).

</comment></comment></comment></comment><comment><USER16> Currently -" 2 million registered users and averages 5,000 new questions per day and 10,000 new answers per day"

2008 - "By the end of 2008 users were posting 100,000 answers per day"

I find that hard to believe? Surely it'd be more like the other way round? Or has it really dropped off 4 years on?

<comment><USER17> Sorry, this is an error. It should have been 100,000 per month by the end of 2008 and 10,000 per day currently (so around 300,000 a month).

</comment></comment><comment><USER18> _"The site zoomed past in Experts Exchange in terms of traffic in summer 2009, according to Alexa data Atwood posted to the StackOverflow blog."_

It looks even better nowadays. Experts-exchange now looks like statistical noise compared to stackoverflow: [http://www.alexa.com/siteinfo/stackoverflow.com+experts- exch...](http://www.alexa.com/siteinfo/stackoverflow.com+experts- exchange.com#trafficstats) Serves them well for hiding community-provided information behind a paywall.

</comment><comment><USER19> > "I have some things in the hopper," he says. "Communities are still the holy > grail. What if you could make every site on the internet as good as it can > be?"

Speculation on what that might be? A curated disqus competitor, or?

</comment><comment><USER20> Unless the Internet involves using PHP, in which case he'd rather kill it :-)

</comment><comment><USER21> Don't learn to code. Otherwise, you'll end up looking like this man: <http://www.wired.com/wiredenterprise/?attachment_id=24755></comment>


Show HN: The easy way to track and visualise your mental wellbeing - <AUTHOR> https://vividwell.com/ <comment><AUTHOR> Hi all! I'd love to share my latest passion project with you..

For a long time I have put up with severe anxiety and recently much more acute OCD. As a bit of a data nerd I wanted an app that would help me to track the effects that lifestyle has on mental health and also give a more objective view of the effectiveness of medicines and therapy.

I built it for myself but I hope that by making it public it will help at least one other person better understand their mental wellbeing on a road to recovery. You can sign-up for free at [https://vividwell.com/](https://vividwell.com/).

Please pass it on if you know someone who could make use of it! 🧠

Early stages so far but lots more features in the pipeline. In the next few days I am introducing PHQ-9 & GAD-7 tests. Also scheduled are Fitbit and Amazon Alexa integrations.

No budget for native app store apps yet but I have gone to a great deal of effort to ensure that the process is very smooth as a homescreen web app for now!

</comment><comment><USER2> Hey, I like the idea, but I have some problems with the site.

First - I don't see a preview/explanation how it works.

To see it, I need to register. But the registration form is heavy and uninviting.

Also, the particles effect on the main page feels like a scammy ICO.</comment>


HTML5, H.264 and Free Software: it's the wrong game - <AUTHOR> http://jan.rychter.com/enblog/2010/1/25/html5-h264-and-free-software-its-the-wrong-game.html

<comment><USER2> The blog claims that you can't develop a video codec without tripping over patents but then links, approvingly, to an article written by the lawyer who okayed using Theora in Mozilla, talking about why he thinks there isn't any patent problem with Theora.

(At least the original author points out this patent situation is a terrible situation, I've seen this same point made repeatedly with responses that range from fatalistic acceptance through to a bizarre sense of triumph over _freetards_.)

<comment><AUTHOR> If you read that article carefully ("What's the Problem with Theora?"), you'll notice that while significant research has been made, no one can actually be sure there are no submarine patents. The author doesn't say he "think there isn't any patent problem with Theora", he very carefully says that he hasn't found any.

And that is precisely my point — since you can never be entirely sure, using Theora (or VP6, or any other video codec for that matter) won't solve much in the long term.

BTW, as a related note it should be mentioned that at least Theora developers chose the right license for this kind of code — BSD. This avoids the huge landmine that x264 has set up for itself: the anti-patent clause in the LGPL/GPL (section 7 of the GPL).

<comment><USER3> > _And that is precisely my point — since you can never be entirely sure, > using Theora (or VP6, or any other video codec for that matter) won't solve > much in the long term._

That's just silly.

It's easier to defend against a submarine patent of which you knew nothing about, than to defend against MPEG-LA in case you just breached their license. Not to mention that nothing guarantees that you won't get sued with a submarine patent even when you have a legally licensed H.264

Plus ... we simply don't have too many patent threats that go to trial. The best case scenario would actually be for Theora to become a widely popular standard, and then for Mozilla to get sued for it ... the public needs such trials, and the supreme court of justice also needs such trials ... how else would could they realize that software patents are so dumb? The reality is that such threats are usually settled out of court.

Not to mention that when a company has the resources and the trial goes public gathering lots of supporters, the patent troll tends to get screwed (see SCO vs Novell).

<comment><USER2> As a general reply, since you three all used the phrase _submarine patent_ , I'm fairly certain that term gets thrown around in a misleading manner.

A submarine patent isn't just someone coming along and saying _I have a patent on what you're doing so stop it and/or give me money_. The technical term for that is just "patents", that's what they're for.

A _submarine patent_ is a particular type of patent hi-jinx which is no longer possible in the US (though some may still be waiting to surface, from the time it was possible to create them):

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

</comment></comment></comment></comment><comment><USER4> Eben Moglen [1] predicts major patent reform is coming. I thought this video a great perspective on historical patent law in the US and the absurdity of software patents. It's lengthy but well worth the viewing.

[1] <http://www.isoc-ny.org/?p=1009></comment>


Inside Apple's Live Event Stream Failure - <AUTHOR> http://blog.streamingmedia.com/2014/09/why-apples-livestream-failed.html

<comment><USER2> The comments are far more insightful - that guy doesn't have a clue what he is talking about.

<comment><USER3> Exactly, I started wondering if it was satire half way through.</comment></comment>


30-60-90 Day Presentation in PowerPoint, Google Slides and Keynote - <AUTHOR> https://youexec.com/presentation-templates/30-60-90-day-plan-template <comment><AUTHOR> When you prep for an interview, start a new job or jump on a long-term project and need to organize and prioritize your processes, a 30-60-90 Day Plan is your one size fits all solution. Utilize it to list and visualize goals, set realistic deadlines and strategize for success.</comment>


A taste of Rust for C/C++ programmers - <AUTHOR> http://mainisusuallyafunction.blogspot.com/2014/10/a-taste-of-rust-yum-for-cc-programmers_29.html <comment><USER2> Rust is important, but that article isn't very good.

Rust is at the level of C/C++, without an elaborate run-time system. It solves the three basic problems that cause most failures in C/C++ programs: "How big is it?", "Who deletes it", and "Who locks it". It does this without throwing a garbage collector at the problem, which means it can be used for operating systems and hard real time.

The basic memory management mechanism is single-owner pointers, with language enforcement to make this work even as pointers are passed to functions. (Pointers passed to functions are "borrowed"; you can't keep a copy whose scope outlives the function return.) For more complex ownership, there are pointers with reference counts. For data shared across thread boundaries, there are atomic, locked pointers with reference counts.

We need Rust. We're still seeing CERT advisories on buffer overflows in C/C++ programs, after almost four decades of C. The threats are getting worse, too; it's not script kiddies any more, it's governments.

I just hope the Rust crowd doesn't screw up.

<comment><USER3> You are correct and many Rust developers and contributors are aware of that point, but the OP wants to highlight the often neglected portion of Rust that may appeal to C/C++ users. Not every C/C++ user would move to Rust just for the safety (I _did_ , but their mileages may vary). Some people look for the better abstraction, some look for the performance, and some others look for just fun. Rust is trying to appeal to many of them, not just the paranoid C/C++ developers; I think this article is very adequate for them.

<comment><USER2> _not just the paranoid C /C++ developers_

You're not paranoid when they're out to get you. The most recent US-CERT advisory:

Alert (TA14-300A) Phishing Campaign Linked with "Dyre" Banking Malware (Adobe Reader vulnerability) "...memory corruption vulnerabilities that could lead to code execution".

This has been going on for over thirty years. It's time for the suffering to stop.

<comment><USER4> The sad part of this whole history is tha thirty years ago, if you didn't had access to an UNIX system, C didn't had any value.

Those of us in other systems already had better alternatives, but then UNIX was pushed into the enterprise and succeeded at that, with the outcome of thirty years of buffer overflows.

<comment><USER5> And us who were born later than that get taught that C was the only viable and logical option at that time, from a technical standpoint.

<comment><USER2> There are a sizable number of programmers who believe a language has to be unsafe to be fast. This is because, for several decades, most compilers with subscript checking were really dumb about it. This started with Berkeley Pascal for BSD, which made a subroutine call for every subscript check and gave Pascal under UNIX a bad name. Good Pascal compilers were hoisting subscript checks out of loops in the 1970s, but not on UNIX.

Then there was the C++ approach, trying to do it in templates. That leads to dumb subscript checking, because the compiler has no idea that the "if" involved in subscript checking is a subscript check and could potentially be hoisted out of the loop and done once at loop entry. For most math code, where this really matters, you can do one check at the top of the loop. Maybe zero checks, if the upper bound is coming from some "range" or "len" construct.

At last, smart subscript checking is coming back. This is partly because languages now usually have a "do this to all that stuff" construct ("for i in foo ..." or similar) and it's a no-brainer that you don't need to check subscripts on every iteration. The Go compiler at least has that.

How smart is the Rust compiler about this? It potentially could be very smart.

This is important. Otherwise, people will want to turn subscript checks off for "performance".

<comment><USER5> It's idiomatic in rust to use iterators rather than loops. When it comes to iterators that for example iterate over a vector/array, there is no bounds- checking. I don't know if that is implemented by explicitly opting out of the bounds checking in the implementation of the iterator, or by some other means. In either case, bounds checking is turned off when the "looping" is encapsulated in iterators, but not for arbitrary indexing (which is a good reason not to use explicit indexing when you don't have to, of course).

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> The best test of a language is to see if you can write the compiler itself in the language (step 1) and also if you can write the runtime system in that language (step 2). IMHO, both are required for a language to be considered a good "systems language", and a worthy competitor of e.g. C++.

I know that the Rust compiler is written in Rust (step 1), but I'm not sure about the runtime.

<comment><USER7> Rust is yes to both, although 'the runtime' is disappearing, replaced by just using the system APIs directly (that is, Rust will have no runtime beyond what C/C++ has). The non-Rust code in the main distribution is:

\- LLVM for the complier

\- hoedown (markdown parser/renderer) for the documentation generator

\- miniz for compressing the metadata stored in each library

\- a few other tiny wrappers[1] for which I see no reason other than inertia/low-priority for translating into Rust (e.g. there would be no particular build-system benefit to Rustifying them because C/C++ compilers are needed for the other things anyway)

[1]: [https://github.com/rust- lang/rust/tree/master/src/rt](https://github.com/rust- lang/rust/tree/master/src/rt) (the 'rt' = runtime name is a holdover from when the runtime was not written in Rust)

<comment><USER8> > beyond what C/C++ has

Whoa now, let's not go lumping C and C++ together! C++ has quite a heavier runtime to manage stuff like exceptions and RTTI! (though, to be honest, I don't know what's a C++ program's runtime requirement if compiled with -fno- exceptions, -fno-rtti and the like)

<comment><USER4> C also has a runtime. It is called UNIX (POSIX).

<comment><USER9> I define a language without a runtime as one that can run on bare metal without restricting yourself to a subset of the language. To use C on bare metal, the only thing you can't use is the standard library, which is not a part of the language itself (its not in the grammar, you don't need to make sure to avoid certain keywords). More simply, any program written without using an import needs to work without an operating system under it.

C++ requires runtime support because if you remove the underlying system, it becomes stunted. Keywords like 'new' and 'delete' stop working entirely, and so a program with no imports is not guaranteed to work. Any language with a GC falls under this, obviously. Rust, if I remember right, requires restricting yourself in order to do things like kernel writing.

<comment><USER4> How do you use ANSI C on bare hardware without help from Assembly (thus a mini-runtime) or language extensions?

For the purposes of interrupt handling, IO ports (not all systems have memory mapped IO) and register access.

<comment><USER9> That's not what I mean. I mean that any C you write will run with no problems as long as it doesn't depend on an outside library. It's not possible to do anything that needs interrupts, IO, or memory without an external library, which if you're that low you're gonna be writing yourself either way. Accessing individual registers is also a special behavior that doesn't really fall under using C, and regardless that totally possible without a runtime (the __asm__ keyword, thats all compiler driven).

If you're going to get so specific as to call the x86 processor a runtime, then there's no point in arguing.

<comment><USER4> > It's not possible to do anything that needs interrupts, IO, or memory > without an external library, which if you're that low you're gonna be > writing yourself either way.

That external library is called a runtime in compiler design classes.

> Accessing individual registers is also a special behavior that doesn't > really fall under using C, and regardless that totally possible without a > runtime (the __asm__ keyword, thats all compiler driven).

The __asm__ keyword is not part of ANSI C, it is a language extension.

Not all C compilers offer support for inline assembly and in fact, a few commercial ones do not.

> If you're going to get so specific as to call the x86 processor a runtime, > then there's no point in arguing.

Where did I mentioned anything like this?

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> I recently started looking at Rust. I somehow had this idea in my head that it was a weird language, but up close, it is quite a friendly beast. Interesting, though.

<comment><USER11> It is indeed a weird language. I've been rusting heavily for about a week (doing Matasano crypto challenges) and I'm still puzzled at lifetime errors.

Managing lifetimes is hard to reason about (though this is not a problem with Rust, but with lifetimes... Rust just makes it explicit.)

As soon as you start using generics things can quickly get out of control. Here's one of my function signatures:

        pub fn xor_together<'a, 'b, 'r, A, B, R, T, U>(iter_a: T, iter_b: U) -> Map<'r, (&'a A, &'b B), R, Zip<T, U>>
            where A: BitXor<B, R>,
                  T: Iterator<&'a A>,
                  U: Iterator<&'b B>

If you get those lifetimes wrong, the error propagates and you end up having lifetime errors farther in your call chain, which are quite hard to debug. I'm not even sure those lifetimes are 100% right.

Some other weird things include closures. There are several types of closures, not interchangeable with each other (nor with fn) and honestly I don't understand them (and couldn't find docs to explain them). I hope this changes as Rust stabilizes.

I'm loving it so far, but boy... how hard it is.

<comment><USER12> Closures are soooo messed up right now, because we're in the process of replacing them wholesale but the new system is only half-implemented. As a result you're forced to choose between using closures that work but suck (the old system) or closures that don't suck but don't work (the new system). So don't judge us on closures just yet. :)

<comment><USER13> I hope that when Rust hits 1.0 -- they take backward compatibility exceptionally seriously. The pre-1.0 path has been exceptional wild ride, and it has made me a bit gun shy about the language as a whole.

I am no stranger to pre-1.0 languages, I have worked with lots of them, but none have been as frustrating (or interesting) as Rust... the question as to will Rust grow into a production language or an academic toy still remains an open one in my book.

Reserving judgement until 1.0 is out.

<comment><USER14> Look what just appeared [http://blog.rust- lang.org/2014/10/30/Stability.html](http://blog.rust- lang.org/2014/10/30/Stability.html)

<comment><USER13> I can't decide if that terrifies me or inspires confidence. But, it is great to see it on the radar and out in public.

</comment></comment></comment></comment></comment></comment><comment><USER15> Much like Go! i'm not a big fan of languages whose includes are managed as such:

        [dependencies.lazy_static]
        git = "https://github.com/Kimundi/lazy-static.rs"

Does Rust, like Go, have tools for freezing dependencies? So when the git project changes, you're not left wondering why a project has sudden bugs not seen before?

I love the idea of how easy these can be included in a project, but I dislike leaning on a public repository that may change at a moments notice.

For as much as I hate Maven for some reasons, I do appreciate the ecosystem and the ease at which I can...say, ask for a specific version of a specific artifact - ensuring my application will always build.

<comment><USER7> I'm not a Go expert at all, but I believe Cargo (the dependency management tool) far surpasses Go in this respect.

One of the _main_ design goals for Cargo is reproducable builds. E.g. the first time anything is build Cargo will create a Cargo.lock[0] file that fixes the dependency at the exact commit that the build used, so one can come back in a year and rerun to get the same result (assuming upstream hasn't edited their history). Upgrading/changing a dep then requires explicitly calling `cargo upgrade`.

One can also manually specify versions and exact commits[1] in the Cargo.toml (the file written to specify those deps), e.g.

      [dependencies.lazy_static]
      git = "https://github.com/Kimundi/lazy-static.rs"
      version = "1.1"

[0]: e.g. [https://github.com/servo/servo/blob/master/Cargo.lock](https://github.com/servo/servo/blob/master/Cargo.lock) (machine generated/consumed)

[1]: [http://doc.crates.io/manifest.html#the-%5Bdependencies.*%5D-...](http://doc.crates.io/manifest.html#the-%5Bdependencies.*%5D-sections)

<comment><USER15> Thanks! I would much rather prefer being forced to specify a version than not. Consider building with more than one developer in mind. Or a developer joins the team a year down the road. Why waste anyones time not taking a moment to say "no we need v.1.1".

Good to see none the less!

TIL.

<comment><USER16> You are effectively forced to specify a version thanks to the lock file. It just assumes that in the moment you specify the dependency you mean the version you currently have access to. This is the same mechanism as Ruby with Bundler uses, and it is very friendly to multi-dev teams, the version they need to be on page with everyone else is right there in the lock file.

<comment><USER17> To further clarify a detail that might not be obvious, the lock file is designed to be committed.

<comment><USER14> That's true and not true: [http://doc.crates.io/faq.html#why-do-binaries-have- cargo.loc...](http://doc.crates.io/faq.html#why-do-binaries-have-cargo.lock- in-version-control,-but-not-libraries)?

<comment><USER16> Is there a rationale for not just ignoring the lockfile of dependencies rather than insisting they not have them at all? I actually have always found this duality in bundler irritating, as when I work on a gem with someone I still want to be able to communicate an ideal dependency state. Not hanging a lockfile makes this difficult.

<comment><USER14> Well, if your gem didn't work with a particular combination of dependencies, that should be reflected in the version constraints. I'm not sure what an 'ideal' state is.

I'm not 100% sure if there's an official answer, exactly, but it's more representative of the state of affairs. If you do check a lockfile in, it will be ignored.

<comment><USER16> By ideal here I mean something more like known-good. A baseline of expected behavior against which I can compare. The permutations of version combinations in a typical 'production' dependency specification can get very large, and there just as much benefit to having devs start from the same working version for a library as a program.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER18> I have pretty much converted all my c++ code to rust. Hard to believe Rust is so approachable!

<comment><USER19> Do you have any examples you can publish?

</comment></comment><comment><USER20> > When we pass or return an Event by value, it's at worst a memcpy of a few > dozen bytes. There's no implicit heap allocation, garbage collection, or > anything like that.

I'm confused by this (total Rust newbie): wouldn't pass by value imply creating a new copy of the String with its own heap-allocated buffer? What does "no implicit heap allocation" refer to?

<comment><USER7> Ownership of the String is moved and the original variable cannot be used until it is reinitialised, it is not copied. Pass by value is literally always a shallow byte copy in Rust (not following pointers) and the Rust compiler must disallow further use of many variables to ensure safety.

<comment><USER20> Right! Thank you!

</comment></comment></comment><comment><USER21> I have a question about 1.0. I know you can define your modules' stability, but how much of the modules that will be shipped with 1.0 will have LTS? Specifically I am wondering if I follow [http://doc.rust-lang.org/guide- plugin.html](http://doc.rust-lang.org/guide-plugin.html) AFTER 1.0 if I'll still have to keep up with point releases because I am using the internal AST.

<comment><USER14> Everything has stability markers. Currently, user defined macros and syntax extensions are not marked as stable. Syntax extensions will absolutely _not_ be stable at 1.0, macro stuff is a bit less clear, expect to hear about this soon.

That post is about syntax extensions, so yes, you'll have to be using the nightly build if you want to keep using them. They'll be considered high priority to stabilize, but given that they rely on compiler internals... I actually argued against writing that guide because of this, but eventually said okay.

</comment></comment><comment><USER22> Is anyone using Rust for commercial products of embedded systems? It looks like a nice language (at least to try), but I don't find it in many open- source projects. Are there any reasons besides being new and not-so-popular for that? Is it compatible with C/C++ libraries (I mean in practice, not that they _should_ work)?

<comment><USER23> Its perfect for that use, but 1.0 is still months away. No one is using it _yet_...

<comment><USER14> There are two big production deployments of Rust, and a number of smaller ones. The two are OpenDNS and Skylight.io.

That said, yes, doing so before 1.0 takes a special kind of organization.

</comment></comment></comment><comment><USER24> How stable is Rust these days? I am watching it from a distance (I have no suitable project ATM) and I had the impression that the syntax went through some major changes not too long ago (a year?). Is this a thing of the past now?

<comment><USER19> [http://blog.rust-lang.org/2014/09/15/Rust-1.0.html](http://blog.rust- lang.org/2014/09/15/Rust-1.0.html)

</comment></comment><comment><USER25> what the hell am I reading?

<comment><USER15> A painfully simple logger that makes use of Rust language features to ensure that it's allocated only when it is used, is RAII safe, and is mostly memory safe.

A lot of boilerplate C or C++ code was eliminated, and while we never see the actual assembly, we're told that it would generate similar instruction sets to the C C++ implementations.

So we should get pretty good performance out of it!?

<comment><USER26> I mean, it'll produce similar assembly to C++ code that does the same, but grabbing a mutex for every log message is not going to give you amazing performance. That's okay in this example, because the log seems to be compiled out by default and only used for debugging Servo, but if you're gunning for performance I'd suggest using thread-local storage to store logs per thread without any atomics and aggregating on a timer.

<comment><USER15> true and it does suffer from deadlocking (which the author states is a possibility, if one thread never releases the mutex)! Either way, it is a very lightweight implementation and Rust does shine here.</comment></comment></comment></comment>


Ask HN: Anyone ever used jQuery ThemeRoller for a project? - <AUTHOR>

I'm starting up a re-design (finally) of ShouldIGetTheBook(SIGTB), however, I lack any real artistic skills.  I've been playing with a lot of the jQuery UI stuff lately and it seems pleasant looking and easy to hook in to.  Anyone out there have any experience with it?  How did it work for you?  Does the end product look professional (not just some run of the mill theme)?  Actually, any thoughts at all on using jQuery ThemeRoller to design your site would be great.<p>Thanks! <comment><USER2> Shameless self plug of something that I released yesterday that is REALLY relevant to your needs: <http://news.ycombinator.com/item?id=1227712>

Overall I think that ThemeRoller is good at making themes for "coloured" designs like Mint (soft green), eBay (big and yellow) etc. I think that you could produce something that would match SIGTB easily, because your gradients are big and soft. You will never get something as crisp as Aristo or Ace without getting down to a pixel level and incorporating images.

Check out my other post for how we I use jQuery UI @ work. <http://tumblr.com/xjl8127l8>

<comment><AUTHOR> This is great! Thanks!</comment></comment>


Github update - no more private keys - <AUTHOR> https://github.com/search?q=path%3A.ssh%2Fid_rsa

<comment><USER2> Well, this is a good response time from Github I guess. Unfortunately, I wanted to show my friend how ridiculous some people track their private keys in their repos and didn't make it in time :( On a positive note, Google still indexes these repos :)</comment>


Google Interferes with Its Search Algorithms and Changes Your Results - <AUTHOR> https://www.wsj.com/articles/how-google-interferes-with-its-search-algorithms-and-changes-your-results-11573823753?mod=rsswn <comment><USER2> (Behind a paywall, gurrr...) The article makes the point that Google's general indexing algorithm is augmented to handle special cases Google (or others) have identified. The author seems argues without proof that this is bad.</comment>


Iran 1953 Covert History Quietly Released - <AUTHOR> https://fas.org/blogs/secrecy/2017/06/iran-frus-release/ <comment><USER2> A US government agency quietly tweeted about it. What more do you want?

[https://twitter.com/HistoryAtState/status/875473063156084736](https://twitter.com/HistoryAtState/status/875473063156084736)

<comment><USER3> Tweeting quietly is an awesome skill to have

</comment></comment><comment><USER4> For those who are not familiar with the story, it starts with the Iranians democratically electing a president, Mohammad Mosaddegh. But he was too friendly with the Soviet Union and threatening to nationalize the oil industry, so the intelligence agencies of the US and the UK helped sponsor a coup to overthrow him and install the Shah as dictator. But the Shah was cruel and oppressive, and was eventually overthrown in the 1979 revolution and replaced with the present Islamist government.

Not surprisingly, this history left the Iranian people very suspicious of the US government. However, until this document release, the US government has denied it was involved in the coup.

The U

</comment><comment><USER5> "All The Shah's Men" by Stephen Kinzer is a damn good read if you're interested in the events of 1953 and the 1979 revolution:

[http://amzn.eu/exfXKfr](http://amzn.eu/exfXKfr)

</comment><comment><USER6> \- "The public and scholarly community owes a great debt to not only the remarkable effort and perseverance of literally generations of State Department historians and the [History] Office's leadership, but also their collective commitment to historical accuracy and transparency," said Prof. Immerman.

And that is why Americans are fast becoming world-wide discredited.</comment>