<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">

<channel>
<title>Χρήστος Μαργιώλης: </title>
<description>Χρήστος Μαργιώλης</description>
<link>https://margiolis.net/notes/</link>


<item>
<title>Τοποθέτηση κάμερας σε πυροσβεστικά κράνη</title>
<link>https://margiolis.net/notes/helmetcam/</link>
<pubDate>Tue, 08 Jul 2025 00:00:00 +1200</pubDate>
<description>&lt;p&gt;Στον παρόν άρθρο θα βρείτε οδηγίες για το πώς να τοποθετήσετε κάμερα σε δύο
συνηθισμένα κράνη του Πυροσβεστικού Σώματος Ελλάδος.&lt;/p&gt;
&lt;h2 id=&#34;sample&#34;&gt;Δείγμα βίντεο&lt;/h2&gt;
&lt;p&gt;Το παρακάτω βίντεο είναι από εκπαίδευση CFBT (Compartment Fire Behavior
Training) στον 6ο Πυροσβεστικό Σταθμό Αθηνών.&lt;/p&gt;

&lt;video
	src=&#34;https://margiolis.net/files/helmetcam/cfbt.mp4&#34;
	style=&#34;max-height: 30em; max-width: 100%&#34;
	loop=&#34;true&#34;
	controls
&gt;
&lt;/video&gt;


&lt;h2 id=&#34;camera&#34;&gt;Κάμερα: Sports DV Mini F9 DVR&lt;/h2&gt;
&lt;p&gt;Αν και οι πρώτες επιλογές που θα σκεφτότοταν κανείς είναι οι GoPro ή κάποια από
τις κάμερες της &lt;a href=&#34;https://firecam.com/&#34;&gt;FireCam&lt;/a&gt;, ο λόγος που επέλεξα την
κινέζικη, φθηνή και μέτρια Sports DV Mini F9 DVR, είναι επειδή δεν θέλω να έχω
έννοια μήπως η κάμερα καταστραφεί σε κάποιο συμβάν. Η συγκεκριμένη κάμερα
εννοείται πως υστερεί σε ποιότητα βίντεο σε σχέση με τις GoPro και παρόμοιες
κάμερες, όμως κοστίζει γύρω στα 35€ και, όπως φαίνεται στο
&lt;a href=&#34;https://margiolis.net/notes/helmetcam/#sample&#34;&gt;παραπάνω βίντεο&lt;/a&gt;, η ποιότητα είναι ικανοποιητική.&lt;/p&gt;
&lt;p&gt;Άλλο ένα πλεονέκτημα αυτής της κάμερας είναι ότι είναι μικρή και έχει σχήμα
φακού, οπότε ούτε εξέχει πολύ, ούτε τραβάει την προσοχή.&lt;/p&gt;
&lt;p&gt;Δεν θεωρώ σημαντικό να αναφερθώ στην χρήση και ρύθμισή της, μίας και αυτές οι
πληοροφορίες περιέχονται στο εγχειρίδιό της. Ωστόσο αν θεωρείτε ότι χρειάζεστε
βοήθεια, μπορείτε να &lt;a href=&#34;https://margiolis.net/about/&#34;&gt;επικοινωνήσετε μαζί μου&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Σημείωση:&lt;/em&gt; Είμαι αρκετά σίγουρος ότι πια υπάρχουν και καλύτερες κάμερες στην
αγορά στα ίδια χρήματα, οπότε κάντε την έρευνά σας πρώτα!&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/helmetcam/camera.webp&#34; alt=&#34;camera&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;zipties&#34;&gt;Δεματικά&lt;/h2&gt;
&lt;p&gt;Η στήριξη των καμερών έχει γίνει με &lt;em&gt;μεταλλικά&lt;/em&gt; δεματικά.&lt;/p&gt;
&lt;p&gt;Ο λόγος που επέλεξα τα μεταλλικά δεματικά αντί για μία τυπική βάση κάμερας,
είναι πως είναι δύσκολο/αδύνατο να βρεθεί κατάλληλη βάση για τα κράνη και την
κάμερα που έχω (εκτός αν γίνει προσαρμοσμένη κατασκευή με κατάλληλα υλικά),
αλλά τα δεματικά είναι επίσης αναλώσιμα, ανθεκτικά, φθηνότερα και δεν πιάνουν
καθόλου χώρο.&lt;/p&gt;
&lt;p&gt;Όσον αφορά το γιατί δεν επέλεξα πλαστικά δεματικά, πέρα από την μεγαλύτερη
στιβαρότητα των μεταλλικών σε σχέση με τα πλαστικά, τα μεταλλικά είναι επίσης
κατασκευασμένα από ανοξείδωτο ατσάλι, αλλά και μεταξύ άλλων πλεονεκτημάτων,
έχουν εύρος θερμοκρασίας -60 έως +300°C. Αντίθετα, τα συνηθισμένα πλαστικά
δεματικά έχουν -40 έως +80°C, το οποίο εννοείται πως δεν είναι καθόλου ιδανικό
για χρήση σε συνθήκες πυρκαγιάς.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/helmetcam/zipties.webp&#34; alt=&#34;zipties&#34;&gt;&lt;/p&gt;
&lt;p&gt;Κατά και μετά την εφαρμογή των δεματικών στα κράνη, δώστε προσοχή στα εξής:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Σιγουρευτείτε ότι βρίσκονται &lt;em&gt;ανάμεσα&lt;/em&gt; στα 2 κουμπιά της κάμερας και ότι
είναι &lt;em&gt;σφιγμένα&lt;/em&gt;, ωστέ να μην μπορεί να φύγει η κάμερα από το κράνος.
Ανάλογα με το πόσο σφιχτά θα είναι, ενδέχεται η κάμερα να μην μπορεί να βγει
από το κράνος &lt;em&gt;με τίποτα&lt;/em&gt;, παρά μόνο με το κόψιμό τους. Ωστόσο πιστεύω ότι
δεν είναι ιδιαίτερο πρόβλημα αυτό, διότι τα πακέτα δεματικών συνήθως
περιέχουν πολλά κομμάτια, οπότε μπορείτε απλώς να βάλετε νέα. Σίγουρα
προτιμότερο από το να χαθεί η κάμερα σε συμβάν.&lt;/li&gt;
&lt;li&gt;Μετά το σφίξιμο των δεματικών, κόψτε ό,τι έχει απομείνει και λειάνετε τις
άκρες.&lt;/li&gt;
&lt;li&gt;Λόγω της λείας επιφάνειας των δεματικών, η κάμερα μπορεί να περιστρέφεται,
οπότε πριν την χρήση της, να σιγουρεύεστε ότι βρίσκεται στην σωστή θέση,
δηλαδή με τα κουμπιά &lt;em&gt;προς τα πάνω&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;gallet&#34;&gt;Τοποθέτηση σε MSA Gallet F1S14&lt;/h2&gt;
&lt;p&gt;Το συγκεκριμένο κράνος, δυστυχώς, δεν προσφέρει κάποιο ιδανικό σημείο για
στήριξη κάμερας, οπότε πρέπει να γίνει διάνοιξη τρυπών στα πλάγια. Για
μεγαλύτερη ασφάλεια, αλλά και σταθερότητα των δεματικών, οι τρύπες πρέπει να
έχουν ακριβώς όσο μέγεθος χρειάζεται ώστε να χωρούν ίσα-ίσα τα δεματικά.
Φυσικά, θα χρειαστεί να κάνετε &lt;em&gt;προσεκτικούς&lt;/em&gt; υπολογισμούς και για τις θέσεις
των τρυπών, ώστε να είναι σταθερή η κάμερα. Για την διάνοιξη χρησιμοποίησα
τρυπάνι και λίμα.&lt;/p&gt;
&lt;p&gt;Με αυτή την προσέγγιση υπάρχουν δύο προβλήματα:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Το πρώτο και προφανές, χρειάζεται διάνοιξη τρυπών, δηλαδή τροποποίηση του
κράνους. Ωστόσο, αυτό &lt;em&gt;δεν έχει αποδειχθεί προβληματικό&lt;/em&gt;, ακόμα και σε πολύ
υψηλές θερμοκρασίες σε κλειστούς χώρους.&lt;/li&gt;
&lt;li&gt;Λόγω της θέσης που έχω τοποθετήσει την κάμερα, το οπτικό πεδίο της
περιορίζεται σε περίπτωση που γίνει χρήση μάσκας με φίλτρα. Ίσως να μπορεί
να τοποθετηθεί και σε υψηλότερο σημείο χωρίς πρόβλημα.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Κατά την εφαρμογή των δεματικών, σιγουρευτείτε ότι το σημείο κλειδώματός τους
βρίσκεται στο &lt;em&gt;εξωτερικό&lt;/em&gt; μέρος του κράνους (βλέπε &lt;em&gt;κάτοψη&lt;/em&gt;), ωστέ να μην
υπάρχει καμία τυχόν αιχμηρή επιφάνεια στο εσωτερικό.&lt;/p&gt;
&lt;p&gt;Αν και εκ πρώτης όψεως ίσως φαίνεται παράξενο, ο λόγος που οι τρύπες έχουν
διανοιχθεί στην περιοχή του μαξιλιαριού (βλέπε &lt;em&gt;εσωτερική όψη&lt;/em&gt;), είναι για να
μένουν σταθερά τα δεματικά, διότι δεν είναι εντελώς εύκαμπτα και σε άλλη θέση
&lt;em&gt;ενδέχεται&lt;/em&gt; να υπάρχει κενό. Οπότε προκειμένου να μην ρισκάρω να κάνω λάθος
τρύπες, προτίμησα να πάω με την «ασφαλή» επιλογή.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Εννοείται πως οποιαδήποτε τροποποίηση γίνεται με δική σας ευθύνη!&lt;/em&gt;&lt;/p&gt;

&lt;figure &gt;&lt;img src=&#34;https://margiolis.net/files/helmetcam/gallet_front.webp&#34;&gt;&lt;figcaption&gt;Πρόοψη.&lt;/figcaption&gt;&lt;/figure&gt;


&lt;figure &gt;&lt;img src=&#34;https://margiolis.net/files/helmetcam/gallet_top.webp&#34;&gt;&lt;figcaption&gt;Κάτοψη.&lt;/figcaption&gt;&lt;/figure&gt;


&lt;figure &gt;&lt;img src=&#34;https://margiolis.net/files/helmetcam/gallet_bottom.webp&#34;&gt;&lt;figcaption&gt;Άνοψη.&lt;/figcaption&gt;&lt;/figure&gt;


&lt;figure &gt;&lt;img src=&#34;https://margiolis.net/files/helmetcam/gallet_interior.webp&#34;&gt;&lt;figcaption&gt;Εσωτερική όψη.&lt;/figcaption&gt;&lt;/figure&gt;


&lt;figure &gt;&lt;img src=&#34;https://margiolis.net/files/helmetcam/gallet_hole.webp&#34;&gt;&lt;figcaption&gt;Τρύπα υποδοχής δεματικών.&lt;/figcaption&gt;&lt;/figure&gt;

&lt;h2 id=&#34;draeger&#34;&gt;Τοποθέτηση σε Dräger HPS 3500&lt;/h2&gt;
&lt;p&gt;Σε αυτό το κράνος μπορεί να γίνει χρήση των πλαγίων υποδοχών. Θεωρώ ότι 2
δεματικά είναι αρκετά και είναι καλύτερο να τοποθετηθούν στα 2 άκρα της
υποδοχής, διότι υπάρχουν εσοχές στο εσωτερικό και προσφέρουν μεγαλύτερη
σταθερότητα.&lt;/p&gt;
&lt;p&gt;Το μόνο μικρο-πρόβλημα είναι ότι τα δεματικά μπορούν να μετακινηθούν, χωρίς
ωστόσο αυτό να σημαίνει ότι θα φύγει η κάμερα. Παρ&amp;rsquo; όλα αυτά, είναι καλό να τα
έχετε πάντα τοποθετημένα στα άκρα.&lt;/p&gt;

&lt;figure &gt;&lt;img src=&#34;https://margiolis.net/files/helmetcam/draeger_front.webp&#34;&gt;&lt;figcaption&gt;Πρόοψη.&lt;/figcaption&gt;&lt;/figure&gt;


&lt;figure &gt;&lt;img src=&#34;https://margiolis.net/files/helmetcam/draeger_top.webp&#34;&gt;&lt;figcaption&gt;Κάτοψη.&lt;/figcaption&gt;&lt;/figure&gt;


&lt;figure &gt;&lt;img src=&#34;https://margiolis.net/files/helmetcam/draeger_bottom.webp&#34;&gt;&lt;figcaption&gt;Άνοψη.&lt;/figcaption&gt;&lt;/figure&gt;

</description>
</item>

