<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Tglman</title><link>http://www.tglman.com</link><description>Tglman Blog</description><item><title>Personal Policy for AI driven contributions</title><link>http://www.tglman.com/posts/personal-policy-for-ai-driven-contributions.html</link><description><![CDATA[<p>Since 2025 things started to change in the software industry, a new tool was in town, the "AI",
this new tool is rapidly changing the way people work in software development, enabling people that are not able or don't have
time to learn how to code to build software, even at a faster peace of an expert developer, this has also an impact on open source
development with a new wave of projects and contributors to existing projects, that come from people with not strictly technical background,
or also "traditional" expert developer that contribute without the need to go through all the technical details of a project.</p>
]]></description><guid>http://www.tglman.com/posts/personal-policy-for-ai-driven-contributions.html</guid><pubDate>Sat, 18 Jul 2026 10:00:00 +0100</pubDate></item><item><title>SSH forward of git user for forges</title><link>http://www.tglman.com/posts/ssh-forward-of-git-user-for-forges.html</link><description><![CDATA[<p>I had to work on more important things, but at the end, as sometime happens I got hooked on a problem, and I could not give up till I solved it.</p>
]]></description><guid>http://www.tglman.com/posts/ssh-forward-of-git-user-for-forges.html</guid><pubDate>Sat, 20 Jun 2026 21:00:00 +0100</pubDate></item><item><title>Deb repo for selfhosting with reprepro</title><link>http://www.tglman.com/posts/deb-repo-for-selfhosting-with-reprepro.html</link><description><![CDATA[<p>Recently I discovered that reprepro at tool for creating apt/deb repositories has support of archive mode, this feature is
not available in stable debian but is available with the reprepro version in "experimental" repository, which means is experimental
but good enough for what I need so far.</p>
]]></description><category>self_hosting/ops</category><guid>http://www.tglman.com/posts/deb-repo-for-selfhosting-with-reprepro.html</guid><pubDate>Sun, 10 May 2026 21:00:00 +0100</pubDate></item><item><title>tunnel home hosted service to public with ssh</title><link>http://www.tglman.com/posts/tunnel-home-hosted-service-to-public-with-ssh.html</link><description><![CDATA[<p>SSH is a really powerful tool and has a lot of funtionalites built in that can solve quite complex use case, one of this is tunnelling,
you can easily create a tunnel with a command <code>ssh user@host -L 127.0.0.1:4000:127.0.0.1:3000</code>,  this for example allow you to open a local port (4000) that map
a service listening on "127.0.0.1" (3000) on the "host". A more interesting use case is actually the opposite <code>ssh user@host -R 127.0.0.1:4000:127.0.0.1:3000</code>
in this case you can expose a local only service (3000) as a service on the "host" on port 4000, you could do also <code>*:4000</code> to accept any incoming connections on the "host" but may need some configuration on the ssh server.</p>
]]></description><category>self_hosting/ops</category><guid>http://www.tglman.com/posts/tunnel-home-hosted-service-to-public-with-ssh.html</guid><pubDate>Thu, 16 Apr 2026 21:00:00 +0100</pubDate></item><item><title>Coding Updates of 2025</title><link>http://www.tglman.com/posts/coding-updates-of-2025.html</link><description><![CDATA[<p>As the new year started is a good time to do a bit of review on what I worked on the last year, I will write mostly on the side-projects/coding hobbies I did in the 2025, so let's first to a list of all
I hacked on</p>
<ul>
<li><a href="#coding">Coding</a>
<ul>
<li><a href="#desktop">Desktop</a>
<ul>
<li>Iron Bar</li>
<li>Niri</li>
</ul>
</li>
<li><a href="#tools">Tools</a>
<ul>
<li>mdbook-variables</li>
</ul>
</li>
<li><a href="#servers">Servers</a>
<ul>
<li>Vacuna</li>
<li>Orientdb</li>
</ul>
</li>
<li><a href="#libs">Libs</a>
<ul>
<li>Persy</li>
</ul>
</li>
</ul>
</li>
<li><a href="#using">Using</a></li>
<li><a href="#self-hosting">Self Hosting</a></li>
</ul>
]]></description><guid>http://www.tglman.com/posts/coding-updates-of-2025.html</guid><pubDate>Tue, 10 Mar 2026 20:58:38 +0000</pubDate></item><item><title>Configure a Forgejo Runner</title><link>http://www.tglman.com/posts/configure-a-forgejo-runner.html</link><description><![CDATA[<p>I've been using GitHub and then GitLab for a while, but recently a new git hosting service is online called <a href="https://codeberg.org">Codeberg</a> this is based on an open source Git Repo Hosting software called <a href="https://forgejo.org/">ForgeJo</a>
that implements the usual functionalities of a git hosting like: code browsing, issue tracking, continuous integration, and collaborative coding,
with the aim to support in the long term federated collaboration, which give better long term prospective compared to the state of the art git hostings, anyway a smaller service
like this one understandably have a limited support for free continues integration runners, but it gives an easy way to configure one on your machine.</p>
]]></description><category>ops/self_hosting</category><guid>http://www.tglman.com/posts/configure-a-forgejo-runner.html</guid><pubDate>Thu, 11 Dec 2025 15:00:00 +0000</pubDate></item><item><title>Semantic Version vs Date Versions</title><link>http://www.tglman.com/posts/semantinc-vs-date-versions.html</link><description><![CDATA[<p>In recent times I noticed a few projects moving to a date based versioning from a semantic versioning,
any project is free to choose the versioning system that it prefer, though this has impact on the message that this transmits to the user,
before going through this let's do a quick recap of what semantic version means, got from: <a href="https://semver.org/">https://semver.org/</a> (where you can read of all the details)</p>
]]></description><category>coding</category><guid>http://www.tglman.com/posts/semantinc-vs-date-versions.html</guid><pubDate>Sun, 20 Jul 2025 15:25:13 +0000</pubDate></item><item><title>10 years of full time open source</title><link>http://www.tglman.com/posts/10-years-of-full-time-open-source.html</link><description><![CDATA[<p>As been a while that I've been working on software and since the first days I've been passionate about open source,
I think as professional developer is interesting having the access to the source of the software you are using,
or being able to read the code wrote by other people that solve similar problems to the one you are trying to solve,
so open source give all of that, and you can make it come together with some ethical requirements as well, but
I'm not here to describe the advantages of open source, but to tell my story in it, so quite early of my experiences with
software I started to use open source based software, like linux or IDEs like eclipse,
together with a big set of tools that are common in software development, after using I found myself contributing here and there
to projects, mainly solving my own problems, for both work and not work related, and as well starting small projects to solve
a small problem in my own way.</p>
]]></description><category>misc</category><guid>http://www.tglman.com/posts/10-years-of-full-time-open-source.html</guid><pubDate>Sat, 12 Oct 2024 15:25:13 +0000</pubDate></item><item><title>20 years here</title><link>http://www.tglman.com/posts/20-years-here.html</link><description><![CDATA[<p>Recently I noticed that this domain has been aging, what I mean by that,
is that I bought this specific domain 20 years ago, let's go through its story:</p>
]]></description><category>misc</category><guid>http://www.tglman.com/posts/20-years-here.html</guid><pubDate>Sat, 28 Sep 2024 21:00:00 +0100</pubDate></item><item><title>Unbreak the break</title><link>http://www.tglman.com/posts/unbreak-the-break.html</link><description><![CDATA[<p>Since a few month ago I'm in a sort of break/reset, so I did quit my main job and left the city I used to live in for wonder a bit
around the world, and so far it went quite well and I had some good fun.</p>
]]></description><category>misc</category><guid>http://www.tglman.com/posts/unbreak-the-break.html</guid><pubDate>Fri, 31 May 2024 15:52:26 +0000</pubDate></item><item><title>Break of this decade</title><link>http://www.tglman.com/posts/break-of-this-decade.html</link><description><![CDATA[<p>Every 8-10 years, I find myself in a moment where I do want to change my way of life, this maybe I change city, country, way of work/company or all these things all together,
and often this change start with a break, one of that sort of break that are called "Sabbatical", Now I'm starting one of this "pivotal" moments of my personal life
and this is starting with some trips a bit around the world, I'm not sure actually in when or how many places I will be, I'm sure this will last for a while.</p>
]]></description><category>misc</category><guid>http://www.tglman.com/posts/break-of-this-decade.html</guid><pubDate>Wed, 06 Mar 2024 15:25:13 +0000</pubDate></item><item><title>USB or password boot decrypt</title><link>http://www.tglman.com/posts/usb-or-password-boot-decrypt.html</link><description><![CDATA[<p>Here is a small guide to create a USB key that store the decryption key for your LUKS encrypted disk,
this is useful for when your device is in a safe place and you want it to boot without the need to type a password,
and then going back to normal password workflow simply unplugging the USB key.</p>
]]></description><category>ops</category><guid>http://www.tglman.com/posts/usb-or-password-boot-decrypt.html</guid><pubDate>Sat, 30 Dec 2023 21:16:59 +0000</pubDate></item><item><title>Re-tools for this blog</title><link>http://www.tglman.com/posts/re-tools-for-this-blog.html</link><description><![CDATA[<p>My last post a while ago was about redeploy my blog with new tools, and in that set of tools
there was <code>see</code>, I tried it for a while but I noticed after a few days for some reason the server would
get stuck, and no request were server till I restarted the server.</p>
]]></description><category>rust/self_hosting</category><guid>http://www.tglman.com/posts/re-tools-for-this-blog.html</guid><pubDate>Sun, 27 Aug 2023 21:00:00 +0100</pubDate></item><item><title>New host for the blog with new tools</title><link>http://www.tglman.com/posts/new_host_for_the_blog_with_new_tools.html</link><description><![CDATA[<p>Has been a long while that I do own this domain (tglman.com) almost 18 years, and in all this time it evolved in multiple different sites,
but for all this time was just hosted on a simple hosting provider that allowed me to have in it some PHP scripts.</p>
]]></description><category>rust/self_hosting</category><guid>http://www.tglman.com/posts/new_host_for_the_blog_with_new_tools.html</guid><pubDate>Mon, 30 Jan 2023 21:00:00 +0100</pubDate></item><item><title>First Week Librem 5</title><link>http://www.tglman.com/posts/first_week_librem5.html</link><description><![CDATA[<p>I recently received the Librem 5 phone that I bought few years ago from the crowd founding campaign.</p>
]]></description><category>librem5</category><guid>http://www.tglman.com/posts/first_week_librem5.html</guid><pubDate>Tue, 09 Nov 2021 12:00:00 +0100</pubDate></item><item><title>Rust lib error management, multiple enum approach</title><link>http://www.tglman.com/posts/rust_lib_error_management.html</link><description><![CDATA[<p>While building a Rust library, I came across a quite common problem:
how to provide errors that are understandable, easy to manage and enough specific to let the user handle the cases.</p>
]]></description><category>rust</category><guid>http://www.tglman.com/posts/rust_lib_error_management.html</guid><pubDate>Sat, 10 Apr 2021 12:00:00 +0100</pubDate></item><item><title>Setup Gitlab runner for run ci tests locally</title><link>http://www.tglman.com/posts/gitlab_ci_local_run.html</link><description><![CDATA[<p>Recently I stumbled upon a issue on a build for one of my side projects that showed up only on the gitlab ci and not locally, so for troubleshoot the problem I tried to setup the same environment on my machine.</p>
]]></description><category>self_hosting/ops</category><guid>http://www.tglman.com/posts/gitlab_ci_local_run.html</guid><pubDate>Sat, 18 Jan 2020 21:00:00 +0100</pubDate></item><item><title>Setup Gitlab shared runner for run tests on windows</title><link>http://www.tglman.com/posts/gitlab_ci_rust_build_on_windows.html</link><description><![CDATA[<p>Today in one of my projects, I discovered a bug that happened only on Windows,
I personally have no machines that run Windows so had some trouble to reproduce the problem,
so the first thing that came to my mind was try to set up the Continuous Integration to run on
Windows, for the specific project I use GitLab and the relative GitLab-CI, I went to search what
was the support for Windows in the shared runners and I got a good surprise, GitLab provide
shared runners with the support of windows you just need to specify some tags:</p>
]]></description><category>rust</category><guid>http://www.tglman.com/posts/gitlab_ci_rust_build_on_windows.html</guid><pubDate>Sat, 18 Jan 2020 21:00:00 +0100</pubDate></item><item><title>Check What You Run</title><link>http://www.tglman.com/posts/check_what_you_run.html</link><description><![CDATA[<p>I usually try to check what software is installed and I'm running on my machine, using debian there are a few ways to check this with a few packages that come from the repository,
I use <a href="https://urlfreezer.com/423J4FMHYNJGG">checkrestart</a> and <a href="https://urlfreezer.com/GQMM5EGJLNIUK">needrestart</a> to check after updates
if the software is running need to be restarted, another really useful tool to be sure the system is running trustworthy software is <a href="https://urlfreezer.com/HEJ2Z5VJMQHHC">debsums</a> that make sure that your
installed files have the same checksums of the files from the packages so as far you trust your debian repository you can trust your system.</p>
<p>One case I didn't find a tool yet, is when you want to be sure that all the software installed on your system is actually from a debian package, that is the source I trust, potentially the system can have a binary installed in a executable path of the system and be executed
without any source check, even debsums checks only the binaries of the installed packages, but it does not report binaries that do not come from a package.</p>
]]></description><category>sh</category><guid>http://www.tglman.com/posts/check_what_you_run.html</guid><pubDate>Mon, 23 Dec 2019 21:00:00 +0100</pubDate></item><item><title>Self Hosting Feed Reader Server</title><link>http://www.tglman.com/posts/feed_reader.html</link><description><![CDATA[<p>Once a while I try to self host something new, this time was the turn of an feed reader, I started first looking for an app in F-Droid, today my phone is the place where I read news more often, and as well I was looking for something that was able to keep some history and preferences(mainly starred articles) even after a phone flash, so digging a bit around I found <a href="https://tt-rss.org/">"Tiny Tiny RSS"</a> there is a Ok <a href="https://github.com/nilsbraden/ttrss-reader-fork">phone app</a> and a quite nice php server that come in a handy way as debian package(current unstable), so i set it up with a simple <code>sudo apt install tt-rss</code> and is up and running, connected to my phone using a VPN, and the job was done, so i would definitely recommend this if you want to setup your own "Web Feed Reader" with mobile client.</p>
]]></description><category>self_hosting</category><guid>http://www.tglman.com/posts/feed_reader.html</guid><pubDate>Tue, 02 Jan 2018 21:00:00 +0100</pubDate></item><item><title>Rust Lang Love</title><link>http://www.tglman.com/posts/rust_lang_love.html</link><description><![CDATA[<p>Hi All, it has been a while since the last blog post went out, a few attempts to write a new post failed because of missing knowledge on what I was actually doing or just because I spent to much time doing other things, I'm hoping to return to post more often and this should be the first of a series of new blog posts on my new interest: Rust.</p>
]]></description><category>coding/rust</category><guid>http://www.tglman.com/posts/rust_lang_love.html</guid><pubDate>Thu, 28 Dec 2017 21:00:00 +0100</pubDate></item><item><title>Java Shell Script</title><link>http://www.tglman.com/posts/java_shell_script.html</link><description><![CDATA[<p>Often happen that I've to write some shell/automation scripts for job or fun and most of the time i do it with bash or similar, but because my main programming language has been java, i every time  wondered if could be possible do some of this script in java, i know that a lot of other languages have the support for be ran as script, like in D you can put on the top of your file <code>#!/usr/bin/env rdmd</code> and that file can be compiled or just run, in case you run it it will compile itself and exec the code.</p>
]]></description><category>java/sh</category><guid>http://www.tglman.com/posts/java_shell_script.html</guid><pubDate>Wed, 13 May 2015 21:00:00 +0100</pubDate></item><item><title>Self Hosted Calendar Server With Radicale</title><link>http://www.tglman.com/posts/calendar_with_radicale.html</link><description><![CDATA[<p>Everyone of us need a Calendar, to organise time, not forget meetings, birthdays, dates, interviews, parties, etc. Out there in the world there are a lot of application that can help to solve that, and even a lot of service that can do it for you, for free, and synchronise it with all your environments/devices, one over all Google Calendar.</p>
]]></description><category>self_hosting</category><guid>http://www.tglman.com/posts/calendar_with_radicale.html</guid><pubDate>Sat, 02 May 2015 21:00:00 +0100</pubDate></item><item><title>New Blog</title><link>http://www.tglman.com/posts/new_blog.html</link><description><![CDATA[<p>Hi All, I usually like to build things almost from scratch, but this time i tired to do an exception,my old blog was written in php, night time, with my limited knowledge of design, it didn't really have an engine behind,it was more a few line of php for merge together a few html(5) hand written posts, it was quite hard to maintain and my focus was more on make it work, than actually put some content in it</p>
]]></description><category>self_hosting</category><guid>http://www.tglman.com/posts/new_blog.html</guid><pubDate>Sat, 02 May 2015 21:00:00 +0100</pubDate></item><item><title>Primitive Boxing Problem</title><link>http://www.tglman.com/posts/primitive_boxing_problem.html</link><description><![CDATA[<p>Hi All, I'm back with a new challenge to explain about one my project.<br />
Like the previous post explain I'm working on this project ( <a href="http://www.objectquery.org">Object Query</a> ) to find a new way to write DBMS query directly in java.<br />
So my idea is not so hard to implements until you are thinking in Object way, like almost all java think,
but there are few things that in java are not object one of this are the primitives types, and this primitive types are common in an DDD domain
that's mean if I'm not able to handle this problem my idea is died!</p>
<p>So now i have to start to think to a good solution:<br />
What I've in my project is a pure java domain, and a proxy instance of a class of domain, so i can just start from this point to try to solve my problem.</p>
<p>Another start point for try to solve this problem is the java (from 1.5) behaviour, that allow to to transfer primitive type values in an object way through code, wrapping it in an specific object(java.lang.Integer,java.lang.Long, etc..)
this is called boxing.</p>
<p>So i can try to create an my owned boxing object to use for handle primitive types, this i think is not hard just define an api that receive primitive type and return an object that represent the path of primitive type call.
with a code like this:</p>
<pre style="background-color:#2b303b;">
<code><span style="color:#c0c5ce;">	</span><span style="color:#ebcb8b;">Object</span><span style="color:#c0c5ce;"> primitiveBoxed = query.</span><span style="color:#8fa1b3;">box</span><span style="color:#c0c5ce;">(proxy.</span><span style="color:#8fa1b3;">getHome</span><span style="color:#c0c5ce;">().</span><span style="color:#8fa1b3;">getWeight</span><span style="color:#c0c5ce;">());
</span></code></pre>
<p>OK I can solve my problem, just because when i call the method getWeight on my proxy a create a fake value to associate to path "home.weight",<br />
and the call box() i receive the previous value and from this value i can extract the associate path and after create a "Boxing" object with associate path.<br />
after this operation I've an object with associate the path like a normal object.</p>
<p>So i found i way to solve the problem of primitive values .... and i just implemented it !!<br />
wonderful!!<br />
Done !!</p>
]]></description><category>java/coding</category><guid>http://www.tglman.com/posts/primitive_boxing_problem.html</guid><pubDate>Tue, 20 Nov 2012 21:00:00 +0100</pubDate></item><item><title>DDD Query Way</title><link>http://www.tglman.com/posts/ddd_query_way.html</link><description><![CDATA[<p>In last few years I was lucky and I had the opportunity to work with some new and powerful java frameworks and with the newest software design approaches, and in particular I specialised in DDD (Domain Driven Design).<br />
When you try to develop a software following DDD principles you need to use some frameworks that help you to thinking only to domain, example the ORM for the persistence or user interface generator for the user interaction.<br />
Now I want focus on persistence because in my work experience I found some gap in the persistence frameworks.</p>
<p>Explain the gap:<br />
if you are using java probably you want define all rules and all behaviour of your domain using only java, and this is almost possible,<br />
Just define a domain:</p>
<pre style="background-color:#2b303b;">
<code><span style="color:#b48ead;">public class </span><span style="color:#ebcb8b;">Person </span><span style="color:#eff1f5;">{
</span><span style="color:#eff1f5;">     </span><span style="color:#b48ead;">private </span><span style="color:#ebcb8b;">String</span><span style="color:#eff1f5;"> name;
</span><span style="color:#eff1f5;">     </span><span style="color:#b48ead;">private </span><span style="color:#ebcb8b;">String</span><span style="color:#eff1f5;"> surname;
</span><span style="color:#eff1f5;">     </span><span style="color:#b48ead;">private </span><span style="color:#ebcb8b;">Dog</span><span style="color:#eff1f5;"> dog;
</span><span style="color:#eff1f5;">    </span><span style="color:#65737e;">//.... gets sets ...
</span><span style="color:#eff1f5;">}</span></code></pre>
]]></description><category>java/ddd/coding</category><guid>http://www.tglman.com/posts/ddd_query_way.html</guid><pubDate>Sat, 20 Oct 2012 21:00:00 +0100</pubDate></item></channel></rss>
