Skip to content

Instantly share code, notes, and snippets.

$ traceroute host-1.codabox.com
traceroute to host-1.codabox.com (77.73.100.231), 30 hops max, 60 byte packets
 1  * * *
 2  gra-g1-a9.fr.eu (178.33.103.225)  0.806 ms  0.812 ms  0.805 ms
 3  gsw-1-a9.fr.eu (94.23.122.85)  4.473 ms  4.479 ms  4.492 ms
 4  * * *
 5  te0-11-0-29.ccr42.par01.atlas.cogentco.com (154.54.61.221)  5.543 ms te0-1-0-14.ccr41.par01.atlas.cogentco.com (130.117.1.205)  5.684 ms  5.732 ms
 6  be2044.agr21.par01.atlas.cogentco.com (130.117.51.78)  6.243 ms be2140.agr21.par01.atlas.cogentco.com (130.117.51.82)  5.294 ms  5.497 ms
 7 be2137.rcr21.bru01.atlas.cogentco.com (154.54.38.70) 11.582 ms 11.343 ms 11.407 ms
@noteed
noteed / docker-reesd.md
Last active August 29, 2015 13:56
How I use Docker for Reesd

How I use Docker for Reesd

Docker is all the rage these days. I started to look at Docker seriously maybe around April last year. It has gained a lot of momentum and I think it's just the beginning. For instance new tools and services are created regularly, or Docker, inc. has not yet unveiled their exact commercial offering (and I think they have a very rich view about what it is possible to achieve with Docker).

When I started to build Reesd, I have directly used Docker. Even if it is not production-ready, or even if there is some risk that it might evolve

@noteed
noteed / reesd-images.md
Last active August 29, 2015 14:01
Reesd Images

Reesd Images

Reesd Images is a hosted private Docker registry. It is currently in alpha.

Getting started

Reesd Images is running at images.reesd.com and can used with the docker executable.

The first time you upload an image, you will be prompted for a username, a password, and an email address. You can also log into the registry prior to upload with docker login.

@noteed
noteed / horde-types-migartion.hs
Created July 31, 2014 21:43
Migrating horde types
-- | Horde data types. These data types are serializable using the `safecopy`
-- package. Serialization/deserialization should be done with the `safeEncode`
-- and `safeDecode` functions.
--
-- Using `safecopy`, we can change these data types and migrate already
-- serialized data structures. To do so, we change the
-- `deriveSafeCopy 1 'extension` (and
-- `deriveSafeCopy 0 'base`) to `deriveSafeCopy 2 'extension` (and to
-- `deriveSafeCopy 1 'extension`) and provide migrations.
--
@noteed
noteed / self.md
Created August 20, 2014 10:12
Self

Self

You want to make money with a SaaS business. But you need an idea. Well, you don't.

You want to make a lot of money, so you'd better prepare for it. For instance, be ready to accept payments, and store and deliver invoices. But you want to really make a lot of money, right ? So you develop a scalable application to deal with that load of payments and invoices. And since a lot of other businesses have the same needs, you offer your application with a subscription model.

You now have a SaaS and you can continue to offer services that you need yourself. Accepting payments and invoicing was just the beginning. You need backups, so you offer a backup service. You need monitoring, and a status page. You need to send email, you need to deploy updates, you need to host your source code, ... you have a lot of needs, so you can offer a lot.

To start, you identify one of those needs, and you offer a solution, to yourself and also to others.

@noteed
noteed / aligned-values.md
Last active August 29, 2015 14:06
Thoughts on aligning values

Business and customers values

The different ways a service price can be structured will put pressure on the business owner to develop and improve that service in different directions. It will also put pressure on the customers to use the service in different ways. In some case the pressure is even such that the business will try to degrade the service, instead of improving it. For Reesd, I want to make a conscious choice where the created pressure both naturally pushes me to improve the service, and pushes the customers to make the right technical decisions.

@noteed
noteed / docker-tips.md
Created September 19, 2014 13:28
Docker tips

Docker tips

Avoid large context

Often you will see Git repositories with a top-level Dockerfile. Normally this is all nice and good. Still, when you do docker build -t image ., the whole current directory is the build context and is thus uploaded to the docker daemon. If you happen for instance to create test data (e.g. a few hundreds of megabytes of random data) in you current directory (possibly in a sub-directory), they will end up in the build context even if they are not referenced by the Dockerfile, wasting bandwidth and time.

Avoid non-readable files

Similar to the previous tip, as Docker will try to upload everything in the current directory, if it finds a file that it can't read, the upload will be abruplty interrupted. You'll see something like:

@noteed
noteed / ubuntu-surface.md
Created March 21, 2015 17:10
Ubuntu 15.04 on the Surface Pro 3

Ubuntu 15.04 on the Surface Pro 3

Mostly read http://blog.davidelner.com/dual-booting-ubuntu-14-10-on-the-surface-pro-3/.

I couldn't resize the Window partition as much as I wanted (I think I had a pesky "system volume information" that couldn't be moved around). I performed a reinstall and could reduce the partition further.

I've copied the Marvell wifi driver (actually only the usb8801_uapsta.bin and sd8801_uapsta.bin were missing on my surface), and indeed the wifi performed much better.

I've copied the X.org configuration (but didn't need to change the kernel as Ubuntu 15.04 has already a 3.19 kernel) and the touch pad works.

@noteed
noteed / keybase.md
Created April 27, 2015 13:34
Proving my GitHub identity to Keybase.io

Keybase proof

I hereby claim:

  • I am noteed on github.
  • I am thu (https://keybase.io/thu) on keybase.
  • I have a public key whose fingerprint is 9899 12A4 DFAE 7302 9630 5A75 924B B536 071D 6956

To claim this, I am signing this object:

How to release a package to Hackage

I keep forgetting how to upload a package to Hackage:

  • Update the version stanza of the package's .cabal file.
  • Run cabal sdist
  • Instead of cabal upload , use the Candidate upload page and then "publish" the candidate.