<item>
<title>RSS: Πλεονεκτήματα και χρήση</title>
<link>https://margiolis.net/notes/rss/</link>
<pubDate>Fri, 27 May 2022 00:00:00 +1200</pubDate>
<description>&lt;p&gt;Το RSS (Really Simple Syndication) είναι ένα τυποποιημένο πρωτόκολλο για την
δημιουργία και κοινοποίηση ροών web. Μία ροή RSS είναι ένα αρχείο XML
αποτελούμενο από εγγραφές, μία για κάθε άρθρο. Τα προγράμματα που ονομάζονται
«αναγνώστες» RSS αναλύουν αυτά τα αρχεία και τα παρουσιάζουν σε πλοηγήσιμη
μορφή, σαν μία ροή ειδήσεων. Αυτός είναι ένας πολύ βολικός τρόπος να
«ακολουθεί» κάποιος ιστοσελίδες και να συγκεντρώνει το περιεχόμενό τους σε ένα
σημείο, διότι το μόνο που έχει να κάνει είναι να εισάγει το URL της ροής RSS
της ιστοσελίδας στον αναγνώστη.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/rss.png&#34; alt=&#34;rss&#34;&gt;&lt;/p&gt;
&lt;p&gt;Από την πλευρά του ιδιοκτήτη της ιστοσελίδας, για κάθε νέο άρθρο που
δημοσιεύεται, δημιουργείται και μία ανάλογη εγγραφή RSS. Η εγγραφή συνήθως
περιέχει μία περίληψη ή κομμάτι του άρθρου, ή όπως συμβαίνει με την δική μου
ιστοσελίδα, όλο το άρθρο, ωστέ να μπορεί να αναγνωστεί ολόκληρο μέσα από τον
αναγνώστη RSS, χωρίς να χρειάζεται η πρόσβαση στην ιστοσελίδα.&lt;/p&gt;
&lt;h2 id=&#34;γιατί-να-μπείτε-στον-κόπο&#34;&gt;Γιατί να μπείτε στον κόπο;&lt;/h2&gt;
&lt;p&gt;Το RSS είναι ένα ανοιχτό πρωτόκολλο, είναι αποκεντρωμένο, και είναι πολύ απλό
και στην ανάλυση (από προγράμματα) και στην συντήρησή του. Επειδή το RSS είναι
τόσο απλό πρωτόκολλο, μπορεί να προσαρμοστεί στις ροές εργασίας όλων. Υπάρχουν
αναγνώστες RSS για Android, Windows, UNIX, web browsers, email clients, κλπ.&lt;/p&gt;
&lt;p&gt;Εκτός από τα τεχνικά πλεονεκτήματα που προσφέρει το RSS, είναι επίσης ένας
εξαιρετικός τρόπος να έχετε μία προσωπική, επιμελημένη, και μη-λογοκριμένη ροή,
όπου ακολουθείτε μόνο τις ιστοσελίδες που εσείς θέλετε &amp;mdash; ακόμα και κανάλια
YouTube &amp;mdash; χωρίς διαφημίσεις και επιπλέον θόρυβο και αποσπάσεις.&lt;/p&gt;
&lt;p&gt;Προσωπικά χρησιμοποιώ το &lt;a href=&#34;https://codemadness.org/sfeed_curses-ui.html&#34;&gt;sfeed_curses&lt;/a&gt;
ως τον αναγνώστη RSS, επειδή μού αρέσει η απλότητα και η επεκτασιμότητα που προσφέρει. Έχω
γράψει και &lt;a href=&#34;https://ftp.margiolis.net/patch/sfeed_curses_bookmarks.diff&#34;&gt;ένα μικρό patch&lt;/a&gt;,
ώστε να μπορώ αυτόματα να γράφω τα URLs των εγγραφών RSS σε ένα προκαθορισμένο
αρχείο. Αυτό το χρησιμοποιώ κυρίως για να προσθέτω εύκολα βίντεο και podcasts
σε μία ουρά αναμονής και μετά να τα βλέπω μέσω του &lt;a href=&#34;https://mpv.io/&#34;&gt;mpv&lt;/a&gt;
χρησιμοποιώντας &lt;a href=&#34;https://git.sr.ht/~crm/scripts/tree/master/item/vdq&#34;&gt;ένα πολύ απλό script που
έγραψα&lt;/a&gt;, το οποίο το μόνο
που κάνει είναι να διαβάζει το αρχείο που περιέχει την ουρά αναμονής και να
σωληνώνει τα URLs στο mpv.&lt;/p&gt;
&lt;h2 id=&#34;πώς-να-δημιουργήσετε-και-να-συντηρήσετε-μία-ροή-rss&#34;&gt;Πώς να δημιουργήσετε και να συντηρήσετε μία ροή RSS&lt;/h2&gt;
&lt;p&gt;Παρακάτω βρίσκεται μία πολύ απλή ροή RSS. Εντός των ετικετών &lt;code&gt;&amp;lt;channel&amp;gt;&lt;/code&gt;
βρίσκεται όλη η ροή, και εντός των &lt;code&gt;&amp;lt;item&amp;gt;&lt;/code&gt; η κάθε εγγραφή. Οι υπόλοιπες
ετικέτες είναι αρκετά εμφανείς ως προς την λειτουργία τους. Εάν όχι, μπορείτε
&lt;a href=&#34;https://www.rssboard.org/rss-specification&#34;&gt;να διαβάσετε την προδιαγραφή&lt;/a&gt;. Το
άρθρο/περίληψη τοποθετείται εντός των &lt;code&gt;&amp;lt;description&amp;gt;&lt;/code&gt; και μπορεί να είναι είτε
απλό κείμενο είτε &lt;a href=&#34;https://www.rssboard.org/rss-encoding-examples&#34;&gt;κωδικοποιημένη
HTML&lt;/a&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34; ?&amp;gt;
&amp;lt;rss version=&amp;#34;2.0&amp;#34;&amp;gt;
&amp;lt;channel&amp;gt;

&amp;lt;title&amp;gt;Example Org&amp;lt;/title&amp;gt;
&amp;lt;description&amp;gt;Example Org&amp;#39;s RSS feed&amp;lt;/description&amp;gt;
&amp;lt;link&amp;gt;http://www.example.org/rss.xml&amp;lt;/link&amp;gt;

&amp;lt;item&amp;gt;
&amp;lt;title&amp;gt;Example entry&amp;lt;/title&amp;gt;
&amp;lt;link&amp;gt;http://www.example.org/blog/post.html&amp;lt;/link&amp;gt;
&amp;lt;pubDate&amp;gt;Sun, 06 Sep 2009 16:20:00 +0000&amp;lt;/pubDate&amp;gt;
&amp;lt;description&amp;gt;
Here is some text containing an interesting description.
&amp;lt;/description&amp;gt;
&amp;lt;/item&amp;gt;

&amp;lt;/channel&amp;gt;
&amp;lt;/rss&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Για να δημιουργήσετε μία νέα εγγραφή, μπορείτε είτε να την γράψετε χειροκίνητα
στο αρχείο XML, είτε να δημιουργήσετε ένα απλό script να το κάνει αυτόματα,
είτε να χρησιμοποιήσετε κάποιο υπάρχον εργαλείο. Στα περισσότερα προγράμματα
κατασκευής ιστοσελίδων αυτή η λειτουργία είναι προεγκατεστημένη, οπότε δεν
χρειάζεται να ανησυχείτε.&lt;/p&gt;
&lt;p&gt;Για να μοιραστείτε την ροή, απλώς προσθέστε το URL του XML αρχείου στην
ιστοσελίδα σας και πείτε στους αναγνώστες σας να την ακολουθήσουν. Για
παράδειγμα, η ροή RSS της ιστοσελίδας μου βρίσκεται εδώ:
&lt;a href=&#34;../rss.xml&#34;&gt;https://margiolis.net/w/rss.xml&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;ροές-rss-για-δημοφιλείς-πλατφόρμες&#34;&gt;Ροές RSS για δημοφιλείς πλατφόρμες&lt;/h2&gt;
&lt;h3 id=&#34;youtube&#34;&gt;YouTube&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://ytrss.pesky.moe/&#34;&gt;https://ytrss.pesky.moe/&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;github&#34;&gt;GitHub&lt;/h3&gt;
&lt;p&gt;Μπορείτε να βρείτε μία ροή RSS για κάθε νέο commit σε ένα δεδομένο branch.
Αντικαταστείστε τα &lt;code&gt;username&lt;/code&gt;, &lt;code&gt;repo&lt;/code&gt; και &lt;code&gt;branch&lt;/code&gt; με τις κατάλληλες τιμές:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;https://github.com/username/repo/commits/branch.atom
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Αντίστοιχα, υπάροχουν και ροές RSS για νέες εκδόσεις, μεταξύ άλλων.&lt;/p&gt;
&lt;h3 id=&#34;social-media&#34;&gt;Social media&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://margiolis.net/w/socialmedia/&#34;&gt;Εγκατάλειψε τα social media&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;news&#34;&gt;News&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://margiolis.net/w/news&#34;&gt;Απόφυγε τις ειδήσεις&lt;/a&gt;.&lt;/p&gt;
</description>
</item>

<item>
<title>Μοίρασμα ZFS datasets μέσω NFS</title>
<link>https://margiolis.net/notes/zfsnfs/</link>
<pubDate>Sat, 21 May 2022 00:00:00 +1200</pubDate>
<description>&lt;p&gt;Ευχαριστώ τον Mark Johnston &amp;lt;markj@FreeBSD.org&amp;gt; για την παρακάτω ρύθμιση.
Το άρθρο υπάρχει επίσης στο
&lt;a href=&#34;https://wiki.freebsd.org/ZFS/ShareNFS&#34;&gt;FreeBSD Wiki&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;host&#34;&gt;Host&lt;/h2&gt;
&lt;p&gt;Προσθέστε τις παρακάτω γραμμές στο &lt;code&gt;/etc/rc.conf&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;nfs_server_enable=&amp;#34;YES&amp;#34;
mountd_enable=&amp;#34;YES&amp;#34;
mountd_flags=&amp;#34;-n&amp;#34;
rpc_lockd_enable=&amp;#34;YES&amp;#34;
rpc_statd_enable=&amp;#34;YES&amp;#34;
rpcbind_enable=&amp;#34;YES&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Για κάποιο λόγο ο NFS server πρέπει να επανεκκινηθεί την πρώτη φορά μετά την
εκκίνηση του υπολογιστή. Ένας απλώς τρόπος να το κάνετε αυτόματα:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# echo &amp;#34;service nfsd restart&amp;#34; &amp;gt;&amp;gt; /etc/rc.local
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ορίστε την ιδιότητα &lt;code&gt;sharenfs&lt;/code&gt; στο dataset που θέλετε να μοιράσετε.
Αντικαταστήστε τις IP και τα &lt;code&gt;pool/dataset*&lt;/code&gt; με τις επιθυμητές τιμές σας. Οι
ιδιότητες ZFS εξηγούνται στο &lt;a href=&#34;https://man.freebsd.org/zfsprops/7&#34;&gt;zfsprops(8)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Θα μοιράσουμε 2 datasets, ένα με πρόσβαση read-write και ένα με read-only.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# chmod -R 777 /pool/dataset_rw
# zfs set sharenfs=&amp;#34;-alldirs,-network=192.168.1.0/24&amp;#34; pool/dataset_rw
# zfs set sharenfs=&amp;#34;-ro,-alldirs,-network=192.168.1.0/24&amp;#34; pool/dataset_ro
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Εκκινήστε τον NFS server:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# service nfsd start
# service mountd reload
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;guest&#34;&gt;Guest&lt;/h2&gt;
&lt;p&gt;Αρχικά βρείτε την διεύθυνση IP του host χρησιμοποιώντας το ifconfig(8). Θα
υποθέσουμε ότι είναι 192.168.1.5.&lt;/p&gt;
&lt;p&gt;Προσαρτήστε τα filesystems. Το &lt;code&gt;pool/dataset*&lt;/code&gt; αντιστοιχεί στο σημείο
προσάρτησης του dataset στον host:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# mkdir -p /mnt/dataset_rw /mnt/dataset_ro
# mount -t nfs -o rw 192.168.1.5:/pool/dataset_rw /mnt/dataset_rw
# mount -t nfs -o ro 192.168.1.5:/pool/dataset_ro /mnt/dataset_ro
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Όταν τελειώσετε, αποπροσαρτήστε:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# umount /mnt/dataset_rw /mnt/dataset_ro
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Σε περίπτωση που θέλετε τα filesystems να προσαρτούνται αυτόματα κατά την
εκκίνηση, προσθέστε τις παρακάτω γραμμές στο &lt;code&gt;/etc/fstab&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;192.168.1.5:/dataset_rw   /mnt/dataset_rw	nfs     rw      0       0
192.168.1.5:/dataset_ro   /mnt/dataset_ro	nfs     ro      0       0
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;επιπλέον-ανάγνωση&#34;&gt;Επιπλέον ανάγνωση&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.freebsd.org/en/books/handbook/network-servers/&#34;&gt;FreeBSD Handbook: Network
Servers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>

<item>
<title>FreeBSD VNET Jails</title>
<link>https://margiolis.net/notes/vnetjail/</link>
<pubDate>Sat, 30 Apr 2022 00:00:00 +1200</pubDate>
<description>&lt;p&gt;Το άρθρο υπάρχει επίσης στο
&lt;a href=&#34;https://wiki.freebsd.org/Jails/VNET&#34;&gt;FreeBSD Wiki&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;ρύθμιση&#34;&gt;Ρύθμιση&lt;/h2&gt;
&lt;p&gt;Το VNET ρυθμίζεται χρησιμοποιώντας το
&lt;a href=&#34;https://man.freebsd.org/if_epair/4&#34;&gt;if_epair(4)&lt;/a&gt; interface γεφυρομένο με την
πραγματική κάρτα δικτύου, στην δική μου περίπτωση, την &lt;code&gt;re0&lt;/code&gt;. Όπως συμβαίνει
και με τα if_tap(4) interfaces, τα epairs μπορούν να χρησιμοποιηθούν μόνο από
ένα jail την φορά, οπότε εάν χρειάζεστε να τρέχετε περισσότερα από ένα jail
ταυτόχρονα, θα πρέπει να φτιάξετε περισσότερα epairs.&lt;/p&gt;
&lt;p&gt;Εάν χρησιμοποιείτε tap interfaces για bhyve VMs, μπορείτε απλά να τα προσθέσετε
στην γέφυρα με την επιλογή &lt;code&gt;addm&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Προσθέστε τις παρακάτω γραμμές στο &lt;code&gt;/etc/rc.conf&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;if_bridge_load=&amp;#34;YES&amp;#34;
if_epair_load=&amp;#34;YES&amp;#34;

cloned_interfaces=&amp;#34;bridge0&amp;#34;
ifconfig_bridge0=&amp;#34;addm re0 up&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Εφαρμόστε τις αλλαγές:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# /etc/netstart
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Το jail πρέπει να κληρονομήσει τα &lt;code&gt;/dev/bpf*&lt;/code&gt; από τον host προκειμένου να
υπάρχει πρόσβαση στο δίκτυο. Δημιουργήστε έναν νέο κανόνα στο
&lt;code&gt;/dev/devfs.rules&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[devfsrules_jails=5]
add include $devfsrules_hide_all
add include $devfsrules_unhide_basic
add include $devfsrules_unhide_login
add path &amp;#39;bpf*&amp;#39; unhide
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Επανεκκινήστε το devfs(8):&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# service devfs restart
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Στο &lt;code&gt;/etc/jail.conf&lt;/code&gt;, θα ονομάσουμε το jail &lt;code&gt;foo&lt;/code&gt; και θα τού δώσουμε το άλλο
άκρο του epair που θα δημιουργήσουμε ως την κάρτα δικτύου του. Η διεύθυνση IP
του θα αποκτηθεί μέσω DHCP. Ο λόγος που καλώ χειροκίνητα το dhclient(8) είναι
επειδή η προσθήκη της γραμμής &lt;code&gt;ifconfig_epair0b=&amp;quot;DHCP&amp;quot;&lt;/code&gt; στο &lt;code&gt;/etc/rc.conf&lt;/code&gt; του
jail δεν δουλεύει. Οι επιλογές αναλύονται στο
&lt;a href=&#34;https://man.freebsd.org/jail.conf/5&#34;&gt;jail.conf(5)&lt;/a&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;path = &amp;#34;/usr/local/jail/$name&amp;#34;;
host.hostname=&amp;#34;$name&amp;#34;;

