About Lars

En systemutvecklare med renodlad programmering (Java, Perl, C, Bash, JS, JSP, HTML/XHTML, CSS, XML, XSL, SQL...) och grafisk bildbehandling (särskilt med GIMP) som specialitet.

Please leave a response…

If the response sounds autogenerated(too vague) or unrelated to the site content, the reply will be promptly purged! Please leave some thoughtful text that shows there’s a human being behind the response.

/Looking forward to hearing from you :-)

 

Arbete pågår / Ongoing work…

Eftersom det har smygit sig in svårhanterade radbrytningar i WordPress, så avvaktar jag med vidare publiceringar… Svårt att läsa text som är “sugrörsbred” brevid en bild…

Because of newly introduced strange line breaks in WordPress, I must put on hold further publications. Difficult to read “straw wide” text next to a photo….

Omega-3

Omega-3 fiskolja… Anledningen att jag snöat in på detta är att Omega-3 verkar ha en positiv effekt på Artrossmärta och inflammationer. Vissa kapslar med fiskolja påstår sig innehålla “1000” mg. De intressanta komponenterna är mängden EPA samt DHA. För mitt nuvarande fabrik är mängderna 300 resp 200mg. Så hur mycket behövs för att (påstått) uppnå smärtlindring?

Enligt en utländsk studie (https://kurera.se/fiskolja-hjalper-vid-artros-visar-studie/) uppnåddes märkbar effekt med upp till 2000mg fiskolja. Det motsvarade i undersökningens material av 800/400 mg EPA/DHA. Behandlingen pågick 8 veckor. Det påstods i denna undersökning att ingen ytterligare effekt fanns att få bortom 2000mg. Men för inflammationssmärta behövdes 3600 mg.

En annan källa, https://www.regenexx.com/how-much-fish-oil-should-you-take-for-your-arthritis-and-stem-cells/ påstår dock att man bör ta avsevärt mer än 2 sådana kapslar totalt (2000mg) per dag.

Intaget hos eskimåer av fiskolja motsvarar 28 st kapslar! Underligt nog förblöder inte ständigt eskimåer. Det är oerhört dyrt att äta (bra) fisk för att ev “bota” artros och inflammationer, fiskoljekapslar är nog den enda ekonomiskt rimliga utvägen. Haven lider dessutom av utfiskning…

Man kan konstatera att den nivå som max rekommenderas på den svenska burken med Omega-3 motsvar en matsked fisk… Fullständigt otillräckligt för någon som helst effekt. Det är viktigt att oljan kommer från leverantörer som garanterar miljömässigt hållbar samt kemiskt hälsosamma produkter. Krillolja tas upp lättare av kroppen, men är ack så dyrt.


Omega-3 fish oil … The reason I got interested is that Omega-3 seems to have a positive effect on arthrosis and inflammations. Certain capsules with fish oil claim to contain “1000” mg. The important components are the amounts of EPA respective DHA. For my current supplier the amounts are 300 and 200mg. So how much is needed to (allegedly) achieve pain relief?

According to a foreign study (https://kurera.se/fiskolja-hjalper-vid-artrosvisvis-studie/), a noticeable effect was achieved for up to 2000mg fish oil. It corresponded to the 800/400 mg EPA / DHA material of the study. The treatment lasted 8 weeks. It was claimed in this study that no further effect was found to get beyond 2000mg. But for inflammatory pain, 3600 mg was needed.

Another source, https://www.regenexx.com/how-much-fish-oil-should-you-take-for-your-arthritis-and-stem-cells/ claims that you should take significantly more than 2 such capsules, totalling (2000mg) per day.

The intake of eskimos of fish oil corresponds to 28 capsules! Strangely enough, Eskimos do not constantly bleed! It is extremely expensive to eat (fresh) fish to possibly “cure” osteoarthritis and inflammation, so fish oil capsules are probably the only economically reasonable way out. The seas also suffer from overfishing…

It can be noted that the maximum recommended level on the Swedish bottle with Omega-3 corresponds to a tablespoon of fish… Completely insufficient for any effect whatsoever. It is important that the oil comes from suppliers that guarantee environmentally sustainable and chemically healthy products. Krill oil is absorbed more easily by the body, but is rather expensive.

Intro till AngularJS 1.x

AngularJS (, Angular 2, Angular 4)

AngularJS är ett ramverk för att underlätta utvecklingen av enkelsidiga webbapplikationer. Detta låter kanske lite statiskt, men i ramverket ingår stöd för att ex koppla sidan till olika vyer, smart uppdatering av data, filtrering på synbara fält osv. Intrycket blir att du går till en annan webadress vilket inte är fallet.

Man kan fråga sig varför jag fokuserar på AngularJS 1 då det numera även finns Angular 2 och Angular 4. Då vissa tillägg endast finns för version 1 och den dessutom fortfarande (augusti 2017) är oerhört populär (> 50%) användare så nöjer jag hittills med att studera denna version 1.

MVC

Nomalt finns det ett sk “pattern” som kallas MVC (Model View Controller), men AngularJS är mer av Model View Whatever…

  • Model är själva datat som ska presenterat,
  • View är vyn, dvs den synbara webbsidan och slutligen
  • Whatever är allt övrigt; hantering av data, utseendefixar, innehållsfilter…

Med AngularJS “direktiv” kan en HTML-utvecklare med basala Javascript -kunskaper skapa relativt kraftfulla funktioner. Andra ramverk (och “bibliotek“) innebär även att du behöver kunna programmera i ex Java eller PHP.

Under ytan kan man dock i vissa lägen behöva ha en rejäl förståelse för hur AngularJS och Javascript samverkar. Det är en viss kunskapsplatå som behöver passeras innan man får en djupare förståelse för hur det hela kan fungera.

jQuery

Om man jämför med jQuery som är ett oerhört populärt bibliotek så ska man med AngularJS inte behöva gå ner på den lägsta DOM-nivån i HTMLen för handgriplig detaljhantering, mycket ska kunna hanteras likt HTML-taggar; jQuery kan även det se något kryptiskt ut, , men jämfört med standard DOM-programmering så blir ofta koden betydligt kortare och mer lättläst än den “råa” Javascriptkoden.

Det finns en light-version av jQuery inbakat i AngularJS för de tillfällen där det är mycket svårt att finstyra enbart via AngularJS -direktiv.


AngularJS is a framework for facilitating the development of single web page applications. This may sound a little static, but the framework includes support to e.g. link the page to different views, smart update of data, visibility filtering, etc. The impression is that you go to another web page which is not the case.

One might ask why I focus on AngularJS 1, since there are now also Angular 2 and Angular 4. Since many add-ons are still only available for version 1 and in addition currently (August 2017) are extremely popular (> 50%) users, I’m using this version 1 so far.

MVC

There is a so-called “pattern” called MVC (“Model View Controller”), but AngularJS is more of “Model View Whatever“…

  • Model is the actual data to be presented,
  • View is the view, ie the visible web page and finally
  • Whatever is everything else; data management, appearance fixes, content filters…

With AngularJS “directive” an HTML developer with basic Javascript knowledge can create relatively powerful features. Other frameworks (and “libraries”) also mean that you need to be able to program in Java or PHP for example.

However, under certain conditions you may need to have a solid understanding of how AngularJS and Javascript interact. A certain knowledge level needs to be passed before you get a deeper understanding of how it all works.

jQuery

Compared to jQuery, which is an extremely popular library, AngularJS does not always have to go down to the lowest DOM level in the HTML for easy-to-use detail management, it’s rather more handled like new HTML tags; JQuery can also look somehow cryptic, but compared to standard DOM programming, the code often becomes shorter and easier to read than the “raw” Javascript code.

There is a “light” version of jQuery inbox in AngularJS for those occasions where it is very difficult to fine-tune only through the AngularJS directive.

 

The fast moving JavaScript “market”

I found an interesting article on The Dark Side of Javascript Fatigue . The JavaScript world is littered by different frameworks, always “new shiny ones” to choose from, attracting large numbers of developers. How to prevail stability in the code if the current framework suddenly is deserted for the new framework leader?

Other languages have more durability in the framework environment. Something feels “immature” in the JavaScript world, I fully agree with the article writer. For government sites, who must keep accessible for many years, the stability is the most vitale thing to consider.

Excellent introduction to Junit 4 here.

Stockholm Jfokus 2016, del 3/3

AsciiDoc är ett dokumentformat som ska göra det enkelt att texta i näst intill vilken editor som helst och samtidigt smidigt kunna ange olika typer av textformateringar. Ca 2007 dök AsciiDoc upp som sökbegrepp på webben, och användningen börjar nu ta kraftig fart.

AsciiDoctor (hemsida: http://asciidoctor.org/ ) är ett verktyg skrivet i Ruby och fungerar som en formateringsmotor för ovan nämnda AsciiDoc-dokument. Exempelvis använder O’Reilly Media formatet AsciiDoc omfattande för sina publikationer, likaså GitHub-sajten. AsciiDoc klarar att omvandla till epub, HTML, PDF, TRF, XML, JavaDoc…
Det finns en omkompilerad AsciiDoctor, AsciiDoctor.js som kan köras i de flesta webbläsare (antar även IE). MEN då (ur askan i elden) måste först något som heter “Bower” köras för själva installationen av AsciiDoctor.js, vilket i sin tur kräver en paketinstallation av “npm” :- ) ….

Funktionella programmeringsspråk…
En udda session på Jfokus var demonstrationerna av fördelen med 100 % funktionella programmeringsspråk. Frege är ett exempel på ett sådant språk som är avsett att köras i JVM-miljön (vilket “kvalificerade” :-) Frege för Jfokus). Java 8 är givetvis inte ett renodlat funktionellt språk, men har nu i alla fall fått tillgång till grundläggande teknik för funktionell programmering.

Frege har stora likheter med Haskell (skillnader Frege/Haskell: https://github.com/Frege/frege/wiki/Differences-between-Frege-and-Haskell ). Frege löser exempelvis problemet med FizzBuzz () betydligt mer “elegant” än t.ex. Java, C, Perl…

Ordningsföljden på villkoren i koden för Java, C och Perl spelar en ibland en ytterst väsentlig roll, medan däremot Frege inte behöver en fastställd sekvens för villkor, utan beskriver snarare regler som räknas upp i valfri ordning.

Den Frege-session som jag deltog på (den förkortade varianten) var matematiskt inriktad, och jag hade aningen svårt att förstå hur det skulle användas för andra typer av tillämpningar. FizzBuzz -exemplet (se ex http://c2.com/cgi/wiki?FizzBuzzTest ) gav en del i alla fall. Mycket bra presentatör (Dierk König) från företaget Canoo (hmm, hörde ofta det namnet på Jfokus).

SonarQube är en öppen plattform för granskning av kodkvalitét under utvecklingens gång. Plattformen hjälper till med att skapa rapporter om duplicerad kod, kontrollerar att kodstandarder följs, stödjer enhetstester, undersöker kodkomplexiteten, varnar för potentiella buggar osv osv… Det finns plugin för Eclipse.

ReactJS återkom även i år, har en kraftigt ökande användarbas. Kräver dock nyaste varianten av JavaScript/ECMAScript, d.v.s. ES6 (se ovan) vilket utesluter Internet Explorer 11.

JRebel (tackar för T-shirten) återkom även i årets JFokus. Det är ett byggsystem för att snabba upp Java “deployments”, laddar ex enbart upp de klassfiler som har uppdaterats till servern.

Xrebel å andra sidan är en plugin för webbläsare (som ej fungerar på IE11) vilken profilerar dina applikationsprocesser, undersöker svaga punkter i koden som sänker prestandan, överdriven I/O (minns speciellt klumpig SQL-användning med suboptimala anrop), långsam serverrespons…

JRebel och XRebel är inte öppen programvara. Som privatperson kan man få använda vissa delar “gratis”, men måste då godkänna reklam för produkten på ex Facebook och Twitter.

En annan återkommande punkt från förra året 2015 var Nashorn (för mer info se http://www.oracle.com/technetwork/articles/java/jf14-nashorn-2126515.html ), en JavaScript-motor för JVM-miljön. Nashorn kan ta emot JavaScript från konsollen men har vissa begränsningar jämfört med vanlig JavaScript; Nashorn har t.ex. inte tillgång till ex “console”, “window” vilket alltid finns i en webbläsarmiljö.

Däremot kan Nashorn köra JavaFX, d.v.s. grafiska tillämpningar. JavaFX under JavaScript är inte riktigt samma sak som under Java utan har fått en något förenklad hantering. Se  https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/javafx.html

Afterwork…
image-20160209_175919  image-20160209_135714  image-20160209_152032

Bulle, kaka och semla (vissa fick/tog 3-4 st!)… Det bjöds på goda tilltugg i övrigt under dagarna; fisk och kyckling (för ickevegetarianer). Under “partyt” (som verkade tunnas ut ovanligt tidigt för att vara 10-årsjubileum) förekom jonglerare, styltgångare (styltorna gömda i de extremt långa byxbenen)  ett antal tävlingar, en positivspelare…

Sammanfattningsvis en hyfsat lärorik och välordnad konferens!

Stockholm Jfokus 2016, del 2/3

Ant(!), Gradle, Maven, JRebel…

Viss munterhet uppstod bland publiken när vissa stackare (gissa vilka) tvingades erkänna att de fortfarande använder Ant som byggverktyg. Jag upptäckte å andra sidan lite senare (som en tröst) att Oracle själva använder Apache Ant vid presentationen av Java 8 JDBC.

På Jfokus märks det överlag att mitt jobb inte ligger i frontlinjen med nya verktyg, ramverk osv. min arbetsplats har i och för sig också extrema krav på långvarig “support” vilket delvis kan ursäkta detta faktum.

 

Många av demonstrationerna på Jfokus förlöper enligt följande:
1. konfigurera och dra igång en webbserver (som oftast ej förekommer på mitt jobb) på
2. en Appledator (alltid(?) på Jfokus… Apple OSX har faktiskt en Unixdialekt i botten, “Darwin”)
3. starta en webbläsare (Safari eller Chrome, ev Firefox; har ALDRIG sett IE användas på Jfokus),
4. demonstrera ett ramverk e dyl (som jag sällan/aldrig tror används på mitt jobb).

Tyvärr inträffar ibland diverse småstrul fokus från vissa presentationer, det är mycket som kan gå fel. Alla de presentatörer som jag bevittnade hade dock stor erfarenhet och rättade snabbt till eventuella problem.

 

Apropå JavaScript så är ECMAScript 6 (ES6) den nya högintressanta versionen för “JavaScript”. Tyvärr stöds ytterst få finesser i ES6 av Internet Explorer 11 (IE11) vilket är vad som måste användas i mitt arbete.

Vad jag har förstått så har man beslutat att IE11 ska fortsätta användas, även efter det att Windows 10 har införts. Jag antar att man då kommer att köra i “Internet Explorer”-läget (det s.k. “Enterprise Mode“-läget för extra bakåtkompatibilitet) som finns inbyggt i Microsoft Edge (den nya “webbmotorn” från Microsoft. För mer info se https://en.wikipedia.org/wiki/Microsoft_Edge).

Info från Microsoft själva om varför de byter webbmotor: “Microsoft Edge: Building a safer browser”:
https://blogs.windows.com/msedgedev/2015/08/26/how-microsoft-edge-and-internet-explorer-11-on-windows-10-work-better-together-in-the-enterprise/

För tabell med detaljerad info angående ES6 -support för respektive webbläsare:
https://kangax.github.io/compat-table/es6/

Stockholm Jfokus 2016, del 1/3

Almiray Asciidoc Asciidoctor Azul Canoo ECMAScript 6 Frege Gradle Haskell Isomorphic JDK JET JQuery JVM Java JavaScript Knockout.js Lambda MVC-based Markdown Maven Nashorn Netflix Oracle PMD POJO-centric React Require.js SonarQube TripLingo …

Första anhalt på Jfokus 2016 var en keynote (“inledningspresentation”?) av Brian Goetz (språkarkitekt för Java på Oracle): “Move deliberately and Don’t break anything”. Webbplatsen IDG nämnde särskilt denna keynote (i rubriken hade de “Försvarstal…”) aningen kortfattat: http://techworld.idg.se/2.2524/1.649760/oracle-jfokus

Brian Goetz talade om att vid uppstarten av ett projekt så är friheten att välja lösningar för den önskade funktionaliteten som störst. När systemet efterhand börjar växa till sig kodmässigt så beskärs alltmer framtida lösningar. Systemanvändarna kräver dessutom ofta fler funktioner samtidigt som bakåtkompatibiliteten är viktig för dem.

Ibland lämnas t.o.m. buggar kvar i systemen därför att många användare och programvara förväntar sig att de finns… I projekt som startar under stor tidspress så görs ofta misstag som lätt försvårar framtida förbättringar, en s.k. “Teknisk skuld” (Scrum-begrepp) byggs då upp. Se ex http://jimmyjanlen.com/2010/05/10/teknisk-skuld-ar-mera-an-bara-ful-kod/

De ansvariga i Oracle -teamet för Javas arkitektur lägger stor vikt vid att nya “finesser” inte ska kunna innebära framtida överraskande sidoeffekter. Arkitekten Brian Goetz tog upp exempel på områden där Javas prestanda fortfarande (inklusive Java 8) lämnar en hel del övrigt att önska.

Oracleteamet siktar därför på att radikalt förenkla och därmed snabba upp hanteringen av vissa datatyper som har överdrivet komplexa konstruktioner. Se ex “Generic Specialization” för de som vill läsa vidare (kommer tidigast i Java 10): http://www.jesperdj.com/2015/10/12/project-valhalla-generic-specialization/

Java kan i nuläget inte konkurrera prestandamässigt med t.ex. C eller C++ i många realtidsapplikationer som exempelvis “Big Data”. Wikileaks, f’låt Wikipedia ;-) har en bra förklaring på fenomenet Big Data: https://sv.wikipedia.org/wiki/Big_data.

En bra länk som visar på de problem som Java har med betungande objekthantering finns på http://programmers.stackexchange.com/questions/162546/why-the-overhead-when-allocating-objects-arrays-in-java.

localStorage; lokaldata med HTML/Javascript

localStorage kan användas för att lagra vissa data lokalt på din PC/mobil/platta… Datat lagras endast som textsträngar; andra typer av data ex numeriska värden måste “strängifieras” (finns flera färdiga funktioner för det).

Stödet är faktiskt närmast komplett så här år 2015, har varit så i stort sett sedan 2010:
localStorageSupport

För att hantera ett localStorage behövs i grunden endast några få funktioner:

  • Spara data: localStorage.setItem(‘dataName’, ‘thevalue’);
  • Hämta datat: localStorage.getItem(‘dataName’);
  • Ta bort datat: localStorage.removeItem(‘dataName’);
  • Rensa hela “lagret” av data: localStorage.clear();

Något som kan vara en nackdel är att hanteringen av localStorage sker synkront, dvs ej parallellt med exempelvis skärmuppdateringar. Det omnämns flera ramverk på Internet som möjliggör asynkron access men det verkar resultera i en mer komplex kod. Speciellt synd då localStorage i grunden är uttänkt att vara oerhört lättanvänt.

Ett småskaligt exempel på att använda localStorage är en shoppinglista där du kan dra inköpsobjekten till “inhandlingsordningen”. Även ha flera listor, en för varje affär. I localStorage lagras all data som enkla textsträngar så man måste ibland vara lite “trixig” i beskrivningen av datat. Ex:

localStorage.setItem(‘Willys@grönsak’, ‘Paprika’);

Alternativt kan data ursprungligen vara lagrat i en annan form än en sträng, ex XML:

Detta kan då “strängifieras” till “shop@willys@vegetable@paprika“. Det finns flera ramverk, t.ex. JSON som kan hjälpa till med strängifieringen ifall det verkar vara alltför mycket jobb att själva koda en lösning. JSON är lite för stort för att ta upp i detalj här. Enkelt uttryckt är det ett sätt att i Javascript beskriva ett objekt, precis som jag ovan gjorde med XML.

I JSON kan det se ut så här:

Därefter måste utvecklaren tänka på hur ovan strängs data ska passa med ex
localStorage.setItem(‘dataName’, ‘thevalue’);… En viss egen stränghantering är uppenbar för att kunna få exempelvis “kind” att hamna i “thevalue” :-) .

Det är länge sedan jag sysslade med HTML/Javascript o dyl, localStorage och JSON är helt nytt för mig. Min arbetsgivare (under perioden 2001-2005) tillät inget annat än “standardlösningar” där det aldrig fick gå fel i en någon webbläsare (Mozilla, IE6, Opera). Endast basal HTML4, CSS1 och Javascript/ECMASCRIPT 3 tilläts.

localStorage existerade ännu inte vid den punkten, medans JSON visserligen fanns men det var inget som tilläts på min arbetsplats; inga externa ramverk e dyl fick användas.

Läsa XML-filer från Java

Nedan redovisad kod kräver att man har Java 7 (för stöd av DocumentBuilder) och uppåt…

OBS: I kodlistingarna nedan så stämmer inte radnumreringen mellan större block av kod respektive mindre redovisningar av densamma kod, dvs samma rad får olika numrering. Beror på pluginen “Crayon…” (ny för mig) som möjliggör rimligt läsbara kodlistningar.

XML -formatet .xspf används för mediafiler och stöds ex av den fria videovisaren VLC. Man bör kontrollera att XML -filen är valid (korrekt). För detta finns t.ex. sajten validator.xspf.org. Java -tolken kan bli förvillad om något är “skevt” i XML-filen :-) …

En .xspf -fil ser ut något i stil med det här:

Det handlar alltså om en spellista, ungefär som en LP -skiva med spår numrerade 0, 1, 2…
.xspf -filen börjar i enlighet med alla valida XML med en innehållsdeklaration <?xml version=”1.0″ encoding=”UTF-8″?> på rad 1. Därefter kommer taggen

Den pekar ut källan till xml-formatet samt i mitt fall hänvisar till uppgifter som gäller den aktuella videospelaren VLC. Sedan en titel, vilket spår (“track”), och slutligen används vlc:id för att berätta om ordningen som filerna ska spelas upp. Lägg märke till taggarna location och duration.

Duration är under hur lång tid som “spåret” pågår, mätt i millisekunder. Jag är ofta intresserad av den totala tiden för en spellista. Det man behöver göra är att:

a) summera alla tider som anges vid duration,
b) dela med 1000 (för sekunder), samt
c) dela med 60 (för minuter).

