TeaVM – Ahead-of-time transpiler of Java bytecode to JavaScript or WebAssembly - <AUTHOR> http://teavm.org/ <comment><USER2> For the reverse, I wrote a WASM-to-JVM compiler: [https://github.com/cretz/asmble](https://github.com/cretz/asmble).

I think WASM has the ability for us to finally cross the language boundaries without marrying ourselves to C/C++ ABI. But at this early stage, there's no common stdlib for all languages to share.

<comment><USER3> > I think WASM has the ability for us to finally cross the language boundaries > without marrying ourselves to C/C++ ABI

Uhhhhh. This sounds like a kind of silly thing to say, when you just described the jvm. Except for the part where there _is_ a common stdlib.

<comment><USER4> If only the JVM had included unsigned math.

<comment><USER5> Legend goes Gosling did not found anyone at his department that could answer all his questions about unsigned arithmetic, hence why he left it out from Java's initial design.

However since Java 8, the java.lang numeric classes do support unsigned arithmetic.

Yes it is a bummer that byte is signed, requiring extra math to simulate unsigned.

<comment><USER2> Yup, I use those unsigned methods, e.g. [https://github.com/cretz/asmble/blob/3cb439e887245f23bf876e8...](https://github.com/cretz/asmble/blob/3cb439e887245f23bf876e8be7c68aa2ef1c920f/compiler/src/main/kotlin/asmble/compile/jvm/FuncBuilder.kt#L247). Luckily WASM only has 32/64 bit integer arithmetic.

</comment></comment></comment></comment></comment><comment><USER6> I read some parts of the spec of WebAssembly recently, and there were several things that disappointed me. To name a few:

1) There is no way to allocate in a function's variable stack continuous memory space that spans more than 8 bytes. This implies that if a function has as a local variable compound data structure such as an array or a struct, you have to a) have a global virtual stack pointer, b) manipulate the stack pointer to allocate space for the data structure in the virtual stack on the memory, c) read from or write to the allocated memory space, and finally d) restore the stack pointer before the function exits. This is exactly like what resulting assembly code of C compiler does. Why do we have function locals as a WASM primitive, then, if we have to end up with manipulating the stack pointer?

2) Currently a function can only return one value even though it is trivial to add support to mutiple return values taking advantage of the fact that WASM is stack-based. And what puzzles me is that mutiple return values is actually mentioned as a possible feature in the future, in several places in the spec. WASM reached the MVP before adding it, which means that we will have to stick with one-return-value functions for quite a long time even if it is added in the future.

