Ask HN: Is there a powerful open-source Google Calendar replacement? - <AUTHOR> I realize calendars are not a simple tool to build well, but for such a basic standby of time management, I strive for a better, developer friendly, open source calendar system. Like what Atom did for text editors, to bring a powerful, well built basic toolset ready for modular extensibility and can run anywhere Node can.
(I use emacs, but you get my drift).
I would love to work on a project like this, if anyone is hiring or already pushing code to an open source repo I haven't found.
I have a 98% coverage of my time for the past two years and it's all in Google Calendar. I suspect there are many out there with dense calendars that would love to hack around in a friendlier environment.
Please advise.
Peace love and prosperity to the world. <comment><USER3> We have a prototype at Nylas which is pretty awesome, but haven't had the time to really finish it. (Focus is important!)

Calendar apps are deceptively hard. Very tricky UI problems alongside super complicated data transformations you need to do across a fragmented ecosystem of ICS/etc. Making something "just work" takes an incredible amount of focused time from an entire engineering team.

But here's a peek anyway if you're curious: [https://www.dropbox.com/s/j1ry3qar45ozj7m/nylas- calendar.png...](https://www.dropbox.com/s/j1ry3qar45ozj7m/nylas- calendar.png?dl=0)

PS: we are hiring ;) feel free to ping me directly

<comment><USER3> Here's a blog post we wrote on RRULEs that just highlights one part of why calendars are hard: [https://nylas.com/blog/rrules/](https://nylas.com/blog/rrules/)

<comment><USER4> I just started with with RRULEs using pg_rrule in postgres. How do you guys handle overrides and exceptions in your schema for the sync engine?

<comment><USER5> there's a lot interesting possibilities for you can handle this. for our sync engine at sunsama we've tried a few different approaches.

currently, we store the "parent" recurring event as one document. then we store exception events as standalone one off calendar events that link back to the parent recurring event. unfortunately, we have to maintain two different types of exploded versions of recurring events (to handle notes on an instance).

eventually, we added a bunch of extra fields to the parent event like a pointer to the next upcoming instance of this event and denormalized full list of exceptions so that we can more easily handle application logic like sending out reminders, and letting you use arrows to navigate b/w instance s of recurring events.

so far with this approach of separating out the parents and children we've run into very few problems.

</comment></comment></comment></comment><comment><USER6> [I am sorry if this is slightly off topic but]

