Kategori: Programmering

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.

 

Programmering

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.

Övrigt Programmering Webbläsare

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!

GUI/gränssnitt Programmering Webbläsare

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/

Programmering Webbläsare

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.

Programmering

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!

Programmering

”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!

Programmering


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).

Programmering

”Java 8 – What’s in it for you?”

Venkat Subramaniam (professor på Houston-Universitetet) höll en föreläsning (med titeln ”Java 8 Language Capabilities – What’s in it for you?”) om vissa av de nyheter som Java 8 för med sig.”Streams”, ”Lambda” samt ett bättre API (JSR310) för hantering av datum/tid är de största nyheterna i Java 8, vad jag förstod.

Föreläsaren var oerhört pedagogisk och dessutom väldigt underhållande. Korta stunder var dock tempot rejält uppskruvat…

En demo gavs på slutet med parallellism. I ett första exempel kördes en vanlig sekventiell körning med anrop till en Yahoo-server för att komma åt en viss typ av börsdata.

Vid det andra tillfället användes parallell körning, där uppgiften spreds på separata processorkärnor och/eller trådar (antar det var bägge…). Skillnaden innebar en förbättring med en faktor 6:1!

 

Efteråt kom jag dock på att något av datat borde ha hamnat i något (snabbt) cacheminne i exempelvis internminnet eller hårddisken. Det realistiska skulle nog ha varit att köra den sekventiella versionen av programmet en gång till.

Hur som helst, att ändra Java-koden från att vara ”enkelkörning” till att utnyttja parallelliserad körning var chockerande enkelt, ett enda nyckelord extra behövde läggas till, sedan en snabb omkompilering av koden. ”Ta-da”…!

Han visade även hur man med Lambdatekniken kunde frångå att i stort sett instruera datorn i detalj HUR något skulle utföras för ett visst önskat resultat. I den slutgiltiga ”Lambda” -lösningen beskrev koden däremot enbart VAD som skulle erhållas.

Den virtuella motorn var fri att själv optimera körningsmetoden; parallellt? Sekventiellt? Hur skulle trådningen delas upp på kärnan/kärnorna? Allt detta slapp programmeraren att lägga ned mycket arbete och tid på att lösa, dessutom oftast med ett avskräckande dåligt resultat…

Den 18:e mars ska Java 8 lanseras, den s.k. ”Release Candidate”-versionen släpptes faktiskt IDAG (den 4:e februari).

Jfokus 2014
Jfokus 2014 i Stockholm

 

 

Övrigt Programmering

Jfokus 2014
Jfokus 2014

