HNHacker News
TopNewBestAskShowJobs

cammsaul

194 karma · joined October 30, 2012

Chief Architect @ Metabase http://www.metabase.com/

Clojure, C++, Objective-C, JavaScript, Perl, Emacs Lisp, Python, Assembly

submissionscomments
cammsaul··on Getting 50k Companies on Board with Clojure
Great talk
cammsaul··on Clojure Turns 15 panel discussion video
Hi, Toucan library author here.

+1 on avoiding side effects from business logic. This applies not just to Toucan, but to database code in general. Toucan is there to give you a way to define behaviors when interacting with your application database, for example transforming certain columns when you fetch rows from a certain table from the database. It's that plus utility functions for interacting with your database. Not really an ORM.

Either way, Toucan 2 is out now: https://github.com/camsaul/toucan2 I'm still working on fully documenting it but it's already being used in the wild and Toucan 1 will probably be archived soon

cammsaul··on Metabase, an open source business analytics startup, closes $8M Series A by NEA
Excited to see this. I love Metabase and use it every day.
cammsaul··on Show HN: Chrome extension to put GitHub's header back to the way it was
Don't rain on GitHub's parade, this was their big feature of Q1 2017
cammsaul··on Toucan: high-level Clojure library for defining application models and DB access
This library started out as DB and model layer utility functions for Metabase (https://github.com/metabase/metabase), and after a couple years of improving them we think they might be useful to others too, so we've spun them out into a separate library :)
cammsaul··on Toucan, a high-level Clojure lib for defining models and working with your DB
Based on the model and DB utility functions developed while working on Metabase (https://github.com/metabase/metabase/).
cammsaul··on You don't need (db) transactions
This article was just an April Fool's, relax :)
cammsaul··on Changes to Npm's unpublish policy
Switch to jQuery?
cammsaul··on I've Just Liberated My Modules
There's a PR open to remove "unpublish" from NPM here:

https://github.com/npm/npm/pull/12017

cammsaul··on I've Just Liberated My Modules
Update: NPM takes "unprecidented action [...] given the severity and widespread nature of the breakage" and un-un-publishes left-pad

https://twitter.com/seldo/status/712414400808755200

cammsaul··on Programming on Parallel Machines: GPU, Multicore, Clusters and More
I took this class IRL with Matloff when I was an undergrad. Highly recommended, great course from a great professor <3
cammsaul··on Mimic – abusing Unicode to create tragedy
The repo's README mentions a vim plugin to highlight Unicode homoglyphs. As an Emacs user, I did a quick M-x package-list-packages, thinking I'll find at least half a dozen equivalent Emacs packages.

To my dismay, there were none. So I spent the rest of my afternoon correcting this glaring deficiency. Fellow Emacs users, protect yourself from Unicode trolls and grab it here: https://github.com/camsaul/emacs-unicode-troll-stopper

cammsaul··on Show HN: Metabase, an open-source business intelligence tool
This is so cool! Written in Clojure! WOW!

Any idea on the timeline for SQL Server support ?

cammsaul··on A critical Windows component expires in 25 hours
So the Untrusted CTL has an expiration of 25 hours. Your screenshot says "Did you know? ... the Untrusted CTL is updated once per day". Doesn't that explain it?
cammsaul··on The Future of Emacs, Guile, and Emacs Lisp
I find http://hyperpolyglot.org/lisp to be extremely useful for cases when I know what I want to do but don't remember how to do it in Elisp.
cammsaul··on Ask HN: How do I learn C and C++ when I love high-level languages?
You could try doing a cross-platform (iOS/Android) game with a C++ framework like Cocos2d-x. I read through Cocos2d-x By Example (http://www.amazon.com/Cocos2d-X-Example-Beginners-Guide-Enge...) last year and it was pretty good. Didn't assume a prior knowledge of C++
cammsaul··on Ask HN: How do I learn C and C++ when I love high-level languages?
+1 on A Tour of C++. ~200 pages that do a fantastic job of introducing the language.
cammsaul··on What Are Your GCC Flags?
Most of these are clang specific but I tend to do something like

-pipe

-std=c++11

-gfull # generate correct debugging symbols for dead code stripping

-stdlib=libc++

-Ofast # fast, aggressive optimizations (clang-specific)

-fvectorize # enable loop autovectorizer

-fdiagnostics-show-template-tree (clang: print C++ template error as a tree instead of on a single line)

-Weverything # clang specific: enable every single warning

-Werror

-Wfatal-errors # die after the first error encountered

-Wno-c++98-compat

-Wno-c++98-compat-pedantic

-Wno-global-constructors

-Wno-exit-time-destructors

-ffast-math # enable some floating point optimizations that break IEEE754 compliance but usually work

-funroll-loops # enable loop unrolling

-fstrict-aliasing # make more aggressive assumptions about whether pointers can point to the same objects

-fatal_warnings # treat linker warnings as fatal

-flto # enable link-time optimization

-dead_strip # enable dead code stripping

-Wno-error=deprecated # like being able to put __attribute((deprecated)) in code as a note to self

-Wno-error=#warnings # same thing goes for #warnings

cammsaul··on What Are Your GCC Flags?
clang has -Weverything, I prefer to start with that and do #pragma clang diagnostic push/ignored/pop as needed and only turn off the really obnoxious ones, like -W-c++98-compat-pedantic
cammsaul··on Garbage Collection is Wrong
Worth a mention: In Objective-C with ARC, the compiler treats every pointer to an Obj-C object as a std::shared_ptr or std::unique_ptr (static analysis is used to optimize out unnecessary reference counting), unless it's marked otherwise with keywords such as __weak, __unsafe_unretained, etc.