I värsta fall också dela med 60 igen för timmar :-) …

Detta är ett givet exempel för att testa Javas förmåga att enkelt hantera XML -filer. För att gå igenom (traversera) en XML -fil med Java så behövs följande:

uppe vid package -delen, dvs i början av koden. Inne i main() -klassen ska

finnas. “Try” i följande kod beror på att fel/”exception” kan kastas vid försök att läsa XMLen:

Ovan har vi redan fångat upp alla de “noder” med taggen “duration” i XML-listningen längst upp, dvs de noder med innehållet 486166 respektive 401750. OBS det är alltså en lista med noder, ännu ej direkt text eller siffror som går att summera.

För att först hämta node-innehållet till en teckensträng och sedan konvertera till ett summerbart tal så måste man göra enligt följande:

Då hamnar först texten i “row“, och siffervärdet för första strängen “486166” som blir ett heltal 486166.

Detta tal lagras i variabeln “timeTotal“. För att loopa igenom alla rader så använder jag “nodes.getLength()”.

Så med
1. variabeldeklarationer blir uttrycket med
2. loop,
3. konvertering till tal, och avslutningsvis
4. summering av antalet millisekunder (division med 60000 för att få antalet minuter):

Komplett programlistning:

Das ist Alles für heute!

“Regular expressions”