exec.clean;
exec.start = &amp;#34;/bin/sh /etc/rc&amp;#34;;
exec.stop = &amp;#34;/bin/sh /etc/rc.shutdown&amp;#34;;
allow.mount;
allow.raw_sockets = 1;
mount.devfs;
devfs_ruleset=&amp;#34;5&amp;#34;;
vnet;
sysvmsg=new;
sysvsem=new;
sysvshm=new;

foo {
	vnet.interface = &amp;#34;epair0b&amp;#34;;
	exec.start += &amp;#34;dhclient epair0b&amp;#34;;
}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;εγκατάσταση&#34;&gt;Εγκατάσταση&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# mkdir -p /usr/local/jail/foo
# bsdinstall jail /usr/local/jail/foo
...
# ifconfig epair0 create
# ifconfig bridge0 addm epair0a
# ifconfig epair0a up
# service jail onestart foo
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ελέγξτε ότι το jail έχει πρόσβαση στο δίκτυο:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# jexec foo ping google.com
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Κατά το κλείσιμο του jail, καταστρέψτε το epair:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# service jail onestop foo
# ifconfig epair0a destroy
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;διαγραφή-jail&#34;&gt;Διαγραφή jail&lt;/h2&gt;
&lt;p&gt;Η διαγραφή των jails δεν είναι εντελώς απλή, οπότε παραθέτω την διαδικασία:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# service jail onestop foo
# chflags -R noschg /usr/local/jail/foo
# rm -rf /usr/local/jail/foo
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;επιπλέον-ανάγνωση&#34;&gt;Επιπλέον ανάγνωση&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://freebsdfoundation.org/freebsd-project/resources/introduction-to-freebsd-jails/&#34;&gt;An Introduction to FreeBSD Jails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.freebsd.org/en/books/handbook/jails/&#34;&gt;FreeBSD Handbook: Jails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://klarasystems.com/articles/virtualize-your-network-on-freebsd-with-vnet/&#34;&gt;Virtualize your network on FreeBSD with VNET&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>

<item>
<title>Απλές ειδοποιήσεις για το σύστημα παραθύρων X χωρίς την χρήση daemon</title>
<link>https://margiolis.net/notes/nfy/</link>
<pubDate>Sat, 02 Apr 2022 00:00:00 +1200</pubDate>
<description>&lt;p&gt;&lt;a href=&#34;https://git.sr.ht/~crm/nfy&#34;&gt;Πηγαίος κώδικας&lt;/a&gt; |
&lt;a href=&#34;https://ftp.margiolis.net/nfy/nfy-0.2.tar.gz&#34;&gt;Λήψη 0.2&lt;/a&gt; |
&lt;a href=&#34;https://margiolis.net/files/nfy.1.html&#34;&gt;Man page&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;χαρακτηριστικά&#34;&gt;Χαρακτηριστικά&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Πολύ ελαφρύ. ~250 γραμμές C.&lt;/li&gt;
&lt;li&gt;Λίγα dependencies, συνήθως προεγκατεστημένα: &lt;code&gt;Xlib&lt;/code&gt;, &lt;code&gt;libXft&lt;/code&gt; και
&lt;code&gt;libXrandr&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Πολλαπλές ειδοποιήσεις εξυπηρετούνται σε
&lt;a href=&#34;https://margiolis.net/notes/procqueue&#34;&gt;ούρα μέσω χρήσης lock file&lt;/a&gt;. Αυτό αποφεύγει την ανάγκη για
daemon (π.χ., D-Bus), που τρέχει συνεχώς στο παρασκήνιο.&lt;/li&gt;
&lt;li&gt;Non-blocking συμπεριφορά, ώστε να μπορεί εύκολα να χρησιμοποιηθεί εντός
scripts.&lt;/li&gt;
&lt;li&gt;Οι τροποποιήσεις γίνονται με την επεξεργασία του &lt;code&gt;config.h&lt;/code&gt; και την
επαναμεταγλώττιση του πηγαίου κώδικα, παρόμοια με τα &lt;a href=&#34;https://suckless.org/&#34;&gt;προγράμματα
suckless&lt;/a&gt;. Δεν χρειάζεται γνώση C για την επεξεργασία
του αρχείου. Η μεταγλώττιση παίρνει περίπου 1 δευτερόλεπτο.&lt;/li&gt;
&lt;li&gt;Η ειδοποίηση μπορεί να εξαφανιστεί κάνοντας κλικ πάνω της.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Το nfy(1) λειτουργεί σωληνόνωντας κείμενο. Το κείμενο δεν μπορεί να δωθεί ως
όρισμα:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ echo &amp;#39;hello world&amp;#39; | nfy
$ nfy &amp;lt; foo.txt
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Εάν το &lt;code&gt;stdin&lt;/code&gt; είναι άδειο, τερματίζει με σφάλμα:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ nfy
nfy: stdin is empty
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/nfy.webp&#34; alt=&#34;nfy&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;εγκατάσταση&#34;&gt;Εγκατάσταση&lt;/h2&gt;
&lt;p&gt;Αρχικά σιγουρευτείτε ότι όλες οι ρυθμίσεις στο &lt;code&gt;config.mk&lt;/code&gt; ταιριάζουν στην
διαμόρφωση του συστήματός σας, και έπειτα:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# make install clean
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;σημειώσεις&#34;&gt;Σημειώσεις&lt;/h2&gt;
&lt;p&gt;Εάν θέλετε να χρησιμοποιήσετε το nfy(1) με το cron(8), θα πρέπει να κάνετε
export την μεταβλητή του X Display, εντός του script στο οποίο τρέχει το
nfy(1):&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;export DISPLAY=&amp;#34;:0.0&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Εναλλακτικά, κάντε export την μεταβλητή στο αρχείο crontab κατευθείαν.&lt;/p&gt;
&lt;p&gt;Στείλτε σχόλια και bugs στο &lt;code&gt;&amp;lt;christos@margiolis.net&amp;gt;&lt;/code&gt;.&lt;/p&gt;
</description>
</item>

<item>
<title>Git στο 9front</title>
<link>https://margiolis.net/notes/git9/</link>
<pubDate>Sun, 13 Mar 2022 00:00:00 +1200</pubDate>
<description>&lt;p&gt;Το άρθρο υπάρχει επίσης και στο
&lt;a href=&#34;http://wiki.9front.org/git9&#34;&gt;9front Wiki&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;πηγές&#34;&gt;Πηγές&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://man.9front.org/1/git&#34;&gt;9front git man page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://orib.dev/git9.html&#34;&gt;Άρθρο του Ori για το Git9&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ρύθμιση-χρήστη&#34;&gt;Ρύθμιση χρήστη&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;; mkdir $home/lib/git
; cat &amp;gt; $home/lib/git/config
[user]
	name=Your Name
	email=me@example.org
^D
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;παραδείγματα&#34;&gt;Παραδείγματα&lt;/h2&gt;
&lt;p&gt;Δημιουργήστε, κάντε commit και push ένα repo:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;; cd repo
; git/init
# προσθέστε ένα remote στο .git/config...
; git/add .
; git/commit -m &amp;#39;commitmsg&amp;#39; foo.c
heads/front: 817a3f121083091291c45f1ddfcd1b042343efab
; git/push
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Κάντε clone και έπειτα push τις αλλαγές σε ένα repo:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;; git/clone git://git.example.org/repo
; cd repo
# κάντε αλλαγές...
; git/commit foo.c
; git/push
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Δημιουργήστε ένα patch:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# κάντε αλλαγές...
; git/commit -m &amp;#39;commitmsg&amp;#39; foo.c
heads/front: 817a3f121083091291c45f1ddfcd1b042343efab
; git/export &amp;gt; patch.diff
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Εφαρμόστε ένα patch:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;; git/import &amp;lt; patch.diff
applying commitmsg
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Δείτε ποιά αρχεία έχουν αλλάξει:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;; git/diff -s
M foo.c
M bar.c
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;χρήση-shithub&#34;&gt;Χρήση Shithub&lt;/h2&gt;
&lt;p&gt;Πρώτα ρωτήστε τον Ori (ori AT eigenstate DOT org) για χρήστη.&lt;/p&gt;
&lt;p&gt;Δημιουργήστε και κάντε push ένα repository:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;; rcpu -u $user -h shithub.us -c \
	newrepo -d &amp;#39;description&amp;#39; -c &amp;#39;me@example.org&amp;#39; reponame
; git/push -u hjgit://shithub.us/$user/reponame
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Τα repositories ζουν στο &lt;code&gt;/usr/git/$user&lt;/code&gt;. Κάθε repo περιέχει επεξεργάσιμα
αρχεία στο &lt;code&gt;/usr/git/$user/repo/.git&lt;/code&gt;:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;code&gt;webpublish&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Εάν αυτό το αρχείο υπάρχει, τότε το repository είναι δημοσιευμένο στην
δημόσια web λίστα με repositories.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;desc, description&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Η σύντομη περιγραφή του repository. Εμφανίζεται στην λίστα repo.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;contact&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Πληροφορίες επικοινωνίας για υποβολή patches. Εμφανίζεται στην σελίδα
πληροφοριών του repo.&lt;/dd&gt;
&lt;/dl&gt;
</description>
</item>

<item>
<title>Σεττάρισμα CPU server στο 9front</title>
<link>https://margiolis.net/notes/9front_cpu/</link>
<pubDate>Mon, 07 Mar 2022 00:00:00 +1200</pubDate>
<description>&lt;p&gt;Τα περιεχόμενα του &lt;code&gt;/net/ndb&lt;/code&gt; θα είναι χρήσιμα κατά την διάρκεια όλης της
διαδικασίας, οπότε έχετέ τα ορατά σε κάποιο άλλο παράθυρο:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;; ip/ipconfig
; cat /net/ndb
ip=192.168.1.152 ipmask=255.255.255.0 ipgw=192.168.1.3
	sys=cirno
	dns=192.168.1.1
	dns=192.168.1.1
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;ρυθμίσεις-εκκίνησης&#34;&gt;Ρυθμίσεις εκκίνησης&lt;/h2&gt;
&lt;p&gt;Το &lt;code&gt;9fat&lt;/code&gt; partition περιέχει το kernel, bootloader, καθώς και τις ρυθμίσεις
εκκίνησης. Εισάγετε τις παρακάτω γραμμές στο &lt;code&gt;plan9.ini&lt;/code&gt;. Σιγουρευτείτε ότι οι
τιμές ταιριάζουν στις δικές σας ρυθμίσεις:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;; 9fs 9fat
; cd /n/9fat
; cat &amp;gt;&amp;gt; plan9.ini

user=glenda
cpu=192.168.1.152
auth=192.168.1.152
authdom=someauth
service=cpu
^D
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ο &lt;code&gt;user&lt;/code&gt; είναι κάτι σαν τον root χρήστη στα συστήματα UNIX, τα &lt;code&gt;cpu&lt;/code&gt; και &lt;code&gt;auth&lt;/code&gt;
ορίζουν τις διευθύνσεις IP των CPU και auth servers αντίστοιχα, το &lt;code&gt;authdom&lt;/code&gt;
είναι το domain name του server, και το &lt;code&gt;service=cpu&lt;/code&gt; ξεκινάει τον CPU listener
κατά την εκκίνηση.&lt;/p&gt;
&lt;p&gt;Επειδή θέλουμε το 9front να bootάρει αυτόματα, το prompt &lt;code&gt;bootargs&lt;/code&gt; πρέπει να
προσπεραστεί. Για να το κάνετε αυτό, αλλάξτε την μεταβλητή &lt;code&gt;bootargs&lt;/code&gt; (οι τιμές
της μπορεί να είναι διαφορετικές) στο &lt;code&gt;plan9.ini&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;bootargs=local!/dev/sdE0/fs
# change to...
nobootprompt=local!/dev/sdE0/fs -m 291 -A -a tcp!*!564
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;auth-server&#34;&gt;Auth server&lt;/h2&gt;
&lt;p&gt;Ορίστε όνομα και κωδικό για τον διαχειριστή του auth server &amp;mdash; τα &lt;code&gt;authid&lt;/code&gt; και
&lt;code&gt;authdom&lt;/code&gt; πρέπει να ταιριάζουν με αυτά του &lt;code&gt;plan9.ini&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;; auth/wrkey
bad nvram des key
bad authentication id
bad authentication domain
authid: glenda
authdom: someauth
secstore key:
password: &amp;lt;your_pass&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ορίστε τον κωδικό της &lt;code&gt;glenda&lt;/code&gt;. Αυτός &lt;em&gt;πρέπει&lt;/em&gt; να είναι ίδιος με αυτόν που
ορίσατε στο wrkey(8). Πάντα να τρέχετε το keyfs(4) προτού επεξεργάζεστε
κλειδιά:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;; auth/keyfs
; auth/changeuser glenda
Password: &amp;lt;your_pass&amp;gt;
Confirm password: &amp;lt;your_pass&amp;gt;
assign new Inferno/POP secret? [y/n]: y
make it the same as Plan 9 password? [y/n]: y
Expiration date (YYYYMMDD or never)[never]:
Post id:
User&amp;#39;s full name: 
Department #:
User&amp;#39;s email address:
user glenda installed for Plan 9

; auth/enable glenda
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;βάση-δεδομένων-δικτύου&#34;&gt;Βάση δεδομένων δικτύου&lt;/h2&gt;
&lt;p&gt;Εισάγετε τις παρακάτω γραμμές στο &lt;code&gt;/lib/ndb/local&lt;/code&gt; (προσοχή στις λεπτομέρειες,
ειδικά στο &lt;code&gt;ip=&lt;/code&gt;):&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;; cat &amp;gt;&amp;gt; /lib/ndb/local

authdom=someauth auth=192.168.1.152

ipnet=iphome ip=192.168.1.0 ipmask=255.255.255.0
	ipgw=192.168.1.3
	auth=192.168.1.152
	authdom=someauth
	fs=192.168.1.152
	cpu=192.168.1.152
	dns=192.168.1.1
