Skip to content

Instantly share code, notes, and snippets.

@orendon
orendon / xmerl_demo.ex
Last active August 29, 2015 14:25 — forked from sasa1977/xmerl_demo.ex
Simple xmerl usage demo in Elixir
defmodule XmlNode do
require Record
Record.defrecord :xmlAttribute, Record.extract(:xmlAttribute, from_lib: "xmerl/include/xmerl.hrl")
Record.defrecord :xmlText, Record.extract(:xmlText, from_lib: "xmerl/include/xmerl.hrl")
def from_string(xml_string, options \\ [quiet: true]) do
{doc, []} =
xml_string
|> :binary.bin_to_list
|> :xmerl_scan.string(options)
@orendon
orendon / chain.exs
Last active August 29, 2015 14:25 — forked from henrik/chain.exs
defmodule Chain do
defmacro chain(ex) do
parse(ex)
end
defp parse({:., _, [first_arg, function_name]}, more_args) do
args = [first_arg|more_args] |> Enum.map(&parse/1)
apply(String, function_name, args)
end
@orendon
orendon / README.md
Last active August 29, 2015 14:24 — forked from joakimk/README.md

This runs a build for a small elixir (phoenix) project in about 40 seconds by caching as much of the compiled files as possible.

We've been using this for months in multiple projects without any issues. Please ping be if there is any issues with this script and I'll update it.

It should be generic enough to work on any elixir app using mix.

If you have a elixir_buildpack.config, then enable that section in the build script to keep versions in sync!

defmodule MyBlog.Repo.Migrations.CreatePost do
use Ecto.Migration
def up do
# This should go in a separate migration if you're using UUIDs across your app
execute "CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\""
create table(:posts, primary_key: false) do
add :id, :uuid, primary_key: true, default: fragment("uuid_generate_v1()")
add :body, :string
@orendon
orendon / active.md
Last active August 29, 2015 14:23 — forked from paulmillr/active.md

Most active GitHub users (git.io/top)

The count of contributions (summary of Pull Requests, opened issues and commits) to public repos at GitHub.com from Thu, 03 Apr 2014 02:35:55 GMT till Fri, 03 Apr 2015 02:35:55 GMT.

Only first 1000 GitHub users according to the count of followers are taken. This is because of limitations of GitHub search. Sorting algo in pseudocode:

githubUsers
 .filter((user) -> user.followers > 386)
defmodule RequiredFields do
defmacro __using__(_opts) do
quote do
def new(attributes) do
Map.merge(%__MODULE__{}, attributes)
|> validate
end
def validate(struct) do
missing = missing_attributes(struct)
defmodule Metasploit.Pro.Plugs.Authenticate do
import Ecto.Query, only: [from: 2]
import Plug.Conn
def init(configuration) do
configuration
|> Keyword.put_new(:single_access_token_parm, "single_access_token")
|> valid_configuration!
end

Don Julián!

Me quedé sorprendido por las respuestas que le dieron a su pregunta de cómo enseñarle a nuevos devs a modelar un sistema.

Me horrorizó ver respuestas que hablaban que DDDesign es demasiado, o que FP y DDDesign no van; o peor aún, que sospechan que ágil y DDDesign no pueden ir juntas.

Hace unos años escribí sobre el concepto de la simpatía semántica, un copy/paste de la Simpatía Mecánica de Thompson. Considero que ese debería ser ppal mensaje que me hubiera gustado que me enseñaran cuando arranqué a trabajar "profesionalmente".

Si ese concepto es claro, no debería importar si ud usa UML o no, si usa cajitas y rayitas para definir mapas semánticos o lo que quiera. Parafraseando a Fowler, lo importante de UML es comunicar. En este caso, comunicar la abstracción del mundo real que luego convertirá en código fuente.

Hola!

Hace más de dos años venimos trabajando en diferentes tipos de proyectos haciendo uso de Akka/JVM/Scala. A la fecha hemos entregado exitosamente 14 proyectos de tamaño medio a grande, pasando por webapps, automatizaciones de procesos de laga duración, sistemas de autenticación y autorización, service registries, aplicaciones core de negocio, entre otros ejemplos.

En la mayoría de ellos hemos tenido que resolver problemas a través de la construcción de patrones para sistemas distribuidos: convergencia de estado a través de CvRDT, quórum a través de RAFT (hecho en casa), jitter y exponential backoff en el consumo de servicios, implementación de sagas para soportar transacciones de larga duración o no tan simples esquemas de recuperación ante catástrofes sobre distintos IaaS.

Lo que quiero tratar de decir con esta introducción es que calcular pi, o cualquier otro problema algorítmico es lo menos común de los problemas en los que hemos elegido Akka para resolverlos. De hecho, en las pruebas que hicimos d