“Regular expressions” (for short, I henceforth use “RE”)…
That’s a strange expression :-) . But what is it really about?

The use of RE is to find and extract text/data information, mostly from a web form, check a Excel cell, lookup in a database or scan through a text list. The technology behind RE is really fascinating.

I had myself by accident in the middle of the 80s a need to search for text on a cassette tape :-) , a very long time ago… And invented a simple sort of RE.

I had no idea at the time that there already existed an established way about how to implement it. The syntax is mostly standardized now among different languages.

Let’s look at an example; a bank account is showing the following amounts:

-32432
4543
3346
-626
9463
-56.99
25 –Sum
1

Maybe you want to only see the negative numbers in the list. The RE for this might be:

“-“

which catch, or grep :-x (I say “grep”, because it’s a very common command in Linux/OsX terminal…)

-32432
-626
-56.99
25 –Sum
-36

But that “Sum” line looks a little “off”. We might want to filter that away with

RE = “^-” :

-32432
-626
-56.99
-36

The “^” tells the computer that we only want “-“ at the absolute beginning to be listed.
We could extend this to only show rounded number, and skip the -5.99 number with

RE = “^-[0-9]+$” :

-32432
-626
-36

“^-[0-9]+$” …!?

1. “^” at the very beginning is used to catch all lines starting with “-“,
2. “^-” .  Allow to follow with only the numbers “0”-“9”,
3. “^-[0-9]” .