^D
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Το &lt;code&gt;ipnet&lt;/code&gt; μπορεί να είναι οτιδήποτε.&lt;/p&gt;
&lt;p&gt;Συγχρονίστε τις αλλαγές και επανεκκινήστε το σύστημα:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;; echo sync &amp;gt;&amp;gt; /srv/hjfs.cmd
; fshalt -r
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;μετά-την-επανεκκίνση&#34;&gt;Μετά την επανεκκίνση&lt;/h2&gt;
&lt;p&gt;Ενεργοποιήστε το δίκτυο:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;; bind -a &amp;#39;#l0&amp;#39; /net
; ip/ipconfig
; ip/ipconfig ether /net/ether0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Συνδεθείτε στον server με την χρήση του drawterm ως &lt;code&gt;glenda&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ drawterm -u glenda
cpu[cpu]: 192.168.1.152
auth[192.168.1.152]:
glenda@someauth dp9ik password: &amp;lt;your_pass&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ξεκινήστε τον rio(1):&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cpu% rio -s -i riostart
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Το &lt;code&gt;/cfg/$sysname/cpustart&lt;/code&gt; περιέχει εντολές οι οποίες τρέχουν κατά την
εκκίνηση. Μπορείτε να προσθέσετε οτιδήποτε θέλετε εκεί &amp;mdash; εγώ θα βάλω τις
εντολές που τρέξαμε μετά την επανεκκίνηση για να κάνω την ζωή μου πιο εύκολη:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;; mkdir /cfg/$sysname
; cat &amp;gt; /cfg/$sysname/cpustart
bind -a &amp;#39;#l0&amp;#39; /net
ip/ipconfig
ip/ipconfig ether /net/ether0
cat /net/ndb
^D
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;νέος-χρήστης&#34;&gt;Νέος χρήστης&lt;/h2&gt;
&lt;p&gt;Προσθέστε έναν νέο χρήστη στον file server, ορίστε τον σε μερικά συνηθισμένα
groups, και ορίστε του κωδικό:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;; echo newuser christos &amp;gt;&amp;gt; /srv/hjfs.cmd
; echo newuser sys +christos &amp;gt;&amp;gt; /srv/hjfs.cmd
; echo newuser adm +christos &amp;gt;&amp;gt; /srv/hjfs.cmd
; echo newuser upas +christos &amp;gt;&amp;gt; /srv/hjfs.cmd
; echo newuser cron +christos &amp;gt;&amp;gt; /srv/hjfs.cmd
; auth/keyfs
; auth/changeuser christos
; auth/enable christos
; cat &amp;gt;&amp;gt; /lib/ndb/auth
hostid=christos
	uid=!sys uid=!adm uid=*
^D
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Κάντε επανεκκίνηση ώστε να τεθούν σε ισχύ οι αλλαγές:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;; fshalt -r
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Συνδεθείτε με το drawterm ως &lt;code&gt;christos&lt;/code&gt; και τρέξτε το newuser(8) ώστε να
ορίσετε το home directory του:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ drawterm -u christos
...
; /sys/lib/newuser
&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>Σημειώσεις για τον Acme editor</title>
<link>https://margiolis.net/notes/acme_notes/</link>
<pubDate>Sun, 06 Mar 2022 00:00:00 +1200</pubDate>
<description>&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/acme.webp&#34; alt=&#34;acme&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;πόροι&#34;&gt;Πόροι&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=dP1xVpMPn8M&#34;&gt;A Tour of the Acme Editor&lt;/a&gt; -
Δείτε το εάν δεν έχετε ιδέα.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://acme.cat-v.org/&#34;&gt;The Acme User Interface for Programmers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=dopu3ZtdCsg&#34;&gt;Plan9 Acme Intro - Part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://chai.guru/pub/plan9/mirrors/tao-of-acme.html&#34;&gt;The Tao of Acme&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://mostlymaths.net/2013/03/extensibility-programming-acme-text-editor.html/&#34;&gt;Extensibility in the Acme text editor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;χρήση-ποντικιού&#34;&gt;Χρήση ποντικιού&lt;/h2&gt;
&lt;p&gt;Ο Acme χρειάζεται ποντίκι 3 κουμπιών για να δουλέψει πλήρως. Όλα τα κουμπιά
μπορούν να χρησιμοποιηθούν για επιλογή κειμένου, αλλά η λειτουργία του καθενός
είναι διαφορετική αφότου αφεθεί. Το αριστερό κουμπί χρησιμοποιείται απλώς για
επιλογή κειμένου. Το μεσαίο κουμπί για εκτέλεση του επιλεγμένου κειμένου. Το
δεξί κουμπί για αναζήτηση του επιλεγμένου κειμένου καθώς και φόρτωση αρχείων
και άνοιγμα directories. Το κείμενο δεν χρειάζεται να επιλεγεί πρώτα όταν
χρησιμοποιείται το κουμπί 2 και 3 (μεσαίο και δεξί), εάν η επιλογή είναι μόνο
μία λέξη.&lt;/p&gt;
&lt;p&gt;Ο Acme επίσης υποστηρίζει «συγχορδίες» κουμπιών, δηλαδή ταυτόχρονο πάτημα
περισσοτέρων ενός κουμπιού.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Κουμπία 1-2&lt;/td&gt;
          &lt;td&gt;Αποκοπή.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Κουμπιά 1-3&lt;/td&gt;
          &lt;td&gt;Επικόλληση.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Επιλογή κειμένου + Κουμπιά 2-1&lt;/td&gt;
          &lt;td&gt;Εκτέλεση με την επιλογή ως όρισμα.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;μετακίνηση-εντός-του-κειμένου&#34;&gt;Μετακίνηση εντός του κειμένου&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;:2&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Μετακίνηση στην 2η γραμμή.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;:0&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Μετακίνηση στην αρχή του αρχείου.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;:$&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Μετακίνηση στο τέλος του αρχείου.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;CTRL-A&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Μετακίνηση στην αρχή της γραμμής.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;CTRL-E&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Μετακίνηση  στο τέλος της γραμμής.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;CTRL-F&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Αυτόματη συμπλήρωση path αρχείου.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Edit =&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Εύρεση αριθμού της τρέχουσας γραμμής.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;αναζήτηση-και-επιλογή&#34;&gt;Αναζήτηση και επιλογή&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;:,&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Επιλογή όλων των γραμμών.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Edit ,&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Επιλογή όλων των γραμμών.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;:1,5&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Επιλογή γραμμών 1 έως 5.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Edit 1,5&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Επιλογή γραμμών 1 έως 5.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;:/regexp/&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Επιλογή γραμμών που περιέχουν το &lt;code&gt;regexp&lt;/code&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;:/regexp1/,/regexp2/&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Επιλογή γραμμών ανάμεσα σε &lt;code&gt;regexp1&lt;/code&gt; και &lt;code&gt;regexp2&lt;/code&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Edit + /foo&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Αναζήτηση προς τα εμπρός.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;:/foo&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Αναζήτηση προς τα εμπρός.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;:foo&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Αναζήτηση προς τα εμπρός.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Right click kon word.&lt;/td&gt;
          &lt;td&gt;Αναζήτηση προς τα εμπρός.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Edit -/foo&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Αναζήτηση προς τα πίσω.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;:-/foo&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Αναζήτηση προς τα πίσω.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;-/foo&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Αναζήτηση προς τα πίσω.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;επεξεργασία-κειμένου&#34;&gt;Επεξεργασία κειμένου&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;CTRL-U&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Διαγραφή από τον κέρσορα έως την αρχή της γραμμής.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;CTRL-W&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Διαγραφή πριν από τον κέρσορα.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;CTRL-H&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Διαγραφή χαρακτήρα πριν τον κέρσορα.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Edit , d&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Καθάρισμα παραθύρου.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Edit , s/foo/bar/g&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Καθολική αντικατάσταση.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Edit , | sed &#39;s/foo/bar/g&#39;&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Καθολική αντικατάσταση.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Edit s/foo/bar/g&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Αντικατάσταση στην επιλογή.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Edit 2 d&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Διαγραφή 2ης γραμμής.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Edit 2 c/foo&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Αλλαγή 2ης γραμμής.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Edit 2 a/foo&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Προσθήκη μετά την 2η γραμμή.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Edit 2 i/foo&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Προσθήκη πριν την 2η γραμμή.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;χρήση-εξωτερικών-εντολών&#34;&gt;Χρήση εξωτερικών εντολών&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;cmd&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Εκτέλεση &lt;code&gt;cmd&lt;/code&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;|cmd&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Σωλήνωση επιλογής μέσω του &lt;code&gt;cmd&lt;/code&gt; καθώς και εφαρμογή αλλαγών.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;&amp;gt;cmd&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Αποστολή επιλογής στο &lt;code&gt;cmd&lt;/code&gt; και εμφάνιση αποτελέσματος σε προσωρινό νέο παράθυρο.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;&amp;lt;cmd&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Επικόλληση εξόδου του &lt;code&gt;cmd&lt;/code&gt; στο τρέχον παράθυρο (δεν χρειάζεται υπάρχουσα επιλογή).&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Μπορεί να χρησιμοποιηθεί οποιαδήποτε εντολή, αυτά είναι απλώς μερικά παραδείγματα.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Edit , &amp;lt; echo foo&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Αντικατάσταση σώματος του παραθύρου με κάποιο κείμενο (λειουργεί με οποιαδήποτε εντολή).&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;echo foo | 9p write acme/$winid/body&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Προσθήκη στο τέλος του σώματος του τρέχοντος παραθύρου.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Edit , &amp;gt; wc -l&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Μέτρηση γραμμών.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Edit , | sort&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Ταξινόμηση γραμμών.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Edit ,x/regexp/ &amp;lt; date&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Αντικάτασταση &lt;code&gt;regexp&lt;/code&gt; με την έξοδο του date(1).&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Επιλογή κειμένου + &lt;code&gt;| sed &#39;&#39; &amp;gt; foo.txt&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Αποκοπή στο &lt;code&gt;foo.txt&lt;/code&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Επιλογή κειμένου + &lt;code&gt;&amp;gt; sed &#39;&#39; &amp;gt; foo.txt&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Αντιγραφή στο &lt;code&gt;foo.txt&lt;/code&gt;.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;αρχεία&#34;&gt;Αρχεία&lt;/h2&gt;
&lt;p&gt;Όπως αναφέρθηκε νωρίτερα, τα αρχεία ανοίγονται με το δεξί κουμπί του ποντικιού.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;foo.c&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Άνοιγμα αρχείου.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;foo.c:3&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Άνοιγμα αρχείου στην γραμμή 3.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;foo.c:3:9&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Άνοιγμα αρχείου στην γραμμή 3 στήλη 9.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;foo.c:/^func&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Άνοιγμα αρχείου στην γραμμή που αρχίζει με &lt;code&gt;func&lt;/code&gt;.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;foo.c:/bar/,/baz/&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Άνοιγμα αρχείου με επιλογή από το &lt;code&gt;bar&lt;/code&gt; έως &lt;code&gt;baz&lt;/code&gt;.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;χρήσιμες-εσωτερικές-εντολές-acme&#34;&gt;Χρήσιμες εσωτερικές εντολές Acme&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;win&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Άνοιγμα shell σε νέο παράθυρο.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;web URL&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Άνοιγμα &lt;code&gt;URL&lt;/code&gt; στον browser.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Dump&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Αποθήκευση τρέχουσας κατάστασης.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Load&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Φόρτωση dump.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Tab 8&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Ορισμός πλάτους tab σε 8 χαρακτήρες.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;μεταβλητές&#34;&gt;Μεταβλητές&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;$%&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Όνομα τρέχοντος αρχείου.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;$samfile&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Όνομα τρέχοντος αρχείου.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;$winid&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Τρέχον παράθυρο.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
</description>
</item>

<item>
<title>Θερμόμετρο με PIC16F877A και BME280</title>
<link>https://margiolis.net/notes/pic_therm/</link>
<pubDate>Mon, 14 Feb 2022 00:00:00 +1200</pubDate>
<description>&lt;p&gt;Αυτό το ενσωματωμένο σύστημα μετράει θερμοκρασία και υγρασία και τυπώνει τα
δεδομένα στην οθόνη LCD. Ο αισθητήρας BME280 έχει επίσης την δυνατότητα
μέτρησης πίεσης, αλλά δεν την υλοποίησα, επειδή το MCU δεν είχε αρκετό
διαθέσιμο χώρο.
&lt;a href=&#34;https://git.sr.ht/~crm/pic_therm/tree/master&#34;&gt;Το project μπορεί να βρεθεί ολόκληρο εδώ&lt;/a&gt;.
Έχω συμπεριλάβει επίσης datasheets για το MCU, τον αισθητήρα και την οθόνη LCD.&lt;/p&gt;
&lt;p&gt;Η ανάπτυξη έγινε στο FreeBSD με την
&lt;a href=&#34;https://margiolis.net/notes/pic_freebsd/&#34;&gt;ροή εργασίας που περιγράφω εδώ&lt;/a&gt;.
Εάν χρησιμοποιείτε τα εργαλεία της Microchip, θα πρέπει να κάνετε μερικές
αλλαγές στον κώδικα, αλλά τίποτα ιδιαίτερο.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://git.sr.ht/~crm/pic_therm/tree/master/item/src&#34;&gt;Ο πηγαίος κώδικας&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/pic_therm_main.webp&#34; alt=&#34;pic_therm_main&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;εξαρτήματα&#34;&gt;Εξαρτήματα&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Μικροελεγκτής Microchip PIC16F877A-I/P.&lt;/li&gt;
&lt;li&gt;Αισθητήρας θερμοκρασίας, υγρασίας και πίεσης Adafruit BME280.&lt;/li&gt;
&lt;li&gt;LCD 16x2.&lt;/li&gt;
&lt;li&gt;1 κρυσταλλικός ταλαντωτής 16MHz.&lt;/li&gt;
&lt;li&gt;2 αντιστάσεις 10kΩ.&lt;/li&gt;
&lt;li&gt;2 αντιστάσεις 300Ω.&lt;/li&gt;
&lt;li&gt;1 ποτενσιόμετρο 10kΩ.&lt;/li&gt;
&lt;li&gt;2 κεραμικοί πυκνωτές 22pF.&lt;/li&gt;
&lt;li&gt;2 LED.&lt;/li&gt;
&lt;li&gt;2 push-buttons.&lt;/li&gt;
&lt;li&gt;Breadboard και καλώδια.&lt;/li&gt;
&lt;li&gt;3 μπαταρίες AAA (σύνολο 4.5V) ή μία μπαταρία 9V με διαιρέτη τάσης 5V.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ασφαλές-εύρος-θερμοκρασίας&#34;&gt;Ασφαλές εύρος θερμοκρασίας&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Εξάρτημα&lt;/th&gt;
          &lt;th&gt;Θερμοκρασία λειτουργίας&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;PIC16F877A&lt;/td&gt;
          &lt;td&gt;-40°C - 85°C&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;BME280&lt;/td&gt;
          &lt;td&gt;-40°C - 85°C&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;LCD&lt;/td&gt;
          &lt;td&gt;-20°C - 70°C&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Οπότε, είναι καλύτερο για το σύστημα να λειτουργεί στο εύρος -20°C με 70°C.&lt;/p&gt;