Oh god, talk about good timing. I just got a literal headache spending the last hour searching for a good cross-platform calendar AND todo app that would work on my Mac, and perhaps on Android (although that's bonus). And ideally I'd like to have integration with Trello, so I can schedule my work tasks into the day.

That would be the bee's knees, and improve my productivity noticeably. But alas, such magical software does not exist yet. This is probably the wrong thread as I would pay top dollar for such an app.

The problem with all todo and calendar apps is that nobody has managed to successfully combine the two. A calendar to list only events is of very limited utility if you need a separate app to remind you your todos and tasks for the day.

Yeah, I've tried Fantastical, Todoist, Informant, BusyCal, and a plethora others, but none seem to fit nicely into the workflow of somebody that needs to keep track of their personal and work life without being too strict in their methods.

So for now I'll make do with the basic Calendar app on my OSes, and pen and paper to jot down my reminders as soon as they pop to my mind.

<comment><USER7> I'm actually making exactly what you're looking for: [https://moo.do](https://moo.do)

It does to-do lists, calendar, and email all in one. The only caveat is it only supports Google Calendar and Gmail so far.

Let me know if this solves your problem or if there's anything I can do to make it better for you.

<comment><USER8> Not the GP and not quite what I'm looking for (I live in a terminal as much as possible, and on my phone as little ) ... However that looks like a kick-ass product. I hope it works out for you.

</comment></comment></comment><comment><USER9> I'm actually a little curious as to what sort of workflow others are using for their calendars. Personally, I use a terminal/text based program named khal:

[https://lostpackets.de/khal/](https://lostpackets.de/khal/)

to view and edit calendar events and vdirsyncer:

[https://vdirsyncer.pimutils.org/en/stable/](https://vdirsyncer.pimutils.org/en/stable/)

to sync this with my email provider, which supports CalDAV and CardDAV. I'm asking about others workflow because this simple setup allows easy access to calendars across multiple devices. Although I don't often do it because I don't have a need, vdirsyncer just dumps the CalDAV events into a folder in text format, so it's pretty easy just to write a shell script to modify, automate, or maintain calendar events. I also like it because it allows me to backup my calendars for record keeping sake.

Now, I don't claim that this setup is for everyone, but are there useful, interesting tricks that this workflow doesn't allow?

<comment><USER10> I use org mode for my calendar, which is great as it seamlessly integrates my ToDo with my Appointments.

At work we use Google Calendar extensively, which means other people often make appointments for me. To pull in and push items from my schedule.org, I use org-gcal - [https://github.com/myuhe/org- gcal.el](https://github.com/myuhe/org-gcal.el)

<comment><AUTHOR> This is great, I was looking for something similar when I was in org-gcal mode last year. I'll have to revisit this link

<comment><USER9> That does indeed look neat. At the same time, there are extensions to CalDAV that codify how to add scheduling to the standard. Namely, RFC 6638:

[https://tools.ietf.org/html/rfc6638](https://tools.ietf.org/html/rfc6638)

Certainly, it's something that I wish khal had. This is why I think I'm missing something. Certainly, dealing with CalDAV is a pain because many programs don't produce standards compliant files. That said, it really just looks like a CalDAV server has a folder with a bunch of text files that contain the calendar information. If I want someone to have view only access to that folder, they have read access. If I want someone to have the ability to add calendar events to my schedule, they have read/write access. The file uploads look like they use WebDAV. Syncing across devices just means syncing to the folder on the server. Exotic calendar tricks can be handled either from a server side script or a client side script followed by a sync. Now, I wish that were easier and I think there's room for improvement especially in developing a language to make it easier to write these scripts. However, is there really something fundamental that this framework doesn't have that these other calendar programs provide?

</comment></comment></comment></comment><comment><USER11> I ended up setting up a Nextcloud server. It has a calendar service that suits my needs, coming from Google calendar. It is open source, and the nextcloud platform is basically built to be extensible, but I don't know how developer friendly is the calendar app itself. Check it out though!

<comment><USER12> Agreed. Important to point out that Nextcloud (and most other calendar implementations) is actually a client and a server. The server half is just a standard CalDAV[0] server, same as Google or Apple or anyone else would host. The client is a web app with a similar feel to Google's calendar web app.

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

</comment></comment><comment><USER13> I was recently forced into being a power Google calendar user. A new job demanded me to use it, previously I added maybe 2 events / year. Now I have to schedule a whole class's daily activity.

My brief experience was a total disaster, it's one of Google's horrible products, I sadly have to live with. I rarely hit my desk with my fist but it has happened. I'd be really really happy if any alternative would exist, I don't even care about not being open source.

<comment><USER14> Could you elaborate why google calendar is horrible for you?

<comment><USER13> \- I can't do simple things, like quickly adding somebody to an event without clicking the full event view.

\- I can't easily create an event spanning over more than a month. Don't bother visualizing it easily.

\- Displaying multiple calendars is a mess even with the event merging (45degree stripes turned on) (Event Merge for Google Calendar™)

\- I was needed to install "Google Calendar Guests Modify Event Default" (Enables 'Guests can modify event' setting for google calendar by default, when creating a new event.)

\- If I create an event I can't simply add myself and accept it

\- Event view is boring, lots of things I don't care about. That view looks like a relic from the pre-design era of Google

\- Setting up a repeating event is a pain, if I made a mistake god help me. Once I broke something and I had to manually delete two months of repeating events one by one because the repeating nature was somehow gone

\- Exceptions are not handled well

\- Show me as Available / Busy is dangerous. Should be more hidden, I messed up my coworkers calendar and she got overbooked. I still don't get why would I create an event and mark myself "available". I guess there are use cases, but for me it's pointless

\- UI dialogs are inconsistent

There are probably many more, but I felt real pain during these. I even tried Google voice assistant, which was pretty useless for real work.

I then pulled up this video of Apple's vision of the future: [https://www.youtube.com/watch?v=JIE8xk6Rl1w](https://www.youtube.com/watch?v=JIE8xk6Rl1w) and cried a little that we are still very far from this. Even calendaring is a pain in the ass.

<comment><USER15> I might be missing something but it sounds like your workflow is full of edge cases and unusual requirements. There's some valid criticisms in there for sure but I wouldn't expect most products to address many of these.

<comment><USER16> Don't blame the user for Gcal's inconsistent and hard-to-internalize mental model.

Try not to give reasons to discard someone's feedback, and instead identify the core issues which, if addressed, would benefit multiple users.

It doesn't matter how many people are stymied by poor behaviours, if they are the ones making recommendations to their contacts or businesses on what support could tracts to sign…

</comment></comment></comment></comment></comment><comment><USER17> Since we are talking about calendars, I will ask a mildly related calendar server question. Is there a solution out there that would allow me to automatically prefix events in calendars that are shared with me? For example, I see my girlfriend's calendar with an event called "Work". I don't want to think it applies to me, so I would like to see it as "Princess Peach: Work". Can I do this without hacking an existing CalDAV server to use as an intermediary?

I did try a script that takes a URL to an iCal file and adds the desired prefix, then spits out a new iCal file. Alas Google Calendar has a years old issue where it has no way to force it to pull updates to iCal files with any reasonable frequency. And of course I want the solution to work on phones as well as desktop browsers so a Chrome extension is not a solution.

Bonus points for a solution that would let me munge event names arbitrarily according to regex rules, and to combine multiple shared calendars into one.

<comment><USER18> The default Google Calendar does this on Android and Web. It allows you to assign different colours to the calendars you have.

So my work is blue, my personal is green, my wife is purple.

<comment><USER17> I wish that worked except there are not enough distinguishing colors to mark up all the calendars I have. Also iOS calendar doesn't do that.

</comment></comment></comment><comment><USER19> Quite recently Kin has been open-sourced (see [http://blog.kin.today/post/156970937113/kin-is-now-open- sour...](http://blog.kin.today/post/156970937113/kin-is-now-open-source)).

Have a look at the client ([https://github.com/KinToday/kin-web- client](https://github.com/KinToday/kin-web-client)) and the server ([https://github.com/KinToday/kin-api-server](https://github.com/KinToday/kin- api-server)) on GitHub. It's definitely inspired by Sunrise, but might be a suitable replacement for Google Calendar.

Even better: Contributors get the hosted version of Kin (2€/month; 20€/year) for free.

</comment><comment><USER20> I lately started thinking about a calendar system and a bit experimenting.

Mainly I want a continuous calendar. Just a table of weeks. My thought is to tie calendar with e-mail (what a novel idea) and todo list. I would like to enter new events just writing down with some kind of simple language and auto- completion. I feel that most calendars have too much friction comparing to paper calendar.

Todos should jump to the next day until they are done or deadline is met.

I would like to tie it with e-mail so I could pin the e-mail to specific day or to a todo item as described in previous paragraph. It would be a calendar first and e-mail second.

I wanted at first have it running as a server on a tablet that I would stick to the fridge. It would only need a thin proxy, but thanks to Let's Encrypt it would run with end to end encryption. Also running SMTP server on a tablet. But it is a bit too complicated to do at first.

<comment><USER21> Check out org-mode. Handles todos, scheduling tasks, timers, you can link directly to a file or an email (not a copy, but a link emacs follows into your mail reader, such as mu4e/gnus/wanderlust, for that specific email). It will auto generate an agenda from multiple todo files spread across your filesystem.

[http://orgmode.org/worg/org- tutorials/orgtutorial_dto.html](http://orgmode.org/worg/org- tutorials/orgtutorial_dto.html)

There are some mobile apps but I've never used them.

<comment><AUTHOR> org-mode is great and I use it to write longer, unorganized sorts of things. It was amazing to have a place I could keep track of my time to the minute, extend if I wanted to do basically anything, etc. I missed the visualized nature, however, as I found the visual feedback to be imperative to my taste.

<comment><USER22> calfw can integrate with org. I mostly use the integration as a way point for gcal sync, but even if the integration isn't exactly what you want, adding a new source to calfw is very easy

</comment></comment></comment></comment><comment><USER23> > better, developer friendly, open source calendar system

Just curious what about Google Calendar isn't developer-friendly? I've found it pretty easy to use the Apps Script Calendar service:

[https://developers.google.com/apps- script/reference/calendar...](https://developers.google.com/apps- script/reference/calendar/)

<comment><AUTHOR> 1\. I can't run it locally, or on my own servers to keep my data to myself. Not that this is everyone's concern but it's one I'm thinking of. API access is great, but I'd love to self-host data. In fact, that's becoming more of a priority, security is in the zeitgeist etc.

2\. I'd like to create hyper-specific views or add calendar layers/groups (As a PM, I want a report, or calendar view, of all time spent on client tasks but not meetings, etc. ).

3\. As a User I'd like to track habits I'm trying to manage/modify/track (ie. runs, food intake, smoking cessation, bedtimes, pages read/week).

4\. As a Freelancer I want to integrate time trackers like Rescuetime and Harvest. (this I could actually do with GCal but my question isn't "what can I do with Gcal," rather an exploration of "why isn't there a great alternative and what can we do about it"

I don't want to sign up for Yet Another App Account, I have a dashboard for my life and that's it. I've been thinking about a "continuous integration/dashboard" for awhile.

The Quantified Self ([https://trends.google.com/trends/explore?q=quantified%20self](https://trends.google.com/trends/explore?q=quantified%20self)) movement hasn't picked up any steam, however, I still see the value in capturing data about our daily actions and then using that data.

I've learned a lot from my meticulous time tracking, and it's not perfect. Maybe this is time to explore a side project!

</comment></comment><comment><USER24> [https://sogo.nu/](https://sogo.nu/) has been working pretty well as a CalDAV server and web UI for the last 5-6 years for me...

<comment><AUTHOR> Thank you, I haven't used SoGo in quite some time (v1) nice to see they've come along.

<comment><USER25> Sogo on cloudron works great

</comment></comment></comment><comment><USER26> Here are two projects to look at:

Citadel, ([http://www.citadel.org](http://www.citadel.org)) -- A lot of features, but the UI is somewhat dated. It would be interesting to see a revival.

OpenXchange, ([https://www.open-xchange.com](https://www.open-xchange.com)) -- Commercial project with an open source core. Much nicer UI, I'd be worried about long term support if/when the original company stops developing it.

</comment><comment><USER27> A while back i wanted to write my own calendar to support custom recurrence rules, as well as the usual ones you always get. Custom rules would include things like calculation of Easter and other holidays and events that move about like moon phases.

So the idea was to build a translator that turns something like iCal into a "program". and if you're a hacker, you can write directly in this program :-)

I chose LUA for this because it's compact and sufficient for this requirement.

The other thing i wanted is to be able to write a date and/or a time as words on the end of any event and have the calendar figure it out for. There are so many times that i want to specify, for example, a relative event.

I might extend a cloud payment for 6 months. so i type cloud XYZ expires, 1 day before 6 months from today.

and things like: Radisson Hotel, May 27th at 2pm for 3 nights.

Also then terms like "Easter" and "xmas" can be part of the word parser. And stuff just like "beer friday with Pete."

One thing i still need to do is have it set up recurrences automatically for stuff like "Dave's Birthday, next Friday". So it puts in in the calendar, and adds annual recurrence automatically. would be nice.

I'm thinking of open sourcing what i have.

</comment><comment><USER28> Chandler?

[https://en.m.wikipedia.org/wiki/Chandler_(PIM)](https://en.m.wikipedia.org/wiki/Chandler_\(PIM\))

</comment><comment><USER29> Mozilla Thunderbird?

[0][https://www.mozilla.org/en-US/thunderbird/](https://www.mozilla.org/en- US/thunderbird/)

<comment><USER30> Do you mean the Lightning add-on[0] that is now bundled with Thunderbird [1]? I don't know if it's available as a stand-alone app. I use Thunderbird but not Lightning.

[0][https://addons.mozilla.org/thunderbird/addon/lightning/](https://addons.mozilla.org/thunderbird/addon/lightning/)

[1][https://support.mozilla.org/t5/Calendar/Integration-into- Thu...](https://support.mozilla.org/t5/Calendar/Integration-into- Thunderbird/ta-p/30027)

<comment><USER31> I use Radicale [0] CalDAV server and Lightning addon for Thunderbird - <USER2> great!

[0] [http://radicale.org/](http://radicale.org/)

</comment></comment></comment><comment><USER32> I've previously written a calendar app for attorneys that was an add-on to Outlook and I recently had an idea for a new type of calendar interface. Time is continuous, so instead of a square grid, a circle would better represent time measurement. Think of the wheel in Wheel of Fortune. There is a circle with squares around the edge. Initially, there are 12 squares with each square representing one month. Inside each square is the name of the month, with the year labelled in the middle of the circle.

In a touch interface, you could vertically swipe the circle and it would spin so you could select your month. If you spun it one complete circle, you would iterate the year, forward or backwards. Double-tap the month, or two finger swipe outwards, and the circle becomes the days of the month, with the day of the week and the number date inside each square, with the name of the month in the middle of the circle. Vertically swipe the circle one complete turn, and you go to the next month. Expand the circle again and you have hours of the day. Two-finger pinch to back out to a higher level.

You could put a symbol or different color to denote existence of an event. If the event is double tapped, the key information appears in the center of the circle, or you could two-finger swipe the event so it took up the whole screen.

In a phone size interface, you would only have to show the center of the circle, and an arc portion of the circle, say 100 degrees on the right side of the circle, like between 1 o'clock and 5 o'clock.

I see that there are some round calendar apps out there, but I don't think anyone has this sort of interactivity. However, I really haven't looked at this idea too closely.

</comment><comment><USER33> Our R&D institute used HORDE [1] back then. However, I was always on the lookout for something that resembles Google Calendar in functionality and usability (and possibly even looks). The same can be said for GMail and its Google Task integration.

[1] [https://www.horde.org/apps/groupware](https://www.horde.org/apps/groupware)

</comment><comment><USER34> Have you looked into this? [https://fullcalendar.io/](https://fullcalendar.io/)

<comment><USER35> "Disclaimer: FullCalendar is great for displaying events, but it isn't a complete solution for event content-management. Beyond dragging an event to a different time/day, you cannot change an event's name or other associated data. It is up to you to add this functionality through FullCalendar's event hooks."

<comment><USER34> That is not at all hard to achieve

</comment></comment></comment><comment><USER36> TaskWarrior @ [https://taskwarrior.org](https://taskwarrior.org) \- when you need a web-UI can use [https://github.com/LukasGasior1/taskwarrior- fullcalendar](https://github.com/LukasGasior1/taskwarrior-fullcalendar)

<comment><USER37> Sadly the Android version kinda sucks. I spent around 1h trying to get it to sync. Constant crashes don't help. There is a newer version but apparently without any sync capabilities

</comment></comment><comment><USER38> Not on Node but I use Radicale ([http://radicale.org/](http://radicale.org/)) which runs on Python. Works well for me and have it synced across multiple Macs and iPhones.

</comment><comment><USER39> I know it's not necessarily something you can build on but we use teamup (teamup.com). Set up properly for our needs, it's pretty awesome. It integrates with other tools like slack, etc. Hope that helps.

</comment><comment><USER40> The GNOME project has a standalone calendar cleverly named 'Calendar' [[https://wiki.gnome.org/Apps/Calendar](https://wiki.gnome.org/Apps/Calendar)] and mail-calendar application called Evolution [[https://help.gnome.org/users/evolution/stable/.](https://help.gnome.org/users/evolution/stable/.)] Both are open-source and free (as in beer).

</comment><comment><USER41> im intrigued to see much interest in calendars! im also crazy about calendars and ive always wanted to put practically everything i do in a calendar but google or ical doesnt cut it for me.

so ive started on shalendar.com recently as my personal/work calendar to do exactly that. its sole focus being simplicity, sharing, and integrations to other services like instagram, jira, etc. its functional and making good progress, i expect to push out more features in the next few weeks.

<comment><USER42> The landing page looks great - I'm curious to try it. A short demo/screenshot/about page might be nice, to give potential users a taste of what the app can do.

</comment></comment><comment><USER5> 98% is some serious coverage of your calendar. Here's an example of someone else who does some serious documentation of their time via Sunsama currently. Thought you might find that interesting: [https://workfutures.io/journaling- calendar-centric-work-mana...](https://workfutures.io/journaling-calendar- centric-work-management-3d8fe8c8803)

<comment><AUTHOR> Thanks for the link! There was a week where I wasn't able to do any tracking, though I do have some paper notes with journal entries for the day, so there's a mundane log of my life in existence. I want to make it more useful.

</comment></comment><comment><USER43> [https://github.com/Kickball/awesome- selfhosted/blob/master/R...](https://github.com/Kickball/awesome- selfhosted/blob/master/README.md)

Maybe there's something here...

</comment><comment><USER44> zimbra - fully open source GPLv2

mail/contact/cal/task/briefcase

[http://zimbra.org](http://zimbra.org) [https://github.com/zimbra](https://github.com/zimbra)

</comment><comment><USER45> What are some examples of things you'd build on top if you had this system?

<comment><AUTHOR> * Minute or even second-based granularity. Why? We live in a world where a minute can have a hundred events.

* NL History lookups, ie. "Where was I on my fourteenth birthday?" or whatever. It'd be cool to integrate things like calorie tracking, exercise, that kind of stuff. A true personal database.

* Travel days and in general travel time is hard to track, because flights/cabs/busses get delayed, I'm not thinking about my calendar as much, etc. It ends up being a block that says "travel time" or something and that's fine but an interesting exercise is, how can we improve the efficacy of tracking actual time? This is more brainstorming than fully fleshed concept.

* Habit tracking. Time-based reminders with a method to verify "I did this," like BeeMinder + RescueTime combined. This is it's entire subset of problems to ponder but definitely I want to see this in a centralized calendar because visualization is key for me.

* Robust task management. I want to hover over or click on a cal entry and see the Jira/Trello card with any relevant source code links and exactly what I have to accomplish. Ramit Sethi talks about this -- he uses GCal to do this exact thing, and I think it's a brilliant idea. Unfortunately it's lost in two or three clicks down the rabbit hole. If I am using a centralized "dashboard" type calendar like I envision, this is like a concierge for my to-dos.

* To expand on above, I'd love to see a way to set hard goals and have a smart AI to help back-track and build a feasable path to accomplishment. I.e. I'm not a marathon runner in ANY sense of the term, so I set a go to run the Grandma's Marathon in 2019. Based on my current fitness level from RunMapper or w/e app I'm using, compared to my current habits of exercise, and considering maybe my financial and other secondary commitments I may choose to add to this goal, I'd get an autopopulated schedule of "run this many miles at this pace (on this route, if you want) on these days* and _eat these macros on these days at least_ that's just one example but you can imagine more auto-goal-planners.

<comment><USER46> Just to chime in.... I'd love to get structured data out, from messy calendar free text, with structured or NL querying.

Show me all the appointments I had with Joe Blow in 2016, exported as , for example.

</comment></comment></comment><comment><AUTHOR> Thought of another use case I'd aim for: Scheduling payments/verifying etc. Any time-based event could be a layer. Maybe a plugin that heatmaps your productivity or revenue or whatever in the background.

</comment><comment><USER47> One view calendar is not opensourced, but it is very slick. I was hoping someone has an opensource clone

[0] [http://www.oneviewcalendar.com/](http://www.oneviewcalendar.com/)

</comment><comment><USER48> Evil vim user here. Also a Stanza employee.

What you're describing is exactly the vision for Stanza.

Currently, our product allows users to subscribe to event feeds, much like a YouTube watcher subscribes to YouTube channels. These channels (or StanzaCals) sync with your Google Calendar, iCal, or whichever major calendar platform you use. Right now our main product is an embeddable calendar that lives on sites such as [http://www.wowhead.com/](http://www.wowhead.com/), [http://www.lakersnation.com/](http://www.lakersnation.com/), NFL teams, and many other hot websites.

Right now, we're expanding our product to make discovering events easier and improve personalization. We're built on Node, AWS, MongoDB, Redis, and serve 200M unique impressions per month.

If you have a passion for making a great calendar experience, (eg: the atom of Calendar), we'd love to hear from you.

Drop me a line at email@example.com

<comment><USER49> The vision for Stanza is "a better, developer friendly, open source calendar system"?

<comment><USER48> Yes, that's the long term vision. We'd naturally expand into a calendar application.</comment></comment></comment>


Show HN: jsgif: A GIF player in JavaScript - <AUTHOR> http://slbkbs.org/jsgif <comment><USER2>
        The source code is a bit of a mess, but if anyone is
        interested in the non-bookmarkletized code, I can upload it
        somewhere.

How about hosting the source code on GitHub? I'd love to see how this works!

<comment><AUTHOR> OK, I put it up on GitHub. <https://github.com/shachaf/jsgif>

<comment><USER3> To be more clear on the gh_pages idea. If you rename your master branch to gh_pages then github will automatically let you browse to it. For example one of my projects which includes a index.html just like yours on github:

<https://github.com/icefox/git-achievements>

And on icefox.git.com:

<http://icefox.github.com/git-achievements/>

<comment><AUTHOR> Yes, but then the canonical URL would be on github.com.

</comment></comment></comment></comment><comment><USER4> How strange. Until last month, I was running gifexplode.com, a site where you could share 'exploded' gifs - i.e. it took an animated gif and stepped over it frame-by-frame. I took the service offline last month because people were using it to store porn. I had tried finding a client-side solution in vain. The long-term plan for gifexplode was to introduce a player just like this!

Soon as I get a chance, I think I'll relaunch gifexplode with your viewer.

Here's the blog post about how gifexplode was born, it's quite an interesting story: [http://www.puremango.co.uk/2009/08/gifexplode-community- powe...](http://www.puremango.co.uk/2009/08/gifexplode-community-powered-web- development/)

edit: Hmm, using XHR to fetch the gif will give me cross-domain issues unless I first mirror the image on my server. Anyone know of a way around that?

<comment><USER5> Instead of mirroring, you could proxy. (Solves "storage"/"mirroring" issue; doesn't solve "nasty stuff served up through your server" issue.)

In general, though, there's no way around it, except of course by restructuring gifexplode as a bookmarklet or convincing image host(s) to partner with you:

They can then include the code on the pages they serve up themselves, allow XHR requests via HTML5 or flash mechanisms, or give you base64 data smuggled into a JSONP.

<comment><USER4> Thanks, yeah I think proxying is the best solution. I'm still not sure if that's a route I want to go down though... The nasty stuff served through my server is what I want to avoid. Gifexplode became quite popular on 4chan you see...

</comment></comment></comment><comment><USER6> Some really clever work there.

Add a timeline slider and it's really usable!

ps. for those wanting to read the source more easily,

paste the bookmarklet into <http://jsbeautifier.org/>

<comment><USER7> The beautified source code: <https://gist.github.com/901751>

</comment></comment><comment><USER8> I like this simply for the content on the page, not necessarily the actual project (tho it's cool too). It's snarky, self-deprecating, and dryly funny.

</comment><comment><USER9> Well done! Im looking for a png parser in javascript. I would like to load pngs with xmlhttprequest and them draw them on a canvas. Ever heard of one?

<comment><USER10> Why not just do something like the below when you need to do that?

      var img = new Image();
      img.onload = function(){
           //draw to canvas
      };
      img.src = "image.png";

Could be a stupid answer, or possibly it'd be better to do it your way?( Maybe I can learn something :) )

</comment></comment><comment><USER11> I made a similar Chrome plugin called GIF Scrubber: [https://chrome.google.com/webstore/detail/gbdacbnhlfdlllckel...](https://chrome.google.com/webstore/detail/gbdacbnhlfdlllckelpdkgeklfjfgcmp)

It also uses a canvas element to render each frame but it does support weird disposal methods. You can see the (very sloppy) source by just viewing the source of the plugin window.

You mentioned getting test images for the disposal methods and I found these to be very helpful: <http://algif.sourceforge.net/#18>

I'd also recommend using some kind of movie player-style control like I used and some kind of "explode" function. They both proved popular.

</comment><comment><USER12> This is the way forward for codecs on the web. Alan Kay has previously complained about how dumbed-down the browsers are in comparison to the possibilities of mobile code, and that's now starting to become less true.

The next step beyond that is to provide browser extensions for programming network protocols. One-way HTTP over NAT sucks, web-sockets do not and will not work.

We're starting to come back around to the vision of the Internet in the 80s - multi-protocol, multi-host (if you're on the web, you can be a server), mobile code via bytecode (or source code), and with pervasive remote access (VNC and X11/NX).

</comment><comment><USER13> Neat!

What does pin/unpin do? (I clicked it with no obvious effect on playback.)

<comment><USER14> It pins the buttons bar; if it isn't pinned, it disappears when you move the mouse outside it.

</comment></comment><comment><USER15> Nice! I was swearing at Wikipedia's animation of a flipflop a couple days ago. Downloading and fiddling with 'convert' was substantially more annoying.</comment>


The Highly Productive Habits of Alan Turing - <AUTHOR> http://cacm.acm.org/news/150686-the-highly-productive-habits-of-alan-turing/fulltext

<comment><USER2> Link to the actual article:

[http://arstechnica.com/tech-policy/2012/06/the-seven- highly-...](http://arstechnica.com/tech-policy/2012/06/the-seven-highly- productive-habits-of-alan-turing/)

Also, it was posted yesterday, and although no discussion ensued, it got 11 upvotes:

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


Dear Recruiters - <AUTHOR> http://kencochrane.net/blog/2013/02/dear-recruiters/ <comment><USER2> ...by the way, if you find any recruiters offering a 200k job with 6 weeks vacation and a signing bonus, where you can telecommute from anywhere, but darnit they require Windows or PHP work now and again... drop me a line! ;)

<comment><USER3> I'd be willing to write in brainfuck exclusively for 200k. This guy has it good, doubt he'll ever find a job with that kind of attitude. He could be ol' Don Knuth, still wouldn't get a job from anyone worth working for.

Although, with that guy's track record, maybe he knows being a cocky asshole is just the way to get a good job in software, I don't know.

edit: after thinking about it more, I think this may be a parody of the sort of unrealistic expectations recruiters have for 'talent'.

<comment><USER4> > This guy has it good, doubt he'll ever find a job with that kind of > attitude.

These comments sadden me. I work with Ken at dotcloud and can tell you he is one of the most humble and easy to deal with colleagues I've ever had.

Have you never been contacted repeatedly, almost to the point of harassment, by a recruiter who wouldn't take no for an answer, yet could not be bothered with even the most basic research about you?

It's that combination of a) blind persistence and b) disregard for the actual person that defines truly spammy recruiters, and which obviously drives Ken crazy. I don't blame him for trying to stem the flow. If anything I would like to find out if this new anti-spam tool actually works :)

<comment><USER5> Yes. And never mind the fact that he's stating what it would take for him to _leave_ a job he obviously loves. Of course he is going to make outrageous demands. He doesn't want to leave! Hello.. is this thing on? I feel the message got lost on a lot of people that maybe haven't been inundated with recruiter calls and emails or had their time wasted talking about positions that they would never take.

I mean who here hasn't been contacted by a recruiter asking about a skill set you barely know or don't even have on your resume? Or their understanding of it in general is so far off you don't even want to deal with it? Or ones where they try to connect to every person in your company through you? I could go on and on. It gets maddening.

</comment></comment></comment></comment><comment><USER6> Considering we're in something of an IT bubble at the moment, I sometimes wonder if we'll look back on stuff like this in a few years and think "Wow, we had it good".

<comment><USER7> Almost undoubtedly, I would think.

</comment></comment><comment><USER8> Why talk down to people like so, almost treating the recruiters like they were little children who need to be lectured about how to behave. Recruiters are human beings too, who are just trying to do their job.

<comment><USER9> Try posting a public resume on Monster sometime, and wait for the multiple e-mails about a perfect opportunity, and then if you follow up on them it's a 3 month contract in Lower Bumfark, Kansas.

<comment><USER10> No, actually, it's almost always insurance sales or multi-level marketing.

</comment></comment></comment><comment><USER11>
      Minimum offer

       ...

      Pony: 1+

There are certain social behavioral norms and breaking them makes you look cocky and unprofessional, even if in reality you are not. This would be an example of that.

</comment><comment><USER12> I love it. Very succinct and to the point. I don't agree with some comments saying that it is naïve because it is not beating around the bush.

If I am a recruiter or any potential employer, I can now instantly see what this applicant wants and expects in the form of compensation, and it is now my job to exceed that compensation and entice this person to come work for me.

If I don't want to meet his target salary, then so be it, I go my own way and he goes his with no love lost. I find this type of discourse very refreshing.

</comment><comment><USER13> Why am I reading about someone's slick way to solicit recruiters while pretending he is happy with his great job?

<comment><USER14> If I was his manager reading this, I would bring him in for a 1:1 to determine what truly motivated him to write such a worded diatribe. Best case scenario he doesn't understand how multiple audiences would react to it and assumed only developers that agree with him would see it. This is never the case with the Internet so I'd then have to question his capacity to understand the field he is in.

At the very least it reflects poorly on his current employer, as I wouldn't join in fear of having to work with him.

In this world you must assume that everything you write on your blog, Facebook, etc will end up in front of your grandma, your parents, and your boss. Assuming otherwise is a risk, or at least a demonstration of thoughtlessness.

</comment></comment><comment><USER15> I looked at his minimum offer first and thought he was a professional football player. But no... he's a LAMP developer.

<comment><USER16> Disclosure: I have worked with Ken.

I'm not sure you are aware what LAMP means. He prefers (for good reason) nginx, as it states in the post. Ken is someone who gets shit done, for lack of a better expression. He is well worth whatever he is paid at DotCloud, and I would venture to say he is worth his "Minimum Offer".

</comment></comment><comment><USER17> His LinkedIn profile has an alphabet soup of technologies and programming languages. Even if a recruiter did read it, like he requests, they would have no idea what this guy's real focus is. It even mentions Windows, as well as Xcode and iPhone development when he is clearly a server engineer.

Maybe he needs to revise or shorten his resume before lashing out at recruiters for not reading it. I'm not a recruiter, I'm a developer who makes $225k, has unlimited vacation and lives In San Francisco. As a developer, I feel that guys like him give us all a bad name and make us look arrogant, inflexible and hard to work with. Maybe this attitude is why he still doesn't make his ideal salary of 200k.

After this blog post I doubt he's going to get any other job, let alone one that meets his minbar.

</comment><comment><USER18> So why are you even on LinkedIn? If you're trying to deter recruiters, what desirable functionality are you getting out of the site that keeps you from just deleting your profile?

Or do you actually enjoy the attention and are you just pretending to be annoyed by it as a way of bragging?

<comment><AUTHOR> I don't use Facebook, so I use linkedin as a way to stay connected with people I have worked with in the past. As people move on, phone numbers and emails change, but linkedin lets me stay connected to them even if I no longer have their email or phone number.

Once again, I'm not against getting sent relevant job openings, I'm just tired of people who just spamming everyone without even bothering to read the profiles.

</comment></comment><comment><USER19> It is rather arrogant I think.

<comment><USER20> I agree, especially the deal breakers section. No Microsoft Windows? At all? I use whatever gets the job done, as any good technologist would.

<comment><USER21> Technically, any technology CAN get the job done, but the author clearly feels that Windows is never the best choice. Personally, I completely agree with him. Developing on Windows offers no advantage over OS X or Linux.

</comment></comment></comment><comment><USER22> These days, I reply to recruiters with what they can realistically expect in the market, job description vs. expect pay rate. More often than not, the pay they're offering is way, _way_ too low for the market at large, never mind myself.

Sometimes I get a reply, sometimes not, but I get the feeling that by & large the terms are out of their hands, and I doubt the recruiter sending the emails/making contacts is the same person that got the req from the hiring manager/company. It's that person, the person accepting the req, that needs to know the market and work with the hiring entity to put together a realistic job package. It's that person you should be frustrated with.

</comment><comment><USER23> I love Portland, Maine. I don't blame you for not wanting to leave.

<comment><USER24> I'm shocked how many telecommuters live here in Maine; and dismayed at the number of companies who think we actually _want_ to move to the Valley.

<comment><USER14> You might not be 22, full of idealism and hope for the future, completely distracted by high profile start up capital and valley life style. As someone who was recently interviewing in SF, I find that the younger "nothing but my bike and my MacBook" type well geared for that. The pay is good when you don't have a family and are willing to pay 2300 for a one bedroom shithole.

Of course, I'm hand waving and over generalizing. But I'd say a large portion of the talent demand meets that transient start up life style and many recruiters probably assume that if you are in tech, that its what you want.

</comment></comment></comment><comment><USER25> Sounds like you have the same experience with recruiters as I do!

<comment><AUTHOR> I wish linkedin would allow you to add this stuff to your profile. Ideally the search/spam feature of linkedin that recruiters use, would have to pass your filter before getting sent to you. This way if you get notified at least it passed your filter and you would be OK with it.

That would be a feature I would pay for.

<comment><USER25> A link to a post like yours would be the perfect response for emails such as:

"Hi James

Please contact me asap or I can call you ??

I'd like to discuss a PHP contract role your perfect for

Speak soon"

<comment><AUTHOR> Yeah, I'm hoping it will save me some time. Now I can just send them this link each time I get a message, and if they bother following the link, doing as I say, and writing back then I know they are at least serious and not just fishing.

<comment><USER26> OP, why bother replying to posts where the recruiter clearly didn't read your profile at all? It's a nice gesture, but the sender is creating work for you by being lazy and off target. An offline version might be responding to junk mail with a note about what you'd really like to buy.

Are you replying on the off chance the spammer is sitting on a cushy job order they haven't mentioned?

</comment></comment></comment></comment></comment><comment><USER27> What I want is even simpler.

On LinkedIn I told you that due to family circumstances I am not available for full time work until the summer of 2014. Is it 2014? Do you have a part time contract? No and no? Then why are you contacting me?

</comment><comment><USER28> I really don't mind recruiters badgering me by email or any form of non- disruptive communication. Keeps me nicely updated on the market, and tells me who to avoid should I actively be looking for something.

</comment><comment><USER29> Heh, I wish this sort of stuff happened to me.

I don't receive recruitment messages, not even the spammy ones.

</comment><comment><USER10> This guy will change his tune when he gets fired for being an asshole.</comment>


New Year's Resolutions Made Easy – The Best Running App So Far - <AUTHOR> http://scientific-ocean.com/2012/12/31/new-years-resolutions-made-easy-the-best-running-app-so-far/

<comment><USER2> I use Zombies Run. The map is cool but the nike+ map which shows your route with speed as a heat map is one small step up.

<comment><AUTHOR> I am planning to start using it in the coming days and I am glad to see such feedbacks</comment></comment>


A Deep Learning Dissenter Thinks He Has a More Powerful AI Approach - <AUTHOR> http://www.technologyreview.com/featuredstory/544606/can-this-man-make-ai-more-human/ <comment><USER2> I found the first comment to this article quite interesting:

"Marcus has a point - even is some of what is said about deep neural networks is incorrect (for instance, they can learn and generalize from very few example, one shot learning).

However, he got it wrong with the answer. The key for machines to reach the symbolic abstraction level is the way we train them. All training algorithms, supervised, unsupervised or reinforcement learning with LSTM rely on the assumption that there is an "utility function" imposed by some external entity. Problem is, by doing so, we are taking away their capacity [of the machines] to make questions and create meaning.

The most important algorithm for learning is "meaning maximization" not utility maximization. The hard part is that we cannot define what is meaning - maybe we can't, I'm not sure. That is something I will be glad to discuss."

<comment><USER3> This is perhaps a bit philosophical, but assuming we had a "meaning maximization" function, what stops us from writing it as a loss function and using our current supervised machine learning frameworks?

<comment><USER4> Just because we can formulate an optimization objective, it is not guaranteed that we will find an algorithm that solves it within a reasonable amount of time. In case of humans, these objectives or preferred states are possibly very simple ones, like hunger and pain avoidance, reproduction and curiosity; and it is actually easy to write down an algorithm that optimizes these objectives (if you ignore how reality actually works): Simply try out _all possible_ ways of reacting to the environment and choose the best one.

This works in theory, but in practice you only have a limited amount of chances to try something out (because of the arrow of time). This makes learning a necessity. You need to keep a record of all trials you have performed so that you can reuse this information later when the same situation reoccurs. How to do this in an optimal way is described by Bayes' theorem.

The key to AI will be a certain set of priors, biases and fixed function units that make this computationally tractable; we'll likely need things like invariance of the learned information to various changes so that it can be reused in different settings, segmentation of data coming from the world into episodes (hippocampus), attention, control (basal ganglia), mental rotation (cortex) and path integration (hippocampus, grid cells).

<comment><USER3> That's true, there are certainly many optimization objectives computationally intractable, or perhaps too abstract to be useful for learning.

However, I would argue the prior of Bayesian modeling can be just as nebulous and computationally intractable as an optimization objective. Like supervised learning, Bayesian modeling is just a tool.

I'm skeptical that we will reach AI through a deep understanding or modeling of the brain. Technology and computer science advances more quickly than the biological sciences, at least in recent times. You might argue a success in robotics like [0] is a motor control system. But they built this extending mathematical frameworks not being biologically inspired, and the big wins there didn't come from fixating on a learning framework or biological mimicry; just like humans learning to fly didn't come about from flapping wings like a bird. At some point we hacked an engine (invented for other purposes) onto a wing and came up with powered flight.

As an aside, only seeing input a limited number of times would likely improve your ability to find models that generalize as your model must be able to take these one off learnings and unify them in some way to achieve high training performance. With respect to human learning, a specific individual only has one chance, but nature has had many. We are only a selection of those chances that seemed to work well enough. There are many commonalities to existence that allow for this to work well in practice.

[0] [http://groups.csail.mit.edu/rrg/papers/icra12_aggressive_fli...](http://groups.csail.mit.edu/rrg/papers/icra12_aggressive_flight.pdf)

</comment></comment></comment></comment><comment><USER5> I'm glad people are working on better approaches to AI, but I don't think articles like this, based on sources like Marcus, contribute much.

Mostly because Marcus isn't willing to talk about what he's working on right now. Hand-wavy stuff about how children learn, a tired analogy that's been trotted out many times before. This article was too early, and it doesn't contain real news. Reproducible results, or it didn't happen...

Fwiw, the statement below is simply untrue.

> _"If you want to get a robot to learn to walk, or an autonomous vehicle to > learn to drive, you can't present it with a data set of a million examples > of it falling over and breaking or having accidents—that just doesn't > work."_

The entire premise of Deepmind's work combining DL and reinforcement learning shows that autonomous agents learn from millions of examples.

And in fact, data is not the limiting parameter here. Trying to create an AI that doesn't need big data will be great for edge computing -- but we're actually swimming in data and using it to set new records every year -- [http://deeplearning4j.org/accuracy.html](http://deeplearning4j.org/accuracy.html) \-- so we might as well rely on it. Ignoring big data in the pursuit of AI is like ignoring sunlight in the pursuit of clean energy.

Deep learning is one of the best ways we have to use that data. In a sense, deep is the new normal.

<comment><USER6> > but we're actually swimming in data ...

I think this is a "looking under the lamppost for your keys because that's where the light is" situation. We hear about tons-of-data and deep learning because teams like Google/FB have problems that fit those situations well. This is not representative of the vast sea of learning applications most organizations face.

I work on learning applications day-in-day-out. In a typical year I work with over 50 different organizations/projects. Almost none of them have data anywhere near what deep learning requires. Here are just a few examples from the past year:

1) optimizing recruiting pipeline. Maybe you have ~1000s of data points per year

2) medical billing applications: typically hundreds of data points per year

3) novel but slow-moving financial instruments, maybe 1 data point per day

4) automated sensor calibration where each run of the hardware costs you a few hundred dollars: depends on your budget, but thousands of data points in a year are representative

I think Google/FB and the "web+mobile is everything hivemind" (I'm not saying that applies to you) have deeply distorted people's expectations for how much data is available to solve a typical problem.

</comment></comment><comment><USER7> I hope that anyone who incorporates this concept into their AI also measures the number of mistakes which become heuristics and biases in the AI. I would hypothesize that there is a link between the willingness or ability of the human mind to learn this way and the propensity to accept ( even DESIRE ) an answer to a question that, in truth, there is not adequate information to answer correctly.

This tendency leads to both helpful and dangerous heuristics and biases. From these biases humans build false beliefs that are damaging to themselves, their communities, and in the long run the species as a whole. If AI is about enabling humans to do more and better, should we not accept the failings of the current technologies in favor of assuring that they do not fall prey to the same biases and heuristics that lead humans to slaughter each other over the religious dogma of the past, destroy the environment with impunity, and accept ideas that 'feel' correct over being correct?

<comment> rm_-rf_slash A reason to fear human AI would be that they would realize how destructive humans are and how little they perceive us necessary to the evolution of the species.

</comment></comment><comment><USER8> OK, to be fair, I skimmed TFA and didn't read every word. But to the extent that I get the gist of it, I'd say this:

I don't know that anybody seriously proposes that deep learning is the be-all end-all of AI techniques. It's VERY powerful for a lot of things, but I think DL researchers are aware of things DL doesn't do / isn't good at. Look at the recent book _The Master Algorithm_ which breaks down a lot of what it would take to create a truly general purpose learning algorithm: If you believe the author's thesis, Deep Learning (or something like that) is just one piece of a much larger picture.

And without trying to start a debate over the merits of ML versus "GOFAI" or symbolic computation, etc., I think it's fair to say that DL doesn't really add anything in terms of reasoning. It's great at saying "this picture has a cat in it" or "this wav file says 'Hello, my name is mindcrime'", but that's a pretty small part of what human intelligence can do.

<comment><USER9> I'm curious about that book ( _The Master Algorithm_ ): I began reading it, but stopped early because I got the impression it would be too "entry-level" for me, thus a waste of my time. Should I consider keeping on with it, and why?

<comment><USER10> I would say no, if you already understand the varieties of techniques it covers. It doesn't get more advanced. However, it is a decent historical overview.

He also pushes the same idea over and over again that there must be a master algorithm, when I got the feeling very early on that it wasn't a necessary thing or a practical concept to guide research. It's like arguing that you have to choose between electricity and magnetism, when they might just be aspects of the same underlying forces. Also, his reasons for claiming that certain algorithms are not the master algorithm are pretty weak and based on current progress, not theoretical limitations.

<comment><USER11> What does he have to say about the No Free Lunch Theorem and the bias-variance tradeoff?

</comment></comment></comment></comment><comment><USER12> Does someone have a link to a concise technical explanation of what this is about? I can't handle the vague long-form writing about some guy's startup and 2-year-old on my morning pass through the news. I'm reminded of the current southpark season, feeling like this is an ad being passed off as news.

<comment><USER11> TL;DR: Deep learning can't generalize to novel inferences as well as probabilistic programming.

</comment></comment><comment><USER13> > In contrast, a two-year-old's ability to learn by extrapolating and > generalizing—albeit imperfectly—is far more sophisticated.

How does he know? He only sees the output and not how the brain works or how much information has been processed before hand. So it seems like the brain took an easy shortcut and generated a new rule, and you could just write a bit of code to do that as well.

But isn't this rule learning just a few more layers in a learning network. Basically a learning network that operates on concepts not on just raw pixels.

One thing I noticed with my kids is they have a ridiculously good memory. For a while they almost fooled me that they could read. They would remember a word in a book and then a month later point to it and pronounce the word. So I thought, oh wow, you could read that. But then realized they just remembered it. It seems a lot of how a brain learns is just be absorbing and processing massive amounts of data, not unlike a learning project Google or these other companies have.

Now on the subject at hand, haven't there been expert systems that do what he proposes. In a way IBM's Watson is a successor to many of those expert systems. So one can say this has already been implemented and tried, it works in some instances but not others.

</comment><comment><USER14> Until our current big data AI revolution, AI was one investment catastrophe after another. Now money finally is flowing into AI again, and intuitions like this idea, backed by a little big data power can be explored again.

So even though the idea is fairly simple, I think anyone who thinks about AI for any trivial amount of time will come up with the idea that AI's somehow have to automatically generate imperfect generalizations, the final result might be a truly innovative product.

Actually building an AI that does this on a scale that results in useful applications is something that probably has not been practical for a long time, and might or might not be now.

<comment><USER15> Do you have reference for one investment catastrophe after the other? I know it failed to deliver on the promise of translating human language, for example.

<comment><USER16> This article lays out those failures: [https://en.wikipedia.org/wiki/AI_winter](https://en.wikipedia.org/wiki/AI_winter)

</comment></comment></comment><comment><USER17> An interesting article, but (understandably, if frustratingly) very light on the details. It reminds me of some of the work being done in the Artificial General Intelligence (AGI) community. In AGI, you are looking to come up with more universal approaches to mimicking intelligence, rather than bake-an- architecture-solve-a-specific-problem.

In particular, this reminds me of some of the operational logic work done in OpenCog ([http://opencog.org/](http://opencog.org/)) and, especially, Pei Wang's Non-Axiomatic Reasoning ([http://cis- linux1.temple.edu/~pwang/papers.html](http://cis- linux1.temple.edu/~pwang/papers.html)). I've liked Non-Axiomatic Reasoning for a long time, and this sounds in the same broad area.

Pei Wang, incidentally, came up with the best operational definition of intelligence I've seen (and one I apply to other systems and approaches): Intelligence is the ability to act appropriately with limited knowledge and limited resources (including time and space).

For what it's worth, my (published, although very open to change) position is that a layered architecture (akin to old-school subsumption architectures) is probably going to be most effective here. Combining the 'symbol creation' abilities of a deep neural network with the evidential reasoning, generalisation, and planning capabilities of a cognitive layer will allow us to get the best of both worlds.

<comment><USER8> _For what it 's worth, my (published, although very open to change) position is that a layered architecture (akin to old-school subsumption architectures) is probably going to be most effective here._

I have been going back and spending some time with the old "blackboard architecture" idea lately. I harbor a suspicion that that, or something like that, will turn out to be a useful way to integrate the capabilities of various different elements of cognition.

<comment><USER17> Yes, although it is probably going to have a notion of flow to it too. As someone who subscribes to the cognitive science idea of embodiment, the concepts in our head have meaning entirely because of how they relate senses to actions (however indirectly, and vice versa). I believe AI will be no different.

</comment></comment></comment><comment><USER18> If I had to guess I would say that:

\- It involves generative models (needed to make inferences from very few examples)

\- It is still a connectionist approach (typical probabilistic programming is great if you have a lot of insight into the model, but not if you're trying to solve a general case... unless you're doing program induction but you need to represent programs...)

\- It doesn't involve MCMC sampling for inference, because that's too slow or even intractable.

Some type of variational program induction where programs are represented as differentiable neural networks would be in that corner. Or it could be something totally different, but speculating is fun.

<comment><USER19> I dunno, I still think it might be possible to make tractable program induction through MCMC.

I've been trying (but failing) to do so by clustering similar generative rules of different complexity together then getting the algorithm to search the grammar space in a way that it recursively tries simpler models first then goes on to try generating (and learning) more complex rules that are known to have similar output to the best simpler ones.

My intuition is that you have to cluster your generative rules into an taxonomy that your algorithm can navigate from the top. It's exponentially inefficient to try to recognize "dog" until you have recognized that the simpler "animal" is a good approximation.

I also think that in the ultimate solution, the output leaf statements of the grammar will be parametrized like a normal programming language, so that for example, the algorithm can generate a color, a radius and then generate 100 circles referencing this single color and radius to represent repeated patterns without having to learn their size and color individually when they are clearly homogeneous or invariant across a bunch. The bayesian, occam's razor, solution to a bunch of similar things that you don't have a category for yet is shared parameters. These parameters enable learning with very few examples. The algorithm doesn't have to learn a full new category to make good predictions, it can simply notice a functional parametric pattern in a part of a scene and extrapolate immediately.

I haven't cracked it however. It's grueling to debug probabilistic algorithms compared to clear cut binary ones!

<comment><USER18> Having some type of hierarchical structure is probably the right inductive bias to have (it may be one of the reasons why deep learning is so successful), but you also need a search direction. It's hopeless to randomly hop in a high dimensional space until you find matches.

<comment><USER19> The hierarchical structure means you don't hop randomly. You recognize simple and vague approximate models first then bias your search towards the more complex rules that are under you best top level approximations in the hierarchy.

It's like a probabilistic binary search in the model taxonomy.

One thing that makes me hopeful that the learning process is possible is that the non-terminal grammar rules are generic and can always become anything. You don't tend to get stuck in local maxima even if you only search a small part of the program space when any node can always be swapped for a node of any another category.

My problem right now is that my MCMH doesn't mix well. Even though I tried to shorten the jumps between models of different complexity for a particular thing, once the vague model traces are well fitted to the training examples, there is too deep a score chasm to jump to the next level of complexity.

My simulations seem to get stuck in simpler modelisations of things. I want simpler models to recursively open the door to learning and recognizing slightly more complex models just under them in the hierarchy but this doesn't seem to be happening. The hierarchy is not really even forming properly.

I might be missing something stupid. I don't consider myself an expert in these things. I just dabble for fun. It's one of the reason I'm discussing it here. Maybe someone more knowledgeable will make me have an aha! moment.

There is still a bunch of things I could try but like I said, it's long and grueling debugging work.

</comment></comment></comment></comment><comment><USER20> Interesting work to see as I've promoted this view myself. Specifically, that the brain is designed to rapidly acquire knowledge with relatively little data in childhood then changes overtime somehow. Not to mention people's reasoning ability that often seems closer to a self-modifying, expert system that NN's don't seem anything like. So, it all uses neurons but different types that smoothly integrate.

Hence, the DNN's modelling a small part of the brain that doesn't even do our thinking isn't going to make thinking machines. The machines will be really stupid and hard to train. Humans are hard enough to train: takes two decades on average. The ability to automate abstraction, understanding, and feedback via example generation all on small amounts of data is critical.

If that's not found, then my next question is, "Will DNN's deliver acceptable models for non-recognition tasks they're aiming at or will they experience The Second AI Winter when truth sets in?"

</comment><comment><USER3> Perhaps Gary Marcus said it best himself when critiquing Numenta, yet another brain inspired company [0]:

[Brain inspired] models are arguably closer to how the brain operates than artificial neural networks. "But they, too, are oversimplified," he says. "And so far I have not seen a knock-down argument that they yield better performance in any major challenge area."

There are a few of these brain inspired machine learning companies, yet I cant think of a single one acquired by Google.

Probabilistic modeling is great when you dont have much data and want to inject prior knowledge in a cohesive way. However Google's approach appears to be to create large and robust training sets to feed into somewhat conventional supervised learning frameworks.

[0] [http://www.technologyreview.com/news/536326/ibm-tests- mobile...](http://www.technologyreview.com/news/536326/ibm-tests-mobile- computing-pioneers-controversial-brain-algorithms/)

<comment><USER21> It seems that he implies that brain models aren't good because they haven't piqued Google's interest. Almost immediately he goes on to say that his method is great even though Google isn't really interested in it either. Seems a little contradictory.

</comment></comment><comment><USER22> The article doesn't give any technical details. The website of the profiled company, Geometric Intelligence, doesn't have any technical details.

Cofounder Gary Marcus has a publication list at his academic webiste:

[http://www.psych.nyu.edu/gary/marcus_pubs.html](http://www.psych.nyu.edu/gary/marcus_pubs.html)

Cofounder Zoubin Ghahramani has his research available at his academic website:

[http://mlg.eng.cam.ac.uk/zoubin/](http://mlg.eng.cam.ac.uk/zoubin/)

<comment><USER23> If you look around Zoubin's website you'll find this:

[http://www.automaticstatistician.com/about/#](http://www.automaticstatistician.com/about/#)

"The current version of the Automatic Statistician is a system which explores an open-ended space of possible statistical models to discover a good explanation of the data, and then produces a detailed report with figures and natural-language text. While at Cambridge, James Lloyd, David Duvenaud and Zoubin Ghahramani, in collaboration with Roger Grosse and Joshua Tenenbaum at MIT, developed an early version of this system which not only automatically produces a 10-15 page report describing patterns discovered in data, but returns a statistical model with state-of-the-art extrapolation performance evaluated over real time series data sets from various domains. The system is based on reasoning over an open-ended language of nonparametric models using Bayesian inference."

</comment></comment><comment><USER24> Talk is cheap. He is more than welcome to compete in ILSVRC or on Kaggle or any other competitions of his choosing. Maybe release some code on Github or even an API. There are a lot of options out there to really _show_ how your technique is better, not just talk about it.

"How humans do it" isn't necessarily the only way to solve a problem. We don't know how we add 2 numbers in our minds; but the computer can add 2 numbers orders of magnitude faster than us.

<comment><USER25> From tfa it does not sounds like he is interested in competing in ILSVRC. His point is that fitting a 500M-dimensional model to hundreds of millions of training examples != intelligence. That is, deep learning is incredibly good at pattern recognition but it is not going to get us to AI as most people understand it.

<comment><USER26> Pattern recognition is just one component of intelligence. It's a big, important one though. People need to stop thinking that we'll one day discover some one algorithm for strong AI. It will be a composition of different parts, just like the human brain.

</comment></comment></comment><comment><USER27> The part that always looked strange to me of comparing AI to humans/children is that humans have had _years_ of time to learn while e.g. neural networks a few days at most?

<comment><USER28> Yeah, but it's not obvious if every single frame of the whole movie children have experienced is necessarily important.

To put it one way, what is the _rate_ of learning? How many _concepts_ do children learn per unit time?

Concepts: Our computer systems take whole images and train on them, but before a pixel-based image gets to the learning part of a child's brain, it has probably been conceptualized in some way already.

Rates: And then, from this feature vector—maybe 1 feature vector per 10 seconds, for a child—how often is it incorporated in a learned concept? Maybe one concept per hour? Per day? Think about how challenging it is for children to learn vocabulary. A young child doesn't know that much.

The important thing is that a child is a self-learning machine. It chooses what's important and has a way to shift its attention, a critical enhancement of new (2015) AI approaches, deep learning and otherwise. It can explore its own world and somehow choose the "training instances" that matter.

By comparison, a neural network training for days looks at millions of images. A very high rate. But the most effective approaches (the massively-multilayer networks, the deep in deep learning) are making concrete what a child's brain must do already: separate perceptual components from learning components, in a conclusively more structured and hierarchical way.

<comment><USER27> What if you can achieve such high learning rate only because (in ML) you process a really narrow view of the data which cannot lead even close to how a human perceives things? I mean in terms of conceptualizing and connecting things/thoughts.

</comment></comment></comment><comment><USER29> Gary isn't the first to think of this.

In fact I was working with Dr. Frank Guerin [1] back in 2008 about this exact approach. He wrote an interesting paper that approached ML from a pedagogy perspective titled _A Piagetian Model of Early Sensorimotor Development_

[1] [http://homepages.abdn.ac.uk/f.guerin/pages/](http://homepages.abdn.ac.uk/f.guerin/pages/) [2] [http://homepages.abdn.ac.uk/f.guerin/pages/EpiRob2008.pdf](http://homepages.abdn.ac.uk/f.guerin/pages/EpiRob2008.pdf)

</comment><comment><USER30> He "refused to explain exactly what products and applications ...for fear that a big company like Google might gain an advantage".

Does this actually happen, or is it baseless paranoia?

<comment><USER26> In my experience, if you start spreading a good idea out there, what can happen is that people will initially act as though your idea is outlandish and worthless, but later on, this idea will percolate in other people's mind, they'll do something with it, and claim it was purely their own invention. Google has more resources than this guy, so they can prototype things much quicker.

</comment></comment><comment><USER31> How exactly does someone run a company for one year during a sabbatical? It seems like you are signaling that you don't believe it will succeed, if you are pre-announcing that you only intend to run this new company for a year. Has this structure ever succeeded?

</comment><comment><USER32> The _Talking Machines_ podcast (which is great BTW) has an interview with Zoubin Ghahramani[1], one of the founders mentioned here.

He spoke about how he was determined to prove that non-deep learning methods could perform as well as deep learning at tasks like ImageNet. The interview was in March 2015, and AFAIK they haven't published anything yet.

OTOH, his work on the Automatic Statistician sounded very interested.

[1] [http://www.thetalkingmachines.com/blog/2015/3/26/3mixrq61fb0...](http://www.thetalkingmachines.com/blog/2015/3/26/3mixrq61fb0tff4kn0mrkzsw2xma98)

</comment><comment><USER33> There were others thinking of this approach in AI before this guy:

"The idea for a search engine that maps associations came to Franks by way of his three young children. He noticed how each child processed information by taking two pieces of knowledge, combining them, and coming up with something new. Franks wondered whether he could get a computer to do the same thing" From:

A Search Engine that Thinks, Almost [http://newscenter.lbl.gov/2005/03/31/a-search-engine-that- th...](http://newscenter.lbl.gov/2005/03/31/a-search-engine-that-thinks- almost/)

</comment><comment><USER34> I just realized why wearable like Google Glass was such a big deal for Google. We human brain is constantly feeding in data and rationalizing objects we see, things we do. We are supervised as we grow and we continue to rationalize things on our own terms.

With wearable, if you allow the eyes of machines to read the world with you, hear your conversation, with enough time, your machine should be capable of learning enough to become like you. With millions of people doing so, you essentially create an AI that is like human able to answer complex questions.

<comment><USER35> I feel like YouTube data should be enough for doing this.

<comment><USER34> The problem with YouTube data is that they are either very noisy and poor quality, or they are very short and meaningless. Surely having a GG on you can procedure similar result, but the idea is that the data is more consistent with how we grow up. We don't travel every day and the things we encounter every day are pretty consistent. Once you refine an AI that represents you, you can now take others' data and rationalize the data. I have never been to France but I kind of have an idea what Paris as a city may look like, the buses they have, how they are different from MTA here in NY.

</comment></comment></comment><comment><USER36> From the article:

 _" A deep-learning system can be trained to recognize particular species of birds, but it would need millions of sample images and wouldn't know anything about why a bird isn't able to fly."_

Deep-learning ≠ only image recognition

Of course if you train it only on images it will only know how a bird looks like, but if you train it on the properties of the birds and their ability to fly, then it will learn why a bird isn't able to fly.

</comment><comment><USER37> How weird that there isn't a single mention of SOAR in this article or the comments. [http://soar.eecs.umich.edu/](http://soar.eecs.umich.edu/) I guess fashion is a powerful thing!

</comment><comment><USER38> I have read far too much about some guy's groundbreaking new theory for AI in the past few decades.

Shut up and show us the code!</comment>


Hacking job interviews - <AUTHOR> http://mycareerstack.com/

<comment><USER2> > Sergey [Brin] nodded his agreement, then asked about my six months in > Siberia, casually switching to Russian to see how much I had picked up. > Finally, he leaned forward and fired his best shot, what he came to call > "the hard question". "I'm going to give you five minutes," he announced. > "When I come back, I want you to explain to me something complicated that I > don't already know. He then rolled out of the room toward the snack area.

I looked at Cindy. "He's curious about everything," she said. "You can talk about a hobby, something technical, whatever you want. Just make sure that it's something you understand very well"...

I went to the whiteboard and furiously drew circles and squares and unleashed arrows like Legolas. I was nervous, but not very. Sergey bounced on a ball and asked questions that required me to make things up on the spot...

Later I found out that Sergey did this with everyone he interviewed. An hour wasted with an unqualified candidate wasn't a total loss if he gained insight into something new.

From "I'm Feeling Lucky: The Confessions of Google Employee Number 59" by Douglas Edwards, page 11

<comment><USER3> Awesome! So much better than yet another "reverse this binary tree" non- question.

</comment></comment><comment><USER4> Personally I think that most of these questions are horrible and as somebody being interviewed, I'd be a little bit annoyed at a company trying to make me jump through hoops. I'm sure there are tons of developers that can sort arrays like there is no tomorrow, but sometimes I would like to work with people that can create software. People that write tests, are able to set up a sane build process, keep the clutter to a minimum and make nice APIs.

What I'm looking for in coders is passion. Ask people for their personal projects and let them talk about it! Ask for a Github account upfront and look at weather they commit fixes to other projects and show initiative, look at their personal toy projects, look at weather or not they're able to work with complete strangers and improve software just because they like doing it.

Some people might not have a Github account. But honestly, most of the people I like working with have one.

<comment><USER5> I've stopped a couple interviews mid-process when it became evident that the interviewer was going to focus on this sort of crap. Their shock is its own reward.

<comment><USER6> A bit overkill to leave a job opportunity you were interested in because of one interviewer's bad technique?

<comment><USER7> If it's a small company, it's very likely the interviewer's manner is a good reflection of the company culture.

<comment><USER8> That's incredibly not true.

You are offended when your job offer is contingent on how well you interview, not how well you do real work?

I am offended when a prospect declines a job offer or judged or culture based on how well I interview, not how well I do real work.

<comment><USER5> The interview process provides very little information to both parties about each other. Both of you have to make a decision on what you know. It is entirely possible that walking away from such an interview would, in retrospect, be a mistake.

However, it's a hot market. For every company that sucks at interviews, there's a company that's good at it. Why put up with it? Why waste hours?

Once upon a time, I was interviewing at two companies. The first, was a great interview..the seasoned and experienced found/CEO got me excited and interested and really made me feel that they were equally excited and interested in having me on board. They asked smart questions, they had obviously spent time reading my blog and looking at my public profile.

At the other company, it was painful...for both of us. I felt..like a chore that had to be done...going through a checklist of increasingly irrelevant questions. You could challenge the question, but the answer was "we want to see how you work through problems"....which is silly...are you so lazy that you can't come up with relevant questions that do that? Plenty of other people have.

My point is that, like everything else, some companies are clearly 10x better at interviewing/hiring than others. And, again like everything else, the shitty companies/interviewers have no clue how shitty they are.

Surely that might say something about the individuals and companies as a whole? So, again, why put up with it?

</comment></comment></comment></comment></comment></comment><comment><USER9> I can't believe how many people here are averse to the idea of demonstrating coding ability in an interview.

Github doesn't reflect the amount of time that somebody put into writing that code. It doesn't reflect how long it took for them to iron out bugs from a poor initial implementation.

My experience is that correctness AND speed both count when a person is developing software. I'm sure you guys have worked with people who are really sharp, can talk the talk, but just flail around helplessly in an IDE, constantly solicit help from their neighbors, and burn up milestones doing very little. I want to make sure that those people don't get hired.

I also want to know that these people are going to use idioms that aren't wasteful, that their naming conventions are sane, that they are being thoughtful and methodical about their implementation rather than grafting edge cases onto edge cases.

<comment><USER10> Github doesn't even reflect whether somebody actually wrote that code themselves or merely copied it and tweaked some identifiers. It's not that I want to be this suspicious, but I find I have to now that the salaries have attracted so many losers and con artists to the industry.

<comment><USER9> This too. It's much too easy to lift source from somewhere else, or hire somebody from India to write code on your behalf.

I generally don't trust anything that I can't verify firsthand. Stated experience gets a guy in the door for the interview, but their performance during the interview is all that matters to me.

</comment></comment></comment><comment><USER11> I need to register for an account just to see a question in full? You've already lost me.

<comment><AUTHOR> Questions are always displayed in full, whether you are logged in or not. There is a separate page for each question where you can comment, see the answer, etc. which requires login. But, you are right! We need to improve the UX ;)

<comment><USER11> These things jump out at me. I didn't actually leave the site in a huff. I noticed the /accounts/ URL structure on your login page, and if I'm not mistaken, you're building the site on django? I had a good poke around, and I really like what you're trying to achieve. I look forward to seeing the site evolve as you iron out the kinks.

<comment><AUTHOR> Thank you collypops! Just to let you know, this site is built in just 2 months with a team of 3 people, and launched just 3 days ago. So, i guess we have a lot of kinks to iron out and figure out the right direction ;)

</comment></comment></comment></comment><comment><USER12> Some time ago I was surprised that there isn't (or I couldn't find one) any site with recruitment questions based on Stack Overflow engine. Anyway, the best one I found was <http://www.careercup.com/page> with a lots of questions from various companies.

<comment><USER13> Full disclosure: I'm a CareerCup interviewer.

+1. CareerCup is run with a lot of love by Gayle, who really cares about providing the right content and advice.

</comment></comment><comment><USER14> Random browsing of questions led to this one: <http://mycareerstack.com/question/120/>

...where the following advice is given: "But your strategy while answering this question should not be directly this answer. Generally in the interview you should start with the worst answer and then improve upon it.

If you directly give this answer then the interviewer would know that you had done this question before and may not give credit to you for the answer."

Hmm....

Sound advice, but there's something morally off, IMO.

Do you hate the player or the game, I wonder? Or the online site that helps the player play the game?

As others have commented, interviewing is broken.

<comment><USER15> In my opinion answering like that gives interviewer idea that u have thorough knowledge and know all the solutions in the incremental level of improvement (complexity and space usage etc).

</comment></comment><comment><USER16> The grammar alone on this site is just dreadful, who the heck says "Codes"? And then career v. careers in the same slogan two different places. If I saw this on a resume, it would be placed straight into the circular file.

<comment><AUTHOR> More often than not, very basic things get over someone when he/she is writing a lot of backend and frontend code in a team of 3 people for just 2 months. Btw, thanks for bringing this to attention :) Will try to look for all such errors and remove them asap! Thanks ;)

<comment><USER8> Nice job taking criticism in good spirits, responding to insults with charm, and working to improve.

</comment></comment></comment><comment><USER15> what i feel personally is that many companies nowadays are asking these type of questions and this site has covered many topics well and is moderated. But this can be further improved by increasing user interaction.

<comment><USER17> What do you mean when you said "increasing user interaction" ?

Which features do you think are lacking in the site at the moment.. ?

<comment><USER15> i would love to see more number of users actively discussing challenging problems and the online compiler can be presented in a more intelligent way.

<comment><USER9> I, too, would love to see a list of questions that I should avoid asking in interviews. :)

</comment></comment></comment></comment><comment><USER18> Its a good thing I stopped working for other people, because I feel sorry for anyone who tries to interview me with these prejudiced questions:

Q: What's your github id?

A: Tell you what, tell me yours and I'll criticize your project and language choices. I'm sure I can find multiple reasons to conclude you're incompetent. Oh, look at this, every language you've checked code in is a scripting language. Do you realize you're not even really a programmer?[0]

Google: "There are N houses in a row. Each house can be painted in either Red, Green or Blue color. The cost of coloring each house in each of the colors is different. Find the color of each house such that no two adjacent house have the same color and the total cost of coloring all the houses is minimum."[1]

Answer: "Explain to me the mechanism by which YB2C3O is superconducting, including the role that electron spin plays in the theory. Describe the meissner effect. Posit a theoretical superconducting compound that would exhibit a more consistent meissner effect.[2]

I'm sure its not obvious but the error that both these questions make is that they presume the interviewers worldview, or put another way, they are extremely narrow-minded. Neither of them actually tests whether you'd be good at the job, but instead tests whether your worldview is similar to the interviewers.

The first one presumes that open source is a sign of being a good programmer. This is a complete nonsequitor. While I'm working on an open source project right now, my github account is empty because in my 20 year career, all my contributions to open source projects were prior to github. There are programmers who actually write code at work and then spend their hobby time doing other things. For me it was building robots, and while I did write some interesting code for that, it wasn't really appropriate to open source (too specific to the hardware) and the very idea that I should have open sourced it is a bigoted one. You could just as easily claim that a very active github account is evidence that the employee was slacking off on the last job, working on projects unrelated to what the company was doing (assuming of course they weren't hired to do open source.)

The brain teaser is exactly the same thing. It isn't testing whether the candidate can solve problems, its testing whether the candidate is good at brain teasers. These are very different skills.

Two much better questions:

1\. Tell me about something you've done that was difficult, challenging, or highly technical, outside of work, as a hobby or as a personal project.

2\. [Google] As you know, Google is a search engine. We spider the web continuously. That produces a lot of data, of course. Give me a high level overview of how you'd architect one component of that process- any component will due, spiders, or analyzers, or the overall workflow.

In both of these cases there are many followup questions. For the first question, you ask them details about their side project, with an eye to learning as much about the project as you can yourself. What this teaches you is whether they can communicate ideas or technology well. And of course, with passion. For the second question you can drill down, using real world examples of issues a search engine has run into, to see how they would resolve them. You should (probably MUST) also give them some of the solutions that you've come up with as part of solving these problems, to get them thinking with enough context to discuss it. The main thing you're looking for here is the ability to generate ideas, even if they are stupid.

In both of these examples you're turning the interview from a confrontational situation where some half assed programmer sits in judgement of the candidate to one where both parties engage in a dialog. In both examples, you've got some opportunity to reveal info about the company, in the hopes of attracting the candidate to want to work there.

I've been on enough interviews that I recognized, in retrospect, were simply exercises in stroking the interviewers ego to know this happens far too often.[3] You may be interviewing for a job they wanted, for instance. Or their friend might also be interviewing. Or they may just be a jerk and insecure and looking for the ego boost.

Or maybe they are sincere but they simply don't know enough about the world to know that people's minds are organized differently... brain teasers are vastly easier for some people than for others, and there's no correlation with productivity as an engineer. Same thing with interest or activity in open source.

[0] I'm not actually bigoted against programers who use scripting languages, but the interest in github is founded on the prejudice that interest in open source means you're a good programmer.

[1] <http://mycareerstack.com/accounts/login/?next=/question/323/>

[2] anyone with a college degree should be able to answer this, as well as anybody under pressure tries to work out the colored houses question. I'd give them more context and clues than typically are given in these brainteaser situations.

[3] In fact, I'd say its the case the majority of the time. Though it varies widely by company. Generally, if one person who interviews you at a company is doing this, most of them will be as well, not sure why that is.

<comment><USER19> My employer (not posting the name since I don't care to be directly googleable) de facto forbids open source work. In order to share essentially any code we're supposed to pre-clear it with our internal "open source council" by filing a jira ticket and asking permission. Each time, every time. They meet monthly, so you potentially wait up to 30 days. Of course the company realizes they only own our work that is directly related to our employment or that is done with company property. On the other hand, they have two in house attorneys, one of whom was a partner at a very high end law firm. So in practical terms, in any legal pissing match I'd lose, no matter the merits of the case, since I can't afford my own $600/hour IP attorney.

Which is a long way of explaining that many people have very high barriers to sharing code. So the only code I really have to share is written for my employer, and I obviously won't be sharing that. I think that having shared code on github is a poor estimator for quality of an employee.

<comment><USER20> It's a misconception that every employer who asks for a Github ID as part of a job application process is looking to use it as a way to screen applicants. For us, it's just a shortcut to see whether someone can code. If they don't have a Github (or bitbucket, or technical blog, or whatever else is Googleable or that a candidate wants to provide us), it just means that I have to spend extra time during the phone screen or in-person interview on their coding abilities.</comment></comment></comment>