But we are not done there. This would also catch “-56.99”, but we only want rounded numbers, no “.” decimal point,

4. The “+” sign means at least one of “0”-“9”, i.e. “[0-9]+“, so we get

RE = “^-[0-9]+” .

5. End of the line is marked by the “$” character.

So we get

RE = “^-[0-9]+$” :

-32432
-626
-36

Samples list (may not work in all environments, because not 100% compatible RE engines everywhere):

Positive Integers ^\d+$

Negative Integers ^-\d+$

Integer ^-?\d+$

Positive Number ^\d*\.?\d+$

Negative Number ^-\d*\.?\d+$

Positive Number or Negative Number ^-?\d*\.?\d+$

Phone number ^\+?[\d\s]{3,}$

Phone with code ^\+?[\d\s]+\(?[\d\s]{10,}$

Year 1900-2099 ^(19|20)\d{2}$

Date (dd mm yyyy, d/m/yyyy, etc.)

(In some “dialects” of RE you can use “\d” instead of “[0-9]” which means less typing…)

Site for trying out regular expressions for yourself:

Try regular expressions

Have fun!

Linux Mint 17.2

thumb_cinnamon

Precis som med Windows 7 relativt Windows Vista, så har en rad prestandaförbättringar gjorts i Mint 17.2.

Speciellt har grafiken snabbats upp genom att undvika onödiga grafiska uppdateringar och överflödig visning av småbilder i gränssnittet. Det bör alltså fungera ännu bättre än tidigare på lite äldre datorer. Än bättre stöd för flera skärmar.

Dock varnas för vissa Nvidia grafikkort som initialt kan innebära en viss utmaning att få igång… Kontrollera vilka Nvidia som kan tänkas krångla på exempelvis sajten “Linux Nvidia graphics drivers”.

Se avsnitt “Solving freezes with NVIDIA GeForce GPUs”.

Har du en bärbar dator med inget stöd för det inbyggda grafikkortet, så… Min skrivare är gravt Linux-inkompatibel, den är å andra sidan knappt Windows 7-kompatibel heller. Ett liknande problem fick jag med ett väldigt bra, relativt nytt ljudkort. Plötsligt kände inte Creative Labs för att göra drivrutiner till det längre.

En besvikelse för mig var att distributionen Mint 17.2 fortfarande inte har Java 8 som standard; jag blev därför nödgad att “manuellt” installera de nyaste Linux-versionerna av Eclipse, Netbeans och JDK8. Jag vill ju snart kunna testa de nya verktyg/tekniker som har lagts till i version 8 av Java.

Jag använder för tillfället JodaTima för programmering av datum i ett par Eclipseprojekt, men måste senare kolla hur man går över till det datumpaket som finns i Java 8, SJR310. Mycket kunskap användes från JodaTime av den ursprunglige utvecklaren själv och implementerades i JSR310 åt Oracle (som ju numera står bakom Java JDK).

Det datumpaket som ingick i Java 7 och tidigare var bitvis katastrofalt dåligt konstruerat. Oerhört märkliga resultat kunde fås utan omfattande tester. JodaTime hade vissa brister med zonhanteringen, detta är också förbättrat i JSR310.

Hemsidan för Linux Mint: Linux Mint, engelska.

English text:

Just as happened with Windows 7 vs Windows Vista, you have a number of performance improvements made in Mint 17.2 since the earlier version. Linux Mint 17.2 also have a long time support (LTS) until 2019.

Specifically, the graphics have speeded up by avoiding unnecessary graphical updates and redundant small pictures are displayed in the interface. It should therefore work even better than before on some older computers.

Even better support for multiple monitors. However, be warned for some Nvidia graphics cards that initially may pose a particular challenge to get started… Check which Nvidia graphics cards that might work well at the site …Nvidia Graphics Drivers…

See section “Solving freezes with NVIDIA GeForce GPUs”.

If you have a laptop with no Linux support for the integrated graphics card, well … My printer is severely Linux incompatible, it is on the other hand almost not Windows 7 compatible either. A similar problem; I once had a very good, relatively new sound card but suddenly not Creative Labs to make drivers for it anymore. So it’s now resting in a drawer…

One disappointment for me with the distribution Mint 17.2 was that it still dont have Java 8 by default; I was therefore forced to “manually” install the newest Linux versions of Eclipse, Netbeans and JDK8. I want to soon be able to test the new tools/techniques that have been added in version 8 of Java.

I’m currently using JodaTime for the programming of date functionality in a few Eclipse projects, but must later check how to move beyond the date packages available in Java 8, SJR310.

Much knowledge was used from JodaTime by the original developer himself and implemented in JSR310 for Oracle (which now stands behind the Java JDK).

The date package that belonged to Java 7 and earlier had terrible bugs. Extremely peculiar results could slip through without extensive testing. JodaTime had some flaws with the timezone handling, this is also greatly improved in JSR310.

The website for Linux Mint 17.2.

“Udda” erfarenhet av programspråket Java


Min väg till att lära mig Java var lite udda…

En chef kom en dag (året var ca 2010) förbi mitt skrivbord och ville ha hjälp med ett akut problem; ett internationellt jobb skulle ha varit klart redan för 3 år sedan(!) och nu började det bli panik! Känslan var också att en hög chef hade brustit i sin kontroll att få jobbet gjort, och nu skulle det göras, helst “osynligt”, med så lite timdebitering som möjligt.

Jobbet innebar att bearbeta XML-filer från/till diverse länder. Att konvertera/exportera våra “platta” filer till XML-filer, validera XML-filer, “hacka upp” dem i hanterbara storlekar. Vissa filer hade en storlek på över 2 Gb! Därefter validera att de var syntaktiskt korrekta samt paketera dem i zipfiler på upp till 200 st.

Av någon anledning klarade ex inte Tyskland av ens 30 Mb -filer… Vi landade slutligen på (ca, kan ju inte minnas allt exakt :-) ) 12Mb -block. Min kollega föreslog VB (Visual Basic), men jag ansåg det vara alldeles för långsamt. Att processa 2Gb -filer som skulle kontrollera/justeras på 15-20 olika sätt per rad skulle gå alltför sakta. Jag plockade istället ihop ett Javaprojekt bestående av små “filverktyg”, för att bearbeta filerna på diverse olika sätt.