<comment><USER2> See the GC proposal: [https://github.com/WebAssembly/gc/blob/master/proposals/gc/O...](https://github.com/WebAssembly/gc/blob/master/proposals/gc/Overview.md). Here you get structs, arrays, and tuples (that can be used for multiple returns). I am not disappointed that none of these features made the MVP personally.

</comment></comment><comment><USER7> "TeaVM is a primarily web development tool. It's not for getting your large existing codebase in Java or Kotlin and producing JavaScript."

"TeaVM is for you, if:

\- You are a Java developer and you are going to write web front-end from scratch.

\- You already have Java-based backend and want to integrate front-end code tightly into your existing development infrastructure.

\- You have some Java back-end code you want to reuse in front-end.

-You are ready to rewrite your code to work with TeaVM."

[http://teavm.org/docs/intro/overview.html](http://teavm.org/docs/intro/overview.html)

</comment><comment><USER8> That word,"Transpile". Lol. GCC transpiles C to assembly.

<comment><USER9> I always understood it as this

Transpilation: text to text (eg: Scheme to C)

Compilation: anything to anything but usually it implies text to binary code

transpilation is compilation but compilation is not necessary transpilation (the _all squares are rectangles but all rectangles ..._ )

<comment><USER5> So classical UNIX C compilers are now transpilers, because they always did text to text (C to Assembly), before forking to the assembler.

<comment><USER10> The first AIX C compiler called itself a "transcompiler" in it's manual, so yes, they are.

<comment><USER5> Any digitalized version of it available online?

<comment><USER10> Not that I know of.

But you can see the term of the day, "translator", here[0][1], and it isn't much of a leap to see how that evolved into translator-compiler, and then shortened itself.

[0] XLT86, 8080 to 8086 Translator [http://www.s100computers.com/Software%20Folder/Assembler%20C...](http://www.s100computers.com/Software%20Folder/Assembler%20Collection/Digital%20Research%20XLT86%20Manual.pdf)

[1] Pg. 47, Trans Z80 to 8086 Translator [http://www.patersontech.com/dos/Docs/86_Dos_usr_03.pdf](http://www.patersontech.com/dos/Docs/86_Dos_usr_03.pdf)

</comment></comment></comment></comment></comment></comment><comment><USER11> > _If you are a Java (or Kotlin, or Scala) developer who used to write back- > end code, TeaVM might be your choice. It's true that a good developer > (including Java developer) can learn JavaScript. However, to become an > expert you have to spend reasonable amount of your time._

Oh, this is nice. I finally have a reason to give Kotlin a go. I have some time off and want to write something basic. Pretty excited about this, Rust, and all things wasm popping up.

I am, in no way, excited about debugging it, though.

<comment><USER12> Kotlin compiles to javascript already...why wouldn't you go that route?

<comment><USER13> Kotlin/JS does not allow to reuse Java code and Java libraries. That's the main difference.

</comment></comment></comment><comment><USER14> So... from reading the page linked (admitting my ignorance)... I really wonder how useful this is? Not to be rude, or to talk ill of the work, it's far better than I could do... but!

With the release of other ahead of time compilers/VMs/features for the JVM/Java9, I cannot fathom this produces a small enough payload for a web app over a mobile connection.

Im probably totally missing something; could someone educate me on practical or even useful but novel applications of this?

<comment><USER15> If you are compiling to the JVM the output is probably nothing related to a web app.

<comment><USER14> One isn't compiling to the JVM with this, they're compiling to WebAssembly. And I think the point of this is to compile JVM code to WebAssembly, right? Am I missing something even larger than that?!

Should someone want another VM to run their code in; how, good is this at reducing the size of the std lib or the JVM itself? Can I depend on useful packages with this, or will they immediately shit the bed? Will the payload be something like 150mb?

<comment><USER15> In that case it will be interesting to observe this in practice. My fear (and prediction) is a lot of continued frustration and failure because the web environment is a different context than the JVM target with many different technical requirements. If the underlying technical differences in the environments were so trivial in the first place then simply swapping languages from Java to JavaScript wouldn't be so challenging.

</comment></comment></comment></comment><comment><USER16> Does this support GC?

<comment><USER17> [https://github.com/konsoletyper/teavm/blob/d882fd14a63cc1bd7...](https://github.com/konsoletyper/teavm/blob/d882fd14a63cc1bd76060b3abf34f85d3b013692/core/src/main/java/org/teavm/runtime/GC.java)

</comment></comment><comment><USER18> For those that are wondering but skimmed the page: It looks like they're thinking about SPA framework (Angular/React/Etc) and have a subproject to support them.

</comment><comment><USER19> Does this support (a subset of) the standard Java libraries? Where can I find what is supported? (I just saw mentions that reflection wasn't)

<comment><USER13> As for 0.5.x version, see this: [http://teavm.org/jcl- support/0.5.x/jcl.html](http://teavm.org/jcl-support/0.5.x/jcl.html)

And even more in 0.6.x (including Stream API)

</comment></comment><comment><USER20> In the end, how will this differ from a Java applet?

<comment><USER21> You don't need to have Java enabled in your browser.

<comment><USER20> The problem with that is you'll essentially re-download the entire JVM (and libraries) on each page load. If you don't want to use a Java applet, you would need to reimplement GC, JNI, and so on. Java didn't work on the web for a reason.

<comment><USER22> The browser would cache that automatically. And in many cases, you'd probably use a Service Worker to implement your own custom cache and "install" the application locally in the browser, so that is usable offline and only version updates are downloaded in the background.

<comment><USER23> Weren't applets also cached?

To be honest, I think that hate of applets comes from a time when 56kbps download speeds were considered very high, the average CPU had 1 core at 200 Mhz and the average webpage weighed 20k and executed 5-10 lines of Javascript.

I haven't used applets in the time, but if the user experience would be improved (nice looking UI, respecting modern UX conventions, etc.), I imagine your average applet from circa 1999 would run circles around Gmail, for example :)

<comment><USER24> Not only that, swing applets are notoriously fugly. One reason electron is successful is because it kinda looks like native. Swing Look and Feels all seem alien.

<comment><USER23> Swing can be styled, it's that not a lot of people really bothered. Jetbrains products use Swing and they're decent.

Not amazing, but decent.

</comment></comment></comment></comment></comment></comment></comment><comment><USER25> The argument against the critics saying WebAssembly would make the web less open was, that you could always disassemble WebAssembly and that said disassembly would be much more readable than for example x86 assembly.

So - since a quick research did not turn up anything - is there a WASM to C "transpiler" that generates readable C?

<comment><USER26> But that's not really the worry. It's always been possible to obfuscate JavaScript. All that changes with WebAssembly is that it might drive even more needless code, and complicate the web's architecture even further.

For example, web browsers for the blind become far harder to implement when ordinary websites are using heaps of boated JavaScript. (The web used to have HTML for content, and CSS for presentation. No longer. Now it's just a mess.) The problem would be compounded if WebAssembly+canvas were to catch on.

</comment></comment><comment><USER27> But how does garbage collection work?

Is it of the stop-the-world kind?

<comment><USER26> Looks like simple mark-and-sweep, yes.

[https://github.com/konsoletyper/teavm/blob/d882fd1/core/src/...](https://github.com/konsoletyper/teavm/blob/d882fd1/core/src/main/java/org/teavm/runtime/GC.java#L116)

<comment><USER28> So basically useless for browsers

<comment><USER13> Why do you think so?

</comment></comment></comment></comment><comment><USER29> I think, by now "transpile" just means "compile, but in web development".

Because, as we all know, web development you never compile things... /s

<comment><USER30> What is the difference between cross-compile and transpile? (Honest question, no sarcasm)

<comment><USER31> Doesn't "cross-compile" mean to compile a binary meant to run on a different platform than the host? Like, compiling a Linux binary on a Mac... If I'm right then that's nothing like what "transpile" means.

<comment><USER32> "Transpile" is an artificial buzzword, just meaning source-to-source translation, from Pascal to C for instance.

Actually, there is no such thing as a "transpiler". There are only _compilers_ which are programs which translate from one regular language A into another regular language B. It doesn't matter whether B is a high-level language or low-level machine code.

<comment><USER31> Yes, it's another word for source-to-source translation, you are right. It is not, however, cross-compilation, which is what I was responding to. So I'm not sure why you replied to _me_ with this statement.

In any event, is it so bad to have another word for source-to-source compilation? What is it that angers you about it?

<comment><USER32> > is it so bad to have another word for source-to-source compilation?

If you compile C to Assembler then you compile from one code (C) to another code (Asm, or machine code which is the compact form of Asm). What's the difference to a "transpiler"?

Wikipedia states that the difference is just the (almost) equal level of abstraction. I would call such a thing a high-level source-to-source compiler. The word "transpiler" is uncertain and barely known, hence the people here who ask what a transpiler is.

Cross-compilation is another thing since it means compiling on one platform for another platform. In all three cases we deal with _compilers_ from one regular language A into another regular language B.

</comment></comment></comment></comment></comment></comment><comment><USER33> The last thing we need in hindsight to Meltdown and Spectre is running untrusted binaries in the browser aka WebAssembly.

Btw deactivating WebAssembly support in Chrome 63 (up-to-date) doesn't work anymore!!

      chrome://flags/#enable-webassembly

Setting it to "deactivated" does nothing, WebAssembly is still active.

<comment><USER34> > untrusted binaries

afaik, wasm is not 'binaries' in that it's not an arbitrary blob of machine code fed right into the cpu. it's still running in a sandbox (a la javascript) including similar limitations wrt CORS etc.

<comment><USER4> And a sandbox so powerful that all the browser vendors just turned off SharedArrayBuffer.

[https://www.chromium.org/Home/chromium- security/ssca](https://www.chromium.org/Home/chromium-security/ssca)

[https://blog.mozilla.org/security/2018/01/03/mitigations- lan...](https://blog.mozilla.org/security/2018/01/03/mitigations-landing-new- class-timing-attack/)

WASM is portable binaries.

<comment><USER34> well, i guess in the same way that javascript or anything else is, when there are sandbox escapes. bugs are a thing.</comment></comment></comment></comment>


Native Mobile Apps are the New Flash - <AUTHOR> http://jim-silverman.com/blog/native-apps-are-the-new-flash/

<comment><USER2> Desktop web started catching up with flash by making web apps just as bloated and heavyweight as flash. Now instead of cursing out flash memory leaks, I'm shutting down Chrome once a day because each open tab is separately eating up hundreds of megabytes of ram to display some text (with "beautiful css" and "responsive design" and whatnot).

I for one am glad that native app development is as popular as it is. And I don't believe it's going anywhere despite the frantic efforts of all the pure web fanatics. This way, I can keep the good ones and get rid of the bloated ones on an individual basis... instead of trying to figure out which tab in my mobile browser is behaving badly in the background (and yes, mobile apps will need background code execution abilities before they can come anywhere near the abilities of native apps).</comment>


One Time Passwords coming for World of Warcraft - <AUTHOR> http://eu.blizzard.com/en/press/080626-ba.html

<comment><USER2> These are pretty cheap. I wonder if they could be repurposed for use with s/key in general.

</comment><comment><USER3> Sounds like a solution to keyloggers, but why charge?</comment>


Jared Kushner and Ivanka Trump Use WhatsApp for Official Business - <AUTHOR> https://www.nytimes.com/2019/03/21/us/politics/jared-kushner-whatsapp.html <comment><USER2> whatsapp uses end to end encryption

<comment><USER3> Which makes this worse than KT McFarland and Steve Bannon working on the deal to sell nuclear technology to Saudi Arabia through an AOL e-mail address ([https://www.newsweek.com/steve-bannon-mcfarland-personal- ema...](https://www.newsweek.com/steve-bannon-mcfarland-personal-email- nuclear-technology-saudi-arabia-1371358)).

The government can recover the e-mails that Bannon and McFarland sent for records purposes.

Kushner advises that he made records by taking screenshots of the conversations and forwarding them to a government inbox.</comment></comment>


Anger mounts over Barclays ban on rooted Android phones - <AUTHOR> http://www.gomonews.com/anger-mounts-over-barclays-ban-on-rooted-android-phones/ <comment><USER2> Anger mounted .. in November 2013 it seems. The article is that old, the petition from 09/2013.

Maybe it's relevant today, but I don't see any news here and I suggest adding a (2013) tag due to the linked article's age.

</comment><comment><USER3> Sky's apps are the same. As a Barclays and Sky customer, this is a ball-ache. Barclays I can kind of understand, because progress in British retail banking happens at a snails pace, but I was surprised at Sky crippling their apps in this way.

<comment><USER4> Sky only do it due to their contracts with the media providers, just like they don't allow airplay. Its not their choice.

</comment></comment><comment><USER5> Purely technical fix: an app shouldn't be able to tell if the device is rooted unless user grants it root permissions.

<comment><USER6> In general Android needs a permission fix - it should be possible to deny any app the permissions it requests in such a way that it cannot detect that they have been turned of (and for the user to enable/disable them as it wants). An app that has been denied internet privileges would find that it suddenly can't get a connection no matter when it tries, an app looking into the contacts would find them containing only those it has added or random contacts, etc.

I have been waiting for _years_ for this feature, I can't believe Google hasn't introduced it.

<comment><USER7> Think about this from your average end users perspective. They somehow manage to revoke permissions for an app, and parts of it stop working. They may not even realize they have revoked permissions, they would likely just assume the app is buggy.

Then they go and contact the developer for support, and make the developer spend a bunch of time troubleshooting why features aren't working.

All a feature like this would do is waste a lot of developer time, and cause users to unhappy with their phone/apps.

There appear to be a couple third party apps that do this: [http://www.xda- developers.com/android/protecting-your-privac...](http://www.xda- developers.com/android/protecting-your-privacy-app-ops-privacy-guard-and- xprivacy/)

<comment><USER6> I can see that being the first question any dev would ask.

Also who offers support for a 1 usd app?

</comment></comment></comment></comment><comment><USER8> Same for the lloyds app. I believe it got ~1k 1-star reviews after that. They included some more stupid changes at the same time, so it's not just rooted phone users, but it's going to be a large number anyway. At least the mobile version of their website still works.

</comment><comment><USER9> As much as the move is annoying and alienating for the tech-savvy (the same market Barclays are trying to embrace), I can see some logic behind the decision.

The type of person who roots their phone is almost always going to be technologically experienced, or at least idea of dealing with money through technology.

On the other hand, though, Pingit is new technology and is actually scary for some people. When I enabled it in-branch, the advisor was surprised - even she said she'd never trust it!

I imagine that internally for Barclays it's a big move and a sensitive one. A security breach in the early stages would be catastrophic for the service and their brand. They need security, and for that they need stability.

A rooted phone is not a stable environment for Barclays to run their software - it could have been changed in any number of ways. It's a logical decision for them to increase stability by removing the wildcard platforms where they can't be sure what's going on.

<comment><USER10> > I imagine that internally for Barclays it's a big move and a sensitive one. > A security breach in the early stages would be catastrophic...

> A rooted phone is not a stable environment for Barclays to run their > software - it could have been changed in any number of ways

This means it could be less stable, but I don't see how it would affect the possibility of a "security breach". You are talking about two different kind of issues as if they are related. Could you clarify?

<comment><USER11> By definition a rooted phone is compromised - a user has obtained root level privileged access. That's what 'rooted' means. The assumption is that it's the phone owner's actions that caused that to happen, but that's not necessarily the case. A third party could have rooted it. A local app exploit could have rooted it. Some clever malware that _hasn 't even been written yet_ that somehow escaped Android's security sandbox could have done it.

Ordinarily no one would care if a phone has been rooted or not. It's not important. But the point here is that allowing an app that has access _to your bank account_ to run on a rooted device is assuming that the device was intentionally rooted by it's owner. For a bank that should be assuming _far too much_.

<comment><USER12> There's no reason for a clever malware to root your phone. "Rooting" only makes sense if you want to replace 'su' to grant root to different apps. If a malware escalates to root, it can just do whatever it wants, it doesn't have to "root".

Besides, even if the malware really needed to "root" the device, it could just use the same process has RootCloak[1] to hide that fact.

There's no valid security explanation; the app must designed assuming it's running on an insecure system, because there's no way of knowing if the system isn't lying.

[1] [http://repo.xposed.info/module/com.devadvance.rootcloak](http://repo.xposed.info/module/com.devadvance.rootcloak)

</comment></comment></comment></comment><comment><USER13> Same for Natwest.

I believe the Channel 4 on Demand media player also does (did?) this.

<comment><USER14> And Sky Go. Which is frustrating. I want both an open device I control (as much as possible) _and_ to pay for my media legitimately. Stopping me accessing media I've paid for on my rooted device makes me more likely to seek it out elsewhere (I'm already paying for it, god dammit!)

<comment><USER15> With 4OD and Sky Go it won't be about security/stability - it will be about them worrying that you'll somehow either skip adverts and such and/or have an easy way to permanently download the streams.

The advertising/tracking thing is presumably why 4OD refuses to operate in incognito mode in Chrome (I see no valid more technical reason).

<comment><USER16> How does one detect incognito mode? I was under the impression it was the same as any other Chrome session except for history and cookies being wiped automatically upon closing the window.

<comment><USER15> I've never looked into it. I just know it complains if you try use it in that mode (or did last time I tried to run it).

</comment></comment></comment></comment></comment><comment><USER17> I can completely understand /agree with Barclays decision. I imagine apple will do the same once it's payment system gets properly implemented within iOS.</comment>


Every software company giving a take home coding test - <AUTHOR> https://twitter.com/realKetamine/status/1230127442733535232 <comment><USER2> Last summer I had an interview with a large insurance company for a front end role. The take home test was to produce 5 HTML+CSS+JS components to their existing designs (basically to take a PNG and turn it in to a web component). The components were a hero element, an information card, a notification banner, a list and a working calendar with selectable date ranges across different months. They were all to be made without any CSS or JS frameworks and they needed to be responsive. They suggested this would take about 4 hours.

I read through it and spent a couple of hours on it before abandoning the test and sending them an email to withdraw my application. If I was making those components properly I'd spend about week of solid dev time on them - 1/2 a day on each of the first four components and 3 days on the calendar..

Maybe I'm a terrible dev and very slow, but all that test really told me was that the developers there hack things together without spending time thinking about what they're doing, and on reflection I didn't want to do that.

<comment><USER3> I can respect that position. However, as a hiring manager I can see their perspective.

That perspective being, "How fast are you at good enough?"

Food for thought in the future. As a hiring manager I would have accepted all 5 done for 50% of all screen types, with developer comments on where you got stuck or what compromises you chose to make.

In my opinion that should be made clear in take-home tests. "You are allowed to cut corners, but please comment on WHY you did so"

<comment><USER4> Are you really looking for "engineers" who can half-ass a project from start to finish in 4 hours? That's the quality bar?

If I were in OP's shoes and feeling frisky I would point out to the hiring manager that for a real world project like that it would take at least 4 hours to just gather the requirements, write a design doc, and provide an estimate. 4 hours to do design, implement, and test something properly is ridiculous. And if you aren't focused on doing it properly, then——wait, what company are you hiring manager at?

OP's hiring company was an insurance company, not an Uber-For-Cats startup. The software he or she is eventually expected to write on the job is supposed to work.

<comment><USER5> An engineer should be capable of selecting the best solution for given constraints. That's a core of the job.

If the constraint is 4 hours, the manager can't expect nothing but 4h quality.

<comment><USER6> > If the constraint is 4 hours, the manager can't expect nothing but 4h > quality.

Yes, but how does the manager estimate that it indeed typically should take 4 hours when the numbers he gets are:

1\. From his employees who work at that company, intimately familiar with the problem domain, tools and possibly came up with the problem statement in the first place and solved it in 4 hours after thinking about and working on it with no other distractions

2\. From candidates self reporting the time it took to complete the problem severely undereporting the time it took them because they want to impress the employer?

Is 4 hours of focused, uninterrrupted time equal to 8 4 hours of unfocused, interrrupted time?

How does the manager discover the truth?

<comment><USER5> By looking at the result of 4 hours of such work, obviously. :)

</comment></comment></comment></comment></comment></comment><comment><USER7> Take home coding tests are fine. I really prefer them, honestly. The problem is when you do the test, write great code, they love it and ask you to come onsite, and then you get white-boarded by a group of people who never even looked at your code or resume and get rejected for not being able to cough up a DFS algorithm on the spot.

<comment><USER8> I'm always shocked by the examples that come up when people talk about when talking about whiteboarding. DFS is a simple, understandable, easily modifiable, and useful algorithm with many real world applications.

<comment><USER9> That there is a plethora of implementations of and documentation available for. There is no need to memorize an implementation.

</comment></comment></comment><comment><USER10> A coding exercise should, ideally, be a starting point for a follow up discussion.

Then discuss things you would do next given unlimited time etc and justify those points. That's plenty insightful into what a developer prioritises and how they approach software development.

Expecting a perfect solution isn't reasonable.

<comment><AUTHOR> That sounds ideal but oftentimes, intentionally or not, that isn't the expectation communicated. And in some cases I have seen take home coding exercises that are literally projects big enough for weeks of work. That particular small startup had copied their take home exam from a bigger company. They told me "work as far as I can," but it is intimidating and accomplishing a reasonable amount in say half a day still would feel like I had barely scratched the surface of the work they "suggested" I do "as much of as I feel like." It made me feel like an inadequate candidate by feeling like I can't possibly put enough of a dent in that task for it to be meaningful.

Oh and by the way the people asking me for that work were significantly more junior than me. I politely passed on the company and even beginning the take home test.

I have also had a company give me an API to build with sparse instructions. I did my best, I probably should have asked them more questions. I got no response. I followed up weeks later to see if there was more I could do with the coding exam or if I misunderstood it somehow. They didn't have anything else to say about the coding exam but they did invite me in for an in person interview. They then ghosted me and my further follow ups about the status of the hiring process.

The thing about the hiring issues in the industry is they aren't as simple as the solution you offered up. They are systemic and it doesn't feel like anyone is even trying to improve them. And that the changes that do happen are equally but differently absurd in their expectations as the mistakes of the past.

</comment></comment><comment><USER11> "Afterwards we'll ghost you or send a rejection email without providing any meaningful feedback."

<comment><USER12> Ya, ghosting...what is up with that? I get a kid doing that, they might not know better, but a CEO of a startup?

<comment><USER6> How can candidates attack the ghosting problem?

Leave a comment on "Who's hiring" that "Hey, I got ghosted by this company?"

<comment><USER13> Perhaps there can be a list on GitHub that updates with self-reported incidents. And there's always Glassdoor.

<comment><USER14> Glassdoor deletes reviews and has no problem with employers and marketing agencies writing dozens of fake, glowing reviews to drown out the real ones.

</comment></comment></comment></comment></comment><comment><USER15> I spent a good amount of time on one of these after a phone interview for a company I was mildly interested in. I'm confident it met all requirements, yet I submitted it and got no response one way or another. I could have put more time into it, but it met requirements and I thought, in the real world, would this company need me to make everything perfect or just good enough? However, in these take home tests where the implementation is so simple that submissions are judged on factors other than code correctness, it becomes an arms race between applicants and who has the most time to jump through hoops. I'd rather do a white board test and if I fail, have a chance to redeem myself with a take home test. In my experience it wasn't worth the time I put into it. At least it helped me make a decision.

</comment><comment><USER16> At a previous job we assigned folks a take home test, but paid an honorarium for their time. Then part of the interview was a code review session. Different projects for different experience levels, but never more than 15 hours total (usually more like 2-10).

Seems like the best compromise between flexibility for the employee, seeing actual real world work for the employer and allowing the candidate to shine.

</comment><comment><USER17> I'll do the take home over a whiteboard firing squad any day of the week.

<comment><USER18> What does this say about people who survive and dominate the firing squad?

<comment> 52-6F-62 Only that they've practiced dodging bullets in order to get a job designing kitchen appliances?

<comment><USER18> Well it identified a person who has the super human ability to dodge bullets. What other way to identify and hire a super human?

The kitchen appliance is a separate issue separate from identifying super humans.

<comment> 52-6F-62 The point being the ability to dodge bullets is irrelevant and costly when the task is to design a kitchen appliance.

<comment><USER18> The cost of the super human is irrelevant to the cost of identifying the super human which is the main point of the overall topic.

You are making the divergent point of "is it worth it to hire super human coders?"

</comment></comment></comment></comment></comment></comment><comment><USER19> These stories are why I'm so glad to have spent my career as a consultant, where this kind of BS doesn't happen (in my experience, anyway). I wouldn't dream of applying at any of these places for this reason alone.

<comment><USER6> Fair enough but a consultant is an orthogonal role to an employee.

This thread is about employees being frustrated with the current state of affairs.

A consultant is a business owner.

As a consultant, my deliverables are rarely code. They are strategy documents, reports, plans, proposals, market surveys and video conferences.

As a contractor, my deliverables are mostly code.

Neither of them is similar to an employee's role, although, as a contractor, my deliverables match up with those expected of an employee.

Which is why it seems to me that you are conflating consulting with contracting.

Perhaps you meant to imply you love working as a contractor not having to deal with what employees have to but employees have to "deal" with it because their role requires it.

<comment><USER19> As a consultant, I deliver lots of code in addition to documents. The two are not mutually exclusive.

It's sad that employees have to deal with BS like "whiteboard exams". Their role "requires" it only because their employers have followed that trend like lemmings.

So, yes I'm very happy to get hired (as a consultant) based on merit and proven experience.

I would not call it "orthogonal" (though that does sound smart in those documents), because it's more akin to a parallel than an orthogonal role.

<comment><USER6> > Their role "requires" it only because their employers have followed that > trend like lemmings

You speak as if the employer is a different entity than employees.

it's a collective. a composition of employees.

The employees bring it upon themselves.

Employees have to deal with BS like whiteboard exams because the employees themselves conduct the whiteboard exams!

The reason, why you are not subject to the rules of the employee is because you are playing a completely different game.

As the employees waste each other's time doing pointless pushups to prove how good of a fit they are at a moving company (after all a physically fit person can move more stuff per hour than one less fit!) you help sign up more customers who need to be moved and make it a more pleasant experience so the same customers remember your client.

It might be that you end up doing a few pushups or even move boxes but the real value is in the above.

While every employee at a moving company is focused on maximizing their push up count, you make your client come ahead in the market by retaining more customers and sign more up. then repeat

</comment></comment></comment></comment><comment><USER20> Here we go again. As this seems to pop up quite often, it's seems like it's an important point for companies and candidates. I think that there are good take at home coding tests, and there are bad ones, there are good in person coding interviews and there are bad ones.

For me personally, I always liked take at home tests, and we are doing this at my current company. We have a small task with two levels, one to complete quite fast and the second level is if you really want to show off and spend more time on it. We use it as the main technical skills evaluation for the in person interview, because it opens up an actual discussion and we can talk about reasoning, see how candidates take feedback and how they can explain what they did. In the same time, there is another department with us that has a take at home task that I wanted just for laughter to try, it took me a whole weekend and it was insane. So I can see where some people are coming from. In the same time, we also had some cases where we paid the people (who requested it) for the time spent on the task, and we hired one, which was one of the most worst decisions that we made, because he turned out to be one of the most selfish and self absorbed people we hired.

In the same time I've been through some ridiculous situations where I was left alone in a room with no phone allowed, no pc, just write on a paper some SQL queries based on some printed tables from a spreadsheet, or, in another case to write on a flip-chart some code to print the first X prime numbers in front of 3 people. This I also find quite ridiculous, but it was 8-9 years ago.

In the end it's also how you feel as a developer about these things, if you are ok with take at home tests, maybe the company is a good fit for you and that is it, if not, you dodged a bullet.

<comment><USER6> > We have a small task with two levels, one to complete quite fast and the > second level is if you really want to show off and spend more time on it. We > use it as the main technical skills evaluation for the in person interview, > because it opens up an actual discussion and we can talk about reasoning, > see how candidates take feedback and how they can explain what they did

This sounds so refreshing and atypical of the standard take home test that I would love to give this a go.

My email is my handle at gmail.com

No obligation. You don't even have to have a current opening. I want to honestly give this a go only to experience what this feels like. That would be value enough for me.

</comment></comment><comment><USER21> I guess this has to do a lot with hiring culture. Here in the Netherlands, these kind of tests are rare. You get two or three interviews, which are more about your programming experience and your personal strengths and weaknesses. It is as much about whether you fit the company and its culture. Sometimes you are given a tour through the company or are given the opportunity to talk to some of your potential new colleagues, and usually includes meeting your first responsible manager. If everything goes well, you get a job offer and a one or two month trial period, during which both parties can terminate the contract on any moment. In my life, I only once had to do some coding before a white board. I felt like not doing very well, but they thought it was great. The idea that you can select the best person for a job position by testing is not really based science, because there are so many factors involved that you cannot assess with some tests either performed on spot or at home.

</comment><comment><USER22> It is usually very easy to criticize and not provide any alternative solutions. How should a company process 1000 resumes with a meaningful effort and find candidates to be called for an on-site interview?

If you think a single on-site interview of a candidate, it usually takes a few hours of multiple people from every segment of the company (mgmt, development, HR). Everybody has to prepare beforehand for some time for these interviews as well. So in the end, every on-site interview is costly for a company.

As an engineer, I dislike attending on-site interviews to hire people because I see it as a time that is not used optimally.

Finally, IMHO, the solution is to provide both standard-track and fast-track interviews where exceptional (on paper) candidates can be called directly for an interview and regular candidates would have multi-stage interviews.

<comment><USER23> If you send out a 1000 4-hour take home tests as a screen and 100 people took upon it, you just wasted 396 man-hours of other people time. Creating a bunch of frustration, disappointment, and unnecessarily accelerating heat death of the Universe.

<comment><USER24> Outside of _Madoka Magica_ (2011), it's pretty safe to say that no human activities we undertake today will have any impact on the heat death of the universe whatsoever.

</comment></comment></comment><comment><USER25> I live in a major metropolitan area not on the west coast. When I'm looking for a job, I change my LinkedIn status to "actively looking", call a list of recruiters that I have worked with in the past, and usually have two or three offers in hand within two weeks to a month.

For whatever level I'm at at the time, usually companies pay within a narrow band ($10-$20K). Why should I waste time doing an at home coding test when I can get a job that pays just as much just by answering a few behavioral interview questions and describe my past career history?

I'm no special snowflake. I'm just your average everyday CRUD/SAAS software developer/architect/team lead depending on how the wind is blowing.

<comment><USER26> Would you work for a company that spent 0 time vetting you? There has to be a "right" amount of time for evaluating candidates and the amount of time the candidate is required to give up when looking for a new job is only one side of the equation. Unless you want to work somewhere that has no hiring standards, you should not dismiss the time taken for take-home tests as wasted without evaluating their effectiveness vs other methods.

<comment><USER25> I had two offers before I took my previous job.

At Job 1: the interview was a white board interview where he wanted me to write a merge sort. He asked a few questions about my background and had to model a database schema and write a few queries to answer done questions.

The 2nd offer was after an interview where I had no language questions, he asked me about how I would design a development process "if I ruled the world", methodology about dealing with legacy code and integrating it with a mobile app via APIs, my feelings about testing, what trade offs I had to make based on "business realities", etc.

The first offer was full time, a shorter commute and paid more.

The second offer was contract to perm, if I translated it to an FTE salary it paid less (I ended up making more since I got paid by the hour), and it was a longer commute. They were both supposedly "senior software engineer" jobs.

I took the second offer. I didn't realize at the time that they were actually looking for a dev lead. When they bought me on perm they matched the offer of the first job.

Are you really not able to tell someone's experience if they have been in the industry for awhile just by talking to them? The truth is that most developers are "dark matter developers" doing yet another software as a service CRUD app or a bespoke internal app that will never see the outside of the company.

</comment></comment></comment><comment><USER27> To attack the take-home test instead of defending it:

The entire problem with these things: the more complex the problem, the longer the assignment generally takes. Half-an-hour assignments are trivial. 1 day assignments can range from trivial to absolute bogus. Now do these 10 times and congrats, you just worked a week or more for free, on things you're not even sure can be carried over to the future. Most of these companies don't compensate you for taking the tests and they don't assist you either (time is money, friend). Most of these take-home tests aren't universally applied, either: test A at company X is irrelevant to company Y, so they will give you test B.

If anything, this take-home test is a symptom. A symptom that companies have gotten lackadaisical thanks to their power, and a symptom that the industry as a whole needs to evolve. Don't punish capable devs because the guy you hired yesterday couldn't do FizzBuzz, and pay your talent accordingly (both in money and respect) so you don't have to resort to these practices in the first place. Most of all companies are there to take risk, not to give it back to (potential) employees. They get paid accordingly. If they dump the risk on us, then they should also lose a piece of the pie. Unfortunately, the reverse is happening: they have their cake and they are eating it too.

And a personal anecdote: most of the tests I've come across have nothing to do with the job at hand, and frequently the people able to clear these tests are overqualified for the job. Don't give a junior a take-home test made for a senior.

</comment><comment><USER28> As time goes by, I'm slowly becoming more and more convinced that the only way to accurately and fairly interview programmers is to give them some real world contract work assignments that match the kind of work you want them to do at the job position, and then see how they perform.

This approach has a lot of upsides:

1\. Real work gets done

2\. The developer gets fairly compensated for their efforts

3\. You get to gauge them objectively, based on their actual results

<comment><USER6> Bang on!

I have been doing software for a while and there has been no realistic situation when a business needed a problem solved from scratch without an collaboration, discussion or feedback within an hour.

I have been in situations where companies needed a solution within an hour and it almost exclusively involved extreme team work and cooperation.

I made a comment on how it would be cheaper for the employer to hire a candidate on an at-will basis once the candidate passes a basic skill and design test: [https://news.ycombinator.com/item?id=22368572](https://news.ycombinator.com/item?id=22368572)

</comment></comment><comment><USER29> A coding exorcise should only be done after the main interview and given only to finalists. Doing well should give one a huge chance of getting the job. The last few hires, we gave the test to three people and chose the best candidate after talking to all of them. Giving a test before even conducting an interview, a real one not a ten minute phone screen, is just an asshole move by shitty companies.

<comment><USER30> Your approach doesn't save any time or effort for the hiring company though. It's the in depth interviews that take up so much time. You may not like it but this is their motivator, not being nice

<comment><USER29> Sure if they don't know how to interview, they're going to waste their own time and still not get good candidates (or if they don't have much to offer as most companies don't). Our interviews were an initial phone screen of I think half an hour followed by an interview with the team for one hour followed by the take home test followed by another half hour to an hour interview to discuss the code and allow for further candidate questions. All interviews are conducted over a conference call with screen sharing for the code review.

You're right. I don't like it because what you're describing is generally how shitty companies operate. Often they won't even look at the coding test. Those companies deserve to get the worst of the worst candidates that they're optimizing for. They fit into the category above: nothing of value to offer the candidate.

</comment></comment></comment><comment><USER31> I don't like them.

However my brother is paying applicants for the home coding test. I think that's different.

Nothing beats (for me) an online track record.

</comment><comment><USER32> Even better when they give you a project with tests in it, where the tests aren't even able to compile, and they then also want you to write tests which does the exact same thing as the non working ones

<comment><USER33> What if it's paid? We pay people for interview projects where they have full access to our team and resources. This helps us gain an understanding of how they interact as well as their technical chops, produces value from most candidates, and makes sure the candidate is being compensated for using up their free time to work on this.

<comment><USER34> You're still using their free time even if they're being compensated. In addition, there's a decent chance that, assuming you're in the same field as a current employer, they may be violating their employment contract by taking money from you. I know people will argue this isn't a big deal and "who will know?" but it seems an awkward situation to create.

</comment></comment></comment><comment><USER35> I worked at a company for a while that had a pretty good take on this, IMHO.

First, the take home test was relevant to the sort of work one might actually do in a reasonable time frame. (Read a csv input file, hit an api per record in the csv, then merge that info and output an updated csv.) Could theoretically be done via shell script; my submission was ~100 lines of python.

Second, submissions were graded mostly for correctness. Style/structure and all the other stuff were nice but _usually_ weren't deal breakers, iirc.

Third, the on-site included a session where we reviewed the submission with the candidate, asked questions, etc... This was pretty instructive, because we could point out a missed edge case or whatnot and see how they'd modify the code to handle it.

Fourth, names & personal identifiers were scrubbed from submissions, to avoid potential bias.

So, it was a better than average process, IMHO. That said, after reviewing a fair number of coding tests myself, I'd note that there are still a number of downsides to take home tests:

a) even if the instructions specify that one should take less than N hours, it's obvious that some applicants spend considerable time on them. So we'd see solutions of wildly differing quality; some with detailed unit tests, documentation, Dockerfiles, vagrant files (!), build scripts, etc... etc... some with just a single file.

b) Even though the primary criteria was correctness, there was some room for assessment of code quality, and subjective bias of the reviewer was undoubtedly a factor. A solution that missed an edge case but which was well structured would generally be fine, but "well structured" is obviously subjective. Or, although applicants could use "the language of their choice," those selecting, say, Java, were at a disadvantage. Most of us were Python/PHP/Ruby folks and the Java submissions looked generally bloated in comparison, and seemed to be graded more harshly.

Not sure what a perfect solution would look like. To resolve issue a) one could impose a strict time limit or use HackerRank or whatnot, but that would create time pressure and up the anxiety. For b) one could rely on purely objective criteria, though that may create other unforseen problems.

<comment><USER6> > use HackerRank

Please dont. It's a terrible IDE.

My suspicion is that those who do well on HackerRank have invested a lot of time to be familiar with HackerRank.

Is that a valuable and meaningful longterm strategy and worth the investment for a developer?

If you were given an hour of paid time and asked to choose between:

1\. learning something valuable and meaningful that would continue to pay dividends for the rest of your life, or

2\. learning to use a website that you will probably use a dozen times or less your entire career

... which choice would you, personally, make?

The actual IDE I use at work is nothing like the HackerRank IDE. I have built up muscle memory that just does not work on the HackerRank IDE.

Have you tried to run a Javascript program within HackerRank? Try out how the Map implementation works and how it's different from the Map implementation available when you use Babel.

Timed tests on HackerRank select for candidates who have trained on HackerRank problems inside the HackerRank IDE.

If that's your perfect candidate don't come complaining that your employees solve HackerRank problems all day at work.

I have been doing software for a while and there has been no realistic situation when a business needed a problem solved from scratch without an collaboration, discussion or feedback within an hour.

I have been in situations where companies needed a solution within an hour and it almost exclusively involved extreme team work and cooperation.

<comment><USER35> Yeah, I agree about HackerRank's UI. When I was using it I think I just used PyCharm and then cut & pasted my solutions.

<comment><USER6> Exactly... but even then, how do you run the test cases?

Download them and run them from PyCharm?

I just don't like HackerRank.

Let me rephrase that.

As I grow in my role, I see writing the type of code that can be tested on HackerRank less and less, so investing time in learning how HackerRank works is absolutely not on my radar.

... and getting a HackerRank solution in within that ticking timer absolutely requires me to be comfortable with the HackerRank UI.

So stalemate there.

</comment></comment></comment></comment><comment><USER36> This has really annoyed me recently, I've had interviews with companies that expected me to do a test before even seeing them in person (following a phone interview) and their tasks mentioned I should spend around 8 hours on the test. I think this is definitely unreasonable.

I prefer longer interviews where you're working alongside your potential future colleagues. This way you can also find out if you actually want to work with them or not. Interviews should be a two way affair.

<comment><USER37> The phone and online coding exercises are called pre-screening. Their goal is not to find out if you're a good programmer, but if you can write code at all. This is to save time and see as many candidates as possible.

<comment><USER36> Yes, i get the screening process; but asking a candidate to spend 8 hours on implementing a client library for their API at the beginning of the application process is definitely unreasonable. It's not a coding exercise, but a full blown deliverable.

</comment></comment></comment><comment><USER38> Alternatively: "How desperate are you to work here?" or "Are you willing to spend your free time doing unpaid work?"

</comment><comment><USER39> I've given up fighting white boarding. If anything, at least it can be gamed, plus if their expectations are bad or you got bad luck on a topic you didn't study for, at least you get to waste their time as well. I'll take that over wasting only my own time on a take-home test.

</comment><comment><USER40> i would rather take a coding test than suffer an unknown number of office- visits, talking with people who are not interested in hiring, who are stuck talking with me and who are adamant to stop getting interrupted and get back to work.

as bad as coding interviews can go, they are better than spending more than a day to talk to people who evaluate you on how good you are at talking.

</comment><comment><USER18> >Or: here's a whiteboard, implement some algorithm you last studied 10 years ago and that you will never use in front of 4 people staring at/judging you. You have 5 minutes. :D

I agree with the fact that this style of testing is not directly measuring the skills relevant to the job.

Say what you want, however, a candidate that does solid on the whiteboard despite the irrelevancy of it, is a good candidate because a whiteboard is one hundred times harder than the take home test and most of the problems that will be thrown at the candidate on the job.</comment>


Why Is Silicon Valley So Awful to Women? - <AUTHOR> https://www.theatlantic.com/magazine/archive/2017/04/why-is-silicon-valley-so-awful-to-women/517788?single_page=true <comment><USER2> "For women of color, the cumulative effect of these slights is compounded by a striking lack of racial diversity—and all that attends it. "

Silicon Valley has plenty of racial diversity. Something approaching half of the workforce is east- or south Asian. And even the whites are a pretty diverse bunch, with many immigrants from Europe, whether eastern or western. But I guess that just isn't the kind of diversity the US left loves to bitch about.

In my view, people who want to worry about fairness in hiring in this industry should spend most of their time worrying about the women. That's a large group, and the shortfall in hiring is very clear; we are hiring about a third of the women we would be hiring at parity. And since it's a large group, anything done to move the needle there will have a big effect: double the hiring of women, and you've changed 15% of the workforce, double the hiring of blacks, and you've changed 2% or so.

And if there's any time left over after dealing with the women, it might be worth taking a hard look at our socioeconomic inclusiveness. The prestigious colleges we love to recruit from cater disproportionately to the children of the well-to-do. I doubt we do enough to look for talent in the community colleges and state schools, which is where the children of the poor disproportionately end up.

</comment><comment><USER3> Although title is baity, this is a well-written article and currently getting buzz. (This is why I have vouched it)

</comment><comment><USER4> "Still, it was a reminder that as a woman in tech, she should be prepared to have her authority questioned at any moment, even by some guy trying to get a job at her company."

This anecdote wasn't a good example of sexism. We have no idea why the person wasn't hired or treated this way. The person, who just happens to be a man (which always seems to come up in these discussions..when we are trying to a avoid pre-judgement based on race and gender), might be insecure and treat everyone this way.

Where is the real evidence based on empirical data? Has all science gone out the door?

I'm a male and have been treated this way throughout my career. It most likely has nothing to do with sexism and more to do with corporate politics. Women are finally getting a taste of what it's been like for men..for decades.

"One reason her career had gone so well, she thinks, is that she'd made a point of ignoring slights and oafish comments. Awkward silences, too. Over the years, she's experienced—many times—the sensation of walking up to a group of male colleagues and noticing that they fell quiet, as though they'd been talking about something they didn't want her to hear."

You can't pound lawsuits at males for even making the most innocuous and innocent comments and then expect them to behave normally in all social settings.

Women want to be part of the group and included, but if a man says something that might offend them, they want them fired or sued.

The 50s are over. Most corporations are so scared of a lawsuit, women are treated like gold. The behavior described here is of a beaten down and abused person that is so afraid of potentially losing their livelihood, they are go completely silent.

"She's been asked to take notes in meetings. She's found herself standing in elevators at tech conferences late at night when a guy would decide to get, as she puts it, handsy."

There are stupid people everywhere. This is not specific to the tech industry and this is at a conference....not at your job.

"When she and a male partner started a company, potential investors almost always directed their questions to him—even when the subject clearly fell in Blount's area of expertise"

Do we know why? I have found that the person that is more assertive will be asked the questions. Were you actually assertive? Did these investors know you had this expertise?

"She couldn't believe that women still had to worry about such things"

Unless we are all mindless robots, you will always have to worry about these things. It's sad, but true.

"that she still heard talk about how hiring women or people of color entailed "lowering the bar"; that women still, often, felt silenced or attacked when expressing opinions online."

I've worked for many tech companies all over the country and never heard this. Not even once.

Do you know the age of the people harassing you?

What percentage are actually adult males and not 12 year olds? I find it odd that so many people take the insults of a little kid so seriously.

"They love the problem-solving, the camaraderie, the opportunity for swift advancement and high salaries, the fun of working with the technology itself. "

Wow, must be nice. How about working your ass off for little pay for decades and having people either pay you in red bull, mt dew, or Fooseball table time?

It took me 15 years to get to have 'fun' at my job...and you are expecting this at age 22? You are the privileged one.

"found that nearly all of the 200-plus senior women in tech who responded had experienced sexist interactions"

Men may not experience as much sexism, but they experience equally dehumanizing behavior in the work place. Society just expects you to 'take it'.

"Women not only are hired in lower numbers than men are; they also leave tech at more than twice the rate men do."

They leave tech because the tech industry consumes your entire life and many women choose to have kids and a family and can no longer keep up with with the daily grind expected of most people in the IT industry.

You also can't just look at the straight numbers and immediately determine it's due to sexism. Are they not getting hired for other reasons? Education? Experience? Not as many applicants?

"Studies show that women who work in tech are interrupted in meetings more often than men. "

Since this article is just going to say 'studies' and not back it up with any actual concrete proof. I'm going to also talk about 'studies' that I've read that also say that women are the biggest critics of other women in the workplace.

"Stephanie Lampkin, who was a full-stack developer (meaning she had mastered both front-end and back-end systems) by age 15 and majored in engineering at Stanford, has been told when applying for a job that she's "not technical enough" "

I was writing back-end systems in C and assembly by the time I was 15. I was still turned-down for jobs at 19 because I didn't have enough experience, on paper.

"But she has also, for instance, been told by a white woman at a conference that her name ought to be Ebony because of the color of her skin."

Why does this even matter to the discussion? One person saying one hand-picked inappropriate comment isn't an entire industry being racist or sexist.

"In 2014, Google released data on the number of women and minorities it employed. "

I find it odd that when the word 'minority' is used, it doesn't include anyone on an H1B Visa. Why is that?

<comment><USER5> What a fantastic comment. Thank you.</comment></comment>


Why social network analysis hasn't led us to Osama Bin Laden. - <AUTHOR> http://www.slate.com/id/2245232/ <comment><USER2> Fascinating article on successes and not successes about the use of the analysis of social networks in military intelligence, and analyzing the polarization of domestic political dialog. (My totally unsolicited advice to fellow Americans: Have a respectful two-way conversation with somebody that you disagree with politically.)

It seems the resistance to incorporating this analysis more deeply into military thinking is that it is hard to not fight the last war, or to fight our most favorite recent war.</comment>


Richard Florida: The Roadmap to a High-Speed Recovery  - <AUTHOR> http://www.tnr.com/article/economy/76961/richard-florida-reset-recovery-economy-future

<comment><USER2> Florida is talking not just start-ups, but also education etc. And he's on the money...</comment>


Steel Bank Common Lisp Version 1.0.38 released - <AUTHOR> http://sourceforge.net/projects/sbcl/files/sbcl/1.0.38/sbcl-1.0.38-release-notes.txt/view <comment><USER2> You've linked to the sourceforge project page, a better link is probably the web page at:

<http://sbcl.sourceforge.net/>

Or <http://sbcl.sourceforge.net/news.html> if you were highlighting the latest release.

</comment><comment><USER3> Is there any point learning SBCL or CMUCL today for actually writing applications using Lisp, or is Clojure a better choice?

Basically, I want to learn lisp, but also write some apps in it. I keep hearing that people use lisp for prototyping and then rewrite in some other language.

<comment><USER4> It depends on the apps you want to write, as well as what you already know. (For example, if you know your way around Javadocs and Java classpaths, Clojure rises as a possibility.)

I suggest skimming through a few pages of Planet Clojure and Planet Lisp, to get a sense of the apps people are writing. As a rough rule of thumb, if one excites you much more, that could be the better choice.

If you end up going with CL, you'll likely have a better time asking newbie questions on LispForum (or mailing lists like the LispWorks one), rather than on Usenet. And there are alternatives to SBCL and CMUCL, such as ECL and LispWorks: <http://common-lisp.net/~dlw/LispSurvey.html>

As for prototyping-then-rewriting, I think there are a few situations:

1) nontechnical reasons (such as, the maintainers can't be expected to maintain a Lisp app)

2) because the Lisp implementation is missing some convenient functionality, and it isn't easy to call an existing one in another language

3) the Lisp doesn't interoperate well with a given technical ecosystem

I think the probability of rewriting is less with Clojure, due to its Java interop, long-term goals of interop with other platforms (like .NET), and the increasing number of teams using it.

<comment><USER3> Replying to both posts above. Thx.

I am not interested in webapps. I usually do command line stuff, or libraries, and i've done some libraries in ncurses. Basically a terminal freak. Currently ruby, but 5-6 years of Java before that. No functional language exp.

Are there not several versions of Scheme, too. Any suggestions for what to start with.

Is scheme/lisp/clojure the correct language to use for terminal/command-line apps or ncurses stuff ?

Does anyone offhand know if there is ncurses support for these languages ?

<comment><AUTHOR> >No functional language exp.

Common Lisp, at least, isn't really a purely functional language. It supports multiple paradigms. Scheme and Clojure are a little more "functional" than CL, but they too are not pure. I wouldn't worry about this yet.

>Are there not several versions of Scheme, too. Any suggestions for what to start with.

I replied above. (-:

>Is scheme/lisp/clojure the correct language to use for terminal/command-line apps or ncurses stuff ?

I don't see why not.

>Does anyone offhand know if there is ncurses support for these languages ?

It looks like there is a package for Common Lisp for doing ncurses stuff. There's a thread on the PLT mailing list that indicates there's no support for ncurses in PLT Scheme, but other implementations might have it. A search in Clojure's libraries didn't reveal anything, but I may be looking in the wrong place (it seems like they would have one).

</comment></comment></comment></comment><comment><USER5> Of notable interest, they're added the _sb-concurrency_ module. The best part about lisp is how it can incorporate new programming ideas into the normal syntax.

<comment><USER6> Sigh. I'm pretty sure I could add lock free queues to C without changing the syntax.

        lockfree_enqueue(queue, whatnot);
        whatnot = lockfree_dequeue(queue);

Looks just like all the rest of my C code. The part of me that wants to learn lisp dies a little every time I read one of these "look how awesome lisp is" comments because I'm afraid I'll end up spouting such nonsense.

<comment><USER7> It's easy to add new things to Lisp and C when the interface looks mostly like function invocation. It's easier to extend Lisp with things that aren't a lot like function invocation, because C syntax and the C preprocessor don't work together as well as Lisp syntax and Lisp macros.

I wouldn't worry much about spouting nonsense when you learn new things unless you're prone to that already.

</comment></comment></comment><comment><USER8> For those curious about the origin of the name, this is fork of CMU CL. CMU is a university located in Pittsburgh, a city with a history as a steel town.

<comment><USER9> Carnegie was a steel baron. Melon was a banker. Hence Carnegie Mellon became "steel bank".</comment></comment>


TomDoc - Reasonable Ruby Documentation - <AUTHOR> http://tom.preston-werner.com/2010/05/11/tomdoc-reasonable-ruby-documentation.html <comment><USER2> RDoc isn't just an abomination because of its approach -- it's an abomination because of its code. I'm in the middle of a project that requires making RDoc do things that other more modular systems would have little problem with... but to solve the problem I ended up private forking the entire RDoc codebase.

<comment><USER3> _> RDoc isn't just an abomination because of its approach -- it's an abomination because of its code._

Those are definitely not mutually exclusive.

</comment></comment><comment><USER4> I like it - I've also had your experience with the other Ruby documentation formats (RDoc can become too messy, YARD too many @tags). One potential suggestion:

It might be worth adding some indication of how to specify a duck-type (rather than a Class) in the arguments section. (i.e. "name - The name of the object; should respond to to_s", or hopefully something less clunky than that)

</comment><comment><USER5> I've become fond of Yard (<http://yardoc.org/>), especially after speaking with Loren Segal at MountainWest RubyConf in March. I'm planning on moving ruby-doc.org over to yard when I can make sufficient time.

You can debate whether a doc tool is too clunky or has too many options or too many @tags, but in practice the biggest issue with docs is the lack of them. I don't really see Yet Another Doc Format changing that.

Yard is nicely done, in active use, and works nicely with Disqus for user comments. I feel comfortable poking around the code, and know I can get support form the developers and community. This may also be true for Tomdoc, but I'm more reluctant to go for a newer format and code base.

(Side rant: One thing that would really get my attention in a doc tool would be parsing usage of attr_* and documenting the results as the methods the are, and not as Java-ish virtual attributes. )

<comment><USER4> I hadn't looked at Yard in a while, actually, but <http://yardoc.org/docs/ruby-core> is a pretty compelling example of some nice output, especially given that it's generated from the C code.

</comment></comment><comment><USER6> I've been using yard for a while. Although, i often forget the tags and their usage, but one can use snippets for that (snipMate.vim) for example.

One can also write a script to generate the tags for a method.</comment>


Show HN: Pythonpy – the swiss army knife of the command line - <AUTHOR> https://github.com/Russell91/pythonpy <comment><USER2> Nice. Similar to PyP from Sony Imageworks:

[http://opensource.imageworks.com/?p=pyp](http://opensource.imageworks.com/?p=pyp)

The Pyed Piper Tutorial: [http://www.youtube.com/watch?v=eWtVWF0JSJA](http://www.youtube.com/watch?v=eWtVWF0JSJA)

<comment><USER3> I wrote a similar tool a while back: [http://gfxmonk.net/dist/doc/piep/](http://gfxmonk.net/dist/doc/piep/)

Mostly out of frustration for PyP not being lazy (on large inputs it reads the entire file up-front, or at least used to).

But it was quite interesting to implement all the standard python idioms (like slicing) in a lazy way, and it's not that complicated a tool. I still use it a lot whenever I have a nontrivial pipeline to write.

<comment><AUTHOR> Yea, fortunately pythonpy supports lazy iteration over sys.stdin when you really need it. Just like in python, the syntax won't be as nice as using a list. But it works:

      py 'itertools.count(1)' | py 'itertools.islice(stdin, 0, 10, 2)'

However, the number of times that you need this are surprisingly rare. Most lazy operations don't require that each row be aware of the surrounding row context, and using the much simpler:

      py -x 'new_row_from_old_row(x)'

will get the job done in a lazy fashion. Usually, when you need rows to be context aware, as in:

      py -l 'sorted(l)'

or

      py -l 'set(l)'

it's just not possible to accomplish your task without reading in all of stdin.

<comment><USER3> Cool :), glad it's supported, at least for the simple case of line-wise transforms.

Some things can't be done without reading everything. But there are still a number of operations on "all of stdin" that can safely be done lazily. I'm particularly fond of "divide stdin into chunks of lines separated by <predicate>" [0]. Which does need context, but only enough to determine where the current chunk ends (typically a few lines).

`py` seems to be aimed at a single expression per invocation (nice and simple), while `piep` recreates pipelines internally (more complex but also means pipelines can produce arbitrary objects rather than single-line strings). So I'm not really sure how you'd do the above in `py` anyway.

[0] [http://gfxmonk.net/dist/doc/piep/#piep.list.BaseList.divide](http://gfxmonk.net/dist/doc/piep/#piep.list.BaseList.divide)

</comment></comment></comment></comment><comment><USER4> You should put up a donation link. If more people do that and it becomes common practice to donate to useful open source tools / projects then imagine what more awesome stuff could be created. Many people desire to build tools but don't have the financial support to do so.

<comment><USER5> This is what gittip is for.

And Kickstarter/Indiegogo/Crowdfunding has shown genuine interest to help fund useful tools and libraries lately which is great.

<comment><USER6> I think if Git Tip had a button on a GitHub repo (a la Heroku button), this would be amazing.

<comment><USER7> How about the Gittip badges from [http://shields.io/](http://shields.io/)?

</comment></comment></comment></comment><comment><USER8> These sorts of things have been one of the strongholds of Perl, glad to see pythonic alternative.

</comment><comment><USER9> ls | py -x '"mv %s %s.txt" % (x,x)' | sh has me worried, I can't find the escape code directly. Also you might wish to offer the following api ls | py -X '["mv","%s","%s.txt"] and run those using processes or sub-process. This would ensure the right argument in the right place. Just an idea.

<comment><USER8> Of course for this case, using shutil (or something similar) would be preferable. Eg ls | py -x "shutil.move(x, "%s.txt" % x)"

</comment></comment><comment><USER10> Looks so useful, can't believe I never thought of hacking something to do that. Will experiment with it!

</comment><comment><USER11> I like it! Now I can count the number of files I have in a directory:

        ls |py -l 'sum(1 for x in l)'

And also I can count the number of files whose names matche a certain extension:

        ls |grep .py |py -l 'sum(1 for x in l)'

I am not saying it was not possible before, but I don't know how to do it in bash.

Looking forward to use that for some basic stats on file. The following should sum up the first column of a csv.

        cat data.csv| py -x 'x[0]' |py -l 'sum(x for x in l)'

<comment><USER12> You'll probably want to learn the regular unix way as well. Tools like this are nice, but you're already 99% there as it is for most things.

        ls | wc -l

        ls | grep -c .py

(note the cat and pipe are not needed)

        awk -F',' '{sum+=$1}END{print sum}' data.csv

<comment><USER11> Ah! I haven't thought of using wc, although I frequently use it to count the number of lines in my code. For awk, yes, I have to learn it. Thanks to you and the others who gave the example in bash.

<comment><USER12> Technically this will work on any shell not just bash but good luck! Shell scripting is rather fun once you get the hang of it. Though if I'm honest, if I get a shell script about 30+ lines I tend to back up and break out ruby/perl/python/anything but shell. Think of it as a succinct glue language and you'll do fine.

In the meantime feel free to use this python thing, its rather fun to be honest. Just wanted to demonstrate the unix-y way of doing it.

</comment></comment></comment></comment><comment><USER13> A simpler version of py is e ⌘ [https://pypi.python.org/pypi/e/1.4.5](https://pypi.python.org/pypi/e/1.4.5)

</comment><comment><USER14> I attempted to install on Windows - it doesn't work due to the lack of os.geteuid(), which is called in the setup.py file to check for root. With a little bit of finagling I could get around that and make it install, but not work due to undefined SIGPIPE in the signal module. It makes sense that this could be UNIX only, but that wasn't stated anywhere on the webpage. Perhaps that should be mentioned somewhere.

<comment><AUTHOR> Yea, sorry about that. I had an initiative to make a windows version, wpy, a little after launch, but couldn't really get any windows developers interested in making it happen. From my time working on windows, I know this tool would be even more valuable there than on unix. I'll try to find a place to indicate this doesn't work. Perhaps there's a good way to check if the system is windows in the setup.py and warn users.

</comment></comment><comment><USER15> For those too lazy to learn the right shell commands ;)

<comment><USER16> Or perl.

<comment><USER17> Or learned Perl and are too afraid...

<comment><USER16> obviously you learned bad perl, not modern perl

</comment></comment></comment></comment><comment><USER18> I usually use Python(or another lang's interpreter) as my calculator, so this will save me a few keystrokes in the future. I think I'll still use short scripts rather than the command line to do more involved things (like find long palindromes in a txt file), but this will save me a bit of time when doing quick calculations. Thanks!

</comment><comment><USER19> Would've been more useful with a language that doesn't limit one-liners (e.g. you can't have "for x in [1,2,3]: dothing1(x); dothing2(x)").

</comment><comment><USER20> Reminds me of 'js': [https://www.npmjs.org/package/js](https://www.npmjs.org/package/js)

<comment><USER21> I just started something similar for javascript a couple days ago: [https://github.com/danielstjules/pjs](https://github.com/danielstjules/pjs)

</comment></comment><comment><USER22> Honest question. Why would I want to use this? I am already quite happy with awk,sed,grep, etc.

</comment><comment><USER23> is there a ruby equivalent?

<comment><USER24>
        $ ruby -e 'puts (0...3).to_a' | ruby -ne 'p $_.to_i*7'
        $ ruby -e 'puts (0...8).to_a' | ruby -ne 'puts $_ if $_.to_i % 2 == 0'</comment></comment>


The average kid's allowance rose faster than American workers' salaries in 2018 - <AUTHOR> https://www.marketwatch.com/story/the-average-kids-allowance-rose-faster-than-american-workers-salaries-in-2018-2019-01-09?siteid=rss&rss=1 <comment><USER2> "Parents should ensure they are offering children equal opportunity to take on high-paying chores ..... Boys ages 5 to 7 years old earn 50% more in weekly allowance than girls"

Interesting, so the pay gap in inherent (not sexist). Or parents are more sexist than the general population, or anti discrimination laws have been pretty successful in narrowing the gap?</comment>


Just finished my Friday Hack Project: Receiveee, a disposable email service - <AUTHOR> http://receiveee.com/

<comment><USER2> I like this, it sounds cool. What's the tech stack? How do you handle sending / receiving email?

<comment><AUTHOR> Thanks, I use nodejs for both the webserver and the smtp server. Sending mails isn't supported at the moment, but will def. be in the future, already have it in my dev build ;) Gonna add a second smtp server as a failover too.

</comment></comment><comment><USER3> looking good. found a typo in the adblock-banner: "you'll thanks us ater"

<comment><AUTHOR> thanks, fixing asap ;)</comment></comment>


We don't know how to build conversational software yet - <AUTHOR> https://medium.com/lastmile-conversations/we-don-t-know-how-to-build-conversational-software-yet-a18301db0e4b <comment><USER2> I think the bigger question is: why would I want to converse with software? Is that actually a good interface? People imagine the computer from star trek, but that was a plot device. The character was talking to the viewer with the computer as a proxy.

<comment><USER3> It's easy to imagine a large proportion of the population wanting to use natural language to achieve complex technical tasks. It is, after all, the same API that people use with each other. Someone could then describe what they want out of a spreadsheet instead of manually editing it.

What interface would you prefer?

<comment><USER4> I just built a very rudimentary version of this "speak to spreadsheet" idea:

[https://github.com/diesendruck/ggspeak](https://github.com/diesendruck/ggspeak)

Or for the demo video: [https://www.youtube.com/watch?v=xmtrGxVvVyg](https://www.youtube.com/watch?v=xmtrGxVvVyg)

If you're interested in working on it together, get in touch.

</comment></comment></comment><comment><USER5> * level 1 — command & response

Functions?

* level 2 — hard-coded conversation flows

Scripts?

* level 3 — fuzzy/continuous/fluid state.

Threading?

I can't shake the feeling that deep learning is being shoehorned into a bot with a specific purpose (ShoeBot, etc). Talking to a ShoeBot, I would expect it to have predictable responses or state changes. I don't want it to suddenly infer that I'm looking for shoes for my wife because of an opaque model it's formed from an insufficient set of training data. Many applications of deep learning seem to be just a lazy way to have the machines do the work automagically.

<comment><USER6> As you say, if your only goal is ShoeBot this (scripts, functions, etc.) is a great way to go. One of the key points of deep learning approaches is that you have this abstract, powerful computational device that is trained to extract the necessary features and also perform the task jointly - and it just happens to be a ShoeBot due to the training data.

This usually results in improved performance along with "ease of use" in transitioning to new but related applications. A model just happens to be a ShoeBot when trained on specific data, but ostensibly a person or company could make ShoeBot, CarBot, ApartmentBot, etc with the exact same approach, given enough data. This is very different than a workflow of "craft tons of features for domain X, write custom scripts/conversation logic for domain X, etc.".

These choices between feature based approaches and "deep" techniques are tradeoffs reminiscent of "you aren't gonna need it" versus "room to scale", but in the ML algorithms you choose rather than the software stack/implementation.

It depends on things like how much data you have, how much compute you are willing to pay for, how many users you expect, and so on - but neither approach is necessarily wrong.

In general if deep learning approaches don't roundly beat feature engineered or hand crafted approaches, you don't have enough data or are trying to shoehorn (pardon the pun) a solution that doesn't fit. Right tool for the job and all that.

<comment><USER5> Like Google Photos, this might just be something I have to see to believe. However... Google Photos routinely categorizes pictures of my dog as Bear or Cat. My greatest concern is about being able to acquire the conversations necessary to train these niche applications beyond a laughable state.

</comment></comment></comment><comment><USER7> I'd venture a bet that most of the advancement of levels 2 & 3 happen in private and/or are in use in areas you aren't already thinking of.

Have a look at the conversational examples Voicebox lists on their website: [http://www.voicebox.com/technology/](http://www.voicebox.com/technology/) (disclosure: I worked there for a while.)

The wide-open "talk about anything" software is still a few years out, I think. But, having a "human-like" conversation/interaction with a bot/AI already happens today.

</comment><comment><USER8> Perhaps we forgot. Eliza bot written in PROLOG by Joseph Weizenbaum circa 1964 at MIT was quite up for the task. I am sure it is still about 90% more conversational than 80% of the current online English-speaking audience.

</comment><comment><USER9> This mentions being able to build very simple faux-conversational interfaces within a hackathon. I've got one such hackathon coming up in a few months, could I go from zero knowledge to working proof-of-concept?

<comment><USER10> I believe he was talking about using an existing tool to add a 'level 1 — command & response' style interface to whatever your project is. So yeah, using something like wit.ai you could likely integrate that style of interface with zero prior knowledge fairly quickly.

</comment></comment><comment><USER11> Should we come up with a language that's easy to teach for both computers and humans? A sort of generic human/machine DSL?

</comment><comment><USER12> It was all done years ago ... [https://en.wikipedia.org/wiki/AIML](https://en.wikipedia.org/wiki/AIML)

<comment><USER13> If by done, you mean "a team designed a rigid flow-chart and rules-based engine where you can painfully map out every specific interaction in your system"... then yes!

</comment></comment><comment> awinter-py surprising that 'theory of mind' doesn't appear in the article.</comment>


Why buffer overflow exploitation took so long to mature (part 2) - <AUTHOR> http://rdist.root.org/2010/05/05/why-buffer-overflow-exploitation-took-so-long-to-mature-part-2/

<comment><USER2> This is second in a two-part series on the history of buffer overflow exploitation. It covers three eras: academic computing (early 1970′s), rise of the Internet (1988), and x86 unification (1996 to present). The changes between each era influenced the changed exploitation of buffer overflows.

Here's an HN link to part 1:

<http://news.ycombinator.com/item?id=1316782></comment>