Planet Lysator http://www.lysator.liu.se/planet/atom.xml 2024-09-12T07:00:44+00:00 http://intertwingly.net/code/venus/ Communication is paramount. You must be willing to spend whatever time is needed to bring your… https://dentarg.blog/post/750523824827760640 2024-05-15T06:41:35+00:00 <p>Communication is paramount. You must be willing to spend whatever time is needed to bring your coworkers up to speed—to help others understand—where you are going. Sometimes you will spend most of a day talking with your coworkers, not programming.</p><p>— <a href="https://rsms.me/">Rasmus</a> has started a <a href="https://playb.it/">company</a> and is <a href="https://playb.it/careers/founding-data-engineer.html">hiring</a></p> dentarg https://dentarg.blog/ dentarg.blog Stuff shared and sometimes created by me. https://dentarg.blog/ FOSDEM 2024 https://dentarg.blog/post/741487151507750912 2024-02-05T12:47:32+00:00 <p>Saturday</p><ul><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-1681-the-state-of-go/">The state of Go</a></li><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-1704-the-secret-life-of-a-goroutine/">The secret life of a goroutine</a></li><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-1927-effortless-bug-hunting-with-differential-fuzzing/">Effortless Bug Hunting with Differential Fuzzing</a></li><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-2000-maintaining-go-as-a-day-job-a-year-later/">Maintaining Go as a day job - a year later</a></li><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-3063-using-chroots-in-a-single-linux-container-as-an-alternative-to-docker-compose/">Using chroots in a single Linux Container as an alternative to docker-compose</a></li><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-3282-soft-reboot-keep-your-containers-running-while-your-image-based-linux-host-gets-updated/">Soft Reboot: keep your containers running while your image-based Linux host gets updated</a></li><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-2273-a-front-end-journey-back-to-rails/)">A front-end journey back to Rails</a></li><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-2182-besides-web-a-worker-story-/">Besides Web: a Worker story.</a></li><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-1729-the-world-of-passkeys/">The world of Passkeys</a></li></ul><p>Sunday</p><ul><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-3345-opening-up-communication-silos-with-matrix-2-0-and-the-eu-digital-markets-act/">Opening up communication silos with Matrix 2.0 and the EU Digital Markets Act</a></li><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-2642--servers-aerogramme-a-multi-region-imap-server/">Aerogramme, a multi-region IMAP server</a></li><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-1870--servers-apache-james-modular-email-server/">Apache James: Modular email server</a></li><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-2413-post-quantum-cryptography-transition-where-we-are-now/">Post-Quantum Cryptography transition: where we are now</a></li><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-3611-so-you-think-you-know-git/">So you think you know Git</a></li><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-3423-version-control-post-git/">Version control post-Git</a></li><li><a href="https://fosdem.org/2024/schedule/event/fosdem-2024-2028-homebrew-s-evolution/">Homebrew’s Evolution</a></li></ul> dentarg https://dentarg.blog/ dentarg.blog Stuff shared and sometimes created by me. https://dentarg.blog/ tag:blogger.com,1999:blog-3861328598189272741.post-8101638727232504752 2022-03-21T17:51:36+00:00 <h1 style="text-align: left;">MÖP-uppdatering Tnr 211848</h1><p>Idag behöver vi prata om termobariska vapen. Normala sprängämnen, sådana som används i vanliga vapen, är så att säga "self-contained" - de innehåller i sig själv allt som behövs för att skapa en explosion. Det går utmärkt att avfyra en pistol i rymden, för krutet exploderar av sig själv. Termobariska vapen, däremot, använder syre från luften som en av beståndsdelarna för att skapa en explosion. De bygger på att finfördela någon form av bränsle i luften, och sedan detonera molnet med hjälp av en liten vanlig sprängladdning.</p><p>Det är rätt svårt att förklara verkan av en termobarisk explosion på ett intuitivt begripligt sätt, men om ni har sett filmer från någon av tsunamikatastroferna vet ni att en tsunami inte bara är en ovanligt kraftig våg; det är snarare som om hela havet höjer sig och flödar in över land. Man kan ha den bilden i huvudet.</p><p>En vanlig sprängladdning ger en skarp chockvåg; det är som om man slänger en sten i ett badkar och orsakar en cirkelformig våg på vattnet. Eftersom en termobarisk explosion inte kommer från en enda punkt, utan orsakas av ett helt moln som exploderar, kommer det en hel vägg av luft. Det är som om man snabbt skulle lyfta ena änden av badkaret så att en jättevåg slår iväg mot andra änden.</p><p>Och efter den stora tryckvågen från den termobariska explosionen kommer ett undertryck. (Man pratar ibland om termobariska vapen som "vakuum-bomber"). Det blir som en stor pumprörelse genom luften. Tänk er att ni ställer ner den där badkarsänden direkt när vågen farit iväg - då har ni en djup vågdal i er ände.</p><p>Den här pumpande rörelsen är väldigt effektiv för att förstöra byggnader och strukturer, och människokroppar. Särskilt lungorna blir sönderslitna av tryckvågen.</p><p>Explosionen ger också upphov till en våg av hetta (det hörs på namnet: "termo" - värme, "bar" - tryck) som bränner sönder allt i sin väg.</p><p>En stor termobarisk explosion är bara snäppet under ett taktiskt kärnvapen.</p><p>I videon nedan syns en TOS-1A. Det är ett ryskt vapensystem som skjuter iväg raketer med termobariska sprängladdningar, upp till 24 stycken i en enda salva. (Branden som uppstår är buskage som antänds av raketavgaserna.)</p><p>Just den här salvan skjuts mot Mariupol. Även om 80% av stadens infrastruktur är förstörd, finns det fortfarande tiotusentals civila kvar.</p><div style="clear: both; text-align: center;" class="separator"></div><br /><div><br /></div> Leif Nixon noreply@blogger.com http://tankar-fran-rooten.blogspot.com/ Tankar från rooten tag:blogger.com,1999:blog-3861328598189272741 tag:blogger.com,1999:blog-3861328598189272741.post-4755066548830896079 2022-03-18T21:26:59+00:00 <h1 style="text-align: left;">MÖP-uppdatering Tnr 182224</h1><p>Fler och fler människor slängs ner i köttkvarnen i Ukraina, utan några nämnvärda resultat. Ryssland verkar oförmöget att släppa det som bevisligen inte funkar, utan fortsätter att kasta in unga pojkar för att slaktas.</p><p>I Mariupol sökte barnfamiljer skydd i en teater där man hade gjort stora markeringar i marken utanför: "дети" - "barn" (bild nedan). Den enda effekten det hade var att teatern blev ett mål för ryska flygvapnet. De enda säkra uppgifterna som finns just nu är "många har överlevt".</p><div style="clear: both; text-align: center;" class="separator"><a style="margin-left: 1em; margin-right: 1em;" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8d2pSdmd0072x2sCJHOcvj5ntOum2aL3ulcEGvsXKXi8It8jAkRtvBAySZqoP6m7mqAfnevtj0ZvZ-u9I1hwGRIgcdci7U1ctgX4_cX_Rok8qW5ReHl4YmjsUfy2cH8Dhb6iRgeH6rA_GFg1B2BTJ-EyRhL6uokXT5gtr-ORivY0tfXUXoo3KArBz/s1200/deti.jpeg"><img width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8d2pSdmd0072x2sCJHOcvj5ntOum2aL3ulcEGvsXKXi8It8jAkRtvBAySZqoP6m7mqAfnevtj0ZvZ-u9I1hwGRIgcdci7U1ctgX4_cX_Rok8qW5ReHl4YmjsUfy2cH8Dhb6iRgeH6rA_GFg1B2BTJ-EyRhL6uokXT5gtr-ORivY0tfXUXoo3KArBz/s320/deti.jpeg" border="0" height="200" /></a></div><br /><p><br /></p><p>Jag möter hela tiden personer som har svårt att bearbeta det här. "Men, kan de verkligen bomba barn med flit?". Det är det här jag har försökt förklara i flera år. Det här är vad Ryssland gör. De har åter och åter igen visat att deras taktik är att skapa största möjliga lidande bland civilbefolkningen.</p><p>Jag lägger också till en film från Voznesensk, staden som jag nämnde häromdagen, som käkade upp en hel mekaniserad bataljonsstridsgrupp. Innehållsvarning: den börjar med liksäckar med döda ryska soldater. Men resten är sevärd.</p><div style="clear: both; text-align: center;" class="separator"></div><br /><p><br /></p><p>Slutligen:</p><p>Det är förmodligen rätt få av er som missat att jag är engagerad i Hemvärnet. Vi är runt tjugotusen soldater, och vi har på kort tid fått tiotusen ansökningar. Vi är glada, men det kommer att ta lång tid att processa alla frivilliga personer, och om man inte har tidigare militär erfarenhet hamnar man lite längre bak i kön.</p><p>Jag vill peka på att vi bara är en av en lång rad frivilligorganisationer, och att det finns många, många ställen där man kan göra konkret, omedelbar nytta som frivillig. Ett bra ingångsställe är https://www.frivilligutbildning.se/.</p><p>Särskilt vill jag slå ett slag för två alternativ:</p><p>- Röda Korset. Det är alltid Röda Korset som står främst och som håller ut längst.</p><p>- Kommunernas FRG:er; frivilliga resursgrupper. Där kan man göra omedelbar nytta utan att lära sig skjuta ihjäl andra människor med automatkarbin. Googla "[kommunnamn] FRG". </p> Leif Nixon noreply@blogger.com http://tankar-fran-rooten.blogspot.com/ Tankar från rooten tag:blogger.com,1999:blog-3861328598189272741 Up Again! http://blog.hornquist.se/hugo/?filename=20211029Up_again.md 2021-10-28T22:00:00+00:00 <p>My blog (and server in general) is up again! I still host it on that <a href="http://blog.hornquist.se/hugo/?filename=20150715Att_bygga_en_webbsida.md">puny server</a>. The problem was however that my parents ISP earlier misbehaved with their DHCP-server, and their front line support not knowing anything.</p> <p>ComHem has however since been bought by Tele2, and while I can't vouch for their customer service, they have at least configured their DHCP server correct, allowing both their home router and this server to get their public IP:s as expected.</p> <p>Now we just hope that everything keeps working until we finally get IPv6.</p> Hugo Hörnquist (hugo) http://blog.hornquist.se/hugo HugoNikanors blogg‽ A blog about nothing, but mostly itself. http://blog.hornquist.se/hugo Macro Walking http://blog.hornquist.se/hugo/?filename=20191223Macro_Walking.md 2019-12-22T23:00:00+00:00 <p>Understanding Lisp-macros is hard, even harder is understanding how to effectively use them. Here I delve deeper into code walking through macros on my journey to really understand what makes Lisp macros, and by extension Lisp, unique.</p> <p>One of the best information sources for advanced macros I have found is the book <a href="https://blog.hornquist.se/hugo/rss.php#let-over-lambda">Let over Lambda</a>, which I'm currently (slowly) making my way through. So far the major take-away from it is that macros are my tool for parsing lisp code [Section 5.4].</p> <hr /> <p>The code in this page is written in Guile, but most of it is applicable to any Lisp. <code>Syntax-case</code> appears to be non-standard.</p> <h2>Let Lazy &amp; Symbol Macros</h2> <p>One really simple, but still powerful example of code walking through macros is <code>let-lazy</code>; a variant of <code>let</code> which creates lazy bindings, and only evaluates them on demand. [1].</p> <p>Just to be clear, the expected behavior is the value of a binding is only evaluated if needed, and then only evaluated once. For example:</p> <pre><code>(let-lazy ((x (begin (display "Hello\n") 10))) (+ x x)) ⊣ Hello ⇒ 20 (let-lazy ((x (begin (display "Hello\n") 10))) 'x) ⇒ x</code></pre> <p>Also note that this isn't possible to achieve with functions in an eager language, since function parameters are evaluated before a function is called.</p> <div style="font-size: 80%;"> [1] This assumes that our Lisp already has `delay` and `force` forms. Otherwise they are not much more than wrapping a value in a function, and calling the function to get the value (caching it for future accesses along the way). </div> <hr /> <p>My first naïve solution used a simple macro, along with a manual tree-map.</p> <pre><code>;; apply proc to each node in tree, keeping structure. ;; optionally pass descend: #f to skip a branch. (define* (tree-map proc tree #:key (descend (const #t))) (cond ((not (list? tree)) (proc tree)) ((null? tree) '()) ((list? (car tree)) (cons (if (descend (car tree)) (tree-map proc (car tree) #:descend descend) (car tree)) (tree-map proc (cdr tree) #:descend descend))) (else (cons (proc (car tree)) (tree-map proc (cdr tree) #:descend descend))))) (define (quote? form) (and (not (null? form)) (eq? 'quote (car form)))) (define-macro (let-lazy bindings . body) (let ((keys (map car bindings))) `(let ,(map (lambda (b) `(,(car b) (delay ,@(cdr b)))) bindings) ,@(tree-map (lambda (t) (if (memv t keys) `(force ,t) t)) body #:descend (negate quote?)))))</code></pre> <p>It works decently, but quickly brakes down. For example, something as simple as a back-tick in the body breaks it.</p> <pre><code>(let-lazy ((x (begin (display "Hello\n") 10))) `x) ⇒ (force x)</code></pre> <p>And as Let over Lambda mentions, there are many more special forms in a lisp than expected, and continues to issue the following Common Lisp example, where <em>exactly one</em> of the following <code>blah</code> should be expanded.</p> <pre><code>(let (blah (blah (blah blah))) blah) ;; Borrowed from Let over Lambda under fair use.</code></pre> <hr /> <p>My updated solution instead uses my underlying Lisp interpreter to handle my variable substitution. In the bellow example I introduce my field mappings in a <code>let-syntax</code> towards the bottom, followed by me giving control back to scheme to figure the rest of the tree out.</p> <pre><code>(define-syntax let-lazy (syntax-rules () ;; Match rule, and capture symbols [(_ ((field value) ...) body ...) ;; give symbols their delayed slots (let ((field (delay value)) ...) ;; introduce local syntax for replacing fields with ;; their forced counterparts (let-syntax ((field (identifier-syntax (force field))) ...) body ...))])).</code></pre> <p>The macro is also rewritten in scheme's hygienic macro system. Here it doesn't make a big difference, but identifier-syntax gets happier, and I sleep better knowing that symbols don't slip in our out of macro-expanded code.</p> <h2>Structures and Self Reference</h2> <p>Another more practical example (which actually was written earlier) was my attempt to create objects with an implicit reference to <code>self</code>, similar to C++ or Java. In this example my end goal was a way to generate static configuration files [2], so I could do away with updating slots.</p> <div style="font-size: 80%;"> [2] I later realized I just reinvented Puppet. </div> <p>After expansion my forms look more or less like</p> <pre><code>(define struct-1 `(a (b ,(lambda (self) (get-field self '(c)))))).</code></pre> <p>Of note is that the field /a/b wants the value /c, which is allowed since it doesn't get evaluated before I actually instantiate the object, and that my system allows for rudimentary inheritance.</p> <p>Before expansion the same information is written:</p> <pre><code>(struct struct-1 () (a (b ,(? c))))</code></pre> <p>Which is rather similar. But keep in mind that the <code>(? c)</code> can be deep within arbitrary other code.</p> <hr /> <p>The base macro <code>struct</code> is just basic setup, but is here for completeness sake,</p> <pre><code>;; Comments added for this article. (define-syntax struct (lambda (stx) (syntax-case stx () [(_ name (parent ...) (key value ...) ...) ;; allow the symbol `?' to be used within the ;; input. Required due to hygienic macros (with-syntax ((? (datum-&gt;syntax stx '?))) #'(define name ;; Call to inner (let ((new-data (inner ? (acc-name ,(symbol-&gt;string 'name)) (key value ...) ...))) ;; Inheritance (mostly unimportant) (lambda (mergable) (alist-merge mergable (fold $ new-data (list parent ...)))))))])))</code></pre> <p><code>Inner</code> is however where all the fun stuff happens! To get it out of the way: all rules takes <code>?</code> due to above mentioned hygienic macros, the leaves of the tree are wrapped in functions to delay evaluation, and the first case below matches on <code>unquote</code> (<code>,</code>) in a stroke of <del>ingenuity</del> madness when I realized that I could hijack scheme's syntax for my own bidding.</p> <pre><code>(define-syntax inner (syntax-rules (unquote) ;; case 1 [(_ ? (unquote value)) (lambda (self) ;; actually give a value to `?' (let-syntax ((? (with-ellipsis .. (syntax-rules () [(? path ..) (get-field self `(path ..))])))) ;; give scheme the job to find all intances of (? ...) value))] ;; case 2 [(_ ? (key sub ...) ...) (sort* `((key ,(inner ? sub ...)) ...) symbol&lt;=? #:get car) ] ;; case 3 [(_ _ v v* ...) (lambda _ (values `v `v* ...))]))</code></pre> <p>Relevant to code walking and macros is case one. The <code>self</code> is captured, the <code>?</code> is finally given a value through let-syntax, which uses our captured <code>self</code> in a simple call to <code>get-field</code>. The core is still the same as above; introduce a binding with <code>let-syntax</code> and let our scheme do the job of finding all appropriate instances of our symbol. Here we just have more fancy stuff around it.</p> <hr /> <p>The scripts in their entirety can be found on <a href="https://blog.hornquist.se/hugo/rss.php#hugonikanor-github">GitHub</a>, even though it feels a bit to intimate to share them this way. <code>Struct</code> there is called <code>account</code>, due to the code's original use case.</p> <h2>References</h2> <h3 id="let-over-lambda">Let over Lambda</h3> <ul> <li>Section 5.4, Code-Walking with Macrolet <a href="https://letoverlambda.com/index.cl/guest/chap5.html#sec_4">https://letoverlambda.com/index.cl/guest/chap5.html#sec_4</a></li> <li>Section 7.7, Pandoric Macros (<code>define-handy-method</code>) <a href="https://letoverlambda.com/index.cl/guest/chap6.html#sec_7">https://letoverlambda.com/index.cl/guest/chap6.html#sec_7</a></li> </ul> <h3 id="hugonikanor-github">Full Scripts</h3> <ul> <li><a href="https://github.com/HugoNikanor/dotfiles/blob/5c74da19aa12171495cb8b857cb2cd6135ff4ea1/scripts/conf-base.scm">https://github.com/HugoNikanor/dotfiles/blob/5c74da19aa12171495cb8b857cb2cd6135ff4ea1/scripts/conf-base.scm</a></li> </ul> Hugo Hörnquist (hugo) http://blog.hornquist.se/hugo HugoNikanors blogg‽ A blog about nothing, but mostly itself. http://blog.hornquist.se/hugo Scott Galloway on why you have an Amex card, from Pivot. https://dentarg.blog/post/184557612322 2019-04-30T20:10:54+00:00 <video id="embed-62a73bdc5e626581781610" width="400" class="crt-video crt-skin-default" controls="controls" height="225"> <source src="https://va.media.tumblr.com/tumblr_pqsiom8gqK1qz5x2z_480.mp4" type="video/mp4"> </source></video> <br /><br /><p>Scott Galloway on why you have an Amex card, from <a href="https://overcast.fm/+OwaL_AfuU/15:00">Pivot</a>.</p> dentarg https://dentarg.blog/ dentarg.blog Stuff shared and sometimes created by me. https://dentarg.blog/ Saker du aldrig vill göra http://moonhouse.se/posts/saker-du-aldrig-vill-gora/ 2017-01-01T23:12:56+00:00 <p>En sak som irriterar mig med programvaruprojekt är när saker som fungerat i en viss version helt plötsligt slutar fungera. I bästa fall finns det tydligt dokumenterat hur man uppdaterar sina filer och inställningsfiler för att det ska fungera med en senare version. I vissa fall finns det åtminstone antytt vad som behöver ändras och i resterande fall är man utlämnad till att på egen hand försöka sig fram och googla fram svar på Stack Overflow, Github-issues eller forumtrådar med andra som haft liknande problem.</p> <p>Vill man undvika framtida problem och välja projekt som tar hänsyn till uppgradering behöver man antagligen en tidsmaskin. Någon tydlig indikator på om det kommer vara smärtfritt att uppgradera i framtiden finns inte riktigt.</p> <p>Samtidigt så handlar det om att kunna lämna tidigare designval som visat sig dåliga bakom sig. I programspråk som Perl och Python har övergången mellan versioner varit problematiskt. Övergången från Perl 5 till Perl 6 har tagit riktigt lång tid på sig. Steget visade sig vara jättestort och mycket behövde göras för att implementera i språket. I fallet med övergången till Python 3 från 2 kan det från utsidan kännas som en balkanisering. Dispyter om det är rätt att hålla sig kvar vid version 2 när det finns klara fördelar med Python 3 ses i tweets och blogginlägg då och då.</p> <p>När Ruby-skaparen Matz talat om kommande Ruby 3 har just kämpandet för Perl och Python nämnts som avskräckande exempel och motivering till att göra övergången mer gradvis.</p> <p>Gradvisa övergångar behöver nödvändigtvis inte vara självklara heller. I fallet med den här bloggen och Jekyll så är det möjligt att övergången skett gradvis men eftersom jag inte följt utvecklingen sedan november 2014 och tar steget på en gång. Har man sedan varit inne och gjort egna modifieringar eller använt obskyra plugins är det något man får sota för och man är helt ensam.</p> David Hall (dp) http://moonhouse.se/ Månhus Månhus är David Halls blogg om livet, Internet och annat. http://moonhouse.se/ 2000–2023 David Hall Har du data ska du använda den! http://www.jonlindholm.se/?p=126 2016-10-12T14:34:16+00:00 <p>Alla har vi hört buzz-orden <i>datadriven marknadsföring</i>, <i>marketing automation </i>och liknande. Alla inom marknadsföring pratar om detta. Och digitaliseringen, såklart – det är ju nyckel till framgång – men det är ett annat inlägg.</p> <p> </p> <p>Även om alla pratar om det och alla företag säger att det jobbar med det så dyker man förvånansvärt ofta på exempel där stora och välkända företag gör det ganska enkelt för sig och använder inte den data (alltså din personliga information) de har. Man får tänka på att konkurrensen bland webbshoparna idag är stenhård och det kan vara detaljer som gör att en kund väljer en annan webbshop än just din.</p> <p> </p> <p>Jag tänkte därför plocka fram två färska exempel på företag som skulle kunna föra detta bättre än vad de gör idag. Dessa exempel handlar om något så enkelt som de bekräftelsemail man får när man handlat hos dem. Ett bekräftelsemail har stor potential att dels göra köparen trygg att allt gått som det ska och man kommer få varorna, men det kan även skapa merförsäljning.</p> <p> </p> <h2>Först ut: Footway</h2> <p>En riktigt nice webbutik som funkar väldigt bra och där jag nyss beställde från. Företaget vet precis vad jag köpt – både nu och tidigare – och kan därför passa på att ge mig erbjudande och rabatter.</p> <p><img width="780" alt="footway-mail" src="http://www.jonlindholm.se/wp-content/uploads/2016/10/footway-mail.jpg" class="alignnone size-full wp-image-127" height="608" /></p> <p>Footway, i det här fallet, utnyttjar inte helt sin data här. Jag valde att betala med Klarna, vilket de naturligtvis vet om. Istället för att skriva som de gör ska de naturligtvis skriva något i stil med: ”Du valde att betala med Klarna. Håll utkik efter ett mail från dem med fakturan.” Väldigt enkelt och ger mer trygghet i hur man betalar – eller om man t.om. glömt hur man betalade så får man en påminnelse.</p> <p> </p> <p>Här skulle man också kunna ge förslag på andra skor som passar till dem jag köpt och kanske till och med ge rabatt om man köper direkt. Här finns det stora utrymmen för att testa sig fram och med relativt enkla medel skapa merförsäljning i ett läge då kunden ofta är mottagbar för det.</p> <h2>Zalando</h2> <p>Ännu värre är Zalando. De skriver all information i brödtext, vilket gör det lätt att missa och jobbigt att läsa. Känslan av trygghet, som jag tidigare nämnde, försvinner mycket i att de måste förklara olika scenarion i texten.</p> <p><img width="780" alt="zalando-mail" src="http://www.jonlindholm.se/wp-content/uploads/2016/10/zalando-mail.jpg" class="alignnone size-full wp-image-129" height="763" /></p> <p>I min beställning skrev jag in mitt mobilnummer, adress och mail.</p> <p> </p> <p>Här borde de skriva ut mitt mobilnummer, vilket skulle göra att de slipper flera meningar i mailet som det ser ut nu. ”Vi kommer skicka ett SMS till dig på 070-123 45 67 när paketet finns att hämta hos dit närmaste postombud.” Hur mycket trevligare är inte det?</p> <p> </p> <p>Jag betalade ordern med mitt kort, men istället för att skriva att allt är betalt och klart så väljer de alltså att skriva ut det väldigt kryptiskt. ”Du har valt följande betalningssätt: <strong>Bank-</strong> eller <strong>kreditkort</strong>.” Kom igen!</p> <p> </p> <p>Zalando försöker ändå med att ge mig 10% rabatt om jag skriver upp mig för deras nyhetsbrev. Att jag redan prenumererar på det verkar inte spela någon roll. Detta skapar frågor istället för att fokusera på det bra erbjudandet.</p> <p> </p> <p>Genom att använda den data (information) jag skrev in vid köpet plus mina tidigare köp så skulle de kunna ta bort mycket av den krångliga texten och istället lyfta fram produkter som jag troligtvis skulle kunna vara intresserad av.</p> <p> </p> <p>De kan fortfarande ge mig rabatt men istället för att få den via att jag registrerar mig för ett nyhetsbrev – som jag alltså redan är prenumerant på – så skulle det t.ex. kunna vara att jag får 10% om jag tipsar en kompis om Zalando.</p> <h2>Finns det några bra exempel då?</h2> <p>Visst finns det bra exempel! Hotels.com är en favorit till mig. De arbetar inte med merförsäljning i bekräftelsemailet utan de arbetar bara med att göra mig som kund trygg i mitt köp, vilket är helt rätt i deras fall.</p> <p><img width="780" alt="hotels-mail" src="http://www.jonlindholm.se/wp-content/uploads/2016/10/hotels-mail.jpg" class="alignnone size-full wp-image-128" height="1135" /></p> <p>Först och främst så är det först man ser att allt är betalt och bekräftat. Inte gömt i en brödtext utan stort och tydligt så jag släpper den första oron. De ger mig sen bild på hotellet, adress med länk till karta, telefonnummer till hotellet och precis den information jag som kund är ute efter. Den snyggaste detaljen måste ändå vara att de först skriver informationen på ditt förvalda språk men sen lägger de även till språket i det landet du bokat i. Vilken skön detalj är inte det!?</p> <p> </p> <p>Det finns fortfarande stor potential och möjligheter vad gäller att använda kundernas data i kommunikationen. I dessa fallen var det enbart bekräftelsemail men man ser liknande vid nyhetsbrev och andra marknadsföringskampanjer.</p> <p> </p> <p><b>Slutsatsen blir då</b>: Använd ALL data du har för att förbättra kundupplevelsen, även om det skapar lite merjobb för dig. Det andra är att tänka på de små detaljerna. Vad behöver kunden veta i just detta skede och hur kan vi överträffa förväntningarna?</p> jon http://www.jonlindholm.se Jon Lindholm http://www.jonlindholm.se Ladda ner Vansbro-posters http://www.jonlindholm.se/?p=113 2016-07-08T14:03:55+00:00 <p>Något man ofta ser på inredningssiter är posters med rena motiv i form av svartvita kartor. Dessa är snygga och ger ett häftigt uttryck på väggarna. Tanken om att göra något liknande, fast mer lokalt, slog mig för ett tag sedan. Därför lägger jag nu ut två varianter av dessa posters föreställande Vansbros gatunät och Vansbro Landmarks, dvs. några utvalda byggnader som har betydelse i gatubilden. Liknande Landmarks-posters finns att köpa över Stockholm, London och New York, för att nämna några städer. Och nu finns även Vansbro i detta angenäma sällskap.</p> <p>Vansbro Landmarks-postern är konturerna av de ånglok som står efter Järnvägsgatan, Lokstallet sett från ena kortsidan, järnvägsbron som går över Vanån och sist, men inte minst, är såklart järnvägsstationen med. Ladda ner dem och be ditt lokala tryckeri att skriva ut dem.<br /> <img width="1200" alt="vansbro-posters-webb-2016" src="http://www.jonlindholm.se/wp-content/uploads/2016/07/vansbro-posters-webb-2016.jpg" class="big-image-1200 box-shadow alignnone wp-image-110 size-full" height="852" /></p> <h2>Ladda ner</h2> <p>Ladda ner poster av <a href="http://www.jonlindholm.se/wp-content/uploads/2016/07/VANSBRO-KARTPOSTER.pdf" target="_blank">karta över Vansbro</a>. <em>Postern är gjord i A3-format (297mm × 420mm) men går att skriva ut i andra storlekar med.</em></p> <p>Ladda ner postern <a href="http://www.jonlindholm.se/wp-content/uploads/2016/07/vansbro_landmarks.pdf" target="_blank">Vansbro Landmarks</a>. <em>Postern är gjort 500mm × 700mm men går att skriva ut i andra storlekar.</em></p> <p>Såhär snygga blir de inramade.</p> <p><img width="1200" alt="vansbro-posters-webb-foton-2016" src="http://www.jonlindholm.se/wp-content/uploads/2016/07/vansbro-posters-webb-foton-2016.jpg" class="big-image-1200 box-shadow alignnone wp-image-109 size-full" height="772" /></p> jon http://www.jonlindholm.se Jon Lindholm http://www.jonlindholm.se Hålla sitt eget löfte http://moonhouse.se/posts/halla-sitt-eget-lofte/ 2016-01-02T01:09:56+00:00 <p>Med nyåret kommer nyårslöftena. Hur blygsamt löfte man än väljer finns risken för att oförutsedda problem dyker upp redan i början. Mina två löften för året handlar om att göra saker varje dag.</p> <p>Varje dag ska jag studera kinesiska och varje dag ska jag skriva något på denna blogg. Det behöver nödvändigtvis inte handla om att lära mig mycket kinesiska varje dag eller att skriva långa essäer varje dag utan istället att faktiskt göra åtminstone något varje dag.</p> <p>Förstås kommer tekniken in och ställer till besvär. Appen (<a href="http://www.chinese-skill.com/cs.html" target="_blank" rel="noopener">ChineseSkill</a>) som jag valt att börja studierna med lyckades inte ladda ner bilder och ljud för övningarna ikväll. Bloggen som jag i november 2014 konverterade till <a href="https://jekyllrb.com/" target="_blank" rel="noopener">Jekyll</a> visade sig vara svår att uppdatera eftersom jag behövde uppdatera programbibliotek och kod för att klara av ändringar som inträffat i Jekyll, Ruby och Solr sedan 2014.</p> <p>Så jag får väl ta att första publiceringen kommer efter midnatt och hitta något annat sätt att plugga kinesiska (åtminstone för den här dagen).</p> David Hall (dp) http://moonhouse.se/ Månhus Månhus är David Halls blogg om livet, Internet och annat. http://moonhouse.se/ 2000–2023 David Hall Läst under 2014 tag:blogger.com,1999:blog-15467815.post-7247874051895880302 2015-01-02T08:59:37+00:00 <img src="http://www.lysator.liu.se/planet/images/unicorn.png" alt="" align="right" style="float: right;"/>Jag brukar tycka att jag borde hinna med att läsa en bok i veckan och även det här året har det stämt: totalsumman blev 54 vilket är ungefär detsamma som de senaste åren.<br /> <br /> Vad som däremot är noterbart är att jag visst läst mycket mer på engelska än under de närmast föregående åren. Under 2011-2013 kom jag aldrig upp i mer än 38% engelska böcker som mest. I år blev det 67%. Inte mig emot egentligen och en tillbakagång till hur det varit förr när jag flera år passerade 90% men det ett tag sedan sist.<br /> <br /> Engelska vet jag å andra sidan att jag kan läsa obehindrat. Vad jag skulle vilja är att komma igång att läsa på tyska. Under 2014 har jag läst ett par tidskrifter på tyska och börjat på en ungdomsroman men jag har inte kommit så många sidor i den och får erkänna att det än så länge går lite trögt. Jag får se det som ett mål för 2015 att lära mig att läsa på tyska.<br /> <br /> De bästa romanerna jag läste under 2014:<br /> <br /> <ul> <li>Mats Strandberg &amp; Sara Bergmark Elfgren: <i>Nyckeln</i></li> <li>Jo Walton: <i>Among Others</i></li> <li>Neil Gaiman: <i>The Ocean at the End of the Lane</i></li> <li>Cory Doctorow: <i>Pirate Cinema</i></li> <li>Simon Stålenhag: <i>Ur varselklotet</i></li> <li>George R. R. Martin: <i>A Dance with Dragons</i></li> </ul> <br /> <div> Vad det gäller <i>Nyckeln</i> och <i>A Dance with Dragons</i> kan noteras att jag inte menar att de nödvändigtvis är de bästa delarna i sina respektive serier men att jag uppskattat serierna i sin helhet mycket även om resten av delarna lästs under andra år.</div> <div> <br /></div> <div> De bästa serierna jag läste under 2014:</div> <div> <ul> <li>Robert Kirkman: <i>The Walking Dead</i></li> <li>Greg Rucka: <i>Lazarus</i></li> <li>Liv Strömqvist: <i>Prins Charles känsla</i></li> <li>Craig Thompson: <i>Habibi</i> och <i>Blankets</i></li> <li>Alison Bechdel: <i>Fun Home: A Family Tragicomic</i></li> </ul> <div> Här måste jag speciellt lyfta fram Craig Thompson som en väldigt trevlig bekantskap som jag ska hålla utkik efter framöver.</div> </div> <div> <br /></div> Hans Persson noreply@blogger.com http://pinkunicornblog.blogspot.com/ Du är vad du läser Funderingar om vad jag läst, observationer om världen och annat småplock. tag:blogger.com,1999:blog-15467815 2014-12: Joe Hill: Alpha &amp; Omega tag:blogger.com,1999:blog-15467815.post-1549033895925723250 2014-04-14T20:08:31+00:00 <img src="http://www.lysator.liu.se/planet/images/unicorn.png" alt="" align="right" style="float: right;"/><div style="clear: both; text-align: center;" class="separator"> <a style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" href="http://familjen-persson.se/bilder/omslag/2014/0012.jpg"><img width="208" src="http://familjen-persson.se/bilder/omslag/2014/0012.jpg" border="0" height="320" /></a></div> Det här albumet är den sjätte och sista delen i serien <i>Locke &amp; Key</i> och jag tycker att det har varit en mycket trevlig bekantskap. Personerna har känts trovärdiga trots de ibland rätt skruvade övernaturligheter de har drabbats av. Illustrerandet har genomgående skötts med den äran av Gabriel Rodriguez.<br /> <br /> I den här avslutande volymen får vi så klart en del extra fyrverkerier innan upplösningen som jag tycker fungerar bra. Jag vill inte avslöja några detaljer men saker som jag förväntat mig skulle vara väsentliga utan att veta exakt hur blev mycket riktigt det och gav dessutom en extra knorr till själva berättandet.<br /> <br /> Man kan också notera att Hill gör en liten <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaUR7OiGiHW9Yak4G6Lezm61rg3DV3aQNLiP_l7rqgdNfT30c4lqAHcSvHKe_bOZXTSTgefouKqmxqL766TxPDyQ5t75TNI2ZT3xeamGaA1MBl9gZCs5TipQLPH4hvCrFdHSKm/s1600/carrie_1976_1.jpg">homage till pappa</a> i en scen. Som alltid med referenser är det inte alla som kommer att förstå den, men här konstaterar de inblandade själva efter händelsen att det är just ingen i deras omgivning som förstår dem så det är väl inte mer än rätt att även en del av läsarna inte gör det.<br /> <br /> Jag är faktiskt lite sugen på att läsa om hela serien en gång till utan långa uppehåll mellan varje album (jag har köpt dem allt eftersom de kommit ut hela vägen) för att få lite bättre koll på handlingen genom att läsa hela på en gång.<br /> <br /> Joe Hill: <i>Alpha &amp; Omega</i><br /> Illustrationer: Gabriel Rodriguez<br /> IDW, 2014<br /> 192 sidor<br /> ISBN: 978-1-61377-853-1<br /> <br /> Hans Persson noreply@blogger.com http://pinkunicornblog.blogspot.com/ Du är vad du läser Funderingar om vad jag läst, observationer om världen och annat småplock. tag:blogger.com,1999:blog-15467815 PuTTY-url 0.63 https://blog.ryara.net/?p=313 2013-08-07T23:36:21+00:00 <p>I just released PuTTY-url based on PuTTY 0.63. PuTTY-url is a patch that adds support for clickable URLs to PuTTY.</p> <p>You can download it from <a href="http://ryara.net/putty-url/">http://ryara.net/putty-url/</a>.</p> <p>Make sure to update, since PuTTY 0.63 includes fixes for four security issues. See the <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/">PuTTY web site</a> for more information.</p> tobbez http://blog.ryara.net/ blog.ryara.net http://blog.ryara.net/ Upgrading firmware on the Linksys SRW2024 without using the web interface https://blog.ryara.net/?p=256 2012-11-29T13:55:35+00:00 <p>This is useful if, for example, the web interface keeps resetting the connections.</p> <p>Upgrading the firmware requires first updating the boot code, and the regular console in the earlier firware doesn’t have support for flashing the boot code. However, there is a hidden IOS-like cli available, that makes it possible to upgrade the boot code over tftp. An additional benefit is that it is much faster than using xmodem.</p> <p><b>The steps</b></p> <ol> <li>Setup a tftp server on your machine, serving the files <code>srw2024_16_boot-101.rfb</code> and <code>ls20xx-12230.ros</code> (download from <a href="http://www.cisco.com/cisco/pub/software/portal/select.html?mdfid=282414074&amp;catid=268438038" title="Cisco">Cisco</a>) </li><li>Connect your computer to the switch using ethernet and serial cables.</li> <li>Boot the switch.</li> <li>Log into the console.</li> <li>Press C-z.</li> <li>On the new promt, type <code>lcli</code> and press enter.</li> <li>To upgrade the boot code, type <code>copy tftp:///srw2024_16_boot-101.rfb boot</code></li> <li>Then upgrade the firmware: <code>copy tftp:///ls20xx-12230.ros image</code></li> <li>Lastly, restart the switch: <code>reload</code></li> </ol> <p>That’s it.</p> <p>As an aside, please note that the web interface only works in Internet Explorer, so if it seems like it doesn’t work, it’s probably because your’re using another browser.</p> tobbez http://blog.ryara.net/ blog.ryara.net http://blog.ryara.net/ Gott Nytt År! (igen) urn:md5:01a340e9aeb92d0fa2aaec1d8ce969ac 2010-12-31T21:42:00+00:00 <p>Det har varit lite dåligt med postningar på bloggen, men nu är det i alla fall dags att önska ett Gott Nytt År!</p> <p>Ett nytt år som är det näst sista på väldigt länge som har en dag där tvåsiffrigt årsnummer, månad och dag i månad alla har samma värde. Efter den 11 november 2011 är det bara 12 december 2012 kvar innan man får vänta ända till den 1:a januari 2101 innan det går igen, och det är fasligt länge.</p> <p>Hoppas att 2011 eller 0x7DB blir ett minst lika intressant år som 2010!</p> poj http://blog.dravejk.net/ Mer än Mat En blog om Mat och en hel del annat. urn:md5:12735 Bacon och Broccoli urn:md5:01a2076792763f307a76dab3cc94c8b0 2010-09-26T17:07:00+00:00 <p>Vissa kombinationer råkar man bara kombinera, och sen är man fast. Bacon och Broccoli är en sådan kombination. Dessutom låter det trevligt.</p> poj http://blog.dravejk.net/ Mer än Mat En blog om Mat och en hel del annat. urn:md5:12735 AVR, Gentoo and Paludis tag:blogger.com,1999:blog-4947850669095347038.post-7020398281341188310 2009-12-30T00:09:08+00:00 Seeing that there is a new AVR simulator for linux in town, <a href="http://gitorious.org/simavr">simavr</a>, I decided to get the latest avr gcc packages for Gentoo. (More about simavr when I have gotten a bit accustomed to it)<br /> <br /> As the crossdev scripts don't really wants to play nice with Paludis the packages have to be "created" manually. This is really a simple procedure as the packages themself already works for different targets, they just need to be told. I got the information on how to do it from the <a href="http://en.gentoo-wiki.com/wiki/Paludis/AVR_Crossdev">Gentoo wiki</a>. <br /> <br /> First one needs a repo for the cross avr chain. We will call it cross-avr. It is created by putting this configuration file in /etc/paludis/repositories:<br /> <br /> <pre class="bash" name="code">master_repository = gentoo format = ebuild location = /var/paludis/repositories/cross-avr names_cache = /var/cache/paludis/names write_cache = /var/cache/paludis/metadata </pre><br /> And to get the files in the repo, make the directory and create symbolink links for the required packages:<br /> <br /> <pre class="bash" name="code">mkdir /var/paludis/repositories/cross-avr/{cross-avr,profiles} -p cd /var/paludis/repositories/cross-avr/cross-avr ln -s /usr/portage/dev-embedded/avr-libc ln -s /usr/portage/sys-devel/binutils ln -s /usr/portage/sys-devel/gcc ln -s /usr/portage/sys-devel/gdb </pre><br /> The repo also needs to be named and as the category is not in the master tree (portage) it needs to be added to the categories file:<br /> <br /> <pre class="bash" name="code">cd ../profiles echo cross-avr &gt; repo_name echo cross-avr &gt; categories </pre><br /> Finally we need to tell paludis to use the avr-gcc for the other cross-avr packages, by placing this in /etc/paludis/bashrc<br /> <br /> <pre class="bash" name="code">#cross-build avr if [[ "${CATEGORY}" == "cross-avr" ]] then if [[ "${PN}" != "gcc" &amp;&amp; "${PN}" != "binutils" ]] then CBUILD=${CHOST} CHOST=avr CFLAGS="-Os" fi fi </pre><br /> Now we have the ("auto-syncing" :D) repo set up!<br /> <br /> To make sure that paludis knows about the new packages we run:<br /> <pre class="bash" name="code">paludis --regenerate-installable-cache cross-avr </pre><br /> <br /> Next up is the installation. Do a pretend to see what paludis will pull in:<br /> <pre class="bash" name="code">paludis cross-avr/binutils cross-avr/gcc cross-avr/avr-libc cross-avr/gdb -ip </pre><br /> Here it is important to note all the use flags for gcc. My experience is that most of them will break avr-gcc and my recommendation is to turn them all off.<br /> <br /> At last we are ready. Start the build and grab a mug of cocoa.<br /> <br /> While you wait it may be interesting to know that avr-libc will place the libs in /usr/avr. And if you want to start playing with simavr you need to change AVR_ROOT, in its Makefile.common, to this path. But more on that another time ;)<br /> <br /> When the packages are installed you may want to create a symlink in /usr/avr/lib to /usr/x86_64-pc-linux-gnu/avr/lib/ldscripts (substitute architechture as appropriate) because ld will have problems finding the linker scripts otherwise. (/usr/libexec/gcc/avr/ld: cannot open linker script file ldscripts/avr4.x: No such file or directory, <a href="http://bugs.gentoo.org/show_bug.cgi?id=147155">Gentoo bug</a>)<br /> <br /> Now you can compile your avr projects with avr-gcc! Happy hacking! Unknown noreply@blogger.com http://thomasa88.blogspot.com/ notes Random notes on stuff I'm interested in. tag:blogger.com,1999:blog-4947850669095347038 Custom PATH in KDE run dialog tag:blogger.com,1999:blog-4947850669095347038.post-8464019484431267479 2009-05-29T18:31:59+00:00 It has bothered me for a while that the KDE run dialog (Alt+F2) won't find my custom scripts in <i>~/bin</i>. After a failed attempt, with <i>~/.kde/env/bin_path</i>, I found a way that should (in theory) work with any desktop manager.<br /><br />The solution is to put the export command in a file called <i>~/.xprofile</i><br /><pre class="bash" name="code"><br />export PATH="/home/thomas/bin:${PATH}:/home/thomas/installs/bin"<br /></pre><br />(I keep all my user installed apps in ~/installs/bin ;)) Unknown noreply@blogger.com http://thomasa88.blogspot.com/ notes Random notes on stuff I'm interested in. tag:blogger.com,1999:blog-4947850669095347038 Stockholm beer and whisky. tag:blogger.com,1999:blog-3853179060413646984.post-6966036186395718966 2007-09-29T19:45:13+00:00 <br /><a href="http://www.lysator.liu.se/~bjowi/img/2007-09-29:21:45:01.306107-002.jpg"><img src="http://www.lysator.liu.se/~bjowi/img/2007-09-29:21:45:01.306107-002_small.jpg" /></a> essgee noreply@blogger.com http://essgee.blogspot.com/ essgee tag:blogger.com,1999:blog-3853179060413646984 Kom till Villevalla! Nu. tag:blogger.com,1999:blog-3853179060413646984.post-7386693857068733264 2007-09-06T19:26:01+00:00 <br /><a href="http://www.lysator.liu.se/~bjowi/img/2007-09-06:21:25:48.951630-002.jpg"><img src="http://www.lysator.liu.se/~bjowi/img/2007-09-06:21:25:48.951630-002_small.jpg" /></a> essgee noreply@blogger.com http://essgee.blogspot.com/ essgee tag:blogger.com,1999:blog-3853179060413646984