4. December 2023

Nem Open Source indholdsadministration med PHP

Jeg tror endelig, jeg har fundet et Open Source PHP content management system, der kan matche Umbraco på Microsoft.NET-platformen bare lidt. Jeg har arbejdet med Umbraco i snart 20 år, og det har altid været en absolut favorit, så det har haft sin indflydelse på, hvordan jeg synes CMS’er skal bygges op. Jeg har prøvet ret mange af de åbne systemer - startede med TYPO3 i en årrække, fik enkelte Mambo/Joomla-opgaver, Wordpress, Orchard og Composite C1 (som vist hedder C1 CMS nu).

Det, jeg har manglet på PHP-platformen, har været at kunne skræddersy backenden lige så hurtigt og nemt, som man kan med Umbraco.

Nej, det er ikke Wordpress, ej heller Joomla eller Drupal ;-)

Enter… Bolt CMS

Bolt CMS bygger på PHP Symphony-platformen, der er et modent framework efterhånden. Jeg kan godt huske, jeg hørte om Symphony tilbage i 00′erne, da jeg begyndte at bruge PHP professionelt, så det er fedt at se, at det stadig findes.

Ligesom Umbraco, så definerer du i BoltCMS også din backend med en række felttyper, f.eks et tekstfelt eller et billedfelt på en content type, og det danner tilsammen en slags dokumentskabelon for, hvilke felter CMS-brugeren ser i sin backend, når vedkommende f.eks opretter en nyhed.

Bolt CMS kalder kontrollerne ‘Field Types’, og Umbraco ‘Data types’, men det er praktisk talt det samme.

Jeg synes umiddelbart, at Bolt er et fedt, gennemarbejdet produkt til mindre og mellemstore sites. Når vi over 50 sider i enkelte kategorier, så tror jeg det begynder at knibe med overskueligheden. Men prøv at lege med det, inden du laver dit næste projekt, for at du kan danne dig dit eget indtryk.

Link:
https://boltcms.io/

PS. Du skal være varsom med at rette Bolts alias for en content type, når først det er sat, og folk tilføjer data i CMS’et. Hvis du retter forsvinder det data, der er skrevet i felterne i Bolts administration. Du kan dog altid hoppe i databasen og lave sammenkædningen igen manuelt med en sneaky SQL-sætning, som folkene bag systemet viser her –> https://bolt.tips/en … enaming-contenttypes

2. December 2023

Paperless - Open Source dokumenthåndtering

Jeg følger #opensource-hashtagget på det sociale medie Mastodon, og derfor får jeg dybest set alt, der handler om Free and Open Source Software op på min væg, og det har været fantastisk. En bruger smed et link til Paperless - et open source dokumenthåndteringssystem (DMS). Det har jeg aldrig hørt om før, så det vakte straks min interesse.

Hvad er et DMS? Måske har du brugt et CMS - Content Management System - til dine websider? Et dokumenthåndteringssystem er mere eller mindre det samme, her er fokuset bare på filopbevaringen og intern kategorisering/indeksering, og ikke på ekstern visning.

Efter at have prøvet demo’en som jeg tror var i stykker, så installerede jeg selv softwaren på min server. Selve softwaren er en backend skrevet i Python og så med en Typescript-frontend.

Der er gjort en masse ud af selve “feel’et”, når du bruger systemet, det føles rart at bruge. Det er naturligvis en subjektiv vurdering fra min side, men navigation og brug af produktet føles generelt flydende og solidt. Jeg har endnu ikke kunnet fremprovokere fejlmeddelelser, selvom jeg har uploadet mange forskellige filtyper til systemet. Oversigtsvisningen kan både være baseret på ruder/kort og listebaseret, og kan ses på billedet herunder - klik evt. for at forstørre.

Paperless'

Selve installationen kan du gøre manuelt eller via Docker Compose. Jeg valgte Docker, fordi det er nemt at rydde op igen, men jeg tror dette produkt er en keeper, for jeg tror det er noget, der kan udvikle sig i spændende retninger.

