Skip to content

Instantly share code, notes, and snippets.

View bcambel's full-sized avatar
🌴
On vacation

Bahadir Cambel bcambel

🌴
On vacation
View GitHub Profile
(defn primes [max]
(let [enqueue (fn [sieve n factor]
(let [m (+ n factor)]
(assoc sieve m
(conj (sieve m) factor))))
next-sieve (fn [sieve candidate]
(if-let [factors (sieve candidate)]
(reduce #(enqueue %1 candidate %2)
(dissoc sieve candidate)
factors)
@bcambel
bcambel / delete_redis_keys.py
Created November 27, 2014 12:55
Delete redis keys with the given pattern
import redis
import sys
r = redis.StrictRedis('localhost',6379)
def delete(pattern='kpn*'):
print [r.delete(k) for k in r.keys(pattern)]
if __name__ == "__main__":
pattern = sys.argv[1] if len(sys.argv)>1 else "kpn*"

Clojure does Objects Better

A hopefully short and concise explanation as to how Clojure deals with Objects. If you already write Clojure, this isn't for you.

You know what an Interface is if you write/read Java or PHP 5+. In Clojure it might be called defprotocol.

user> (defprotocol IABC
        (also-oo [this])
        (another-fn [this x]))

IABC

@bcambel
bcambel / delete_keys.py
Created December 14, 2014 18:57
Delete REDIS keys by a given pattern
import redis
import sys
r = redis.StrictRedis('localhost',6379)
def delete(pattern='a*'):
print [r.delete(k) for k in r.keys(pattern)]
if __name__ == "__main__":
pattern = sys.argv[1] if len(sys.argv)>1 else "a*"
  • user signs up with email and password:

    • if the email exists, validation error.
    • if the email is linked to a facebook account, they'll see the "merge?" box when they try to link later
    • if the email doesn't exist, create the account!
      • Username is auto-generated
      • we send a welcome! email
      • we send a verification email
  • user decides to link a Facebook account:

  • when the user clicks on the "Link Facebook" link in profile, login with javascript SDK

@bcambel
bcambel / install.sh
Last active October 26, 2015 22:04 — forked from wdullaer/install.sh
# Add Docker PPA and install latest version
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
sudo apt-get update
sudo apt-get install lxc-docker -y
# Install fig
sudo sh -c "curl -L https://github.com/docker/fig/releases/download/1.0.0/fig-`uname -s`-`uname -m` > /usr/local/bin/fig"
sudo chmod +x /usr/local/bin/fig
@bcambel
bcambel / errors.clj
Last active August 29, 2015 14:11 — forked from adambard/errors.clj
(ns example.errors)
(defn clean-address [params]
"Ensure (params :address) is present"
(if (empty? (params :address))
[nil "Please enter your address"]
[params nil]))
(defn clean-email [params]
"Ensure (params :email) matches *@*.*"
@bcambel
bcambel / cassandra.sh
Created December 17, 2014 22:42
Install Cassanda on ubuntu
sudo apt-get install openjdk-7-jre -y
echo "deb http://debian.datastax.com/community stable main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
curl -L http://debian.datastax.com/debian/repo_key | sudo apt-key add -
sudo apt-get install dsc21 -y --force-yes
sudo service cassandra status
@bcambel
bcambel / git_cheat.txt
Created December 18, 2014 14:20
Git Cheat sheet
Setup
-----
git clone <repo>
clone the repository specified by <repo>; this is similar to "checkout" in
some other version control systems such as Subversion and CVS
Add colors to your ~/.gitconfig file:
[color]
<div class="navbar navbar-default">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Brand</a>
</div>
<div class="navbar-collapse collapse navbar-responsive-collapse">