Let's Build a Simple Interpreter, Part 1 - <AUTHOR> http://ruslanspivak.com/lsbasi-part1/ <comment><USER2> > "If you don't know how compilers work, then you don't know how computers > work. If you're not 100% sure whether you know how compilers work, then you > don't know how they work."

What nonsense. If you don't know how quantum mechanics works, you don't know how transistors work. If you don't know how transistors work, you don't know how computers work, etcetera.

<comment><USER3> Most electrical engineers do go through quantum mechanics in their modern physics classes, in order to understand how transistors work...

<comment><USER4> I was thinking that same thing, and because I was minoring in CS during my EE degree I also got to do the compilers class with the rest of the CS majors (and a class on interpreters).

But I get that you can understand a lot about computation without understanding compilers. Just as you can understand a lot about circuits without understanding quantum mechanics.

</comment></comment></comment><comment><USER5> Here is a link to the source code for a _C like interpreter_ that I many years ago:

[http://www.zeusedit.com/tools.html](http://www.zeusedit.com/tools.html)

Is it any good? Not really. There are many far better interpreters out there to choose from.

But it was my _first and last_ ever interpreter, written some 20+ years ago, written when I was fresh out of university.

Was it hard to write?

I did not think so and I only had an engineering degree ;)

Now lets try to write a compiler. Suddenly things get far more difficult!!!

<comment><USER6> A compiler isn't actually that much more difficult than an interpreter. Extending an interpreter to compile instead of interpret is not that much code, and the code won't be that difficult or complex either.

The hard part is making the generated code perform well, which requires much more work.

</comment></comment><comment><USER7> Interpreters are fun, but still too complicated. There's a simpler form, which is called 'interplets' around here. It has a parser, then directly generates an object instance for every semantic element e.g. variable, control statement etc. The objects get linked, and they have an 'execute' method. Voila! Runs about 10X as fast as an interpreter.

<comment><USER8> Well, if you want a _really_ simple interpreter there is always the option to go Reverse Polish (e.g. Forth/PostScript).

Of course, this makes the implementation simple while arguably pushing some of the work onto the programmer using the language - but RPN languages can be rather fun in a Lisp kind of way.

<comment><USER9> For beginners, I would go for a recursive descent interpreter (just made up that term) that implements a 'little language'. That is something on the complexity of a shell without looping or variables or of parsing argv:

      - read a line
      - do a switch on the first word of the line
      - inside each switch, make up your own syntax, parse the
        remainder of the line, and execute it or issue an error
        message and abort.
        Feel free to cheat by using scanf to parse integers.

Iteration 2 can add printing the line number in error messages.

Iteration 3 can add if/then and looping: keep the lines in an array, and add 'goto' to the list of commands, and hack the jump into the interpreter loop by adjusting a global variable from inside the 'goto' statement.

Iteration 4 can add the 'let' command and variables. Naming them A through Z for simplicity is an option.

Then, add simple assignments of the form

      let a = x <op> y

where x and y are liberals or variables. For now, don't bother with expressions with multiple operators.

Next, add statements of the form

      y = f(x)

That gives you a sort-of 70's Basic that can be quite useful and fun to use.

Only then would I start introducing grammars, the word 'parse', etc.

<comment><USER10> And what's a point in such a complex approach, if a proper interpreter (or, even better, compiler) is much simpler?

<comment><USER9> Complex? Its building up from almost nothing, and shows how simple an interpreter can be.

If you start with a grammar, you lose half your audience within 5 minutes (numbers made up)

If you start with a program that reads a text file and plays notes for lines contaning do, re, and mi, part of that lost audience will get drawn in, complete the scale, add 'fart' commands, etc.

Also, smart kids may figure out they can easily add single-statement loops on their own, by adding a case 'repeat' that scans for the number of iterations, removes the 'repeat' and that number of iterations from the line, and then calls the 'processALine' code.

It's "learn by playing" vs "learn through study".

<comment><USER10> You do not have to do such clumsy things to build from nothing. Split the input by whitespaces, lookup word definitions in a table (linked list is ok), push the addresses of the found words to the output stream as call instructions or execute immediately if marked so. That's it, a minimal direct threaded Forth compiler is done.

</comment></comment></comment></comment></comment></comment><comment><USER11> I like this article:

[http://lisperator.net/pltut/](http://lisperator.net/pltut/)

it's in javascript and does a good job at teaching writing interpreters withtout regex tricks. There is even a compiler tutorial at the end.

</comment><comment><USER12> I am a huge fan of using functional programming languages to implement interpreters. Algebraic data types makes working with syntax-trees much more pleasant.

<comment><USER10> And yet, it's a lot of boilerplate to write recursive ast walkers manually. ADTs are not enough, some (ideally, compile-time) reflection is also needed.

<comment><USER13> That is why for prototyping it is much better to use tools like JavaCC, ANTLR, attribute grammars,... than doing everything from scratch.

<comment><USER10> None of these helps with implementing AST visitors. I was rather talking about things like Scrap Your Boilerplate or Nanopass.

<comment><USER13> They are able to generate part of the AST visitors boilerplate.

For example, JJTree on JavaCC.

<comment><USER10> It's not very useful - it's generating only one visitor structure, while you'd need many for different passes. E.g., a visitor for extracting bound and free identifiers lists would be different from a visitor for lowering various syntax sugar.

<comment><USER13> Ah ok, but you could also do the multiple passes at once, at least in some cases.

I am talking about prototyping, not going with a state of art implementation.

<comment><USER10> Doing multiple passes at once is a (premature) optimisation. For prototyping you'd rather split the process into as small and simple passes as possible.</comment></comment></comment></comment></comment></comment></comment></comment>


Alamofire: HTTP Networking in Swift - <AUTHOR> https://github.com/Alamofire/Alamofire#readme

<comment><AUTHOR> Creator of Alamofire here. Just pushed the 1.0.0 release. Happy to answer any questions you might have.

<comment><USER2> Looks like a great lib with a nice API, thx.

Was there any reason why you chose callbacks over a Promise-like pattern for the async responses?

Also do you know of any good HTTP Server libraries that will let you develop simple HTTP JSON services in Swift?

<comment><USER3> See Moya for a lib built on top of AlamoFire that adds reactive signals (fulfilling the promises use case): [https://github.com/AshFurrow/Moya](https://github.com/AshFurrow/Moya)

</comment></comment></comment><comment><USER4> Congrats on this release!

However, I think the library name is a bit of a poor choice. I don't want to take away your thunder, I just picked this post to do my rant :).

There seems to be a lot of new general-purpose libraries with very poor non- descriptive names coming out.

Whenever I need to dive into a new codebase, in a language and ecosystem I'm unfamiliar with, it's extremely hard to figure out which dependency and library does what. I was tasked to dive into a massive RoR application recently, and I ended up having to write a glossary first to remember what every non-descriptive noun implied.

After getting familiar with a particular language's ecosystem, this problem becomes tends to go away, and as a library writer, it becomes easier to fall into the same trap by picking a name that's marketable and distinct.

But I feel we're collectively making it increasingly harder for people to ramp up in new ecosystems and maintain future legacy codebases.

For names of large applications this is not as bad, and some of these applications become household names, but I think we should try to avoid this for general-purpose utilities.

<comment><USER5> The alternative is non-memorable names. I can't tell you how many android- async-image-loader libraries there are. It's a lot easier to remember 'Picasso'. It's also a lot easier for me to Google for 'Picasso Android' and get relevant results.

<comment><USER6> I think Mattt can get away with this as he has the most well known open source library for cocoa development.

<comment><USER4> I'm not a cocoa developer, and I don't really know who matt is, or what library that may be ;). Once I'm a seated cocoa developer I probably will though, but then my general point no longer really applies.

</comment></comment></comment></comment><comment><USER7> Thanks for all your work! Been using AFNetworking for years and Alamofire looks great.

So... what do those guys at Panic have you working on? ;)

</comment><comment><USER8> Thanks for your great works! I am using Alamofire on my project right now. Do Alamofire support or will support async image loading via URL just like AFNetworking? I can't find the API anywhere on the docs.

</comment><comment><USER9> Are all of Alamofire/PackRat/Gowalla defunct now?

<comment><USER10> I wondered this too.</comment></comment>


Vim Tutorial as an Adventure Game - <AUTHOR> https://vim-adventures.com/ <comment><USER2> I finished VIM adventures a few years ago and found this approach quite helpful to improve my VIM muscle memory.

What's very unfortunate though is that the licenses are limited to 6 months. Occasionally I wish I could go back to one of the levels focusing on a specific feature, but paying another $25 every time just seems excessive.

<comment><USER3> Yeah, I loved the intro but balked at the cost as well. I'd happily pay a flat $30, or $10/yr, but $50/yr turned me away.

Really, I'm not sure it's worth it for me - plenty of other good sources of entertainment, and my vim skills are already solid. If the rest of the game is the same quality as the intro, there are plenty of people it _would_ be worth it for! But... I'm not sure they realize it.

</comment></comment><comment><USER4> It's great until you realize it costs $50. A year.

<comment><USER5> I agree this is annoying. But, you're likely to pick up most all of it within 6 months ($25), and learning vim keys will pay back so, so, much more.

For those considering this, just install vim bindings for whatever editor you use. Leave it in insert mode. Bit by bit, you'll start using the commands you learn from Vim Adventures. I rarely use Vim itself, but use its commands in browsers and IDEs.

A year later, you will look at normal text editing people with frustration. It's like watching someone that doesn't know how to use a PC slowly mouse around - that's how much a difference vim makes.

