March 21, 2016

Git on Site5

I've been running subversion as my version control - backed up to my site5 account - for most of a decade. But it really is time to change that, and I don't feel like putting everything on github, just because github exists, so I had to figure out git on Site5 - if there's git on your shared hosting it probably works there too. I'm assuming you have ssh access using something like 'ssh username@domain'

On the server:


mkdir directory_where_i_want_to_create_all_my_git_repos
cd directory_where_i_want_to_create_all_my_git_repos
git init --bare mynewrepo.git

A bare repo is all the versioning and metadata, but without a local working copy. Git won't let you push to a remote that's actually a working copy

Locally, everything happens in the project directory you want under version control


cd mynewrepo
git init
git remote add site5 username@domain:/home/username/directory_where_i_want_to_create_all_my_git_repos/mynewrepo.git
git add .
git commit -a -m "first commit"
git push site5 master

- so apart from getting the ssh-auth + file location invocation right, when adding the remote, the only trick you need to know is that bare repos are different from working copies...


Posted by Claus at 5:07 PM | Comments (0)

February 20, 2013

Heroku: The worst place you could possibly host

I'm completely stunned with how pathetically inept Heroku's response to RapGenius' widely read dismemberment of the Heroku platform has been. At this point the following is clear:


  • Heroku has done a really bad job of routing requests for two years

  • For the better part of those two years, the company has been misleading all customers about this

  • In respons to getting caught out, the response has been "We'll stop deceiving you now"

  • No response about the years of degraded service at no discount

  • Normally you'd expect Heroku to be able to offer better and better terms as they grow - in reality it just get's worse

  • The point of Heroku used to be "we'll scale it for you", but now it turns out, not only that, "yeah, we're not really going to scale it for you", but in fact that Heroku customers are paying for Heroku's growth by being more and more disadvantaged by shitty routing, due to no fault of their own, and with no fix in sight. Heroku not only is much worse per dollar than customers were led to believe, the entire product promise has gone out the window.

  • In fact, the solution Heroku has taken is completely inept. Instead of the expectation previously documented, where an 8x performance increase meant a 8x price increase - seems reasonable - it turns out, the advantage of adding servers decreases exponentially. Whenever you think you can just add a server, you actually have to double cluster size, to get the expected througput gain. What's worse, while this shitty behaviour makes sense for Heroku, it's really, really easy for most of Heroku's customers to do better, if only they could.

  • Heroku blends explanations of concurrency into this, but that has got nothing at all to do with this. Concurrency makes the individual dyno more useful, potentially, but the queuing characteristics of the server aren't changed.

  • I expect this to burn Heroku to the ground, unless they do something drastically different


You can start at the end, here.

Posted by Claus at 5:23 PM | Comments (0)

August 26, 2011

Pinlige fejl med sandsynlighedsregning

Sandsynlighedsregning er noget det er meget nemt aldrig at blive rigtig god til. Det vanskelige ved det er at de sandsynligheder man regner sig frem til er helt umulige at regne videre med. Hvis man vil svare på et andet spørgsmål, må man tilbage til den situation man regner på, stille udfaldsrummet, altså den beskrivelse af hvad der kunne ske op igen, og så tænke det nye spørgsmål man vil stille sig selv ordentlig igennem ud fra det.
Nogle gange er det enkelt nok, man kan nøjes med at tænke på det tilfældige fænomen man ser på som terningkast, og så er der nogle banale regneregler man kan bruge, men det bryder hurtigt sammen.

De fleste ved godt at hvis sandsynligheden for at slå en sekser med en terning er \(\frac{1}{6}\), så er det ikke rigtigt at man skal slå terningen seks gange og så er man sikker på at få en sekser. Hvis man vil finde sandsynligheden skal man istedet tilbage udgangspunktet. Det er lidt besværligt at beskrive de udfald hvor man har slået mindst én sekser - men heldigvis er det nemt at beskrive dem hvor man ingen seksere slår, altså det komplementære udfald. Der er \(\frac{5}{6}\) sandsynlighed for ikke at slå en sekser. Og det skal man lykkes med 6 gange i træk, uafhængigt af hinanden (<- uafhængigt er det vigtige ord), så sandsynligheden for det er \(\frac{5^{2}}{6^{2}} = \frac{25}{26} \) så sandsynligheden for mindst én sekser er \(\frac{11}{36} = 0.3\).
Et klassisk overraskende stykke trivia i den retning er den med at hvis man har en gruppe på 23 mennesker, så er det mere sandsynligt at to af dem har fødselsdag samme dag på året, end af ingen af dem har. Der er 365 dage på et år, det virker ikke intuitivt at man allerede rammer ind i den samme to gange, når man er 23 samlet, men sådan passer et regnestykke, der minder meget om det med sekserne ovenfor*. Hvis jeg husker rigtigt er det forresten derfor at 23video.com hedder 23.

