by Ossi Hanhinen, @ohanhi
with the support of Futurice 💚.
Licensed under CC BY 4.0.
#!/usr/bin/env elixir | |
defmodule Committer do | |
defstruct [:name, :email] | |
def list(repo) do | |
repo | |
|> from_repo | |
|> Stream.unfold(fn str -> | |
case String.split(str, "\n", parts: 2, trim: true) do |
defmodule Expng do | |
defstruct [:width, :height, :bit_depth, :color_type, :compression, :filter, :interlace, :chunks] | |
def png_parse(<< | |
0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, | |
_length :: size(32), | |
"IHDR", | |
width :: size(32), | |
height :: size(32), |
defmodule Blog.Repo.Migrations.CreatePost do | |
use Ecto.Migration | |
def up do | |
create table(:posts, primary_key: false) do | |
add :id, :uuid, primary_key: true | |
add :title, :string | |
add :body, :text |
I've taken the benchmarks from Matthew Rothenberg's phoenix-showdown, updated Phoenix to 0.13.1 and ran the tests on the most powerful machines available at Rackspace.
Framework | Throughput (req/s) | Latency (ms) | Consistency (σ ms) |
---|
# Parallel Checkout | |
# -------------------------------------------------------------- | |
# Example of performance gained by using a parallel checkout in an e-commerce store, | |
# | |
# to run 500 checkouts in series: time elixir checkout.exs 500 serial | |
# to run 500 checkouts in parallel: time elixir checkout.exs 500 parallel | |
# | |
# Typical E-commerce checkout flow uses a bunch of network bound tasks, that are generally | |
# computed synchronously. This wastes time and requires larger server clusters to handle peak times | |
# |
I fell in love with CoffeeScript a couple of years ago. Javascript has always seemed something of an interesting curiosity to me and I was happy to see the meteoric rise of Node.js, but coming from a background of Python I really preferred a cleaner syntax.
In any fast moving community it is inevitable that things will change, and so today we see a big shift toward ES6, the new version of Javascript. It incorporates a handful of the nicer features from CoffeeScript and is usable today through tools like Babel. Here are some of my thoughts and issues on moving away from CoffeeScript in favor of ES6.
While reading I suggest keeping open a tab to Babel's learning ES6 page. The examples there are great.
Holy punctuation, Batman! Say goodbye to your whitespace and hello to parenthesis, curly braces, and semicolons again. Even with the advanced ES6 syntax you'll find yourself writing a lot more punctuatio
This afternoon I encountered a race condition in an Angular app I'm working on. Essentially my controller was pushing some values to an Array on its scope and something (I wasn't sure what) was asynchronously overriding the Array's contents. The Array was being used by a custom directive- written by someone else- as well as an ngModel
and it wasn't clear who was making the change.
I ended up trying something I had not done before and it worked well enough that I thought I'd post it here in case it helped anyone else.
First I enabled The "Async" option in Chrome's "Sources > Call Stack" panel.
Next I set a breakpoint in my controller where I was modifying the Array. When I hit that breakpoint, I ran the following code in my console:
Object.observe(this.theArray, function(changes) {
I had a client who I built a site for (ecommerce) that had a lot of high resolution images. (running about 500gb/mo). Cloudinary charges $500/mo for this usage and Amazon charges about $40. I wrote some middleware that I used to wrap my cloudinary urls with in order to enable caching. This is entirely transparent and still enables you to use all the cool cloudinary effect and resizing functions. Hopefully this is useful to someone!
I think using deasync()
here is janky but I couldn't think of another way to do it that allowed for quite as easy a fix.
'use strict'; | |
/** APPLICANT INFO *********************************************************** | |
------------------------------------------------------------------------------ | |
* Name: Alex Hawkins | |
* Email: [email protected] | |
* GitHub: github.com/alexhawkins | |
* LinkedIn: linkedin.com/in/alexhawkinsme/ | |
****************************************************************************/ | |