<comment><USER6> Though you don't really need this game to get started in VIM, but you do need to have practice sessions to try new things which is where this game seems to fit in. Like yourself, I mostly use other editors with Vim emulation, mostly I use VsVim in Visual Studio with Resharper ( I'm slowly creating a guide, though a long way from finished and mostly for myself! [https://github.com/keithn/vsvimguide](https://github.com/keithn/vsvimguide) ). There I use a hybrid approach of core vim, vim like binding for resharper, and Resharper/Visual studio bindings. As long as my hands don't have to leave the main part of the keyboard I'm generally happy.

It's insanely easy to code using this combination, and yes, frustrating watching others, and frustrating having to code on PCs not setup with Vim bindings.

</comment></comment></comment><comment><USER7> Haha, this is hard to play with cVim bindings on Chrome. An insert mode inside an insert mode.

<comment><USER8> I used cVim for a few months and loved it. However, I recently discovered SurfingKeys[1] and I think it's even better.

All configuration is done in JavaScript rather than cVim's weird viml clone language. SK is way more flexible in my opinion.

[1] [https://github.com/brookhong/Surfingkeys](https://github.com/brookhong/Surfingkeys)

<comment><USER6> Thanks for that! Just installed it, and yes, this is really nicely done.

</comment></comment></comment><comment><USER9> "If it is possible to gamify so seemingly boring things as learning keyboard shortcuts, then sky's the limit!" from [https://github.com/stared/science- based-games-list#bonus](https://github.com/stared/science-based-games- list#bonus)

<comment><USER10> I just submitted this Github link to HN, despite that this was submitted a month ago. I curate a list like that myself (I'll make a pull request) and the list already looks AMAZING!

Please upvote the submission if you think more HNers should know about this list. The list is essentially about educational based games that nailed entertainment (with a focus on scientific phenomenon).

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

<comment><USER9> Thank you for these kind words! BTW: could you send me link to your own list?

And I am totally excited to see it on the front page, thanks once more! :)

</comment></comment></comment><comment><USER11> can't say i'm a fan... i found the best way to learn to use vim is to force yourself to use it in an everyday environment. that means at work, where you need to get stuff done. and it will suck and hurt but it works. jump in the water and you will learn to swim. i wanted to quit around a dozen times but i stuck through it. sometimes i would copy and paste using the cursor and clicking so i could move forward, that's fine. you have to learn little things at a time. in 6 months i found i was fluent enough to get my normal work done with ease. 10 years later i love every movement of it and am still learning new things everyday... what an amazing editor...

<comment><USER12> Just like learning to touch type if you're already a proficient look-while- you-peck typist.

Painful. Oh so painful for a few months. But then, the greatest time investment you can make.

<comment><USER13> I never _learned_ to touch type, I have just typed a lot. I have no idea where the keys are consciously but in general my fingers can figure it out themselves.

Sometimes something will go wrong and my conscious brain steps in and suddenly I've just got to look because I literally do not know where the hell "v" is. :D

</comment></comment></comment><comment><USER10> Hey! This thread keeps popping up! Yay :D

In another thread someone recommended me vimtutor isntead of this game. I played both, and for learning I like vimtutor much more.

To people who don't know vimtutor allow me to explain :)

Vim Adventures still gave me the feeling that vim takes 5+ years to learn and you need to be crazy dedicated and good to understand vim. That's not the fault of Vim Adventures, that's the fault of the folklore that surrounds vim (e.g. [http://www.terminally-incoherent.com/blog/wp- content/uploads...](http://www.terminally-incoherent.com/blog/wp- content/uploads/2006/08/curves.jpg) )

30 minutes of vimtutor and I felt that I had "basic vim skills" and that I "could manage myself in a vim editor." I thought it would take 2 years to get these skills. In other words, if you feel you have realistic expectations about how hard it is to learn vim, try vimtutor!

That said this is a fun game!

<comment><USER14> I cannot access (terminally-incoherent) link. Can you provide an alternate one?

<comment><USER14> nvm. Thanks [wolfgke]([https://news.ycombinator.com/user?id=wolfgke](https://news.ycombinator.com/user?id=wolfgke))

</comment></comment></comment><comment><USER15> Some older threads had many comments:

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

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

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

</comment><comment><USER16> I remember playing the first few levels of this game when I was still new and starting to learn vim. It marked my first foray into programming as it was a requirement for my basic programming module, so vim tutor was quite intimidating back then (huge wall of text). I believe I stopped using vim adventures when I found out about the paywall.

However, googling about vim had convinced me that it was this awesome piece of ancient software that was somehow better than modern editors, so I stuck with it. I ended up doing my assignments in vim starting with only the hjkl/<Esc>/i keys. Then whenever I wanted to do some shortcut I thought vim might be able to do I just googled it, got my mind blown, then internalised it. Or reading up on articles talking about the must-know vim shortcuts.

</comment><comment><USER17> This is a great tutorial. Most people point out that most of this is in `vimtutor`, but I found this easier to consume.

That said, I got stuck when I had to learn how to switch buffers. I don't know if I missed a description with how to do it, or if it was missing.

</comment><comment><USER18> I just started and I can't seem to get to the treasure chest. Sigh, am I that dumb?

<comment><USER19> Looks like you unlock new modes as you progress (like Link finds new tools as he goes through dungeons), so you can't get the treasure chest until you have a delete one of some type. I'm a vim noob myself, so I don't know which one you necessarily need.

</comment></comment><comment><USER20> I remembered playing this in 2013 and it really helped me learning vim. Then I discovered roguelike games, which depend heavily on vim key bindings, especially hjkl for movements, played a bunch of them ever since and got really fluent in vim keybindings. Now besides using vim as text editor and play roguelikes, I have vimfx extension for browsing web under Firefox and vimium for Chrome. Now I just hope I can have vim editing functionalities in any text boxes, and I have been searching for a solution for years.

<comment><USER21> Vimium is fantastic (and I say that as an emacs user). Does vimfx for Firefox have similar smooth scrolling? Last time I tried FF vim extensions I was disappointed that they all seemed to scroll jumpily by lines

</comment></comment><comment><USER22> This inspired me to try harder with my learning of VIM: [https://vimebook.com](https://vimebook.com)

</comment><comment><USER23> I found I learned more faster just using vimtutor, although the idea of learning Vim through a graphical game is still pretty neat.

</comment><comment><USER24> I have been a IDE guy for years. But here at work everyone uses vim, so I gave it a try. I tried to set up the thing, and gave up shortly after that. Then tried SpaceVim, which was too clunky for my taste (I am sure it will improve, it's a rather recent project). So migrated to Spacemacs, which surprisingly supports vim style commands well.

<comment><USER25> May I ask, if you are not interested in vim why would you choose spacemacs instead of vanilla emacs?

To me spacemacs just feels heavier than many IDEs.

</comment></comment><comment><USER26> For anyone that continued past the paywall, is it worth it?

I started this game back when I was in college but stopped at the paywall because I didn't have the money at the time. Forgot about it till just now! If this can teach more advanced vim concepts via gameplay then I'd probably be open to buying it now than I used to be.

<comment><USER27> I played it almost to completion a couple of years ago. I found it very helpful to shore up basic Vim skills, and introduce me to more advanced commands. Come to think of it, I could probably use a refresher...

I'd recommend it.

<comment><USER28> I bought a license about a year ago. When I logged in today, a message came:

> License Expired

> [my email address]

> There is no time left in your license.

> License activated on [date]

and an offer to buy another half a year for 25$. Here I openly say: No, thank you.

<comment><USER29> Same here. I bought when it had just launched, wasn't complete yet and there was no mention of the license not being perpetual. Disappointing, but I did get a lot of value from it though!

<comment><USER28> For me it was mentioned, but I read on HN that the main reason for the "6 month" restriction is that the author wants to avoid complaints and reclaims in the case that he stops providing the website after 6 months. In other words: there are legal reasons why this restriction exists, but it will not be restricted to 6 months. So I trusted the HN crowd and paid the price that I considered as "a little high".

Lesson learned: Don't trust the HN crowd.

<comment><USER29> I'd renew for a month to refresh the less usual commands in a heartbeat if it was $2-3 bucks! $25 is hard to swallow. I do feel like I got my $25 worth at the time though. It was a great way to learn and I use a lot of it daily.

<comment><USER28> > I do feel like I got my $25 worth at the time though.

If you buy a game for 25$, you can play it as often as you want.

<comment><USER30> I don't remember getting to play Everquest indefinitely.

<comment><USER28> Vim Adventures is not an MMOG.

Beside that: For every MMOG that was stopped, there was typically lots of fan outcry and attempts to set up fan-managed servers to continue playing (often a legal grayzone). Sometimes fans even manage to convince the developers to release server code/source code: [https://en.wikipedia.org/w/index.php?title=Uru:_Ages_Beyond_...](https://en.wikipedia.org/w/index.php?title=Uru:_Ages_Beyond_Myst&oldid=781383284#Uru_Live)

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER25> I tried this when it was first created. After 30 minutes of fighting with foreign key bindings I realized I can't stand vim even in the context of a game.

So yes, this game is the reason I will always be an emacs person...

<comment><USER31> Interesting, I have almost exactly the opposite experience (I hated the reliance on Ctrl+ when considering a switch to Emacs). Do you have some specific issues with the bindings, or was it just a case of "too different"?

<comment><USER25> There are just too many and not compatible with my brain.

Emacs has a graphical interface with menus, icons and help text. You can use it without knowing any keyboard shortcuts which I feel makes it easier for newcomers. vim on the other hand...

</comment></comment></comment><comment><USER32> I'll save my $25 for some time when I'll be not too busy to play all the way through. So, maybe at Christmas (if I even remember).

</comment><comment><USER33> Let's say I want to learn an editor in and out, is it worth to learn Vim now or should I invest my time in Sublime?

</comment><comment><USER34> This is really cool!

</comment><comment><USER35> this is excellent.</comment>


Jellyfish: Toxic but fascinating - <AUTHOR> http://oceans.nautil.us/feature/615/toxic-but-fascinating <comment><USER2>
      Jellyfish, along you came,
      and right away I'm stung.
      Sweet words I long to whisper,
      But you've paralysed my tongue.

</comment><comment><USER3> As the article says, "medusa" is a modern name for jellyfish.

The Ancient Greeks and Romans called the jellyfish "sea lungs", because of the resemblance between the pulsation of jellyfish and the respiration of terrestrial vertebrates.

</comment><comment><USER4> The sexism in this article is inexcusable, as is the homophobia.</comment>


Digitising books as objects: The invisible made visible - <AUTHOR> http://blogs.bl.uk/collectioncare/2018/02/digitising-books-as-objects-the-invisible-made-visible.html <comment><USER2> The article talks about lighting, and the different features visible with normal light (the text), raking light (folds and holes in the paper), and transmitted light (watermarks).

I have a tangentially-related question, regarding the books I've digitised myself with a phone camera and natural daylight. Are there tools that can detect the spine in the middle, de-skew the image, adjust discolouration, detect text, and OCR? I think it would be a good task for machine learning.

I'd also like to run those image manipulation routines separately, because the text is mixed Chinese-English, so the OCR step is non-trivial.

<comment><USER3> Are there good open source OCR engines around? Would be a starting point for such a program - a good automated way of scanning books seems to be kind of missing.

<comment><USER2> Tesseract doesn't meet the "good" criterion you listed, in my experience with Chinese and skewed English text.

OCR is the most important part of turning JPG into TXT, but it's the image processing beforehand that I'm less familiar with (deskew, text detection). Robotically automated scanning isn't practical in my opinion; it could easily get thrown off by thicker pages for photos in the middle of a book, for example. Digitisation will always be a partly manual process, I just hope the existing images can be processed better.

If you're not in Germany and are interested in digitisation, I think Project Gutenberg are worth looking into.</comment></comment></comment>


You will probably need jQuery - <AUTHOR> https://gist.github.com/rwaldron/8720084#file-reasons-md <comment><USER2> Lots of those are for Sizzle.

jQuery would be great if it broke up all those tiny little and completely orthogonal things it does into modules so that people could use them as needed. No one library is going to provide everything for every project but making everyone require your ajax code when all they wanted was an `offset()` function is equally backwards thinking. We have much better tooling now to work with modules and to reuse code.

Arguments about CDN caching are some sort of premature optimization (or I don't know what really). Most early projects don't need it and other projects can trivially use many of the free (or super low cost) CDN providers if they care that much.

My issues with jQuery are not at how awesome it has worked in the past or how well it has hidden/handled lots of browser quirks; it is that thinking in terms of "everything is dom manipulation" is the wrong abstraction for doing organized and maintainable front-end code. The things jQuery does well would be useful within smaller components or libaries but now we are back to the original issue of jQuery is one giant blob.

<comment><USER3> Mootools, rest in peace, was completely modular and you'd check the features you wanted see: [http://mootools.net/core/](http://mootools.net/core/)

<comment><USER4> MooTools modified built-in objects in future hostile ways. Do you miss that too?

<comment><USER3> Fuck the future. JavaScript was formed full and feature complete and these newfangled "improvements" are nothing but abominations atop its pure and perfect form.

</comment></comment></comment></comment><comment><USER5> These aren't really what the author claims. The first two are actually the same thing, which doesn't appear to be jQuery working around a browser bug.

The third is just noting that a jQuery function doesn't work in some contexts.

The fourth and fifth (which, like #1, are two lines from the same comment) are just documenting a try/catch block because something jQuery is doing might throw an exception.

The sixth is legitimately working around a browser issue, but it's not something you'd need to worry about unless you wanted to write that jQuery function. Like, it doesn't actually cause problems — it's just necessary to make that jQuery function return the exact value that they want.

The seventh is just an attribute named "support".

So far it looks like this isn't actually a list of reasons you will need jQuery, but a list of places where the string "support" occurs in the jQuery source. The fact that so few of them actually have anything to do with the compatibility of client code kind of undermines the point the author is trying to make.

<comment><USER4> > These aren't really what the author claims.

As the author, I can assure you they are what I claim them to be: Points in the source code that identify some issue in some browser.

> The first two are actually the same thing,

Whoops! I thought I had removed the first one. Thanks for the bug report. The second is true, we received bug reports when we used we had issues with "use strict" in Firefox. I removed the first one anyway.

> The third is just noting that a jQuery function doesn't work in some > contexts.

Wrong, it's a note about IE reporting the wrong value.

> The fourth and fifth (which, like #1, are two lines from the same comment) > are just documenting a try/catch block because something jQuery is doing > might throw an exception.

Because a particular browser has abnormal behaviour.

> The seventh is just an attribute named "support".

I thought removed that. It matched "support:", so you're still wrong.

> So far it looks like this isn't actually a list of reasons you will need > jQuery

Accept that it does with the exception of two things I thought I had removed.

You owe me an apology.

<comment><USER5> To be perfectly honest, I think it's a bit of a reach to suggest that I "probably need jQuery" because strict mode limitations caused problems within jQuery once upon a time (like, isn't that basically jQuery fixing a problem it introduced?), or because jQuery includes a try/catch block for a case that I will never come across in my entire life. jQuery certainly needs those, but I don't.

I don't know exactly how many of the issues are real. Since of the ones I listed only 3 of 5 were real even by your count, I'd be surprised if none of the others were at all questionable. But even if we accept that they're all real, hair-on-fire problems with vanilla JavaScript, I still think you're going too far. At the very least, jQuery is not the only library out there that handles compatibility issues. Lots of people who use other libraries do not "need jQuery."

Basically, I think you have made a much broader claim than you have been able to support so far. I'm absolutely not trying to knock the hard work of the jQuery team or suggest that jQuery is useless. If you had just said, "jQuery is still really useful. Here's a few things it does for you that you'd never think of," I'd have said, "Great post — thanks for reminding everyone." Instead, you took a very hard line that came off as pretty combative, but your supporting examples were really shaky. So I disagreed.

<comment><USER4> > To be perfectly honest, I think it's a bit of a reach to suggest that I > "probably need jQuery" because strict mode limitations caused problems > within jQuery once upon a time (like, isn't that basically jQuery fixing a > problem it introduced?),

No, the point was that it highlights an issue that exists with some browser.

Also, I didn't name this thread, notice in my gist it doesn't say anything about needing anything. I was merely presenting facts.

> I'd be surprised if none of the others were at all questionable.

If you'd like to spend the time going through each one of them with me, we can meet on IRC and work through them all. We might even be productive in eliminating some unnecessary code if we find issues that no longer exist in a browser's current and last current release. Let me know?

To your last point, I again, I didn't name or post this thread. Did you read what I wrote in the gist? I think you can't really argue with this:

"The following links will bring you to line in the jQuery (current master, is a 2.1.x build with no oldIE-specific code) source above. The line (and probably adjacent lines) will identify some existing browser issue that jQuery must account for when providing an API for consistent browser/DOM programming semantics."

That's all I said. So are we square? Wanna work on these with me? I'm a nice guy, I promise.

</comment></comment></comment></comment><comment><USER6> This is a bloody clever counter-argument as well as an excellent example of the right way to use comments.

</comment><comment><USER7> how in the hell am i going to have bandwidth for jQuery _AND_ my 200K of carousel images?!

<comment><USER8> It's not just about bandwidth, it's also about parsing and executing ~82KB of JavaScript before doing anything on the page.

<comment><USER9> Do you happen to know what the performance impact of parsing and executing ~82KB of JavaScript is? Genuinely curious to know the numbers.

<comment><USER7> I get about ~7ms in chrome on a mbp and ~200ms on my shitty nexus s. [http://danheberden.com/tools/howlongtoloadjquery.htm](http://danheberden.com/tools/howlongtoloadjquery.htm)

<comment><USER10> 74ms for initial load and averaging about 20ms subsequent loads on a MBP with Chrome. Ubuntu Chrome is similar. 837ms initial load, average about 140 ms subsequent loads on a Moto X on T-Mobile.

<comment><USER7> I thought we were taking download time out of this

<comment><USER10> The "subsequent load" time should be pretty close to this. I'm getting about 20-30ms of "Evaluate script" time when I run a profile in Chrome's Timeline tool.

</comment></comment></comment></comment></comment></comment></comment><comment><USER11> jQuery arose in an era where browser quirks and incompatibilities were everywhere and, due to the circumstances of developing accessible websites, enjoyed widespread adoption. Nowadays that the front-end is getting so much attention, it pains me to see so much jQuery hate. Here are some thoughts I feel need to be articulated:

Rather than everyone reimplementing their own utility libraries, here we have one central library already cached by most areas of the internet, being maintained by some of the brightest developers in JS, and provided free of charge.

If your site permits, you are probably using the Google CDN hosted version of jQuery. If not, you should. If you can't, then your users can handle some 80kb one time load for a tremendous reduction in development time and increased consistency between browsers (let's be honest, cross-browser testing is a pain and we avoid it as much as possible).

So many people think that by using jQuery your code must immediately be bad. Spaghetti code is code with bad structure, jQuery does not enforce any structure so any bad code that includes jQuery is not the library's fault. I also believe (I don't have evidence for this) that this thought tends to occur amongst people who have learned front-end development using jQuery because it was very accessible, and then moved on to something else, and then looking back at their old, cruddy code developed negative feelings towards jQuery itself. jQuery doesn't care how you structure your code; you can use jQuery (admittedly with some difficulty) with Angular, Backbone, or any other popular framework. But you can't use Angular with Backbone. Arguments against jQuery that attack poor code / structure / "prettyness" are completely misrepresenting jQuery as a library.

In that same vain, jQuery is not slow. How you use jQuery, just like how you write your vanilla JS, is what determines performance. Some jsperfs show jQuery being slower than vanilla JS or lodash/underscore, but that's because jQuery is checking for many more things. You don't have to use jQuery if you know how to improve critical code, and you really shouldn't. However, it allows for you to write code quickly, without much complex thought for validating against edge cases at a very negligible performance reduction.

</comment><comment><USER12> It's worth keeping in mind that the size of minified jQuery is 32kb.

<comment><USER13> I believe that size assumes gzip on top of the minification. Minified alone, jQuery should come in at just over 90kb.

<comment><USER14> gzip isn't rare, it's a standard.

<comment><USER13> I didn't claim that it was or wasn't.

</comment></comment></comment></comment><comment><USER15> I love this! People think with document.querySelector and Element.classList your need for jQuery ends!

The more DOM APIs means even more need for jQuery. Stuff like Node.bind() and Object.observe() are some samples that need to polyfilled to make it work in all your modern and badass browser!

<comment><USER16> I think you mean, Function.bind? see: [https://developer.mozilla.org/en- US/docs/Web/JavaScript/Refe...](https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)

<comment><USER4> No, they mean Node.bind(), it's a Polymer proposal.

</comment></comment></comment><comment><USER17> Nope, don't usually need it. Also that link locked up my mobile browser for a bit :/

<comment><USER7> probably because github uses jquery

<comment><USER17> No, just the amount of text content downloaded and parsed into the DOM was the issue.

Kinda surprised with the downvotes considering the poor intentionally provocative OP.

<comment><USER4> "poor intentionally provocative OP"?

How is a list of irrefutable facts a "poor intentionally provocative [original post]"?

Show me how smart you are!

<comment><USER18> You seem very upset and are surely alone in feeling that way. Please refrain from posting before you start yelling people who oppose the opinion of the topic.

</comment></comment></comment></comment></comment><comment><USER19> My question is, do you really need a 9116 line library, or do you need a handful of 100 line libraries?

Not because 32k is too much data, but because it's just not in line with how I envision dependencies anymore.

<comment><USER4> Take only what you need [https://github.com/jquery/jquery#modules](https://github.com/jquery/jquery#modules)

<comment><USER19> But they don't exist in isolation. They can't be argued about, reasoned about, replaced when a better way of looking at the problem is discovered, without convincing all of the jQuery elite that it's the right move.

It's not about jQuery being too many bytes, it's about the idea that A. for many things you can just use the browser APIs now, and B. for those handful of things that need libraries, make them targeted and replaceable.

Beyond all that, if you use a custom build of jQuery, you can't really trust that any library requiring it will actually work, returning to the original point: Libraries should try to not depend on jQuery, so you can enjoy your custom build in peace.

</comment></comment></comment><comment><USER20> Writing a library strictly to modern browsers and using conditionally loaded polyfills is the better choice, than building cross-browser into the library.

The former, over time more people load less code, as they move to the new browsers.

The latter, code doesn't decrease, but overall the amount of dead code increases, as people move to the new browsers.

That's the cause of all this criticism of JQ now.. Over time, more of JQ code becomes dead or unnecessary as these functions are subsumed into the native browser.

</comment><comment><USER21> I only really want jQuery core most of the time, and then only because I'm supporting IE7, which does not support ECMAscript 5.

It is often simpler to reuse this functionality that people have worked on optimizing across a large number of browsers than it is to spend the time to reimplement that functionality myself. I can better spend that time getting a new feature working.

</comment><comment><USER22> That's a hilarious rebuttal.

</comment><comment><USER23> just search for all the comments by rwaldron and have a good time

</comment><comment><USER24> Ugh, I'm using jQuery with a CDN and my HTML5 animations still won't work on my Nokia 3310. Am I missing something? So frustrated.

<comment><USER24> I'm so close to using flash right now. Anyone?

<comment><USER24> Do I put jQuery before the div? Or after the div?

Or in the div?

<comment><USER25> I don't fully understand your problem from what you've described, but I think you'd be more likely to get help on Stack Overflow ([http://stackoverflow.com/tour](http://stackoverflow.com/tour)). Post your question from the following page, editing the details as necessary: [http://stackoverflow.com/questions/ask?title=HTML5%20animati...](http://stackoverflow.com/questions/ask?title=HTML5%20animations%20not%20working%20on%20a%20Nokia%203310%20when%20using%20jQuery&tags=jquery+css- animations)

</comment></comment></comment></comment><comment><USER26> Will I?

<comment><USER27> Yes

<comment><USER28> Really?

<comment><USER29> Maybe.

<comment><USER30> .promise()?

<comment><USER31> .fail()

</comment></comment></comment></comment></comment></comment><comment><USER32> pfft I'd rather not offer support for buggy/lagging-behind JS implementations.

<comment><USER33> Remember how lousy those [Best Viewed in BroswerX] banner buttons were?

<comment><USER34> What do you mean "were"? Mine still looks great next to the hit counter and the link to ./guestbook.cgi!

</comment></comment></comment><comment><USER35> [http://en.wikipedia.org/wiki/List_of_burn_centers_in_the_Uni...](http://en.wikipedia.org/wiki/List_of_burn_centers_in_the_United_States)

<comment><USER36> Dear friend, here we are trying not to be Reddit2, and while your post is funny, it does bring nothing to the discussion.

</comment></comment><comment><USER15> I just leave this here:

        document.querySelectorAll('div').forEach

<comment><USER7> NodeLists don't have .forEach in their prototype chain kiddo ([].forEach.call(nodeList, hollaback);)</comment></comment>


The Return of the Pay Wall: Newspapers declar free content the enemy - <AUTHOR> http://www.thebigmoney.com/articles/impressions/2009/07/06/return-pay-wall?page=0,1 <comment><USER2> Go ahead and do it then, we'll see how long that lasts. Newspapers are not competing with other newspapers with paywalls, they're competing with _all_ the other internet content.

Newspapers are going to be one of those institutions that we'll miss when they're gone, but gone they will be.

The smartest ones may be able to find a way to adapt, a paywall on non-unique content isn't going to do much good I expect, it will only hasten the downfall.</comment>


Asus Z390 Motherboards Automatically Push Software In2 Your Windows Installation - <AUTHOR> https://www.techpowerup.com/248827/asus-z390-motherboards-automatically-push-software-into-your-windows-installation <comment><USER2> Looks like it's the WPBT ACPI table again. Lenovo was caught doing the same back in 2015: [https://www.theregister.co.uk/2015/08/12/lenovo_firmware_nas...](https://www.theregister.co.uk/2015/08/12/lenovo_firmware_nasty/)

Windows will just blindly execute the binary from the WPBT table on boot. Specifically, it's done by the Session Manager, the first user-mode process (%SystemRoot%\System32\smss.exe).

The WPBT table is dumped as %SystemRoot%\System32\wppbin.exe and then executed.

This behavior can apparently be disabled by a registry setting:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]

"DisableWpbtExecution"=dword:00000001

The previous time this happened, didn't Microsoft promise to keep this behavior on by default only in a corporate setting? Or maybe I'm misremembering.

(Edited to add more details.)

</comment><comment><USER3> I would tolerate if the board exposed a small romdisk that's visible to the OS, but running stuff without my express consent is waaaaay too much.

</comment><comment><USER4> Old article is old. Old news.</comment>


Microsoft OneDrive to support differential sync - <AUTHOR> https://www.microsoft.com/en-au/microsoft-365/roadmap?filters=&filters=&searchterms=33412 <comment><USER2> The announcement only mentions OneDrive for Business. Is this also for the personal client?</comment>


Ants show that emergency exits can work better when they're obstructed - <AUTHOR> http://nautil.us/issue/13/symmetry/want-to-get-out-alive-follow-the-ants <comment><USER2> That's interesting. I once took a sociology class about the behaviour of panicking crowds and we covered exactly this phenomenon, that is, if you put a pillar in front of the emergency exit (without completely blocking it, of course), panicking people can get out faster. It seems counterintuitive but it's been shown numerous times.

<comment><USER3> It basically reduces deadlock chance.

When you have one exit and it's blocked due to many people attempting to fit at once, the entire queue is congested.

That barrier turns one exit into two exits (even if it's backed by only one real exit). If one is congested, people can still flow through the other one, and vice versa.

This explains why the evacuation rate is roughly twice faster.

If the barrier is designed to even more virtual exits, it'll be even faster.

And there's an even faster way, that requires no architectural changes, but people will have to be trained in it so well, that they'd follow it even in panic.

And this would be some heuristic which orders people in an unambiguous way, so only one person is attempting to exit at a given moment.

I don't know, left to right order, split in rows, people holding hands... Some creative solution is required to decide what that heuristic would be.

Queues have no congestion, so they'll represent the fastest possible rate of evacuation through a single exit.

<comment><USER4> _" And this would be some heuristic which orders people in an unambiguous way, so only one person is attempting to exit at a given moment."_

Given how badly people behave at four-way stop signs (where there's an unambiguous ordering algorithm that most drivers seem to ignore), I don't think there's much hope for a heuristic ordering working well for panicked crowds at emergency exits.

<comment><USER5> Are you sure it's unambiguous? Four way stops have both a "whoever was here first goes" rule and a "we arrived at approximately the same time so the person on the right goes" rule. That alone adds ambiguity, as they're not well defined.

But it gets worse than that, as pedestrians have priority and can break up the established order. If it's "my" turn, but a pedestrian blocks only my way, someone else can rightly cross out of turn, but then once the pedestrian is clear when does it become my turn again?

<comment><USER6> I moved to the US four years ago from the UK, and I think four way stops are wonderful. I've yet to experience the disorder suggested. I grip the wheel, narrow my eyes and approach with extreme caution. I like think everyone else does too.

</comment></comment></comment></comment></comment><comment><USER7> I remember watching once a TV show (perhaps in the old days of Discovery Channel) about experiments with obstacles put in front of elevators, so people wouldn't clutter in front of it and IIRC they have found the same thing back then. I wish I had magic skills to find a video of that show.

</comment><comment><USER8> It would seem to me that the visual obstruction of the column causes as much as the physical obstruction. An interesting twist on the experiement would be to construct a clear obstruction that people could see through - and see if that impeded the flow because of impatience at being nearly outside.

Also I wonder if a fake wall with 5 exit doors in it (close to each other), that obscured the one _actual_ exist would speed up flow - presuming people selecting the general area of the exit first, then the detail of the exit point second. If there were 5 single doors it would separate the flow to the actual choke point, but without producing the same type of barricade.

If this research turned out to be widely applicable, I wonder if placing airline staff in front of a door would speed the exit of people through it?

I also suspect there is an optimum shape for the obstruction, and I expect that it isn't round.

All interesting stuff.

</comment><comment><USER9> That's actually pretty much common knowledge with experts studying people flows and emergency evacuations.

If you're interested in the subject The New Yorker has a fascinating read on the subject (CRUSH POINT - When large crowds assemble, is there a way to keep them safe? [2011]) which makes this argument. (Warning! It's long)

<comment><USER10> [http://www.newyorker.com/reporting/2011/02/07/110207fa_fact_...](http://www.newyorker.com/reporting/2011/02/07/110207fa_fact_seabrook?currentPage=all)

<comment><USER9> Thanks.

Hanging my head in shame for the omitted link.

Sorry for the oversight, since it's a really interesting read.

</comment></comment></comment><comment><USER11> Interesting application. The idea's not new: wasn't the central thingy in the concourse in Grand Central Station found to have exactly this effect? Without it, people dither and take longer to cross a clear space - paradoxical, but that's science for you.

<comment><USER12> Precisely what I was going to comment about. I think that leverages similar principles although the application is slightly different.

</comment></comment><comment><USER13> Simulate the scenario with water in a pool with a tiny pipe opening at the bottom if the pool leading down. The water will shoot out with a high velocity this means the pressure in the pipe will be higher than pressure in the pool. If you apply this analogy to people and exits, it means that the people directly in the exit hallway( the pipe ) will experience a high change in speed, and since people aren't fluid, friction, thus making their escape more difficult.

<comment><USER14> The pressure in the pipe is the same as the pressure in the pool. Additionally, the meter^3/minute is the same in the pool in the pipe, but the with the pipe, the meter^2 is much smaller. So, to keep the same rate of fluid, the meter/minute (speed) has to be much higher.

<comment><USER15> [http://en.wikipedia.org/wiki/Bernoulli's_principle](http://en.wikipedia.org/wiki/Bernoulli's_principle) Where velocity increases, pressure decreases.</comment></comment></comment>


Hundreds of Startups Tell Investors: Diversify, or Keep Your Money - <AUTHOR> https://www.nytimes.com/2018/03/20/technology/founders-for-change-tech-diversity.html <comment><USER2> Startups may want to rethink what they are asking for here.

They are demanding investors discriminate in their employment practices based on race/color/gender, which is both unethical and _explicitly illegal_ by US employment law - [https://www.eeoc.gov/laws/types/race_color.cfm](https://www.eeoc.gov/laws/types/race_color.cfm)

Note that discrimination in employment is illegal _even if you are discriminating against white people_ \- "Title VII prohibits race/color discrimination against all persons, including Caucasians." \- [https://www.eeoc.gov/eeoc/publications/fs- race.cfm](https://www.eeoc.gov/eeoc/publications/fs-race.cfm)

</comment><comment><USER3> This is such a weird way to virtue signal. What's worse is that they believe they are in a position of power to be able to insinuate such things.

How about they actually become outright superstars and then provide a road map for others like themselves? Get to the level of national notoriety and success before you start telling others how awesome you are in a startup that is likely to fail.

Do you think the kids in Liberty City, Chicago, NYC know what a VC, startup, or much less those people from the article are?

No they don't know. Want to see a good spokesperson for hard working Hispanics ? Checkout A-Rod who's always talking about his mom working hard and himself trying and failing and trying again. Kids can see him on Shark Tank tell his story and success. Not some virtue signaling nobody living in whacky world SV.

</comment><comment><USER4> Oh fuck off. Money has no race - and I say this as a minority. Further, if you're really in a position to turn down investment based on diversity of the investors (which is a made up reason), you've already probably made it.

</comment><comment><USER5> I wonder when/if Asians (incl. Indians) will start to be recognized as being in a disproportionate majority or too-large minority in tech companies. Then, will diversity activists be demanding that companies hire fewer Asians and more white people? Somehow they've been ignored in most of these stories. I suppose because they don't fit the popular believe of white racism?

<comment><USER6> Um... They already are. That's why the term "underrepresented" got prefixed to minority.

</comment></comment><comment><USER7> founders for change is yet another example of today's "do as i say, not as i do" attitude. look at the list of companies these founders are from... i'm sure nearly all are funded by "old white guys" (a term so loosely and arrogantly used today).

if a startup is dumb enough to pass on a round of funding because there isn't "diversity" within the investment group, they aren't worth investing in anyway.

have people forgotten that VC's are in the money making business? come on folks, get real.

<comment><USER8> I worry more about this blending of life, work and passion into one miasma that is supposed to be consistent and all-encompassing, all the time.

Used to be, we had a work life, a private life, friends and activities that more or less never interacted. Now it seems people want all the above, all the time, every minute of every day. Google runs the workplace like they are mum and dad, and everyone wants work to solve all their life's meaning, rather than providing a living so we can find meaning elsewhere. This blending of all facets of our lives is partly why privacy is so skew-if (as we broadcast all the time), and why it is so hard for people of differing views to seemingly get along.

In my darker moments, I think a lot of the progressive stuff is a conspiracy by business to make everyone want to work 12 hour days - this idea is not helped by books like Lean In, or the way many modern workplaces invent ways to keep you at work longer and longer. In my less dark moments, I think good ideals have been co-opted or money making purposes, which is kind of how life seems to work.

All this leads to ideas like this, where people not only can't separate different elements in life from their life, but demand that all elements of their life conform to their pre-set ideals. I'm not sure who wins long-run between the VCs and the startups in a situation like this, but the long run affects of this blending of life into one thing, well I'm just not sure the animal that is a human being really benefits from it at all.

I really wish we could re-seperate out the spheres of our life, and not expect work to provide all our meaning, or provide all of the solutions. I wish instead that we could have a work life and a, for want of a better term, life- life, and (rarely?) the twain shall meet.

</comment></comment><comment><USER9> I worked for a NYC startup that was eventually bought out. Nobody cared about the VC and their hiring practices. We were busy working 24/7 to get the business profitable and we wanted investment to grow the business, hire more people, move to a bigger office, etc.

Is there this much money slushing around that startups are now mocking investors?

There are nearly 20,000 startups. Does that mean 19000+ startups told investors to "not diversify and give us your money"? Every day, the media disappoints me.

</comment><comment><USER10> A bunch of racists who feel morally superior.</comment>


Why functional programming is awesome - <AUTHOR> http://anupcowkur.github.io/posts/why-functional-programming-is-awesome/

<comment><USER2> As happens every time this comes up: that's not QuickSort.</comment>


Weasel: A Stealthy DNS Beacon - <AUTHOR> https://github.com/facebookincubator/WEASEL <comment><USER2> On my home network, using dnscrypt-proxy, I keep a whitelist of top-level domains my devices have connected to. The few new domains to resolve are forwarded to a remote server and logged for periodic review, to update the whitelist or spot suspicious queries. So while it may not scale, it could be useful for spotting DNS C2C.

<comment><USER3> Does your setup distinguish between IoT-ish devices (where you don't know what software is running) and human-operated devices (which would trigger this every time they browsed to a new site)?

<comment><USER2> No, but that would be fairly easy to configure - put the IoT devices on their own VLAN with dedicated DNS server. My household is small and the list of new domains visited is manageable and interesting to inspect by hand. It's definitely more of a hobby than a scalable solution, I must warn.

</comment></comment></comment><comment><USER4> Checkout this exploit tool I wrote for red teaming: [https://github.com/TheRook/nsshell](https://github.com/TheRook/nsshell)

Most notably nsshell doesn't even need the target to run python. I have written a bunch of exploit modules for it, and the only exploit modules that require python are the jinja2 template injection modules. ([https://github.com/TheRook/nsshell/blob/master/nsshell/loade...](https://github.com/TheRook/nsshell/blob/master/nsshell/loader.py#L116))

I like your encryption protocol, I might adopt it.

<comment><USER5> I've used nsshell to great effect on multiple projects, highly recommend it (but an encrypted option would be great rook). I've also written a more heavy handed asymmetrically encrypted DNS C2 [https://github.com/BishopFox/sliver](https://github.com/BishopFox/sliver)

</comment></comment><comment><USER6> I used something similar to this in the past to evade traffic manipulation on a controlled network. Iodine gives you a full tun/tap connection and encapsulates an ipv4 connection over dns null requests and responses. I'm not sure it is stealthy as such countless random requests to a single wildcard domain look a little suspicious even in the high noise environment I was testing in the blue team caught on after a few months. I ran mosh and ssh over top to secure the connection Just enough bandwidth for an 80x30 in realtime

[https://code.kryo.se/iodine/](https://code.kryo.se/iodine/)

</comment><comment><USER7> Not the same thing but related for those who enjoy using/abusing dns for fun and profit:

[https://github.com/yarrick/iodine](https://github.com/yarrick/iodine)

Allows exfiltrating data using dns.

</comment><comment><USER8> Ironic that this is a Facebook project

<comment><USER9> It's from Facebook's Red Team, which attacks Facebook and tries to move laterally like a real, motivated, and persistent attacker. They build some nice tooling, sometimes more advanced and well thought than what attackers actually use to stay under the radar and accomplish their objectives. This one is one of the many.

</comment></comment><comment><USER10> Interesting. Wouldn't existing intrusion detection systems fire alerts on seeing random DNS queries from a host to `domain.tld`?

<comment><USER11> I've never seen anyone try and setup alerts for random DNS queries. If you're in the position to know what domains are good, then why not simply use a whitelist?

Besides, even if you saw these queries you'd have no easy way of know I'd they were malicious or not.

<comment><USER12> Some IDS systems do it for you I was using Darktrace at my last job and it would tell us when servers started querying domains they don't usually query so there are products that do it

<comment><USER11> Those systems usually flag based on a known set of "bad" domains, which wouldn't stop this attack (they could just register a few new domains before starting the attack).

</comment></comment></comment></comment><comment><USER13> It's my understanding that most proper red teams and hacking groups have their own custom payloads that generally won't be detected by AV. Surely any open source malware will be easily detectable...?

Additionally, I've never understood how packers don't get detected by AV. Normal software isn't typically extremely high entropy, is it?

<comment><USER11> A python script seems especially easy to detect with this method, as opposed to a binary.

<comment><USER14> I would suspect this would get lost in the noise on a software developer's machine. The developer's machine could be targeted by the red team because of this (and because of a developer's normally elevated privileges and varying network activity)

</comment></comment></comment><comment><USER15> I totally misunderstand how does it work. Can anyone recommend me something to read about it?

</comment><comment><USER16> It might be "small [and] in-memory", but it requires a python interpreter, right? I'm not into offensive security, but does this implementation (compared to e.g. a statically linked binary) make sense?

<comment><USER17> If python 3 is available on the target system, this is certainly making sense, it might make the entire thing fly under several radars because a lot of things scan for suspicious binaries (statically linked, coming over unusual channels, etc.) and would leave a python file that is properly obscured alone.

</comment></comment><comment><USER18> Why is DNS allowed to anything other than internal resolvers when the source is an internal host. Any network, even a home network can do this.

<comment><USER19> The magic of DNS tunneling is that it uses the normal methods of resolving names, so internal DNS servers/forwarders become proxy servers for the attacker's connection out to the Internet.

The most simple example someone gave me years ago was if someone wants to exfiltrate a credit card number, they can ping 4084515531278764-0424-789.attacker.com from an internal system. It doesn't matter if the ping succeeds. If the internal system gets a resolution response back from the internal DNS, the attacker has the card number in their DNS logs.

Tunneling TCP or other C2 traffic is just an extension of that which includes the attacker's DNS server sending a message (4 arbitrary bytes in the form of an IPv4 address, or more data in the form of a TXT record response, etc.) back to the internal system via the normal response path.

Its pretty clever, IMO. Most sysadmins think of DNS as being like a phonebook, but phonebooks are a single, supposedly authoritative source, and DNS is decentralized.

<comment><USER18> That really is pretty clever. Thanks a lot for explaining! Whish I could upvote multiple times.

I didn't even consider the normal resolver path because of caching,rate limits and perfmance but it's not like we're building a production protocol here, it just needs to work enough to facilitiate minimao communication.

This will make an interesting threar hunting excercise.

</comment></comment></comment><comment><USER20> Feels like a personal "there's bound to be a better way" project that's a bit polished. Fun!</comment>


Multicolor image search - <AUTHOR> http://labs.tineye.com/multicolr <comment><USER2> I helped build a similar tool at 99designs. I blogged a bit about how we built it here: [http://99designs.com/tech-blog/blog/2012/08/02/color- explore...](http://99designs.com/tech-blog/blog/2012/08/02/color-explorer/)

It uses R-trees to index colors in the Lab color space to do fast perceptual nearest neighbour color search.

We open sourced the code behind it too, so you can implement search by color type features on your own set of images:

<https://github.com/99designs/colorific> \- for extracting colors from images

<https://github.com/dhotson/colordb> \- for doing fast perceptual nearest neighbour color search

<comment><USER3> very nice and simple, thank you

</comment></comment><comment><USER4> This message is displayed when you try to search for more than 5 colours :)

"In accordance with common sense, decency, propriety, sobriety, and the Revised Search Limitations Act of 1742, we respectfully inform you, our dear user, that the number of colours searched upon must not exceed 5. Thank you for your cooperation."

</comment><comment><USER5> I did not expect much from this - perhaps the same image with different color filters or somesuch. I'm pleasantly surprised: this is an ass-kicking tool and should be converted into a Photoshop plugin post-haste. And it has a sense of humor too. Very impressed!

</comment><comment><USER6> shameless plug: i recently completely rewrote "Google Search by Drawing" from scratch -> <http://search-by-drawing.fullstackoptimization.com/>

on github <https://github.com/franzenzenhofer/search-by> (MIT license)

the reason for the complete rewrite / V2 is shameful. the first version was deployed to heroku in 2011, then i never touched it again. last month i deployed a minor change to the fron-end html (of the old version <https://github.com/franzenzenhofer/searchbydrawing>), deployed to heroku again, the app crashed if you clicked on "search", it crashed silently. i tried to debug it on heroku (pain in the a __) as it worked perfectly on my local setup.... after a wasted weekend i rewrote the whole thing in half a day (now EC2 hosted). shameless plug story end.

</comment><comment><USER7> Allow me to point you guys to a project we did 4 years ago at the Exalead labs that does just that: <http://chromatik.labs.exalead.com/>

</comment><comment><USER8> Unfortunately, this is another in a long line of websites that die if you nuke Google Analytics. It's becoming a persistent problem.

<comment><USER9> Curious, so I looked. I figured they fire off tracking events when you click on the color swatches and yes, they do: onclick="javascript:pageTracker._trackPageview('/labs/flickr');".

I'm assuming you have JS enabled but have analytics domains blocked? Might be a good idea for site owners to start wrapping these pageTracker calls in try/catch statements.

<comment><USER8> I'm using Ghostery to block the load of the Javascript, and I imagine a few other HN readers do too. It's strange that they never considered that the GA tracking events might fail.

<comment><USER10> Recent versions of Ghostery (and NoScript) both provide 'surrogate scripts' to replace common JS resources that are expected to work by the active page.

You can see the noscript[1] ones at about:config (search for noscript.surrogate.*) but I'm not sure where the Ghostery ones live, or if it has specific ones for different trackers, or just a generic handler.

[1] GA replacement code appears to be (reformatted):

        (
        function(){
            var _0 = function(){
                return _0;
            };

            _0.__noSuchMethod__=_0;

            with (window) urchinTracker=_0, _gaq={
                __noSuchMethod__: _0,
                push:function(f){
                    if(typeof f=='function') f()
                },
                _link:function(h){
                    if(h) location.href=h
                },
                _linkByPost:function(){ return true },
                _getLinkerUrl:function(u){ return u },
                _trackEvent:_0
            }, _gat={
                __noSuchMethod__:function(){ return _gaq }
            }
        }
        )()

</comment></comment></comment></comment><comment><USER11> This is a great tool for designing web pages, but I'd like to be able to filter on licence types; I'm not so interested in images I cannot use in my web page.

<comment><USER12> They claim all the images are CC:

> We extracted the colors from 10 million _Creative Commons_ images on Flickr

<comment><USER13> But not all CC licenses are the same. Anything with NC isn't usable on a site with adverts.

So it'd be nice to have some checkboxes for the Creative Commons license types. Include/exclude Commercial, Derivatives, Attribution.

</comment></comment></comment><comment><USER14> This is fantasic! And kind of addictive. I used to use Tineye regularly for backwards-image search until Google unveiled their own. It's awesome to see that Tineye is still innovating. I hope we see more products from these guys in the future.

</comment><comment><USER15> Is this a fast index to 10 million histograms with a json output?

</comment><comment><USER16> Can anyone think of a nice Web-App idea that could implement this?

I was thinking, instead of having this as a raw search engine (which is nothing short of EXCELLENT!), maybe you could use it to find foods that looks alike? Something, maybe?

Come on guys, I know you're much more creative than me :)

<comment><USER17> Off the top of my head, and it's not great, but you could use it to select colours for an outfit and have it return a selection of clothing that matches the colour range provided.

<comment><USER16> Actually, it's a pretty slick idea mate! If you had a good marketing team, you could target big studios with this one :D

</comment></comment></comment><comment><USER18> This is really nice but the colours are somewhat artificial, thus the selections are somewhat biased towards man made images. I suggest using smaples of colours from real images, such as real skin, sea, sand etc.

<comment><USER19> Do you mean that the algo sorts on decreasing color frequency? i.e. you choose "blue" then the top results are images that are literally all "blue".

Usually when I want an image with a specific color, I don't want the entire image to be that color...

<comment><USER20> I get what you're saying. Maybe you could throw in a lower bound of the hue variation of the image as a parameter into the search to find "natural looking" images but with prominent fields of the desired color.</comment></comment></comment>


Satellite images from highly oblique angles are pretty mindblowing - <AUTHOR> https://arstechnica.com/science/2018/04/these-oblique-satellite-images-are-pretty-amazing/ <comment><USER2> Thanks for sharing this. Pretty neat imagery. There was another post above this on the list that equated it to Sim-city-esque aesthetic. I can totally see that on some of these.</comment>


Free online course: Programming for the Web with Ruby (Satish Talim) - <AUTHOR> http://rubylearning.com/blog/2012/01/21/free-online-course-programming-for-the-web-with-ruby/

<comment><USER4> Link won't open for me. Edit: A cached version: [http://webcache.googleusercontent.com/search?q=cache:MEzmvcy...](http://webcache.googleusercontent.com/search?q=cache:MEzmvcyccuUJ:rubylearning.com/blog/2012/01/21/free- online-course-programming-for-the-web-with- ruby/+http://rubylearning.com/blog/2012/01/21/free-online-course-programming- for-the-web-with-ruby/&cd=1&hl=en&ct=clnk)

<comment><USER5> Heads up: With the cached link make sure you click "text only" and it will load right away.

</comment></comment><comment><USER6> We have over 600 participants in 2 days. I am sure there are many more who would join. Are you there?

<comment><USER7> Nice work Satish; I could pick up Rails and coding simply because of your support. Thanks and keep it up. - <USER2>

</comment></comment><comment><USER8> Greatest timing ever! Just started learning ruby and rails. If some noob here is also interested, other resources (other than classical google,stackoverflow, youtube) I've found very helpful are lynda.com and peepcode videos. Thank you for this.

<comment><USER9> You may want to work through Michael Hartls' "Ruby on Rails Tutorial" (<http://ruby.railstutorial.org/>) as well

<comment><USER10> I think Hartl's tutorial is a must. At least the first three or four chapters. It's probably the fastest way to get on the road with Git, Github, Heroku, and TDD from square one.

<comment><USER11> Totally agree. Even though I went through the Agile book previously, I went through half of Hartl's tutorial primarily to learn how to use Rails with Git, Heroku, and TDD.

</comment></comment></comment></comment><comment><USER12> I'm sure I will be able to sign up when the site is back up, but I'm a little sad it's not working right now. I am eager to join.

</comment><comment><USER13> Resolve link, this is of great interest.

</comment><comment><USER5> The site is back up!

</comment><comment><USER14> link problem

<comment><USER6> The site should be working now. Hacker news traffic was the culprit - <USER3> blaming it though! Over 870 participants so far.

</comment></comment><comment><USER15> Great timing. I have recently started learning ROR and I would like to know how the course will be structured. Will it be a form of webinar or screencast?</comment>


Rebuilding HipChat with React.js - <AUTHOR> https://developer.atlassian.com/blog/2015/02/rebuilding-hipchat-with-react/?continue=https%3A%2F%2Fdeveloper.atlassian.com%2Fblog%2F2015%2F02%2Frebuilding-hipchat-with-react%2F&application=dac

<comment><USER2> This is really cool and a great write up! I've been using React for about 6 months on my side projects and I really love it. The only issue I have now is, where do I learn Flux? I mean I can go through the tutorials that they have , but there doesn't seem to be any standard Framework or canonical way of using it.

From the article "When Flux was announced, it was just a pattern. Facebook didn't release a library. We adopted the pattern for our new web client. However, because we built our Flux library from scratch"

Are there any posts/blogs that highlight the different flux frameworks? Or any recommended way to get started? There seems to be so many right now I'm feeling kind of overwhelmed on where to start (Fluxy, Fluxxor, Reflux, etc..)

<comment><USER3> First decide if you need Flux at all. I've seen a lot of "React people" talk about first getting all you can out of React-Router, and eventually if your app gets big enough you'll "feel a need" for something like Flux. If you're doing smaller apps as side projects, you may never even need to implement it.

But if you do, step one is read this: [https://reactjsnews.com/the-state-of- flux/](https://reactjsnews.com/the-state-of-flux/)

Then pick one and just start playing around.</comment></comment>


Misery of a nuclear war between India and Pakistan would be global - <AUTHOR> https://arstechnica.com/science/2019/10/misery-of-a-nuclear-war-between-india-and-pakistan-would-be-global/ <comment><USER2> The main uncertainty and weak point in these studies are the incorrect assumptions about combustible fuel loads in cities. Nuclear winter (or cooling) requires strong firestorm that lifts soot and black carbon (BC) high in the stratosphere.

Authors make the same increasingly erroneous assumption as previous studies. This starting assumption is the weakest point of the study.

>1\. We first assume that the area subject to fire ignition for a 15-kt nuclear explosion is the same as that observed in Hiroshima (13 km2). For different yields, we take the area subject to fire as proportional to the yield (15).

Hirosima had fire storm because it was densely build old Japanese city made of mostly wood and paper buildings. It was was full of breakfast burners that where thrown around in the blast (time was 08:15). There had been no rain for almost 30 days. Nagasaki was similarly build city but the fires were five times less intense.

I don't understand why nuclear winter studies keep using Hiroshima as their city model. They don't take into account changes in urban construction or overall decrease in fuel load. The increased use of electricity, different building materials and underground fuel tanks reduce the combustible fuel load several orders of magnitude.

</comment><comment><USER3> Anybody have a link to the publication? I can't find it on [https://experts.colorado.edu/display/fisid_110521](https://experts.colorado.edu/display/fisid_110521) (it mentions "Nuclear Winter Responses to Nuclear War Between the United States and Russia in the Whole Atmosphere Community Climate Model Version 4 and the Goddard Institute for Space Studies Model E", but that isn't about India and Pakistan)

I'm asking because the phrase:

 _"leading to Indian forces entering Pakistan. Pakistan responds with the use of a handful of tactical nuclear weapons targeting those tanks and troops"_

seems to indicate that Pakistan would respond by nuking its own territory. That may be the best choice tactically, but seems a tough choice for a government to make. Is the border area that empty that that it won't hit Pakistani harder than Indians?</comment>


Google has suspended Podcast Addict for having Podcasts about Covid 19 - <AUTHOR> https://twitter.com/PodcastAddict/status/1261651512947691520 <comment><USER2> This is a shame, best podcast app available on the playstore, by far.</comment>


Ask HN: What are your tricks for using your environment to influence yourself? - <AUTHOR>

I came across the John Cleese video on creativity recently, and his comment about setting up boundaries in space and time to allow yourself to be creative without distractions really struck home. I wrote up my own thoughts here (http://www.intellectualpornography.com/2010/09/one-oclock-daily-controlling-your-environment-to-control-yourself.html) but if you don't want to click, I'll copy and paste my top three below:
To do lists: they're great, but, in particular, I always write things like "catch up on Facebook" and "read my RSS subscriptions". I don't know why, but for some reason this lets me resist the temptation to hit the refresh button throughout the day. Refresh is the mind killer.
Coffee shops without a laptop: when I really want to work through a problem, I'll camp out at a local coffee shop, and leave my laptop, and even my phone if I'm feeling adventurous, at home. It's amazing how little pull the internet has when you're physically distant from any means of checking it.
Having other people depend on me: I value my word very highly, and so while I might slack off on things that only affect me, I'll go to great lengths to uphold even implicit promises that I've made to others. That's why, whenever possible, I try to take on new study projects alongside a friend.
So what tricks do you guys have for manipulating your environment in order to help put yourself in a particular frame of mind? <comment><USER2> Turn off the computer. Lay the yoga mat out the night before. When reading stop at the first great idea and do some action toward it.</comment>


Stephen Wolfram Guest Lecture at MIT (Artificial General Intelligence) (2018) - <AUTHOR> https://www.youtube.com/watch?v=P7kX7BuHSFI <comment><USER2> Title should have 2018.</comment>


Republicans Release Tax Plan, Cutting Corporate and Middle-Class Taxes - <AUTHOR> https://www.nytimes.com/2017/11/02/us/politics/tax-plan-republicans.html?hp&action=click&pgtype=Homepage&clickSource=story-heading&module=a-lede-package-region&region=top-news&WT.nav=top-news&_r=0 <comment><USER2> needs to have a fourth bracket where income over $10mil/yr is taxed at 91% with exemptions available for investing in R&D or providing seed capital that results in job creation. Why is this been described as the biggest overhaul in decades when it's clearly a mild reorganization of the rates and deductions?

<comment><USER3> This is no mild reorganization but a reorganization to the tune of trillions of dollars. And while I am all for redistribution of wealth, taxing rich people at 91% (or anything over the average rate in developed countries) is a great way to get people to leave for good and lose out on even the 39.5%.

</comment></comment><comment><USER4> The main part of this I object to is the repeal of estate taxes. I don't understand why they're doing it.

<comment><USER5> I don't understand why I should be taxed for dying... The state stealing any portion of my hard-earned and already-taxed wealth from my heirs is something I object to.

<comment><USER6> Estate taxes aren't really there for you and I, the common man. I think most estate taxes are marginal anyways (you pay lower taxes on the first X thousand dollars, etc.).

They exist to prevent the ultra rich and powerful from vacuuming up all the wealth. Daddy makes billions, gives it all to his children who go and buy more companies, make more billions, and after two or three generations, the entire country is owned by like 3 families. It exists to prevent Rothschild from ever happening again. You can't have a functional democracy when everything is run by a handful of people.

<comment><USER7> Billionaires can afford estate planners and trust lawyers, so wouldn't this disproportionately affect the poor?

<comment><USER6> Those guys all want a slice of the pie too, which means less gets passed down.

Hilarious that you think poor people give a flying fuck about estate taxes. Most poor people die in debt or with nothing to their name. I'm sure you could say the same for the middle class too.

</comment></comment></comment></comment></comment><comment><USER8> Seems to me like there could be unintended consequences to the changes for corporations and pass-through entities. Sounds like multi-nationals would be incentivized to move elsewhere so they are no longer seen as a US company and don't take the 10% tax hit, assuming they pay any tax at all even at present. Likewise for pass-through entities, if they want to be taxed at the lower rate, chances are they going to find a way to do that, regardless of the new formula.</comment>


"Twitter for Mac is done. ...no further updates" - <AUTHOR> https://twitter.com/parislemon/statuses/243850588452945920 <comment><USER2> Can someone ELI5 why they would do this?

<comment><USER2> Vast amounts of money provide the means to follow a fulfilling and simple lifestyle in a luxurious way without worry of sustaining ones family/self.</comment></comment>


What Are Spomeniks? - <AUTHOR> https://www.spomenikdatabase.org/what-are-spomeniks <comment><USER2> Oh wow. Currently in Bosnia & Hercegovina, did not expect to see this on the front page of HN. There are so many here. They are impressive to see in person. The one in Sarajevo is a monument to WWII soldiers: [https://www.spomenikdatabase.org/sarajevo](https://www.spomenikdatabase.org/sarajevo)

Also, Stećak, the medieval version: [https://bazerdzan.ba/blogs/blog/stecak- the-true-bosnian-trea...](https://bazerdzan.ba/blogs/blog/stecak-the-true- bosnian-treasure)

<comment><USER3> I was there as well a couple years ago and purposely sought a few out just to see them in person! Very imposing and interesting monuments indeed. Memorable, too.

<comment><USER4> There is a great book out with lots of pictures of these I'd recommend: [https://www.amazon.com/gp/product/0995745536/](https://www.amazon.com/gp/product/0995745536/)

Also for trivia, there is a Spomenik in the new Warzone mode in Call of Duty.

[https://www.callofduty.com/warzone/strategyguide/tac-map- atl...](https://www.callofduty.com/warzone/strategyguide/tac-map- atlas/verdansk-north/Zone-1B-Bloc-23-Jarvdinsk-Spomenik-Riverside)

</comment></comment></comment><comment><USER5> Funny to see those are referred to in English as "Spomeniks". After living in the US for a decade, looking at this definitely brings an incredible feeling of nostalgia.

Damn it. I want to go back in time, and back to Sarajevo.

<comment><USER6> Although it's a very unpopular sentiment these days, I also want to go back in time to Old Yugoslavia. I still remember reading "Moj Mikro" and "Svet Kompjutera", attending JUDEF in Šibenik and making friends with kids from all over Yugoslavia. My generation, at least, believed in brotherhood and unity.

<comment><USER7> I'm not so sure how unpopular it is.

I have a friend who steadfastly still calls himself Yugoslavian, rather than Macedonian.

Haven't really talked to him about why, and that's a sample size of 1, but there's others out there who at least look back fondly on Yugoslavia.

<comment><USER8> Croatian here, although I was a child when Yugoslavia fell apart (born in 1982.), I remember many details about life back then - and in certain aspects, it was better.

I had no notion of Croatians, Serbians, Slovenians, Macedonians.. we were all Yugoslavian, with slightly different accents. To this day, I've friends in all ex-yugoslavian countries and the feeling I get about them is that of brotherhood, not friendship.

We could go to seaside at any point for free or enjoy national parks.

Nowadays, it's cheaper if I fly to Thailand for 2 weeks. It costs me less than a week at my own country's seaside. National parks are overcrowded and deteriorating, and rightist-nationalism ruins the interaction for people like us - who don't hate and just want to get along and enjoy life together.

There was plenty of food and I particularly remember comics, especially characters called Raja, Gaja and Vlaja :)

The only thing I feel sorry for is the animosity that was stirred up because of selfish reasons, the feeling of brotherhood and ability to enjoy the land's natural beauties was something special. I hope that one day we can have all the good back without the negatives.

Stay safe brothers and take care!

</comment></comment></comment></comment><comment><USER9> HN is the last place I expected to find this, but thanks! The anglicised use of the word "spomenik" really caught me off guard (I'm from Slovenia), but it makes enough sense after reading the article. I'll definitely try to check this map whenever I travel around the region - the design and sheer scale of some of these was always fascinating to me and I'd love to see more if I happen to be around.

<comment><USER10> Is it Anglicized, or is it just using that Latin alphabet that some parts of former Yugoslavia employ (including Serbia and Croatia)?

<comment><USER9> It's anglicised as it's using the English pluralization. In Slovene, the plural of "spomenik" is "spomeniki", here it's "spomeniks". It's even explained at the bottom of the post.

</comment></comment></comment><comment><AUTHOR> Straight to the photos. They are beautiful! [https://www.spomenikdatabase.org/photo- directory](https://www.spomenikdatabase.org/photo-directory)

<comment><USER11> Thank you for taking the time to post the link. I would have moved on and missed them otherwise. They are truly beautiful indeed!

</comment></comment><comment><USER12> They are so strange and lovely. A symbol of another era. There are many of these spomeniks / pametniks in Bulgaria too, though it seems Yugoslavia really took it to the next level!

</comment><comment><USER13> I fell in love with one particular spomenik so hard I decided to make a small replica from concrete: [https://www.etsy.com/listing/728310082/concrete- brutalist-ww...](https://www.etsy.com/listing/728310082/concrete-brutalist- ww2-yugoslavia)

</comment><comment><USER14> See, without caring about its looks, I like this website. It gives some context, some explanations and helps me to know why I should care about this. It also provides some nice content to explore, some pointers to find out more. I just love it and I wish there were more websites with content like this.

</comment><comment><USER15> Bosnian here. I would never call spomeniks spomeniks in English. I would call them monuments and spomenik in Bosnian. Besides nostalgia that they cause in yugo nostalgic people - I don't see how they are special in any way

</comment><comment><USER16> To really understand many of these sculptures/monuments it's important to familiarize with the background stories of events that they were built to mark - mostly WWII battles and places of horrible pogroms.

A few links to add more context to some of the best known monuments:

Jasenovac [https://www.yadvashem.org/odot_pdf/Microsoft%20Word%20-%2063...](https://www.yadvashem.org/odot_pdf/Microsoft%20Word%20-%206358.pdf) , [https://en.wikipedia.org/wiki/Jasenovac_concentration_camp](https://en.wikipedia.org/wiki/Jasenovac_concentration_camp)

Bubanj Memorial park [https://en.wikipedia.org/wiki/Bubanj_Memorial_Park](https://en.wikipedia.org/wiki/Bubanj_Memorial_Park)

Battle of Sutjeska (aka Tjentište) [https://en.wikipedia.org/wiki/Case_Black](https://en.wikipedia.org/wiki/Case_Black)

</comment><comment><USER17> Is there not a perfectly fine English translation, "Memorial"?

<comment><USER18> No.

The locally-used name here, "Spomeniks", more precisely groups and identifies these structures than the foreign word "Memorial" would. Calling them by another name would make it difficult to communicate usefully about them, while simultaneously stripping away a piece of their cultural heritage: their native-language name.

Additionally, as the article notes, Spomenik translates to Monument in english, not Memorial. They may be both "Spomeniks" and "Monuments", but the more precise name "Spomeniks" uniquely refers to them, while the less precise name "Monuments" refers to millions of other objects not associated with this Yugoslavian cultural effort as well. Prior argument applies.

For example, we call "Stonehenge" and "Moai" by their locally-used names. They may also be "Monuments", but they have more precise names available, which are widely used.

<comment><USER19> "Spomenik" is literally the word for "monument", right? Here's an article from 1849 mentioning building a Napoleonic monument, calling it a spomenik:

[https://books.google.co.uk/books?id=rz8_AQAAMAAJ&dq=%22spome...](https://books.google.co.uk/books?id=rz8_AQAAMAAJ&dq=%22spomenik%22&pg=RA3-PA96#v=onepage&q=%22spomenik%22&f=false)

If you mentioned to another former Yugoslavian that you had drawn a picture of a spomenik, would it be implicitly clear that you meant one of these postwar memorials, or could they reasonably assume you meant, say, the statue of Bruce Lee in Mostar?

<comment><USER20> Croatian here. You're correct, if you only said the word "spomenik" to anybody from former Yugoslavia, they wouldn't be able to distinguish whether you're talking about precisely those monuments built after WW2, or any other monument built before or after the communist era. Or even, say, Washington monument (In Croatian it's literally called "Washingtonov spomenik"). The word "spomenik" means "a monument" and just that. I was actually surprised to learn that in English the word refers to monuments from a particular location and particular era.

<comment><USER21> Well, there are other examples - to me, Bohemians are my nation, to English people, "bohemian" describes behavior that used to be seen here (and way overblown in catholic-driven news sources at the time - Prague people were protestant) during the Middle Ages

</comment></comment></comment></comment></comment><comment><USER22> There are lots of monuments of this nature across eastern Europe and the old Soviet republics. I watch a popular YouTube channel where a British guy seemingly spends most of his time traveling around old Soviet places and visits lots of these monoliths (also bus stations, railway stations, anything that acted as a sort of 'monument' in Soviet times): [https://www.youtube.com/playlist?list=PLqWdYjn21PdH_SfBbtj7Y...](https://www.youtube.com/playlist?list=PLqWdYjn21PdH_SfBbtj7YBrpbTP-0BMa6)

I prefer the big monuments like spomeniks myself, but mosaics seem to be a particularly popular form of monument too, especially in Ukraine: [https://www.kathmanduandbeyond.com/photos-soviet-mosaics- for...](https://www.kathmanduandbeyond.com/photos-soviet-mosaics-former-ussr/)

</comment><comment><USER23> Funny trivia guitarists Vlatko Stefanovski and Miroslav Tadic recorded the album Krushevo in one of the monuments. Check it out, album and the monument, both are great!

I am trying to visit them all through time...

</comment><comment><USER24> Just like you have "chai" tea, or "naan" bread, so you now have "spomeniks" monuments.

What you have to remember is that these structures were erected to commemorate sacrifices that communists wished to be seen, but from a skewed, one sided perspective.

For example, during the WWII, in the whole of Germany occupied Europe, all the concentration camps were opened at the behest of of Germany. But not so in the Independent State of Croatia, which covered most of the territory of Croatia, Bosnia and Herzegovina, parts of Serbia and Slovenia. The monuments commemorating the camps are done in such a generic manner that you wouldn't know the victims from the perpetrators.

And while in Germany you have sites like Yolocaust[1] which ridicule those who don't know what the Holocaust was. You have companies like Valley Eyewear making their marketing campaigns using the Holocaust monuments.

1\. [https://www.bbc.co.uk/news/world- europe-38675835](https://www.bbc.co.uk/news/world-europe-38675835) 2\. [https://www.smh.com.au/business/companies/australian- sunglas...](https://www.smh.com.au/business/companies/australian-sunglasses- firm-deletes-ads-shot-at-croatian-holocaust-site-20180704-p4zpih.html)

</comment><comment><USER25> It's almost impossible to comprehend now that the communist revolution was, at one time, a highly progressive Utopian fantasy materialized. That for a short time it inspired works of art like this and was a source of optimism for millions of people before descending into the darkness of the cold war. It gives serious pause to the alluring ideal of socialism in this country. Everyone always thinks that their time will be different and that they have it all figured out. But the insidious side of human nature that always thwarts such ideals and reduces to authoritarianism is a constantly insurmountable baseline of what we are.

<comment><USER5> Keep in mind that Yugoslavia was a completely different thing during the cold war. It was a communist country that was not part of the Comintern, or the Warsaw pact. It, in fact, had open borders with the west.

This caused it to be in a much better place economically than the rest of the communist world.

There's an old nostalgic american tourist piece about it: [https://www.youtube.com/watch?v=0RRnCnO1Y2c&has_verified=1](https://www.youtube.com/watch?v=0RRnCnO1Y2c&has_verified=1)

<comment><USER26> I travelled from Italy into Yugoslavia in 1988 by train and I wouldn't exactly describe it as a pleasant experience - train stopped in the middle of nowhere and was surrounded by soldiers and everyone had to endure a _very_ thorough check of our travel documents. Travelling from Yugoslavia into Hungary on the same trip I don't think the train even stopped.

<comment><USER5> Interesting. I have no way of knowing, but my guess would be that your experience is a consequence of Yugoslavia starting to break apart. All out war started just 2 years after your trip.

A big part of Yugoslavia's budget came from tourism, so I don't think your experience was common in the years before the breakup.

Thanks for sharing though. I love hearing stories from Yugo history.</comment></comment></comment></comment>