&lt;h2 id=&#34;σχηματικό&#34;&gt;Σχηματικό&lt;/h2&gt;
&lt;p&gt;Μπορείτε επίσης να κατεβάσετε την
&lt;a href=&#34;https://git.sr.ht/~crm/pic_therm/tree/master/item/schem/pic.pdf&#34;&gt;έκδοση PDF&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/pic_therm_schem.webp&#34; alt=&#34;pic_therm_schem&#34;&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Προγραμματισμός μικροελεγκτών PIC στο FreeBSD</title>
<link>https://margiolis.net/notes/pic_freebsd/</link>
<pubDate>Sun, 23 Jan 2022 00:00:00 +1200</pubDate>
<description>&lt;p&gt;Ελεγμένο στο FreeBSD 13.0. Το άρθρο υπάρχει επίσης στο
&lt;a href=&#34;https://wiki.freebsd.org/Microcontrollers/PIC&#34;&gt;FreeBSD Wiki&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;προαπαιτούμενα&#34;&gt;Προαπαιτούμενα&lt;/h2&gt;
&lt;p&gt;Ο &lt;a href=&#34;http://sdcc.sourceforge.net/&#34;&gt;sdcc&lt;/a&gt; είναι ένας μεταγλωττιστής C για
μικροεπεξεργαστές. Λέει ότι οι μικροεπεργαστές PIC δεν συντηρούνται, αλλά τον
βρήκα αρκετά αξιόπιστο μέχρι στιγμής (με επιφύλαξη, δεν είμαι ειδικός). Το
FreeBSD port είναι &lt;code&gt;lang/sdcc&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Στην σελίδα 75 του
&lt;a href=&#34;http://sdcc.sourceforge.net/doc/sdccman.pdf&#34;&gt;εγχειριδίου χρήσης του sdcc&lt;/a&gt;
αναφέρονται οι υποστηριζόμενες συσκευές PIC. Τα header files βρίσκονται στο
&lt;code&gt;/usr/local/share/sdcc&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Για τον προγραμματισμό του MCU, βρήκα ότι το pk2cmd δουλέυει μία χαρά με το
PICKit2 (ή τους κινέζικους κλώνους), αλλά δεν υπάρχει port για το FreeBSD πια.
Το Makefile δεν εγκαθιστά τα αρχεία σωστά, οπότε έχουμε λίγη ακόμα δουλειά να
κάνουμε:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ git clone https://github.com/psmay/pk2cmd.git
$ cd pk2cmd/pk2cmd
# gmake freebsd install clean
# mv /usr/share/pk2/PK2DeviceFile.dat /usr/local/bin
# rm -rf /usr/share/pk2
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Οι υποστηριζόμενες συσκευές για το pk2cmd αναφέρονται στο
&lt;a href=&#34;https://github.com/psmay/pk2cmd/blob/master/pk2cmd/ReadmeForPK2CMDLinux2-6.txt&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;ανίχνευση-και-προγραμματισμός-του-mcu&#34;&gt;Ανίχνευση και προγραμματισμός του MCU&lt;/h2&gt;
&lt;p&gt;Αποφύγετε να χρησιμοποιείτε μόνο την επιλογή &lt;code&gt;-P&lt;/code&gt; για την αυτόματη ανίχνευση
του MCU, διότι το VPP που εφαρμόζει το PICKit2 στην πλακέτα ενώ προσπαθεί να
την ανιχνεύσει, μπορεί να προκαλέσει ζημιά στο MCU. Αντ&amp;rsquo; αυτού, χρησιμοποιήστε
τον αριθμό της πλακέτας όπως φαίνεται παρακάτω. Επίσης, χρησιμοποιείτε την
επιλογή &lt;code&gt;-C&lt;/code&gt; για να ελέγξετε ότι η πλακέτα είναι κενή.&lt;/p&gt;
&lt;p&gt;Εάν κάποια από τις παρακάτω εντολές pk2cmd αποτύχουν, σιγουρευτείτε ότι όλα
είναι &lt;em&gt;πράγματι&lt;/em&gt; καλωδιωμένα σωστά:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ pk2cmd -P PIC16F877A -C
Device is blank

Operation Succeeded
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Μεταγλωττίστε τον πηγαίο κώδικά σας. Το εκτελέσιμο είναι το αρχείο &lt;code&gt;.hex&lt;/code&gt; που
θα παράξει ο sdcc. Αντικαταστήστε τα &lt;code&gt;pic14&lt;/code&gt; και &lt;code&gt;16f877a&lt;/code&gt; με τα κατάλληλα
ονόματα της συσκευής σας:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ sdcc --use-non-free -mpic14 -p16f877a main.c
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Σβήστε το PIC (εάν δεν ήταν ήδη κενό) και κάντε flash τον νέο κώδικα. Ξανά,
χρησιμοποιήστε τα κατάλληλα ονόματα:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ pk2cmd -P PIC16F877A -E
$ pk2cmd -P PIC16F877A -X -M -F main.hex
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Εάν όλα πήγαν καλά, θα πρέπει να δείτε έξοδο παρόμοια με αυτήν:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;PICkit 2 Program Report
23-1-2022, 21:01:29
Device Type: PIC16F877A

Program Succeeded.

Operation Succeeded
&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>Ροή εργασίας με Git μέσω email</title>
<link>https://margiolis.net/notes/email_git/</link>
<pubDate>Sun, 16 Jan 2022 00:00:00 +1200</pubDate>
<description>&lt;p&gt;Βασική ρύθμιση Git (σε περίπτωση που δεν το έχετε κάνει ήδη αυτό):&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ git config --global user.email you@example.org
$ git config --global user.name &amp;#34;Your Name&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ρύθμιση email Git:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ git config --global sendemail.smtpserver your_mail_server
$ git config --global sendemail.smtpuser you@example.org
$ git config --global sendemail.smtpserverport your_smtp_port
$ git config --global sendemail.smtpencryption your_encryption_type
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;παραδείγματα&#34;&gt;Παραδείγματα&lt;/h2&gt;
&lt;p&gt;Εφαρμογή patch (ή απλώς κάντε ένα commit) και αποστολή αυτού σε κάποια
διεύθυνση email:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ git am &amp;lt; some_patch
$ git send-email --to=list@example.org HEAD^
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Διόρθωση τελευταίου commit και αποστολή:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ git commit -a --amend
$ git send-email --annotate -v2 HEAD^
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Αποστολή 3 τελευταίων commits (βλέπε &lt;a href=&#34;https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection&#34;&gt;Revision
Selection&lt;/a&gt; για
περισσότερες πληροφορίες σχετικά με αυτήν την γραφή):&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ git send-email HEAD~3
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Αποστολή τελευταίου commit στην διεύθυνση list@example.org με θέμα
&amp;ldquo;&lt;code&gt;[reponame][PATCH] commitmsg&lt;/code&gt;&amp;rdquo;. Αυτό είναι χρήσιμο για αποστολές σε λίστες
αλληλογραφίας ή προγραμματιστές με πολλά projects:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ git send-email --subject-prefix=&amp;#34;${PWD##*/}][PATCH&amp;#34; \
	--to=list@example.org -1
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;επιπλέον-υλικό&#34;&gt;Επιπλέον υλικό&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://begriffs.com/posts/2018-06-05-mailing-list-vs-github.html&#34;&gt;Mailing lists vs GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://web.archive.org/web/20180522180815/https://dpc.pw/blog/2017/08/youre-using-git-wrong/&#34;&gt;You&amp;rsquo;re using Git wrong&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://drewdevault.com/2018/07/02/Email-driven-git.html&#34;&gt;The advantages of an email-driven Git workflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git-send-email.io/&#34;&gt;https://git-send-email.io/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://linux.die.net/man/1/git-send-email&#34;&gt;git-send-email(1) man page&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
</item>

<item>
<title>Πώς να εκκίνησετε το αυτοκίνητό σας με καλώδια</title>
<link>https://margiolis.net/notes/jumpstart/</link>
<pubDate>Wed, 12 Jan 2022 00:00:00 +1200</pubDate>
<description>&lt;p&gt;Προαπαιτούμενα: καλώδια και ένα λειτουργικό αυτοκίνητο. Η παρακάτω σειρά έχει
σημασία.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/carpush.webp&#34; alt=&#34;carpush&#34;&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ζωντανό αυτοκίνητο: σβήστε την μηχανή και αφαιρέστε το κλειδί.
Σιγουρευτείτε ότι το χειρόφρενο είναι ενεργοποιημένο και ότι οι ταχύτητες
είναι σε νεκρά. Επίσης σιγουρευτείτε ότι τα καλώδια είναι πάντα χωρισμένα
και μακριά από το σώμα σας.&lt;/li&gt;
&lt;li&gt;Νεκρό αμάξι: συνδέστε το ένα άκρο του θετικού καλωδίου (κόκκινο) στον
θετικό ακροδέκτη της μπαταρίας. Οι ακροδέκτες ξεχωρίζουν από το χρώμα τους
(κόκκινο για θετικό και μαύρο και αρνητικό) ή/και το πρόσημό τους (+ για
θετικό, - για αρνητικό).&lt;/li&gt;
&lt;li&gt;Ζωντανό αυτοκίνητο: συνδέστε το άλλο άκρο του θετικού καλωδίου στον θετικό
ακροδέκτη της μπαταρίας.&lt;/li&gt;
&lt;li&gt;Ζωντανό αυτοκίνητο: συνδέστε το ένα άκρο του αρνητικού καλωδίου (μαύρο)
στον αρνητικό ακροδέκτη της μπαταρίας.&lt;/li&gt;
&lt;li&gt;Νεκρό αυτοκίνητο: χρησιμοποιήστε το άλλο άκρο του αρνητικού καλωδίου ως
γείωση, για παραδείγμα σε κάποιο μπουλόνι κάτω από το καπό.&lt;/li&gt;
&lt;li&gt;Κρατήστε τα καλώδια μακριά από ζεστά εξαρτήματα, όπως το ψυγείο ή την
μηχανή.&lt;/li&gt;
&lt;li&gt;Εκκινήστε το ζωντανό αυτοκίνητο και ανεβάστε ελαφρώς στροφές ανά τακτά
διαστήματα. Κάντε το για μερικά λεπτά.&lt;/li&gt;
&lt;li&gt;Νεκρό (πια ζωντανό) αυτοκίνητο: αποσυνδέστε την γείωση.&lt;/li&gt;
&lt;li&gt;Ζωντανό αυτοκίνητο: αποσυνδέστε το αρνητικό άκρο.&lt;/li&gt;
&lt;li&gt;Ζωντανό αυτοκίνητο: αποσυνδέστε το θετικό άκρο.&lt;/li&gt;
&lt;li&gt;Νεκρό αυτοκίνητο: αποσυνδέστε το θετικό άκρο.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/28MexgFvq7E?t=7&#34;&gt;ΜΗΝ μπερδέψετε τους ακροδέκτες&lt;/a&gt;, ειδάλλως
μπορεί να καταστρέψετε το υπολογιστικό σύστημα του αυτοκινήτου.&lt;/p&gt;
</description>
</item>

<item>
<title>9front με την χρήση του bhyve(8) στο FreeBSD</title>
<link>https://margiolis.net/notes/9front_bhyve/</link>
<pubDate>Tue, 23 Nov 2021 00:00:00 +1200</pubDate>
<description>&lt;p&gt;Το άρθρο αυτό βρίσκεται επίσης στα
&lt;a href=&#34;https://wiki.freebsd.org/bhyve/9front&#34;&gt;FreeBSD Wiki&lt;/a&gt;
και
&lt;a href=&#34;http://wiki.9front.org/freebsd-bhyve&#34;&gt;9front Wiki&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Προαπαιτούμενα ports:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sysutils/bhyve-firmware
sysutils/uefi-edk2-bhyve
net/tigervnc-viewer
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Εισάγετε τις παρακάτω γραμμές στο &lt;code&gt;/etc/rc.conf&lt;/code&gt;. Αντικαταστήστε το &lt;code&gt;re0&lt;/code&gt; με το
δικό σας network interface. Είναι καλή πρκατική να ορίζετε ένα ξεχωριστό &lt;code&gt;tap&lt;/code&gt;
interface για κάθε VM, σε περίπτωση που θέλετε να τρέξετε πολλαπλά VMs
ταυτόχρονα. Χάρην απλότητας, το συγκεκριμένο setup χρησιμοποιεί μόνο ένα &lt;code&gt;tap&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;if_bridge_load=&amp;#34;YES&amp;#34;
if_tap_load=&amp;#34;YES&amp;#34;
cloned_interfaces=&amp;#34;bridge0 tap0&amp;#34;
ifconfig_bridge0=&amp;#34;DHCP addm re0 addm tap0&amp;#34;
ifconfig_bridge0_alias0=&amp;#34;inet 10.0.0.1/24&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Κατεβάστε ένα &lt;a href=&#34;http://9front.org/releases/&#34;&gt;9front ISO&lt;/a&gt; και στο μεταξύ
επανεκκινήστε το δίκτυο:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# service routing restart
# service netif restart
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Δημιουργήστε ένα directory στο οποίο θα αποθηκεύσετε τα πάντα σχετικά με το
9front. Προσωπικά έχω όλα τα
&lt;a href=&#34;https://www.freebsd.org/cgi/man.cgi?query=bhyve&amp;amp;sektion=8&#34;&gt;bhyve(8)&lt;/a&gt; VMs σε
ένα &lt;a href=&#34;https://docs.freebsd.org/en/books/handbook/zfs/&#34;&gt;ZFS dataset&lt;/a&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ cd /path/to/vms/
$ mkdir 9front
$ mv /path/to/9front_iso 9front.iso
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Δημιουργήστε ένα άδειο αρχείο το οποίο θα χρησιμοποιηθεί ως ο σκληρός δίσκος
του VM. 10G θα είναι παραπάνω από αρκετά:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ truncate -s 10G disk.img
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Δημιουργήστε ένα script εκκίνησης. Μπορείτε να τροποποιήσετε τις μεταβλητές για
να ταιριάξουν στο δικό σας setup. Προφανώς, όταν τελειώσετε την εγκατάσταση του
9front από το ISO, θα πρέπει να τρέχετε το script χωρις την γραμμή &lt;code&gt;-s 3,...&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ cat 9front_start