Java hade några år innan infört något som kallas “just-in-time” (JIT) -optimering, och jag har för mig att vi kunde bearbeta filerna i en hastighet av ca 12Mb/sekund. Vi a) införde en ny regel/metod, b) testkörde, om fel: c) justerade, d) testkörde igen…

Lite fulhack, men det var ju bråttom, bråttom! Efter ca 2 månader började länderna, ca 30 st bli nöjda med levererat data. Javakoden överlämnades till en annan programmerare som skulle stoppa in det hela in i en större server. I fortsättningen skulle framtida filer hanteras “on the fly” via den servern.

Jag har alltså “inte suttit som en normal Javaprogrammerare” i ett större projekt… När jag nu vill börja studera Java så märker jag att vissa egendomliga “”Java/OO (ObjektOrienterat)-uttryck”” cirkulerar som jag aldrig behövde beröra; “aggregation” , “factory pattern”, “heterogeneous collection”…

Java 8 kom ut förra året med vad jag förstår ett stort antal förbättringar. Förhoppningsvis lyckas jag komma in i Java -världen, då det är nutidens “Cobol” bland programspråk, finns överallt. Själv har jag annars sysslat med Perl, C, Unixskript, HTML/CSS/JS… och alla andra akronymer som finns inom webbvärlden :-) . Börjar bli länge sedan med sådant också, HTML5 var det exempelvis inte tal om när jag jobbade med webbutveckling. Snarare XHTML (som inte längre verkar vara inne).