Installationen var tekstbaseret, og jeg følte mig godt guidet. Du downloader blot en enkelt installationsfil (bash-script) og så klarer Paperless-installationen resten med enkelte spørgsmål til brugernavn/password, tillægspakkevalg osv.

OCR-genkendelse

Det første, jeg satte mig for at teste var Paperless’ OCR-genkendelse. OCR står for Optical Character Recognition, eller optisk karaktergenkendelse, og dens funktion er automatisk konvertering af grafik til tekst. Herunder ser du et eksempel på en indscanning. I visningen til højre er der en bogside, i tekstfeltet til venstre, den OCR-genkendte tekst.

screenshot-2023-12-02-at-15-08-46-ocr-test-paperless-ngx.png

Under installationen havde jeg installeret Tesseracts OCR-moduler på dansk, tysk og engelsk. Tesseract blev udviklet af Hewlett-Packard i 1980′erne, som udgav det som Open Source i 2005 sammen med universitetet i Nevada, Las Vegas, USA. Året efter startede Google med at sponsorere udviklingen, og har gjort det lige siden.

Den engelske OCR fungerede rimelig godt, selv på bogsider, der var en smule skæve. Der var enkelte ord, der ikke blev genkendt korrekt, men det skal man forvente, når man bruger OCR-software.

Den danske del af Tesseract OCR har problemer med ø og å, der bliver genkendt som o og a, men sjovt nok ikke med ‘æ’, det kan være fonten, som er “tynd” på bestemte steder. Lige der kunne jeg godt tænke mig bedre muligheder for at man kunne se og finjustere indstillingerne inde i Paperless. Jeg prøvede at gemme kildematerialet som sort/hvid i 1200 ppi med en fed (bold) skrifttype, men det gjorde ingen forskel.

Udover OCR-integrationen, som må siges at være den feature, der “sælger” systemet, så fremstår brugerfladen nem og lige til… Jeg kan generelt godt lide brugerflader, hvor opsætningen er holdt minimalistisk og simpel - sekundært placerede knapper, der ikke er i brug, vises kun når du skal bruge dem. Less is more, simpelthen.

Dokumenttyper og emails

Du kan bede Paperless om at indklassere dokumenter efter bestemte ord (tags, eller etiketter på dansk). Så hvis du bruger ordet “Årsrapport”, så vil den kyle alle rapporter i en bestemt mappe med bestemte etiketter. Men det forudsat, at OCR’en er fejlfri på dansk. Jeg har ikke nået at teste denne del gennemgående, men jeg opdaterer opslaget her i så fald.

Paperless kan ligeledes indstilles til at overvåge indkomne emails fra bestemte konti og så klassificere dokumenterne efterfølgende.

Til sidst - ønsker

Jeg kunne som nævnt godt tænke mig flere muligheder for at justere importindstillinger på OCR’en i selve Paperless. Konverteringsmessigt er der intet at klage over, generelt genkendte systemet alt, jeg smed efter det. Den insisterede på at køre OCR på det hele, sikkert pga. klassificeringsfunktionen, og det er superfedt at se OCR-genkendte ord dukke op i søgeindekset af sig selv. En upload kan godt tage noget tid, når det skal scannes under import. Et billed på 3000×3000 pixel (1200 ppi) tog mig ca. 15-20 sekunder.

Den danske oversættelse af Paperless backenden er ikke helt komplet, men absolut brugbar. Mulighed for at installere ekstra plugins er der ikke. Derved ville man f.eks kunne tilpasse systemet til bestemte arbejdsmønstre eller bestemte brancher. Parrede man f.eks systemet med Python PIL eller Pillow, ville systemet blive en temmelig kapabel backend til grafiske virksomheder. Desværre skriver udviklerne i dokumentationen at plugins næppe bliver en realitet. Det synes jeg er en skam, men okay, at koncentrere sig om kernefunktionaliten er også en mulighed at undgå, at systemet bliver for bredt.

Manglen på pluginudvidelser kompenseres dog af, at man kan tilføje specielle felter til sine dokumenttyper, og af muligheden for at bruge et REST API for at få Paperless til at arbejde sammen med andre typer software. Dermed altså stadig rige muligheder for integration med systemer udefra.

