Skip to content

Instantly share code, notes, and snippets.

View slashdotdash's full-sized avatar

Ben Smith slashdotdash

View GitHub Profile

Microservices presentation

Autonomous Microservices don't share data. Period.

The demo used in the presentation can be found on GitHub in the SOA Done Right workshop repository. The code used was from exercise 02, the after folder.
To be able to compose a user interface, there are several frameworks available. To be able to see how to compose data together into a viewmodel that can be offered to ASP.NET MVC (WebAPI) see the demo in the same repository.


If you're interested in the free ADSD videos:

@tmbb
tmbb / release.exs
Created December 2, 2018 15:10
A script to automatie releases of elixir packages.
defmodule Releaser.VersionUtils do
@doc """
Some utilities to get and set version numbers in the `mix.exs` file
and to programatically transform version numbers.
Maybe the `bump_*` functions should be in the standard library?
This script doesn't support pre-release versions or versions with build information.
"""
@version_line_regex ~r/(\n\s*@version\s+")([^\n]+)("\n)/
@chrismccord
chrismccord / phx-1.4-upgrade.md
Last active October 14, 2024 09:32
Phoenix 1.3.x to 1.4.0 Upgrade Guides

Phoenix 1.4 ships with exciting new features, most notably with HTTP2 support, improved development experience with faster compile times, new error pages, and local SSL certificate generation. Additionally, our channel layer internals receiveced an overhaul, provided better structure and extensibility. We also shipped a new and improved Presence javascript API, as well as Elixir formatter integration for our routing and test DSLs.

This release requires few user-facing changes and should be a fast upgrade for those on Phoenix 1.3.x.

Install the new phx.new project generator

The mix phx.new archive can now be installed via hex, for a simpler, versioned installation experience.

To grab the new archive, simply run:

defmodule Raven.Util.Transaction do
use GenServer, restart: :temporary
@moduledoc """
Claim a given transaction handle
Blocks if other callers have already claimed the handle. This will return with
`:ok` if the current process wins the claim, otherwise it will return `:already_taken`
### Example Usage
@adymitruk
adymitruk / trello-cqrs-es.fish
Last active October 23, 2023 20:19
Trello in CQRS/ES in fish shell
#set up the dir structure if it doesn't exist
set t ~/.trello; mkdir -p $t
function if_exist # we don't want to litter our code with ifs if a read model or events are not there yet. Return /dev/nul for empty
if test -e $t/$argv[1]; echo $t/$argv[1]; else; echo /dev/null; end
end
function list # provide lists from our tab delimited entries with filtering and line item numbers to make choices
set list $argv[1]; set column_to_show $argv[2]; set filter $argv[3]; set count 1
cat (if_exist $list) | grep -e "$filter\$" | while read line
set -l line_items (string split \t $line)
echo $count\) $line_items[$column_to_show]
@BenWoodford
BenWoodford / LeafAPI.md
Last active July 8, 2025 04:54
New Nissan Connect EV API

Late 2018 Update

I am no longer working on this as the new API is US-only as I'm in the UK, so cannot even use it or the new app. Please don't ask me questions about it as I honestly can't remember anything.

Nissan Connect EV 2018 API

This is a work in progress, just jotting down my findings from the APK decompile so far. As I can only read the decompiled Java and not MITM the app due it not working in the UK, getting the payload info may take a while. There's loads of API calls so this may not be thorough for a while.

Base URL: https://icm.infinitiusa.com/NissanLeafProd/rest

defmodule Hyr.Command do
@moduledoc """
Define a command struct and an associated GraphQL mutation.
## Example
defmodule Hyr.Shifts.Opening.Commands.CancelOpeningEmployer do
use Hyr.Command
alias Hyr.Shifts.Opening.Schema.Opening
@timvisee
timvisee / falsehoods-programming-time-list.md
Last active October 13, 2025 00:16
Falsehoods programmers believe about time, in a single list

Falsehoods programmers believe about time

This is a compiled list of falsehoods programmers tend to believe about working with time.

Don't re-invent a date time library yourself. If you think you understand everything about time, you're probably doing it wrong.

Falsehoods

  • There are always 24 hours in a day.
  • February is always 28 days long.
  • Any 24-hour period will always begin and end in the same day (or week, or month).
@christhekeele
christhekeele / default_behaviour.ex
Last active March 4, 2025 17:41
Behaviours with Defaults for Elixir
defmodule Default.Behaviour do
@moduledoc """
Creates a behaviour that carries its own default implementation.
When used into a behaviour module, when that module in turn is used, all functions
defined on it are given to the using module.
This allows you to have concrete implementations of the behaviour's default functionality
for testing, unlike cramming them all into a __using__ macro.
@evancz
evancz / data-interchange.md
Last active July 16, 2025 00:25
Why do I have to write JSON decoders in Elm?

A vision for data interchange in Elm

How do you send information between clients and servers? What format should that information be in? What happens when the server changes the format, but the client has not been updated yet? What happens when the server changes the format, but the database cannot be updated?

These are difficult questions. It is not just about picking a format, but rather picking a format that can evolve as your application evolves.

Literature Review

By now there are many approaches to communicating between client and server. These approaches tend to be known within specific companies and language communities, but the techniques do not cross borders. I will outline JSON, ProtoBuf, and GraphQL here so we can learn from them all.