Long time, no see…

Jag har gått vidare från G3258 -processorn till en i5-4690K.
Till skillnad från den förstnämnda processorn så körs i5:an i standardhastighet. Temperaturen håller sig kring 29-34 grader. Om den börjar kännas långsam i framtiden så finns det alltså gott om överklockningsutrymme.

Har även satsat på 16Gb minne eftersom det erbjöds billigt, antar att DDR4 dominerar nästa år.

En rolig sak har hänt sedan sist; jag köpte en låda med diverse “datorskräp” vid Odenplan för ca 400 kr. En 2.5″ 340Gb hårddisk (bra för backup), en riktigt bra CPU-fläkt, ett mycket bra moderkort (775) och så en Q9550 -processor på moderkortet!

Q9550 var en av de absolut bästa processorerna för ett antal år sedan. Den finns fortfarande med bland “high end”-processorer på en av de mest kända benchmark -sajterna (www.cpubenchmark.net). Q9550-processorn, en 6 år gammal modell, har fortfarande drygt halva prestandan av min i5-4690K.

Undrar om jag uppgraderat med i5 om jag hade hunnit hitta denna Q9550…

Till slut föll det sig som så, att min mamma fick processorn, förpackad i det gamla speldatorchassit från Antec (1080?) med 4Gb minne + 32 bits Win 7. Den datorn duger extremt bra till att surfa med, kolla på SVT Play (i hennes fall) och andra internetärenden. Datorn hade nog klarat World of Warcraft på hög grafisk inställning, ifall den nu hade haft ett bra grafikkort…