#!/bin/sh

name=&amp;#34;9front&amp;#34;
cpu=&amp;#34;2&amp;#34;
mem=&amp;#34;2G&amp;#34;
iso=&amp;#34;9front.iso&amp;#34;
disk=&amp;#34;disk.img&amp;#34;
tap=&amp;#34;tap0&amp;#34;

ifconfig ${tap} up

bhyve -c ${cpu} -m ${mem} -wH \
	-s 0,hostbridge \
	-s 3,ahci-cd,${iso} \
	-s 4,ahci-hd,${disk} \
	-s 5,virtio-net,${tap} \
	-s 29,fbuf,tcp=0.0.0.0:5900,w=800,h=600,wait \
	-s 30,xhci,tablet \
	-s 31,lpc \
	-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
	${name}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Δημιουργήστε ένα script κλεισίματος ώστε ο bhyve(8) να κλείσει σωστά:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ cat 9front_stop

#!/bin/sh

name=&amp;#34;9front&amp;#34;
tap=&amp;#34;tap0&amp;#34;

ifconfig ${tap} down
bhyvectl --force-poweroff --vm=${name}
bhyvectl --destroy --vm=${name}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Κάντε τα scripts εκτελέσιμα και ξεκινήστε το VM:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ chmod +x 9front_start 9front_stop
# ./9front_start; ./9front_stop
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Τρέξτε τον vncviewer(1) για να συνδεθείτε στην οθόνη του VNC:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ vncviewer 0.0.0.0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Όταν σας ζητηθεί ο τύπος του monitor κατά την εκκίνηση, επιλέξτε &lt;code&gt;xga&lt;/code&gt;.&lt;/p&gt;
</description>
</item>

<item>
<title>Σεττάρισμα OpenBSD Web server</title>
<link>https://margiolis.net/notes/openbsd_web/</link>
<pubDate>Tue, 09 Feb 2021 00:00:00 +1200</pubDate>
<description>&lt;h2 id=&#34;https&#34;&gt;HTTPS&lt;/h2&gt;
&lt;p&gt;Ο acme-client(1) μας δίνει HTTPS.&lt;/p&gt;
&lt;p&gt;Δημιουργήστε τα directories των πιστοποιητικών:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# mkdir -p -m 700 /etc/ssl/private
# mkdir -p -m 755 /var/www/acme
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Τροποποιήστε το &lt;code&gt;/etc/acme-client.conf&lt;/code&gt;. Αντικαταστήστε το &lt;code&gt;example.org&lt;/code&gt; με το
δικό σας domain:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;authority letsencrypt {
	api url &amp;#34;https://acme-v02.api.letsencrypt.org/directory&amp;#34;
	account key &amp;#34;/etc/ssl/private/letsencrypt.key&amp;#34;
}

domain example.org {
	domain key &amp;#34;/etc/ssl/private/example.org.key&amp;#34;
	domain certificate &amp;#34;/etc/ssl/example.org.crt&amp;#34;
	domain full chain certificate &amp;#34;/etc/ssl/example.org.pem&amp;#34;
	sign with letsencrypt
}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;httpd8&#34;&gt;httpd(8)&lt;/h2&gt;
&lt;p&gt;Το OpenBSD εξαρχής συνοδεύεται με έναν web server: httpd(8). Πρέπει να ορίσετε
τα παρακάτω πράγματα:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Το domain name.&lt;/li&gt;
&lt;li&gt;Σε ποιά ports ακούει ο server.&lt;/li&gt;
&lt;li&gt;Πού βρίσκεται το root directory της ιστοσελίδας.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Δημιουργήστε το root directory της ιστοσελίδας. Συνήθως πρέπει να βρίσκεται στο
&lt;code&gt;/var/www/htdocs&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# mkdir -p /var/www/htdocs/example.org
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Η παρακάτω ρύθμιση είναι αρκετή για την ώρα. Με αυτήν, έχετε HTTP και HTTPS για
την ιστοσελίδα σας, καθώς και αυτόματη ανακατεύθυνση HTTP σε HTTPS. Εάν θέλετε
να μάθετε παραπάνω, ή να δείτε τι άλλες επιλογές και ρυθμίσεις είναι
διαθέσιμες, διαβάστε το
&lt;a href=&#34;https://man.openbsd.org/httpd.conf.5&#34;&gt;man page του httpd.conf(5)&lt;/a&gt;.
Στο &lt;code&gt;/etc/httpd.conf&lt;/code&gt; θα γράψουμε τα παρακάτω:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;server &amp;#34;example.org&amp;#34; {
	listen on * port 80
	root &amp;#34;/htdocs/example.org&amp;#34;
	location &amp;#34;/.well-known/acme-challenge/*&amp;#34; {
		root &amp;#34;/acme&amp;#34;
		request strip 2
	}
	block return 301 &amp;#34;https://example.org$REQUEST_URI&amp;#34;
}

server &amp;#34;example.org&amp;#34; {
	listen on * tls port 443
	root &amp;#34;/htdocs/example.org&amp;#34;
	tls {
		certificate &amp;#34;/etc/ssl/example.org.pem&amp;#34;
		key &amp;#34;/etc/ssl/private/example.org.key&amp;#34;
	}
	location &amp;#34;/.well-known/acme-challenge/*&amp;#34; {
		root &amp;#34;/acme&amp;#34;
		request strip 2
	}
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Παράξτε τα πιστοποιητικά TLS:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# acme-client -v example.org
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ελέγξτε ότι η διαμόρφωση είναι σωστή:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# httpd -n
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;(Επαν)εκκινήστε τον web server:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# rcctl restart httpd
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;ανανέωση-πιστοποιητικών&#34;&gt;Ανανέωση πιστοποιητικών&lt;/h2&gt;
&lt;p&gt;Τα πιστοποιητικά TLS λήγουν μετά από λίγους μήνες, οπότε και πρέπει να
παραχθούν νέα. Προκειμένου να αποφύγετε να χρειαστεί να το θυμάστε, αυτό θα
γίνεται αυτόματα μέσω ενός cronjob:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# crontab -e
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Προσθέστε την παρακάτω γραμμή:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;0 0 * * * acme-client -v example.org &amp;amp;&amp;amp; rcctl reload httpd
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;επιπλέον&#34;&gt;Επιπλέον&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://chai.guru/pub/openbsd/htpasswd.html&#34;&gt;Προστασία directory με κωδικό στον httpd(8)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>