Diverse avhandlat under Jfokus 2014

  • JsFiddle ( http://jsfiddle.net )  En sajt för att kunna utveckla HTML, JavaScript, CSS direkt i webbläsaren. Kontrollera utresultatet, dela koden… Väldigt snyggt & bra verkar det som. Fungerar t.o.m. (i stort?) med IE9.
  • Runnable.com ( http://runnable.com )  Kör programkod för diverse olika språk/miljöer (Dart, C++, Python…), utan några lokala installationer. Tyvärr fungerar det inte för mig, beror kanske på VPN, behörighet(er), IE9.
  • AngularJS ( http://angularjs.org/#!/ )  :      Du ”bygger ut” HTML en med nya taggar som i stort sett är egenskapad JavaScript-kod (tillsammans med grundplåten från AngularJS). GUIet och underliggande servermiljö kan kommunicera i bägge riktningar.

 

Tyvärr är Internet Explorer IE 9 som används på mitt jobb alltför ålderdomligt; ”världen utanför” använder normalt Firefox, Chrome eller IE 10/11 (!!!)… I rest my case.

 

  • Orion Web (http://www.eclipse.org/orion ),  Codenvy ( https://codenvy.com ), Cloud9 ( https://c9.io ),  JazzHub ( https://hub.jazz.net ) : Syftet med ovan projekt/sajter är att möjliggöra utveckling helt online; molnbaserat, interaktivt… Jag fick inte så mycket intryck av projekten, inga direkta demos gavs. Samtliga verkar väldigt bra, men vilken är bäst…?
  • The Checker Framework ( http://types.cs.washington.edu/checker-framework )   Detta är ett ramverk som lovordats på sistone. Syftet med ramverket är att finna svagheter och brister i din Javakod.     Det hjälper även till att förhindra NPE (”Null pointer exception”) där något som ska ha ett värde är oinitierat.
  • Även säkerhetsrisken SQL-injektioner (som utförs av hackare) ska kunna förhindras.    Ramverket hjälper även till med att påvisa diverse andra brister som påträffas i koden innan kompilering till körbar kod har skett.
  • ”Big Data” ( http://en.wikipedia.org/wiki/Big_data )Hur man bäst bör hantera enorma datamängder gicks igenom under en session. Värdet av att kunna ett antal grundläggande tekniker för anrop, sortering, komprimering, spegling av data… Att välja fel arkitektur kan vara direkt förödande för prestanda och stabilitet.

Det gavs t.o.m. ett exempel på hur en felaktigt utformad Javakod kunde ha en direkt negativ effekt. Viktigt var bl.a. att i största mån undvika onödig kopiering/omkringflyttande/återreturnerande av data, utan istället bearbeta datat ”på plats” där det redan finns.

I Java höjdes även ett varnande finger för att vissa sätt att hantera data på ett effektivt sätt i exempelvis listor helt saknas i Java, men motsvarande finns implementerat i .Net.

Prestandaskillnaden mellan Java och .Net kunde för viss hantering vara 10-faldigt snabbare i .Net…  Inte så kul för en ”Javaperson” att höra. Detta specifika problem åtgärdas inte heller i kommande Java 8.

Programmering

Jag var på en Javamässa i Stockholm City i början av februari.  Lämnar lite redovisningar och recensioner här.

 

Jfokus 2014
Jfokus 2014

Session: ”Ten Cool Things We Can Do with Popular JVM Languages”

Så hamnade jag åter på en föreläsning med Venkat Subramaniam som föreläsare.

Java jämfördes med Scala och Groovy. Det som åter framkom är hur tungfotat rent uttrycksmässigt Java är (speciellt före version 8). Kodexemplen för de två andra språken var bitvis oerhört mer kortfattade och lättlästa. Scala och Groovy körs även de på Javas VM (virtual motor).

Frågan är hur framtiden för respektive språk ser ut. Fortfarande är intresset för ex Perl klart större än för Groovy och Scala. Java ”krossar” dock samtliga dessa tre språk i dominans.Det visades också ytterligare exempel där Java 8 erbjöd förenklade lösningar (ex via ”Delegate”) jämfört med hur utvecklare tidigare tvingades koda för att erhålla en viss funktion/lösning.

En livlig debatt förekommer på Internet huruvida Lambda är en ”fara” (för Java-syntaxen) eller ej: (på InfoQ): Java 8 är förberett för att betydligt enklare än tidigare möjliggöra körning av program flertrådat/med flera processorkärnor.

Eftersom prestandautvecklingen för processorer numera i stort har börjat avstanna vad gäller klockfrekvenser så har istället antalet kärnor börjat bli det avgörande för framtida prestandaförbättringar. Behovet av att bättre/enklare kunna utnyttja flera kärnor bör därför skynda på etableringen för Java 8.

Programmering

Python logo

Python 2, den äldre ”versionen” av Python klamrar sig kvar. Vissa nyckelmoduler har inte tagit steget över till Python 3, trots att det nu har gått drygt 7 år sedan lanseringen. Man kan i och sig förstå vissa systemägare då koden fungerar och är effektivt upprensad på alla möjliga buggar.

Se Khan Academy: ”Python 3 not backwards compatible with Python 2”

Det börjar nästan kännas som att Python 3 tyvärr inte kommer att kunna slå igenom fullt ut på marknaden, trots Googles support. Google har parallellt också lagt energi på programspråken Dart och Go (language).

Programmering

CMS är som alla nästan vet(?) programvara för att enkelt skapa och hantera webbsajter. För några år sedan testade jag Joomla, köpte t.o.m. en fin bok. Utvecklingen gick snabbt framåt och version 3.x.y ersatte 2.x.y. Vissa saker var otroligt frustrerande. Jag kunde i grunden arbeta med HTML4 och CSS1/CSS2 riktigt bra men motorn i Joomla ville hela tiden göra lite som den ville. Här lite senaste statistik över sökningar för de största CMS-motorerna:
Google I/O 2013 Ungefär samtidigt med att jag fick intresse för annat än Joomla så började WordPress ta över marknaden. Nu kan i stort sett säga ”WordPress Rules” :-) .
Så insatsen att fokuserat lära sig det mesta om WordPress bakomliggande teknik kan vara en bra investering. Särskilt förmågan att uppnå hög kvalitét på HTML5 och CSS3 saknas allmänt bland mallutvecklare (mall=”template”).
Parallellt med HTML5 och CSS3 kan vara nog så knepigt; dessa tekniker är fortfarande snabb utveckling, och det gäller att hänga med vilka webbläsare som klarar vad, och hur man ska maximera storleken på den möjliga kundkretsen. Till detta kan läggas HTML5 Shiv, ett verktyg för att även gamla webbläsare ska klara nya HMLT5-taggar. Vi har Google Dart, ett programspråk som ska fungera som en ”genväg” till riktigt avancerad Javascript -kod. Eventuellt (måste kolla lite fakta först) så ska webbläsaren Chrome i framtiden klara att direkt tolka Dart.

Dags att sluta med den här artikeln då det är dåliga SEO (Search Engine Optimization)-poäng att ha för långrandiga artiklar. Kanske dags att börja skriva på engelska? Men det är ett grymt jobb att översätta alla mina artiklar, även om min sajt ju är minimal jämfört med andras…

Programmering Webbläsare Wordpress

SEO– Det låter ju bra… Själv använder jag WordPress och har inte direkt brytt mig om att kolla via vissa testsajter vilken kvalitét som aktuellt WordPress -schema (har varierat med tiden) har haft. Utan mer använt sajten som ett slags test- och komihåg-laboratorium för personligt bruk.

Med kvalitét för SEO menas hur pass välkodad sajten är att bli sökbar via större sökmotorer, ex Google. Den mest väsentliga motorn att få höga ”poäng” från vad gäller SEO är Google eftersom de andra spelar en så tydlig andrafiol vad gäller antalet indexerade/beskrivna sidor i deras sökdatabaser.

Tyvärr känns det lite surt att så mycket av CSS- och HTML-kod finns undangömd i klurig PHP-kod. Normalt hade det (för mig) varit en barnlek att fixa till alla fält för (bild-) -elementet i HTML om koden för CSS och HTML hade funnits lagrad i en helt vanlig textfil.
Ett exempel: Inline Javascript <img…/> ska det alltid vara på slutet + en alt-property med något innehåll. Detta verkar nästan samtliga WordPress-mallar missa. Här är ett annat exempel:
Inline Javascript Jag bad inte om att det ska skrivas inline Javascript i HTML-koden, generellt ger detta dåliga poäng för SEO och en betydligt större HTML-fil att ladda=långsamt. Koden genereras av speciell PHP-kod som jag inte alls har satt mig in i, lyckades inget vidare med att hitta de ställen där bildelementen ”genererades”. Kanske slutar det med att jag själv måste göra en s.k. WordPress-mall. Fördelen är att man kan ta med sig mycket av funktionalitet och utseende till andra WordPress-sajter.

Men jag ska nog kolla källan för min nuvarande mall, ifall det finns tips i ett forum på att rätta till vissa problem (eller snarare buggar när t.o.m syntaxen blir fel). Egentligen tyckte jag att den föregående mallen var snyggare, men dels så fungerade inte fotovisningen något vidare där (foton krymptes, alt beskars alldeles för mycket), dessutom var den inte underhållen de senaste åren. Möjligtvis en övergiven mall där man själv får fixa till den utan ursprungsutvecklarens kunskaper om den. Det räckte inte med en halvtimme för mig i alla fall :-) .

En lösning är att fixa en lokal server på samma PC, så att jag inte behöver Internet varje gång en liten ändring är genomfört och ska testas.

Övrigt Programmering Webbläsare Wordpress

Dart är ett nytt programmeringsspråk från Google, precis som Google Go. Till skillnad från Go som är till för systemarbete (ex kopiering, kontroller) så är Dart till för samma uppgifter som Javascript.

Dart kompileras i slutänden till Javascript så begränsningarna i Dart blir egentligen samma som för Javascript. Skillnaden är att det ska bli (betydligt) enklare att göra komplexa saker i Dart, än att själv försöka åstadkomma samma resultat i Javascript.

Programmering Webbläsare

När man hitills har kört bl.a. webbläsarna Google Chrome och Safari (speciellt vanlig på Mac, finns inte längre till Windows) så har man för att generera webbsidorna använt en motor vid namn Webkit. En webbmotor är ett program som tolkar de filer som slutligen syns i webbläsaren.

Google har tillsammans med Apple utvecklat Webkit, som i sin tur har ett ursprung i KHTML, en webbmotor från KDE. Nu har Google dock meddelat att man går vidare med en egen förgrening av Webkit som får namnet Blink. Parallellt med Webkit och Blink finns också Mozilla och Samsung med en webbmotor vid namn Servo (för mobila enheter). Enligt Google har koden för Webkit blivit alltmer komplicerad med stöd för ”multipla processer” som ett lager över ”standard”-Webkit.
Många utvecklare har nog också haft det lite besvärligt med kod som beror på vilket företag/grupp som står bakom ett visst kodstycke (ex i formen av -moz-/-webkit/xxxxx). Opera-webbläsaren påstås ha en användargrupp på 300 miljoner personer, vilket känns lite väl många för mig; i mätningar brukar Opera nå 1% -nivån av antalet användare. Jag tycker att det är en väldigt bra och stabil webbläsare, det enda abret har varit strulig proxyhantering i jobbets webblabb. Ofta har Opera haft problem att s a s passera proxyfiltret (?).
Opera bytte hur som helst nyligen från webbmotorn Presto till Webkit. Nu lämnar alltså Google den motorn för en egenutvecklad variant. Frågan är om Opera stannar vid Webkit, eller om de följer med till Blink som enligt uppgift ska få en helt öppen kod NYHET :-) : Opera ansluter sig till Googles Blink…
Jag har själv provat att skriva lite HTML5-kod, och kan konstatera att många webkit-tillägg inte fungerar för Firefox och IE10. Extra tråkigt tycker jag som trogen Firefoxanvändare.
Blink kommer att inkorporeras i Chrome någon gång i Juni 2013. Man kommer som användare dock inte att märka något; koden från Webkit har endast översatts rakt av till Blink-kod, så…

Nordeas internetbank beter sig för övrigt lite underligt med Chrome. Vid sifferinmatning kan webbläsaren plötsligt lägga till ett mellanslag för mycket. Dessutom har Chrome på min dator (Windows 7, 64bit) ganska ofta kraschat, eller fastnat i något slags framrusande tillstånd där webbbläsaren tagit all CPU-kraft. Detta gäller enkla sidor som normalt inte brukar ge något större utslag på CPU-mätaren.

Programmering Webbläsare

  • Linux Mint har övertagit ”ledningen” i antalet användare över Linux Ubuntu… Ingen överraskning för mig, Vilken ”avancerad” användare (som kan hantera mer än ett enda stort fönster i taget) gillar Unity, i nuvarande skick? Gnome 3 är inte heller kul. Jättebra med touch på mobilen, men att behandla en dator som en uppblåst/förstorad mobil, nej tack. Men tidningarna fortsätter att referera till Ubuntu som den största distributionen.
  • Go Language, fortsättning följer (FF)
  • Acta, CISPA, TPP, … : http://henrikalexandersson.blogspot.se/2012/04/9-juni-europa-protesterar-mot-acta-mm.htmlhttp://boingboing.net/2012/04/06/understanding-tpp-actas-nas.html , http://www.techdirt.com/articles/20120402/09551618327/where-tpp-goes-beyond-acta-how-it-shows-us-future-ip-enforcement.shtml …
  • Firefox/Chrome/Internet Explorer Google Chrome 18, Waterfox 11, IE9… Det går fort fram med versionsnumren.
  • AMD ”Bulldozerhttp://www.tomshardware.com/reviews/windows-7-hotfix-bulldozer-performance,3119.html ,  blev ingen stor hit. Inte ens efter flera uppdateringar av Windows 7 förbättrades situationen nämnvärt. Endast vid extremt ”mångtrådade” applikationer har  Bulldozer kunnat visa upp en riktigt skaplig prestanda. De är dessutom inte speciellt billiga, äldre modeller från AMD har faktiskt i ett flertal (mer reellt förekommande) fall bättre prestanda till lägre pris.
  •  Khan Academyhttp://www.khanacademy.org/ , en sida för självstudier (på engelska): matematik, historia… En av barnens skolor har tipsats om sajten. Nivån är allt ifrån grundskolenivå upp till universitetsnivå.
  • TryCrypt: Gratis kryptering för dig som är trött på att myndigheter alltid ska veta allting om dig. Samt för alla som vill hålla sina dagboksanteckningar hemliga :-). Kan nedladdas på  http://download.cnet.com/TrueCrypt/3000-2092_4-10527243.html?tag=mncol;1 . Läs instruktionerna noga, gör inte misstaget att installera  Babaylon Toolbar
  • Waterfox är en 64 -bitars Firefox. Verkar klara mer flikar med tyngre innehåll… Men du behöver ha 64 -bitars Windows Vista eller 7.
  • Textpad, UltraEdit eller Notepad++ . Någon av dessa är de enda som gäller vid avancerad/trygg redigering av textfiler.
  • Radeon 7750  ersatte vårt krånglande Geforce 9800gtx+ . Radeon 7750 -kortet kostade 850:- med rabatt, Geforce 9800gtx+ med rabatt 1800… Nu är Geforce -kortet drygt 3 år, men ändå. Radeonkortet drar 55 Watt, Geforce -kortet 145 Watt ! Efter ett par/tre år med 100 Watts skillnad i strömförbrukning, så har man kanske sparat lite pengar…
  • Asus HD 75501Gb DDR5


Ersatte ett mer än dubbelt så dyrt grafikkort som var 3 år gammalt. två/tre dagar efter att jag köpt det så havererade åter det gamla ”lyxkortet” Geforce 9800gtx+, och jag flyttade 7550 -kortet från min till deras dator. Så nu går det (åter) inte att spela på min dator, bara jobba.

 

Hårdvara Operativsystem Övrigt Programmering Webbläsare

JavaFX 1.x var som tidigare sagt ingen höjdare; speciellt skriptspråk att lära sig bl.a. Version 2 är renodlad Java med en mängd övriga förbättringar.

Fortsätter artikel hemmavid… Det är lite jobbigt att skriva på mobilen.

Netbeans Programmering

Min arbetsgivare har ”listigt nog” (vet ej skälet) ändrat i Unix -systemet på så vis att man inte kan testköra lite Python under dessa mer lugna sensommardagar. Sökvägen till alla extrapaket, utöver de mest basala, har flyttats till annan katalog än vad som är specat vid installationen. De kanske inte vill att man ska använda Python?

På mitt arbete förekommer i Unixmiljön Java, Perl och Bashskript, förutom Android och iPhone-utveckling. Inga diskussioner hörs vad gäller övergång från Perl till.. . något annat. Python skulle jag säga är naturligast: också interpreterat språk, lättläst kod, allt större användarbas.

Perl är å sin sida på nedgång, vilket gör att chansen att hitta personer som kan underhålla koden minskar allt mer. I och för sig använder fortfarande Indien Perl i stor utsträckning, men jag har själv erfarenhet av att det kan vara svårt att förstå deras engelska…

I det testlaboratorium som bl.a. jag har ansvar för sätter byråkratin en del andra käppar i hjulen. Ännu är inte det vanligaste verktyget för tester av webbtjänster godkänt (Selenium). Alla tester ska alltså göras manuellt, på ca 5 olika operativsystem och 2-4 olika webbläsare, samt 1-3 olika certifikat (5 x 4 x 3) = 60 olika kombinationer.

Till denna miljö kan man lägga problemet med en brandvägg som förhindrar de flesta uppdateringar, samt att brandväggen ibland omkonfigureras (av annan, okänd person) så att den inte vill släppa fram någonting alls!

Eventuellt är det så att den stora (hemliga) planen är att alla Stockholmsbaserade utvecklare ska bort och ersättas med folk ute i landet. Det ironiska är att jag flyttade till Stockholm just för att få ett arbete… Tydligen skulle man ha suttit kvar och bara väntat på en utlokalisering av myndigheter och företag.

Tyvärr förlorade T-avdelningen ett antal 100 miljoner på misslyckad utveckling (mha konsulter) för ca tre år sedan, vilket bland annat drog utbildningen till ett minimum, dvs 0. Denna period sammanföll med att jag blev sjukskriven för blindtarm- och njursjukdom (”bra nu, tack”).

Jag blev därför av med ett av mina fasta projekt, och nu genererar personen ifråga i princip felaktig HTML4 -kod medan webbläsarna ännu så länge förlåter honom…

All min noggrant kodade och validerade XHTML -kod är helt utraderad eftersom denna utvecklare har bearbetat koden i ett verktyg som fullständigt skiter i allt som har med standarder att göra. Som tur klarar ännu webbläsarna att hantera röran, men vid en viss tidpunkt kan man ju faktiskt behöva ex felsöka, och omstrukturera??

Det rör sig om ca 15000 rader HTML -kod, som exakt ska motsvara en PDF, med ca 10000 rader Javascript som kör kontroller och annan interaktivitet.

Operativsystem Programmering Webbläsare

En person som hette Francesco Cirillo skapade under 80-talet en teknik som kallas Pomodoro, syftet var att han ville fä bättre kontroll på tiden för sina studier.

Hemvisten för tekniken är
http://www.pomodorotechnique.com
.

Idealet ansåg han vara en kökstimer, ibland i form av en tomat (därav namnet Pomodoro). Själv tänkte jag direkt på den olämpliga situationen att använda en skrällande timer i en studiesal på universitetet…

Därför skrev jag ett HTML/Javascript/CSS -program som kan användas för samma syfte (kräver givetvis en dator med webbläsare. Mitt tips vid användning är:

  • spara nedan kod (i rött) med ex namnet  pomodore.html (viktigt med filändelsen), ge akt på sökvägen.
  • Leta upp filen med utforskaren, högerklicka och ”Skicka till skrivbordet”.
  • Högerklicka gärna igen på denna genväg och ange en snabbtangentskombination (som inte används på annat ställe).
  • Vid dubbelklick på genvägen så startas ett webbfönster.  Ange tid och klicka på ”Start”…

Jag brukar maximera webbfönstret med tangenten F11 (fungerar i både Internet Explorer och Firefox). Därefter jobbar jag på med vettig studie/arbetsuppgift tills webbfönstret växlar till en röd bakgrund. Då är det sannolikt dags att ta en paus.

Programmet (här finns en länk på min hemsida till nedan program):

Jag kan lägga upp en kopia av filen under sajten, så att man bara behöver spara en länk till programmet, kanske en bra uppgift ikväll (jobbets internetbrandvägg spärrar en dylik manöver).

Övrigt Programmering Tidsplanering