Z97 moderkort
vs G3258 (en Pentium)

Vad många “tyckare” inte tänker på är att Pentium Anniversary Edition (G3258) i kombination med Z97 ger en bra plattform att börja med; uppdatera BIOS på Z97 -moderkortet med stöd för Haswell/Devil’s Canyon-generationen och vänta på att priserna för DDR3 sjunker ytterligare med anledning av DDR4 -introduktionen.

Efter ett halvår/år så faller även priserna för i5- och i7 -processorerna. Man kan då plocka upp ett billigt, överklockningsbart moderkort (vilket bl.a. ASUS har utlovat) och köpa en i5/i7 -processor.  Man har då en bra plattform för en billig G3258 -plattform med bra prestanda för spel och kan bygga vidare på en högpresterande i5/i7 för den tidigare datorn.

“Knepet”, eller kanske haken, är att hugga en i5/i7 av generation Haswell/Devil’s Canyon i rätt tid innan lagren tar slut (och man ändå sitter där permanent med en G3258 -processor). För problemet är ju att två trådar i framtida program kan vara en rejäl stötesten, en i5/i7 kan förbubbla livslängden på datorn om bara datorkomponenterna håller vill säha. Just my 2 cents :-) .

Min 4,5 GHz G3258 känns för övrigt “tillräckligt snabb” för vad som helst just nu, men framtiden kan snabbt överraska en ibland… Och man hade önskat en processor med fler trådar än 2.

