{ "version": "https://jsonfeed.org/version/1.1", "title": "Marcus Olsson – Frilansande webbutvecklare / Artiklar", "home_page_url": "https://marcusolsson.me", "feed_url": "https://marcusolsson.me/feed.json", "language": "sv-SE", "items": [{ "id": "https://marcusolsson.me/artiklar/laravel-11", "title": "Laravel 11", "url": "https://marcusolsson.me/artiklar/laravel-11", "content_html": "
Som sig b\u00f6r h\u00e4r p\u00e5 v\u00e5rkanten s\u00e5 sl\u00e4pps en ny version av Laravel \u2013 nu \u00e4r vi uppe i version 11! Dags att hugga tag i \u00e4ndringarna och planera kommande uppdateringar.
\nSt\u00f6rsta fokuset i Laravel 11 har handlat om att skala ner, f\u00f6renkla och st\u00e4da upp. Borta \u00e4r filer som s\u00e4llan beh\u00f6vs p\u00e5 mindre projekt s\u00e5 som t.ex. API- och channel routes (/routes/api.php
och /routes/channels.php
). Dessa kan dock fortfarande publiceras vid behov.
Service-providers har f\u00f6renklats och numera sk\u00f6ts det mesta direkt i AppServiceProvider.php
och /bootstrap/app.php
.
Vidare s\u00e5 har de d\u00e5ligt namngivna Console/Kernel.php
och Http/Kernel.php
helt plockats bort. Schemal\u00e4ggning och annat som tidigare hanterades i Console/Kernel.php
kan man nu g\u00f6ra direkt i routes/console.php
genom nya Schedule-fasaden:
\n
1use Illuminate\\Support\\Facades\\Schedule;23Schedule::call(function () {4 DB::table('recent_users')->delete();5})->daily();
1use Illuminate\\Support\\Facades\\Schedule;23Schedule::call(function () {4 DB::table('recent_users')->delete();5})->daily();
Middlewares och annat som man registrerade i Http/Kernel.php
kan nu ist\u00e4llet hanteras direkt i /bootstrap/app.php
.
M\u00e5nga externa paket och delar av Laravel sj\u00e4lvt har sedan tidigare anv\u00e4nt sig av ->dump()
och ->dd()
-metoder, men nu blir det en del av sj\u00e4lva ramverket f\u00f6r att f\u00f6renkla och standardisera metoden. Nu kan man \u00e4ven sj\u00e4lv implementera den f\u00f6r sina egna klasser utan att beh\u00f6va skriva en custom-l\u00f6sning:
\n
1use Illuminate\\Support\\Traits\\Dumpable;23class Book4{5 use Dumpable67 // ...8}
1use Illuminate\\Support\\Traits\\Dumpable;23class Book4{5 use Dumpable67 // ...8}
PHP 8.1 \u00e4r ute \u2013 Laravel kr\u00e4ver nu PHP 8.2 som minimum.
\nL\u00e4nge har de gamla migrations f\u00f6r users
-, password_reset_tokens
-, failed_jobs
- och personal_access_tokens
-tabellerna f\u00f6ljt med. Vilkas namnkan har f\u00f6rvirrat en del nya utvecklare ("Varf\u00f6r har jag en migration ifr\u00e5n 2014?") och sett allm\u00e4nt st\u00f6rande ut (om man nu bryr sig om det).
Nu har har de tryckts ihop till f\u00e4rre filer med ett eget namngivningsformat (t.ex. 0001_01_01_000000_create_users_table.php
). Alltid n\u00e5t.
Under utvecklingen var tanken att \u00e4ven inte inkludera config-filerna utan att man ist\u00e4llet kunder publicera dem vid behov \u2013 n\u00e5got som \u00e4ndrades i sista sekund. Jag sj\u00e4lv skulle uppskatta den \u00e4ndringen dock.
\nSom vanligt finns en bra upgrade guide tillg\u00e4nglig p\u00e5 laravel.com \u2013 rekommenderas starkt. Vidare s\u00e5 har flera skrivit betydligt mer omfattande kring \u00e4ndringarna \u00e4n vad jag har m\u00f6jlighet till. bl.a:
\n\u2013
\nP.S. S\u00e5g i min tidslinje att det \u00e4r ganska exakt 10 \u00e5r sedan jag skrev det f\u00f6rsta inl\u00e4gget h\u00e4r p\u00e5 bloggen om Laravel (n\u00e5v\u00e4l, Laravel Forge och Homestead handlade inl\u00e4gget egentligen om \u2013 verktyg som jag anv\u00e4nder \u00e4n idag). Tiden g\u00e5r galet fort!
\nThis article, \"Laravel 11\", was first posted on marcusolsson.me.
", "summary": "Som sig b\u00f6r h\u00e4r p\u00e5 v\u00e5rkanten s\u00e5 sl\u00e4pps en ny version av Laravel \u2013 nu \u00e4r vi uppe i version 11! Dags att hugga tag i \u00e4ndringarna och planera kommande uppdateringar.
\nSt\u00f6rsta fokuset i Laravel 11 har handlat om att skala ner, f\u00f6renkla och st\u00e4da upp. Borta \u00e4r filer som s\u00e4llan beh\u00f6vs p\u00e5 mindre projekt s\u00e5 som t.ex. API- och channel routes (/routes/api.php
och /routes/channels.php
). Dessa kan dock fortfarande publiceras vid behov.
Service-providers har f\u00f6renklats och numera sk\u00f6ts det mesta direkt i AppServiceProvider.php
och /bootstrap/app.php
.
Vidare s\u00e5 har de d\u00e5ligt namngivna Console/Kernel.php
och Http/Kernel.php
helt plockats bort. Schemal\u00e4ggning och annat som tidigare hanterades i Console/Kernel.php
kan man nu g\u00f6ra direkt i routes/console.php
genom nya Schedule-fasaden:
\n
1use Illuminate\\Support\\Facades\\Schedule;23Schedule::call(function () {4 DB::table('recent_users')->delete();5})->daily();
1use Illuminate\\Support\\Facades\\Schedule;23Schedule::call(function () {4 DB::table('recent_users')->delete();5})->daily();
Middlewares och annat som man registrerade i Http/Kernel.php
kan nu ist\u00e4llet hanteras direkt i /bootstrap/app.php
.
M\u00e5nga externa paket och delar av Laravel sj\u00e4lvt har sedan tidigare anv\u00e4nt sig av ->dump()
och ->dd()
-metoder, men nu blir det en del av sj\u00e4lva ramverket f\u00f6r att f\u00f6renkla och standardisera metoden. Nu kan man \u00e4ven sj\u00e4lv implementera den f\u00f6r sina egna klasser utan att beh\u00f6va skriva en custom-l\u00f6sning:
\n
1use Illuminate\\Support\\Traits\\Dumpable;23class Book4{5 use Dumpable67 // ...8}
1use Illuminate\\Support\\Traits\\Dumpable;23class Book4{5 use Dumpable67 // ...8}
PHP 8.1 \u00e4r ute \u2013 Laravel kr\u00e4ver nu PHP 8.2 som minimum.
\nL\u00e4nge har de gamla migrations f\u00f6r users
-, password_reset_tokens
-, failed_jobs
- och personal_access_tokens
-tabellerna f\u00f6ljt med. Vilkas namnkan har f\u00f6rvirrat en del nya utvecklare ("Varf\u00f6r har jag en migration ifr\u00e5n 2014?") och sett allm\u00e4nt st\u00f6rande ut (om man nu bryr sig om det).
Nu har har de tryckts ihop till f\u00e4rre filer med ett eget namngivningsformat (t.ex. 0001_01_01_000000_create_users_table.php
). Alltid n\u00e5t.
Under utvecklingen var tanken att \u00e4ven inte inkludera config-filerna utan att man ist\u00e4llet kunder publicera dem vid behov \u2013 n\u00e5got som \u00e4ndrades i sista sekund. Jag sj\u00e4lv skulle uppskatta den \u00e4ndringen dock.
\nSom vanligt finns en bra upgrade guide tillg\u00e4nglig p\u00e5 laravel.com \u2013 rekommenderas starkt. Vidare s\u00e5 har flera skrivit betydligt mer omfattande kring \u00e4ndringarna \u00e4n vad jag har m\u00f6jlighet till. bl.a:
\n\u2013
\nP.S. S\u00e5g i min tidslinje att det \u00e4r ganska exakt 10 \u00e5r sedan jag skrev det f\u00f6rsta inl\u00e4gget h\u00e4r p\u00e5 bloggen om Laravel (n\u00e5v\u00e4l, Laravel Forge och Homestead handlade inl\u00e4gget egentligen om \u2013 verktyg som jag anv\u00e4nder \u00e4n idag). Tiden g\u00e5r galet fort!
\nThis article, \"Laravel 11\", was first posted on marcusolsson.me.
", "date_published": "2024-03-12T15:45:00+01:00", "date_modified": "2024-03-12T15:45:00+01:00", "authors": [{ "name": "Marcus Olsson" }], "tags": [ ] }, { "id": "https://marcusolsson.me/artiklar/tempest-ett-nytt-lite-annorlunda-php-ramverk", "title": "Tempest – ett nytt lite annorlunda PHP-ramverk", "url": "https://marcusolsson.me/artiklar/tempest-ett-nytt-lite-annorlunda-php-ramverk", "content_html": "Brendt Roose (stitcher.io) har precis presenterat vad han har jobbat p\u00e5 de senaste m\u00e5naderna, ett nytt PHP-ramverk med namnet "Tempest".
\nI hans egna ord \u00e4r ramverket inte byggt f\u00f6r att ers\u00e4tta eller konkurrera med Laravel eller Symphony, utan mer vara ett komplement f\u00f6r mindre PHP-applikationer.
\nDet som g\u00f6r Tempest intressant \u00e4r att det \u00e4r extremt flexibelt. Ist\u00e4llet f\u00f6r att bygga p\u00e5 en f\u00f6rutbest\u00e4md struktur s\u00e5 l\u00e4ser ramverket av ens kod f\u00f6r d\u00e4rifr\u00e5n "f\u00f6rst\u00e5" vilka delar som \u00e4r t.ex. en controller, en modell eller n\u00e5got helt annat.
\nT.ex. s\u00e5 skulle ens applikations struktur kunna vara:
\n\n
1app2\u251c\u2500\u2500 Http3\u2502 \u2514\u2500\u2500 UserController.php4\u251c\u2013\u2013 Models5\u2502 \u2514\u2500\u2500 User.php
1app2\u251c\u2500\u2500 Http3\u2502 \u2514\u2500\u2500 UserController.php4\u251c\u2013\u2013 Models5\u2502 \u2514\u2500\u2500 User.php
Eller likv\u00e4l:
\n\n
1app2\u251c\u2500\u2500 User3\u2502 \u251c\u2500\u2500 User.php4\u2502 \u2514\u2500\u2500 UserController.php
1app2\u251c\u2500\u2500 User3\u2502 \u251c\u2500\u2500 User.php4\u2502 \u2514\u2500\u2500 UserController.php
Tempest l\u00f6ser det automatiskt. Men hurd\u00e5? Jo, fr\u00e4mst via PHP Attributes. T.ex:
\n\n
1final readonly class UserController2{3 #[Get('/')]4 public function index()5 {6 //7 }89 #[Get('/user/{user}')]10 public function show(User $user)11 {12 //13 }14}
1final readonly class UserController2{3 #[Get('/')]4 public function index()5 {6 //7 }89 #[Get('/user/{user}')]10 public function show(User $user)11 {12 //13 }14}
D\u00e4r Get
helt enkelt \u00e4r ett attribute (k\u00e4llkod):
\n
1use Attribute;23#[Attribute]4final class Get extends Route5{6 public function __construct(string $uri)7 {8 parent::__construct(9 uri: $uri,10 method: Method::GET,11 );12 }13}
1use Attribute;23#[Attribute]4final class Get extends Route5{6 public function __construct(string $uri)7 {8 parent::__construct(9 uri: $uri,10 method: Method::GET,11 );12 }13}
Vid runtime s\u00e5 g\u00e5r Tempest igenom all ens kod hanterar den "verkliga" strukturen internt. I produktion i cache:as detta s\u00e5 det ska inte p\u00e5verka laddningstider eller \u00f6vrig prestanda j\u00e4mf\u00f6rt med ett mer traditionellt ramverk.
\nDet hela \u00e4r v\u00e4ldigt smart, och jag kan definitivt se anv\u00e4ndning f\u00f6r detta n\u00e4r en mindre enklare app ska byggas (jag ser p\u00e5 dig elchock.se \u2013 eller f\u00f6r all dell denna sajten, marcusolsson.me, som b\u00e5da bygger p\u00e5 Laravel). Vidare utlovar Brendt "zero config" och "minimal setup", precis som man vill ha det.
\nSpana in repot p\u00e5 Github, \u00e4n s\u00e5 l\u00e4nge \u00e4r det i ett tidigt stadie \u2013 men ska bli v\u00e4ldigt kul att f\u00f6lja och testa p\u00e5 riktigt n\u00e4r tillf\u00e4lle ges. Tips: grundl\u00e4ggande dokumentation finns i ett eget repo, tempestphp/tempest-docs
\nThis article, \"Tempest \u2013 ett nytt lite annorlunda PHP-ramverk\", was first posted on marcusolsson.me.
", "summary": "Brendt Roose (stitcher.io) har precis presenterat vad han har jobbat p\u00e5 de senaste m\u00e5naderna, ett nytt PHP-ramverk med namnet "Tempest".
\nI hans egna ord \u00e4r ramverket inte byggt f\u00f6r att ers\u00e4tta eller konkurrera med Laravel eller Symphony, utan mer vara ett komplement f\u00f6r mindre PHP-applikationer.
\nDet som g\u00f6r Tempest intressant \u00e4r att det \u00e4r extremt flexibelt. Ist\u00e4llet f\u00f6r att bygga p\u00e5 en f\u00f6rutbest\u00e4md struktur s\u00e5 l\u00e4ser ramverket av ens kod f\u00f6r d\u00e4rifr\u00e5n "f\u00f6rst\u00e5" vilka delar som \u00e4r t.ex. en controller, en modell eller n\u00e5got helt annat.
\nT.ex. s\u00e5 skulle ens applikations struktur kunna vara:
\n\n
1app2\u251c\u2500\u2500 Http3\u2502 \u2514\u2500\u2500 UserController.php4\u251c\u2013\u2013 Models5\u2502 \u2514\u2500\u2500 User.php
1app2\u251c\u2500\u2500 Http3\u2502 \u2514\u2500\u2500 UserController.php4\u251c\u2013\u2013 Models5\u2502 \u2514\u2500\u2500 User.php
Eller likv\u00e4l:
\n\n
1app2\u251c\u2500\u2500 User3\u2502 \u251c\u2500\u2500 User.php4\u2502 \u2514\u2500\u2500 UserController.php
1app2\u251c\u2500\u2500 User3\u2502 \u251c\u2500\u2500 User.php4\u2502 \u2514\u2500\u2500 UserController.php
Tempest l\u00f6ser det automatiskt. Men hurd\u00e5? Jo, fr\u00e4mst via PHP Attributes. T.ex:
\n\n
1final readonly class UserController2{3 #[Get('/')]4 public function index()5 {6 //7 }89 #[Get('/user/{user}')]10 public function show(User $user)11 {12 //13 }14}
1final readonly class UserController2{3 #[Get('/')]4 public function index()5 {6 //7 }89 #[Get('/user/{user}')]10 public function show(User $user)11 {12 //13 }14}
D\u00e4r Get
helt enkelt \u00e4r ett attribute (k\u00e4llkod):
\n
1use Attribute;23#[Attribute]4final class Get extends Route5{6 public function __construct(string $uri)7 {8 parent::__construct(9 uri: $uri,10 method: Method::GET,11 );12 }13}
1use Attribute;23#[Attribute]4final class Get extends Route5{6 public function __construct(string $uri)7 {8 parent::__construct(9 uri: $uri,10 method: Method::GET,11 );12 }13}
Vid runtime s\u00e5 g\u00e5r Tempest igenom all ens kod hanterar den "verkliga" strukturen internt. I produktion i cache:as detta s\u00e5 det ska inte p\u00e5verka laddningstider eller \u00f6vrig prestanda j\u00e4mf\u00f6rt med ett mer traditionellt ramverk.
\nDet hela \u00e4r v\u00e4ldigt smart, och jag kan definitivt se anv\u00e4ndning f\u00f6r detta n\u00e4r en mindre enklare app ska byggas (jag ser p\u00e5 dig elchock.se \u2013 eller f\u00f6r all dell denna sajten, marcusolsson.me, som b\u00e5da bygger p\u00e5 Laravel). Vidare utlovar Brendt "zero config" och "minimal setup", precis som man vill ha det.
\nSpana in repot p\u00e5 Github, \u00e4n s\u00e5 l\u00e4nge \u00e4r det i ett tidigt stadie \u2013 men ska bli v\u00e4ldigt kul att f\u00f6lja och testa p\u00e5 riktigt n\u00e4r tillf\u00e4lle ges. Tips: grundl\u00e4ggande dokumentation finns i ett eget repo, tempestphp/tempest-docs
\nThis article, \"Tempest \u2013 ett nytt lite annorlunda PHP-ramverk\", was first posted on marcusolsson.me.
", "date_published": "2024-02-19T14:34:59+01:00", "date_modified": "2024-02-19T14:34:59+01:00", "authors": [{ "name": "Marcus Olsson" }], "tags": [ ] }, { "id": "https://marcusolsson.me/artiklar/jquery-4-v", "title": "jQuery 4 (β)", "url": "https://marcusolsson.me/artiklar/jquery-4-v", "content_html": "Minns ni n\u00e4r bygga saker f\u00f6r webben var enkelt? Kicka ig\u00e5ng MAMP, in med en PHP-fil, lite HTML och s\u00e5 s\u00e5klart jQuery. Lite annat \u00e4n dagens otaliga compilers och avancerade ramverk.
\nGlad blev jag i alla fall n\u00e4r jag s\u00e5g att utvecklingen av jQuery tickar p\u00e5 och n\u00e4sta stora release \u00e4r krokarna \u2013 4.0.0 \u00e4r nu i Beta, och d\u00e4r de \u00e4ntligen g\u00f6r sig av med bagaget i form av IE10 (IE11 st\u00f6ds fortfarande dock).
\nEfter lite snabb research s\u00e5 verkar n\u00e4stan jQuery dessutom ha v\u00e4xt de senaste \u00e5ren, fr\u00e5n 74,2% av alla (!) webbsajter 2020 till 77,1% av alla 2024.
\nM\u00e5nga utvecklare kanske g\u00f6r sig lustiga \u00f6ver jQuery av alla m\u00f6jliga orsaker; filstorlek, "att det \u00e4r fult" eller n\u00e5gon annan orsak. Men faktum \u00e4r att jQuery med all sin "fluff" \u00e4r t\u00e4mligen effektiv och bra skriven kod, och framf\u00f6r allt portabel mellan alla webbl\u00e4sare (vilket kanske inte \u00e4r ett lika stort problem idag.) Och f\u00f6r att inte n\u00e4mna den p\u00e5verkan som syntaxen har haft i modern webbutveckling.
\nThis article, \"jQuery 4 (\u03b2)\", was first posted on marcusolsson.me.
", "summary": "Minns ni n\u00e4r bygga saker f\u00f6r webben var enkelt? Kicka ig\u00e5ng MAMP, in med en PHP-fil, lite HTML och s\u00e5 s\u00e5klart jQuery. Lite annat \u00e4n dagens otaliga compilers och avancerade ramverk.
\nGlad blev jag i alla fall n\u00e4r jag s\u00e5g att utvecklingen av jQuery tickar p\u00e5 och n\u00e4sta stora release \u00e4r krokarna \u2013 4.0.0 \u00e4r nu i Beta, och d\u00e4r de \u00e4ntligen g\u00f6r sig av med bagaget i form av IE10 (IE11 st\u00f6ds fortfarande dock).
\nEfter lite snabb research s\u00e5 verkar n\u00e4stan jQuery dessutom ha v\u00e4xt de senaste \u00e5ren, fr\u00e5n 74,2% av alla (!) webbsajter 2020 till 77,1% av alla 2024.
\nM\u00e5nga utvecklare kanske g\u00f6r sig lustiga \u00f6ver jQuery av alla m\u00f6jliga orsaker; filstorlek, "att det \u00e4r fult" eller n\u00e5gon annan orsak. Men faktum \u00e4r att jQuery med all sin "fluff" \u00e4r t\u00e4mligen effektiv och bra skriven kod, och framf\u00f6r allt portabel mellan alla webbl\u00e4sare (vilket kanske inte \u00e4r ett lika stort problem idag.) Och f\u00f6r att inte n\u00e4mna den p\u00e5verkan som syntaxen har haft i modern webbutveckling.
\nThis article, \"jQuery 4 (\u03b2)\", was first posted on marcusolsson.me.
", "date_published": "2024-02-07T13:47:02+01:00", "date_modified": "2024-02-07T13:47:02+01:00", "authors": [{ "name": "Marcus Olsson" }], "tags": [ ] }, { "id": "https://marcusolsson.me/artiklar/apptips-2024", "title": "Apptips", "url": "https://marcusolsson.me/artiklar/apptips-2024", "content_html": "D\u00e5 det har varit en v\u00e4ldigt hektiskt m\u00e5nad h\u00e4r p\u00e5 kontoret s\u00e5 har jag inte riktigt hunnit med att skriva n\u00e5got vettigt, s\u00e5 jag t\u00e4nkte helt enkelt att jag k\u00f6r en favorit i repris ifr\u00e5n 2023 \u2013 tips p\u00e5 ett g\u00e4ng trevliga appar och tj\u00e4nster som jag anv\u00e4nder dagligen.
\nInte f\u00f6rens man \u00e4r utan Copilot s\u00e5 f\u00f6rst\u00e5r man hur mycket man f\u00f6rlitar sig p\u00e5 denna AI-tj\u00e4nst, s\u00e4rskilt s\u00e5h\u00e4r 2-3 \u00e5r senare n\u00e4r man har l\u00e4rt sig hur det fungerar och dess styrkor och svagheter.
\nDagligen hj\u00e4lper Copilot mig att s\u00e4tta upp repetitiva arrayer, skriva tester och andra sm\u00e5saker som att p\u00e5minna mig om funktioners namn och ordningen p\u00e5 parametrarna. Ett oumb\u00e4rligt verktyg som har sparat b\u00e5de mig och mina kunder massor med tid.
\nUnder det g\u00e5ngna \u00e5ret s\u00e5 sl\u00e4ppte de \u00e4ven "Copilot chat" d\u00e4r man mer naturligt kan f\u00e5 kod f\u00f6rklarat f\u00f6r sig, testerna skrivna och liknande uppgifter. Dessv\u00e4rre inget jag har satt mig in i j\u00e4ttemycket \u00e4nnu.
\n\nBes\u00f6k webbplats \u2192
\nDen kanske mest k\u00e4nda k\u00e4nda password managern. Men \u00e4nd\u00e5 v\u00e4rd att n\u00e4mna.
\nJa, appen \u00e4r nu n\u00e5gon form av Electron-app, och ja prenumerationsmodellen \u00e4r \u00e5t skogen \u2013 s\u00e4rskilt n\u00e4r man har lagt 1000-tals kronor p\u00e5 deras tidigare "standalone"-licenser. Men \u00e4nd\u00e5, appen och tj\u00e4nsten funkar extremt bra, b\u00e5de p\u00e5 Mac och iOS och man f\u00e5r \u00e4nd\u00e5 ge en stor eloge f\u00f6r alla uppdateringar och funktionerna som de har lanserat p\u00e5 sistone.
\nOch samtidigt som bl.a. LastPass har visat sig inkapabla till att skydda anv\u00e4ndarnas l\u00f6senord s\u00e5 har 1Password \u00e4n s\u00e5 l\u00e4nge verkat f\u00f6r att skydda anv\u00e4ndarnas uppgifter som sin h\u00f6gsta prioritet.
\nOm du \u00e4r ute efter n\u00e5got billigare och med f\u00e4rre features, spana in Bitwarden.
\n\nBild via 1Password
\nBes\u00f6k webbplats \u2192
\nDelar kanske inte s\u00e5 m\u00e5nga giffar nu f\u00f6r tiden \u2013 men Giphys app f\u00f6r macOS \u00e4r riktigt bra, den funkar helt enkelt som en screen recorder d\u00e4r man kan v\u00e4lja del p\u00e5 sk\u00e4rmen som ska spela in, och sedan exportera det som en .gif eller .mp4. Perfekt f\u00f6r att skicka \u00f6ver till kunder och klienter.
\n\nBild via Giphy
\nBes\u00f6k webbplats \u2192
\nAndra appar och tj\u00e4nster som jag anv\u00e4nder mycket.
\nMin nya faktureringstj\u00e4nst. L\u00e5ngt ifr\u00e5n perfekt och \u00e4r ganska featureless i sitt basutf\u00f6rande \u2013 och att man endast f\u00e5r API-access p\u00e5 "Platina"-konton?! N\u00e5v\u00e4l, helt klart det enklaste substitutet jag hittade efter att Billogram sparkade ut alla sm\u00e5f\u00f6retag som kunder, minus d\u00e5 att man f\u00e5r pricka av fakturor manuellt men i utbyte f\u00e5r man lite mer kontroll.
\nEn native-klient f\u00f6r chatGPT, varken mer eller mindre. Men ack vad smidigt att ha den \u00e5t sidan p\u00e5 skrivbordet ist\u00e4llet f\u00f6r att sitta i webbl\u00e4saren.
\n(S)FTP:a som om det vore 1995. Ibland beh\u00f6va man bara snabbt hitta och granska inneh\u00e5llet i en fil (eller placera n\u00e5got) p\u00e5 en server, och d\u00e5 \u00e4r fortfarande FTP den smidigare l\u00f6sningen. I \u00f6ver 15 \u00e5r har Cyberduck tj\u00e4nat mig troget.
\nThis article, \"Apptips\", was first posted on marcusolsson.me.
", "summary": "D\u00e5 det har varit en v\u00e4ldigt hektiskt m\u00e5nad h\u00e4r p\u00e5 kontoret s\u00e5 har jag inte riktigt hunnit med att skriva n\u00e5got vettigt, s\u00e5 jag t\u00e4nkte helt enkelt att jag k\u00f6r en favorit i repris ifr\u00e5n 2023 \u2013 tips p\u00e5 ett g\u00e4ng trevliga appar och tj\u00e4nster som jag anv\u00e4nder dagligen.
\nInte f\u00f6rens man \u00e4r utan Copilot s\u00e5 f\u00f6rst\u00e5r man hur mycket man f\u00f6rlitar sig p\u00e5 denna AI-tj\u00e4nst, s\u00e4rskilt s\u00e5h\u00e4r 2-3 \u00e5r senare n\u00e4r man har l\u00e4rt sig hur det fungerar och dess styrkor och svagheter.
\nDagligen hj\u00e4lper Copilot mig att s\u00e4tta upp repetitiva arrayer, skriva tester och andra sm\u00e5saker som att p\u00e5minna mig om funktioners namn och ordningen p\u00e5 parametrarna. Ett oumb\u00e4rligt verktyg som har sparat b\u00e5de mig och mina kunder massor med tid.
\nUnder det g\u00e5ngna \u00e5ret s\u00e5 sl\u00e4ppte de \u00e4ven "Copilot chat" d\u00e4r man mer naturligt kan f\u00e5 kod f\u00f6rklarat f\u00f6r sig, testerna skrivna och liknande uppgifter. Dessv\u00e4rre inget jag har satt mig in i j\u00e4ttemycket \u00e4nnu.
\n\nBes\u00f6k webbplats \u2192
\nDen kanske mest k\u00e4nda k\u00e4nda password managern. Men \u00e4nd\u00e5 v\u00e4rd att n\u00e4mna.
\nJa, appen \u00e4r nu n\u00e5gon form av Electron-app, och ja prenumerationsmodellen \u00e4r \u00e5t skogen \u2013 s\u00e4rskilt n\u00e4r man har lagt 1000-tals kronor p\u00e5 deras tidigare "standalone"-licenser. Men \u00e4nd\u00e5, appen och tj\u00e4nsten funkar extremt bra, b\u00e5de p\u00e5 Mac och iOS och man f\u00e5r \u00e4nd\u00e5 ge en stor eloge f\u00f6r alla uppdateringar och funktionerna som de har lanserat p\u00e5 sistone.
\nOch samtidigt som bl.a. LastPass har visat sig inkapabla till att skydda anv\u00e4ndarnas l\u00f6senord s\u00e5 har 1Password \u00e4n s\u00e5 l\u00e4nge verkat f\u00f6r att skydda anv\u00e4ndarnas uppgifter som sin h\u00f6gsta prioritet.
\nOm du \u00e4r ute efter n\u00e5got billigare och med f\u00e4rre features, spana in Bitwarden.
\n\nBild via 1Password
\nBes\u00f6k webbplats \u2192
\nDelar kanske inte s\u00e5 m\u00e5nga giffar nu f\u00f6r tiden \u2013 men Giphys app f\u00f6r macOS \u00e4r riktigt bra, den funkar helt enkelt som en screen recorder d\u00e4r man kan v\u00e4lja del p\u00e5 sk\u00e4rmen som ska spela in, och sedan exportera det som en .gif eller .mp4. Perfekt f\u00f6r att skicka \u00f6ver till kunder och klienter.
\n\nBild via Giphy
\nBes\u00f6k webbplats \u2192
\nAndra appar och tj\u00e4nster som jag anv\u00e4nder mycket.
\nMin nya faktureringstj\u00e4nst. L\u00e5ngt ifr\u00e5n perfekt och \u00e4r ganska featureless i sitt basutf\u00f6rande \u2013 och att man endast f\u00e5r API-access p\u00e5 "Platina"-konton?! N\u00e5v\u00e4l, helt klart det enklaste substitutet jag hittade efter att Billogram sparkade ut alla sm\u00e5f\u00f6retag som kunder, minus d\u00e5 att man f\u00e5r pricka av fakturor manuellt men i utbyte f\u00e5r man lite mer kontroll.
\nEn native-klient f\u00f6r chatGPT, varken mer eller mindre. Men ack vad smidigt att ha den \u00e5t sidan p\u00e5 skrivbordet ist\u00e4llet f\u00f6r att sitta i webbl\u00e4saren.
\n(S)FTP:a som om det vore 1995. Ibland beh\u00f6va man bara snabbt hitta och granska inneh\u00e5llet i en fil (eller placera n\u00e5got) p\u00e5 en server, och d\u00e5 \u00e4r fortfarande FTP den smidigare l\u00f6sningen. I \u00f6ver 15 \u00e5r har Cyberduck tj\u00e4nat mig troget.
\nThis article, \"Apptips\", was first posted on marcusolsson.me.
", "date_published": "2024-01-30T21:32:06+01:00", "date_modified": "2024-01-30T21:32:06+01:00", "authors": [{ "name": "Marcus Olsson" }], "tags": [ ] }, { "id": "https://marcusolsson.me/artiklar/finns-behovet-av-ett-tidrapporteringsverktyg", "title": "Finns behovet av ett tidrapporteringsverktyg?", "url": "https://marcusolsson.me/artiklar/finns-behovet-av-ett-tidrapporteringsverktyg", "content_html": "Jag har i mellandagarna slutf\u00f6rst arbetet p\u00e5 ett litet verktyg jag har jobbat p\u00e5 till-och-fr\u00e5n de senaste veckorna \u2013 ett enkelt tidrapporteringsverktyg f\u00f6r att f\u00f6renkla rapportering och fakturering emot mina kunder.
\nJag har \u00e4nda sedan jag b\u00f6rjade frilansa f\u00f6r 10 \u00e5r sedan bifogat ett enklare tidsprotokoll tillsammans med fakturorna till mina kunder/klienter.
\nTiden i sig sj\u00e4vt har jag alltid f\u00f6rt p\u00e5 Post It-lappar och i anteckningsb\u00f6cker (\u00e4ven provat automatiska appar som Harvest o.s.v. men upplever att det funkar mycket d\u00e5ligt n\u00e4r man hoppas fram och tillbaka mellan flera projekt och kunder en vanlig arbetsdag, tar mer tid \u00e4n vad det sparar) d\u00e4r jag skriver st\u00f6dord f\u00f6r vad jag faktiskt har jobbat p\u00e5. Sedan sammanst\u00e4lls detta i Numbers som exporteras som en PDF f\u00f6r att bifogas med fakturan.
\nProblem blir det dock n\u00e4r jag kanske \u00e4r inblandad i ett halvt dussin projekt och sub-projekt f\u00f6r en och samma kund n\u00e4r jag ska sammanfatta i slutet av dagen \u2013 vilken uppgift p\u00e5 vilket projekt vad det jag jobbade p\u00e5 en viss tid?
\nOfta kan jag ta Github till hj\u00e4lp d\u00e4r i 99% all kod lagras, men \u00e4ven d\u00e4r blir knepigt om/n\u00e4r det \u00e4r utspritt mellan olika repon och branches.
\nTimekeeper \u00e4r appen jag har byggt. D\u00e4r jag enkelt kan h\u00e5lla is\u00e4r klienterna, m\u00e5nader och projekt. Dessutom s\u00e5 kan jag enkelt koppla ett eller flera repon till klienten f\u00f6r att direkt i rapportvyn se vilka h\u00e4ndelser som har skett ett visst datum genom Githubs API:er.
\n\n\nSom bonus kan jag dessutom be min AI-modell summera det utf\u00f6rda arbetet i ett-par-tre meningar.
\n\nSlutligen s\u00e5 kan jag exportera ut tidrapporten som en PDF och bifoga med fakturan precis som vanligt.
\n\nProjektet \u00e4r byggt med TALL-stacken \u2013 s\u00e5klart. Roligt att arbete med det nya Livewire 3 (\u00e4ven om jag inte \u00e4r j\u00e4ttef\u00f6rtjust i hur de har \u00e4ndrat hur modeller och objekt bindas i komponenterna, jag har sl\u00e4ppt ett enkelt paket, olssonm/livewire-synthesizer f\u00f6r att underl\u00e4tta detta.)
\nJag har byggt Timekeeper f\u00f6r att vara v\u00e4ldigt anpassat efter hur jag jobbar, men jag \u00e4r v\u00e4ldigt n\u00f6jd med resultatet och skulle vara intresserad av att veta hur andra jobbar \u2013 och om detta projektet kanske \u00e4r till\u00e4mpningsbart f\u00f6r dem. Om det skulle finnas intresse s\u00e5 skulle det f\u00f6rmodligen vara v\u00e4rt att omvandla det till en plattform som fler/andra ocks\u00e5 kan anv\u00e4nda.
\nSkjut g\u00e4rna iv\u00e4g ett mail eller skicka en Tweet (\u00e4r det "ett X" nu f\u00f6rtiden?) och dela med dig av hur du jobbar och om du skulle vara intresserad av att anv\u00e4nda det h\u00e4r verktyget.
\nThis article, \"Finns behovet av ett tidrapporteringsverktyg?\", was first posted on marcusolsson.me.
", "summary": "Jag har i mellandagarna slutf\u00f6rst arbetet p\u00e5 ett litet verktyg jag har jobbat p\u00e5 till-och-fr\u00e5n de senaste veckorna \u2013 ett enkelt tidrapporteringsverktyg f\u00f6r att f\u00f6renkla rapportering och fakturering emot mina kunder.
\nJag har \u00e4nda sedan jag b\u00f6rjade frilansa f\u00f6r 10 \u00e5r sedan bifogat ett enklare tidsprotokoll tillsammans med fakturorna till mina kunder/klienter.
\nTiden i sig sj\u00e4vt har jag alltid f\u00f6rt p\u00e5 Post It-lappar och i anteckningsb\u00f6cker (\u00e4ven provat automatiska appar som Harvest o.s.v. men upplever att det funkar mycket d\u00e5ligt n\u00e4r man hoppas fram och tillbaka mellan flera projekt och kunder en vanlig arbetsdag, tar mer tid \u00e4n vad det sparar) d\u00e4r jag skriver st\u00f6dord f\u00f6r vad jag faktiskt har jobbat p\u00e5. Sedan sammanst\u00e4lls detta i Numbers som exporteras som en PDF f\u00f6r att bifogas med fakturan.
\nProblem blir det dock n\u00e4r jag kanske \u00e4r inblandad i ett halvt dussin projekt och sub-projekt f\u00f6r en och samma kund n\u00e4r jag ska sammanfatta i slutet av dagen \u2013 vilken uppgift p\u00e5 vilket projekt vad det jag jobbade p\u00e5 en viss tid?
\nOfta kan jag ta Github till hj\u00e4lp d\u00e4r i 99% all kod lagras, men \u00e4ven d\u00e4r blir knepigt om/n\u00e4r det \u00e4r utspritt mellan olika repon och branches.
\nTimekeeper \u00e4r appen jag har byggt. D\u00e4r jag enkelt kan h\u00e5lla is\u00e4r klienterna, m\u00e5nader och projekt. Dessutom s\u00e5 kan jag enkelt koppla ett eller flera repon till klienten f\u00f6r att direkt i rapportvyn se vilka h\u00e4ndelser som har skett ett visst datum genom Githubs API:er.
\n\n\nSom bonus kan jag dessutom be min AI-modell summera det utf\u00f6rda arbetet i ett-par-tre meningar.
\n\nSlutligen s\u00e5 kan jag exportera ut tidrapporten som en PDF och bifoga med fakturan precis som vanligt.
\n\nProjektet \u00e4r byggt med TALL-stacken \u2013 s\u00e5klart. Roligt att arbete med det nya Livewire 3 (\u00e4ven om jag inte \u00e4r j\u00e4ttef\u00f6rtjust i hur de har \u00e4ndrat hur modeller och objekt bindas i komponenterna, jag har sl\u00e4ppt ett enkelt paket, olssonm/livewire-synthesizer f\u00f6r att underl\u00e4tta detta.)
\nJag har byggt Timekeeper f\u00f6r att vara v\u00e4ldigt anpassat efter hur jag jobbar, men jag \u00e4r v\u00e4ldigt n\u00f6jd med resultatet och skulle vara intresserad av att veta hur andra jobbar \u2013 och om detta projektet kanske \u00e4r till\u00e4mpningsbart f\u00f6r dem. Om det skulle finnas intresse s\u00e5 skulle det f\u00f6rmodligen vara v\u00e4rt att omvandla det till en plattform som fler/andra ocks\u00e5 kan anv\u00e4nda.
\nSkjut g\u00e4rna iv\u00e4g ett mail eller skicka en Tweet (\u00e4r det "ett X" nu f\u00f6rtiden?) och dela med dig av hur du jobbar och om du skulle vara intresserad av att anv\u00e4nda det h\u00e4r verktyget.
\nThis article, \"Finns behovet av ett tidrapporteringsverktyg?\", was first posted on marcusolsson.me.
", "date_published": "2023-12-29T12:30:00+01:00", "date_modified": "2023-12-29T12:30:00+01:00", "authors": [{ "name": "Marcus Olsson" }], "tags": [ ] }, { "id": "https://marcusolsson.me/artiklar/tillganglighet-i-vinter-2023", "title": "Tillgänglighet i vinter", "url": "https://marcusolsson.me/artiklar/tillganglighet-i-vinter-2023", "content_html": "\n2023 har varit ett s\u00e5dant d\u00e4r \u00e5r som har g\u00e5tt otroligt fort \u2013 och snart \u00e4r det slut! Det betyder \u00e4ven att det snart \u00e4r dags f\u00f6r lite sedvanlig jul- och ny\u00e5rsledighet.
\nMellan den 22:a december och 3:e januari h\u00e5ller kontoret st\u00e4ngt. Men precis som vanligt \u00e4r jag aldrig l\u00e5ngt borta om akuta problem skulle uppst\u00e5. F\u00f6r \u00f6vriga \u00e4renden hanterar jag dem s\u00e5 snart jag \u00e4r tillbaka i januari.
\n\u00d6nskar som alltid b\u00e5de nya och gamla kunder en trevlig vinter, god\u00a0jul och gott\u00a0nytt\u00a0\u00e5r!
\nThis article, \"Tillg\u00e4nglighet i vinter\", was first posted on marcusolsson.me.
", "summary": "\n2023 har varit ett s\u00e5dant d\u00e4r \u00e5r som har g\u00e5tt otroligt fort \u2013 och snart \u00e4r det slut! Det betyder \u00e4ven att det snart \u00e4r dags f\u00f6r lite sedvanlig jul- och ny\u00e5rsledighet.
\nMellan den 22:a december och 3:e januari h\u00e5ller kontoret st\u00e4ngt. Men precis som vanligt \u00e4r jag aldrig l\u00e5ngt borta om akuta problem skulle uppst\u00e5. F\u00f6r \u00f6vriga \u00e4renden hanterar jag dem s\u00e5 snart jag \u00e4r tillbaka i januari.
\n\u00d6nskar som alltid b\u00e5de nya och gamla kunder en trevlig vinter, god\u00a0jul och gott\u00a0nytt\u00a0\u00e5r!
\nThis article, \"Tillg\u00e4nglighet i vinter\", was first posted on marcusolsson.me.
", "date_published": "2023-12-18T16:02:01+01:00", "date_modified": "2023-12-18T16:02:01+01:00", "authors": [{ "name": "Marcus Olsson" }], "tags": [ ] }, { "id": "https://marcusolsson.me/artiklar/garo-laddbox-dum-till-smart", "title": "Garo laddbox – dum till smart", "url": "https://marcusolsson.me/artiklar/garo-laddbox-dum-till-smart", "content_html": "F\u00f6r tv\u00e5 \u00e5r sedan installerade jag en laddbox f\u00f6r v\u00e5r nya bil (en Seat Leon ST e-hybrid), d\u00e4r jag gick p\u00e5 elektrikerns rekommendation \u2013 en Garo GLB. 1
\nMedan det \u00e4r en stabil och drifts\u00e4ker laddbox s\u00e5 visade det sig dessv\u00e4rre att det var en mycket dum s\u00e5dan, den st\u00f6djer inga av de otaliga protokollen som m\u00f6jligg\u00f6r smart styrning efter elpris eller liknande (Garo har sedan dess kommit med en "+"-variant som st\u00f6djer i.a.f. OCPP). Visade sig ocks\u00e5 att Seat \u00e4r ett litet f\u00f6r lite m\u00e4rke f\u00f6r t.ex. Tibber att supporta med smart integration.
\nBoxen har ett enkelt webbgr\u00e4nssnitt som g\u00f6rs tillg\u00e4ngligt p\u00e5 det lokala n\u00e4tverket d\u00e4r man kan schemal\u00e4gga laddning vissa tider eller helt enkelt s\u00e4tta den till on/off, dock fyller den inte riktigt de lite mer precisa behoven jag har.
\nS\u00e5 vad ska man g\u00f6ra om man vill schemal\u00e4gga laddningen efter elpriset? Hacka boxen s\u00e5klart!
\nInuti boxen finns en vanlig Raspberry Pi som \u00e4r sj\u00e4lva hj\u00e4rnan f\u00f6r laddboxen \u2013 och d\u00e5 enheten m\u00f6jligg\u00f6r en att manuellt ladda in ett firmware s\u00e5 funderade jag f\u00f6rst p\u00e5 att \u00e4ndra i k\u00e4llkoden (i ett par bash-skript som k\u00f6rs i samband med uppdateringen) s\u00e5 att jag kunde SSH:a in i den. Men d\u00e5 jag g\u00e4rna vill undvika att "bricka" den helt s\u00e5 b\u00f6rjade jag ist\u00e4llet att kika p\u00e5 n\u00e4tverkstrafiken som g\u00e5r via webbgr\u00e4nssnittet.
\nGenom att bara kolla i webbl\u00e4sarens n\u00e4tverks-"inspector" var det ganska enkelt att hitta intressanta endpoints som anv\u00e4nds vid olika interaktioner \u2013 bl.a. en status-endpoint som kollas av en g\u00e5ng i sekunden:
\n\n
1# /servlet/rest/chargebox/status23{4 "serialNumber":"xxx",5 "ocppState":null,6 "connectedToInternet":true,7 "freeCharging":false,8 "ocppConnectionState":null,9 "connector":"SEARCH_COMM",10 "mode":"SCHEMA",11 "...":"..."12}
1# /servlet/rest/chargebox/status23{4 "serialNumber":"xxx",5 "ocppState":null,6 "connectedToInternet":true,7 "freeCharging":false,8 "ocppConnectionState":null,9 "connector":"SEARCH_COMM",10 "mode":"SCHEMA",11 "...":"..."12}
Genom att klicka runt hittade jag ocks\u00e5 /servlet/rest/chargebox/mode/ALWAYS_ON
, /servlet/rest/chargebox/mode/ALWAYS_OFF
och /servlet/rest/chargebox/mode/SCHEMA
som s\u00e4tter boxen i on/off eller "schema"-l\u00e4ge genom en POST
-request. Anv\u00e4ndbart v\u00e4rre!
D\u00e5 webbgr\u00e4nssnittet endast \u00e4r tillg\u00e4nglig n\u00e4r man befinner sig p\u00e5 samma n\u00e4tverk (antingen genom en router eller direkt uppkoppling emot boxen Wifi-modul) s\u00e5 kan man inte komma \u00e5t boxen fr\u00e5n vilken server som helst utifr\u00e5n, utan den beh\u00f6ver vara lokal, och d\u00e5 jag inte har n\u00e5gon server/dator som \u00e4r p\u00e5 dygnet runt p\u00e5 n\u00e4tverket s\u00e5 valde jag att anv\u00e4nda mig av Apples Shortcuts.
\niOS till\u00e5ter en att schemal\u00e4gga automatiserade jobb, och mobilen \u00e4r alltid kopplad mot n\u00e4tverket n\u00e4r man \u00e4r hemma. S\u00e5 jag byggde ett enkelt fl\u00f6de d\u00e4r man som anv\u00e4ndare kan v\u00e4lja om boxen ska vara p\u00e5, av eller enligt schema.
\n\n\nDetta fungerade finemang, kanske inte s\u00e4rskilt anv\u00e4ndbart d\u00e5 samma funktionalitet redan finns i webgr\u00e4nssnittet \u2013 men visar \u00e4nd\u00e5 att metoden fungerar.
\nI webbgr\u00e4nssnittet n\u00e4r man l\u00e4gger in en "slot" d\u00e4r laddaren ska vara aktiv hittade jag endpointen /servlet/rest/chargebox/schema
dit det postades data i f\u00f6ljande format:
\n
1{2 "schemaId": 0,3 "start": "09:00:00",4 "stop": "10:00:00",5 "weekday": "5",6 "chargeLimit": 07}
1{2 "schemaId": 0,3 "start": "09:00:00",4 "stop": "10:00:00",5 "weekday": "5",6 "chargeLimit": 07}
Perfekt, inga konstigheter eller krusiduller. Bara att posta in dag och tider som laddaren ska vara aktiv. Nu beh\u00f6vde jag bara faktiskt f\u00e5 fram de tiderna som laddaren ska vara aktiv; sedan tidigare har jag alla dagens (och morgondagens) elpriser n\u00e4ra till hands via elchock.se s\u00e5 byggde jag ett litet API som spottar ut de fyra billigaste sammanh\u00e4ngande timmarna (d\u00e5 jag bara har en plugin-hybrid brukar jag kunna ladda den p\u00e5 2-4h) och h\u00e4mta dem i precis det formatet som Garo-laddboxen beh\u00f6ver:
\n\n
1[2 {3 "schemaId":0,4 "start":"20:00:00",5 "stop":"21:00:00",6 "weekday":"4",7 "price":0.45419,8 "chargeLimit":09 },10 {11 "schemaId":0,12 "start":"21:00:00",13 "stop":"22:00:00",14 "weekday":"4",15 "price":0.43319,16 "chargeLimit":017 }18 # ...19]
1[2 {3 "schemaId":0,4 "start":"20:00:00",5 "stop":"21:00:00",6 "weekday":"4",7 "price":0.45419,8 "chargeLimit":09 },10 {11 "schemaId":0,12 "start":"21:00:00",13 "stop":"22:00:00",14 "weekday":"4",15 "price":0.43319,16 "chargeLimit":017 }18 # ...19]
Blev sedan till att \u00e5nyo bygga en Shortcuts-app som skulle g\u00f6ra allt f\u00f6ljande:
\nDELETE
-request till /servlet/rest/chargebox/schema/{id}
)Det slutgiltiga fl\u00f6det blev n\u00e5got s\u00e5dant h\u00e4r:
\n\nDen fula List
-sektionen med 7-1 \u00e4r d\u00e5 jag inte hittade n\u00e5got annat smart s\u00e4tt att g\u00f6ra en omv\u00e4nd for-loop med r\u00e4tt index f\u00f6r att rensa ut de gamla schemaraderna.
I webbgr\u00e4nssnittet f\u00f6r Garo-laddboxen kan man bekr\u00e4fta att korrekt schema \u00e4r inladdat:
\n\nDetta jobbet \u00e4r sedan inlagt att k\u00f6ras varje eftermiddag f\u00f6r att ladda in schemat i laddboxen automatiskt i bakgrunden medan allt jag beh\u00f6ver g\u00f6ra \u00e4r att se till att bilen \u00e4r inkopplad.
\n\u2013
\nApples Shortcuts-l\u00f6sning \u00e4r l\u00e5ngt mer kraftfull \u00e4n vad man f\u00f6rst kan tro d\u00e4r man kan bygga r\u00e4tt s\u00e5 avancerade automatiseringar. Som programmerare s\u00e5 \u00e4r det dock n\u00e5got frustrerande emellan\u00e5t n\u00e4r man vet precis vad man ska \u00f6ppna men inte riktigt vet hur \u2013 t.ex. s\u00e5 \u00e4r POST
och DELETE
-requests en inst\u00e4llning i Get URL-funktionen och f\u00f6r att undvika att escape:a JSON s\u00e5 m\u00e5ste man posta en Dictionary-variabel som en fil ist\u00e4llet f\u00f6r text.
Om jag hade en lokal server placeras som kunde t.ex. l\u00e4sa av statusen i n\u00e5gorlunda realtid f\u00f6r att f\u00e5 en uppfattning om laddningsniv\u00e5 p\u00e5 bilen s\u00e5 skulle man b\u00e4ttre kunna styra schemaalgoritmen \u2013 i nuvarande fall om 22:00 \u00e4r billigare \u00e4n 20:00 och bilen laddar fullt p\u00e5 en timma s\u00e5 tr\u00e4ffar den lite fel. Men rimligtvis \u00e4r detta bra nog 90% av fallen f\u00f6r mig. 2
\nProduktsida Garo GLB \u21a9
Finns s\u00e5 mycket annat att ta h\u00e4nsyn till ocks\u00e5, hittade t.ex. denna avhandlingen fr\u00e5n Chalmers som verkar intressant. \u21a9
This article, \"Garo laddbox \u2013 dum till smart\", was first posted on marcusolsson.me.
", "summary": "F\u00f6r tv\u00e5 \u00e5r sedan installerade jag en laddbox f\u00f6r v\u00e5r nya bil (en Seat Leon ST e-hybrid), d\u00e4r jag gick p\u00e5 elektrikerns rekommendation \u2013 en Garo GLB. 1
\nMedan det \u00e4r en stabil och drifts\u00e4ker laddbox s\u00e5 visade det sig dessv\u00e4rre att det var en mycket dum s\u00e5dan, den st\u00f6djer inga av de otaliga protokollen som m\u00f6jligg\u00f6r smart styrning efter elpris eller liknande (Garo har sedan dess kommit med en "+"-variant som st\u00f6djer i.a.f. OCPP). Visade sig ocks\u00e5 att Seat \u00e4r ett litet f\u00f6r lite m\u00e4rke f\u00f6r t.ex. Tibber att supporta med smart integration.
\nBoxen har ett enkelt webbgr\u00e4nssnitt som g\u00f6rs tillg\u00e4ngligt p\u00e5 det lokala n\u00e4tverket d\u00e4r man kan schemal\u00e4gga laddning vissa tider eller helt enkelt s\u00e4tta den till on/off, dock fyller den inte riktigt de lite mer precisa behoven jag har.
\nS\u00e5 vad ska man g\u00f6ra om man vill schemal\u00e4gga laddningen efter elpriset? Hacka boxen s\u00e5klart!
\nInuti boxen finns en vanlig Raspberry Pi som \u00e4r sj\u00e4lva hj\u00e4rnan f\u00f6r laddboxen \u2013 och d\u00e5 enheten m\u00f6jligg\u00f6r en att manuellt ladda in ett firmware s\u00e5 funderade jag f\u00f6rst p\u00e5 att \u00e4ndra i k\u00e4llkoden (i ett par bash-skript som k\u00f6rs i samband med uppdateringen) s\u00e5 att jag kunde SSH:a in i den. Men d\u00e5 jag g\u00e4rna vill undvika att "bricka" den helt s\u00e5 b\u00f6rjade jag ist\u00e4llet att kika p\u00e5 n\u00e4tverkstrafiken som g\u00e5r via webbgr\u00e4nssnittet.
\nGenom att bara kolla i webbl\u00e4sarens n\u00e4tverks-"inspector" var det ganska enkelt att hitta intressanta endpoints som anv\u00e4nds vid olika interaktioner \u2013 bl.a. en status-endpoint som kollas av en g\u00e5ng i sekunden:
\n\n
1# /servlet/rest/chargebox/status23{4 "serialNumber":"xxx",5 "ocppState":null,6 "connectedToInternet":true,7 "freeCharging":false,8 "ocppConnectionState":null,9 "connector":"SEARCH_COMM",10 "mode":"SCHEMA",11 "...":"..."12}
1# /servlet/rest/chargebox/status23{4 "serialNumber":"xxx",5 "ocppState":null,6 "connectedToInternet":true,7 "freeCharging":false,8 "ocppConnectionState":null,9 "connector":"SEARCH_COMM",10 "mode":"SCHEMA",11 "...":"..."12}
Genom att klicka runt hittade jag ocks\u00e5 /servlet/rest/chargebox/mode/ALWAYS_ON
, /servlet/rest/chargebox/mode/ALWAYS_OFF
och /servlet/rest/chargebox/mode/SCHEMA
som s\u00e4tter boxen i on/off eller "schema"-l\u00e4ge genom en POST
-request. Anv\u00e4ndbart v\u00e4rre!
D\u00e5 webbgr\u00e4nssnittet endast \u00e4r tillg\u00e4nglig n\u00e4r man befinner sig p\u00e5 samma n\u00e4tverk (antingen genom en router eller direkt uppkoppling emot boxen Wifi-modul) s\u00e5 kan man inte komma \u00e5t boxen fr\u00e5n vilken server som helst utifr\u00e5n, utan den beh\u00f6ver vara lokal, och d\u00e5 jag inte har n\u00e5gon server/dator som \u00e4r p\u00e5 dygnet runt p\u00e5 n\u00e4tverket s\u00e5 valde jag att anv\u00e4nda mig av Apples Shortcuts.
\niOS till\u00e5ter en att schemal\u00e4gga automatiserade jobb, och mobilen \u00e4r alltid kopplad mot n\u00e4tverket n\u00e4r man \u00e4r hemma. S\u00e5 jag byggde ett enkelt fl\u00f6de d\u00e4r man som anv\u00e4ndare kan v\u00e4lja om boxen ska vara p\u00e5, av eller enligt schema.
\n\n\nDetta fungerade finemang, kanske inte s\u00e4rskilt anv\u00e4ndbart d\u00e5 samma funktionalitet redan finns i webgr\u00e4nssnittet \u2013 men visar \u00e4nd\u00e5 att metoden fungerar.
\nI webbgr\u00e4nssnittet n\u00e4r man l\u00e4gger in en "slot" d\u00e4r laddaren ska vara aktiv hittade jag endpointen /servlet/rest/chargebox/schema
dit det postades data i f\u00f6ljande format:
\n
1{2 "schemaId": 0,3 "start": "09:00:00",4 "stop": "10:00:00",5 "weekday": "5",6 "chargeLimit": 07}
1{2 "schemaId": 0,3 "start": "09:00:00",4 "stop": "10:00:00",5 "weekday": "5",6 "chargeLimit": 07}
Perfekt, inga konstigheter eller krusiduller. Bara att posta in dag och tider som laddaren ska vara aktiv. Nu beh\u00f6vde jag bara faktiskt f\u00e5 fram de tiderna som laddaren ska vara aktiv; sedan tidigare har jag alla dagens (och morgondagens) elpriser n\u00e4ra till hands via elchock.se s\u00e5 byggde jag ett litet API som spottar ut de fyra billigaste sammanh\u00e4ngande timmarna (d\u00e5 jag bara har en plugin-hybrid brukar jag kunna ladda den p\u00e5 2-4h) och h\u00e4mta dem i precis det formatet som Garo-laddboxen beh\u00f6ver:
\n\n
1[2 {3 "schemaId":0,4 "start":"20:00:00",5 "stop":"21:00:00",6 "weekday":"4",7 "price":0.45419,8 "chargeLimit":09 },10 {11 "schemaId":0,12 "start":"21:00:00",13 "stop":"22:00:00",14 "weekday":"4",15 "price":0.43319,16 "chargeLimit":017 }18 # ...19]
1[2 {3 "schemaId":0,4 "start":"20:00:00",5 "stop":"21:00:00",6 "weekday":"4",7 "price":0.45419,8 "chargeLimit":09 },10 {11 "schemaId":0,12 "start":"21:00:00",13 "stop":"22:00:00",14 "weekday":"4",15 "price":0.43319,16 "chargeLimit":017 }18 # ...19]
Blev sedan till att \u00e5nyo bygga en Shortcuts-app som skulle g\u00f6ra allt f\u00f6ljande:
\nDELETE
-request till /servlet/rest/chargebox/schema/{id}
)Det slutgiltiga fl\u00f6det blev n\u00e5got s\u00e5dant h\u00e4r:
\n\nDen fula List
-sektionen med 7-1 \u00e4r d\u00e5 jag inte hittade n\u00e5got annat smart s\u00e4tt att g\u00f6ra en omv\u00e4nd for-loop med r\u00e4tt index f\u00f6r att rensa ut de gamla schemaraderna.
I webbgr\u00e4nssnittet f\u00f6r Garo-laddboxen kan man bekr\u00e4fta att korrekt schema \u00e4r inladdat:
\n\nDetta jobbet \u00e4r sedan inlagt att k\u00f6ras varje eftermiddag f\u00f6r att ladda in schemat i laddboxen automatiskt i bakgrunden medan allt jag beh\u00f6ver g\u00f6ra \u00e4r att se till att bilen \u00e4r inkopplad.
\n\u2013
\nApples Shortcuts-l\u00f6sning \u00e4r l\u00e5ngt mer kraftfull \u00e4n vad man f\u00f6rst kan tro d\u00e4r man kan bygga r\u00e4tt s\u00e5 avancerade automatiseringar. Som programmerare s\u00e5 \u00e4r det dock n\u00e5got frustrerande emellan\u00e5t n\u00e4r man vet precis vad man ska \u00f6ppna men inte riktigt vet hur \u2013 t.ex. s\u00e5 \u00e4r POST
och DELETE
-requests en inst\u00e4llning i Get URL-funktionen och f\u00f6r att undvika att escape:a JSON s\u00e5 m\u00e5ste man posta en Dictionary-variabel som en fil ist\u00e4llet f\u00f6r text.
Om jag hade en lokal server placeras som kunde t.ex. l\u00e4sa av statusen i n\u00e5gorlunda realtid f\u00f6r att f\u00e5 en uppfattning om laddningsniv\u00e5 p\u00e5 bilen s\u00e5 skulle man b\u00e4ttre kunna styra schemaalgoritmen \u2013 i nuvarande fall om 22:00 \u00e4r billigare \u00e4n 20:00 och bilen laddar fullt p\u00e5 en timma s\u00e5 tr\u00e4ffar den lite fel. Men rimligtvis \u00e4r detta bra nog 90% av fallen f\u00f6r mig. 2
\nProduktsida Garo GLB \u21a9
Finns s\u00e5 mycket annat att ta h\u00e4nsyn till ocks\u00e5, hittade t.ex. denna avhandlingen fr\u00e5n Chalmers som verkar intressant. \u21a9
This article, \"Garo laddbox \u2013 dum till smart\", was first posted on marcusolsson.me.
", "date_published": "2023-11-09T10:45:42+01:00", "date_modified": "2023-11-09T10:45:42+01:00", "authors": [{ "name": "Marcus Olsson" }], "tags": [ ] }, { "id": "https://marcusolsson.me/artiklar/billogram-dumpar-oss-smaforetagare", "title": "Billogram dumpar oss småföretagare", "url": "https://marcusolsson.me/artiklar/billogram-dumpar-oss-smaforetagare", "content_html": "Faktureringsf\u00f6retaget Billogram skickade tidigare idag ut ett mail som till b\u00f6rjan \u00e4r ganska sv\u00e5rtolkat.
\n\n\nSom ett led i Billograms strategiska plan f\u00f6r internationell expansion har vi nu beviljats en PSP-licens (Payment Service Provider). Med licensen kommer f\u00f6rh\u00f6jda regulatoriska krav, vilket leder oss till att g\u00f6ra n\u00f6dv\u00e4ndiga \u00e4ndringar i v\u00e5rt tj\u00e4nsteutbud.
\nTill f\u00f6ljd av de nya PSP-kraven st\u00e5r vi nu inf\u00f6r en betydande \u00f6kning av administrativa uppgifter och \u00f6kad handp\u00e5l\u00e4ggning per kund. Denna arbetsbelastning, i kombination med redan befintligt arbete med att tillhandah\u00e5lla tj\u00e4nsten f\u00f6r v\u00e5ra mindre och medelstora kunder, g\u00f6r den totala arbetsm\u00e4ngden oh\u00e5llbar ur ett resursperspektiv.
\n
Men till slut kom de till slutkl\u00e4mmen:
\n\n\nMed anledning av detta kommer v\u00e5r tj\u00e4nst tyv\u00e4rr att upph\u00f6ra f\u00f6r ert bolag och avtalet s\u00e4gs h\u00e4rmed upp.
\n
Billogram har allts\u00e5 valt att sparka ut alla sina sm\u00e5kunder ur plattformer. I mitt fall har Billogram varit en ganska viktig kugge i ens verksamhet.
\nEn tj\u00e4nst som jag har f\u00f6rlitat mig sedan jag startade upp som frilansande webbutvecklare, rekommenderat till dussintalet andra personer och byggt flertalet integrationer emot f\u00f6r att f\u00f6renkla ens f\u00f6retagande.
\n\nMoni, en enkel Electron-app jag har byggt p\u00e5 Billograms API f\u00f6r att smidigare h\u00e4mta ut fakturor och utbetalningar.
\nNu har man i princip fram tills 31:a december att hitta nya verktyg (de sj\u00e4lva har inlett ett samarbete med Fortnox som de rekommenderar \u2013 nej tack) och st\u00e4lla om sin verksamhet \u2013 de hanterar dock in- och utbetalningar fram till 15:e februari 2024.
\nEnkelt sagt \u2013 skitd\u00e5ligt.
\n\u2013
\nK\u00e4nner du till n\u00e5gon bra faktureringsplattform som inte \u00e4r Fortnox? Kontakta g\u00e4rna mig.
\nThis article, \"Billogram dumpar oss sm\u00e5f\u00f6retagare\", was first posted on marcusolsson.me.
", "summary": "Faktureringsf\u00f6retaget Billogram skickade tidigare idag ut ett mail som till b\u00f6rjan \u00e4r ganska sv\u00e5rtolkat.
\n\n\nSom ett led i Billograms strategiska plan f\u00f6r internationell expansion har vi nu beviljats en PSP-licens (Payment Service Provider). Med licensen kommer f\u00f6rh\u00f6jda regulatoriska krav, vilket leder oss till att g\u00f6ra n\u00f6dv\u00e4ndiga \u00e4ndringar i v\u00e5rt tj\u00e4nsteutbud.
\nTill f\u00f6ljd av de nya PSP-kraven st\u00e5r vi nu inf\u00f6r en betydande \u00f6kning av administrativa uppgifter och \u00f6kad handp\u00e5l\u00e4ggning per kund. Denna arbetsbelastning, i kombination med redan befintligt arbete med att tillhandah\u00e5lla tj\u00e4nsten f\u00f6r v\u00e5ra mindre och medelstora kunder, g\u00f6r den totala arbetsm\u00e4ngden oh\u00e5llbar ur ett resursperspektiv.
\n
Men till slut kom de till slutkl\u00e4mmen:
\n\n\nMed anledning av detta kommer v\u00e5r tj\u00e4nst tyv\u00e4rr att upph\u00f6ra f\u00f6r ert bolag och avtalet s\u00e4gs h\u00e4rmed upp.
\n
Billogram har allts\u00e5 valt att sparka ut alla sina sm\u00e5kunder ur plattformer. I mitt fall har Billogram varit en ganska viktig kugge i ens verksamhet.
\nEn tj\u00e4nst som jag har f\u00f6rlitat mig sedan jag startade upp som frilansande webbutvecklare, rekommenderat till dussintalet andra personer och byggt flertalet integrationer emot f\u00f6r att f\u00f6renkla ens f\u00f6retagande.
\n\nMoni, en enkel Electron-app jag har byggt p\u00e5 Billograms API f\u00f6r att smidigare h\u00e4mta ut fakturor och utbetalningar.
\nNu har man i princip fram tills 31:a december att hitta nya verktyg (de sj\u00e4lva har inlett ett samarbete med Fortnox som de rekommenderar \u2013 nej tack) och st\u00e4lla om sin verksamhet \u2013 de hanterar dock in- och utbetalningar fram till 15:e februari 2024.
\nEnkelt sagt \u2013 skitd\u00e5ligt.
\n\u2013
\nK\u00e4nner du till n\u00e5gon bra faktureringsplattform som inte \u00e4r Fortnox? Kontakta g\u00e4rna mig.
\nThis article, \"Billogram dumpar oss sm\u00e5f\u00f6retagare\", was first posted on marcusolsson.me.
", "date_published": "2023-10-31T18:16:49+01:00", "date_modified": "2023-10-31T18:16:49+01:00", "authors": [{ "name": "Marcus Olsson" }], "tags": [ ] }, { "id": "https://marcusolsson.me/artiklar/dagens-elpris-snabbt-och-enkelt", "title": "Dagens elpris snabbt och enkelt", "url": "https://marcusolsson.me/artiklar/dagens-elpris-snabbt-och-enkelt", "content_html": "Blev nyligen med en iPhone 15 Pro med den nya smidiga snabbknappen. N\u00e5got kul var man ju tvungen att hitta p\u00e5 med den d\u00e5 Apple f\u00f6r ovanlighetens skull faktiskt ger en ganska fria tyglar d\u00e5 man kan koppla den till en shortcut/genv\u00e4g. S\u00e5 jag skrev ett enkelt skript som h\u00e4mtar dagens elpris och spottar ut en graf som en bild (det hela \u00e4r publicerat som ett API p\u00e5 elchock.se).
\n\nD\u00e4refter snickrade jag ihop en enkel "Shortcuts"-app f\u00f6r att helt enkelt h\u00e4mta hem bilden och presentera den.
\nOm du sj\u00e4lv vill g\u00f6ra n\u00e5got liknande, eller bara vill ha en snabb genv\u00e4g till att se elpriset just nu kan du anv\u00e4nda f\u00f6ljande l\u00e4nkar (v\u00e4lj den som matchar ditt elomr\u00e5de SE1-4):
\nF\u00f6r att f\u00e5 en bra \u00f6verblick kring dagens b\u00e4sta elavtal och j\u00e4mf\u00f6relser mellan fasta och r\u00f6rliga avtal \u2013 spana in elchock.se. Om du \u00e4r os\u00e4ker p\u00e5 ditt elomr\u00e5de s\u00e5 finns en smidig s\u00f6kfunktion d\u00e4r med.
\nNotera att priserna \u00e4r utan moms och avgifter, utan priset som \u00e4r satt p\u00e5 elb\u00f6rsen Nordpool.
\n\u2013
\nSnabbknappen/shortcut in action:
\n\n\u2013
\nM\u00e5ste ge lite cred till quickchart.io som jag inte har arbetat med tidigare \u2013 de anv\u00e4nder Chart.js f\u00f6r att programmatisk spotta ut en statisk bild p\u00e5 en graf, perfekt f\u00f6r projekt som detta d\u00e4r man inte har tid och/eller m\u00f6jlighet att bygga en graf i klienten.
\nAtt bygga en graf f\u00f6r detta projektet var s\u00e5 enkelt som:
\n\n
1$config = "{}" // Chart.js-code/config23$chart = new QuickChart([4 'width' => 580,5 'height' => 300,6 'devicePixelRatio' => 2,7 'backgroundColor' => '#fff'8]);910$chart->setConfig($config);1112return $chart->getUrl();
1$config = "{}" // Chart.js-code/config23$chart = new QuickChart([4 'width' => 580,5 'height' => 300,6 'devicePixelRatio' => 2,7 'backgroundColor' => '#fff'8]);910$chart->setConfig($config);1112return $chart->getUrl();
This article, \"Dagens elpris snabbt och enkelt\", was first posted on marcusolsson.me.
", "summary": "Blev nyligen med en iPhone 15 Pro med den nya smidiga snabbknappen. N\u00e5got kul var man ju tvungen att hitta p\u00e5 med den d\u00e5 Apple f\u00f6r ovanlighetens skull faktiskt ger en ganska fria tyglar d\u00e5 man kan koppla den till en shortcut/genv\u00e4g. S\u00e5 jag skrev ett enkelt skript som h\u00e4mtar dagens elpris och spottar ut en graf som en bild (det hela \u00e4r publicerat som ett API p\u00e5 elchock.se).
\n\nD\u00e4refter snickrade jag ihop en enkel "Shortcuts"-app f\u00f6r att helt enkelt h\u00e4mta hem bilden och presentera den.
\nOm du sj\u00e4lv vill g\u00f6ra n\u00e5got liknande, eller bara vill ha en snabb genv\u00e4g till att se elpriset just nu kan du anv\u00e4nda f\u00f6ljande l\u00e4nkar (v\u00e4lj den som matchar ditt elomr\u00e5de SE1-4):
\nF\u00f6r att f\u00e5 en bra \u00f6verblick kring dagens b\u00e4sta elavtal och j\u00e4mf\u00f6relser mellan fasta och r\u00f6rliga avtal \u2013 spana in elchock.se. Om du \u00e4r os\u00e4ker p\u00e5 ditt elomr\u00e5de s\u00e5 finns en smidig s\u00f6kfunktion d\u00e4r med.
\nNotera att priserna \u00e4r utan moms och avgifter, utan priset som \u00e4r satt p\u00e5 elb\u00f6rsen Nordpool.
\n\u2013
\nSnabbknappen/shortcut in action:
\n\n\u2013
\nM\u00e5ste ge lite cred till quickchart.io som jag inte har arbetat med tidigare \u2013 de anv\u00e4nder Chart.js f\u00f6r att programmatisk spotta ut en statisk bild p\u00e5 en graf, perfekt f\u00f6r projekt som detta d\u00e4r man inte har tid och/eller m\u00f6jlighet att bygga en graf i klienten.
\nAtt bygga en graf f\u00f6r detta projektet var s\u00e5 enkelt som:
\n\n
1$config = "{}" // Chart.js-code/config23$chart = new QuickChart([4 'width' => 580,5 'height' => 300,6 'devicePixelRatio' => 2,7 'backgroundColor' => '#fff'8]);910$chart->setConfig($config);1112return $chart->getUrl();
1$config = "{}" // Chart.js-code/config23$chart = new QuickChart([4 'width' => 580,5 'height' => 300,6 'devicePixelRatio' => 2,7 'backgroundColor' => '#fff'8]);910$chart->setConfig($config);1112return $chart->getUrl();
This article, \"Dagens elpris snabbt och enkelt\", was first posted on marcusolsson.me.
", "date_published": "2023-10-13T13:13:39+02:00", "date_modified": "2023-10-13T13:13:39+02:00", "authors": [{ "name": "Marcus Olsson" }], "tags": [ ] }, { "id": "https://marcusolsson.me/artiklar/10-ar-som-egen-foretagare", "title": "10 år som egen företagare", "url": "https://marcusolsson.me/artiklar/10-ar-som-egen-foretagare", "content_html": "Tiden g\u00e5r rasande fort! Noterade h\u00e4r i dagarna av en slump att det nu har g\u00e5tt 10 \u00e5r sedan jag startade eget som frilansande webbutvecklare.
\nDe f\u00f6rsta fem \u00e5ren hade jag f\u00f6retaget som enskild firma och sedan \u00e5r fem starta mitt egna aktiebolag (s\u00e5 fem\u00e5rsjubileum f\u00f6r aktiebolaget ocks\u00e5!)
\nUnder de h\u00e4r tio \u00e5ren s\u00e5 har jag varit inblandad i s\u00e4kert \u00f6ver 100 olika kundprojekt \u00e5t ett femtiotal olika kunder. Startat, drivit och lagt ner m\u00e4ngder med sidoprojekt1 och dessutom lanserat dussintals open-source l\u00f6sningar och paket.
\nAtt starta eget har aldrig varit n\u00e5got jag har \u00e5ngrat. Men visst, det \u00e4r stundtals tufft att driva eget och allt vad det inneb\u00e4r; man kan ocks\u00e5 bli lite avundsjuk p\u00e5 den l\u00f6neskillnaden det \u00e4r emot de som jag k\u00e4nner som jobbar som IT-konsulter p\u00e5 de stora bolagen. Men den friheten och variationen som mitt f\u00f6retag erbjuder mig skulle jag aldrig byta emot en st\u00f6rre l\u00f6n.
\nJust nu \u00e4r jag inne i den kanske mest hektiska perioden under de h\u00e4r tio \u00e5ren (fyra lanseringar bara i september!) men trivs precis lika bra som alltid.
\n\u2013
\nJag h\u00e5ller i alla fall tummarna f\u00f6r att jag fortsatt fortroende fr\u00e5n mina kunder att f\u00e5 k\u00f6ra 10 \u00e5r till! \ud83c\udf89
\nesignering.se, elchock.se, webbjobb.io (s\u00e5ld) och m\u00e5nga m\u00e5nga fler. \u21a9
This article, \"10 \u00e5r som egen f\u00f6retagare\", was first posted on marcusolsson.me.
", "summary": "Tiden g\u00e5r rasande fort! Noterade h\u00e4r i dagarna av en slump att det nu har g\u00e5tt 10 \u00e5r sedan jag startade eget som frilansande webbutvecklare.
\nDe f\u00f6rsta fem \u00e5ren hade jag f\u00f6retaget som enskild firma och sedan \u00e5r fem starta mitt egna aktiebolag (s\u00e5 fem\u00e5rsjubileum f\u00f6r aktiebolaget ocks\u00e5!)
\nUnder de h\u00e4r tio \u00e5ren s\u00e5 har jag varit inblandad i s\u00e4kert \u00f6ver 100 olika kundprojekt \u00e5t ett femtiotal olika kunder. Startat, drivit och lagt ner m\u00e4ngder med sidoprojekt1 och dessutom lanserat dussintals open-source l\u00f6sningar och paket.
\nAtt starta eget har aldrig varit n\u00e5got jag har \u00e5ngrat. Men visst, det \u00e4r stundtals tufft att driva eget och allt vad det inneb\u00e4r; man kan ocks\u00e5 bli lite avundsjuk p\u00e5 den l\u00f6neskillnaden det \u00e4r emot de som jag k\u00e4nner som jobbar som IT-konsulter p\u00e5 de stora bolagen. Men den friheten och variationen som mitt f\u00f6retag erbjuder mig skulle jag aldrig byta emot en st\u00f6rre l\u00f6n.
\nJust nu \u00e4r jag inne i den kanske mest hektiska perioden under de h\u00e4r tio \u00e5ren (fyra lanseringar bara i september!) men trivs precis lika bra som alltid.
\n\u2013
\nJag h\u00e5ller i alla fall tummarna f\u00f6r att jag fortsatt fortroende fr\u00e5n mina kunder att f\u00e5 k\u00f6ra 10 \u00e5r till! \ud83c\udf89
\nesignering.se, elchock.se, webbjobb.io (s\u00e5ld) och m\u00e5nga m\u00e5nga fler. \u21a9
This article, \"10 \u00e5r som egen f\u00f6retagare\", was first posted on marcusolsson.me.
", "date_published": "2023-09-27T10:17:20+02:00", "date_modified": "2023-09-27T10:17:20+02:00", "authors": [{ "name": "Marcus Olsson" }], "tags": [ ] } ] }