<item>
<title>Arduino στο FreeBSD</title>
<link>https://margiolis.net/notes/arduino_freebsd/</link>
<pubDate>Wed, 28 Oct 2020 00:00:00 +1200</pubDate>
<description>&lt;p&gt;Το παρόν άρθρο παρουσιάζει τον προγραμματισμό πλακετών Arduino χρησιμοποιώντας
μόνο βασικά προγραμμάτα γραμμής εντολών, χωρίς την χρήση του Arduino IDE. Το
άρθρο έχει δημοσιευθεί επίσης στο
&lt;a href=&#34;https://wiki.freebsd.org/Arduino/NativeCLI&#34;&gt;FreeBSD Wiki&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Έχει ελεγχθεί σε FreeBSD 12.2 και νεότερα.&lt;/p&gt;
&lt;h2 id=&#34;προαπαιτούμενα&#34;&gt;Προαπαιτούμενα&lt;/h2&gt;
&lt;p&gt;Προαπαιτούμενα ports:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;devel/arduino-core
devel/arduino-bsd-mk
devel/avr-gcc
devel/avr-libc
devel/avrdude
comms/uarduno
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Εισάγετε την παρακάτω γραμμή στο &lt;code&gt;/boot/loader.conf&lt;/code&gt; σε περίπτωση που θέλετε το
kernel module του Arduino να φορτώνεται αυτόματα κατά την εκκίνηση. Εάν θέλετε
να το φορτώνετε χειροκίνητα, προσπεράστε αυτό το βήμα:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;uarduno_load=&amp;#34;YES&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Φορτώστε το kernel module:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# kldload uarduno
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Σιγουρευτείτε ότι υπάρχουν οι παρακάτω γραμμές στο &lt;code&gt;~/.arduino/preferences.txt&lt;/code&gt;
(&lt;a href=&#34;https://wiki.freebsd.org/Arduino/NativeIDE&#34;&gt;πηγή&lt;/a&gt;):&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;serial.port=/dev/cuaU0
launcher=/usr/local/bin/firefox
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Προσθέστε τον χρήστη σας στην ομάδα &lt;code&gt;dialer&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# pw group mod dialer -m $USER
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;σύνδεση-της-πλακέτας&#34;&gt;Σύνδεση της πλακέτας&lt;/h2&gt;
&lt;p&gt;Οι πλακέτες Arduino συνδέονται ως &lt;code&gt;/dev/cuaU*&lt;/code&gt; ή/και &lt;code&gt;/dev/ttyU*&lt;/code&gt; στο FreeBSD.
Εάν αυτές οι σειριακές θύρες δεν εμφανίζονται στο &lt;code&gt;/dev&lt;/code&gt;, ίσως να πρέπει να
πατήσετε το κουμπί reset της πλακέτας. Αφού έχετε συνδέσει την πλακέτα στην
θύρα USB, θα πρέπει να δείτε το παρακάτω μήνυμα στο dmesg(8). Παρόλο που το
μήνυμα μπορεί να διαφέρει, αυτό που έχει σημασία είναι ότι η πλακέτα είναι
συνδεδεμένη και ανιχμευμένη:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ugen1.5: &amp;lt;Arduino (www.arduino.cc) product 0x0043&amp;gt; at usbus1
uarduno0: &amp;lt;Arduino (www.arduino.cc) product 0x0043, class 2/0, rev 1.10/0.01, addr 5&amp;gt; on usbus1
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;το-makefile&#34;&gt;Το Makefile&lt;/h2&gt;
&lt;p&gt;Το μόνο που χρειάζεται για να αρχίσετε είναι απλώς ένα &lt;code&gt;Makefile&lt;/code&gt; που θα
χρησιμοποιηθεί για την μεταγλώττιση και την μεταφόρτωση των προγραμμάτων
Arduino. Δημιουργήστε ένα νέο directory για το project σας και ένα &lt;code&gt;Makefile&lt;/code&gt;
με τις παρακάτω γραμμές:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ARDUINO_DIR=    /usr/local/arduino
ARDUINO_MK_DIR= /usr/local/arduino-bsd-mk
#ARDUINO_LIBS=	
AVRDUDE_PORT=   your_board_port
ARDUINO_BOARD=  your_board_name
SRCS=           your_source_files
TARGET=         your_program_name

include /usr/local/arduino-bsd-mk/bsd.arduino.mk
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Στην δική μου περίπτωση η πλακέτα μου είναι ένα Arduino Uno, οπότε θα πρέπει να
ορίσω το &lt;code&gt;ARDUINO_BOARD&lt;/code&gt; σε &lt;code&gt;uno&lt;/code&gt;. Μπορείτε να δείτε ποιοί άλλοι τύποι πλακετών
είναι διαθέσιμοι στο &lt;code&gt;/usr/local/arduino/hardware/arduino/avr/boards.txt&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Αποφεύγετε να έχετε αρχεία πηγαίου κώδικα με όνομα &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;μεταγλώττιση-και-μεταφόρτωση-ενός-προγράμματος&#34;&gt;Μεταγλώττιση και μεταφόρτωση ενός προγράμματος&lt;/h2&gt;
&lt;p&gt;Γράψτε κώδικα και όταν είναι έτοιμος για μεταγλώττιση και μεταφόρτωση, τρέξτε
την παρακάτω εντολή:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# make install flash clean cleandepend
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Εάν όλα πήγαν καλά, θα πρέπει να δείτε την πλακέτα να εκτελεί τον νέο κώδικα.
Εάν δεν, προσπαθήστε να δείτε τι σφάλματα παρήγαγε το &lt;code&gt;Makefile&lt;/code&gt;:&lt;/p&gt;
&lt;h2 id=&#34;παρακολούθηση&#34;&gt;Παρακολούθηση&lt;/h2&gt;
&lt;p&gt;Το Arduino IDE παρέχει την δυνατότητα σειριακής παρακολούθησης, αλλά το FreeBSD
έχει ενσωματωμένο πρόγραμμα παρακολούθησης, το οποίο μπορεί να εκτελεστεί
κατευθείαν από το τερματικό. Τρέξτε το όποτε θέλετε να παρακολουθήσετε την
πλακέτα και βγείτε με &lt;code&gt;~!&lt;/code&gt; (χρησιμοποιήστε την κατάλληλη θύρα):&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ cu -l /dev/cuaU0
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;χρήση-άλλων-τύπων-πλακετών-πέρα-από-το-uno&#34;&gt;Χρήση άλλων τύπων πλακετών πέρα από το Uno&lt;/h2&gt;
&lt;p&gt;Όπως αναφέρθηκε παραπάνω, χρησιμοποιούμε το &lt;code&gt;uarduno&lt;/code&gt; kernel module. Παρόλο που
η περιγραφή του module είναι &lt;em&gt;&amp;ldquo;FreeBSD Kernel Driver for the Arduino Uno USB
interface&amp;rdquo;&lt;/em&gt;, μπορείτε να χρησιμοποιήσετε και άλλους τύπων πλακετών πέρα από το
Uno. Σύμφωνα με την &lt;a href=&#34;http://www.mrp3.com/uarduno.html&#34;&gt;ιστοσελίδα&lt;/a&gt; του
&lt;code&gt;uarduno&lt;/code&gt;, μπορείτε να τροποποιήσετε το
&lt;code&gt;/usr/ports/comms/uarduno/files/ids.txt&lt;/code&gt; ώστε να περιέχει περισσότερους τύπους
πλακετών &amp;mdash; τα δύο πεδία αντιστοιχούν σε Vendor ID και Product ID. Διαβάστε τα
σχόλια εντός του αρχείου για περισσότερες πληροοφορίες:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{ 0x2341, 0x0001 },  // Arduino UNO, vendor 2341H, product 0001H
{ 0x2341, 0x0042 },  // Arduino MEGA (rev 3), vendor 2341H, product 0042H
{ 0x2341, 0x0043 },  // Arduino UNO (rev 3), vendor 2341H, product 0043H
{ 0x2341, 0x0010 },  // Arduino MEGA 2560 R3, vendor 2341H, product 0010H 
{ 0x2341, 0x8037 },  // Arduino Micro
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Όταν τελειώσετε, επαναμεταγλωττίστε και εγκαταστήστε το port.&lt;/p&gt;
&lt;h2 id=&#34;γνωστά-προβλήματα-και-οι-διορθώσεις-τους&#34;&gt;Γνωστά προβλήματα και οι διορθώσεις τους&lt;/h2&gt;
&lt;p&gt;Παρόλο που μπορεί να έχετε συνδέσει την πλακέτα σας στον υπολογιστή, μπορεί να
παρατηρήσετε ότι δεν εμφανίζεται η συσκευή στο &lt;code&gt;/dev&lt;/code&gt;. Αν και δεν υπάρχει
οριστική απάντηση σχτικά με το τι μπορεί να συμβαίνει, σιγουρευτείτε ότι το
καλώδιο USB είναι συνδεδεμένο σωστά &amp;mdash; σε κάποιες πλακέτες πρέπει να ακούσετε
ένα κλικ.&lt;/p&gt;
&lt;p&gt;Όταν προσπαθείτε να χρησιμοποιήσετε μία νέα βιβλιοθήκη, μπορεί να παρατηρήσετε
ότι ο κώδικάς σας δεν μεταγλωττίζεται. Ένα σύνηθες πρόβλημα είναι ότι δεν έχετε
αποθηκεύσει την βιβλιοθήκη στο σωστό path. Οι βιβλιοθήκες πρέπει να
αποθηκεύονται στο &lt;code&gt;/usr/local/arduino/hardware/arduino/avr/libraries/&lt;/code&gt;, οπότε
πρέπει να τις μεταφέρετε εκεί.&lt;/p&gt;
</description>
</item>

<item>
<title>Πολωνία</title>
<link>https://margiolis.net/notes/poland/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +1200</pubDate>
<description>&lt;h2 id=&#34;wrocław&#34;&gt;Wrocław&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/travel/wroclaw.webp&#34; alt=&#34;wroclaw&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Γειτονιές που μου αρέσουν
&lt;ul&gt;
&lt;li&gt;Κέντρο &amp;mdash; Stare Miasto, Ostrów Tumski&lt;/li&gt;
&lt;li&gt;Βόρεια &amp;mdash; Nadodrze, Ołbin, Wyspa Słodowa, Karłowice&lt;/li&gt;
&lt;li&gt;Νότια &amp;mdash; Przedmieście Świdnickie, Powstańców Śląskich, Gajowice,
Borek, Krzyki, Grabiszyn, Wojszyce&lt;/li&gt;
&lt;li&gt;Δυτικά &amp;mdash; Leśnica, Złotniki, Stabłowice, Żerniki&lt;/li&gt;
&lt;li&gt;Ανατολικά &amp;mdash; Plac Grunwaldzki, Zacisze, Zalesie, Sępolno, Biskupin,
Dąbie, Rakowiec, Trójkąt Bermudzki&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Μπαρς
&lt;ul&gt;
&lt;li&gt;Academus &amp;mdash; Kiełbaśnicza 23&lt;/li&gt;
&lt;li&gt;AleBrowar &amp;mdash; Włodkowica 27&lt;/li&gt;
&lt;li&gt;Artzat Cafe &amp;mdash; Malarska 30&lt;/li&gt;
&lt;li&gt;Barbarka &amp;mdash; Wyspa Słodowa&lt;/li&gt;
&lt;li&gt;Bałagan &amp;mdash; Wojciecha Bogusławskiego 87&lt;/li&gt;
&lt;li&gt;Biały Wilk &amp;mdash; Wojciecha Bogusławskiego 11&lt;/li&gt;
&lt;li&gt;Czeski Film &amp;mdash; Kiełbaśnicza 2&lt;/li&gt;
&lt;li&gt;Kalambur &amp;mdash; Kuźnica 29&lt;/li&gt;
&lt;li&gt;Kontynuacja &amp;mdash; Ofiar Oświęcimskich 17&lt;/li&gt;
&lt;li&gt;Ponton Pub &amp;amp; Bar &amp;mdash; Wyspa Słodowa&lt;/li&gt;
&lt;li&gt;Przedwojenna &amp;mdash; Św. Mikołaja 81&lt;/li&gt;
&lt;li&gt;Raj Bar Beach Bar &amp;mdash; Wyspa Słodowa&lt;/li&gt;
&lt;li&gt;Tawerna pod Kilem &amp;mdash; Św. Mikołaja 56/57&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Καφές
&lt;ul&gt;
&lt;li&gt;Artzat Cafe &amp;mdash; Malarska 30&lt;/li&gt;
&lt;li&gt;Barbar &amp;mdash; Świdnicka 8B&lt;/li&gt;
&lt;li&gt;Cafe Berg &amp;mdash; Skargi &amp;amp; Podwale&lt;/li&gt;
&lt;li&gt;Czekoladziarnia &amp;mdash; Więzienna &amp;amp; Igielna&lt;/li&gt;
&lt;li&gt;FC Caffe &amp;mdash; Kuźnicza 30&lt;/li&gt;
&lt;li&gt;Gałązcafe w Ossolineum &amp;mdash; Sztabowa 89&lt;/li&gt;
&lt;li&gt;Herbaciarnia Czajownia &amp;mdash; Białoskórnicza 7&lt;/li&gt;
&lt;li&gt;Herbaciarnia K2 &amp;mdash; Kiełbaśnicza 2&lt;/li&gt;
&lt;li&gt;Herbaciarnia Targowa &amp;mdash; Piaskowa 17&lt;/li&gt;
&lt;li&gt;Kawiarenka św. Jadwigi &amp;mdash; Św. Marcina 12&lt;/li&gt;
&lt;li&gt;Klubokawiarnia Mleczarnia &amp;mdash; Włodkowica 5&lt;/li&gt;
&lt;li&gt;Księgarnia Hiszpańska &amp;mdash; Szajnochy 5&lt;/li&gt;
&lt;li&gt;Paloma &amp;mdash; pl. Solny 8/9&lt;/li&gt;
&lt;li&gt;Tajne Komplety &amp;mdash; Przejście Garncarskie 2&lt;/li&gt;
&lt;li&gt;Vinyl Cafè &amp;mdash; Kotlarska 35/36&lt;/li&gt;
&lt;li&gt;WUWA Cafe &amp;mdash; Tramwajowa 2&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Φαγητό
&lt;ul&gt;
&lt;li&gt;Bar Jak u Mamy &amp;mdash; Św. Wincentego 11&lt;/li&gt;
&lt;li&gt;Bar Karmazym &amp;mdash; Hala Targowa&lt;/li&gt;
&lt;li&gt;Bar Mleczny Miś &amp;mdash; Kuźnicza 48&lt;/li&gt;
&lt;li&gt;Bar Witek &amp;mdash; Stwosza 40/1a&lt;/li&gt;
&lt;li&gt;Bistro Nadodrze &amp;mdash; Staszica 50&lt;/li&gt;
&lt;li&gt;Brusco &amp;mdash; pl. Teatralny 1&lt;/li&gt;
&lt;li&gt;Chatka przy Jatkach &amp;mdash; Odrzańska 7&lt;/li&gt;
&lt;li&gt;FC Naleśniki &amp;mdash; Kuźnicza 63&lt;/li&gt;
&lt;li&gt;Konspira &amp;mdash; pl. Solny 11&lt;/li&gt;
&lt;li&gt;Kotlet Schabowy &amp;mdash; Komuny Paryskiej 10&lt;/li&gt;
&lt;li&gt;Mamine Smaki &amp;mdash; Pomorska 27&lt;/li&gt;
&lt;li&gt;Mały Bar u Babci Jadzi &amp;mdash; Kołłątaja 27/28&lt;/li&gt;
&lt;li&gt;Meatologia &amp;mdash; Włodkowica 27&lt;/li&gt;
&lt;li&gt;Pizza Pany &amp;mdash; Drobnera 1a&lt;/li&gt;
&lt;li&gt;Pizza nel Parco &amp;mdash; Różyckiego 1&lt;/li&gt;
&lt;li&gt;Plackarnia Arena &amp;mdash; Komandorska 66&lt;/li&gt;
&lt;li&gt;Setka &amp;mdash; Kazimierza Wielkiego 50&lt;/li&gt;
&lt;li&gt;Smak na Tak &amp;mdash; Pasaż Grunwaldzki&lt;/li&gt;
&lt;li&gt;Solleim &amp;mdash; Św. Antoniego 16&lt;/li&gt;
&lt;li&gt;Stary Młyn &amp;mdash; Rynek 29&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Φύση
&lt;ul&gt;
&lt;li&gt;Las Rakowiecki&lt;/li&gt;
&lt;li&gt;Las Rędziński&lt;/li&gt;
&lt;li&gt;Ogród Botaniczny Uniwersytetu Wrocławskiego&lt;/li&gt;
&lt;li&gt;Park Południowy&lt;/li&gt;
&lt;li&gt;Park Stanisława Tołpy&lt;/li&gt;
&lt;li&gt;Park Szczytnicki&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Μουσεία
&lt;ul&gt;
&lt;li&gt;Muzeum Archeologiczne &amp;mdash; Cieszyńskiego 9&lt;/li&gt;
&lt;li&gt;Muzeum Etnograficzne &amp;mdash; Traugutta 111/113&lt;/li&gt;
&lt;li&gt;Muzeum Narodowe &amp;mdash; Powstańców Warszawy 5&lt;/li&gt;
&lt;li&gt;Uniwersytet Wrocławski &amp;mdash; pl. Uniwersytecki 1&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ossolineum.pl/&#34;&gt;Ossolineum&lt;/a&gt; &amp;mdash; Szewska 37&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Βιβλιοθήκες
&lt;ul&gt;
&lt;li&gt;Biblioteka Uniwersytecka &amp;mdash; Curie 12&lt;/li&gt;
&lt;li&gt;Dolnośląska Biblioteka Publiczna &amp;mdash; Rynek 58&lt;/li&gt;
&lt;li&gt;Księgarnia Hiszpańska &amp;mdash; Szajnochy 5&lt;/li&gt;
&lt;li&gt;Mediateka nr. 58 &amp;mdash; pl. Teatralny 5&lt;/li&gt;
&lt;li&gt;Tajne Komplety &amp;mdash; Garncarskie 2&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Εκκλησίες
&lt;ul&gt;
&lt;li&gt;Katedra Prawosławna pw. Narodzenia Przenajświętszej Bogarodzicy &amp;mdash; Św. Mikołaja 40&lt;/li&gt;
&lt;li&gt;Katedra św. Jana Chrzciciela &amp;mdash; pl. Katedralny 18&lt;/li&gt;
&lt;li&gt;Katedra św. Marii Magdaleny &amp;mdash; Szewska 10&lt;/li&gt;
&lt;li&gt;Kościół Garnizonowy Bazylika Mniejsza pw. Św. Elżbiety we Wrocławiu &amp;mdash; Św. Elżbiety 1/2&lt;/li&gt;
&lt;li&gt;Kościół pw. św. Antoniego z Padwy &amp;mdash; Św. Antoniego 30&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Μουσική
&lt;ul&gt;
&lt;li&gt;Liverpool &amp;mdash; Świdnicka 37&lt;/li&gt;
&lt;li&gt;Nietota &amp;mdash; Kazimierza Wielkiego 50&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cka2.pl/&#34;&gt;A2&lt;/a&gt; &amp;mdash; Góralska 5&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.nfm.wroclaw.pl/en/&#34;&gt;Narodowe Forum Muzyki&lt;/a&gt; &amp;mdash; pl. Wolności 1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Jam sessions
&lt;ul&gt;
&lt;li&gt;Klub Łącznik &amp;mdash; Tramwajowa 1-3&lt;/li&gt;
&lt;li&gt;Nigdzie Nic z Nikim &amp;mdash; Wita Stwosza 12/2B&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://alive.wroclaw.pl/&#34;&gt;Alive&lt;/a&gt; &amp;mdash; Kolejowa 12&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://vertigojazz.pl/en/events&#34;&gt;Vertigo Jazz Club&lt;/a&gt; &amp;mdash; Oławska 13&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Αγορές
&lt;ul&gt;
&lt;li&gt;Drink Hala &amp;mdash; Rydygiera 15/17&lt;/li&gt;
&lt;li&gt;EPI &amp;mdash; Komandorska 21&lt;/li&gt;
&lt;li&gt;Galeria Dominikańska &amp;mdash; pl. Dominikański 3&lt;/li&gt;
&lt;li&gt;Hala Targowa &amp;mdash; Piaskowa 17&lt;/li&gt;
&lt;li&gt;Magnolia &amp;mdash; Legnicka 58&lt;/li&gt;
&lt;li&gt;Pasaż Grunwaldzki &amp;mdash; pl. Grunwaldzki 22&lt;/li&gt;
&lt;li&gt;Plac Targowy &amp;ldquo;Świebodzki&amp;rdquo; &amp;mdash; Robotnicza 2&lt;/li&gt;
&lt;li&gt;Second Hand From London &amp;mdash; Podwale 37/38&lt;/li&gt;
&lt;li&gt;Sky Tower &amp;mdash; Powstańców Śląskich 95&lt;/li&gt;
&lt;li&gt;Tradycja i Jakość&lt;/li&gt;
&lt;li&gt;Wroclavia &amp;mdash; Sucha 1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Διαμονή
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.booking.com/hotel/pl/academus-pub-apartments-wroclaw.html&#34;&gt;Academus&lt;/a&gt; &amp;mdash; Kiełbaśnicza 23&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.booking.com/hotel/pl/rynek-cozy-retro-apartment-near-to-main-square.html&#34;&gt;Ruska 50/3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.booking.com/hotel/pl/antoniego-old-town-apartment.html&#34;&gt;Świętego Antoniego 12&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Μετακίνηση
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://kolejedolnoslaskie.pl/&#34;&gt;Koleje Dolnośląskie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://czynaczas.pl/wroclaw/rozklad-jazdy&#34;&gt;Rozkład jazdy MPK Wrocław&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://airport.wroclaw.pl/&#34;&gt;Wrocław Airport&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://wroclawskirower.pl/&#34;&gt;Wrocławski Rower Miejski&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Δραστηριότητες
&lt;ul&gt;
&lt;li&gt;Basen &amp;mdash; Teatralna 10/12&lt;/li&gt;
&lt;li&gt;Bungee Wrocław &amp;mdash; Wróblewskiego 9&lt;/li&gt;
&lt;li&gt;Kino Nowe Horyzonty &amp;mdash; Kazimierza Wielkiego 19a/21&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.lotymarzen.pl/&#34;&gt;Loty Marzeń - Symulator B737&lt;/a&gt; &amp;mdash; Sky Tower&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.symulatorpociagu.pl/&#34;&gt;Symulator Pociągu&lt;/a&gt; &amp;mdash; Boczna 12&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://war-zone.com.pl/&#34;&gt;WAR ZONE&lt;/a&gt; &amp;mdash; Sztabowa 32&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Εκδηλώσεις
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.zamek.wroclaw.pl&#34;&gt;OPT Zamek&lt;/a&gt; &amp;mdash; pl. Świętojański 1&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.wroclaw.pl/go/&#34;&gt;https://www.wroclaw.pl/go/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;łódź&#34;&gt;Łódź&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/travel/lodz.webp&#34; alt=&#34;lodz&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Μπαρς
&lt;ul&gt;
&lt;li&gt;6 Dzielnica &amp;mdash; Piotrkowska 102&lt;/li&gt;
&lt;li&gt;Biblioteka &amp;mdash; Struga 7&lt;/li&gt;
&lt;li&gt;Cideria Piotrkowska &amp;mdash; Piotrkowska 79&lt;/li&gt;
&lt;li&gt;Doki Gastrobar &amp;mdash; Roosevelta 12C&lt;/li&gt;
&lt;li&gt;Fabryka Biedermanna &amp;mdash; Kilińskiego 3&lt;/li&gt;
&lt;li&gt;Hell’s Kitchen &amp;mdash; Lumumby 10&lt;/li&gt;
&lt;li&gt;Ignorantka &amp;mdash; Legionów 22&lt;/li&gt;
&lt;li&gt;Indeks &amp;mdash; Stefanowskiego 17&lt;/li&gt;
&lt;li&gt;Kij &amp;mdash; Jaracza 45&lt;/li&gt;
&lt;li&gt;Niebostan &amp;mdash; Piotrkowska 17&lt;/li&gt;
&lt;li&gt;OFF Piotrkowska &amp;mdash; Piotrkowska 138/140&lt;/li&gt;
&lt;li&gt;P29 &amp;mdash; Piotrkowska 29&lt;/li&gt;
&lt;li&gt;Pijana Wiśnia &amp;mdash; Piotrkowska 85&lt;/li&gt;
&lt;li&gt;Piotrkowska 217&lt;/li&gt;
&lt;li&gt;Piwoteka &amp;mdash; Traugutta 4&lt;/li&gt;
&lt;li&gt;Przechowalnia &amp;mdash; 6 Sierpnia 5&lt;/li&gt;
&lt;li&gt;Spaleni Słońcem &amp;mdash; Piotrkowska 138/140&lt;/li&gt;
&lt;li&gt;The Eclipse Pub &amp;mdash; Piotrkowska 80&lt;/li&gt;
&lt;li&gt;Willa Klubowiarnia &amp;mdash; Żeromskiego 117&lt;/li&gt;
&lt;li&gt;Winni &amp;mdash; Piotrkowska 93&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Καφές
&lt;ul&gt;
&lt;li&gt;6 Dzielnica &amp;mdash; Piotrkowska 102&lt;/li&gt;
&lt;li&gt;Brick Coffee &amp;mdash; Piotrkowska 63&lt;/li&gt;
&lt;li&gt;Café Verte &amp;mdash; Piotrkowska 113&lt;/li&gt;
&lt;li&gt;Colour Café &amp;mdash; Piotrkowska 132&lt;/li&gt;
&lt;li&gt;Dzień Dobry Café &amp;mdash; Narutowicza 57&lt;/li&gt;
&lt;li&gt;Jaga Cafe &amp;mdash; Pomorska 145&lt;/li&gt;
&lt;li&gt;Niebieskie Migdały &amp;mdash; Sienkiewicza 40&lt;/li&gt;
&lt;li&gt;Niebostan &amp;mdash; Piotrkowska 17&lt;/li&gt;
&lt;li&gt;Współ Winni &amp;mdash; Moniuszki 5&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Φαγητό
&lt;ul&gt;
&lt;li&gt;Angelo &amp;mdash; 6 Sierpnia 1/3&lt;/li&gt;
&lt;li&gt;Beijing Taste &amp;mdash; Rewolucji 1905 roku 48A&lt;/li&gt;
&lt;li&gt;Bobby Burger &amp;mdash; Piotrkowska 59&lt;/li&gt;
&lt;li&gt;Brednia &amp;mdash; Piotrkowska 86&lt;/li&gt;
&lt;li&gt;Dzielna 43 &amp;mdash; Narutowicza 43&lt;/li&gt;
&lt;li&gt;Focus Hotel (πρωινό μέχρι τις 10:00) &amp;mdash; Łąkowa 23&lt;/li&gt;
&lt;li&gt;Good Morning Vietnam &amp;mdash; Piotrkowska 138/140&lt;/li&gt;
&lt;li&gt;Manekin &amp;mdash; 6 Sierpnia 1&lt;/li&gt;
&lt;li&gt;NieWinni &amp;mdash; Tymienieckiego 3&lt;/li&gt;
&lt;li&gt;Pierogarnia Jak Babcię Kocham &amp;mdash; Kusocińskiego 114A&lt;/li&gt;
&lt;li&gt;Restauracja Roma &amp;mdash; Piotrkowska 122&lt;/li&gt;
&lt;li&gt;Stary Młyn &amp;mdash; Piotrkowska 37&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Φύση
&lt;ul&gt;
&lt;li&gt;Arturówek&lt;/li&gt;
&lt;li&gt;Młynek&lt;/li&gt;
&lt;li&gt;Ogród Botaniczny&lt;/li&gt;
&lt;li&gt;Park Helenów&lt;/li&gt;
&lt;li&gt;Park Poniatowskiego&lt;/li&gt;
&lt;li&gt;Park Staromiejski&lt;/li&gt;
&lt;li&gt;Park im. Adama Mickiewicza&lt;/li&gt;
&lt;li&gt;Park na Zdrowie&lt;/li&gt;
&lt;li&gt;Park Źródliska&lt;/li&gt;
&lt;li&gt;Skrzywana&lt;/li&gt;
&lt;li&gt;Stawy Jana&lt;/li&gt;
&lt;li&gt;Uroczysko Lublinek&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Μουσεία
&lt;ul&gt;
&lt;li&gt;Herbst Palace Museum &amp;mdash; Przędzalniana 72&lt;/li&gt;
&lt;li&gt;Muzeum Archeologiczne i Etnograficzne &amp;mdash; pl. Wolności&lt;/li&gt;
&lt;li&gt;Muzeum Kanału “Dętka” &amp;mdash; pl. Wolności&lt;/li&gt;
&lt;li&gt;Muzeum Kinematografii w Łodzi &amp;mdash; pl. Zwycięstwa 1&lt;/li&gt;
&lt;li&gt;Muzeum Komunikacji Miejskiej w Łodzi &amp;mdash; Wierzbowa 51&lt;/li&gt;
&lt;li&gt;Muzeum Miasta Łodzi &amp;mdash; Ogrodowa 15&lt;/li&gt;
&lt;li&gt;Łódź Ghetto &amp;mdash; Pamięci Ofiar Litzmannstadt Getto&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Βιβλιοθήκες
&lt;ul&gt;
&lt;li&gt;Biblioteka UŁ &amp;mdash; Matejki 32/38&lt;/li&gt;
&lt;li&gt;Mediateka MEMO &amp;mdash; Stanisława Moniuszki 5&lt;/li&gt;
&lt;li&gt;Wojewódzka Biblioteka &amp;mdash; Gdańska 100/102&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Μετακίνηση
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://czynaczas.pl/lodz/rozklad-jazdy&#34;&gt;Rozkład jazdy MPK Łódź&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://lka.lodzkie.pl/strona-glowna/&#34;&gt;ŁKA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://lodzkirowerpubliczny.pl/&#34;&gt;Łódzki Rower Publiczny&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Διαμονή
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.booking.com/hotel/pl/rent-apart-fabryczna.pl.html&#34;&gt;Book Apart Fabryczna&lt;/a&gt; &amp;mdash; Juliana Tuwima 40&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.focushotels.pl/focus-hotel-lodz&#34;&gt;Focus Hotel&lt;/a&gt; &amp;mdash; Łąkowa 23&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Άλλα
&lt;ul&gt;
&lt;li&gt;Bilard &amp;mdash; Narutowicza 7&lt;/li&gt;
&lt;li&gt;EC1 &amp;mdash; Targowa 1/3&lt;/li&gt;
&lt;li&gt;Księży Młyn&lt;/li&gt;
&lt;li&gt;Manufaktura &amp;mdash; Drewnowska 58&lt;/li&gt;
&lt;li&gt;Ogrody Geyera &amp;mdash; Piotrkowska 293/305&lt;/li&gt;
&lt;li&gt;Polówka (καλοκαιρινό υπαίθριο φεστιβάλ κινηματογράφου)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;kraków&#34;&gt;Kraków&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/travel/krakow.webp&#34; alt=&#34;krakow&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Διαμονή
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://4wings.hotelsofkrakow.com/&#34;&gt;4Wings Apartments&lt;/a&gt; &amp;mdash; Starowislna 4&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.l5apartamenty.pl/&#34;&gt;L5 Apartamenty&lt;/a&gt; &amp;mdash; Loretańska 5&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Μουσεία
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://muzeumkrakowa.pl/&#34;&gt;Muzeum Krakowa&lt;/a&gt; &amp;mdash; Rynek Główny 35&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;gdańsk-gdynia-sopot&#34;&gt;Gdańsk, Gdynia, Sopot&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/travel/gdansk.webp&#34; alt=&#34;gdansk&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Διαμονή
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.booking.com/hotel/pl/apartament-rzeznicka-old-town-gdansk.html&#34;&gt;Apartament Rzeźnicka Old Town&lt;/a&gt; &amp;mdash; Rzeźnicka 2D, Gdańsk&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Φαγητό
&lt;ul&gt;
&lt;li&gt;San Marco &amp;mdash; Długa 4, Gdańsk&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;poznań&#34;&gt;Poznań&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/travel/poznan.webp&#34; alt=&#34;poznan&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Διαμονή
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://explorer-hostel.hotels-poznan.com/en/&#34;&gt;Explorer Hostel&lt;/a&gt; &amp;mdash; Wszystkich Świętych 6&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Καφές
&lt;ul&gt;
&lt;li&gt;Da Vinci &amp;mdash; pl. Wolności 10&lt;/li&gt;
&lt;li&gt;Panta Rhei &amp;mdash; Wodna 5&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;warszawa&#34;&gt;Warszawa&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/travel/warsaw.webp&#34; alt=&#34;warsaw&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Διαμονή
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.gromada.pl/hotel-warszawa-centrum/en/&#34;&gt;Hotel Gromada&lt;/a&gt; &amp;mdash; pl. Powstańców Warszawy 2&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.booking.com/hotel/pl/mazowiecki-wow.pl.html&#34;&gt;Hotel Mazowiecki WOW&lt;/a&gt; &amp;mdash; Mazowiecka 10&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.motel-one.com/en/hotels/warsaw/hotel-warsaw-chopin/&#34;&gt;Motel One Warsaw Chopin&lt;/a&gt; &amp;mdash; Tamka 38&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.booking.com/hotel/pl/top-ten-house-marszalkowska-iii.pl.html&#34;&gt;Top Ten House Marszałkowska III&lt;/a&gt; &amp;mdash; Marszałkowska 84/92&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Φαγητό
&lt;ul&gt;
&lt;li&gt;Kura Buffalo Wings&lt;/li&gt;
&lt;li&gt;Zapiecek&lt;/li&gt;
&lt;li&gt;Karmnik &amp;mdash; Piwna 4&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Μουσεία
&lt;ul&gt;
&lt;li&gt;Muzeum Powstania Warszawskiego &amp;mdash; Grzybowska 79&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;sobótka&#34;&gt;Sobótka&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/travel/sleza.webp&#34; alt=&#34;sleza&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.sleza.sobotka.pl/&#34;&gt;Πεζοπορία&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://muzeum.sobotka.pl/&#34;&gt;Muzeum Ślężańskie&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;szklarska-poręba&#34;&gt;Szklarska Poręba&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/travel/szklarska.webp&#34; alt=&#34;szklarska&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Φαγητό
&lt;ul&gt;
&lt;li&gt;Karczma Stary Winkiel &amp;mdash; Jedności Narodowej 16&lt;/li&gt;
&lt;li&gt;Piekarnia Górska &amp;mdash; Jedności Narodowej 10&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Διαμονή
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.booking.com/hotel/pl/willa-pod-szrenica.html&#34;&gt;Willa pod Szrenicą&lt;/a&gt; &amp;mdash; Okrzei 4&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;toruń&#34;&gt;Toruń&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/travel/torun.webp&#34; alt=&#34;torun&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;wieliczka&#34;&gt;Wieliczka&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/travel/wieliczka.webp&#34; alt=&#34;wieliczka&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.wieliczka-saltmine.com&#34;&gt;Αλατορυχεία&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;oleśnica&#34;&gt;Oleśnica&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/travel/olesnica.webp&#34; alt=&#34;olesnica&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Zamek Książęcy &amp;mdash; Zamkowa 4&lt;/li&gt;
&lt;li&gt;Εκκλησίες.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;zgorzelec-görlitz&#34;&gt;Zgorzelec-Görlitz&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/travel/zgorzelec.webp&#34; alt=&#34;zgorzelec&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;tomaszów-mazowiecki&#34;&gt;Tomaszów Mazowiecki&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/travel/tomaszow.webp&#34; alt=&#34;tomaszow&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Zalew Sulejowski (βλέπε παραπάνω φωτογραφία)&lt;/li&gt;
&lt;li&gt;Niebieskie Źródła&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;łowicz&#34;&gt;Łowicz&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://margiolis.net/files/travel/lowicz.webp&#34; alt=&#34;lowicz&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://muzeumlowicz.pl/&#34;&gt;Εθνογραφικό μουσείο&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;oświęcim-auschwitz&#34;&gt;Oświęcim (Auschwitz)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.auschwitz.org/en/&#34;&gt;Στρατόπεδα συγκέντρωσης Auschwitz-Birkenau&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;jelenia-góra&#34;&gt;Jelenia Góra&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Διαμονή
&lt;ul&gt;
&lt;li&gt;Studio Annabel, Konopnickiej 7.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;karpacz&#34;&gt;Karpacz&lt;/h2&gt;
&lt;p&gt;&amp;hellip;&lt;/p&gt;
</description>
</item>


</channel>
</rss>
