Skip to content

Instantly share code, notes, and snippets.

View vemv's full-sized avatar
🧑‍💻
Sprinting

vemv vemv

🧑‍💻
Sprinting
View GitHub Profile
anonymous
anonymous / array.length.md
Created January 3, 2013 22:43
Qué pasa con array,length en Javascript que me estoy volviendo loco

Sea:

var a = [];

Dice la especificación de Javascript que los Arrays son simplemente unos objetos un poco curiosos y más o menos simpáticos. Tienen una propiedad especial llamada length y si le intentamos añadir una propiedad con un nombre que sea un número válido (uint32) entonces lo consideran un "índice" y tratan ese valor como un elemento de un array/vector/llámaloX que mantiene internamente.

La propiedad length es especial porque se actualiza más allá de nuestro control cuando ocurren algunas cosas. En concreto lo que dice la especificación es son las siguientes 2 cosas: Cada vez que se añada al array un elemento, es decir, cito (énfasis mío): "una propiedad cuyo nombre es un índice válido de array, si es necesario, length se actualizará a ser 1 más que ese índice". Además, cuando se modifique length, para mantener la restricción, "cualquier propiedad cuyo nombre es un índice válido que no es menor que el nuevo length, se borra automáticamente".

(get-in {:k :v} [:k]) ;; => :v
(update-in {:k :v} [:k] (constantly :x)) ;; => {:k :x}
(get-in {:k :v} []) ;; => {:k :v}
(update-in {:k :v} [] (constantly {:k :x})) ;; => {nil {:k :x}, :k :v}
(require 'clojure.pprint 'clojure.set)
(def clojuresphere-top "http://www.clojuresphere.com/api/projects?limit=500&sort=dependents&output=clojure")
(defn exec
[& shell-tokens]
(.. Runtime getRuntime (exec (into-array String shell-tokens)) waitFor))
(defn namespace-usage
[git-path clone-path namespaces]
@mtnygard
mtnygard / query.clj
Created February 8, 2013 22:19
Use Datomic queries as a source for RxJava pipes.
(ns rxjava-datomic.query
(:require [datomic.api :as d])
(:use [clojure.repl :only [pst]])
(:import [rx Observable]
datomic.Peer))
(defn query [qry & inputs]
(Observable/toObservable
(Peer/q qry (object-array inputs))))
@ejackson
ejackson / gist:5203517
Last active March 14, 2020 08:09
Non-fiction, Non-textbook stories on How the West was Won, and where it got us
-----------= Tales of Yore =-----------
* Hackers: Heroes of the Computer Revolution
(http://www.amazon.co.uk/Hackers-Heroes-Computer-Revolution-Anniversary/dp/1449388396)
* The soul of a new machine
(http://www.amazon.co.uk/Soul-New-Machine-Tracy-Kidder/dp/0140062491/ref=sr_1_2?s=books&ie=UTF8&qid=1363772696&sr=1-2)
* The brainmakers
(http://www.amazon.co.uk/Brainmakers-Scientists-Moving-Beyond-Computers/dp/067151055X/ref=sr_1_1?s=books&ie=UTF8&qid=1363772724&sr=1-1)
@jneira
jneira / Dyn.groovy
Last active December 16, 2015 11:29
def list=[1,"nan",new Whatever()] // neat!
def nan="nan"
def one=1
one+nan
"1nan"
one-nan
// No signature of method: java.lang.Integer.minus() is applicable for argument types: (java.lang.String)
Object nan2="nan2"
Object two=2
@rodnaph
rodnaph / gist:5694439
Last active December 18, 2015 00:09
Datomic attribute schema fn with sane defaults.
(ns foo.schema
(:require [datomic.api :refer [tempid]]))
;; Datomic schema is wordy, so apply some sane defaults and allow overriding where needed.
(defn- attribute [ident & options]
(let [defaults {:db/id (tempid :db.part/db)
:db/ident ident
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
@jneira
jneira / prior.clj
Last active December 18, 2015 07:18
tenemos una lista ordenada (por :priority) de objetos. debe poder accederse por índice (lo que al menos en clj, descarta la posibilidad de usar un set).
puede haber múltiples objetos con el mismo valor :priority.
[{:priority 1} {:priority 1} {:priority 3} {:priority 3} {:priority 3} {:priority 5} {:priority 5} {:priority 8} {:priority 8} {:priority 8}]
en mi dominio, cada objeto tiene más claves aparte de :priority, pero son irrelevantes en este problema.
lo que deseamos es un método que nos dé el índice de acceso de un elemento al azar, un azar influido por las prioridades.
digamos que dos objetos con la misma :priority tienen elegibilidad equiprobable,
(ns async-test.core
(:require [cljs.core.async :refer [chan]]
[clojure.string :as string])
(:require-macros
[cljs.core.async.macros :as m :refer [go alt! alts!]]))
(def c (chan))
(def loc-div (.getElementById js/document "location"))
(.addEventListener js/window "mousemove"
@michalmarczyk
michalmarczyk / producer_consumer.clj
Created July 12, 2013 01:25
Single consumer, multiple producers in core.async
(use 'clojure.core.async)
(def output (atom []))
(defn producer [ctrl k]
(go (loop [i 0]
(when-let [c (<! ctrl)]
(>! c [k i])
(>! ctrl c)
(recur (inc i))))))