M.2, the future SATA replacement

Currently the main method of accessing SSD drives are through the SATA Express connectors. Due to recent development of speed for premium SSD drives, the maximum speed possible have been reached, about 6Gb/s. So what did the industry invent to be the next generation of data access devices? The M.2 specification, using a combination of PCI Express lanes and one SATA port.

The first place to look for a M.2 enabled motherboard are the H97 and Z97 chipsets (what’s the difference !?) from Intel, no check on AMD (sorry); if you need M.2 performance, you likely also need the latest Intel CPU:s…

If you plan to expand with more SSD enabled devices or PCI Express card, there is a caveat; as  M.2 uses these two other “older” connectors for it’s own use, you need to be sure that “enough is left” on the motherboard…

Next year, 2015, the DDR4 memory will have made a big impact and the DDR3 will starting to become the minor player relative DDR4. But already the DDR3 specification allows such an abundance of memory (often 32Gb on many budget motherboards!), and is also quite affordable in large quantities. And the DDR4 will cost a premium the first year(s), so will the M.2 devices.

My tip ? In 2014/2015: Invest in a solid DDR3/SSD Sata Express combination with a newer mid level CPU of the latest generation. The performance difference vs DDR4/M.2 will likely be almost indiscernible, so why ruin your economy to make a subtle performance improvement?

Just make sure that the motherboard have a M.2 connection and enough expandability for SATA devices and memory. It doesn’t hurt to be able to overclock the CPU slightly if it starting to “lag” around 2017…

Intel Roadmap 2014 and forward

IntelSkylakePlatformDetailsThe nearest “year” (365 days…) is packed with new Intel chipsets and CPUs. We just had the arrival of Haswell, then came Haswell Refresh (previous month); here you maybe have heard about “Devil’s Canyon“.

A generation called Broadwell will arrive in late 2014, Then we have (not finally, but…) Skylake a few months (?) later after Broadwell… This is a crazy dense packed Intel roadmap ! We have a mix of CPU sockets, memory types, PCI Express, SATA versions…

Also some nameing schemes add to the confusion. Why is the “Pentium Anniversary Edition” not named with a “K” on the end (to emphasize the overlockability) like the previous CPUs) ? The Pentium Anniversary Edition will instead be named G3258

Z87 and Z97 will soon not be the (almost) only chipset types that can be used for overclocking, to allow cheaper motherboards to be used for the G3258. H81, B85…

 

Nästa år, ny dator

Artikeln kommer att uppdateras kontinuerligt, jag ser framför mig många länkar som behöver skapas, med ytterligare info.

Tillfälligt har jag landat på en dator som jag fick av en bekant. Ca 7 år gammal dator! Det mest irriterande med den är fläkten för processorn som regelbundet rusar upp i högre varv… Har försökt dämpa ljudet, lyckas inte helt. Kanske vänjer jag mig.

Jag har satt i ett 3 år gammalt fläktlöst grafikkort, och installerat en extra hjälpfläkt i chassit (det är varm på sommaren ibland, bäst att gardera med kylning). Grafikkortet klarar HD-filmer, men med en relativt hög processoranvändning, ca 60-80 procent användning.

Dessutom har jag satt i 4Gb internminne, så det räcker och blir över. Dessutom kör jag Linux Mint 17 (Mate), ett riktigt trevligt operativsystem. Allt fungerar, trådlöst, grafikkort speciellt att nämna. Men jag har dragit en nätverkskabel till 100Mbit -routern eftersom lägenheten dämpar hastigheten avsevärt… Eller är det ett kraftlöst wifi-kort i datorn som inte klarar mer än 24-28 Mbit/sek…?

Men mycket ny hårdvara är på gång, dessutom kommer Windows 9 (tidigt ?) under nästa år.

 

Hårdvara

Nästa generation processorer från Intel, tillsammans med ny standard för moderkort. Hmm, Skylelake OCH Broadwell -standarder från Intel nästa år! Skylake kommer att vara sanslöst kraftfullt, och dyrt. DDR4 kommer inte direkt heller vara billigt för de som behöver tänka på en budget :-) .

Själv “nöjer” jag mig med Broadwall, “enough” is enough ! Eller faktiskt nuvarande Haswell Refresh -generation med DDR3. Redan en processor från Haswell Refresh är mellan 100% till 400% snabbare än datorn som jag just nu kör.

Som sagt, ny minnestyp DDR4. Även en intressant länk från IT World… Densiteten kommer att öka avsevärt med DDR4, redan finns det en 128Gb minnesmodul!

Nödvändig spänningsmatning för DDR4 faller från 1.5 V (för DDR3) till 1.2 V. Speciellt på servrar är dessa två punkter oerhört positiva, är i mindre utsträckning intressant för hemanvändare. Vi får se hur länge det dröjer innan DDR4 har ersatt DDR3 som “main stream”. Jag gissar på 2016…

Ny typ av anslutning, SATA Express. “Idiotsnabb” anslutning för hårddiskar.

Fortsättning följer…