Alt i alt et solidt opensource produkt, som jeg sagtens kan anbefale at afprøve.

Installation og screenshots:
https://docs.paperless-ngx.com/setup/
https://docs.paperle … #paperless-a-history

1. December 2023

Per aspera ad astra

“Through hardships to the stars”.

Jeg bygger på et rumspil i open source spilmotoren Godot, eller dvs. projektet har lagt brak i nogle måneder. Men det betyder ikke det er glemt, tværtimod - det er kotyme at jeg springer frem og tilbage mellem idéer. Jeg sidder pt. med nogle langstrakte projekter i øjeblikket, som jeg øjner en afslutning på i horisonten, og glæder mig til at udvikle et spil.

Ja, det strider mod al fornuft ikke at starte i småtingsafdelingen - men omvendt sætter tiden ingen begrænsninger… Man kan altid drømme, og mest af alt: Jeg trænger til et projekt uden en egentlig deadline, hvor vi bare bygger for sjov, og ser, hvor inspirationen tager os hen.

Tilbage til selve spillet:

Det bliver et klassisk 3D rum-actionspil, og da Frontiers “Elite”,”Elite Dangerous”, Origins/Chris Roberts’ “Wing Commander”, og senere Hello Games “No Mans Sky” er nogle af mine favoritspil, så er det nok ikke svært at gætte, hvor inspirationen kommer fra. Naturligvis holder jeg øje med “Star Citizen”, det ser fedt ud og jeg håber, det bliver toppen af poppen. Jeg har dog absolut ingen lyst til at skulle investere i en gigant-PC for at kunne spille det. Jeg vil hellere vil spare på strømmen ;-)

Der skal være noget til casual gamers også… I den henseende holder jeg meget af Nintendos tilgang til spilmarkedet. De satser bredt, istedet for at gå efter high-tech gamerrne.

Jeg kunne godt tænke mig at lave et ultrasimpelt spacecraft shooter-spil, som ikke kræver det vilde setup, men som er pænt efter en 2017-standard, og så langsomt og sikkert bygge det ud med fokus på, at det skal være et spil, der er let at gå til.

I stedet for proceduralt at generere et univers, som føles stort og tomt, som i Elite: Dangerous, så vil jeg koge det ned til noget af det mest interessante. Handlingen kunne f.eks foregå i vores eget solsystem, Alpha Centauri, Trappist-1-systemet og TOI-700, som er nogle af de solsystemer, jeg finder mest interessante. TOI-700 er et solsystem med en rød dværgstjerne, der blev opdaget af TESS-rumteleskopet tilbage i 2020.

Lavt minimumskrav

I stedet for at bede folk købe sig i armod i computergrej, som computerspilsbranchen har for vane, synes jeg det kunne være skægt at se, om vi kan nå punkt, hvor vi har et spil, der kan køre på ældre enheder - f.eks som baseline en Intel i5-2500K CPU med et ældre Nvidia/AMD/ATI grafikkort? Eller en konsol med Nvidia Tegra X1 (div. Android + currentgen Nintendo Switch). Det er virkelig en skam, at Playstation ikke er en åben platform, for der må være mange derude, der endnu ikke er hoppet på PS5-vognen. Der er masser af power i både PS3 og PS4 (mener ikke at Godot understøtter dem, PS3′eren skulle være særdeles hård at udvikle til)

Skal jeg drømme lidt igen, så kunne man måske engang i fremtiden lave de tunge beregninger på en GPU renderfarm, og så kunne folk spille på en udtjent tablet med en bluetooth-joypad.

Hvad skal man kunne?

Det har jeg slet ikke tænkt igennem endnu og uanset, så vil jeg heller ikke stille krav, udover nogle få, f.eks:

Onlinespil skal være et tilvalg, ikke et krav. Uanset, så er det noget, der ligger langt ude i fremtiden

Hvilke gameloops er mest interessante? Købe større vildere skibe? Udforskning og indsamling af ressourcer? Der skal i hvert fald være krig mellem nogle fraktioner. Det har været præmissen for mange af de spil, jeg har spillet, og det gør, at man gider komme tilbage til spillet. Det kunne være interessant, hvis man kunne gemme sit spil online og så komme tilbage til det senere.

