Nuklear: A single-header ANSI C GUI library - <AUTHOR> https://github.com/vurtun/nuklear <comment><USER2> I really do not understand why 'single header' is considered a good thing, but I see this more and more often on libraries. What is the reason all the code is put in the header file?

<comment><USER3> Sean Barrett (who I think popularized the idea) has a FAQ on this ([https://github.com/nothings/stb](https://github.com/nothings/stb)) where he justifies it by pointing at difficulties with deploying libraries on Windows. Which is a fair point, but by going straight to header-only he skips the step where you can also just distribute a bunch of headers and .C files. The convenience of only having to include a single header is nice for quick weekend projects, but for anything bigger you're dealing with dependencies and build issues anyway.

I get some of the reasons that you would initially start out with a header- only implementation, but when your library grows, you probably want to split it at some point. For me personally, that point would be some time before the header reached 25k (!!) lines.

<comment><USER4> Some advantages of header-only vs .h/.c pair:

\- you can build simple tools contained in a single .c file, and you dont't need a build system for this (e.g. just call "cc tool.c -o tool" instead of mucking around with Makefiles or cmake)

\- the library can be configured with macros before including the implementation (e.g. provide your own malloc, assert, etc...), with the implementation in a .c file, these config macros must be provided via command line args, which implies a build system

\- you can put the implementations for all header-only libs used in a project into a single .c file instead of compiling the multiple .c implementation files, this might speed up compilation

Single-header libs have some of the advantages that a proper module system would bring to C and C++ (e.g. extremely simple integration into own project and increased compile speed), but without all the complexity of implanting a module system into C or C++.

<comment><USER5> Make is so simple that it can actually build you single file project without a makefile with less characters to type:

make tool

Et voilà.

<comment><USER6> Errr, I actually have to spend 5 minutes googling how to install make on Windows, then getting mingw and hating myself. So no, no it's really not that simple in general.

<comment><USER7> [https://github.com/tom- seddon/b2/blob/master/snmake.exe](https://github.com/tom- seddon/b2/blob/master/snmake.exe) \- standalone build of GNU Make 3.80. Has a couple of hacks in it to better support Windows-style paths with colons in it. I think this came from the SN Systems Playstation2 SDK. Thanks to the GPL, you can have it too.

(I have no idea whether this will successfully run a C compiler for you on Windows, though. I mostly use it to run Makefiles with phony targets as a cross-platform replacement for shell scripts.)

<comment><USER8> Oh no, Make 3.80...

Why not build a more recent version? This thing is 15 years old!

<comment><USER9> This sounds like something one should ask people who do not write portable makefiles, rather than porters of Make, which has been standardised for quite a while now.

<comment><USER7> They added some useful stuff in subsequent versions... my recollection (though this is going back a while now) is that even only 3.81 was a worthwhile upgrade over 3.80!

However I have better things to do than try to figure out how to build GNUstuff myself on Windows.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> I'm guessing this deals with accessibility the same way most other 'light' UI toolkits do - by not dealing with it at all?

<comment><USER11> How do you handle accessibility across Win/Mac/Linux?

<comment><USER10> Well, you could use Qt...

</comment></comment></comment><comment><USER12> Golang bindings: [https://github.com/golang- ui/nuklear](https://github.com/golang-ui/nuklear)

Never used it myself, but looks interesting considering the current state of go's UI programming options (i.e. fairly limited at the moment)

</comment><comment><USER13> It's even got bindings for Chicken Scheme: [http://wiki.call- cc.org/eggref/4/nuklear](http://wiki.call-cc.org/eggref/4/nuklear)

<comment><USER14> Also some for Common Lisp:

[https://github.com/borodust/bodge-nuklear](https://github.com/borodust/bodge- nuklear)

They are purpose-built for a particular engine though, so I'm not sure how generally usable they are.

<comment><USER15> This one is a generic but full thin wrapper over Nuklear. It's not tied to cl- bodge in any way :) [https://github.com/borodust/nuklear- blob](https://github.com/borodust/nuklear-blob) is an asdf system with loadable compiled shared libraries for it. Hopefully, it soon will be in the main quicklisp distribution.

</comment></comment></comment><comment><USER16> > No global or hidden state

Does that mean that one can detach an input field, save its state somewhere, create a new one and attach it somewhere else again and have it appear exactly as it was before (i.e. cursor position, selection, focus, etc)?

That's one of the pain points with VDOM frameworks (i.e. need to diff around UI components which shouldn't lose state), so I'm curious if this library gets it right.

<comment><USER14> There is no "input field", the UI state is entirely on your end :).

This is _immediate mode_ UI. It handles inputs and renders simultaneously. Consider a line from the example in the README:

      nk_slider_float(&ctx, 0, &value, 1.0f, 0.1f);

That line is responsible for both drawing the slider (at a place determined by value, with min = 0, max = 1, step = 0.1) _and_ setting the variable `value` to whatever position user is currently dragging the slider to.

Or:

      if (nk_button_label(&ctx, "button")) {
            /* event handling */
      }

That _simultaneously_ draws the button _and_ executes the conditional if the button was just pressed.

Immediate mode GUIs are used in games, where you think in terms of drawing frames, each visible for a fraction of a second. When using such GUI, you usually "clear" it at the beginning of the frame, feed it with input from current frame, then build up the UI at the same time as you're drawing it[0].

So basically, you're in total control of the state; there is no persistent "input field", you recreate it each frame with a function call, and it's up to you whether or not it's meaningfully the same input field as it was the last frame.

\--

[0] - most times, like in this case, "drawing" means you "build up" a list of display commands which then you feed to the renderer at the end - this lets an immediate mode GUI be independent of whatever graphics library you're using.

<comment><USER17> > It handles inputs and renders simultaneously.

I'm not sure that's the point. I think it's a good idea to decouple input and output (render).

The point of IMGUI vs traditional toolkits is, I think, rather that you don't have to communicate through an API to manipulate and sync state with the framework/library. The latter imposes lots of communication overhead and second guessing, and can't offer the same level of control.

<comment><USER18> When you say, draw a button in an immediate mode gui, the widget is drawn for this frame, which has not yet been flushed to the monitor. Yet the draw button function returns true or false on whether it was clicked. But how can that be, this button has not yet been flush to the display?

The imgui framework handles the previous frames events when drawing the current frame.

This implies that the only concept you really need to know using an immediate mode GUI framework, is that internally to the framework it needs some mechanism to identify objects between frames.

<comment><USER19> > Yet the draw button function returns true or false on whether it was > clicked. But how can that be, this button has not yet been flush to the > display?

A button being clicked doesn't really have anything to do with whether it's been drawn or not. The relevant information is whether the user has hovered the button with their mouse and (mouse position), and whether the mouse button is pressed (mouse button state), both of which are usually provided to the system on a per-frame basis. I've not used Nuklear, but this is how dear imgui works. If the GUI system knows where you are clicking, and must know the position of the button it's drawing (in order to render it), then it should be able to tell if it's being pressed.

<comment><USER18> I am unsure about where we disagree. What you quoted from me was a set up for my subsequent, unquoted argument.

Buttons don't fly around the screen over time. If a user clicked on the screen 1.0/144 seconds ago (assuming a 144 htz monitor), the user likely clicked on the button which is about to be redrawn.

<comment><USER19> I guess I don't understand why this would be true:

> The imgui framework handles the previous frames events when drawing the > current frame.

I'm not terribly familiar with the inner workings of these libraries, though, so I could be wrong. Since you pass in the input state for each frame, it's my understanding that they just process the current frame's "events" during that frame. It would be a little weird if you passed some mouse click event into the system and your Button() call returned true the NEXT frame (I think that's what you're suggesting).

<comment><USER18> That is what I'm suggesting.

Before I used immediate mode GUIs, I was familiar with using Qt, wx, and gtk. Never did X windows. So I never handled events directly, just indirectly programmed what would happen upon the event occuring.

I had been under the likely incorrect assumption that those frameworks, in order to correctly associate say a mouse click to a button, had a mapping of the previous frame's screen-space coordinates of all widgets, and when a click happened, they associated the click with the previously drawn widget. Because that is what was on the screen when the mouse was clicked.

Immediate mode GUIs baffled me. How could the drawing of a button, which has not yet been flushed to the monitor, return true or false depending upon whether or not it was clicked? The button is not yet on the monitor!!! After thinking about it for 10 minutes, buttons don't fly all over the screen. Whatever the bounding box for the button for this frame is likely the bounding box it had last frame. So the association is easy, assuming the imgui framework can keep track of object identity across frames.

Perhaps, I am just ignorant of how qt, gtk, and wx, actually work.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER18> For python fans, I've been working on pyNuklear

[https://github.com/billsix/pyNuklear](https://github.com/billsix/pyNuklear)

<comment><USER20> My first thought: I wonder if I can invoke this with ctypes from Python? I'll check this out, thanks!

<comment><USER18> My plan of action is result-driven: incrementally port nuklear's demo overview.c file to python. Each new piece of that requires adding more ctypes bindings.

Help/patches are welcome, as I only have limited free time to implement this.

</comment></comment></comment><comment><USER21> Nice. I also recommend checking out Nanogui (C++) by Wenzel Jakob: [https://github.com/wjakob/nanogui](https://github.com/wjakob/nanogui)

<comment><USER18> The reason that I love immediate mode GUIs like nuklear and dearimgui is that, unlike callback based GUIs like nanogui, qt, gtk, wxwidgets etc, I do not need to learn how the framework Works internally in order to use it effectively.

The lack of callbacks in particular, means that I do not need to worry about memory management very much. Or, I should say, I don't have to defer memory management to later.

I own books on wxwidgets and on qt. To be honest, although I've read them fully, I still don't quite know how to use them well, nor how would I teach teammates how to even if I did.

Using a tool like dearimgui or nuklear, I have no books, but 95% of the time I can just copy example code from the demo into my app, modify it slightly for my needs, and call it a day.

</comment></comment><comment><USER22> Before you use this in your next important application, please read the comment on accessibility that I posted the other day on the LCUI thread: [https://news.ycombinator.com/item?id=16329640](https://news.ycombinator.com/item?id=16329640)

<comment><USER23> Accessibility is always important to mention, which is why we should thank you for reminding us. In return, you have to understand that not every next important application will be used by blind people or people with disabilities, and as of such there is still room for people to develop new UI toolkits if they so please.

Again, thanks for reminding everybody. People need to think about it. Your advice could be toned down a bit to "please think about your audience, if you expect people with disabilities to be part of it think twice when making your own UI toolkit, or at least factor in the costs to build in accessibility features."

<comment><USER22> Thanks for your feedback. I do try to control the tone of my comments on this subject, because I get emotional about it, but I know a vitriolic comment isn't helpful. Still, I find it hard to moderate the scope of my advice. Several years ago, a blind acquaintance of mine briefly lost his job because some developer didn't pay enough attention to accessibility in an application that he was required to use. His employer re-hired him shortly afterward, because they found another role for him. But in the interim, he went through all the feelings associated with losing one's job, and he was lucky to regain employment so soon. I don't ever want anyone to go through that again because some developer used an inaccessible GUI toolkit, even if that toolkit was meant only for games. That's why I'm as vocal as I am here.

<comment><USER18> > Several years ago, a blind acquaintance of mine briefly lost his job because > some developer didn't pay enough attention to accessibility in an > application that he was required to use

Can you explain in more detail? As a person ignorant of these types of issues, I'm having a hard time understanding the connection between the lack of accessibility in an app to the firing of a blind employee.

<comment><USER22> Sure. We're getting off on a tangent now, but I guess that's why people can collapse subthreads.

Here's what happened as I remember it. The blind employee, Darrell, was providing technical support for a client company on behalf of his employer. At some point after he had taken on this role, the client added a requirement that anyone who worked with them had to use the Seibel CRM system in "high interactivity" mode. If I recall correctly from talking to Darrell, the high interactivity version of Seibel at this time (2006) used the Microsoft JVM. That, combined with the fact that the app implemented some custom controls with no regard for accessibility, made it completely unusable to him. So his employer laid him off. Luckily for him, they rehired him shortly after that, but only because they found a whole new role for him. One can question whether the real problem was the app developer, the client, or the employer. But the inaccessibility of the app was a critical factor.

</comment></comment></comment></comment></comment><comment><USER24> Reposting from a previous thread:

I have not had a chance to try it out for myself yet, but I have recently learned that webkit includes a direct-to-opengl renderer such that one can skip the Qt or GTK backend and write HTML/CSS/JS that outputs to the framebuffer directly.

</comment><comment><USER25> An earlier discussion: [https://news.ycombinator.com/item?id=11522452](https://news.ycombinator.com/item?id=11522452)

<comment><USER26> Most likely re-submitted after being mentioned 2 days ago.

[https://news.ycombinator.com/item?id=16327918#16328912](https://news.ycombinator.com/item?id=16327918#16328912)

</comment></comment><comment><USER27> Check out these alternative C++ GUI libs running in a web browser using WebAssembly:

\- AssortedWidgets: [https://shi-yan.github.io/AssortedWidgets/](https://shi- yan.github.io/AssortedWidgets/)

\- Dear ImGUI: [https://pbrfrat.com/post/imgui_in_browser.html](https://pbrfrat.com/post/imgui_in_browser.html)

</comment><comment><USER28> I used it once to provide a simple GUI for a some simulated annealing I had written in C, was more straightforward than I expected.

</comment><comment><USER29> Wow! This is the first time I'm seeing a project having two licenses. MIT and unlicense. You can choose whichever you want.

</comment><comment><USER30> It looks quite nice also. Last time I saw it I wanted to port to to Go(not bindings) but could not find details docs about implementation. Anyone know how it is drawing OpenGL or native?

<comment><USER31> It is API agnostic, you have to provide the functionality. There are some examples using various APIs here: [https://github.com/vurtun/nuklear/tree/master/demo](https://github.com/vurtun/nuklear/tree/master/demo)

</comment></comment><comment><USER32> I love it because I can write applications for iOS macOS android windows and have most of the code identical. There is no need of resources to make that easy. Almost too good to be true.

<comment><USER32> I could make an iOS application that is only 1 MB in size thanks to Nuklear.. More and more users will not want to try an app if it feels bloated. Nuklear allows to generate tiny binaries, I appreciate that.

</comment></comment><comment><USER33> Amazing. A great candidate to be included into suckless.org [1], in my opinion.

[1] [https://suckless.org/rocks](https://suckless.org/rocks)

</comment><comment> alok-g Question: How easy or difficult would it be to make responsive UI's with this?

Also, what would the performance be like as compared to native OS GUI controls?

</comment><comment><USER34> Is there a good reason for having logic in an H file?

<comment><USER35> Nope, but less typing of #include:s? Easier to send by mail? He seems to use defines to keeps function and variable definitions to one in the program it's included in.

</comment></comment><comment><USER36> As a small criticism, looking at the project page I get no clue whether this library works on Microsoft Windows.

<comment><USER18> Yes it works on windows.

Hopefully this does not come across as rude, but from the readme

"It was designed as a simple embeddable user interface for application and does not have any dependencies, a default renderbackend or OS window and input handling but instead provides a very modular library approach by using simple input state for input and draw commands describing primitive shapes as output. So instead of providing a layered library that tries to abstract over a number of platform and render backends it only focuses on the actual UI."

Under the demo folder, there are examples.

Nuklear works with opengl 2 and 3 both with sdl2 and glfw (both of which support windows) it works with direct 3d 9 and 11, with gdi (windows specific libraries)

<comment><USER36> Yes, I did see the readme and I do remember thinking "so does this means it runs on Windows as well?". It's not unheard of for linux-specific projects to simply ignore the existence of Microsoft world.

So I cloned the repository and opened up nuklear.h. If this library supports Windows, then CERTAINLY this file has to include "Windows.h", somewhere, right? Uhm.. no, it does not. Bad sign, I thought.

So, still confused, I thought "so let's look into this folder called "example". I look into canvas.c and I notice "#include <GL/glew.h>". So I thought "Oh dear, this is gonna be a bother to compile on Windows, forget it". As luck would have it, I never looked into the folder called "demo".

So at that point I honestly believed that this library was only sort of "semi- supported" on Windows, as often happens with these kind of projects. You know, the usual "if you're a bit of a masochist and you're willing to muck around with mingw and download glib.tar.gz stuff, you may get this to work". The fact that the GUI has a definite linux look reinforced that impression.

What I'm saying is, all my confusion could have been solved by just one line in the readme explicitely stating "this builds on Microsoft Windows using Visual Studio and a direct X backend, etc...". A little bit of redundancy, it helps sometimes.

<comment><USER37> That would be a bit inaccurate though - the core library doesn't have a backend. The example you found e.g. implements an OpenGL backend.

It doesn't reference any external libraries (maybe C runtime). IIRC it does not assume you have a malloc() function by default; you provide one or use a #define before include to tell the header it can rely on standard malloc.

</comment></comment></comment></comment><comment><USER38> C# Wrapper please!

<comment><USER37> There should be a link on the page. I started binding it to C# over Christmas out of frustration of one not existing, and someone else quickly picked it up and made a cleaner binding that I recommend more. Google NuklearDotNet for the latter.

</comment></comment><comment><USER39> You can't build a "ANSI C GUI library", because ANSI C has no graphical capabilities.

<comment><USER31> You can if you rely on the library's users to provide the non-ANSI functionality (like Nuklear does - you have to provide the graphics and input functionality).

<comment><USER39> I would say the requirements of the functionality you have to provide define what kind of library it is. It's a very different thing if it's a raw framebuffer, OpenGL context, Carbon API, a terminal or something like WASM.</comment></comment></comment>


Tom Conrad:"I guess Siri won't talk to you about music unless you pay her boss?" - <AUTHOR> https://twitter.com/tconrad/status/658682973680603136 <comment><USER2> Did you try explaining to her that SHE was the one who wasn't subscribed to Apple Music?</comment>


Twitter "Screwed Up" With Developers, Founder Says - <AUTHOR> http://gigaom.com/2010/11/17/twitter-screwed-up-with-developers-founder-says/

<comment><USER2> To quote BSG: "all of this has happened before, and all of it will happen again."

[http://www.macobserver.com/tmo/article/Watson_Developer_Spea...](http://www.macobserver.com/tmo/article/Watson_Developer_Speaks_Out_Against_Apple_Plans_Port_To_Windows/)

<comment><USER3> Also:

* Apple 'Spotlight' vs. LaunchBar/Butler (don't remember of QuickSilver existed at the time, but it's largely surpassed Spotlight's functionality)

* Apple 'Dashboard' vs. Confabulator (aka Yahoo! Widgets)

<comment><USER4> Oh yeah, Quicksilver's heyday was back then. I ditched QS for a day once Spotlight came out. Spotlight was pig slow, so I went back to Quicksilver until Leopard, years later.

</comment></comment></comment><comment><USER5> Twitter has now realized it's a platform company. Wow.

Dick C - here's what Twitter should do:

\- give users the choice to use any number of third-party interfaces, but implemented into the main site.

\- give users the choice to install add-ons into any or all of these interfaces on the main site: like with the Facebook.

\- have a pool of funds allocated to be distributed to developers based on the popularity of their apps and interfaces.

\- If Twitter doesn't do this, a third party could come and create a platform on a platform. If they're too successful they'll either be acquired, copied or choked by Twitter. For the latter two, they can split entirely with Twitter and compete in this micro-messaging space, and aim to make it useful for inter-machine messaging too.

<comment><USER6> Not really. Aside from a few simple applications (e.g. photos like TwitPic, etc.), the normal user doesn't really use any other third-party app. Have you seen oneforty? It's dying.

<comment><USER5> No one has time for it.

Why not take something like oneforty and embed it into twitter.com, and make the apps more like plugins. I'd straight away install anti-spam.

They could even model this system after a combination of wordpress.com and its large userbase with customization options, and wordpress.org self- installations, with a new nicely integrated plugin directory and manager.

I'd go far as to say, if I could start a startup tomorrow with many resources at my fingertips, I'd compete with Twitter in this way. (well I'd hold onto Twitter at first, but then let go once I have enough momentum. I'd also try and ride FB.) It's a no-brainer (at least to me). If they want to make Twitter ubiquitous (as was envisioned by Ev or Biz), it will need to improve in many areas, one even being a possible network layer.

</comment></comment></comment><comment><USER7> Who here is developing products relying on Twitter for their primary data stream today?

They had the world by the tail.

<comment><USER8> Who keeps the world by the tail for longer than that? One or two companies a decade?

</comment></comment><comment><USER9> Fred Wilson wrote an article at one point about how fantastic he thought it was that Twitter was screwing over their development community, and how the things were moving to the next stage for third party Twitter developers.

Has he re-evaluated his stance on that? Are FW and WE in agreement? I can't even really tell what this article is saying.</comment>


Floating pool whose walls will filter water in the East River - jack-r-abbit http://www.kickstarter.com/projects/694835844/pool-tile-by-tile

<comment> jack-r-abbit FYI: It is called +POOL. This was in the title I created but it seems someone much smarter than me figured it wasn't needed to name the product in the link title. Thanks.</comment>


Promising compound rapidly eliminates malaria parasite - <AUTHOR> http://www.sciencedaily.com/releases/2014/12/141205175027.htm

<comment><USER2> Sounds promising.</comment>


Metal Captcha - <AUTHOR> http://metalcaptcha.heavygifts.com/ <comment> david-given See also: IKEA OR DEATH: [http://ikeaordeath.com/](http://ikeaordeath.com/)

Can you tell the difference between a death metal band and IKEA furniture? It's harder than it sounds.

<comment><USER2> Warning: Loud sounds on that website.

<comment><USER3> I'm pretty sure that's a bug in Firefox, at least on Linux. They insist on setting volume at 100% for every new stream because "what if the user had muted youtube and is now wondering why the funny cat video on another site isn't playing". See [https://bugzilla.mozilla.org/show_bug.cgi?id=497164](https://bugzilla.mozilla.org/show_bug.cgi?id=497164) . And of course, they open a new pulse audio stream for every browser stream. The entire situation is one bad solution after another.

</comment></comment></comment><comment><USER4> I guess this would be a good way to keep people that aren't hardcore enough out of my online metal community...

<comment><USER5> And people above a certain age! ;-)

<comment><USER6> Considering this is an artform that peaked in '83, I'd say you're keeping out people below a certain age.

edit: Really downvotes?

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

<comment><USER7> I think that this is definitely contentious given that many of the best bands that formed that year didn't peak until much later. Death's best album, for example, is probably either Leprosy or Human, which are both from several years later.

Also, Stryper were formed that year, which is an automatic black mark for me (no offence to Stryper fans intended, it's definitely a matter of personal taste...). And why is Bon Jovi in a list of heavy metal?

From the list of albums released, I see a lot of cheese and a few classic albums, with some degree of overlap. It's not very impressive to me personally. Electric Wizard and Nile won't even form for another decade, Immolation won't start putting out their most important work until '96, Emperor until '91-ish. Actually, I find 1991 or 1993 way more convincing personally:

[https://en.wikipedia.org/wiki/1991_in_heavy_metal_music](https://en.wikipedia.org/wiki/1991_in_heavy_metal_music) [https://en.wikipedia.org/wiki/1993_in_heavy_metal_music](https://en.wikipedia.org/wiki/1993_in_heavy_metal_music)

I still reject the idea that metal has peaked yet.

Are you maybe a NWOBHM/Speed metal fan? I could definitely agree with that style peaking in the early-mid '80s.

<comment><USER8> I beg to differ on Death's best album. I would say they realized their true style on Human and peaked with Individual Thought Patterns and Symbolic.

</comment></comment></comment></comment></comment><comment><USER9> Noticed a bug. Murderdolls and The Black Dahlia Murder are included as 'metal'.

<comment><USER10> What else would you call BDM?

<comment><AUTHOR> Wikipedia says:

Black Dahlia Murder is melodic death metal [https://en.wikipedia.org/wiki/The_Black_Dahlia_Murder_%28ban...](https://en.wikipedia.org/wiki/The_Black_Dahlia_Murder_%28band%29)

and Murderdolls are horror punk [https://en.wikipedia.org/wiki/Murderdolls](https://en.wikipedia.org/wiki/Murderdolls)

<comment><USER11> Melodic death metal? WTF?

I'm actually more of an electronic music fan, but they both suffer from the same disease: hundreds of sub-genres with less than 10 producers/bands that can accurately represent them.

I hate sub-genres of music.

<comment><USER12> I actually like sub-genres, especially metal sub-genres.

Death metal, melodic death metal, math metal, black metal, doom metal, death suicidal black metal, funeral metal, funeral doom, drone, heavy metal, power metal, viking metal, pagan metal, folk metal, vampire metal, gothic metal, catholic metal, brutal death metal, technical death metal, trash metal, sludge metal, all of them have more than 10 bands, can you imagine? :)

<comment><AUTHOR> [https://en.wikipedia.org/wiki/Heavy_metal_subgenres](https://en.wikipedia.org/wiki/Heavy_metal_subgenres)

</comment></comment></comment></comment></comment></comment><comment><USER13> // edit: sense of humour failure. I care too much about blocking spam :)

Sorry, but this is harder for humans than bots.

The logos are quite distinct and not randomly deformed, so it's easy for even a simple image recognition algorithms to tell them apart.

And the set is very small (for this problem anything smaller than millions is very small), so it's feasible to manually tag enough images for bots to brute force it.

<comment><USER14> I think it was intended in good humor, not necessarily as a secure alternative to regular captcha.

</comment></comment><comment><USER15> In Chrome right click the CAPTCHA image, click "Search Google for this image", copy and paste the resulting text search back as the results.

<comment><USER16> Yeah, I was thinking, wouldn't this be really easy to bot?

<comment><USER17> Yes, and impossible for people to fill in. Therefore, whoever manages to find the band correctly must be a bot. Mission accomplished.

</comment></comment></comment><comment><USER18> This makes me happy. Woe unto the person that receives a string of completely unreadable band logos, though.

Obligatory: [http://www.metalsucks.net/category/completely-unreadable- ban...](http://www.metalsucks.net/category/completely-unreadable-band-logo-of- the-week/)

<comment><USER19> The most recent one looks like "Wood Pestilence", haha. But I can't find a band with that name, so it must be wrong.

<comment><USER5> Is a good band name, though.

</comment></comment></comment><comment><USER20> I love it, I'd never register for anything again as the 5 or so times I clicked refresh every band logo was unreadable

</comment><comment><USER21> Some of these are so hard to read that I feel like this is better served as a puzzle rather than a CAPTCHA service. Having said that, I do think if you were to take one of these band logos and put one next to a picture of a cat and ask "WHICH ONE IS MORE METAL???", then you'd be on to something. ;)

<comment><USER15> Pick the one with the most black?

<comment><USER22> This could potentially be combated by greyscaling the cat image. Or filling the band logo with bright colors...

<comment><USER23> Most hard angles?

</comment></comment></comment></comment><comment><USER24> CRAPCHA, my little project from awhile back:

[http://crapcha.com](http://crapcha.com)

</comment><comment><USER25> I really can't solve any of these captchas, my robotic heart hurts :(

</comment><comment><USER26> Relevant xkcd : [https://xkcd.com/233/](https://xkcd.com/233/)

</comment><comment><USER27> Haha metal forums around the world are flocking to integrate to keep out 'falsies'.

</comment><comment><USER19> I saw one that was like some curves and lines and it clearly spelled out "dip", but apparently that was wrong! I really want to know what that one was.

<comment><USER28> Sounds like the Devin Townsend Project (DTP) [http://www.devintownsend.com/images/sprites/dtp_logo_links.j...](http://www.devintownsend.com/images/sprites/dtp_logo_links.jpg)

You see the d and the p kinda link together to cross the t, it's quite a neat logo when you think about it.

<comment><USER29> I recognized the Devin Townsend Project logo, but it won't accept "Devin Townsend Project", "Devin Townsend", "DTP", or "dtp".

</comment></comment></comment><comment><USER26> I tried to send a few images in google reverse image search and it works, so you can defeat the captcha by downloading the image and grabbing the best guess

</comment><comment><USER30> Darkthrone captcha is broken.

<comment><USER31> Yup!

[https://imgur.com/c0fPnNS](https://imgur.com/c0fPnNS)

</comment></comment><comment><USER32> I just went through and got 5 in a row. w00t! This is hilarious, haha.

</comment><comment><USER33> "buy a t-shirt!"

"I buy a t-shirt >>"

This is my new favorite web copy trope.

</comment><comment><USER34> These are really hard for me to even read. I've looked at a couple samples and I can't figure out what they say.

</comment><comment><USER35> Don't use this for anything practical.

There's a finite amount of band images.

It wouldn't take long for a Turing Farm to crack them all.

[http://blog.codinghorror.com/captcha- effectiveness/](http://blog.codinghorror.com/captcha-effectiveness/)

</comment><comment><USER36> I genuinely can't read some of those. And I'm a bit of a metaller...

<comment><USER37> I own albums from just about every band I saw as I was scrolling through. Even knowing what they're supposed to say, I still can't read some of them.

</comment></comment><comment><USER38> Based on the name and URL, I initially thought this was a website where you could buy jewellery or maybe statuettes featuring random distorted characters. I was a bit disappointed.

</comment><comment><USER39> This is great. I see it as more about the aesthetics than about airtight security, anyway. As an aesthetic project, it's perfect. Well done.

</comment><comment><USER40> It took me a while to figure out that blocking cookies means I get the failure message for the CAPTCHAs even if I guess correctly.

</comment><comment><USER41> The most br00tal captcha service out there

</comment><comment><USER42> I think that "Dying Fetus" on a anti abortion website will be fun :)

</comment><comment><USER43> Google Reverse image search is really good at solving these captchas

</comment><comment><USER44> The title for the post went from descriptive to ambiguous post edit.

</comment><comment><USER45> This should obviously be an audio captcha.

</comment><comment><USER46> Isn't that like gazillion years old? But k cool anyway..</comment>


Head dev of RabbitMQ response to OpenAMQ's announcement - <AUTHOR> http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2010-March/006754.html

<comment><USER2> Not much by way of technical content. Although when the original charge is that the protocol is "fundamentally flawed", I don't know how you can respond specifically beyond saying "it works and people are using it" (which it seems to and which they are).

<comment><USER3> You could say: "Yes, you are right. We, too, have noticed what huge pile of hopelessly overengineered garbage it is. Thanks for admitting your own mistake, so glad we can finally get rid of this monstrosity and move on to something sane."

This would be the automatic response from anyone who has had the misfortune to work with AMQP, thus I'm a bit baffled the RabbitMQ guys want to stick with it.

Edit: And yes, I'm not really surprised that I'm getting modded into oblivion. Still, would the downvoters mind to elaborate on what kind of exposure they've had to AMQP and what part of it they consider worth keeping?

<comment><USER4> I'm not down-modding you, but I am using AMQP in production on <http://tweeteorites.com/> with RabbitMQ.

I need persistence and flow control, as my consumers are unreliable and production rate is highly variable. This will become even more important as some of the new Twitter data streams come online.

It took me about 2 days to completely reengineer my backend around RabbitMQ and a custom daemon to serve stream requests. Granted, I already had RabbitMQ set up and routing background tasks for celery ( <http://celeryproject.org/> ), but it's still pretty trivial to set up and get running. The easy case, which I'm at now, is pretty easy, and I've got a good path to scalability with fan out exchanges.

That said, faster is better, and I'd be interested in zeromq if they had some of the features I need.

<comment><USER5> That is actually a very valid question - anyone know the stack similar to rabbitmq server + celeryd , but built around zeromq ?

<comment><USER6> Since ZeroMQ has no broker but is peer to peer, that would be somewhat unnatural.

Cheers

alexis

</comment></comment></comment></comment></comment><comment><USER7> ok, i am a bit clueless here, but if 0mq has no persistance, how is it reliable (durable)? or, if it's not reliable (durable), isn't this whole debate comparing apples and oranges?

[edited to clarify i am talking about durability and not just reliability in the tcp sense]

<comment><USER2> You are correct, there is no persistence. 0MQ is basically just a step above socket level communications, while obviating all of the tedious BS socket programming forces you to do.

Here's a good intro to 0MQ from lwn.net, along with sample code: <http://lwn.net/Articles/370307/>

<comment><USER7> thanks. this seems an awful lot like the nosql "debate" in that the two "sides" (typically) have different priorities (and the differences are similar, related to consistency and scaling).

[and also makes imatix not look that good, if any customers need the durability part, which is quite a common requirement]

</comment></comment></comment><comment><USER8> This doesn't address 0MQ's performance improvement claims, which I would have thought was the biggest thing the RabbitMQ guys would want to address.

<comment><USER9> If you don't need to provide persistence and flow control it is amazing how much faster you can go...

<comment><USER10> And if you do, things can became pretty complicated.

<comment><USER9> Absolutely. I happen to need these bits so zeromq is a non-starter for me. I am mildly annoyed by the "we are faster" rhetoric without the "but we only support a small subset of the useful things you can do with a message queue" caveat, but it is a mostly meaningless bit of marketing so I can let it slide; anyone who really needs those sorts of speeds knows how to actually evaluate products and is unlikely to be suckered by a false dichotomy setup like the one on the zeromq home page.</comment></comment></comment></comment>


Condoleeza Rice joins Dropbox board - <AUTHOR> http://www.cnet.com/news/dropbox-grows-leadership-team-with-condoleezza-rice/

<comment><USER2> She's been on company boards before. Is this (politicians on board) common in US?

<comment><USER3> Its quite common for politicians to be business people as wel. I wouldn't say that many "pure politicians" sit on boards, though.</comment></comment>


MAPS – Legalizing Psychedelic Medicine - <AUTHOR> http://www.maps.org/ <comment><AUTHOR> With the interest in MDMA on HN lately (e.g. [https://news.ycombinator.com/item?id=15120656](https://news.ycombinator.com/item?id=15120656), [https://news.ycombinator.com/item?id=13069813](https://news.ycombinator.com/item?id=13069813)), this seems relevant. This is the organization behind all of the MDMA research.</comment>


Beautiful PHP - <AUTHOR> http://devpy.wordpress.com/2013/03/02/beautiful-php/

<comment><USER2> Not exactly sure what the "tips" are in these, most of them just look like cruddy PHP code.

In the 2nd part of Example 2, using "else if" instead of several "if" statements to check the same value would result in fewer comparisons having to be done since the way it's written now the second comparison will always run even if the first one was true. It would be even better to use a switch statement if you're comparing the same variable in each case.

<comment><USER3> > most of them just look like cruddy PHP code.

Complete with extra syntax and forgetting your own tips from one example to the next:

> return ($string === "");

parens unnecessary:

        return $string === "";

> $ret = false; > if( time() > $end_time ){ > $ret = true; > } > return $ret;

aka

        return time() > $end_time;

> function ($string = null){ > if ($string == '' || null) return 'massage';

pretty sure he meant to say

        if ($string == '' || $string == null)

because there's not point to if (cond || null) since null is falsy, it's the exact same thing as if (cond)

> $data = include 'school_data.php';

Oh god, no…

> $data_update = $data + array( 'name' => 'surname', 'size' => 40 );

That's not an array _update_ , since it doesn't _update_ the first array.

> if(!is_array( $options )) $options = (array)$options;

That's absolutely horrible, you've got to know that contrary to what you might expect PHP doesn't convert a sequence of characters (a string) into an array of characters, but essentially does `array($options)` (create a 1-element array with the string). So write that.

</comment></comment><comment><USER4> posts like this make me wonder how the frontpage curating process works at HN (or doesnt). i've posted things that had more value and upvotes than whatever this is supposed to be and never made it to the front page. (also php-related, mind you)

my guess is that someone wants to show how dumb php programmers are by selectively promoting stuff like this. just sad.

</comment><comment><USER5> Hm, yeah, if a poorly written article with this "beautiful PHP" is what's needed to make it to the frontpage of "Hacker News" I think something has gone awfully wrong.

Not to mention most of the code is absolutely horrible and should not be used for anything.

</comment><comment><USER6> This seems representative of the PHP community in general. The only thing you need to qualify PHP as being "beautiful" is to apply a few tips on how to iterate over your array.

There are many other ways to make PHP beautiful. In fact, you can make object models that are almost as flexible, DRY and elegant as they would be in any other language.

</comment><comment><USER7> Challenge to PHP programmers here: can you point me to some actual coding best practices for PHP (besides PHP the Right Way)?

<comment><USER8> <http://www.codular.com/> has some good examples. Further, anything from the symphony framework and the composer stuff is quite good.

See <https://github.com/php-fig/fig-standards> for some of the good work that is happening.

</comment></comment><comment><USER9> Ugh. Articles like this make me want to join the PHP sucks crowd, and I really hate the PHP sucks crowd.

</comment><comment><USER10>
        if ($string == '' || null) return 'massage';

Heh, beginner mistake.

<comment><USER11> Two of them, actually.

<comment><USER12> Only two?

1) if ($string == '' || null) can be improved as if (!$string)

2) $string is a poor variable name

3) if and statement on the same line is bad practice (the return can easily be overlooked when browsing through the code

4) Not using { and } is bad practice.

5) 'massage' should probably be 'message'

The code improved should be something like:

      if (!$name) {
          return 'No name given';
      }

<comment><USER13> Due to the "PHP beauty", ! $string isn't equivalent for $string == ''. In this case it is better due to the logical evaluation clusterfuck that PHP does. Example: passing an empty array() as $string bypasses the if, while ! $string is sane enough, but the bang operator fails with "0" which is a valid string that "happens" to evaluate to false. I know these are edge cases, but can lead to funny bugs. Not so funny for those who debug that.

</comment></comment></comment></comment><comment><USER14> supposed to be ironic right?

<comment><USER15> I was wondering the same!

<comment><USER10> Looking at the other articles on the site, I think the poor guy is actually earnest.</comment></comment></comment>


Communicating Sequential Processes (1985) [pdf] - <AUTHOR> http://www.usingcsp.com/cspbook.pdf

<comment><AUTHOR> For those wondering: Both Go and Clojure are modern languages that heavily use the concepts Tony Hoare described in this book to manage concurrency and parallelism.

Rich Hickey (Clojure): [http://www.infoq.com/presentations/core-async- clojure](http://www.infoq.com/presentations/core-async-clojure)

Rob Pike (Go): [https://www.youtube.com/watch?v=cN_DpYBzKso](https://www.youtube.com/watch?v=cN_DpYBzKso)

</comment><comment><USER2> The CSP implementation in ClojureScript has been used to inspire an implementation in JavaScript - by James Long of the Mozilla Foundation:

"Taming the Asyncronous Beast in Javascript" [http://jlongster.com/Taming-the- Asynchronous-Beast-with-CSP-...](http://jlongster.com/Taming-the-Asynchronous- Beast-with-CSP-in-JavaScript)

</comment><comment><USER3> Url changed from [http://www.usingcsp.com/](http://www.usingcsp.com/), which points to this.

<comment><USER4> One item that is missed by linking directly is the copyright information, which includes this:

"However, such copying, printing, or distribution may not: be carried out for commercial gain; or - for copyright reasons - take place within India, Pakistan, Bangladesh, Sri Lanka, or the Maldives; or involve any modification to the document itself."

Which may be important as some users here are located in those areas.

<comment><USER5> Ah, the less traditional "this book is free in the United States but expensive in India" school of publishing. Whoever owns the Indian copyright must really resent the internet.</comment></comment></comment>


Groupon says it'll end trademark spat with open-source community (update) - <AUTHOR> http://www.engadget.com/2014/11/11/groupon-gnome-foundation-trademark-war/

<comment><USER2> Groupon is doing the right thing here, but probably only because it's also the smart thing.

</comment><comment><USER3> Somebody probably told them about SCO.</comment>


3D engine on MS Excel without VBA (2018) [video] - <AUTHOR> https://www.youtube.com/watch?v=iCeOEQVUWZ0 <comment><USER2> Wow! This is really neat.

Another project watchers might find interesting is the top post on r/Excel, where someone made a video player in Excel because his machine was completely locked down.

[https://old.reddit.com/r/excel/comments/2jtd2f/worked_on_a_c...](https://old.reddit.com/r/excel/comments/2jtd2f/worked_on_a_completely_locked_down_machine_time/)

</comment><comment><USER3> For another completely insane but kind of fun way to abuse an office application, see "On The Turing Completeness of PowerPoint" [1].

(Gwern has a whole list of accidentally/surprisingly turing-complete things at [2])

1\. [https://www.youtube.com/watch?v=uNjxe8ShM-8](https://www.youtube.com/watch?v=uNjxe8ShM-8)

2\. [https://www.gwern.net/Turing-complete](https://www.gwern.net/Turing- complete)

</comment><comment><USER4> This will make a nice addition to my office computing playlist

[https://www.youtube.com/playlist?list=PLjIYRqpIFecpDSXqCOddU...](https://www.youtube.com/playlist?list=PLjIYRqpIFecpDSXqCOddUMshdRotSkD6I)

<comment><USER5> My favourite (ab)use of Excel, which is already on your list, is using it for HDR photography[0].

While I'd never use it for day-to-day anything, things like this are a really interesting way to show how things like HDR photography actually work. Excel can be very approachable for stuff like this.

[0] [https://www.youtube.com/watch?v=bkQJdaGGVM8](https://www.youtube.com/watch?v=bkQJdaGGVM8)

</comment></comment><comment><USER6> Why...

<comment><USER7> Because the person who did it found it fun to do? I believe the site is called 'Hacker News' not 'Sensible and Useful Engineering News'</comment></comment>


How Dave Devitt Has Doubled Sales Yearly Despite A Bad Economy - <AUTHOR> http://www.beyondthepedway.com/how-dave-devitt-has-doubled-sales-yearly-despite-a-bad-economy

<comment><USER2> Bummer. I was hoping for more insights into how he doubled his sales.</comment>


The Last Programming Language - <AUTHOR> http://cleancoder.posterous.com/stub8-the-last-programming-language <comment><USER2> I guess the man who has found the One True Development Process has now found the One True Language as well. :-)

But seriously, I think before you can say things like "I don't think there are any more types" with any useful meaning, you have to have some idea of what a "type" of programming language is.

For example, most current languages are at least strongly biased towards either a declarative style or an imperative style. Considering only languages that are in reasonably widespread practical use today, rather than some hypothetical ideal, we see that a declarative style can lead to very neat expressions of pure data manipulation, but is often less effective when we're dealing with side effects and a time dimension. In contrast, an imperative style puts things like timing and side effects front and centre, but tends to lack both the elegance and the safety that more declarative abstractions can bring. Both approaches have their strengths, but for a general purpose programming language, I don't believe either is ideal on its own.

Is it a stretch to think that future languages will support both better ways of describing real-world processes (things with a time dimension and effects that might interact) and better ways to describe pure data manipulations without specifying irrelevant details? Would a language that made a sharp distinction between these two goals, instead of trying to bend both aspects into a single programming style, be counted as a new "type" of language?

One could imagine a similar "middle ground" debate between other extremes as well. Again, most mainstream languages today are basically either statically typed or dynamically typed, though we do see a few common overlaps, such as polymorphic OO function call dispatch and "variant" types in otherwise statically typed languages. Would a language that was statically typed by default but natively supported dynamic typing within the system look like anything we see today? What about a language that was basically dynamically typed but supported type annotations for checking some properties at run-time, or in advance? How does that compare to the kind of type inference we see in some of the more expressive static type systems today? Again, there are already a few languages that are experimenting with some of these ideas, but I suspect they are a long way from becoming the norm yet, if indeed they ever do.

I think we'll see plenty of innovation in programming language design for a long time to come, but at the lower-level end of the language spectrum it will mostly be in cleaner ways to blend between extremes that each have both strengths and weaknesses. I also expect we'll get much better at supporting things on a larger scale, where I think so far we're barely scratching the surface of how to build interacting, independent systems involving concurrency, distributed execution, fault tolerance, high performance, etc.</comment>


Show HN: CogSquared – identify and run behavioural science experiments - <AUTHOR> https://www.cogsquared.com/ <comment><AUTHOR> Would love to hear comments or questions on this.

We've just launched and would welcome early users for feedback - shoot an email to: firstname.lastname@example.com and we'll get you started.</comment>


The future of the realtime patch set - <AUTHOR> https://lwn.net/Articles/617140/

<comment><USER2> The basic problem is that this was chiefly of use to companies making hardware, which is a highly competitive industry with very thin margins compared to software, so they won't pay for anything they don't have to pay for. Only in software are people fat and happy enough to actually fund open source development.

Avoid the hardware business.</comment>


Your office help desk is jealous - <AUTHOR> http://codesketch.com/2010/01/15/your-office-help-desk-is-jealous/

<comment><AUTHOR> As an IT guy, I'm a big fan of how Haworth is trying to remove the help desk stereotype. Some seriously smart guys over there.</comment>


The Instrument That's the Key to Electronic Music's Future - <AUTHOR> http://www.wired.com/2015/03/linnstrument/?mbid=social_fb <comment><USER2> Many keyboards support varying pressure on a key to vary the sound, this is a common input. The rest of the article is just as bad and nonsensical, as is obvious to anyone who understands the technology of synthesis or knows musical performance.

This article is typical of Wired-- Junk technology writing. They haven't really been competent since the 1990s.

Wired articles really don't belong on Hacker News. It's "technology" reporting for people who don't understand technology.

<comment><USER3> Do they support that dynamically, though? I know a lot of high-end keyboards are able to detect how much force is applied to the key and adjust the sound (usually volume) accordingly (i.e. "velocity sensitive"), but these are usually like pianos, where the force is only checked during key press, not throughout the sustain; the CS-80 is instead fully pressure-sensitive (volume will adjust as you ease off pressure or reapply it without having to restrike keys), which is what the article's referring to, and which I've yet to encounter in the wild (though if you do know of a good example of such a keyboard - particularly one that can apply "aftertouch" per-voice like what the CS-80 does - I'd be interested; I've been looking for a good keyboard to add to my shopping list).

<comment><USER4> I just bought this tiny MIDI controller: [http://www.cme-pro.com/xkey- specs/](http://www.cme-pro.com/xkey-specs/)

On the features list: "Polyphonic aftertouch".

It's a little scary; I thought that was a super common feature and didn't think to check that the one I was ordering didn't support it. I'm glad it does, though.

</comment></comment></comment><comment><USER5> I would love to have one of those, and i think poly aftertouch is pretty uncommon (I have an Maudio Axiom (channel aftertouch) and Yamaha SY35 with some kind of AT). People have told me Korg and Kurzweil had the best aftertouch of the vintage synths

But: poly aftertouch for... $100: [http://www.amazon.com/Xkey-25-Key-Portable- Musical-Keyboard/...](http://www.amazon.com/Xkey-25-Key-Portable-Musical- Keyboard/dp/B00DU2VKV8)

</comment><comment><USER6> Where can I find an hackable input component that does XY and aftertouch? The Synaptics ForcePad seems ideal but it looks like it's only available integrated into laptops.

<comment><USER7> The kmi quneo and qunexus have some of that sort of hackable vibe.

</comment></comment><comment><USER8> I think out of all the new keyboards, I like this one the most: [https://www.roli.com/seaboard/](https://www.roli.com/seaboard/)</comment>


Ask HN: SQL based e-mail clients? - <AUTHOR> I have almost 20 years worth of e-mail. I probably don't need it all.
However, e-mail clients change. Sometimes I change my primary OS. Currently I am on OS X.
I am looking for an e-mail client that uses SQLite or SQL based backend. Everything I have is in .mbox, so pretty portable. But, if I could fire up a SQL tool and run queries, I could always have access to my e-mail, client agnostic.
Does anyone know of anything that exists? <comment><USER2> [https://github.com/tangentstorm/blackmail?files=1](https://github.com/tangentstorm/blackmail?files=1)

[https://www.sqlite.org/cvstrac/wiki?p=ExperimentalMailUserAg...](https://www.sqlite.org/cvstrac/wiki?p=ExperimentalMailUserAgent)

Hell, Thunderbird uses SQLite I believe as well...

</comment><comment><USER3> Not SQL, but "if you've been looking for a fast, global-search and tag-based email system to use within your text editor or in a terminal..." [https://notmuchmail.org/](https://notmuchmail.org/)</comment>


Ask HN: Inexperienced developer trying to get into serious development - <AUTHOR>

I'm a recent graduate with an ok CS degree and some experience with crappy PHP jobs, which is all I can get so far. I'm pretty good with Java, alright with C, and I'm learning Python, and I know my theory too. Every day at work I feel like I'm not using my skillset, and my paycheck reflects that feeling.<p>I'd love to get some opinions and ideas on where I could go from here. I've tried (and failed) to get Java jobs through job websites, I suspect because I have zero commercial or EE experience. <comment><USER2> If you know of an open source project that seems like fun to hack on, working on that might be helpful in a couple of ways: It builds your skills in whatever toolset the project uses, and also (if you're good) can help get you potentially useful contacts. (The best matches here for your skill set might be Java open source projects. There are plenty of them, but this, unfortunately, isn't the best place to find out them.)

Alternatively, if there's some small utility you could write (something the scale of, say, a jQuery plugin), or a small Django or Rails website, it might be useful to write that, package it, and write it up. There are far worse things to show an employer these days than an interesting portfolio of stuff on github.

EDIT: this essay on finding interesting stuff to work on just showed up in the 'new' feed, and might be useful: [http://svpow.wordpress.com/2011/02/03/tutorial-12-how-to- fin...](http://svpow.wordpress.com/2011/02/03/tutorial-12-how-to-find- problems-to-work-on/)

</comment><comment><USER3> I agree with jasonkester, come up with a unique project that uses the technology you want to be hired for. Cut out TV/distractions on week nights and build it out. Use that as a show piece for getting the job you deserve.

Also, try to avoid big job sites like Monster or Dice. If you really want a Java (insert any other technology here) job, find Java bloggers you admire and track down where they work. You should be able to find a number of smaller companies with people you know can teach you a trick or two. With the field narrowed down, try to run into those people at tech meetups and let them know you're in the market. Follow up with comments on their blog posts or joining their conversations on twitter. If you don't come off as a stalker, you should be able to parlay a decent job offer out of it :P

</comment><comment><USER4> Domain names cost $7/year. VPS hosting will cost you $20/month (or a bit more depending on tech). That's the only barrier between you and running your own software business.

If you want to learn to build something, build something. Register a domain, build a site and put it live. Iterate until it's something you're actually proud of, then use it as something you can point to and say "I can build sites like this".

That'll get you more credibility in front of a future employer than any number of years experience sitting in a cube doing Enterprise Java stuff.

Pick a tech you want to work in, work in it, then find a way to get paid working in it.

<comment><AUTHOR> I already have a domain and a couple of minor projects with no commercial potential. Thank you for the encouraging words though, I've accepted that I will be spending most of my time outside of work working even harder on my own projects, which will form my CV.

</comment></comment><comment><USER5> The short of it is "build something". As programmers we are creators.

The harder question is what to build. To answer this you can go to startup events, look at craigslist, or browse open source.

Do you want a Java job?

</comment><comment><USER6> programming is all about learning. when i was in high school, i started my first open-source project, an smtp server, and put it up on sourceforge. it was the crappiest C i've ever written, and even djb (of qmail fame) sent me a mail about security bugs in it. it's been a talking point ever since.

if i was hiring, i'd want to see proof that the candidate built something. it doesn't need to be a huge open-source project. even some code that only you find a use for, is better than not having any code out there.

<comment><AUTHOR> I put something on Sourceforge while at uni and it pulled in thousands of downloads. It works but it looks a bit naff now, should I have a really polished product in my portfolio?

<comment><USER6> good. don't worry about polish, just make it easy to find. i use github for this since it's very code-centric. doing stuff like this (it might not even need to be OSS) can be a bullet point or URL on a resume. you'll be ahead of many candidates.

</comment></comment></comment><comment><USER7> commit to open source or start a project of your own. The only way I learn is by doing and I suspect that is shared among a lot of us. Do, and do more. The skills will follow.</comment>


Are You a Woman Traveling Alone? Marriott Might Be Watching You - <AUTHOR> https://reason.com/archives/2019/02/05/hotel-surveillance-state-sex-trafficking <comment><AUTHOR> The right not to bothered is a civil right, something Marriott doesn't get (Victims have a lot of options to send signals):

 _When a tweet accused Marriott Hotels of "working with the feds and keeping [an] eye on any women who are traveling alone," training staff to "spot an escort," and "not allowing some women [to] drink at the bar alone," Marriott's official account proudly confirmed the observation: "You are correct. Marriott employees all over the world are being trained to help spot sex trafficking at our hotels."_</comment>


Ask HN: What did you find that was awesome this week? - <AUTHOR> <comment><USER2> I've been dog sick all week, apparently from iron toxicity. Why is this awesome? Because I was so anemic my entire life that I didn't get regular (monthly) periods until age 40. I took iron supplements for years and only stopped needing them a few months ago. As best I can figure, all this crazy alternative health stuff I do has fundamentally changed something in a big way. My best guess: All those years I took iron, I was absorbing it but not utilizing it efficiently. So I ended up high iron, probably while still anemic for a time. Now my body functions better and suddenly is wigging out over the iron overload. It's been kicking my ass. And I think it's the most amazing thing.

That's my awesome find this week.

(Prepares to regret this post. I should know better than to hang out online after a week like this week. :-/ Now onto the next thread. ;-) )

<comment><USER3> Congratulations! Here's hoping for a great long-term change!

<comment><USER2> Thanks. I've already seen lots of great long-term change. This is just a different order of magnitude than I expected after 10 years of this journey to wellness.

</comment></comment></comment><comment><USER3> Duck penises: [http://scienceblogs.com/neurotopia/2010/01/friday_weird_scie...](http://scienceblogs.com/neurotopia/2010/01/friday_weird_science_duck_duck.php)

I'm not kidding, either. Read the article -- it's pretty amazing how both male and female ducks have evolved to accommodate/discourage each other.

</comment><comment><USER4> The Asahi beer vending machines in Japan (which you put a glass into, and it tilts then pours then adds extra foam).

Also, interesting hacker types at the Quora party. Especially amusing watching Yishan (a former director of engineering at FB) riding a mechanical bull, then talking with someone about ksplice and kernel security.

</comment><comment><USER5> I wrote my first 'proper' module for Immunity CANVAS this week. There's no real decent documentation so I had to pretty much reverse engineer it from scratch, and learnt heaps of python tricks (and faux pas) in the process.

Also I found out that what felt like I was having a heart attack was actually pericarditis. That doesn't sound awesome, but it's treatable and way better than the alternative.

</comment><comment><USER6> 72/80 is a good score if you're using a T-scale: [http://commons.wikimedia.org/wiki/File:The_Normal_Distributi...](http://commons.wikimedia.org/wiki/File:The_Normal_Distribution.svg)

</comment><comment><USER7>
      eval('gBrowser.addTab = ' +
        gBrowser.addTab.toString().replace('return t;',
          'if(blank) { b.stop(); } ' +
          'b.markupDocumentViewer.authorStyleDisabled = true; return t;'));

</comment><comment><USER8> <https://domize.com/>

</comment><comment><USER9> <http://www.wired.com/threatlevel/2011/01/sms-suicide-bomber/>

this taught me much.

</comment><comment><USER10> GHC has an API! <http://www.haskell.org/haskellwiki/GHC/As_a_library>

</comment><comment><USER11> A job!

</comment><comment><USER12> Two St. Bernard / Lab puppies at a puppy rescue.</comment>


Ask HN: Python/Javascript dev coming to SF, any startups looking for help? - <AUTHOR>

I will be in SF from the 17th thru 21st to check out the city more before I make the final decision to move away from KC.  While there I would like to meet with any startups looking for Python developers.<p>If anyone is interested I can pass along a resume/details and see if we can meet up.  My email is email@example.com. <comment><USER2> [http://www.quora.com/Which-startups-are-hiring-in-the-San- Fr...](http://www.quora.com/Which-startups-are-hiring-in-the-San-Francisco- Bay-Area)

<comment><AUTHOR> Thanks!</comment></comment>


42: Answer to Life, the Universe and Everything - <AUTHOR> https://github.com/rsapkf/42 <comment><USER2> I have some trouble understaing the value of such an effort. It feels like you'd spend far more time organizing knowledge than cultivating new knowledge - a waste. Add to that maintenance on old docs.. Why do this?

<comment><AUTHOR> Hi, It's true that I've spent quite a bit of time into that but it's definitely not at the expense of cultivating knowledge. In fact, this has allowed me to learn more. Most of the repo was generated programmatically initially and that allowed me to be acquianted with services like GitHub, HN and Reddit APIs. I have a few scripts, bookmarkelts, and vim macros that do things for me. All I do is copy a chunk of bookmarks into the right place and push the changes that triggers mdbook build via Travis and updates the website.</comment></comment>


New free Seaside book, "Dynamic Web Development with Seaside", announced - <AUTHOR> http://book.seaside.st/

<comment><USER2> The biggest problem with learning Smalltalk, Squeak/Pharo and Seaside, for me, has been the lack of easy-to-find, thorough (and free!) documentation. There are some good tutorials out there, but by their nature they tend to give just a limited introduction to their subject matter. (I am a PHP programmer, and have yet to find anything to equal PHP's superb on-line documentation).

However, although "Dynamic Web Development with Seaside" is broadly tutorial in format - forgive me if I'm wrong here, I'm only part way through it - it is far and away the best documentation I have read on the subject.

After reading even the first few chapters, I experienced that sensation that all programmers probably know: the sudden flash of enlightenment, "aha! _now_ I get it! _That's_ how it works!" ... altogether a great book, and many thanks to the authors for their efforts.

</comment><comment><USER3> This is the best book on Seaside currently. It's highly detailed, covering (for instance) installation for most modern Smalltalk dialects, basics and fundementals, many practical tasks, along with examples for all of above. I would recomend it for both mature and beginning smalltalkers aiming at web programming itself as well as learning Smalltalk programming in general. Going to use the book in Smalltalk programming lectures.

</comment><comment><USER4> I totally agree with Simon's comment about experiencing the 'aha' moment. I had really been struggling to understand how Seaside worked, and then - all of a sudden - light dawned :-)

</comment><comment><USER5> Great book for a great web framework!</comment>