Extremely minimal Windows dev setup

From time to time, my auntie asks me to go to her flat and look after the kitty and usually I don’t take my laptop. I want to be able to write some code using her laptop in the fastest way.

After experimenting with multiple set-ups like XAMPP or any programming language + a database, I found out that the fastest setup is drum roll….

NodeJS (Javascript) + Visual Studio Code. Plus a few clicks on Next buttons 🙂

Seriously !

The installation of Node and VS Code took under 10 minutes and a short restart for updating the path and I was ready to go. At least for console applications, but this setup should be ok for web apps. Also, a database like PostgreSQL or MySql can be installed for persistence.

Swift pe Windows

Deși este disponibil de ceva vreme pe Windows, eu azi am observat că se poate instala frumos și în stiulul clasic cu next>next. 🙂 Bine, nu este încă de producție, dar este un început.

Nu am făcut nimic mai mult, decât să urmez pașii de aici și gata. Instalarea a decurs fără probleme și nici nu a durat prea mult. Deși aș fi vrut să nu am nevoie de Visual Studio plus 5 GB(SDK-ul Windows 10 plus altele) doar ca să rulez un Hello Wrold, dar heyy 😀. Nu uita de Python, in special versiunea 3.9, că astfel nu vei putea folosi interpretorul REPL. Nu dă eroare, dar nici nu zice ceva.

Mediul REPL se poate accesa prin comanda swift și în acest mod, poți să experimentezi limbajul făra niciun IDE , editor de text etc. Am văzut că este o extensie de VSCode care aduce suportul în editor, dar este încă în dezvoltare și eu nu am reușit să o instalez.

Ecosistemul este aproape inexistent pentru Windows, dar mai așteptăm. Din ce am văzut, vine insă la pachet cu wrapper peste Win32, deci pe viitor, poate se pot face aplicații desktop based in Swift. Cineva a făcut și un framework pentru acest lucru, dar cu limitările specifice.

Nu mă aștept că voi putea scrie aplicații pentru iOS și Mac pe Windows, tho’. Dar am văzut că există un framework pentru aplicații web, Vapor. Nu are suport pentru Windows, dar este disponibil pe Linux.

 

 

 

 

Cafea la cafetieră moka

Ionuț mi-a trimis la începutul anului un vidoclip interesant despre cum se prepară cafeaua la moka pot. Zis și făcut, l-am luat pe acesta care mi-a venit în apoximativ două zile.

Ca și prime impresii

  • Aduce într-o oarecare măsură cam ca originalul, din punct de vedere al design-ului
  • Mi se pare că este destul de chic, deci poate să fie folosit și pe post de obiect decorativ în bucătarie

Despre cafea

Cafeaua se prepară ușor. Eu am urmărit instrucțiunile de aici. Cât despre cafea:

  • Este mai tare decât cea preparată la filtru și ibric, având în vedere că apa trece sub presiune, 1-2 bari
  • Nu este la fel de tare ca cea de la espressor
  • Prima dată am pus prea multă cafea în sită și a ieșit mult mai tare față de ceea ce eram eu obișnuit. La a doua încercare, a ieșit mult mai aromată
  • Nu am reușit să o scot cu caimac
  • A ieșit suficientă cât să umple o cană

 

2020 – eu și blogul

Surprinzător, dar pentru mine, 2020 nu a fost un an rău. Am dus la capăt un proiect preluat de la un fost coleg, am rescris un modul din aplicația de la muncă. Deci pe plan profesional, a fost mai bun ca 2019.

2020 mi-a dat și ocazia să contribui la un proiect open source, unde m-am mai jucat cu C# și Javascript. De asemenea, am sărit și eu cu câteva proiecte mai micuțe.

Mi-am luat 2 concedii, yay!!

Din punct de vedere al blogului, a fost cel mai bun an. Este primul în care am abordat mai serios articolele tehnice. Provocarea a fost să le scriu astfel încât să nu plictisesc cititorii și să explic subiectul tratat în termeni cât mai accesibili. In plus, este un bun exercițiu lingvisitc. Sper că nu am abuzat prea tare limba română, dar hey 😀

Alte lucrrui pe care le-am făcut și nu au nicio treaba cu programarea și munca

  • am stat mai mult acasa (ca la liceu)

  • m-am văzut cu câțiva prieteni mai vechi

  • ceva activități de bricolaj și am gătit un pic mai des față de București.

40 de ani

Același sound ca acum 40 de ani!

Aceleași mișcări ca acum 40 de ani!

Aceleași versuri ca acum 40 de ani!

Pe scurt, imi place!!!

Un nou album.

Pe 13 noiembrie.

JAXB și timestamp-uri care nu pot fi citite

Am observat anumite formate de dată și timp care nu pot fi citite corecte cu api-ul JAXB din Java. Mai bine spus, nu pot fi citite, adică acel câmp mapat în clasa din aplicație  este null.

Un exemplu de format de dată și timp cu timezone ar fi acesta 2020-10-13T12:25:00+0200.

In aplicație, campul aferent timestamp-ului are ca tip de data XMLGregorianCalendar, o clasă destul de veche folosită pentru a reprezenta timestamp-uri. Clasă veche și un format de timp mai deosebit din punct de vedere al timezone-ului nu fac casă bună și când am pornit testul pentru a vedea dacă se poate citi acel fișier, a ieșit o foarte frumoasă exceție NullPointerException.

Soluția cea mai la îndemană a fost să înlocuiesc XMLGregorianCalendar cu String și astfel citirea se face corect, eventualele erori, cum ar fi lipsa timestamp-ului sau invaliditatea lui, rămânând de tratat la un nivel mai sus, al aplicației.

O altă soluție ar mai fi screrea unui XmlAdapter custom care poate fi folosit pentru a citi corect acel câmp de dată din fișier.

Un exemplu, în cazul problemei de față ar fi acesta:

package com.mycompany.app;
import javax.xml.bind.ValidationEventHandler;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
public class DateTimeAdapter extends XmlAdapter<String, XMLGregorianCalendar> {
/**
* Convert a value type to a bound type.
*
* @param v The value to be converted. Can be null.
* @throws Exception if there's an error during the conversion. The caller is responsible for
* reporting the error to the user through {@link ValidationEventHandler}.
*/
@Override
public XMLGregorianCalendar unmarshal(String v) throws Exception {
Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX").parse(v);
GregorianCalendar c = new GregorianCalendar();
c.setTime(date);
XMLGregorianCalendar date2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
return date2;
}
/**
* Convert a bound type to a value type.
*
* @param v The value to be convereted. Can be null.
* @throws Exception if there's an error during the conversion. The caller is responsible for
* reporting the error to the user through {@link ValidationEventHandler}.
*/
@Override
public String marshal(XMLGregorianCalendar v) throws Exception {
return null;
}
}

view raw
DateTimeAdapter.java
hosted with ❤ by GitHub

Și se folosește ca adnotare pe campul respectiv din clasă

@XmlJavaTypeAdapter(DateTimeAdapter.class)
protected XMLGregorianCalendar timestamp;

 

 

 

 

 

The Road to Hell

Drumul către Iad sau traficul?

Se pare ca doar traficul.

Link-uri de răsfoit la cafea ☕

O  zi de 20 septembrie și o cana de cafea. Și un blogger fără idee de articol!