Hvorfor Godot?

Godot er en let tilgængelig, men samtidig avanceret open source game engine. Ved ikke at skrive motoren selv, kan vi fokusere på selve spillet, fremfor at skulle koncentrere os om al teknikken bag motoren. Selvom jeg som kodesmed gerne ville bygge min egen engine, for at udvide min horisont, så kan det føles som at genopfinde den dybe tallerken. Godot kan udvides med extensions, hvis der er funktioner, man mangler.

Kom med på rejsen

Du kan downloade en meget primitiv prototype allerede nu, og give dig i kast med, hvad du synes. Jeg skal have koblet en realistisk heightmap på grafikken (aktuelt en flad landskabsmodel fra Mars fra NASA).

Filerne til den meget simple prototype findes her - når du har startet prototypen kan du bevæge dig frem og tilbage med tasterne WASD:
https://codeberg.org/sjustesen/UntitledSpaceGame

Spillet er licenseret under en fri, åben MIT-licens. Jeg tager gerne imod Pull Requests på Codeberg :-) Du må gerne bruge issue-trackeren til statusmeldinger, hvis du kaster dig ud i en bestemt delopgave. Det kunne være, du har lyst til at bidrage med modeller af asteroider fra et asteroidefelt, bare for at tage et eksempel.

Spillet starter på en Mars-lignende planet, og skal vi have lavet sådan, at spilleren kan hoppe i et rumskib og besøge planeter, så vi skal have lavet et solsystem med planeter. Det er 1. etape, senere skal vi have koblet et missionssystem på.

Nu har jeg skitseret visionen løseligt, det kunne være sjovt at se, hvor vi ender, hvis man ikke sætter nogle kreative grænser.

29. November 2023

ActivityPods 2.0

En af de største problemer med de decentrale tjenester i Fediverset, er, at du skal have et login på hver server, du vil benytte, og så ligger al din data på den pågældende server. Det er der ikke så meget decentralt over, for hvad sker der, hvis serveren crasher og lagermedierne går i stykker. Ja, så mister du alle dine data.

Der er dog ingen grund til umiddelbar panik, for mange af instanserne i Fediverset er drevet af dygtige, frivillige ildsjæle. Men fejl sker, det er en naturlig del af tilværelsen. Så derfor bør vi nok forvente, at der på et tidspunkt, et-eller-andet-sted vælter en server, hvor backuppen ikke kan reetableres.

Det prøver ActivityPods-konceptet at rode bod på - ActivityPods er en teknologi, der komplementerer ActivityPub-protokollen, som f.eks det decentrale medie Mastodon bygger på. Du har din egen datapod med dine data, og så kan alle tjenesterne i Fediverset “spørge om lov” om at få adgang til dine data via denne pod.

ActivityPods v1.0 er allerede ude, men har iflg. udvikleren nogle ulemper, fordi den er meget afhængig af backenden på den maskine, der hoster Pod’en. v2.0 er på tegnebrættet, og her flytter backenden ind i hver sin pod.

https://activitypods.org/#activitypub

Edit: I en tidligere udgave af opslaget spekulerede jeg i mulige backupstrategier for en sådan podløsning. Jeg tror dog ved nærmere eftertanke, at det ligger udenfor selve specifikationens opgave at begive sig ind på dette område, så tekstafsnittet var bare “støj” ift. resten af opslaget. Derfor er det fjernet.

27. November 2023

Open Source: TypeScript - The documentary

Youtubes algoritmer kaster en masse gode dokumentarer i hovedet af mig i øjeblikket. Så hermed en anbefaling mere:

OfferZen Origin har lavet denne dokumentar om Microsofts overbygning til Javascript, TypeScript. En del af dokumentaren handler også om, hvordan Microsoft har arbejdet på at blive mere Open Source-orienteret - en positiv udvikling, som forhåbentlig holder ved.

Og jeps, Anders Hejlsberg (Turbo Pascal, C#, TypeScript) er med, og Lars Bak (Google V8 og Dart) har en slags cameo :D