<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" 
    xmlns:content="http://purl.org/rss/1.0/modules/content/" 
    xmlns:dc="http://purl.org/dc/elements/1.1/" 
    xmlns:rssdatehelper="urn:rssdatehelper">
        <channel>
            <title>Bibliotekariens RSS-fl&#246;de</title>
            <link>http://bibliotekarien.se</link>
            <pubDate>Sat, 06 Jul 2019 13:26:53 GMT</pubDate>
            <generator>umbraco</generator>
            <description>Bibliotekarien.se - Utveckling, bibliotekssystem och mer d&#228;rtill</description>
            <language>en</language>
                   <item>
					   <title>Bibliotekariens f&#246;rsta PyPI-paket</title>
					   &lt;link&gt;/blogg/bibliotekariens-forsta-pypi-paket/&lt;/link&gt;
					   <pubDate>Sat, 06 Jul 2019 13:26:53 GMT</pubDate>
					   <guid>http://bibliotekarien.se/blogg/bibliotekariens-forsta-pypi-paket/</guid>
					   <content:encoded><![CDATA[ <p>  </p> <p>När jag skriver mina migreringsskript till FOLIO har jag börjat kopiera alldeles för mycket kod mellan de olika skripten. Särskilt när det gäller själva interaktionen med FOLIO.</p>
<p>Det har varit läge att flytta de här sakerna till ett eget paket så att alla skript kan använda samma kod, och idag slog jag till.</p>
<p>Jag följde guiden <a href="https://medium.com/@joel.barmettler/how-to-upload-your-python-package-to-pypi-65edc5fe9c56">How to upload your python package to PyPi</a> och det fungerade riktigt bra.</p>
<p>Så nu kan alla som behöver en wrapper över FOLIOs API:er gå till <a href="https://pypi.org/">PyPi </a>och ladda ned <a href="https://pypi.org/project/folioclient/">FolioClient-paketet</a></p>
<p>Tanken framöver är att inte behöva definiera alla endpoints, utan istället gå på RAML-filerna och hämta ned dem mer dynamiskt.</p>
<p>Men, vi får väl se.</p>
<p> </p> ]]></content:encoded>
					   
				</item>
                   <item>
					   <title>FOLIO Forum - The Bellis release</title>
					   &lt;link&gt;/blogg/folio-forum-the-bellis-release/&lt;/link&gt;
					   <pubDate>Wed, 05 Jun 2019 10:55:26 GMT</pubDate>
					   <guid>http://bibliotekarien.se/blogg/folio-forum-the-bellis-release/</guid>
					   <content:encoded><![CDATA[ <p> Jag och Lisa Sj&#246;gren fr&#229;n Chalmers h&#246;ll i en presentation om den senaste releasen f&#246;r FOLIO som vi har implementerat p&#229; Chalmers. F&#246;r m&#229;nga &#228;r det f&#246;rsta g&#229;ngen man kan se FOLIO i en lite mer &quot;naturtrogen&quot; milj&#246;. Integrationen mot Libris har v&#228;ckt en del uppm&#228;rksamhet och den f&#246;revisas h&#228;r. </p> <p><iframe src="https://www.youtube.com/embed/SVHU5nS-2fY" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" width="560" height="315" frameborder="0"></iframe></p> ]]></content:encoded>
					   
				</item>
                   <item>
					   <title>Pythons motsvarigheter till LINQ-uttrycken i C#</title>
					   &lt;link&gt;/blogg/pythons-motsvarigheter-till-linq-uttrycken-i-c/&lt;/link&gt;
					   <pubDate>Wed, 05 Jun 2019 09:48:41 GMT</pubDate>
					   <guid>http://bibliotekarien.se/blogg/pythons-motsvarigheter-till-linq-uttrycken-i-c/</guid>
					   <content:encoded><![CDATA[ <p> Python saknar - &#229;tminstone i grunden - tydliga motsvarigheter till C#:s LINQ-funktioner. Men den h&#228;r genomg&#229;ngen ger en bra inblick i m&#246;jliga motsvarigheter. Se dock upp med prestandan som f&#246;r vissa av l&#246;sningarna kan bli lite av en besvikelse. </p> <p>Det här är en av mina mest använda referens-sidor sedan jag började använda Python mer aktivt. Det är dags att ge den lite Google-juice!</p>
<p>På <a href="http://mark-dot-net.blogspot.com/2014/03/python-equivalents-of-linq-methods.html" title="Python Equivalents of LINQ Methods">http://mark-dot-net.blogspot.com/2014/03/python-equivalents-of-linq-methods.html</a> finns en ordentlig översikt över några av de vanligaste LINQ-(To objects)-uttryckens motsvarigheter i Python. Vissa av uttrycken är mer uttrycksfulla och andra kräver lite längre syntax för att åstadkomma samma sak. En sak jag har märkt när jag har testat dem är att de inte alltid har samma prestanda som LINQ. Ibland beror det förstås på hur listor och arrayer genereras i underliggande kod, men många gånger upplever jag att ren iteration över listorna går snabbare och att Python-uttrycken genererar någon sorts overhead.</p>
<p>Så tipset är att gräva lite och se att du har ordentliga yield-uttryck när du skapar dina listor och arrayer, samt att inte blunda för en for-loop här och där. Det är ju också "bättre" Python att inte överanvända för kortfattade och uttrycksfulla uttryck på bekostnad av läsbareheten, så någonstans leder dessa begräsningar rätt i slutändan.</p>
<p> </p> ]]></content:encoded>
					   
				</item>
                   <item>
					   <title>How to zip an entire folder (with subfolders) and serve it through Flask without saving anything to disk</title>
					   &lt;link&gt;/blogg/how-to-zip-an-entire-folder-with-subfolders-and-serve-it-through-flask-without-saving-anything-to-disk/&lt;/link&gt;
					   <pubDate>Fri, 21 Dec 2018 22:11:13 GMT</pubDate>
					   <guid>http://bibliotekarien.se/blogg/how-to-zip-an-entire-folder-with-subfolders-and-serve-it-through-flask-without-saving-anything-to-disk/</guid>
					   <content:encoded><![CDATA[ <p>  </p> <p>I had a hard time to find the answer to this task online, so when I finally figured it out, I thought I could add it as a <a href="https://stackoverflow.com/q/53880816/108390">question on Stackoveflow</a>. Once posted, I received some immediate downvotes, and one grumpy comment on that you should not answer your own questions even though it is <a href="https://stackoverflow.blog/2011/07/01/its-ok-to-ask-and-answer-your-own-questions/">highly encouraged</a>. Now my question is put in a state of On hold for being <a href="https://meta.stackoverflow.com/questions/351670/what-makes-this-question-too-broad">too broad</a>! And obviously it is me that is grumpy...</p>
<p> </p>
<p>So, in case the question gets closed, here is how How do you zip an entire folder (with subfolders) and serve it through Flask without saving anything to disk:</p>
<pre>import time
from io import BytesIO
import zipfile
import os
from flask import send_file


@app.route('/zipped_data')
def zipped_data():
    timestr = time.strftime("%Y%m%d-%H%M%S")
    fileName = "my_data_dump_{}.zip".format(timestr)
    memory_file = BytesIO()
    file_path = '/home/data/'
    with zipfile.ZipFile(memory_file, 'w', zipfile.ZIP_DEFLATED) as zipf:
          for root, dirs, files in os.walk(file_path):
                    for file in files:
                              zipf.write(os.path.join(root, file))
    memory_file.seek(0)
    return send_file(memory_file,
                     attachment_filename=fileName,
                     as_attachment=True)</pre> ]]></content:encoded>
					   
				</item>
                   <item>
					   <title>transformera CSV-filer till JSON med camel-case:ade rubriker i Python 3</title>
					   &lt;link&gt;/blogg/transformera-csv-filer-till-json-med-camel-caseade-rubriker-i-python-3/&lt;/link&gt;
					   <pubDate>Mon, 15 Oct 2018 10:50:07 GMT</pubDate>
					   <guid>http://bibliotekarien.se/blogg/transformera-csv-filer-till-json-med-camel-caseade-rubriker-i-python-3/</guid>
					   <content:encoded><![CDATA[ <p>  </p> <p>Jag har en samling CSV-filer som jag ville göra om till JSON. Att göra om CSV till JSON är enkelt med Pythons json och csv-bibliotek. Tyvärr - men fullt naturligt - ger en rå utkrift av detta lite tråkigt formaterade namn på egenskaperna i JSON-filen.</p>
<p>Efter lite sökande fick jag fram detta:</p>
<blockquote>
<p>import csv<br />import json<br />import argparse<br /><br /><br />def camel_case(obj):<br />    for key in obj.keys():<br />        new_key = ''.join(x for x in key.title() if not x.isspace())<br />        new_key1 =  new_key[0].lower() + new_key[1:]<br />        if new_key1 != key:<br />            obj[new_key1] = obj[key]<br />            del obj[key]<br />    return obj<br /><br /><br />parser = argparse.ArgumentParser()<br />parser.add_argument("from_path", help="report")<br />parser.add_argument("to_path", help="")<br />args = parser.parse_args()<br />print(args.from_path)<br />f = open(args.from_path, 'r')<br />reader = csv.DictReader(f)<br />out = json.dumps([camel_case(row) for row in reader],<br />                 indent=2,<br />                 sort_keys=True)<br />print("JSON parsed!")<br /># Save the JSON<br />f = open(args.to_path, 'w')<br />f.write(out)<br />print("JSON saved!")<br />f.close()</p>
</blockquote>
<p>Ganska smidigt.</p> ]]></content:encoded>
					   
				</item>
                   <item>
					   <title>NDC Oslo 2017</title>
					   &lt;link&gt;/blogg/ndc-oslo-2017/&lt;/link&gt;
					   <pubDate>Tue, 18 Jul 2017 20:56:37 GMT</pubDate>
					   <guid>http://bibliotekarien.se/blogg/ndc-oslo-2017/</guid>
					   <content:encoded><![CDATA[ <p> En rapport fr&#229;n &#229;rets NDC Oslo  </p> <div>
<div>
<div>
<p>Det är tre år sedan sist, och nu var det återigen dags för NDC Oslo. Det är en konferens i det lite större formatet: Nio parallella spår, en stor mässyta, snygg inramning, robotar, det senaste inom VR att leka med, fria flipperspel och en klättervägg. Lite som jag tänker mig en storskalig konferens i Las Vegas.</p>
<p>I år var det tioårsjubileum för konferensen och det märks. Det är ett väloljat maskineri och det är en njutning att se det rulla på. Presentationerna startar på utsatt tid. Ljudet är perfekt. Det är aldrig köer. Listan på alla detaljer som lyfter konferensen från medelmåttorna kan göras lång. Stämningen är god hos både talare och publik, och det känns som om de verkligen lyckats få fram en egen stämning och kultur.</p>
<p>På en punkt är jag lite kritisk. Man ser nästan aldrig presentatörerna förutom på scen (och i båset hos .NET Rocks!). De hänger nämligen i någon form av Back stage-område. Jag tycker den typen av arrangemang är olyckliga. Det måste finnas andra former för att premiera presentatörerna eller få dem att känna sig lite mer omhändertagna än oss andra. Många frågor dyker upp långt efter en presentation och det är enklare att ställa den direkt än på Twitter.</p>
<p>En annan sak jag saknade i år var 2014 års något mer plattformsagnostiska program. Mark Rendles presentation <em>Why i'm NOT leaving .NET</em> var visserligen något på spåren, och där fanns andra exempel och perspektiv, men generellt hade det behövts lite mer bredd.</p>
<p>Konferensen startade med en inspirerande och orienterande - kanske även något normerande - keynote av Dylan Beattie om aktuella ämnen inom it och teknik. Den hjälpte verkligen till med att sätta stämningen för konferensen och får mig så här i efterhand att önska mig en keynote för varje dag. Jag tror det vore bra både för att sätta tonen och skapa ännu mer känsla av sammanhållning deltagarna emellan.</p>
<p>Ända sedan vi byggde Viola på Sotkcholms unversitetsbibliotek har jag varit inne på Event Sourcing och relaterade tekniker. Spårbarhet, möjligheten att spela upp alla förändändringar, fördelarna med att tänka i händelser istället för att reducera allt till CRUD, osv. Mathew  Mcloughlin gav i sin föreläsning <em>Thinking in evenets</em> en bra översikt och fick mig verkligen förstå hur Event Sourcing, CQRS, Micro Services och annat hänger ihop och vad "all the fuss is about"</p>
<p>NDC Oslo är en .NET-fokuserad konferens, men det finns gott om annat om man inte jobbar med plattformen. Som gammal .NET:are finns det dock några jag gärna lyssnar på när jag får chansen: Jon Skeet är en av dem. Om ni inte känner till honom tycker jag ni ska börja slå upp hans profil på Stack Overflow. Jag var på en presentation han kallade <em>Abusing C# more</em> där han lekte med C#-kompilern och fick oss att tänka efter vad som egentligen händer i de olika lagren. Så otroligt nyttigt och roligt på en och samma gång.</p>
<p>Udi Dahan visade med sin presentation <em>Microservices and Rules Engines – a blast from the past</em> på saker jag inte tänkt på när det gäller Microservice-arkitekturen.(jag har iofs inte tänkt så mycket på Micro services…) Hur bygger man och bibehåller en så ren/ortodox lösning som möjligt när kraven blir mer och mer komplexa och ställer krav på de olika tjänsterna att samarbeta och aggregera information.  Jag ska inte gå in på de olika detaljerna, men en sak jag verkligen tar med mig är faran med  att välja att först implementera de enkla kraven och arbetsflödenna ur en komplex domän vid projektstart.  Jag har tidigare försökt lösa normalfallet först och sedan borra mig ned i de mer komplicerade fallen. Jag kommer verkligen att omvärdera det tillvägagångssättet</p>
<p>Den andra dagen fick lite av ett säkerhetstema. Troy Hunt höll i vanlig ordning en bländande föreläsning som fick oss alla att häpna och skratta över andras dumheter för att i nästa sekund sätta skrattet i halsen när han visade på våra egna dumheter och potentiella sårbarheter.</p>
<p>En lite torrare men minst lika nyttig säkerhetspresentation höll Christian Wenz när han gick igenom årets OWASP-lista över säkerhetsrisker hos webbappliationer. Han betade av listan steg för steg och gav hela tiden bra och tydliga exempel. Jag rekommenderar att gå igenom den.</p>
<p>Den tredje säkerhetsföreläsningen höll Scott Helm i. Här gick han igenom olika tekniker för webbsäkerhet. Certificate Transparancy (CT), Certificate Authority Authorisation (CAA), Same-Site Cookies osv. Mycket nyttigt.</p>
<p>Det blev lite lättsammare mot slutet av dagen md Tiffany Rads <em>Tools and Technical Analysis of the Hacking in Mr. Robot: Is the Hacking “Hollywood” or Real Life?</em>. Hon berättade om sitt arbete med IT-säkerhet med en inramning från tv-serien Mr Robot och hur Hollywood uppmärksamt inhämtar uppslag från forskningsfältet till sina produktioner. Hon exemplifierade med klipp där hennes egen forskning materialiserats i olika scener. Stuxnet var bara början…</p>
<p>Fredagen var blandad, men jag valde ett lite mer organisationsinriktat spår. Det sparkade igång med Doc Norton, som lovade ifrågasätta mycket av de rådande tankarna på ett team som något statiskt och dyrt att förändra. Uppfylld av Wheelan, Tuckman och en aktuell diskussion på arbetet om de här frågorna bänkade jag mig längst fram.</p>
<p>Efter en genomgång av Tuckman's teorier och dess brister, utmaningarna med multitasking på både indivituell och team-nivå mynnade det hela ut i en teori om att allt blir mycket bättre om de anställda själva får välja sina team. Nu är jag kanske lite elak, men jag tycker inte det blev något kullkastande av rådande paradigm. Det hela utmynnade snarare i olika tekniker för hur man kan formera (och omformera) team så att man snabbare når de produktiva faserna. Om jag förstår det rätt så är det som skiljer Doc Norton från Wheelan att Norton tror att ett moget team med mogen process och kultur är mindre känsligt för nya medlemmar än vad Wheelan skulle hävda. Den här tanken leder till flera öppningar. Man kan till exempel addera medlemmar till teamet med syftet att på sikt dela teamet i två med bibehållen kultur och produktivitet. Det blir inte heller lika kostsamt att skicka andra projekt på ett existerande team.</p>
<p>Jag hade lite högre förväntningar på referenser och den vetenskapliga plattformen för hans påståenden. Det enda han refererade till var en ännu ej utkommen bok, Dynamic Reteaming (<a href="https://leanpub.com/dynamicreteaming">https://leanpub.com/dynamicreteaming</a>) av Heidi Shetzer Helfand. Det här var trots en väldigt tankeväckande presentation, och jag kommer att gräva ned mig ytterligare i ämnet.</p>
<p>Efter en bra föreläsning om konsten att ge och ta emot feedback och om hur modern molnarkitektur kan hjälpa till genforskare att studera cancer och även identifiera de starka generna hos en hipster på Grönelökka var det dags att sätta sig på tåget och åka hem.</p>
<p>NDC Oslo är en fantatstisk konferens. Åk på den om du får chansen!</p>
</div>
</div>
</div> ]]></content:encoded>
					   
				</item>
                   <item>
					   <title>HSTS</title>
					   &lt;link&gt;/blogg/hsts/&lt;/link&gt;
					   <pubDate>Thu, 13 Jul 2017 22:50:01 GMT</pubDate>
					   <guid>http://bibliotekarien.se/blogg/hsts/</guid>
					   <content:encoded><![CDATA[ <p> N&#228;r jag var p&#229; NDC Oslo nyligen s&#229; lyssnade jag p&#229; tillr&#228;ckligt m&#229;nga f&#246;redrag om webbs&#228;kerhet f&#246;r att f&#246;rst&#229; att HTTPS &#228;r bara b&#246;rjan. Det finns m&#229;nga fler saker man kan g&#246;ra. S&#229; nu n&#228;r det &#228;nd&#229; var dags att manuellt uppdatera certifikaten fr&#229;n LetsEncrypt passade jag p&#229; att lyfta sajten ytterligare n&#229;gra niv&#229;er. </p> <p>Inspirerad av föredragen från årets NDC har jag infört ett antal förändringar på bibliotekarien .se:</p>
<h1>HSTS</h1>
<p><a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security">HTTP Strict Transport Security (HSTS)</a> är ett sätt för servern att behålla kommunikationen över https även om något illasinnat skulle komma ivägen. Det här förhindrar kortfattat Man-in-the-middle-attacker och kak-kapningar.</p>
<p>En begränsning i HSTS är att den första förfrågningen mot servern är osäker eftersom klienten då inte känner till något om servern.</p>
<p>HSTS implementeras på webbservern genom att den konfigureras att skicka med en särskild header.</p>
<h1>HSTS preload list</h1>
<p><a href="https://hstspreload.org/">HSTS Preolad list</a> är en lista över de domäner som webbläsarna vet stödjer HSTS. Lägger man till och verifierar sin domän i den listan hamnar den hos de större webbläsarna och detta innebär att även den första förfrågan som sänds från klienten blir säkert.</p>
<p><a href="https://caniuse.com/#feat=stricttransportsecurity">Stödet för HSTS</a> är någorlunda stort bland webbläsarna.</p>
<h1>No-referrer och färre CDN</h1>
<p>För att skydda mina besökares integritet har jag också lagt till direktivet</p>
<blockquote>
<p>&lt;meta name="referrer" content="no-referrer"&gt;</p>
</blockquote>
<p>i HTML-koden på sidorna.  Jag har också hämtat hem skript och css-filer från olika <a href="https://en.wikipedia.org/wiki/Content_delivery_network">CDN</a>:s till sajten för att den vägen unvika onödig spårning. Att det låg kvar var helt beroende på lathet från min sida. Det är mycket snabbare att lyfta in ett nytt klient-bibliotek den vägen än att lägga upp det lokalt på servern.</p>
<p>Det som återstpr nu är Googles reCaptcha och Google Analytics. Jag tänker jag kommer att begränsa reCaptcha-anropen till de sidor där de behövs, samt byta ut Google Analytics mot <a href="https://piwik.org/">Piwik</a> på sikt.</p>
<p> </p> ]]></content:encoded>
					   
				</item>
                   <item>
					   <title>Gr8conf EU 2017 i K&#246;penhamn</title>
					   &lt;link&gt;/blogg/gr8conf-eu-2017-i-kopenhamn/&lt;/link&gt;
					   <pubDate>Sun, 04 Jun 2017 08:13:18 GMT</pubDate>
					   <guid>http://bibliotekarien.se/blogg/gr8conf-eu-2017-i-kopenhamn/</guid>
					   <content:encoded><![CDATA[ <p> Jag har varit p&#229; Gr8conf Europe. Det var en gemytlig konferens om programmeringsspr&#229;ket Groovy och dess ekosystem. Nytt f&#246;r i &#229;r var att de hade en heldag dedikerad till DevOps. 
 </p> <p>Jag har varit i Köpenhamn på konferensen Gr8conf Europe. Det är en konferens i det lite mindre formatet, men de lyckas ändå hålla med tre relevanta spår: två samtidiga sessioner och ett workshop-spår. Konferenslokalerna ägde rum i IT-universitetet i Köpenhamns moderna lokaler. </p>
<p><img width="500" height="500" src="/media/7127/gr8conf_500x500.jpg" alt="Gr 8conf"/></p>
<p>Jag kommer ju hit med Libris XL:s perspektiv, där vi använder etablerade Java-bibliotek och knyter ihop det med Groovy. I Ljuset av detta blir det lite väl mycket djupdykningar i Groovy-specifika bibliotek och ramverk. Men det är fullt naturligt. Programmet var ändå lagt så att presentationer om Grails-och annat gick att undvika till förmån för något mer relevant.</p>
<p>Presentationerna har överlag varit väldigt bra. Insatta, roliga, pedagogiska. Även om det var många stora namn där som höll presentationer så kändes de hela tiden som om de var en del av oss andra. Det är inte alltid det är så.</p>
<p>Tekniken har fungerat felfritt. Maten har varit god. Kaffet på rätt sida gränsen till för svagt. Jag deltog inte i några kvällsarrangemang, men de andra deltagarna så lagom trötta ut följande morgon, så jag tror de var nöjda med även de sociala bitarna.</p>
<p>Några highligts:</p>
<h1>Dag1</h1>
<h2>Venkat Subramaniam - The Art of Simplicity</h2>
<p>Venkat Subramaniam höll en väldigt inspirerande och roande keynote om hur svårt det är att hitta den där enkla lösningen som alla talar om. Vi har sedan Occam fått höra hur vi ska eftersträva den enkla lösningen framför den komplexa. Om det bara vore så enkelt. Han visade med många roliga exempel att vi sannolikt inte känna igen den enkla lösningen om vi så satt bredvid den på en parkbänk. Några tips på hur vi når den fick vi också.</p>
<h2>Hubert Klein Ikkink - Express yourself with Groovy DSLs</h2>
<p>Hubert Klein Ikkink, eller Mr Haki som de flesta googlande Groovy-utvecklare känner honom som , höll en presentation med ett något missvisande namn. Det var en timmes överblick över Groovys syntax och möjligheter som slutade med en genomgång av vad Groovy erbjuder när man vill skapa egna DSL:er. Väldigt bra presentation i högt tempo.</p>
<h2>Venkat Subramaniam - GPars Deep Dive</h2>
<p>En annan presentation i högt tempo var Venkat Subramaniams andra presentation för dagen. Här presenterade han Groovy-biblioteket för concurrency, Gpars. Väldigt pedagogiskt gick han igenom en stor andel av komponenterna i Gpars och förklarade när det lämpade sig att använda vilken komponent. En kritik jag har mot den här typen av presentationer av parallell programmering är att exemplen är för långt ifrån verkligheten. En lista av saker som ska processas samtidigt dyker normalt inte upp från ingenstans och resultatet ska normalt inte skrivas ut i konsolen, utan ska tas omhand någonstans och det är i de där gränserna som utmaningarna visar sig. Det var symptomatiskt att när ett exempel skulle anropa ett externt API så fallerade exemplet. Trots att API:et var mockat och inte utförde några egentliga anrop. Trots detta var det en väldigt imponerande presentation i sin helhet.</p>
<p><img width="500" height="500" src="/media/7128/mug_500x500.jpg" alt="Mug"/></p>
<h1>Dag 2</h1>
<h2>Jeff Scott Brown - Powerful Metaprogramming Techniques With Groovy</h2>
<p>En presentation jag sett fram emot var Jeff Browns presentation om GORM. Tyvärr utgick den, men den ersattes den av en presentation om metaprogrammering i Groovy. Också den av Jeff Brown. Väldigt bra presentation, och jag lämnade denmed en känsla av att Groovys enkelhet och uttrycksfullhet sträcker sig väldigt långt. Han visade bland annat hur enkelt det är att implementera sin egen version av ExpandoObject.</p>
<h2>Andres Almiray - Making the Most of Your Gradle Build</h2>
<p>Andres Almiray började med grunderna: Installation, initialisering (Gradle init) och lazybones. Nämnde fördelarna med Gradle Wrapper och så vidare.</p>
<p>Hur lång ska en byggfil vara? Andres Almirays tanke är att det som en byggfil innehåller är de avsteg man gör från konventionen. Och de avstegen bör vara medvetna. Tiden när man bootstrappade ett nytt Java-projekt genom att klistra in samma fil som man använde i det senaste projektet hör till det förgångna.</p>
<p>Han uppmuntrar oss också att flytta ut egna task-definitioner till egna separata filer och om nödvändigt skapa plug:iner. Det gör att man tar egna tasks på större allvar och gör dem bättre. Genom detta tas avsteg från konventionen på större allvar och får mer uppmärksamhet. Det gör också att man börjar leta efter redan existerande plugins och sänker därmed underhållskostnaderna för projektet.</p>
<p>Andres Almiray listade en stor samling Gradle-plugins vi borde titta på, men han nämnde särskilt följande:</p>
<h3><a href="https://github.com/ben-manes/gradle-versions-plugin">Gradle-versions-plugin</a> (<a href="https://github.com/ben-manes/gradle-versions-plugin">https://github.com/ben-manes/gradle-versions-plugin</a>)</h3>
<p>Håller ordning på vilka dependencies som har uppdateringar. Den kan nog bidra till bättre förvaltning av system som inte behöver så mycket underhåll. Ett Jenkins-jobb för det vore en enkel och billig sak.</p>
<p>license-gradle-plugin (<a href="https://github.com/hierynomus/license-gradle-plugin">https://github.com/hierynomus/license-gradle-plugin</a>)</p>
<p>Håller ordning på projektet så att copyright-och licensinformations-headers finns på rätt plats och med rätt information. Den håller även koll på licenerna i de dependencies som används.</p>
<p>versioning(https://github.com/nemerosa/versioning) ,</p>
<p>Versioning kan antingen skriva ut versionsinformation i konsollen när det körs, eller så skapas en fil med versionsinformation från ingående dependencies samt det egna repot (hämtat från git eller Subversion).</p>
<p>Ett tips jag missat är att man kan sätta Gradle i ett läge för "Incremental build " med -t.</p>
<h2>Mr Haki - Groovy Goodness</h2>
<p>Det svåra valet för dagen stod mellan Mr Hakis "Groovy Goodness" och "Groovy 2.5 update". Jag trodde att Mr Haki skulle vara det säkra valet. Här fick vi i ett rasande tempo ännu mer "Groovy goodness". Roligt med någon som är så insatt och samtidigt så pedagogisk.</p>
<p><img width="500" height="500" src="/media/7129/cph_castle_500x500.jpg" alt="Cph _castle"/></p>
<h1>Dag 3 - Devops day</h1>
<p>Dag tre var helt dedikerad till DevOps. Väldigt bra drag att skilja ut detta till en liten minikonferens. Jag följde de mer abstrakta föreläsningarna, men där fanns workshops och konkreta presentationer att följa.</p>
<p>Keynote</p>
<h2>Lars Kruse - NoOps - Beyond the DevOps Frontier</h2>
<p>Lars Kruse höll en kort presentation av fenomenet DevOps: Var uttrycket myntades, ur vilka behov rörelsen uppstod mm. Han väljer själv att försöka tala om Continuous delivery istället för DevOps, eftersom det förra är målet.</p>
<p>Sedan följde en längre utvikning om lean. Snabba upp processerna, korta av ledtider och att leverera små munsbitar ofta. Han stannade länge vid vikten av att - som i bilindustrin - stoppa processen när man upptäcker ett fel och åtgärda det innan någon får återta arbetet. Inget nytt, men det tål att upprepas och det fanns mycket att ta till sig när vi nu sitter i ett större projekt med många komponenter och beroenden som gör att vi lätt drar oss för att driftsätta till produktion.</p>
<p>För att se hur långt man har kvar till fulländning kan man använda sig av</p>
<p><a href="http://code-maturity.praqma.com/">http://code-maturity.praqma.com/</a></p>
<h2>Lee Fox</h2>
<p>Jag satt och lyssnade på två föredrag av Lee Fox under eftermiddagen. Bägge förtjänar egentligen sin egen bloggpost. Det första handlade om de kulturella hindren som står i vägen för att DevOps-ifiera en organisation. Han kom också med ett antal verktyg och taktiker som man kan använda för att vända eller överbrygga de här hindren.</p>
<p>Det andra handlade om svårigheterna som kommer med att vi börja sätta upp central loggning och instrumenteringfrån våra allt mer komplexa miljöer. Hans idé att lösa detta är att arbeta med att hitta "historier/stories" i datat och försöka hålla koll på dem med hjälp av Alerts och ChatOps.</p> ]]></content:encoded>
					   
				</item>
                   <item>
					   <title>https fr&#229;n Let’s Encrypt</title>
					   &lt;link&gt;/blogg/https-fran-let-s-encrypt/&lt;/link&gt;
					   <pubDate>Fri, 21 Apr 2017 14:24:24 GMT</pubDate>
					   <guid>http://bibliotekarien.se/blogg/https-fran-let-s-encrypt/</guid>
					   <content:encoded><![CDATA[ <p> Allt ska f&#246;rses med https. Nu &#228;r bibliotekarien.se med i klubben </p> <p><img width="376" height="246" src="/media/7126/ska-rmavbild-2017-04-20-kl-151607.png" alt="https_bibliotekarien_crhome"/></p>
<p>Så, då har jag säkrat upp bibliotekarien.se med https. Jag använder Let's Encrypts fria certifikat.</p>
<p>Det blir alltmer påträngande att gå över till https för webbsidor (och allt annat med för den delen). Inte nog med <a href="https://www.pluralsight.com/courses/https-every-developer-must-know">säkerhetsriskerna</a>. <a href="https://security.googleblog.com/2016/09/moving-towards-more-secure-web.html">Webbläsarna kommer snart att börja varna för webbplatser över http</a>. <a href="https://webmasters.googleblog.com/2014/08/https-as-ranking-signal.html">Google rankar https-sajter högre än de som kör över http</a>. O.s.v.</p>
<p>Edit: Idag kom ett <a href="https://hackaday.com/2017/04/19/you-think-you-cant-be-phished/">bra exempel</a> på att https bara räcker en bit på vägen.</p>
<p><a href="https://community.letsencrypt.org/t/web-hosting-who-support-lets-encrypt/6920">Många webbhotell</a> stödjer Let's Encrypt så till den grad att det bara är att klicka på en knapp för att säkra upp webbplatsen. Certifikaten förnyas dessutom med automatik var tredje månad.</p>
<p>Saknar webbhotellet dessa möjligheter men erbjuder shell-access finns möjligheten att sätta upp det här själv.</p>
<p>Mitt webbhotell saknar bägge möjligheterna, men tack vare att man får ladda upp andra certifikat än webbhotellets (tack för det!) så kan jag använda L<a href="https://certbot.eff.org/docs/using.html#manual">et's Encrypts manuella lösning</a>.  Den går kortfattat ut på att du kör ett program på en annan maskin. Du verifierar för programmet att du äger webbplatsen ifråga och sedan genererar den cerifikatet.</p>
<p>Ett krux med den manuella modellen är att detta behöver man göra om var tredje månad. Men det känns det värt.</p>
<p>När certifikatet är på plats och allt fungerar är det en trevligt om man ser till att användarna automatiskt flyttas över till https. Detta går naturligtvis att lösa på många olika sätt. Jag valde att göra det i min web.config  så att IIS förstår det.</p>
<p>Jag har dragit mig länge för det här, men väl på andra sidan kan jag inte förstå att jag inte tagit tag i det tidigare.</p> ]]></content:encoded>
					   
				</item>
                   <item>
					   <title>Fathead pizza with Metric Measures</title>
					   &lt;link&gt;/blogg/fathead-pizza-with-metric-measures/&lt;/link&gt;
					   <pubDate>Sun, 01 Jan 2017 18:12:30 GMT</pubDate>
					   <guid>http://bibliotekarien.se/blogg/fathead-pizza-with-metric-measures/</guid>
					   <content:encoded><![CDATA[ <p> 
Det h&#228;r inl&#228;gget h&#246;r inte till de vanliga &#228;mnena f&#246;r Bibliotekarien.se, men jag har tr&#246;ttnat p&#229; att omvandla de engelskspr&#229;kiga recepten till metriska m&#229;ttenheter. S&#229; nu l&#228;gger jag ut en egen version. </p> <h1>Näringsvärde</h1>
<p>Bara degen, 1 slice. Kalorier: 203 Fett: 16.8g Kolhydrater: 4g, varav sockerarter: 1g Fiber: 1.6g Protein: 11g</p>
<h1>Ingridienser</h1>
<p>170g / 4 dl riven mild ost</p>
<p>85g / knappt 2 dl  mandelmjöl</p>
<p>2 msk cream cheese</p>
<p>1 ägg</p>
<p>ev. 1-2 klyftor vitlök</p>
<p>ev ½ msk torkad rosmarin</p>
<h1>Tillagning</h1>
<ol>
<li> Rör ihop mandelmjöl, cream cheese och den rivna osten i en skål som tål mikrovågsugn. Kör i mikron på hög effekt i 1 minut.</li>
<li>Rör om. Kör i mikron i ytterligare 30 sekunder. </li>
<li>Tillsätt ägget, salt, rosmarin och andra eventuella smaksättare. Rör försiktigt ihop smeten.</li>
<li>Placera degen mellan två bakplåtspapper och kavla ut till runda pizzabottnar. Ta bort det översta bakplåtspappret . Om degen blir hård och svårarbetad, kör den åter i mikron i 10-20 sekunder så att den mjuknar. Observera att för lång tid i mikron gör att ägget koagulerar.</li>
<li>Picka hål i degen med en gaffel för att försäkra dig om att den blir jämnt gräddad.</li>
<li>Lägg bakplåtspapptret på en plåt och baka degen (utan fyllning) i 220 C i 12-15 minuter.</li>
<li>Ta ut plåten och garnera pizzan med den fyllning du önskar. Baka sedan pizzan i ugnen i 220 C  tills osten är smält (ca 5 min).</li>
</ol>
<p> </p>
<p> </p> ]]></content:encoded>
					   
				</item>

        </channel>
</rss>