For at demonstrere hvor nemt det er at sige noget dumt, og for i mit matematikblogprojekt med det samme at demontere deres højtærede blogger som ufejlbarlig superekspert, vil jeg meget gerne henlede opmærksomheden på en tanketorsk af de virkelig store, jeg lavede for et stykke tid siden i en blogpost. Jeg tog lige præcis en pivforkert antagelse om hvad det var eksperimentet præcis gik ud på, kollapsede fejlagtigt til en terningkastmodel, og kom frem til noget vanvittig forkert. Følg linket for at læse hvorfor. Og forvent endelig flere fejl i fremtiden.

* Det komplementære resultat går her på at ingen deler fødselsdag. Lad os trække de 23 ud, en efter en. Den første er nem, vi har ingen fødselsdage på lager, så vi rammer ikke nogen. Den næste er der en sandsynlighed på \(\frac{364}{365}\) for vi ikke har set. Nr 3 må ikke have én af de to førstes som sin fødseldag så der er sandsynligheden \(\frac{363}{365}\). Hvis vi ganger disse sammen og fortsætter til 23 får vi sandsynligheden 0.49 - så sandsynligheden for at ingen deler fødselsdag er altså den mindste.
Sandsynligheden for at en bestemt af de 23 deler sin fødselsdag med en anden er selvfølgelig langt mindre. Det svarer helt til regnestykket med 6-eren, bare med en 365 sidet terning, og de andre to skal bare alle slå én af de andre værdier, så sandsynligheden for at ingen deler din fødselsdag er \(\frac{364}{365}^{22} = 0.94\) altså meget tæt på 1.

Posted by Claus at 12:53 AM | Comments (0)

August 17, 2011

Matematikaften

Attention readers: Math posts on this blog will be in Danish.

Min skolematematik er superrusten. Jeg har ikke brugt matematik systematisk til noget i et tiår, og det betyder at jeg er kommet helt ud af vanen med at arbejde længe på ternet papir med en blyant og underlige tegn som \( \forall, \exists, \in, \infty, \nabla \) og hvad de nu allesammen hedder. Det er spild af gode skills, navnlig nu hvor computere er blevet så hurtige at det er nemt at lave matematik på dem. Engang skulle man f.eks. med besvær compile dokumenter der har den slags tegn i sig - nu kan jeg have dem med her ved bare at skrive en blogpost.

For at give mig selv en opgave at lave matematik på har jeg bestemt mig for et par ting. For det første er onsdag aften udnævnt til matematikaften. For det andet vil jeg forsøge at skrive nogle blogposts om forskellige matematiske emner, sådan at jeg har en grund til at minde mig selv om hvordan det hele hænger sammen. For det tredje er den dybere plan at koncentrere mig om at genlære de ting jeg kan bruge på computeren; så det bliver med fokus i retning af maskinlæring og algoritmer - eller bredere på dataanalyse, som er en vigtig disciplin i vækst.
Det kommer altsammen til at foregå her, mest på onsdage, fremover.

Posted by Claus at 10:24 PM | Comments (0)

May 29, 2011

A short exercise in hacking and mashing PDFs

A while back I found W. Ross Ashbys Introduction to Cybernetics online as a PDF, but formatted 2-up for printing, which makes it a really bad read on the Kindle. I needed to de-n-up it. But how to. Ghostscript is able to limit the viewport on the synthetic output device pdfwrite to one page - but that only got me all the left pages.
Googling for PDF tools is about as frustrating as googling for antivirus or spamfilters - very, very spammy, tons of bad half-solutions and workarounds for people like me who don't want to pay for Adobe's tools.
After a while I found out how to fix it without downloading anything at all, as long as you're on a Mac. Here's how:


  1. Crop the pdf to left/respectively right pages only. You can do this with preview - select the right/lift page. Load the inspector (in Tools) and find the crop-tab. Crop and save as leftpages.pdf, then open the original and do the right pages as rightpages.pdf

  2. REALLY crop the pdf. What you just did only defined some metadata in the PDF that tells viewers which part of the pdf to show. This breaks down a little later in this workflow, so you need to actually cut the pdf. You can do this using Ghostscript (which I might have installed by hand using macports, I forget)

    gs -g4210x5950 -sDEVICE=pdfwrite -sOutputFile=realrightpages.pdf -dUseCropBox=true -dBATCH -dNOPAUSE -f rightpages.pdf

    The 4210 and 5950 are the width and height, respectively in pixels - for this pdf, this mac and this install of ghostscript there are 10 pixels to a point - and you can read off the point dimensions in the inspector in preview.

  3. Interleave left and right pages using the automator.

    1. Open Automator

    2. Start a new workflow

    3. Drag your files to the workflow windows, left pages first

    4. In the PDF tasks, find "Combine PDFs" and choose "shuffling" mode, which takes pages from first file and second file alternately


  4. You're done!


Posted by Claus at 11:54 PM | Comments (0)