<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ben Mezger</title><link>https://seds.nl/</link><description>Recent content on Ben Mezger</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 27 Mar 2026 18:13:17 +0100</lastBuildDate><atom:link href="https://seds.nl/index.xml" rel="self" type="application/rss+xml"/><item><title>Maintaining a robust CV</title><link>https://seds.nl/notes/maintaining_a_robust_cv/</link><pubDate>Thu, 26 Mar 2026 17:52:00 +0100</pubDate><guid>https://seds.nl/notes/maintaining_a_robust_cv/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/reproducible_orgmode_cv_template/">A reproducible Org-Mode CV template&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>I&amp;rsquo;ve been investing in having a well structured CV for some time now.
Maintaining a CV is hard, and you have to do it well, since this is your entry
ticket for your first interview.&lt;/p>
&lt;p>It doesn&amp;rsquo;t matter who you are, if your CV is badly written and unstructured, you
are unlikely to receive that first call with the recruiter. It&amp;rsquo;s even harder
nowadays due to AI. A lot of recruiters are using AI to triage many CVs they
receive, so you have to make sure you pass through this automated triage, that
means having a parsable and well linked content is important.&lt;/p></description></item><item><title>A reproducible Org-Mode CV template</title><link>https://seds.nl/notes/reproducible_orgmode_cv_template/</link><pubDate>Sun, 08 Feb 2026 14:27:00 +0100</pubDate><guid>https://seds.nl/notes/reproducible_orgmode_cv_template/</guid><description>&lt;blockquote class="book-hint info">
&lt;p>&lt;em>I spent the weekend improving my Org-mode/LaTeX CV template and decided it was&lt;/em>
&lt;em>worth sharing publicly. Its modular, searchable, and designed for&lt;/em>
&lt;em>reproducibility. I&amp;rsquo;ve made it easy to maintain and updated the structure to be&lt;/em>
&lt;em>as ATS-friendly as possible.&lt;/em>&lt;/p>
&lt;/blockquote>
&lt;blockquote class="book-hint caution">
&lt;p>&lt;em>I used AI to help document this. I tend to spend more time building than
writing about what I built, so it was useful to have something that could map
the full picture.&lt;/em>&lt;/p></description></item><item><title>System Design - Databases, data models and indexing</title><link>https://seds.nl/notes/system_design_databases_data_models_and_indexing/</link><pubDate>Tue, 23 Dec 2025 16:09:00 +0100</pubDate><guid>https://seds.nl/notes/system_design_databases_data_models_and_indexing/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/system_design_network/">System Design - Network&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/system_design_raid_and_storage/">System Design - RAID and Storage&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/system_design_cap_theorem_acid_base_and_pacelc/">System Design - CAP theorem, ACID, BASE and PACELC&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="database">Database&lt;a class="anchor" href="#database">#&lt;/a>&lt;/h2>
&lt;h3 id="what-they-are">What they are&lt;a class="anchor" href="#what-they-are">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Abstracted organization of data&lt;/li>
&lt;li>Software layer between the client and the storage&lt;/li>
&lt;li>Considerations in a distributed system&lt;/li>
&lt;li>Replication, Geo-Distribution and consistency&lt;/li>
&lt;li>Implements some of the BASE and/or ACID models&lt;/li>
&lt;li>Additional complexity due to architectural decisions&lt;/li>
&lt;li>Different types of databases
&lt;ul>
&lt;li>Databases NewSQL&lt;/li>
&lt;li>Non-relational databases&lt;/li>
&lt;li>Relational databases&lt;/li>
&lt;li>Timeseries databases&lt;/li>
&lt;li>Memory databases&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="relational-databases--sql">Relational Databases (SQL)&lt;a class="anchor" href="#relational-databases--sql">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Tables, Tuples and columns&lt;/li>
&lt;li>Rigid and declarative schema
&lt;ul>
&lt;li>We define all restrictions, types, cohesion rules, foreign key constraints,
etc.&lt;/li>
&lt;li>Column id(int) does not allow a string, for example&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Strong consistency&lt;/li>
&lt;li>ACID&lt;/li>
&lt;li>Strong reference integrity&lt;/li>
&lt;li>Transaction model&lt;/li>
&lt;li>Focuses on integrity and durability&lt;/li>
&lt;li>Attributes that they can relate to each other (FKs, etc)&lt;/li>
&lt;li>Examples are:
&lt;ul>
&lt;li>PostgreSQL&lt;/li>
&lt;li>MySQL / MariaDB&lt;/li>
&lt;li>Oracle&lt;/li>
&lt;li>SQLServer&lt;/li>
&lt;li>Etc.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="non-relational-databases--nosql">Non Relational Databases (NoSQL)&lt;a class="anchor" href="#non-relational-databases--nosql">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Flexible schemas&lt;/li>
&lt;li>Eventual consistency&lt;/li>
&lt;li>Different data formats&lt;/li>
&lt;li>Documents, key-value, graphs, column&lt;/li>
&lt;li>Optimized horizontal scaling&lt;/li>
&lt;li>Generally higher write performance, geo distribution, etc. (in exchange of not
so much consistency)&lt;/li>
&lt;li>No guarantee of integrity and atomicity&lt;/li>
&lt;li>Data semi-structured&lt;/li>
&lt;li>Examples are:
&lt;ul>
&lt;li>MongoDB&lt;/li>
&lt;li>MemcachedDB&lt;/li>
&lt;li>Cassandra&lt;/li>
&lt;li>Redis&lt;/li>
&lt;li>Elasticsearch&lt;/li>
&lt;li>Etc.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>One of the characteristics is to prevent costly joins
&lt;ul>
&lt;li>Non relational = not relation between the data&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>For example, in MongoDB, we can have relationship between the collections, but
it is not recommended, given we have to make many queries to relate them&lt;/li>
&lt;li>If we need to relate entities, use a related database&lt;/li>
&lt;/ul>
&lt;h3 id="newsql-databases">NewSQL Databases&lt;a class="anchor" href="#newsql-databases">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>ACID + Horizontal scalability&lt;/li>
&lt;li>Sharding and replication&lt;/li>
&lt;li>RAFT/Paxos&lt;/li>
&lt;li>New proposal that focuses on resolving the trade-offs of SQL and NoSQL
regarding strong consistency, performance and horizontal scalability&lt;/li>
&lt;li>Seek to provide some reliability in terms of transactions&lt;/li>
&lt;li>Not yet super mature&lt;/li>
&lt;li>Examples are:
&lt;ul>
&lt;li>CockroachDB&lt;/li>
&lt;li>Google Cloud Spanner&lt;/li>
&lt;li>MemSQL&lt;/li>
&lt;li>VoltDB&lt;/li>
&lt;li>AltiBase&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="in-memory-database">In-Memory Database&lt;a class="anchor" href="#in-memory-database">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Uses volatile memory &amp;ndash; non-persistent in disk&lt;/li>
&lt;li>Latency of nanoseconds in RAM&lt;/li>
&lt;li>Key-value model&lt;/li>
&lt;li>Non structured&lt;/li>
&lt;li>Volatile and performance&lt;/li>
&lt;li>Scales through consistent hash&lt;/li>
&lt;li>Layer of cache and intensive reads&lt;/li>
&lt;li>Data needs to be reconstructible
&lt;ul>
&lt;li>Focuses on non-durable data&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Useful for data that doesn&amp;rsquo;t change much, caching, etc&lt;/li>
&lt;li>Trade-off of not having the most updated value&lt;/li>
&lt;li>Important data is generally not stored in these databases&lt;/li>
&lt;li>Examples are:
&lt;ul>
&lt;li>MemcachedDB&lt;/li>
&lt;li>Redis&lt;/li>
&lt;li>Valkey&lt;/li>
&lt;li>Apache Ignite&lt;/li>
&lt;li>Aerospike&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="time-series-databases--tsdb">Time-Series Databases (TSDB)&lt;a class="anchor" href="#time-series-databases--tsdb">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Append Only
&lt;ul>
&lt;li>Generally we do not update data&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Temporal indexing&lt;/li>
&lt;li>High ingestion&lt;/li>
&lt;li>Analytical queries&lt;/li>
&lt;li>Used in metrics and logs&lt;/li>
&lt;li>Automatic expurge&lt;/li>
&lt;li>Supports high load of write operations&lt;/li>
&lt;li>Mathematical operations&lt;/li>
&lt;li>Sequential and segmented based on the collection time&lt;/li>
&lt;li>Examples are:
&lt;ul>
&lt;li>Timescale&lt;/li>
&lt;li>InfluxDB&lt;/li>
&lt;li>Prometheus&lt;/li>
&lt;li>VictoriaMetrics&lt;/li>
&lt;li>Graphite&lt;/li>
&lt;li>Grafana Mimir&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="levels-of-consistency">Levels of consistency&lt;a class="anchor" href="#levels-of-consistency">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>When discussing distributed systems, the choice of level of consistency of
data is an important factor&lt;/li>
&lt;li>Knowing when to choose eventual consistency or strong consistency can either
elevate the scalability of the system, as well as generate scalability
problems. Race-conditions problem, data loss, high-throughput reads/writes,
data durability, etc.&lt;/li>
&lt;li>Strong consistency vs Eventual consistency&lt;/li>
&lt;li>Impact in client experience&lt;/li>
&lt;li>Reliability vs performance&lt;/li>
&lt;li>Integrity vs Scalability&lt;/li>
&lt;li>Levels of integrity&lt;/li>
&lt;/ul>
&lt;h3 id="strong-consistency">Strong consistency&lt;a class="anchor" href="#strong-consistency">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Linearity&lt;/li>
&lt;li>Synchronous Quorum&lt;/li>
&lt;li>Paxos and Raft&lt;/li>
&lt;li>Write latency&lt;/li>
&lt;li>More reliability&lt;/li>
&lt;li>Atomicity and transactions&lt;/li>
&lt;li>Consistent state -&amp;gt; consistent state&lt;/li>
&lt;li>Flow of synchronous commits&lt;/li>
&lt;li>Critical and atomic operations&lt;/li>
&lt;li>Examples of databases are:
&lt;ul>
&lt;li>MySQL&lt;/li>
&lt;li>MariaDB&lt;/li>
&lt;li>PostgreSQL&lt;/li>
&lt;li>Oracle&lt;/li>
&lt;li>Cassandra (requires configuration)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="eventual-consistency">Eventual consistency&lt;a class="anchor" href="#eventual-consistency">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Asynchronous replication&lt;/li>
&lt;li>High availability&lt;/li>
&lt;li>Tolerance and partitions&lt;/li>
&lt;li>Strategies to resolve conflicts&lt;/li>
&lt;li>Last-Write-Wins, CRDT (Conflict-free Replicated Data Type)
&lt;ul>
&lt;li>The last version of the data, is the one that stays (generally based on a timestamp)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>High throughput and low latency&lt;/li>
&lt;li>Requires time to reflect data in all nodes&lt;/li>
&lt;li>Examples are:
&lt;ul>
&lt;li>ScyllaDB&lt;/li>
&lt;li>DynamoDB&lt;/li>
&lt;li>CouchDB&lt;/li>
&lt;li>MongoDB&lt;/li>
&lt;li>Elasticsearch&lt;/li>
&lt;li>Etc.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="data-models">Data Models&lt;a class="anchor" href="#data-models">#&lt;/a>&lt;/h2>
&lt;h3 id="tuple--row-oriented">Tuple (Row-Oriented)&lt;a class="anchor" href="#tuple--row-oriented">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>OLTP&lt;/li>
&lt;li>Row = tuple, where each item in the tuple corresponds to the column&lt;/li>
&lt;li>Cache of pages
&lt;ul>
&lt;li>Page size&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Low latency per row&lt;/li>
&lt;li>Groups attributes of the same entity physically in the same block&lt;/li>
&lt;li>We join different tables to query a particular data&lt;/li>
&lt;/ul>
&lt;h3 id="documents">Documents&lt;a class="anchor" href="#documents">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Flexible schemas&lt;/li>
&lt;li>Autonomous entities&lt;/li>
&lt;li>Not much rigid field verification&lt;/li>
&lt;li>JSON/BSON&lt;/li>
&lt;li>Inverted indexing&lt;/li>
&lt;li>Full-Text search&lt;/li>
&lt;li>Allows changing schema without complex migration&lt;/li>
&lt;li>No relationship such as Row-Oriented
&lt;ul>
&lt;li>Normally, the JSON contains all the needed data (i.e. single schema)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Examples of usage is to represent a product catalog, log aggregation, etc.&lt;/li>
&lt;/ul>
&lt;h3 id="column-oriented">Column-Oriented&lt;a class="anchor" href="#column-oriented">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Contigous columns
&lt;ul>
&lt;li>Instead of being row (such as SQL), where the whole row is stored in a
block, Column-Oriented is the same, but columns. So instead of a row such as
&lt;code>(Ben, 31, Amsterdam)&lt;/code> being sequentially stored, just the column is stored
near each other.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Compression&lt;/li>
&lt;li>Analytics, Big Data, Data Warehouse&lt;/li>
&lt;li>Helps analyse a large amount of the same data, such as optimized queries on
top of the same attribute&lt;/li>
&lt;li>Heavy Scans of specific values&lt;/li>
&lt;li>Examples of such DB:
&lt;ul>
&lt;li>ClickHouse&lt;/li>
&lt;li>Amazon Redshift&lt;/li>
&lt;li>Google BigQuery&lt;/li>
&lt;li>SnowFlake&lt;/li>
&lt;li>MariaDB ColumnStore&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Row-Oriented is useful when we need to retrieve the whole entity,
and Column-Oriented is useful for when we need to perform analytical or math
operation on top of the same attribute (column), regardless of the amount of
rows we have.&lt;/li>
&lt;/ul>
&lt;figure>&lt;img src="https://seds.nl/imgs/column-oriented-db.png">
&lt;/figure>

&lt;h3 id="wide-column">Wide-Column&lt;a class="anchor" href="#wide-column">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Family of column per row&lt;/li>
&lt;li>Flexible schema per row&lt;/li>
&lt;li>Each row can have its own set of columns&lt;/li>
&lt;li>Aggregated by family of column&lt;/li>
&lt;li>Efficient for data that varies&lt;/li>
&lt;li>Efficient for distributed data&lt;/li>
&lt;li>Eventual Consistency&lt;/li>
&lt;li>Supports atomicity and joins&lt;/li>
&lt;li>Examples:
&lt;ul>
&lt;li>Cassandra&lt;/li>
&lt;li>ScyllaDB&lt;/li>
&lt;li>HBase&lt;/li>
&lt;li>DynamoDB&lt;/li>
&lt;li>CosmosDB&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="key-value">Key-Value&lt;a class="anchor" href="#key-value">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Direct lookup&lt;/li>
&lt;li>Parity hashing&lt;/li>
&lt;li>Key (unique identifier)&lt;/li>
&lt;li>Value (unstructured)&lt;/li>
&lt;li>Strings, numbers, booleans, JSON and Blobs&lt;/li>
&lt;li>Easy to query and indexing&lt;/li>
&lt;li>Examples:
&lt;ul>
&lt;li>Redis&lt;/li>
&lt;li>Memcached&lt;/li>
&lt;li>Aerospike&lt;/li>
&lt;li>Etcd&lt;/li>
&lt;li>ZooKeeper&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="graphs">Graphs&lt;a class="anchor" href="#graphs">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Relationship of data is as important as the data itself&lt;/li>
&lt;li>Nodes (entity)&lt;/li>
&lt;li>Edges (relationship)&lt;/li>
&lt;li>Useful for recommendation feature&lt;/li>
&lt;li>Unstructured model&lt;/li>
&lt;li>Examples include:
&lt;ul>
&lt;li>Neo4j&lt;/li>
&lt;li>CosmosDB&lt;/li>
&lt;li>OrientDB&lt;/li>
&lt;li>ArangoDB&lt;/li>
&lt;li>Neptune&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="indexing">&lt;span class="org-todo todo TODO">TODO&lt;/span> Indexing&lt;a class="anchor" href="#indexing">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>The way the DB engine manages the storage and the indexing of that data, it
impacts the performance&lt;/li>
&lt;li>Without indexing, even for a simple query, it would have to scan the whole
database to find that data&lt;/li>
&lt;li>Indexing is how the DB stores and queries the data&lt;/li>
&lt;li>Concepts of: Page Size, Column Index, LSM-Tree, B-Tree, Hashing, Inverted
Index&lt;/li>
&lt;/ul>
&lt;h3 id="page-size">Page Size&lt;a class="anchor" href="#page-size">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Organized blocks of fixed size (4kb, 8kb, etc) &amp;ndash; configurable
&lt;ul>
&lt;li>If we store data, that is indexed by the date, we store each row
sequentially in a page, until we reach that page limit, then we proceed to
another page&lt;/li>
&lt;li>If we are indexing by date, these blocks will be stored near each other&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Block are rows (Tuple-Oriented) &amp;ndash; Generally SQL databases&lt;/li>
&lt;li>Large pages: reduces read I/O operations in large objects
&lt;ul>
&lt;li>If we have a large set of data, larger page sizes reduces the need of the
engine having to open and close different pages to read the data&lt;/li>
&lt;li>Increase the cost of data transfer&lt;/li>
&lt;li>Bad for simple queries, as we need to open a large page to query something
simple&lt;/li>
&lt;li>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Smaller pages: Lower reads in irrelevant data on simple queries
&lt;ul>
&lt;li>Increases I/O operations&lt;/li>
&lt;li>Minimizes opening large pages to query&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>For example, if we need to aggregate a lot of data in a table, larger pages
might be better, if our data has smaller entities, straightforward queries,
smaller pages might be better&lt;/li>
&lt;li>Databases that uses page sizes are:
&lt;ul>
&lt;li>MySQL&lt;/li>
&lt;li>PostgreSQL&lt;/li>
&lt;li>Oracle databases&lt;/li>
&lt;li>Apache Cassandra&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="column-base-indexing">Column-base Indexing&lt;a class="anchor" href="#column-base-indexing">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Contigous segments of columns&lt;/li>
&lt;li>Each column is stored in a segment&lt;/li>
&lt;li>Compressed through a lookup table&lt;/li>
&lt;li>High performance for aggregation&lt;/li>
&lt;li>Reduces I/O with compression&lt;/li>
&lt;li>Searches for specific attributes&lt;/li>
&lt;li>Analytics workflow&lt;/li>
&lt;li>Data compression is more efficient when we have less data diversity&lt;/li>
&lt;li>Examples are:
&lt;ul>
&lt;li>Amazon Redshift&lt;/li>
&lt;li>BigQuery&lt;/li>
&lt;li>SnowFlake&lt;/li>
&lt;li>DuckDB&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item><item><title>System Design - CAP theorem, ACID, BASE and PACELC</title><link>https://seds.nl/notes/system_design_cap_theorem_acid_base_and_pacelc/</link><pubDate>Mon, 22 Dec 2025 18:16:00 +0100</pubDate><guid>https://seds.nl/notes/system_design_cap_theorem_acid_base_and_pacelc/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/system_design_raid_and_storage/">System Design - RAID and Storage&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/system_design_network/">System Design - Network&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Notes on CAP theorem, ACID, BASE and PACELC regarding system design.&lt;/p>
&lt;h2 id="acid">ACID&lt;a class="anchor" href="#acid">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>Focuses on precision/data reliability&lt;/li>
&lt;li>Related to transactional models&lt;/li>
&lt;li>Atomicity, Consistency, Isolation, Durability&lt;/li>
&lt;li>Transactional databases
&lt;ul>
&lt;li>SQL Databases&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Atomic and reliable transactions&lt;/li>
&lt;li>Prioritization of transaction and commits&lt;/li>
&lt;li>Detriments performance and availability&lt;/li>
&lt;/ul>
&lt;h3 id="atomicity">Atomicity&lt;a class="anchor" href="#atomicity">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Ensures that each transaction is treated as an indivisible unit
&lt;ul>
&lt;li>&amp;ldquo;&lt;em>All or nothing&lt;/em>&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>All operations within the transaction should be completed
&lt;ul>
&lt;li>Otherwise, nothing will be applied&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Strong consistency&lt;/li>
&lt;li>Operations that require dependency
&lt;ul>
&lt;li>i.e: create an order row of a particular product, while decrementing from
the quantity of available product&lt;/li>
&lt;li>Financial market &amp;ndash; persist the credit while decrementing the users balance&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="consistency">Consistency&lt;a class="anchor" href="#consistency">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Guarantees that all transactions that happen, can only bring the current
consistent state, to another consistent state&lt;/li>
&lt;li>Ensures that we do not corrupt/invalidate the data &amp;ndash; data integrity&lt;/li>
&lt;li>Transaction validation
&lt;ul>
&lt;li>Respects that all data restrictions are maintained: Types, Foreign Keys,
Nullability, Triggers, etc.&lt;/li>
&lt;li>I.e. if we try to insert a string in a INT column&lt;/li>
&lt;li>If we try to insert a FK into a column, and that FK does not exist&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="isolation">Isolation&lt;a class="anchor" href="#isolation">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Operates independently and simultaneously of other transactions&lt;/li>
&lt;li>Transactions happening at the same moment do not interfere with others&lt;/li>
&lt;li>Dirty Reads
&lt;ul>
&lt;li>Reading data that was modified by another transaction which has not yet
been applied&lt;/li>
&lt;li>Say we have 2 transactions reading the same table. One transaction can not
continue, without the other transaction finishing.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Non-repeatable Reads
&lt;ul>
&lt;li>A transaction reads the same row twice and gets different values each time.
This happens because another transaction modified (and committed) that row in
between the two reads.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Phantom Reads
&lt;ul>
&lt;li>A transaction re-executes a query that returns a set of rows, and new rows
appear or existing rows disappear in the result. Because another transaction
inserted, deleted, or updated rows that match the query condition and
committed in between.&lt;/li>
&lt;li>Unlike non-repeatable reads (which involve the same row changing), phantom
reads involve changes to the set of rows.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="durability">Durability&lt;a class="anchor" href="#durability">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>After the confirmation of a particular operation, the data will not be lost
&lt;ul>
&lt;li>I.e.: after a &lt;code>COMMIT&lt;/code>, the data is guaranteed to be stored&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Confirmed, a transaction will exist permanently&lt;/li>
&lt;li>Persistence of data in a non-volatile source&lt;/li>
&lt;/ul>
&lt;h2 id="base-and-eventual-state">BASE and Eventual State&lt;a class="anchor" href="#base-and-eventual-state">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>Basic Availability, Soft-State and Eventual Consistency&lt;/li>
&lt;li>Focuses on flexibility&lt;/li>
&lt;li>Flexibility for more large-scale distributed systems&lt;/li>
&lt;li>Partially contrary to ACID&lt;/li>
&lt;li>Availability and fault-tolerance are a priority&lt;/li>
&lt;li>Systems that have to deal with eventual consistency&lt;/li>
&lt;li>Databases BASE are more towards performance and high availability, in exchange
to not being so consistent&lt;/li>
&lt;li>Mostly NoSQL databases
&lt;ul>
&lt;li>Mongo, Cassandra, etc.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="basic-availability">Basic Availability&lt;a class="anchor" href="#basic-availability">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Maximizes availability
&lt;ul>
&lt;li>Guarantees a total and uninterruptible availability, and offers mechanism to
work in a degraded or partial state&lt;/li>
&lt;li>I.e. If we have a database with three nodes, and one node fails, it can show
a partial number of data (not all)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Some data or functionality may not be available&lt;/li>
&lt;li>Allows replication and partitioning (sharding)&lt;/li>
&lt;li>Useful for large-scale and high-demand environments, where partial data is
accepted
&lt;ul>
&lt;li>Maintain consistent operation is more important than having an 100% up to
date version of the data&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="soft-state">Soft-State&lt;a class="anchor" href="#soft-state">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>System can change over time&lt;/li>
&lt;li>Data can expire (with a TTL) or updated by the database
&lt;ul>
&lt;li>I.e.: &lt;code>memcached&lt;/code>, &lt;code>Redis&lt;/code>, etc.&lt;/li>
&lt;li>Ideal for cache systems&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Volatile databases&lt;/li>
&lt;li>There is no guarantee that the system maintains consistency&lt;/li>
&lt;/ul>
&lt;h3 id="eventual-consistency">Eventual Consistency&lt;a class="anchor" href="#eventual-consistency">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Non confirmation in all nodes&lt;/li>
&lt;li>Write operation can happen in a single node and not be confirmed with the
other nodes&lt;/li>
&lt;li>Asynchronous replication
&lt;ul>
&lt;li>For example, on a write operation, it may write in a single node and
confirm, and later replicate this data to the other nodes&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>The data can be inconsistent in many nodes for a limited time&lt;/li>
&lt;li>Performance oriented&lt;/li>
&lt;li>High availability and scalable&lt;/li>
&lt;/ul>
&lt;h2 id="cap-theorem">CAP Theorem&lt;a class="anchor" href="#cap-theorem">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>3 principles: Consistency, Availability and Partition Tolerance&lt;/li>
&lt;li>Conceptual model&lt;/li>
&lt;li>Helps classify distributed and non-distributed databases&lt;/li>
&lt;li>Helps us consider scenarios and architectural choices that vary on
Consistency, Availability and Partition Tolerance&lt;/li>
&lt;li>Can choose 2 of the 3 principles (choose 2)
&lt;ul>
&lt;li>CA, CP, AP, etc.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>In a distributed system, we cannot achieve all three principles&lt;/li>
&lt;li>Offers a base for us to identify the limitations of any database&lt;/li>
&lt;/ul>
&lt;h3 id="components-of-cap--c-a-and-p">Components of CAP (&lt;code>C&lt;/code>, &lt;code>A&lt;/code> and &lt;code>P&lt;/code>)&lt;a class="anchor" href="#components-of-cap--c-a-and-p">#&lt;/a>&lt;/h3>
&lt;h4 id="consistency--c">Consistency (&lt;code>C&lt;/code>)&lt;a class="anchor" href="#consistency--c">#&lt;/a>&lt;/h4>
&lt;ul>
&lt;li>Guarantee that all the nodes of a database with distributed data present the
same data simultaneously&lt;/li>
&lt;li>Regardless of the node queried, all of them return the most recent version of
that data&lt;/li>
&lt;li>Atomicity&lt;/li>
&lt;li>Financial systems and hospital registration are examples of such systems that
require consistency&lt;/li>
&lt;li>Systems with &lt;code>Consistency&lt;/code> are ACID with strong consistency&lt;/li>
&lt;/ul>
&lt;h4 id="availability--a">Availability (&lt;code>A&lt;/code>)&lt;a class="anchor" href="#availability--a">#&lt;/a>&lt;/h4>
&lt;ul>
&lt;li>Ensures that any request to the system will get a response&lt;/li>
&lt;li>Regardless whether the data is updated in a node&lt;/li>
&lt;li>Presumes that the data returned can or cannot be the most recent. Even for
read or write operations.&lt;/li>
&lt;li>High performance, high volume and fast response time&lt;/li>
&lt;li>Detriments the guarantee of the actual data&lt;/li>
&lt;li>Mostly BASE systems&lt;/li>
&lt;/ul>
&lt;h4 id="partition-tolerance--p">Partition Tolerance (&lt;code>P&lt;/code>)&lt;a class="anchor" href="#partition-tolerance--p">#&lt;/a>&lt;/h4>
&lt;ul>
&lt;li>Systems can work when the replicas of my system is partitioned into two
different versions (not a table partition)&lt;/li>
&lt;li>Distributed database capacity of maintaining an operational state&lt;/li>
&lt;li>Even on a degraded state, it can offer system continuity&lt;/li>
&lt;li>Databases geo-distributed, social networking, log aggregators, brokers, queues
are all examples of such system&lt;/li>
&lt;li>More related to BASE systems&lt;/li>
&lt;/ul>
&lt;h3 id="combination">Combination&lt;a class="anchor" href="#combination">#&lt;/a>&lt;/h3>
&lt;h4 id="consistency-and-partition-tolerance--cp">Consistency and Partition Tolerance (&lt;code>CP&lt;/code>)&lt;a class="anchor" href="#consistency-and-partition-tolerance--cp">#&lt;/a>&lt;/h4>
&lt;ul>
&lt;li>Prioritizes the consistency and tolerance to partitioning&lt;/li>
&lt;li>Sacrifices availability&lt;/li>
&lt;li>Maintains consistency within all nodes that continue to operate in case of a
network failure or partition&lt;/li>
&lt;li>Allows disabling inconsistent nodes, makes them unavailable until consistency
is restored
&lt;ul>
&lt;li>&amp;ldquo;I rather be unavailable than inconsistent&amp;rdquo;&lt;/li>
&lt;li>&amp;ldquo;Inconsistency is non-negotiable&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Mix of BASE and ACID systems&lt;/li>
&lt;li>We need to prioritize data precision, approximate transactional atomicity&lt;/li>
&lt;li>Examples such as MongoDB, Cassandra, Couchbase, Etcd, Consul, etc.&lt;/li>
&lt;/ul>
&lt;h4 id="availability-and-partition-tolerance--ap">Availability and Partition Tolerance (&lt;code>AP&lt;/code>)&lt;a class="anchor" href="#availability-and-partition-tolerance--ap">#&lt;/a>&lt;/h4>
&lt;ul>
&lt;li>Prioritizes high availability and partition tolerance&lt;/li>
&lt;li>Sacrifices consistency&lt;/li>
&lt;li>Every node stays available for querying, independently of its up to date state&lt;/li>
&lt;li>During the synchronization process, all nodes will continue responding&lt;/li>
&lt;li>More important than maintaining consistency&lt;/li>
&lt;li>Examples of such databases are: DynamoDB, CouchDB, Cassandra (depending on its
configuration), SimpleDB, etc.&lt;/li>
&lt;li>Base systems&lt;/li>
&lt;/ul>
&lt;h4 id="consistency-and-availability--ca">Consistency and Availability (&lt;code>CA&lt;/code>)&lt;a class="anchor" href="#consistency-and-availability--ca">#&lt;/a>&lt;/h4>
&lt;ul>
&lt;li>Prioritizes consistency and availability&lt;/li>
&lt;li>Sensible to data partition&lt;/li>
&lt;li>In cases of a network failure or partition, the system can stay completely
inoperational&lt;/li>
&lt;li>Centralized databases, traditional SQL databases, MySQL/MariaDB, PostgreSQL,
Oracle, SQL Server, Redis Standalone, Memcached Standalone are all examples
of such database&lt;/li>
&lt;li>Leans towards ACID rather than BASE&lt;/li>
&lt;/ul>
&lt;h3 id="cap-model-today">CAP model today&lt;a class="anchor" href="#cap-model-today">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>2/3 is not extremely exclusive&lt;/li>
&lt;li>Excessive simplification is not real in modern technology&lt;/li>
&lt;li>Consistency and availability (on/off)
&lt;ul>
&lt;li>Layers of unavailability &amp;ndash; not on or off&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Level of Consistency is not binary
&lt;ul>
&lt;li>We can have different levels of consistency&lt;/li>
&lt;li>There are moments where we are 100% consistent, while moments we are not&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="pacelc-theorem">PACELC theorem&lt;a class="anchor" href="#pacelc-theorem">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>Complementary to CAP &amp;ndash; used as an &amp;ldquo;extension to CAP&amp;rdquo;&lt;/li>
&lt;li>Helps us identify gaps that CAP does not cover (partition is not always
available)&lt;/li>
&lt;li>Mainly related to AP, CP models&lt;/li>
&lt;li>Helps us understand the answer of:
&lt;ul>
&lt;li>&amp;ldquo;What should the system prioritize when it&amp;rsquo;s not functioning correctly?&amp;rdquo;&lt;/li>
&lt;li>&amp;ldquo;What should it prioritize when a partitioning happens between the nodes?&amp;rdquo;&lt;/li>
&lt;li>&amp;ldquo;Is it possible to operate with more than one level of consistency?&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>When a Partitioning of network (P) happens between the nodes of the system, it
is necessary to choose between Consistency (C) or Availability (A)&lt;/li>
&lt;li>If there is a partition (P), we should choose between Availability (A) and
Consistency (C)&lt;/li>
&lt;li>If there is no partition, we choose between Latency (L) and Consistency (C)&lt;/li>
&lt;/ul>
&lt;figure>&lt;img src="https://seds.nl/imgs/PACELC-theorem-diagram.jpg">
&lt;/figure>

&lt;ul>
&lt;li>Even on normal conditions, we have to make hard decisions&lt;/li>
&lt;li>More guarantee in exchange of response time&lt;/li>
&lt;li>Response time in exchange of Consistency&lt;/li>
&lt;li>Strong Consistency&lt;/li>
&lt;li>Eventual Consistency&lt;/li>
&lt;li>Both theorem are not mutually exclusive, but complementary to each other&lt;/li>
&lt;/ul>
&lt;h3 id="applying-pacelc">Applying PACELC&lt;a class="anchor" href="#applying-pacelc">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>PA/EL
&lt;ul>
&lt;li>&lt;strong>On Partition, Availability; Else, Latency&lt;/strong>&lt;/li>
&lt;li>Normal: Prioritizes latency instead of consistency&lt;/li>
&lt;li>In partition: Prioritizes availability instead of strong consistency&lt;/li>
&lt;li>Model of pure eventual consistency&lt;/li>
&lt;li>High write performance&lt;/li>
&lt;li>Accept versions different of the data&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>PC/EL
&lt;ul>
&lt;li>&lt;strong>On Partition, Consistency; Else, Latency&lt;/strong>&lt;/li>
&lt;li>Normal: Prioritizes latency and high throughput in exchange of consistency&lt;/li>
&lt;li>In partition: Prioritizes consistency&lt;/li>
&lt;li>Can be unavailable until the cluster recovers and it comes back at operating&lt;/li>
&lt;li>Minimum consistency during failures is non-negotiable&lt;/li>
&lt;li>Accepts eventual consistency, but only when all nodes are available&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>PA/EC
&lt;ul>
&lt;li>&lt;strong>On Partition, Availability; Else, Consistency&lt;/strong>&lt;/li>
&lt;li>Normal: Prioritizes strong Consistency&lt;/li>
&lt;li>In Partition: Prioritizes availability&lt;/li>
&lt;li>Assumes eventual consistency as a last resort&lt;/li>
&lt;li>CRDTs - Conflict-Free Replicated Data Types&lt;/li>
&lt;li>Hybrid context in microservices&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>PC/EC
&lt;ul>
&lt;li>&lt;strong>On Partition, Consistency; Else, Consistency&lt;/strong>&lt;/li>
&lt;li>Normal: Prioritizes consistency instead of latency&lt;/li>
&lt;li>In partitions: Prioritizes consistency instead of availability&lt;/li>
&lt;li>Conservative model of consistency&lt;/li>
&lt;li>Data precision is the most important&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item><item><title>System Design - RAID and Storage</title><link>https://seds.nl/notes/system_design_raid_and_storage/</link><pubDate>Sat, 20 Dec 2025 15:59:00 +0100</pubDate><guid>https://seds.nl/notes/system_design_raid_and_storage/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/system_design_network/">System Design - Network&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Notes on computer storage architecture regarding system design.&lt;/p>
&lt;h2 id="storage">Storage&lt;a class="anchor" href="#storage">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>Persisting data in a organized manner
&lt;ul>
&lt;li>Even on system failure&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Recovering and accessing when needed&lt;/li>
&lt;li>Long-term storage&lt;/li>
&lt;li>Security, performance, latency, scalability, redundancy, replication,
availability, etc.&lt;/li>
&lt;li>HDD, SSD, Network Systems, etc.
&lt;ul>
&lt;li>Where to store the data, depending on our use-case&lt;/li>
&lt;li>Best storage model for cases where we write a lot, or read a lot&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>We want to expand the size in case we reach the maximum capacity&lt;/li>
&lt;/ul>
&lt;h2 id="metrics-and-dimensions">Metrics and dimensions&lt;a class="anchor" href="#metrics-and-dimensions">#&lt;/a>&lt;/h2>
&lt;p>Some metrics can help guide us based on our requirements, which storage to
choose.&lt;/p></description></item><item><title>System Design - Network</title><link>https://seds.nl/notes/system_design_network/</link><pubDate>Sat, 20 Dec 2025 12:05:00 +0100</pubDate><guid>https://seds.nl/notes/system_design_network/</guid><description>&lt;p>Review of some computer networking concepts and architecture.&lt;/p>
&lt;h2 id="network-protocols">Network protocols&lt;a class="anchor" href="#network-protocols">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>Defines a communication pattern
&lt;ul>
&lt;li>How one or more system can communicate with each other&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Set of rules that define the format and sequence of messages
&lt;ul>
&lt;li>How they should be sent, received, structured.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Ensures correct interpretation between different systems&lt;/li>
&lt;li>Different protocol implementation, with different standards and rules.&lt;/li>
&lt;/ul>
&lt;h2 id="osi-model">OSI model&lt;a class="anchor" href="#osi-model">#&lt;/a>&lt;/h2>
&lt;p>Conceptual model of how these different protocols relate to each other. Works
like a map of where each functionality of these protocols lie.&lt;/p></description></item><item><title>My journey in managing online services</title><link>https://seds.nl/notes/my_journey_in_managing_online_services/</link><pubDate>Sun, 02 Feb 2025 20:22:00 +0100</pubDate><guid>https://seds.nl/notes/my_journey_in_managing_online_services/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/my-journey-in-managing-dotfiles/">My journey in managing dotfiles&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>As part of my journey to centralize and automate my computing life, one of my
annoyances is having to configure services such as DNS or GitHub repositories
every time I need to create or modify one.&lt;/p>
&lt;p>I use Cloudflare to manage my domains and handle DNS configurations. Every time
I got a new domain and/or DNS configuration, I had to go to Cloudflare and
update the entries. Maybe a week later, I would realize I had made a mistake and
had to track down what I had before to roll it back. Further, I use UptimeRobot
to monitor some of my personal domains and get notified in case they become
unavailable.&lt;/p></description></item><item><title>My journey in managing dotfiles</title><link>https://seds.nl/notes/my-journey-in-managing-dotfiles/</link><pubDate>Sun, 02 Feb 2025 17:22:00 +0100</pubDate><guid>https://seds.nl/notes/my-journey-in-managing-dotfiles/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/automating-and-testing-dotfiles/">Automating and testing dotfiles&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/nixos_important_commands/">NixOS important commands&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/chezmoi-and-emacs/">Chezmoi and Emacs&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>One of my biggest complaints when managing my dotfiles was having to deal with
my scripts and secrets (tokens, passwords, etc.) to set up my machine. My ideal
scenario was that when I made a fresh install of my system and ran my script, I
could start working. But the reality was different. I always had to update a
script or rework something to make it compatible with the new system because
the system state was different than before.&lt;/p></description></item><item><title>NixOS important commands</title><link>https://seds.nl/notes/nixos_important_commands/</link><pubDate>Sun, 02 Feb 2025 13:08:00 +0100</pubDate><guid>https://seds.nl/notes/nixos_important_commands/</guid><description>&lt;p>After I distro hopped from Archlinux to NixOS, I&amp;rsquo;ve been having to learn the Nix ecosystem and package management commands. I&amp;rsquo;ve found the migration from Archlinux to NixOS OK, but I am still struggling remembering some important Nix commands.&lt;/p>
&lt;h2 id="updating-packages">Updating packages&lt;a class="anchor" href="#updating-packages">#&lt;/a>&lt;/h2>
&lt;p>&lt;code>sudo nix-channel --update -vv&lt;/code> to update to the latest nix channel. This will essentially pull &lt;code>nixos-unstable&lt;/code> and &lt;code>nixpkgs-unstable&lt;/code>.&lt;/p>
&lt;p>&lt;code>nix flake update&lt;/code> Will update my &lt;code>flake.lock&lt;/code> file with the latest version.&lt;/p></description></item><item><title>Anbernic RG353V: configuring ArkOS</title><link>https://seds.nl/notes/anbernic_rg353v/</link><pubDate>Sat, 13 Jul 2024 11:40:00 +0200</pubDate><guid>https://seds.nl/notes/anbernic_rg353v/</guid><description>&lt;p>Last year I got myself the &lt;a href="https://anbernic.com/products/rg353v-rg353vs">Anbernic RG353V&lt;/a> handheld console so I could play
Gameboy Advance and PSP games. At the end, I had little time to play and I had
to leave it in the drawer.&lt;/p>
&lt;p>This week I found some time to play with it, but I ended up formatting the SD
with all my ROMs by mistake, so I had to download everything again 🫠. Given I
had to restart from zero, I decided to install &lt;a href="https://github.com/christianhaitian/arkos/wiki">ArkOS&lt;/a> instead, due to some of the
nifty features it has.&lt;/p></description></item><item><title>New computer</title><link>https://seds.nl/notes/new_computer/</link><pubDate>Sun, 30 Jun 2024 18:14:00 +0200</pubDate><guid>https://seds.nl/notes/new_computer/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/dell_xps_9510_and_the_linux_experience/">Dell XPS 9510 and the linux experience&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>After years of using notebooks, I sold my personal XPS to build a custom
computer. I thought about it for a long time about the hardware I needed. I knew
I needed a powerful processor, but not a Threadripper, and took me good days of
thinking to decide whether I would go with AMD or Intel. I decided to go with
Intel i9, which is the one I am most familiar with.&lt;/p></description></item><item><title>Notes on TDD - chapter 4</title><link>https://seds.nl/notes/notes_on_tdd_chapter_4/</link><pubDate>Sun, 11 Feb 2024 01:57:00 +0100</pubDate><guid>https://seds.nl/notes/notes_on_tdd_chapter_4/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/test_driven_development/">Test driven development&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>This chapter is straightforward. The problem is that our &lt;code>amount&lt;/code> is public.
Anyone can change, and we don&amp;rsquo;t want to allow tests to access it. What happens
if we delete that variable and move it somewhere else? We will have to update
the test. Lets refactor it.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">class&lt;/span> &lt;span style="color:#a6e22e">DollarV5&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> _amount: int
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">__init__&lt;/span>(self, amount: int):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> self&lt;span style="color:#f92672">.&lt;/span>_amount &lt;span style="color:#f92672">=&lt;/span> amount
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">times&lt;/span>(self, multipler: int) &lt;span style="color:#f92672">-&amp;gt;&lt;/span> &lt;span style="color:#e6db74">&amp;#34;DollarV5&amp;#34;&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> DollarV5(self&lt;span style="color:#f92672">.&lt;/span>_amount &lt;span style="color:#f92672">*&lt;/span> multipler)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">__eq__&lt;/span>(self, value: &lt;span style="color:#e6db74">&amp;#34;DollarV5&amp;#34;&lt;/span>) &lt;span style="color:#f92672">-&amp;gt;&lt;/span> bool:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> self&lt;span style="color:#f92672">.&lt;/span>_amount &lt;span style="color:#f92672">==&lt;/span> value&lt;span style="color:#f92672">.&lt;/span>amount&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We should keep &lt;code>__eq__&lt;/code> as is. Yes, this will break our next test, but its fine
for now.&lt;/p></description></item><item><title>Notes on TDD - chapter 3</title><link>https://seds.nl/notes/notes_on_tdd_chapter_3/</link><pubDate>Sun, 11 Feb 2024 01:53:00 +0100</pubDate><guid>https://seds.nl/notes/notes_on_tdd_chapter_3/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/test_driven_development/">Test driven development&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>We can use objects as values (similar to how we are using &lt;code>Dollar). This is called *Value Object*. The values of the instance variables of the object *never* changes once they have been set my the constructor. This is exactly the case with our current =Dollar&lt;/code> implementation, where once we set the amount, it
will stay as is. If we call &lt;code>times&lt;/code>, it will return a new Value Object.&lt;/p></description></item><item><title>Notes on TDD - chapter 2</title><link>https://seds.nl/notes/notes_on_tdd_chapter_2/</link><pubDate>Sun, 11 Feb 2024 01:51:00 +0100</pubDate><guid>https://seds.nl/notes/notes_on_tdd_chapter_2/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/test_driven_development/">Test driven development&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Below are notes/tests I made during my reading session of the &lt;a href="https://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530">Test Driven
Development: By Example&lt;/a> book, by Kent Beck.&lt;/p>
&lt;p>When TDDing, for each step, think about:&lt;/p>
&lt;ol>
&lt;li>Add a little test: think how I wish the interface would look like. Remember
we are writing a story and include all the elements in the story I think will
be necessary to reach the right answer.&lt;/li>
&lt;li>Run all test: Make the bar go green quickly. If the solution is obvious,
write it in, but if it takes 1min or more, then make a note about it and get
back to main problem.&lt;/li>
&lt;li>Make a little change: Remove all sins we left in the code, the duplication
that we introduced and get back to making the test pass.&lt;/li>
&lt;/ol>
&lt;blockquote class='book-hint '>
&lt;p>Our goal is to have clean code that works.&lt;/p></description></item><item><title>Notes on TDD - chapter 1</title><link>https://seds.nl/notes/notes_on_tdd_chapter_1/</link><pubDate>Sun, 11 Feb 2024 01:48:00 +0100</pubDate><guid>https://seds.nl/notes/notes_on_tdd_chapter_1/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/test_driven_development/">Test driven development&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Below are notes/tests I made during my reading session of the &lt;a href="https://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530">Test Driven
Development: By Example&lt;/a> book, by Kent Beck.&lt;/p>
&lt;p>The cycle we want to follow in TDD is as follows.&lt;/p>
&lt;ol>
&lt;li>Add a little test&lt;/li>
&lt;li>Run all tests and fail&lt;/li>
&lt;li>Make a little change&lt;/li>
&lt;li>Run the tests and succeed&lt;/li>
&lt;li>Refactor to remove duplication&lt;/li>
&lt;/ol>
&lt;!--listend-->
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">class&lt;/span> &lt;span style="color:#a6e22e">Dollar&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> amount: int
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">__init__&lt;/span>(self, amount: int):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> self&lt;span style="color:#f92672">.&lt;/span>amount &lt;span style="color:#f92672">=&lt;/span> amount
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">times&lt;/span>(self, multipler: int) &lt;span style="color:#f92672">-&amp;gt;&lt;/span> &lt;span style="color:#66d9ef">None&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> self&lt;span style="color:#f92672">.&lt;/span>amount &lt;span style="color:#f92672">*=&lt;/span> multipler&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote class='book-hint '>
&lt;p>If dependency is the problem, duplication is the symptom&lt;/p></description></item><item><title>Test driven development</title><link>https://seds.nl/notes/test_driven_development/</link><pubDate>Mon, 05 Feb 2024 13:22:00 +0000</pubDate><guid>https://seds.nl/notes/test_driven_development/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/python/">Python&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr></description></item><item><title>Ending 2022 with Brazilian Jiu-Jitsu</title><link>https://seds.nl/notes/ending_2022_with_brazilian_jiu_jitsu/</link><pubDate>Sat, 14 Jan 2023 20:07:00 +0100</pubDate><guid>https://seds.nl/notes/ending_2022_with_brazilian_jiu_jitsu/</guid><description>&lt;p>&amp;hellip; And starting 2023 with Brazilian Jiu-Jitsu (BJJ) as well. A few months
before the global COVID-19 pandemic, I started swimming again. Still, then the
lockdown began, and I had to cancel my swimming subscription. I never did any
exercise since then.&lt;/p>
&lt;p>When I moved back to The Netherlands, I promised myself I would start a new
sport and maintain it weekly. I chose BJJ. The first reason I decided on BJJ was
to keep up with a Brazilian sport, giving me the feeling of having Brazil
nearby. The second reason is to exercise, improve my confidence, decrease
anxiety and learn a martial art.&lt;/p></description></item><item><title>Hello again, Amsterdam</title><link>https://seds.nl/notes/hello_again_amsterdam/</link><pubDate>Sun, 25 Sep 2022 21:22:00 +0000</pubDate><guid>https://seds.nl/notes/hello_again_amsterdam/</guid><description>&lt;p>After moving around the world, I&amp;rsquo;ve decided to strike again and move back to
Amsterdam with my wife. We planned this throughout the last couple of years and
have initially planned to move at the end of 2020. The pandemic hit us hard, and
we both decided it would be better to stay in Brazil and replan for a different
year when things get back to normal.&lt;/p>
&lt;p>And 2022 came, and here I am, writing my first blog post after moving to
Amsterdam for three months. Many things I was familiar with have changed since I
moved out from Amsterdam, some negatively and positively. Regardless, I still
need more time to see how the city is doing and meet the new things around the
city.&lt;/p></description></item><item><title>Moving forward with suckless dwm</title><link>https://seds.nl/notes/moving_forward_with_suckless_dwm/</link><pubDate>Sun, 07 Aug 2022 21:50:00 +0000</pubDate><guid>https://seds.nl/notes/moving_forward_with_suckless_dwm/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/dell_xps_9510_and_the_linux_experience/">Dell XPS 9510 and the linux experience&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>I decided to give &lt;a href="https://dwm.suckless.org/">suckless dwm&lt;/a> another chance and spent my weekend configuring and applying some patches. Today (&lt;span class="timestamp-wrapper">&lt;span class="timestamp">&amp;lt;2022-08-07 Sun&amp;gt;&lt;/span>&lt;/span>), I seem to have a usable configuration with which I can start working.&lt;/p>
&lt;p>I&amp;rsquo;ve been using &lt;a href="http://www.qtile.org/">qtile&lt;/a> till now, but with multiple monitors, qtile seemed not to work well. I&amp;rsquo;ve tried getting a unique qtile&amp;rsquo;s &lt;code>GroupBox&lt;/code> for each screen to have 1-9 workspaces, but no luck. Maybe there is a way to fix this, but after a few tries, I gave up and took a chance at hearing my subconscious to give dwm another try.&lt;/p></description></item><item><title>Tabs vs. spaces in byte size</title><link>https://seds.nl/notes/tabs_vs_spaces/</link><pubDate>Sat, 26 Mar 2022 02:29:00 +0000</pubDate><guid>https://seds.nl/notes/tabs_vs_spaces/</guid><description>&lt;p>While during my daily housekeeping, I got intrigued by how much of a
the difference would a tab-based repository be in size in comparison to a
space-based version. To check the difference, I&amp;rsquo;ve used the Linux kernel for
comparing the size when converting all tabs to spaces and Python&amp;rsquo;s Pytest
library when converting all spaces to tabs.&lt;/p>
&lt;p>Using Python and C repositories was ideal, given Linux uses 8 tabs by default
and the Python community generally sticks with 4 spaces.&lt;/p></description></item><item><title>Thoughts of changing nicks</title><link>https://seds.nl/notes/thoughts_of_changing_nicks/</link><pubDate>Sat, 19 Mar 2022 16:24:00 +0000</pubDate><guid>https://seds.nl/notes/thoughts_of_changing_nicks/</guid><description>&lt;p>I&amp;rsquo;ve been thinking of changing my nick from &lt;code>seds&lt;/code> to something else. The
annoying part about this nick is that it is taken almost everywhere.&lt;/p>
&lt;p>I will still keep using &lt;code>benmezger&lt;/code> when available, but y&amp;rsquo;know, I like the idea of
using a nickname online &amp;ndash; it makes it feel like the beginning of the Internet.&lt;/p>
&lt;p>Now I have to think of something other than &lt;code>seds&lt;/code> 💔.&lt;/p></description></item><item><title>Dell XPS 9510 and the linux experience</title><link>https://seds.nl/notes/dell_xps_9510_and_the_linux_experience/</link><pubDate>Sun, 06 Feb 2022 00:29:00 +0100</pubDate><guid>https://seds.nl/notes/dell_xps_9510_and_the_linux_experience/</guid><description>&lt;blockquote class="book-hint danger">
&lt;p>&lt;strong>&lt;strong>I do not own this notebook anymore.&lt;/strong>&lt;/strong>
I recently sold this notebook, so I am unaware of any recent improvements/updates.&lt;/p>
&lt;/blockquote>
&lt;p>I&amp;rsquo;ve recently decided to migrate back to Linux after some years of using a
MacBook. I haven&amp;rsquo;t distanced myself from Linux while using the Mac, as I
had a Thinkpad x320 by my side all the time running Archlinux.&lt;/p>
&lt;p>I wanted something much more powerful than the Macbook, along with a lightweight
design and something that would last for the next five years.&lt;/p></description></item><item><title>Impact on software failures</title><link>https://seds.nl/notes/impact_on_software_failures/</link><pubDate>Sun, 10 Oct 2021 20:16:00 +0200</pubDate><guid>https://seds.nl/notes/impact_on_software_failures/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/software_engineering/">Software Engineering&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/laws_of_program_evolution/">Laws of Program Evolution&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Software failures can also cause serious consequences in an automobile. Toyota
had to recall almost 2 million Prius hybrid vehicles, in order to fix a software
glitch along with its engine control units (ECUs) in February 2014 (COMPUT-
ERWORLD 2020). A malfunction within the car’s hybrid drive system caused by a
software glitch could, in certain circumstances, cut the system’s power and
cause the car to an unscheduled halt. A software glitch affecting the ECUs
controlling the motor/generator and the hybrid system could put extra thermal
stress on certain transistors under certain conditions. The same software issue
recurred in July 2015, which has resulted in the recall of 625,000 Prius cars
globally. Software failures have affected the healthcare system as well.
Emergency services were unavailable for around six hours across seven U.S.
states in April 2014 (COMPUTERWORLD 2020). The incident had a major impact on 81
call centers, meaning about 6,000 people who made 911 calls that were not able
to connect in these seven states. There is a study announced by the Federal
Communications Commission found that the cause of service unavailable was an
entirely preventable software error.&lt;/p></description></item><item><title>Laws of Program Evolution</title><link>https://seds.nl/notes/laws_of_program_evolution/</link><pubDate>Sun, 10 Oct 2021 20:03:00 +0200</pubDate><guid>https://seds.nl/notes/laws_of_program_evolution/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/software_engineering/">Software Engineering&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>In 1980, Lehman (1980) summarized the Laws of Program Evolution. The first law,
Continuing Change, expressed the universally observed fact that large programs
are never completed. They just continue to evolve until the more cost-effective
updated version replaces the systems. The second law, Increasing Complexity,
could also be viewed as an instance of the second law of thermodynamics. As an
evolving program is continually changed, its complexity, reflecting
deteriorating structure, increases as well, unless the mission is done, or
maintenance is needed. The third law, The Fundamental Law of Program Evolution,
is subject to dynamics that make the programming process, measures system
attributes and collaborative projects, and self-regulating with statistically
proven trends and invariances. The fourth law, Conservation of Organizational
Stability (Invariant Work Rate), and the fifth law, Conservation of familiarity,
both lead to the third law. The fourth law more focuses on the steadiness of
multiloop self-stabilizing systems. A well-established organization is good at
avoiding dramatic change and particularly discontinuities in the increasing
growth of an organization. Especially in the past two decades, the complexity of
the task that the software system performs has grown dramatically, faster than
hardware due to the fast-paced high technology development (Catelani et al.
2011).&lt;/p></description></item><item><title>Handling database migration with Pytest and SQLAlchemy</title><link>https://seds.nl/notes/handling_database_migration_with_pytest_and_sqlalchemy/</link><pubDate>Fri, 24 Sep 2021 21:01:00 +0000</pubDate><guid>https://seds.nl/notes/handling_database_migration_with_pytest_and_sqlalchemy/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/python/">Python&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/python_name_mangling/">Python&amp;rsquo;s name mangling&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Recently I wanted to get &lt;a href="https://docs.pytest.org/">pytest&lt;/a> to work the same way &lt;a href="https://pytest-django.readthedocs.io/en/latest/database.html">pytest-django&lt;/a> handles
migrations and database fixtures. As a bonus, I wanted to add some custom
=pytest=flags to control the database during tests.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> pytest
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> sqlalchemy &lt;span style="color:#f92672">import&lt;/span> MetaData, create_engine
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> sqlalchemy &lt;span style="color:#f92672">import&lt;/span> orm
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> sqlalchemy_utils &lt;span style="color:#f92672">import&lt;/span> create_database, database_exists, drop_database
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> app &lt;span style="color:#f92672">import&lt;/span> config &lt;span style="color:#66d9ef">as&lt;/span> app_config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> app.db.session &lt;span style="color:#f92672">import&lt;/span> SessionLocal
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># we keep SessionLocal as default, but&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># we later overwrite it if we use the testing&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># db&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>TestingSessionLocal &lt;span style="color:#f92672">=&lt;/span> SessionLocal
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># see https://docs.pytest.org/en/stable/reference.html&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># about pytest_addoption&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">pytest_addoption&lt;/span>(parser):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># NOTE: when adding or removing an option,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># remove to remove/add from app/conftest.py:addoption_params&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> parser&lt;span style="color:#f92672">.&lt;/span>addoption(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;--no-db&amp;#34;&lt;/span>, default&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#66d9ef">False&lt;/span>, action&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;store_true&amp;#34;&lt;/span>, help&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;Disable testing database&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> parser&lt;span style="color:#f92672">.&lt;/span>addoption(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;--drop-db&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> default&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#66d9ef">False&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;store_true&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> help&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;Drop test database after running tests&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> parser&lt;span style="color:#f92672">.&lt;/span>addoption(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;--reuse-db&amp;#34;&lt;/span>, default&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#66d9ef">False&lt;/span>, action&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;store_true&amp;#34;&lt;/span>, help&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;Reuse previous database&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> parser&lt;span style="color:#f92672">.&lt;/span>addoption(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;--echo-db&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> default&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#66d9ef">False&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;store_true&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> help&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;Echo database queries to stdout&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> parser&lt;span style="color:#f92672">.&lt;/span>addoption(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;--database-uri&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> default&lt;span style="color:#f92672">=&lt;/span>str(config&lt;span style="color:#f92672">.&lt;/span>TEST_DATABASE_URL),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> action&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;store&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> help&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;Provice custom database url&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">addoption_params&lt;/span>(config):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># NOTE: Params are defined pytest_addoption&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;drop-db&amp;#34;&lt;/span>: config&lt;span style="color:#f92672">.&lt;/span>getoption(&lt;span style="color:#e6db74">&amp;#34;--drop-db&amp;#34;&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;no-db&amp;#34;&lt;/span>: config&lt;span style="color:#f92672">.&lt;/span>getoption(&lt;span style="color:#e6db74">&amp;#34;--no-db&amp;#34;&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;reuse-db&amp;#34;&lt;/span>: config&lt;span style="color:#f92672">.&lt;/span>getoption(&lt;span style="color:#e6db74">&amp;#34;--reuse-db&amp;#34;&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;echo-db&amp;#34;&lt;/span>: config&lt;span style="color:#f92672">.&lt;/span>getoption(&lt;span style="color:#e6db74">&amp;#34;--echo-db&amp;#34;&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;database-uri&amp;#34;&lt;/span>: config&lt;span style="color:#f92672">.&lt;/span>getoption(&lt;span style="color:#e6db74">&amp;#34;--database-uri&amp;#34;&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">pytest_configure&lt;/span>(config):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">global&lt;/span> TestingSessionLocal
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># check if we should ovewrite the database and&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># skip it if set&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> params &lt;span style="color:#f92672">=&lt;/span> addoption_params(config)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> params&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;no-db&amp;#34;&lt;/span>):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> database_uri &lt;span style="color:#f92672">=&lt;/span> params&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;database-uri&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> echo_db &lt;span style="color:#f92672">=&lt;/span> params&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;echo-db&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> database_exists(database_uri):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># if reuse-db is set, don&amp;#39;t drop the database&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># as we want to use the previous database&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> &lt;span style="color:#f92672">not&lt;/span> params&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;reuse-db&amp;#34;&lt;/span>):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> drop_database(database_uri)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> create_database(database_uri)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">else&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> create_database(database_uri)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> engine &lt;span style="color:#f92672">=&lt;/span> create_engine(database_uri, echo&lt;span style="color:#f92672">=&lt;/span>echo_db)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># dont drop and create the database if reuse-db is set&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> &lt;span style="color:#f92672">not&lt;/span> params&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;reuse-db&amp;#34;&lt;/span>):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> DBBase&lt;span style="color:#f92672">.&lt;/span>metadata&lt;span style="color:#f92672">.&lt;/span>drop_all(engine)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> DBBase&lt;span style="color:#f92672">.&lt;/span>metadata&lt;span style="color:#f92672">.&lt;/span>create_all(engine)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> engine&lt;span style="color:#f92672">.&lt;/span>execute(&lt;span style="color:#e6db74">&amp;#34;create extension pg_trgm;&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># overwrite TestingSessionLocal with the testing database&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> TestingSessionLocal &lt;span style="color:#f92672">=&lt;/span> orm&lt;span style="color:#f92672">.&lt;/span>sessionmaker(bind&lt;span style="color:#f92672">=&lt;/span>engine, autocommit&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#66d9ef">True&lt;/span>, autoflush&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#66d9ef">True&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">pytest_unconfigure&lt;/span>(config):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> params &lt;span style="color:#f92672">=&lt;/span> addoption_params(config)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># nothing to do if no-db is set&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> params&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;no-db&amp;#34;&lt;/span>):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> database_uri &lt;span style="color:#f92672">=&lt;/span> params&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;database-uri&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># don&amp;#39;t drop the database if drop-db is set.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> params&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;drop-db&amp;#34;&lt;/span>) &lt;span style="color:#f92672">and&lt;/span> database_exists(database_uri):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> drop_database(database_uri)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@pytest.fixture&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">params&lt;/span>(request):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> addoption_params(request&lt;span style="color:#f92672">.&lt;/span>config)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@pytest.fixture&lt;/span>(autouse&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#66d9ef">True&lt;/span>, scope&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;session&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">truncate_db&lt;/span>(pytestconfig):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> params &lt;span style="color:#f92672">=&lt;/span> addoption_params(pytestconfig)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># don&amp;#39;t truncate if no-db is set&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> params&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;no-db&amp;#34;&lt;/span>):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> database_uri &lt;span style="color:#f92672">=&lt;/span> params&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;database-uri&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> echo_db &lt;span style="color:#f92672">=&lt;/span> params&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;echo-db&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> engine &lt;span style="color:#f92672">=&lt;/span> create_engine(database_uri, echo&lt;span style="color:#f92672">=&lt;/span>echo_db)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> meta &lt;span style="color:#f92672">=&lt;/span> MetaData(bind&lt;span style="color:#f92672">=&lt;/span>engine, reflect&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#66d9ef">True&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> con &lt;span style="color:#f92672">=&lt;/span> engine&lt;span style="color:#f92672">.&lt;/span>connect()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> trans &lt;span style="color:#f92672">=&lt;/span> con&lt;span style="color:#f92672">.&lt;/span>begin()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># truncate all tables&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">for&lt;/span> table &lt;span style="color:#f92672">in&lt;/span> meta&lt;span style="color:#f92672">.&lt;/span>sorted_tables:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> con&lt;span style="color:#f92672">.&lt;/span>execute(&lt;span style="color:#e6db74">f&lt;/span>&lt;span style="color:#e6db74">&amp;#39;ALTER TABLE &amp;#34;&lt;/span>&lt;span style="color:#e6db74">{&lt;/span>table&lt;span style="color:#f92672">.&lt;/span>name&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">&amp;#34; DISABLE TRIGGER ALL;&amp;#39;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> con&lt;span style="color:#f92672">.&lt;/span>execute(table&lt;span style="color:#f92672">.&lt;/span>delete())
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> con&lt;span style="color:#f92672">.&lt;/span>execute(&lt;span style="color:#e6db74">f&lt;/span>&lt;span style="color:#e6db74">&amp;#39;ALTER TABLE &amp;#34;&lt;/span>&lt;span style="color:#e6db74">{&lt;/span>table&lt;span style="color:#f92672">.&lt;/span>name&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">&amp;#34; ENABLE TRIGGER ALL;&amp;#39;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> trans&lt;span style="color:#f92672">.&lt;/span>commit()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@pytest.fixture&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">db&lt;/span>(mocker):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># just to ensure.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Patch sqlalchemy&amp;#39;s Session with TestingSessionLocal&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> patched_session &lt;span style="color:#f92672">=&lt;/span> mocker&lt;span style="color:#f92672">.&lt;/span>patch(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;sqlalchemy.orm.session.Session&amp;#34;&lt;/span>, return_value&lt;span style="color:#f92672">=&lt;/span>TestingSessionLocal
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> patched_session
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@pytest.fixture&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">db_session&lt;/span>():
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">try&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> db &lt;span style="color:#f92672">=&lt;/span> TestingSessionLocal()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">yield&lt;/span> db
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">finally&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> db&lt;span style="color:#f92672">.&lt;/span>close()&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I am unsure whether using &lt;code>pytest_configure&lt;/code> to initialize the database and
overwrite the &lt;code>TestingSessionLocal&lt;/code> is the recommended or correct approach, but
it works well.&lt;/p></description></item><item><title>Python's name mangling</title><link>https://seds.nl/notes/python_name_mangling/</link><pubDate>Sat, 18 Sep 2021 20:30:00 +0000</pubDate><guid>https://seds.nl/notes/python_name_mangling/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/python/">Python&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Python&amp;rsquo;s convention of prefixing a name with an underscore (&lt;code>_handle_error()&lt;/code>)
is treated as a non-public part of the API by the community, but we can still
access it if we want. This Python convention also eases the work when
unit-testing these methods.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">class&lt;/span> &lt;span style="color:#a6e22e">Account&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">name&lt;/span>(self):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> self&lt;span style="color:#f92672">.&lt;/span>_name
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">@property&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">_name&lt;/span>(self):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#e6db74">&amp;#34;Anonymous&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>acc &lt;span style="color:#f92672">=&lt;/span> Account()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>print(acc&lt;span style="color:#f92672">.&lt;/span>name())
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>print(acc&lt;span style="color:#f92672">.&lt;/span>_name)&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>Anonymous
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Anonymous&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>But what happens when we use two underscores (&lt;code>__handle_error()&lt;/code>)?&lt;/p></description></item><item><title>Asynchronous vs synchronous bus</title><link>https://seds.nl/notes/asynchronous_vs_synchronous_bus/</link><pubDate>Mon, 13 Sep 2021 21:27:00 +0000</pubDate><guid>https://seds.nl/notes/asynchronous_vs_synchronous_bus/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/computer-architecture/">Computer Architecture&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;blockquote class='book-hint '>
&lt;p>In an asynchronous bus, each bus cycle is sequenced by request and
acknowledgment signals. To perform a bus cycle, the transmitter drives the data
onto the bus and then asserts the request signal Req. Upon seeing the request
signal, the receiver samples the data off the bus and asserts an acknowledge
signal Ack to indicate that the data transfer is complete. Upon receiving the
acknowledge signal, the transmitter turns its driver off, freeing the bus for
the next transfer &lt;principelsAndPracticesOfInterconnectionNetworks>.&lt;/p></description></item><item><title>Chezmoi and Emacs</title><link>https://seds.nl/notes/chezmoi-and-emacs/</link><pubDate>Sat, 11 Sep 2021 19:48:00 +0000</pubDate><guid>https://seds.nl/notes/chezmoi-and-emacs/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/emacs-editor/">Emacs&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/automating-and-testing-dotfiles/">Automating and testing dotfiles&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>I&amp;rsquo;ve recently wanted to integrate &lt;a href="https://chezmoi.io">Chezmoi&lt;/a> with Emacs, so I can avoid switching
to the terminal or &lt;code>eshell&lt;/code> whenever I needed Chezmoi. I&amp;rsquo;ve searched for a few
Emacs and Chezmoi integration and I found &lt;a href="https://github.com/tuh8888/chezmoi.el">this&lt;/a>. However, I wanted to play a
bit with Elisp, so I decided to write my own.&lt;/p>
&lt;p>The code is still a work-in-progress, but I already have the basic functionality
set up.&lt;/p></description></item><item><title>Locking Python scripts with flock</title><link>https://seds.nl/notes/locking-python-scripts-with-flock/</link><pubDate>Sun, 22 Aug 2021 01:42:00 +0000</pubDate><guid>https://seds.nl/notes/locking-python-scripts-with-flock/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/python/">Python&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/python_temporary_file/">Python temporary file&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/synchronization/">Synchronization&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="the-problem">The problem&lt;a class="anchor" href="#the-problem">#&lt;/a>&lt;/h2>
&lt;p>I wanted to make a Python script that synchronized my emails and indexed them
with &lt;a href="https://www.djcbsoftware.nl/code/mu/mu4e.html">&lt;code>mu&lt;/code>&lt;/a>. The script would run on &lt;code>systemd&lt;/code> and/or &lt;code>launchd&lt;/code> every 5 minutes,
however, I would like to run the script manually too. I needed a solution
similar to a &lt;code>mutex&lt;/code>, but file-like, nothing too complex neither 100%.&lt;/p>
&lt;h2 id="unix-s-flock">UNIX&amp;rsquo;s &lt;code>flock&lt;/code>&lt;a class="anchor" href="#unix-s-flock">#&lt;/a>&lt;/h2>
&lt;p>Unix flock enables one to lock a file while the file is open by the executing
command.&lt;/p></description></item><item><title>RISC-V Instruction Format</title><link>https://seds.nl/notes/risc_v_instruction_format/</link><pubDate>Fri, 13 Aug 2021 19:28:00 +0000</pubDate><guid>https://seds.nl/notes/risc_v_instruction_format/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/riscv/">RISCV&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-architecture/">Computer Architecture&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/notes_on_risc_v_cpu_hard_ip_cores_enter_soc_fpgas/#polarfire-soc-risc-v-enabled-innocation-platform">PolarFire SoC - RISC-V enabled innocation platform&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>The base ISA has six instruction formats: (i) the R-format for register
operations, (ii) I-format for immediate short and loads values, (iii) S-format
for stores, (iv) B-format for conditional branches, (v) U-format for
instructions with upper immediate, and (vi) J-format for
unconditional jumps. Given that the ISA has six instruction formats, the
simplification and decoding of instructions are much more straightforward
compared to ARM or x86 architectures. RISC-V provides three register operands
at the same position in all formats, simplifying the decoding process. In
addition, the specified registers to be read or written are always in the same
place in all instructions, enabling register access to start before the
instruction decoding phase &amp;lt;patterson2017RiscvAtlas,Waterman14therisc-v&amp;gt;.&lt;/p></description></item><item><title>Notes on fault tolerant software</title><link>https://seds.nl/notes/notes_on_fault_tolerant_software/</link><pubDate>Fri, 28 May 2021 20:14:00 +0000</pubDate><guid>https://seds.nl/notes/notes_on_fault_tolerant_software/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/software_engineering/">Software Engineering&lt;/a>&lt;/dd>
&lt;/dl>
&lt;!--listend-->
&lt;ul>
&lt;li>Software-based fault tolerance must support appropriate redundancy for error
detection and error recovery. Software redundancy is not a replication of
programs but rather a redundancy of design
&lt;RandellSysStructureForSoftwareFaultTolerance>.&lt;/li>
&lt;/ul></description></item><item><title>Synchronization</title><link>https://seds.nl/notes/synchronization/</link><pubDate>Sun, 04 Apr 2021 19:25:00 +0000</pubDate><guid>https://seds.nl/notes/synchronization/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/operating-systems/">Operating Systems&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/software_engineering/">Software Engineering&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-architecture/">Computer Architecture&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Notes from the Little book of Semaphores &lt;LittleBookOfSemaphores>.&lt;/p>
&lt;h2 id="shared-variables">Shared variables&lt;a class="anchor" href="#shared-variables">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>Many applications enforce the constraint that the reader should not read until
after the writer writes, this is because the reader may read an old value if
the writer hasn&amp;rsquo;t written to the variable yet&lt;/li>
&lt;li>A thread may also interact as concurrent writes (two or more writers) and
concurrent updates (two or more threads performing a read followed by a
write)&lt;/li>
&lt;li>Think about what paths (execution paths) are possible and what are the
possible effects. Ask yourself if you can you prove that a given (desirable)
effect is necessary or that a undesirable effect is impossible&lt;/li>
&lt;/ul>
&lt;h2 id="semaphores">Semaphores&lt;a class="anchor" href="#semaphores">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>A semaphore is like an integer, with three differences
&lt;ul>
&lt;li>A semaphore can have its value initialized to any number, but after that
only an increment and decrement operation is allowed, and you are not
allowed to read the current value of the semaphore&lt;/li>
&lt;li>When a thread decrements the semaphore, if the result is negative, the
thread blocks itself and cannot continue until another thread increments the
semaphore&lt;/li>
&lt;li>When a thread increments the semaphore, if there are other threads waiting,
one of the waiting threads gets unblocked&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>If the value of the semaphore is positive, it representes the number of
threads that can decrement without blocking. If it is negative, it represents
the number of threads that have blocked and are waiting. If the value is zero,
it means there are no threads waiting.&lt;/li>
&lt;/ul>
&lt;h2 id="quizzes-and-exercises">Quizzes and exercises&lt;a class="anchor" href="#quizzes-and-exercises">#&lt;/a>&lt;/h2>
&lt;h3 id="shared-variables">Shared variables&lt;a class="anchor" href="#shared-variables">#&lt;/a>&lt;/h3>
&lt;ol>
&lt;li>
&lt;p>&lt;em>Imagine that you and your friend Bob live in different cities, and one day,&lt;/em>
&lt;em>around dinner time, you start to wonder who ate lunch first that day, you or&lt;/em>
&lt;em>Bob. How would you find out?&lt;/em>&lt;/p></description></item><item><title>Export org-roam backlinks with Gohugo</title><link>https://seds.nl/notes/export_org_roam_backlinks_with_gohugo/</link><pubDate>Sun, 07 Mar 2021 14:40:00 +0000</pubDate><guid>https://seds.nl/notes/export_org_roam_backlinks_with_gohugo/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/org_mode/">Org-mode&lt;/a> &lt;a href="https://seds.nl/notes/emacs-editor/">Emacs&lt;/a> &lt;a href="https://seds.nl/notes/org_roam/">Org-roam&lt;/a>&lt;/dd>
&lt;/dl>
&lt;p>Since &lt;a href="https://seds.nl/notes/org_roam_export_backlinks_on_hugo/">Org-roam export backlinks on Hugo&lt;/a> no longer works, I found a solution
to handle backlinks in Hugo itself.&lt;/p>
&lt;p>The following Hugo &lt;a href="https://gohugo.io/templates/partials/">partial template&lt;/a> will add backlinks to a note if any.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>{{ $re := $.File.BaseFileName }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>{{ $backlinks := slice }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>{{ range .Site.AllPages }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ if and (findRE $re .RawContent) (not (eq $re .File.BaseFileName)) }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ $backlinks = $backlinks | append . }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ end }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>{{ end }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;hr&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>{{ if gt (len $backlinks) 0 }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;div class=&amp;#34;bl-section&amp;#34;&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;h4&amp;gt;Links to this note&amp;lt;/h4&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;div class=&amp;#34;backlinks&amp;#34;&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;ul&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ range $backlinks }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;li&amp;gt;&amp;lt;a href=&amp;#34;{{ .RelPermalink }}&amp;#34;&amp;gt;{{ .Title }}&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ end }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;/ul&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>{{ else }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;div class=&amp;#34;bl-section&amp;#34;&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;h4&amp;gt;No notes link to this note&amp;lt;/h4&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>{{ end }}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Then, include the previous partial to your &lt;a href="https://gohugo.io/templates/single-page-templates/#postssinglehtml">&lt;code>single.html&lt;/code>&lt;/a>. For example, this page
is created with a &lt;code>single.html&lt;/code> template, with the following content:&lt;/p></description></item><item><title>Symbol format 'elf64-littleriscv' unknown</title><link>https://seds.nl/notes/symbol_format_elf64_littleriscv_unknown/</link><pubDate>Mon, 01 Mar 2021 22:43:00 +0100</pubDate><guid>https://seds.nl/notes/symbol_format_elf64_littleriscv_unknown/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/riscv/">RISCV&lt;/a> &lt;a href="https://seds.nl/notes/compiler/">Compiler&lt;/a>&lt;/dd>
&lt;/dl>
&lt;p>After an hour of compiling RISC-V&amp;rsquo;s &lt;a href="https://github.com/riscv/riscv-gnu-toolchain">toolchain&lt;/a>, I ran &lt;code>riscv64-unknown-elf-gdb&lt;/code>
remotely against my Rust kernel running in Qemu. This happened.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>riscv64-unknown-elf-gdb \
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -q \
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -ex &amp;#39;file target/riscv64gc-unknown-none-elf/debug/strail-rs&amp;#39; \
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -ex &amp;#39;target remote localhost:3333&amp;#39; \
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -ex &amp;#34;b main&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Reading symbols from target/riscv64gc-unknown-none-elf/debug/strail-rs...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>I&amp;#39;m sorry, Dave, I can&amp;#39;t do that. Symbol format `elf64-littleriscv&amp;#39; unknown.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Remote debugging using localhost:3333
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>make: *** [gdb] Abort trap: 6&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>What the hell. I immediately started to investigate what is going on, is it my
build system? Is Rust compiling my binary in a wrong format (although it seems
correct from the output)?&lt;/p></description></item><item><title>C pointers</title><link>https://seds.nl/notes/c_pointers/</link><pubDate>Fri, 12 Feb 2021 23:50:00 +0000</pubDate><guid>https://seds.nl/notes/c_pointers/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>For understanding how pointers work, consider the following simplified memory
layout. the memory address starts in &lt;code>0x1&lt;/code> and goes up to address &lt;code>0xA&lt;/code>. The
value row holds the current data stored in that memory cell. Address &lt;code>0x1&lt;/code> holds
a &lt;em>pointer&lt;/em> to address &lt;code>0x6&lt;/code>, which in turn &lt;code>0x6&lt;/code> holds the value &lt;code>s&lt;/code>.&lt;/p>
&lt;p>&lt;a id="table--table-memory-layout-simplified">&lt;/a>&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Address&lt;/th>
 &lt;th>0x1&lt;/th>
 &lt;th>0x2&lt;/th>
 &lt;th>0x3&lt;/th>
 &lt;th>0x4&lt;/th>
 &lt;th>0x5&lt;/th>
 &lt;th>0x6&lt;/th>
 &lt;th>0x7&lt;/th>
 &lt;th>0x8&lt;/th>
 &lt;th>0x9&lt;/th>
 &lt;th>0xA&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Value&lt;/td>
 &lt;td>&lt;code>0x6&lt;/code>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;em>s&lt;/em>&lt;/td>
 &lt;td>&lt;em>e&lt;/em>&lt;/td>
 &lt;td>&lt;em>d&lt;/em>&lt;/td>
 &lt;td>&lt;em>s&lt;/em>&lt;/td>
 &lt;td>&lt;em>\0&lt;/em>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Variable name&lt;/td>
 &lt;td>&lt;code>hostname&lt;/code>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;/td>
 &lt;td>&lt;code>hostname&lt;/code>&lt;/td>
 &lt;td>&lt;code>hostname + 1&lt;/code>&lt;/td>
 &lt;td>&lt;code>hostname + 2&lt;/code>&lt;/td>
 &lt;td>&lt;code>hostname + 3&lt;/code>&lt;/td>
 &lt;td>&lt;code>hostname +4&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>.. which we can translate to:&lt;/p></description></item><item><title>Awesome Operating Systems</title><link>https://seds.nl/notes/awesome_operating_systems/</link><pubDate>Tue, 09 Feb 2021 12:28:00 +0000</pubDate><guid>https://seds.nl/notes/awesome_operating_systems/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/operating-systems/">Operating Systems&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-architecture/">Computer Architecture&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Another awesome list of available Operating System. This is an ongoing list and
gets updated from time to time.&lt;/p>
&lt;h2 id="unix-like">Unix-like&lt;a class="anchor" href="#unix-like">#&lt;/a>&lt;/h2>
&lt;h3 id="microkernel">Microkernel&lt;a class="anchor" href="#microkernel">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://www.minix3.org/">Minix 3&lt;/a>: MINIX 3 is a free, open-source, operating system designed to be
highly reliable, flexible, and secure. It is based on a tiny microkernel
running in kernel mode with the rest of the operating system running as a
number of isolated, protected, processes in user mode. It runs on x86 and ARM
CPUs, is compatible with NetBSD, and runs thousands of NetBSD packages.&lt;/li>
&lt;li>&lt;a href="https://www.redox-os.org/">Redox OS&lt;/a>: Redox is a Unix-like Operating System written in Rust, aiming to
bring the innovations of Rust to a modern microkernel and full set of
applications.&lt;/li>
&lt;/ul>
&lt;h3 id="monolithic">Monolithic&lt;a class="anchor" href="#monolithic">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://kernel.org">Linux Kernel&lt;/a>: The Linux kernel is a free and open-source, monolithic, modular,
multitasking, Unix-like operating system kernel. It was conceived and created
in 1991 by Linus Torvalds for his i386-based PC, and it was soon adopted as
the kernel for the GNU operating system.&lt;/li>
&lt;li>&lt;a href="https://illumos.org/">illumos&lt;/a>: illumos is a Unix operating system which provides next-generation
features for downstream distributions, including advanced system debugging,
next generation filesystem, networking, and virtualization options.&lt;/li>
&lt;li>&lt;a href="https://docs.smartos.org/">SmartOS&lt;/a>: SmartOS is a specialized Type 1 Hypervisor platform based on &lt;a href="https://illumos.org/">illumos&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://pdos.csail.mit.edu/6.828/2020/xv6.html">Xv6&lt;/a>: Xv6 is a teaching operating system developed in the summer of 2006, which
was ported to RISC-V for a new undergraduate class 6.S081.&lt;/li>
&lt;li>&lt;a href="https://www.serenityos.org/">SerenityOS&lt;/a>: The goal is a marriage between the aesthetic of late-1990s
productivity software and the power-user accessibility of late-2000s *nix.&lt;/li>
&lt;li>&lt;a href="https://www.xfree86.org/">XFree86&lt;/a>: Provides a client/server interface between the display hardware (those
physical things like the mouse, keyboard, and video displays) and the desktop
environment, (this is typically called a window manager as it deals with how X
is displayed i.e. the overall appearance). Yet X it goes beyond that and also
gives the infrastructure and a standardized application interface (API).&lt;/li>
&lt;/ul>
&lt;h2 id="embedded-os">Embedded OS&lt;a class="anchor" href="#embedded-os">#&lt;/a>&lt;/h2>
&lt;h3 id="microkernel">Microkernel&lt;a class="anchor" href="#microkernel">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://github.com/contiki-ng/contiki-ng">Contiki-NG&lt;/a>: Contiki-NG is an open-source, cross-platform operating system for
Next-Generation IoT devices. It focuses on dependable (secure and reliable)
low-power communication and standard protocols, such as IPv6/6LoWPAN, 6TiSCH,
RPL, and CoAP. Contiki-NG comes with extensive documentation, tutorials, a
roadmap, release cycle, and well-defined development flow for smooth
integration of community contributions.&lt;/li>
&lt;li>&lt;a href="https://www.freertos.org/">FreeRTOS&lt;/a>: FreeRTOS is a real-time operating system kernel for embedded devices
that has been ported to 35 microcontroller platforms.&lt;/li>
&lt;li>&lt;a href="https://www.riot-os.org/">Riot OS&lt;/a>: RIOT is a small operating system for networked, memory-constrained
systems with a focus on low-power wireless Internet of Things devices.&lt;/li>
&lt;li>&lt;a href="https://os.mbed.com/">Mbed&lt;/a>: Mbed is a platform and operating system for internet-connected devices
based on 32-bit ARM Cortex-M microcontrollers.&lt;/li>
&lt;li>&lt;a href="https://github.com/tron-forum/mtkernel%5F3">μT-Kernel 3.0&lt;/a>: Real-time OS for Small-scale Embedded Systems and IoT Edge
nodes. It is compliant with IEEE Standard 2050-2018 and has high compatibility
with &lt;a href="https://www.tron.org/download/index.php?route=product/category&amp;amp;path=50">μT-Kernel 2.0&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://github.com/oxidecomputer/hubris">Hubris&lt;/a>: Hubris is a microcontroller operating environment designed for
deeply-embedded systems with reliability requirements. Its design was
initially proposed in RFD41, but has evolved considerably since then. Hubris
provides preemptive multitasking, memory isolation between separately-compiled
components, the ability to isolate crashing drivers and restart them without
affecting the rest of the system, and flexible inter-component messaging that
eliminates the need for most syscalls — in about 2000 lines of Rust. The
Hubris debugger, Humility, allows us to walk up to a running system and
inspect the interaction of all tasks, or capture a dump for offline debugging.&lt;/li>
&lt;/ul>
&lt;h3 id="monolithic">Monolithic&lt;a class="anchor" href="#monolithic">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://zephyrproject.org/">Zephyr&lt;/a>: Zephyr is a small real-time operating system[3] for connected,
resource-constrained and embedded devices (with an emphasis on
microcontrollers) supporting multiple architectures&lt;/li>
&lt;/ul>
&lt;h3 id="megalithic-kernel">Megalithic Kernel&lt;a class="anchor" href="#megalithic-kernel">#&lt;/a>&lt;/h3>
&lt;p>&lt;a href="https://github.com/tinyos/tinyos-main">TinyOS&lt;/a>: TinyOS is an open source, BSD-licensed operating system designed for
low-power wireless devices, such as those used in sensor networks, ubiquitous
computing, personal area networks, smart buildings, and smart meters.&lt;/p></description></item><item><title>Software and Hardware Single Event Effect mitigation</title><link>https://seds.nl/notes/software-and-hardware-single-event-effect-mitigation/</link><pubDate>Sat, 06 Feb 2021 15:28:00 +0000</pubDate><guid>https://seds.nl/notes/software-and-hardware-single-event-effect-mitigation/</guid><description>This work aims at characterizing the types of see and the state-of-the-art that
has been accomplished to mitigate these issues at the circuit- and software-level.</description></item><item><title>Notes on OS memory management</title><link>https://seds.nl/notes/notes_on_os_memory_management/</link><pubDate>Fri, 27 Nov 2020 22:08:00 +0000</pubDate><guid>https://seds.nl/notes/notes_on_os_memory_management/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/operating-systems/">Operating Systems&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="memory-management-requirements">Memory management requirements&lt;a class="anchor" href="#memory-management-requirements">#&lt;/a>&lt;/h2>
&lt;p>Some the requirements that memory management is intended to satisfy are:&lt;/p>
&lt;ol>
&lt;li>Relocation&lt;/li>
&lt;li>Protection&lt;/li>
&lt;li>Sharing&lt;/li>
&lt;li>Logical organization&lt;/li>
&lt;li>Physical organization&lt;/li>
&lt;/ol></description></item><item><title>Bit shifting</title><link>https://seds.nl/notes/bit_shifting/</link><pubDate>Sat, 21 Nov 2020 14:52:00 +0000</pubDate><guid>https://seds.nl/notes/bit_shifting/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/binary-calculation/">Binary calculation&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/math/">Math&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="the-operators">The operators&lt;a class="anchor" href="#the-operators">#&lt;/a>&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Operator&lt;/th>
 &lt;th>Meaning&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>&amp;gt;&amp;gt;&lt;/code>&lt;/td>
 &lt;td>Arithmetic (signed) right shift operator&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>&amp;gt;&amp;gt;&amp;gt;&lt;/code>&lt;/td>
 &lt;td>Logical (unsigned) right shift operator&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>&amp;lt;&amp;lt;&lt;/code>&lt;/td>
 &lt;td>Left shift operator, meets the needs of logical and arithmetic shifts&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="left-shift">Left shift &lt;code>&amp;lt;&amp;lt;&lt;/code>&lt;a class="anchor" href="#left-shift">#&lt;/a>&lt;/h2>
&lt;p>Integers are stored, in memory, as a series of bits. For example, the number &lt;code>6&lt;/code>
is:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>6	0000 0110	0x6&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Shifting the bit pattern to &lt;code>1&lt;/code> (&lt;code>6 &amp;lt;&amp;lt; 1&lt;/code>) results in &lt;code>12&lt;/code>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>	 6	0000 0110	0x6
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;&amp;lt;1	12	0000 1100	0xc&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Shifting the bit pattern to &lt;code>2&lt;/code> (&lt;code>6 &amp;lt;&amp;lt; 2&lt;/code>) results in &lt;code>24&lt;/code>&lt;/p></description></item><item><title>Translating Virtual addresses</title><link>https://seds.nl/notes/translating_virtual_addresses/</link><pubDate>Sat, 21 Nov 2020 14:09:00 +0000</pubDate><guid>https://seds.nl/notes/translating_virtual_addresses/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/computer-architecture/">Computer Architecture&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/operating-systems/">Operating Systems&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Translating virtual address space in &lt;a href="https://seds.nl/notes/riscv/">RISCV&lt;/a> in Sv39&lt;/p>
&lt;p>Virtual address: &lt;code>0x7d_beef_cafe&lt;/code>
Virtual address in binary: &lt;code>0b0111_1101_1011_1110_1110_1111_1100_1010_1111_1110&lt;/code>&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>VPN[2]&lt;/th>
 &lt;th>VPN[1]&lt;/th>
 &lt;th>VPN[0]&lt;/th>
 &lt;th>12-bit offset&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>1_1111_0110&lt;/code>&lt;/td>
 &lt;td>&lt;code>1_1111_0111&lt;/code>&lt;/td>
 &lt;td>&lt;code>0_1111_1100&lt;/code>&lt;/td>
 &lt;td>&lt;code>1010_1111_1110&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>502&lt;/td>
 &lt;td>503&lt;/td>
 &lt;td>252&lt;/td>
 &lt;td>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table></description></item><item><title>Bibliography</title><link>https://seds.nl/notes/bibliography/</link><pubDate>Sat, 21 Nov 2020 00:04:00 +0100</pubDate><guid>https://seds.nl/notes/bibliography/</guid><description>&lt;p>Some of these bibliographies I&amp;rsquo;ve been reading for my research and some I find it
interesting to keep around my library.&lt;/p>
&lt;h2 id="operating-systems">Operating Systems&lt;a class="anchor" href="#operating-systems">#&lt;/a>&lt;/h2>
&lt;h3 id="introductory">Introductory&lt;a class="anchor" href="#introductory">#&lt;/a>&lt;/h3>
&lt;h4 id="modern-operating-systems">Modern Operating Systems&lt;a class="anchor" href="#modern-operating-systems">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@book&lt;/span>{tanenbaum2014ModenOS,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Tanenbaum, Andrew S. and Bos, Herbert}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Modern Operating Systems}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2014&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">isbn&lt;/span> = &lt;span style="color:#e6db74">{013359162X}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">{Prentice Hall Press}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">address&lt;/span> = &lt;span style="color:#e6db74">{USA}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">edition&lt;/span> = &lt;span style="color:#e6db74">{4th}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">abstract&lt;/span> = &lt;span style="color:#e6db74">{ Modern Operating Systems, Fourth Edition, is intended for
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> introductory courses in Operating Systems in Computer Science,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Computer Engineering, and Electrical Engineering programs. It
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> also serves as a useful reference for OS professionals The
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> widely anticipated revision of this worldwide best-seller
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> incorporates the latest developments in operating systems (OS)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> technologies. The Fourth Edition includes up-to-date materials
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> on relevantOS. Tanenbaum also provides information on current
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> research based on his experience as an operating systems
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> researcher. Modern Operating Systems, Third Editionwas the
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> recipient of the 2010 McGuffey Longevity Award. The McGuffey
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Longevity Award recognizes textbooks whose excellence has been
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> demonstrated over time.http://taaonline.net/index.html
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Teaching and Learning Experience This program will provide a
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> better teaching and learning experiencefor you and your
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> students. It will help: Provide Practical Detail on the Big
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Picture Concepts: A clear and entertaining writing style
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> outlines the concepts every OS designer needs to master. Keep
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Your Course Current: This edition includes information on the
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> latest OS technologies and developments Enhance Learning with
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Student and Instructor Resources: Students will gain hands-on
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> experience using the simulation exercises and lab experiments.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> }&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="operating-systems-internals-and-design-principle">Operating Systems: Internals and Design Principle&lt;a class="anchor" href="#operating-systems-internals-and-design-principle">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@book&lt;/span>{stallings2018OperatingSysInternalAndDesign,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Stallings, William}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Operating Systems: Internals and Design Principles, 9/e}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2018&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">isbn&lt;/span> = &lt;span style="color:#ae81ff">9352866711&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">{Pearson IT Certification}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">address&lt;/span> = &lt;span style="color:#e6db74">{Indianapolis, Indiana, USA}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">edition&lt;/span> = &lt;span style="color:#e6db74">{9th}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">abstract&lt;/span> = &lt;span style="color:#e6db74">{Please Read Notes: Brand New, International Softcover
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Edition, Printed in black and white pages, minor self wear on
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> the cover or pages, Sale restriction may be printed on the
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> book, but Book name, contents, and author are exactly same as
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Hardcover Edition. Fast delivery through DHL/FedEx express.}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="operating-systems-design-and-implementation--3rd-edition">Operating Systems Design and Implementation (3rd Edition)&lt;a class="anchor" href="#operating-systems-design-and-implementation--3rd-edition">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@book&lt;/span>{tanenbaum2005OperatingSysImplementation,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Tanenbaum, Andrew S and Woodhull, Albert S}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Operating Systems Design and Implementation (3rd Edition)}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2005&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">isbn&lt;/span> = &lt;span style="color:#ae81ff">0131429388&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">{Prentice-Hall, Inc.}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">address&lt;/span> = &lt;span style="color:#e6db74">{USA}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h3 id="rtos">RTOS&lt;a class="anchor" href="#rtos">#&lt;/a>&lt;/h3>
&lt;h4 id="operating-systems-for-low-end-devices-in-the-internet-of-things-a-survey">Operating Systems for Low-End Devices in the Internet of Things: A Survey&lt;a class="anchor" href="#operating-systems-for-low-end-devices-in-the-internet-of-things-a-survey">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@article&lt;/span>{Hahm2015OSForLowEndDevice,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{O. {Hahm} and E. {Baccelli} and H. {Petersen} and N.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> {Tsiftes}}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">journal&lt;/span> = &lt;span style="color:#e6db74">{IEEE Internet of Things Journal}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Operating Systems for Low-End Devices in the Internet of
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Things: A Survey}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2016&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">volume&lt;/span> = &lt;span style="color:#ae81ff">3&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">number&lt;/span> = &lt;span style="color:#ae81ff">5&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">pages&lt;/span> = &lt;span style="color:#e6db74">{720-734}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">abstract&lt;/span> = &lt;span style="color:#e6db74">{The Internet of Things (IoT) is projected to soon
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> interconnect tens of billions of new devices, in large part
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> also connected to the Internet. IoT devices include both
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> high-end devices which can use traditional go-to operating
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> systems (OSs) such as Linux, and low-end devices which cannot,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> due to stringent resource constraints, e.g., very limited
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> memory, computational power, and power supply. However,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> large-scale IoT software development, deployment, and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> maintenance requires an appropriate OS to build upon. In this
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> paper, we thus analyze in detail the specific requirements
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> that an OS should satisfy to run on low-end IoT devices, and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> we survey applicable OSs, focusing on candidates that could
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> become an equivalent of Linux for such devices, i.e., a
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> one-size-fits-most, open source OS for low-end IoT devices.}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">keywords&lt;/span> = &lt;span style="color:#e6db74">{Internet of Things;mobile computing;operating systems
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> (computers);software maintenance;software maintenance;software
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> deployment;software development;IoT;Internet of Things;low-end
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> device;OS;operating system;Random access
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> memory;Hardware;Internet of things;Operating
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> systems;Standards;Embedded software;Internet of Things
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> (IoT);low-power electronics;operating system (OS)}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">doi&lt;/span> = &lt;span style="color:#e6db74">{10.1109/JIOT.2015.2505901}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">ISSN&lt;/span> = &lt;span style="color:#e6db74">{2327-4662}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">month&lt;/span> = &lt;span style="color:#e6db74">{Oct}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h3 id="synchronization">Synchronization&lt;a class="anchor" href="#synchronization">#&lt;/a>&lt;/h3>
&lt;h4 id="little-book-of-semaphores">Little book of semaphores&lt;a class="anchor" href="#little-book-of-semaphores">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@book&lt;/span>{LittleBookOfSemaphores,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{The little book of semaphores}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Downey, Allen}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">volume&lt;/span> = &lt;span style="color:#ae81ff">2&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">number&lt;/span> = &lt;span style="color:#ae81ff">2&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2008&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">{Green Tea Press}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">url&lt;/span> = &lt;span style="color:#e6db74">&amp;#34;https://github.com/AllenDowney/LittleBookOfSemaphores&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h2 id="computer-architecture">Computer Architecture&lt;a class="anchor" href="#computer-architecture">#&lt;/a>&lt;/h2>
&lt;h3 id="network-on-chip--noc">Network-On-Chip (NoC)&lt;a class="anchor" href="#network-on-chip--noc">#&lt;/a>&lt;/h3>
&lt;h4 id="redes-em-chip-arquiteturas-e-modelos-para-avaliação-de-área-e-desempenho">Redes-em-Chip: arquiteturas e modelos para avaliação de área e desempenho&lt;a class="anchor" href="#redes-em-chip-arquiteturas-e-modelos-para-avalia%c3%a7%c3%a3o-de-%c3%a1rea-e-desempenho">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@phdthesis&lt;/span>{RedesEmChipArquiteturasEmodelosParaAvaliacaoDeAreaEdesempenho,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Cesar Albenes Zeferino}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Redes-em-Chip: arquiteturas e modelos para avaliação de
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> área e desempenho}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2003&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">school&lt;/span> = &lt;span style="color:#e6db74">{Universidade Federal do Rio Grande do Sul}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">address&lt;/span> = &lt;span style="color:#e6db74">{Porto Alegre, RS, Brasil}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">abstract&lt;/span> = &lt;span style="color:#e6db74">{Com o advento dos processos submicrônicos, a capacidade de
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> integração de transistores tem atingido níveis que
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> possibilitam a construção de um sistema completo em uma única
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> pastilha de silício. Esses sistemas, denominados sistemas
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> integrados, baseiam-se no reuso de blocos previamente
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> projetados e verificados, os quais são chamados de núcleos ou
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> blocos de propriedade intelectual. Os sistemas integrados
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> atuais incluem algumas poucas dezenas de núcleos, os quais são
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> interconectados por meio de arquiteturas de comunicação
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> baseadas em estruturas dedicadas de canais ponto-a-ponto ou em
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> estruturas reutilizáveis constituídas por canais multiponto,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> denominadas barramentos. Os futuros sistemas integrados irão
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> incluir de dezenas a centenas de núcleos em um mesmo chip com
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> até alguns bilhões de transistores, sendo que, para atender às
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> pressões do mercado e amortizar os custos de projeto entre
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> vários sistemas, é importante que todos os seus componentes
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> sejam reutilizáveis, incluindo a arquitetura de comunicação.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Das arquiteturas utilizadas atualmente, o barramento é a única
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> que oferece reusabilidade. Porém, o seu desempenho em
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> comunicação e o seu consumo de energia degradam com o
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> crescimento do sistema. Para atender aos requisitos dos
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> futuros sistemas integrados, uma nova alternativa de
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> arquitetura de comunicação tem sido proposta na comunidade
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> acadêmica. Essa arquitetura, denominada rede-em-chip,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> baseia-se nos conceitos utilizados nas redes de interconexão
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> para computadores paralelos. Esta tese se situa nesse contexto
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> e apresenta uma arquitetura de rede-em-chip e um conjunto de
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> modelos para a avaliação de área e desempenho de arquiteturas
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> de comunicação para sistemas integrados. A arquitetura
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> apresentada é denominada SoCIN (System-on-Chip Interconnection
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Network) e apresenta como diferencial o fato de poder ser
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> dimensionada de modo a atender a requisitos de custo e
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> desempenho da aplicação alvo. Os modelos desenvolvidos
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> permitem a estimativa em alto nível da área em silício e do
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> desempenho de arquiteturas de comunicação do tipo barramento e
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> rede-em-chip. São apresentados resultados que demonstram a
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> efetividade das redes-em-chip e indicam as condições que
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> definem a aplicabilidade das mesmas.}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="principles-and-practices-of-interconnection-network">Principles and Practices of Interconnection Network&lt;a class="anchor" href="#principles-and-practices-of-interconnection-network">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@book&lt;/span>{principelsAndPracticesOfInterconnectionNetworks,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Dally, William James and Towles, Brian Patrick}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Principles and Practices of Interconnection Networks}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2004&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">isbn&lt;/span> = &lt;span style="color:#ae81ff">9780080497808&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">{Morgan Kaufmann Publishers Inc.}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">address&lt;/span> = &lt;span style="color:#e6db74">{San Francisco, CA, USA}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">abstract&lt;/span> = &lt;span style="color:#e6db74">{One of the greatest challenges faced by designers of
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> digital systems is optimizing the communication and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> interconnection between system components. Interconnection
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> networks offer an attractive and economical solution to this
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> communication crisis and are fast becoming pervasive in
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> digital systems. Current trends suggest that this
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> communication bottleneck will be even more problematic when
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> designing future generations of machines. Consequently, the
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> anatomy of an interconnection network router and science of
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> interconnection network design will only grow in importance in
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> the coming years. This book offers a detailed and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> comprehensive presentation of the basic principles of
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> interconnection network design, clearly illustrating them with
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> numerous examples, chapter exercises, and case studies. It
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> incorporates hardware-level descriptions of concepts, allowing
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> a designer to see all the steps of the process from abstract
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> design to concrete implementation. ·Case studies throughout
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> the book draw on extensive author experience in designing
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> interconnection networks over a period of more than twenty
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> years, providing real world examples of what works, and what
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> doesn&amp;#39;t. ·Tightly couples concepts with implementation costs
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> to facilitate a deeper understanding of the tradeoffs in the
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> design of a practical network. ·A set of examples and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> exercises in every chapter help the reader to fully understand
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> all the implications of every design decision. Table of
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Contents Chapter 1 Introduction to Interconnection Networks
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 1.1 Three Questions About Interconnection Networks 1.2 Uses of
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Interconnection Networks 1.3 Network Basics 1.4 History 1.5
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Organization of this Book Chapter 2 A Simple Interconnection
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Network 2.1 Network Specifications and Constraints 2.2
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Topology 2.3 Routing 2.4 Flow Control 2.5 Router Design 2.6
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Performance Analysis 2.7 Exercises Chapter 3 Topology Basics
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 3.1 Nomenclature 3.2 Traffic Patterns 3.3 Performance 3.4
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Packaging Cost 3.5 Case Study: The SGI Origin 2000 3.6
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Bibliographic Notes 3.7 Exercises Chapter 4 Butterfly Networks
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 4.1 The Structure of Butterfly Networks 4.2 Isomorphic
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Butterflies 4.3 Performance and Packaging Cost 4.4 Path
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Diversity and Extra Stages 4.5 Case Study: The BBN Butterfly
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 4.6 Bibliographic Notes 4.7 Exercises Chapter 5 Torus Networks
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 5.1 The Structure of Torus Networks 5.2 Performance 5.3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Building Mesh and Torus Networks 5.4 Express Cubes 5.5 Case
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Study: The MIT J-Machine 5.6 Bibliographic Notes 5.7 Exercises
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Chapter 6 Non-Blocking Networks 6.1 Non-Blocking vs.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Non-Interfering Networks 6.2 Crossbar Networks 6.3 Clos
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Networks 6.4 Benes Networks 6.5 Sorting Networks 6.6 Case
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Study: The Velio VC2002 (Zeus) Grooming Switch 6.7
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Bibliographic Notes 6.8 Exercises Chapter 7 Slicing and Dicing
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 7.1 Concentrators and Distributors 7.2 Slicing and Dicing 7.3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Slicing Multistage Networks 7.4 Case Study: Bit Slicing in the
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Tiny Tera 7.5 Bibliographic Notes 7.6 Exercises Chapter 8
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Routing Basics 8.1 A Routing Example 8.2 Taxonomy of Routing
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Algorithms 8.3 The Routing Relation 8.4 Deterministic Routing
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 8.5 Case Study: Dimension-Order Routing in the Cray T3D 8.6
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Bibliographic Notes 8.7 Exercises Chapter 9 Oblivious Routing
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 9.1 Valiant&amp;#39;s Randomized Routing Algorithm 9.2 Minimal
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Oblivious Routing 9.3 Load-Balanced Oblivious Routing 9.4
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Analysis of Oblivious Routing 9.5 Case Study: Oblivious
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Routing in the Avici Terabit Switch Router(TSR) 9.6
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Bibliographic Notes 9.7 Exercises Chapter 10 Adaptive Routing
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 10.1 Adaptive Routing Basics 10.2 Minimal Adaptive Routing
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 10.3 Fully Adaptive Routing 10.4 Load-Balanced Adaptive
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Routing 10.5 Search-Based Routing 10.6 Case Study: Adaptive
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Routing in the Thinking Machines CM-5 10.7 Bibliographic Notes
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 10.8 Exercises Chapter 11 Routing Mechanics 11.1 Table-Based
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Routing 11.2 Algorithmic Routing 11.3 Case Study: Oblivious
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Source Routing in the IBM Vulcan Network 11.4 Bibliographic
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Notes 11.5 Exercises Chapter 12 Flow Control Basics 12.1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Resources and Allocation Units 12.2 Bufferless Flow Control
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 12.3 Circuit Switching 12.4 Bibliographic Notes 12.5 Exercises
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Chapter 13 Buffered Flow Control 13.1 Packet-Buffer Flow
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Control 13.2 Flit-Buffer Flow Control 13.3 Buffer Management
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> and Backpressure 13.4 Flit-Reservation Flow Control 13.5
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Bibliographic Notes 13.6 Exercises Chapter 14 Deadlock and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Livelock 14.1 Deadlock 14.2 Deadlock Avoidance 14.3 Adaptive
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Routing 14.4 Deadlock Recovery 14.5 Livelock 14.6 Case Study:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Deadlock Avoidance in the Cray T3E 14.7 Bibliographic Notes
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 14.8 Exercises Chapter 15 Quality of Service 15.1 Service
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Classes and Service Contracts 15.2 Burstiness and Network
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Delays 15.3 Implementation of Guaranteed Services 15.4
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Implementation of Best-Effort Services 15.5 Separation of
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Resources 15.6 Case Study: ATM Service Classes 15.7 Case
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Study: Virtual Networks in the Avici TSR 15.8 Bibliographic
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Notes 15.9 Exercises Chapter 16 Router Architecture 16.1 Basic
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Router Architecture 16.2 Stalls 16.3 Closing the Loop with
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Credits 16.4 Reallocating a Channel 16.5 Speculation and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Lookahead 16.6 Flit and Credit Encoding 16.7 Case Study: The
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Alpha 21364 Router 16.8 Bibliographic Notes 16.9 Exercises
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Chapter 17 Router Datapath Components 17.1 Input Buffer
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Organization 17.2 Switches 17.3 Output Organization 17.4 Case
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Study: The Datapath of the IBM Colony Router 17.5
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Bibliographic Notes 17.6 Exercises Chapter 18 Arbitration 18.1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Arbitration Timing 18.2 Fairness 18.3 Fixed Priority Arbiter
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 18.4 Variable Priority Iterative Arbiters 18.5 Matrix Arbiter
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 18.6 Queuing Arbiter 18.7 Exercises Chapter 19 Allocation 19.1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Representations 19.2 Exact Algorithms 19.3 Separable
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Allocators 19.4 Wavefront Allocator 19.5 Incremental vs. Batch
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Allocation 19.6 Multistage Allocation 19.7 Performance of
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Allocators 19.8 Case Study: The Tiny Tera Allocator 19.9
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Bibliographic Notes 19.10 Exercises Chapter 20 Network
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Interfaces 20.1 Processor-Network Interface 20.2 Shared-Memory
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Interface 20.3 Line-Fabric Interface 20.4 Case Study: The MIT
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> M-Machine Network Interface 20.5 Bibliographic Notes 20.6
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Exercises Chapter 21 Error Control 411 21.1 Know Thy Enemy:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Failure Modes and Fault Models 21.2 The Error Control Process:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Detection, Containment, and Recovery 21.3 Link Level Error
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Control 21.4 Router Error Control 21.5 Network-Level Error
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Control 21.6 End-to-end Error Control 21.7 Bibliographic Notes
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 21.8 Exercises Chapter 22 Buses 22.1 Bus Basics 22.2 Bus
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Arbitration 22.3 High Performance Bus Protocol 22.4 From Buses
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> to Networks 22.5 Case Study: The PCI Bus 22.6 Bibliographic
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Notes 22.7 Exercises Chapter 23 Performance Analysis 23.1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Measures of Interconnection Network Performance 23.2 Analysis
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 23.3 Validation 23.4 Case Study: Efficiency and Loss in the
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> BBN Monarch Network 23.5 Bibliographic Notes 23.6 Exercises
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Chapter 24 Simulation 24.1 Levels of Detail 24.2 Network
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Workloads 24.3 Simulation Measurements 24.4 Simulator Design
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 24.5 Bibliographic Notes 24.6 Exercises Chapter 25 Simulation
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Examples 495 25.1 Routing 25.2 Flow Control Performance 25.3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Fault Tolerance Appendix A Nomenclature Appendix B Glossary
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Appendix C Network Simulator&lt;/span>&lt;span style="color:#e6db74">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h3 id="fault-tolerance">Fault tolerance&lt;a class="anchor" href="#fault-tolerance">#&lt;/a>&lt;/h3>
&lt;h4 id="fault-tolerant-computer-architecture--synthesis-lectures-on-computer-architecture">Fault Tolerant Computer Architecture (Synthesis Lectures on Computer Architecture)&lt;a class="anchor" href="#fault-tolerant-computer-architecture--synthesis-lectures-on-computer-architecture">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@book&lt;/span>{Sorin2009FaultTolerantComputerArchitecture,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Sorin, Daniel J.}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Fault Tolerant Computer Architecture}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2009&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">isbn&lt;/span> = &lt;span style="color:#ae81ff">1598299530&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">{Morgan and Claypool Publishers}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">abstract&lt;/span> = &lt;span style="color:#e6db74">{For many years, most computer architects have pursued one
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> primary goal: performance. Architects have translated the
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> ever-increasing abundance of ever-faster transistors provided
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> by Moore&amp;#39;s law into remarkable increases in performance.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Recently, however, the bounty provided by Moore&amp;#39;s law has been
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> accompanied by several challenges that have arisen as devices
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> have become smaller, including a decrease in dependability due
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> to physical faults. In this book, we focus on the
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> dependability challenge and the fault tolerance solutions that
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> architects are developing to overcome it. The two main
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> purposes of this book are to explore the key ideas in
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> fault-tolerant computer architecture and to present the
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> current state-of-the-art - over approximately the past 10
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> years - in academia and industry. Table of Contents:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Introduction / Error Detection / Error Recovery / Diagnosis /
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Self-Repair / The Future}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="single-event-effects-in-aerospace">Single event effects in aerospace&lt;a class="anchor" href="#single-event-effects-in-aerospace">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@book&lt;/span>{Petersen2011SingleEventEfefctsInAerospace,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Petersen, Edward}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">address&lt;/span> = &lt;span style="color:#e6db74">{Piscataway, N.J.?}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">booktitle&lt;/span> = &lt;span style="color:#e6db74">{Single event effects in aerospace}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">isbn&lt;/span> = &lt;span style="color:#ae81ff">9780470767498&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">{IEEE Press}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">keywords&lt;/span> = &lt;span style="color:#e6db74">{Astrionics -- Protection}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">language&lt;/span> = &lt;span style="color:#e6db74">{eng}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">lccn&lt;/span> = &lt;span style="color:#ae81ff">2011002191&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Single event effects in aerospace / Edward Petersen.}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="overview-of-single-event-effects">Overview of single event effects&lt;a class="anchor" href="#overview-of-single-event-effects">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@book&lt;/span>{buchner2015overview,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Overview of single event effects}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Buchner, S}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">booktitle&lt;/span> = &lt;span style="color:#e6db74">{Proc. 11th Int. School Effects Radiation Embedded Syst.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Space Appl.(SERESSA)}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">pages&lt;/span> = &lt;span style="color:#e6db74">{62--69}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2015&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="draft-single-event-effects-specification">Draft - Single Event Effects Specification&lt;a class="anchor" href="#draft-single-event-effects-specification">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@online&lt;/span>{NASARadEff,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Draft - Single Event Effects Specification}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{{The Radiation Effects and Analysis Group (REAG)}}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">shortauthor&lt;/span> = &lt;span style="color:#e6db74">{REAG}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">organization&lt;/span> = &lt;span style="color:#e6db74">{{National Aeronautics and Space Administration (NASA)}}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2017&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">url&lt;/span> = &lt;span style="color:#e6db74">&amp;#34;https://radhome.gsfc.nasa.gov/radhome/papers/seespec.htm&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">note&lt;/span> = &lt;span style="color:#e6db74">{last accessed on 24/01/2021}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="single-event-effects-mitigation-techniques-report">Single event effects mitigation techniques report&lt;a class="anchor" href="#single-event-effects-mitigation-techniques-report">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@article&lt;/span>{mutuel2016single,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Single event effects mitigation techniques report}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Mutuel, LH}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">journal&lt;/span> = &lt;span style="color:#e6db74">{Federal Aviation Administration, William J. Hughes
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Technical Center, Aviation Research Division, Atlantic City
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> International Airport, Final report DOT/FAA/TC-15/62}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2016&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="circuit-level-design-methods-to-mitigate-soft-errors">Circuit Level Design Methods to Mitigate Soft Errors&lt;a class="anchor" href="#circuit-level-design-methods-to-mitigate-soft-errors">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@inproceedings&lt;/span>{reis2020CircutLevelDesignmethods,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{R. {Reis} and C. {Meinhardt} and A. L. {Zimpeck} and L. H.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> {Brendler} and L. {Moraes}}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">booktitle&lt;/span> = &lt;span style="color:#e6db74">{2020 IEEE Latin-American Test Symposium (LATS)}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Circuit Level Design Methods to Mitigate Soft Errors}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2020&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">pages&lt;/span> = &lt;span style="color:#e6db74">{1-3}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">doi&lt;/span> = &lt;span style="color:#e6db74">{10.1109/LATS49555.2020.9093683}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="swift-software-implemented-fault-tolerance">SWIFT: software implemented fault tolerance&lt;a class="anchor" href="#swift-software-implemented-fault-tolerance">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@INPROCEEDINGS&lt;/span>{reis2005SwitfSoftware,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{G. A. {Reis} and J. {Chang} and N. {Vachharajani} and R.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> {Rangan} and D. I. {August}}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">booktitle&lt;/span> = &lt;span style="color:#e6db74">{International Symposium on Code Generation and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Optimization}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{SWIFT: software implemented fault tolerance}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2005&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">pages&lt;/span> = &lt;span style="color:#e6db74">{243-254}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">doi&lt;/span> = &lt;span style="color:#e6db74">{10.1109/CGO.2005.34}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="applying-compiler-automated-software-fault-tolerance-to-multiple-processor-platforms">Applying Compiler-Automated Software Fault Tolerance to Multiple Processor Platforms&lt;a class="anchor" href="#applying-compiler-automated-software-fault-tolerance-to-multiple-processor-platforms">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@article&lt;/span>{james2019applying,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Applying Compiler-Automated Software Fault Tolerance to
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Multiple Processor Platforms}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{James, Benjamin and Quinn, Heather and Wirthlin, Michael
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> and Goeders, Jeffrey}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">journal&lt;/span> = &lt;span style="color:#e6db74">{IEEE Transactions on Nuclear Science}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">volume&lt;/span> = &lt;span style="color:#ae81ff">67&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">number&lt;/span> = &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">pages&lt;/span> = &lt;span style="color:#e6db74">{321--327}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2019&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">{IEEE}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="cdfedt-comparison-of-data-flow-error-detection-techniques-in-embedded-systems-an-empirical-study">CDFEDT: Comparison of Data Flow Error Detection Techniques in Embedded Systems: An Empirical Study&lt;a class="anchor" href="#cdfedt-comparison-of-data-flow-error-detection-techniques-in-embedded-systems-an-empirical-study">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@inproceedings&lt;/span>{thati2018ComparisonOfDataFlowError,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Thati, Venu Babu and Vankeirsbilck, Jens and Penneman,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Niels and Pissoort, Davy and Boydens, Jeroen}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{CDFEDT: Comparison of Data Flow Error Detection Techniques
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> in Embedded Systems: An Empirical Study}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2018&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">isbn&lt;/span> = &lt;span style="color:#ae81ff">9781450364485&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">{Association for Computing Machinery}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">address&lt;/span> = &lt;span style="color:#e6db74">{New York, NY, USA}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">url&lt;/span> = &lt;span style="color:#e6db74">{https://doi.org/10.1145/3230833.3230854}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">doi&lt;/span> = &lt;span style="color:#e6db74">{10.1145/3230833.3230854}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">abstract&lt;/span> = &lt;span style="color:#e6db74">{Embedded systems used in harsh environments are susceptible
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> to bit-flips, which can cause data flow errors. In order to
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> increase the reliability of embedded systems, numerous data
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> flow error detection techniques have already been developed.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> It is, however, difficult to identify the best technique to
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> apply, due to differences in the way they are evaluated in
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> current literature.This paper presents an empirical
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> comparative study of seven existing techniques. We measured
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> fault coverage, execution time overhead, and code size
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> overhead. We conclude that soft error detection using software
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> redundancy (SEDSR) and error detection by duplicated
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> instructions (EDDI) have a better trade-off between fault
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> coverage and overheads than software-implemented fault
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> tolerance (SWIFT), critical block duplication (CBD), and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> overhead reduction (VAR3+). Error detection by diverse data
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> and duplicated instructions (ED4I or EDDDDI) and software
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> approach (SA) had better fault coverage at the expense of
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> execution time and code size usage.}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">booktitle&lt;/span> = &lt;span style="color:#e6db74">{Proceedings of the 13th International Conference on
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Availability, Reliability and Security}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">articleno&lt;/span> = &lt;span style="color:#ae81ff">23&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">numpages&lt;/span> = &lt;span style="color:#ae81ff">9&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">keywords&lt;/span> = &lt;span style="color:#e6db74">{Fault tolerance, Fault coverage, Bit-flips, Data flow error
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> detection, Comparison}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">location&lt;/span> = &lt;span style="color:#e6db74">{Hamburg, Germany}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">series&lt;/span> = &lt;span style="color:#e6db74">{ARES 2018}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h3 id="introductory">Introductory&lt;a class="anchor" href="#introductory">#&lt;/a>&lt;/h3>
&lt;h4 id="structured-computer-organization--5th-edition">Structured Computer Organization (5th Edition)&lt;a class="anchor" href="#structured-computer-organization--5th-edition">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@book&lt;/span>{tanenbaum2005structuredorg,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Tanenbaum, Andrew S.}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Structured Computer Organization (5th Edition)}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2005&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">isbn&lt;/span> = &lt;span style="color:#ae81ff">0131485210&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">{Prentice-Hall, Inc.}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">address&lt;/span> = &lt;span style="color:#e6db74">{USA}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="computer-organization-and-design-fifth-edition-the-hardware-software-interface">Computer Organization and Design, Fifth Edition: The Hardware/Software Interface&lt;a class="anchor" href="#computer-organization-and-design-fifth-edition-the-hardware-software-interface">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@book&lt;/span>{patterson2013ComputerOrg,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Patterson, David A. and Hennessy, John L.}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Computer Organization and Design, Fifth Edition: The
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Hardware/Software Interface}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2013&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">isbn&lt;/span> = &lt;span style="color:#ae81ff">0124077269&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">{Morgan Kaufmann Publishers Inc.}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">address&lt;/span> = &lt;span style="color:#e6db74">{San Francisco, CA, USA}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">edition&lt;/span> = &lt;span style="color:#e6db74">{5th}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">abstract&lt;/span> = &lt;span style="color:#e6db74">{The 5th edition of Computer Organization and Design moves
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> forward into the post-PC era with new examples, exercises, and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> material highlighting the emergence of mobile computing and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> the cloud. This generational change is emphasized and explored
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> with updated content featuring tablet computers, cloud
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> infrastructure, and the ARM (mobile computing devices) and x86
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> (cloud computing) architectures. Because an understanding of
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> modern hardware is essential to achieving good performance and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> energy efficiency, this edition adds a new concrete example,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;#34;Going Faster,&amp;#34; used throughout the text to demonstrate
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> extremely effective optimization techniques. Also new to this
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> edition is discussion of the &amp;#34;Eight Great Ideas&amp;#34; of computer
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> architecture. As with previous editions, a MIPS processor is
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> the core used to present the fundamentals of hardware
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> technologies, assembly language, computer arithmetic,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> pipelining, memory hierarchies and I/O. Instructors looking
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> for4th Edition teaching materials should e-mail
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> textbook@elsevier.com. Includes new examples, exercises, and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> material highlighting the emergence of mobile computing and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> the Cloud. Covers parallelism in depth with examples and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> content highlighting parallel hardware and software topics
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Features the Intel Core i7, ARM Cortex-A8 and NVIDIA Fermi GPU
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> as real-world examples throughout the book Adds a new concrete
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> example, &amp;#34;Going Faster,&amp;#34; to demonstrate how understanding
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> hardware can inspire software optimizations that improve
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> performance by 200 times. Discusses and highlights the &amp;#34;Eight
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Great Ideas&amp;#34; of computer architecture: Performance via
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Parallelism; Performance via Pipelining; Performance via
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Prediction; Design for Moore&amp;#39;s Law; Hierarchy of Memories;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Abstraction to Simplify Design; Make the Common Case Fast; and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Dependability via Redundancy. Includes a full set of updated
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> and improved exercises.}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="computer-organization-and-architecture-designing-for-performance">Computer Organization and Architecture: Designing for Performance&lt;a class="anchor" href="#computer-organization-and-architecture-designing-for-performance">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@book&lt;/span>{stallings2009ComputerOrgPerf,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Stallings, William}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Computer Organization and Architecture: Designing for
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Performance}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2009&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">isbn&lt;/span> = &lt;span style="color:#ae81ff">9780136073734&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">{Prentice Hall Press}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">address&lt;/span> = &lt;span style="color:#e6db74">{USA}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">edition&lt;/span> = &lt;span style="color:#e6db74">{8th}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">abstract&lt;/span> = &lt;span style="color:#e6db74">{KEY BENEFIT: Learn the fundamentals of processor and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> computer design from the newest edition of this award winning
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> text. KEY TOPICS: Introduction; Computer Evolution and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Performance; A Top-Level View of Computer Function and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Interconnection; Cache Memory; Internal Memory Technology;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> External Memory; I/O; Operating System Support; Computer
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Arithmetic; Instruction Sets: Characteristics and Functions;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Instruction Sets: Addressing Modes and Formats; CPU Structure
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> and Function; RISCs; Instruction-Level Parallelism and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Superscalar Processors; Control Unit Operation;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Microprogrammed Control; Parallel Processing; Multicore
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Architecture. Online Chapters: Number Systems; Digital Logic;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Assembly Language, Assemblers, and Compilers; The IA-64
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Architecture. MARKET: Ideal for professionals in computer
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> science, computer engineering, and electrical engineering.}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h3 id="risc-v">RISC-V&lt;a class="anchor" href="#risc-v">#&lt;/a>&lt;/h3>
&lt;h4 id="the-risc-v-instruction-set-manual-volume-ii-privileged-architecture-version-v-dot-20190608">The RISC-V Instruction Set Manual Volume II: Privileged Architecture Version v.20190608&lt;a class="anchor" href="#the-risc-v-instruction-set-manual-volume-ii-privileged-architecture-version-v-dot-20190608">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@techreport&lt;/span>{riscv2019PrivilegeArchitecture,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">Author&lt;/span> = &lt;span style="color:#e6db74">{Waterman, Andrew and Lee, Yunsup and Avizienis, Rimas and Patterson, David A. and Asanović, Krste}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">Title&lt;/span> = &lt;span style="color:#e6db74">{The RISC-V Instruction Set Manual Volume II: Privileged Architecture Ratified Version 1.11}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">Institution&lt;/span> = &lt;span style="color:#e6db74">{EECS Department, University of California, Berkeley}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">Year&lt;/span> = &lt;span style="color:#e6db74">{2019}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">Month&lt;/span> = &lt;span style="color:#e6db74">{Jun}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">URL&lt;/span> = &lt;span style="color:#e6db74">{https://github.com/riscv/riscv-isa-manual/releases/download/Ratified-IMFDQC-and-Priv-v1.11/riscv-privileged-20190608.pdf}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">Number&lt;/span> = &lt;span style="color:#e6db74">{v.20190608}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="the-case-for-risc-v-in-space">The Case for RISC-V in Space&lt;a class="anchor" href="#the-case-for-risc-v-in-space">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@inproceedings&lt;/span>{ottavi2019TheCaseForRiscvInSpace,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">&amp;#34;Di Mascio, Stefano and Menicucci, Alessandra and Furano,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Gianluca and Monteleone, Claudio and Ottavi, Marco&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">editor&lt;/span> = &lt;span style="color:#e6db74">&amp;#34;Saponara, Sergio and De Gloria, Alessandro&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">&amp;#34;The Case for RISC-V in Space&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">booktitle&lt;/span> = &lt;span style="color:#e6db74">&amp;#34;Applications in Electronics Pervading Industry, Environment
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> and Society&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2019&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">&amp;#34;Springer International Publishing&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">address&lt;/span> = &lt;span style="color:#e6db74">&amp;#34;Cham&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">pages&lt;/span> = &lt;span style="color:#e6db74">&amp;#34;319--325&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">abstract&lt;/span> = &lt;span style="color:#e6db74">&amp;#34;This paper presentsDi Mascio, Stefano preliminary position
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> on theMenicucci, Alessandra use of the novel, free and open
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> RISC-V Instruction Set Architecture (ISA) for on-boardFurano,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Gianluca electronics in space. The modular nature of this ISA,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> the availability of a rich software ecosystem, a rapidly
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> growing communityMonteleone, Claudio and a pool of open-source
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> IP cores will allow Space Industry to spin-in developments
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> from terrestrial fields (in terms of security, artificial
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> intelligence, support forOttavi, Marco operating systems,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> hardware acceleration etc.) while focusing its efforts mainly
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> on aspects related to the specific needs of on-board
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> electronics for space applications (e.g. fault tolerance,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> observability, error signaling, etc.). This will improve reuse
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> and avoid the necessity of developments from scratch when not
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> strategically needed, eventually increasing productivity and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> reducing costs. The use of an open, non proprietary ISA will
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> allow ad-hoc design of microarchitecture-level soft error
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> countermeasures that can greatly increase the robustness of
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Application Specific Standard Products (ASSP) and FPGA
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> implementations.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">isbn&lt;/span> = &lt;span style="color:#e6db74">&amp;#34;978-3-030-11973-7&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="the-risc-v-reader-an-open-architecture-atlas">The RISC-V Reader: An Open Architecture Atlas&lt;a class="anchor" href="#the-risc-v-reader-an-open-architecture-atlas">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@book&lt;/span>{patterson2017RiscvAtlas,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Patterson, David and Waterman, Andrew}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{The RISC-V Reader: An Open Architecture Atlas}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2017&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">isbn&lt;/span> = &lt;span style="color:#ae81ff">0999249118&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">{Strawberry Canyon}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">edition&lt;/span> = &lt;span style="color:#e6db74">{1st}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">abstract&lt;/span> = &lt;span style="color:#e6db74">{The RISC-V Reader is a concise introduction and reference
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> for embedded systems programmers, students, and the curious to
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> a modern, popular, open architecture. RISC-V spans from the
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> cheapest 32-bit embedded microcontroller to the fastest 64-bit
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> cloud computer. The text shows how RISC-V followed the good
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> ideas of past architectures while avoiding their mistake.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Highlights include: Introduces the RISC-V instruction set in
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> only 100 pages, including 75 figures An Instruction Translator
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Guide to help translate assembly language programs from ARM-32
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> and x86-32 instruction sets to RISC-V 2-page RISC-V Reference
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Card that summarizes all instructions 50-page Instruction
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Glossary that defines every instruction in detail 75
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> spotlights of good architecture design using margin icons 50
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> sidebars with interesting commentary and RISC-V history 25
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> quotes to pass along wisdom of noted scientists and engineers
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Ten chapters introduce each component of the modular RISC-V
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> instruction set--often contrasting code compiled from C to
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> RISC-V versus the older ARM, Intel, and MIPS
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> architectures--but readers can start programming after Chapter
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 2. Praise for The RISC-V Reader: This timely book concisely
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> describes the simple, free and open RISC-V ISA that is
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> experiencing rapid uptake in many different computing sectors.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Krste Asanovic, University of California, Berkeley, one of the
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> four architects of RISC-V I like RISC-V and this book as they
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> are elegantbrief, to the point, and complete. C. Gordon Bell,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> a computer architecture pioneer This handy little book
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> effortlessly summarizes all the essential elements of the
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> RISC-V Instruction Set Architecture, a perfect reference guide
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> for students and practitioners alike. Professor Randy Katz,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> University of California, Berkeley, one of the inventors of
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> RAID storage systems This clearly-written book offers a good
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> introduction to RISC-V, augmented with insightful comments on
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> its evolutionary history and comparisons with other familiar
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> architectures. John Mashey, one of the designers of the MIPS
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> architecture This book tells what RISC-V can do and why its
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> designers chose to endow it with those abilities. Ivan
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Sutherland, the father of computer graphics RISC-V will change
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> the world, and this book will help you become part of that
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> change. Professor Michael B. Taylor, University of Washington
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> This book will be an invaluable reference for anyone working
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> with the RISC-V ISA. Megan Wachs, PhD, SiFive Engineer}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="the-risc-v-instruction-set-manual--2014">The RISC-V Instruction Set Manual (2014)&lt;a class="anchor" href="#the-risc-v-instruction-set-manual--2014">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@misc&lt;/span>{Waterman14therisc-v,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Andrew Waterman and Yunsup Lee and David A. Patterson and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Krste Asanovic and Volume I User-level Isa and Andrew Waterman
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> and Yunsup Lee and David Patterson}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{The RISC-V Instruction Set Manual}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2014&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="computer-organization-and-design-risc-v-edition-the-hardware-software-interface">Computer Organization and Design RISC-V Edition: The Hardware Software Interface&lt;a class="anchor" href="#computer-organization-and-design-risc-v-edition-the-hardware-software-interface">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@book&lt;/span>{patterson2017ComputerOrgRiscvEdition,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Patterson, David A. and Hennessy, John L.}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Computer Organization and Design RISC-V Edition: The
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Hardware Software Interface}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2017&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">isbn&lt;/span> = &lt;span style="color:#ae81ff">0128122757&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">{Morgan Kaufmann Publishers Inc.}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">address&lt;/span> = &lt;span style="color:#e6db74">{San Francisco, CA, USA}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">edition&lt;/span> = &lt;span style="color:#e6db74">{1st}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">abstract&lt;/span> = &lt;span style="color:#e6db74">{The new RISC-V Edition of Computer Organization and Design
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> features the RISC-V open source instruction set architecture,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> the first open source architecture designed to be used in
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> modern computing environments such as cloud computing, mobile
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> devices, and other embedded systems. With the post-PC era now
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> upon us, Computer Organization and Design moves forward to
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> explore this generational change with examples, exercises, and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> material highlighting the emergence of mobile computing and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> the Cloud. Updated content featuring tablet computers, Cloud
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> infrastructure, and the x86 (cloud computing) and ARM (mobile
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> computing devices) architectures is included. An online
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> companion Web site provides advanced content for further
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> study, appendices, glossary, references, and recommended
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> reading. Features RISC-V, the first such architecture designed
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> to be used in modern computing environments, such as cloud
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> computing, mobile devices, and other embedded systems Includes
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> relevant examples, exercises, and material highlighting the
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> emergence of mobile computing and the cloud}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h2 id="software-engineering">Software Engineering&lt;a class="anchor" href="#software-engineering">#&lt;/a>&lt;/h2>
&lt;h3 id="embedded-systems">Embedded systems&lt;a class="anchor" href="#embedded-systems">#&lt;/a>&lt;/h3>
&lt;h4 id="modeling-c-based-embedded-system-using-uml-design">Modeling C-based embedded system using UML design&lt;a class="anchor" href="#modeling-c-based-embedded-system-using-uml-design">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@inproceedings&lt;/span>{wang2009modeling,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{ {Guoping Wang}}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">booktitle&lt;/span> = &lt;span style="color:#e6db74">{2009 International Conference on Mechatronics and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Automation}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Modeling C-based embedded system using UML design}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2009&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">pages&lt;/span> = &lt;span style="color:#e6db74">{2973-2977}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">abstract&lt;/span> = &lt;span style="color:#e6db74">{Unified Modeling Language (UML) 2.0 is emerging in the area
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> of modeling the design of embedded system. The most common
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> implementation for the embedded-system models has been C++. On
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> one hand, the most common programming language for embedded
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> system overall by far is the functional language C. On the
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> other hand, the UML is used almost exclusively for
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> object-oriented systems development. This paper present an
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> approach of applying UML in the functionally-oriented embedded
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> systems design. This approach is illustrated using a stopwatch
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> design example.}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">keywords&lt;/span> = &lt;span style="color:#e6db74">{C++ language;embedded systems;functional languages;Unified
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Modeling Language;modeling C-based embedded system;UML
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> design;Unified Modeling Language;UML 2.0;C++;programming
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> language;functional language C;object-oriented systems
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> development;functionally-oriented embedded systems
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> design;stopwatch design;Embedded system;Unified modeling
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> language;Object oriented modeling;Computer languages;Embedded
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> computing;Real time systems;Costs;Energy
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> consumption;Mechatronics;Design automation;UML
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> modeling;embedded system
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> design;object-oriented;function-oriented}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">doi&lt;/span> = &lt;span style="color:#e6db74">{10.1109/ICMA.2009.5246023}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">ISSN&lt;/span> = &lt;span style="color:#e6db74">{2152-744X}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">month&lt;/span> = &lt;span style="color:#e6db74">{Aug}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h3 id="fault-tolerant">Fault tolerant&lt;a class="anchor" href="#fault-tolerant">#&lt;/a>&lt;/h3>
&lt;h4 id="basic-concepts-and-taxonomy-of-dependable-and-secure-computing">Basic concepts and taxonomy of dependable and secure computing&lt;a class="anchor" href="#basic-concepts-and-taxonomy-of-dependable-and-secure-computing">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@article&lt;/span>{avizienis2004ConceptsOfSecureComputing,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{A. {Avizienis} and J. -. {Laprie} and B. {Randell} and C.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> {Landwehr}}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">journal&lt;/span> = &lt;span style="color:#e6db74">{IEEE Transactions on Dependable and Secure Computing}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Basic concepts and taxonomy of dependable and secure
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> computing}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2004&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">volume&lt;/span> = &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">number&lt;/span> = &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">pages&lt;/span> = &lt;span style="color:#e6db74">{11-33}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">abstract&lt;/span> = &lt;span style="color:#e6db74">{This paper gives the main definitions relating to
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> dependability, a generic concept including a special case of
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> such attributes as reliability, availability, safety,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> integrity, maintainability, etc. Security brings in concerns
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> for confidentiality, in addition to availability and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> integrity. Basic definitions are given first. They are then
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> commented upon, and supplemented by additional definitions,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> which address the threats to dependability and security
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> (faults, errors, failures), their attributes, and the means
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> for their achievement (fault prevention, fault tolerance,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> fault removal, fault forecasting). The aim is to explicate a
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> set of general concepts, of relevance across a wide range of
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> situations and, therefore, helping communication and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> cooperation among a number of scientific and technical
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> communities, including ones that are concentrating on
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> particular types of system, of system failures, or of causes
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> of system failures.}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">keywords&lt;/span> = &lt;span style="color:#e6db74">{fault tolerant computing;data privacy;security of
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> data;system recovery;software reliability;taxonomy;dependable
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> computing;secure computing;system reliability;system
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> availability;system safety;system integrity;system
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> maintainability;fault prevention;fault tolerance;fault
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> removal;fault forecasting;system security;system
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> failures;system vulnerabilities;system
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> attacks;Taxonomy;Availability;Fault
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> tolerance;Safety;Maintenance;Communication system
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> security;Uncertainty;Standardization;Books;Index Terms-
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Dependability;security;trust;faults;errors;failures;vulnerabilities;attacks;fault
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> tolerance;fault removal;fault forecasting.}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">doi&lt;/span> = &lt;span style="color:#e6db74">{10.1109/TDSC.2004.2}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">ISSN&lt;/span> = &lt;span style="color:#e6db74">{1941-0018}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">month&lt;/span> = &lt;span style="color:#e6db74">{Jan}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="system-structure-for-software-fault-tolerance">System structure for Software Fault Tolerance&lt;a class="anchor" href="#system-structure-for-software-fault-tolerance">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@ARTICLE&lt;/span>{RandellSysStructureForSoftwareFaultTolerance,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Randell, Brian}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">journal&lt;/span> = &lt;span style="color:#e6db74">{IEEE Transactions on Software Engineering}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{System structure for software fault tolerance}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">1975&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">volume&lt;/span> = &lt;span style="color:#e6db74">{SE-1}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">number&lt;/span> = &lt;span style="color:#ae81ff">2&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">pages&lt;/span> = &lt;span style="color:#e6db74">{220-232}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">abstract&lt;/span> = &lt;span style="color:#e6db74">{Presents and discusses the rationale behind a method for
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> structuring complex computing systems by the use of what is
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> termed `recovery blocks,&amp;#39; `conversations,&amp;#39; and `fault-tolerant
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> interfaces.&amp;#39; The aim is to facilitate the provision of
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> dependable error detection and recovery facilities which can
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> cope with errors caused by residual design inadequacies,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> particularly in the system software, rather than merely the
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> occasional malfunctioning of hardware components.}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">doi&lt;/span> = &lt;span style="color:#e6db74">{10.1109/TSE.1975.6312842}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">ISSN&lt;/span> = &lt;span style="color:#e6db74">{1939-3520}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">month&lt;/span> = &lt;span style="color:#e6db74">{June}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h2 id="mathematics">Mathematics&lt;a class="anchor" href="#mathematics">#&lt;/a>&lt;/h2>
&lt;h3 id="binary">Binary&lt;a class="anchor" href="#binary">#&lt;/a>&lt;/h3>
&lt;h4 id="bit-twiddling-hacks">Bit Twiddling Hacks&lt;a class="anchor" href="#bit-twiddling-hacks">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@misc&lt;/span>{sean2005BitTwiddlingHacks,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{ Bit Twiddling Hacks }&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">url&lt;/span> = &lt;span style="color:#e6db74">{https://graphics.stanford.edu/~seander/bithacks.html}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">journal&lt;/span> = &lt;span style="color:#e6db74">{Bit Twiddling Hacks}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Sean Eron Anderson}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="binary-number-representation">Binary number representation&lt;a class="anchor" href="#binary-number-representation">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@misc&lt;/span>{binaryNumberRepresentation,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Unsigned Binary Integer}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">url&lt;/span> =
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">{https://www.mathcs.emory.edu/~cheung/Courses/255/others/BinNumReps.html}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">journal&lt;/span> = &lt;span style="color:#e6db74">{Binary Number Representations}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h4 id="what-are-bitwise-shift--bit-shift--operators-and-how-do-they-work">What are bitwise shift (bit-shift) operators and how do they work?&lt;a class="anchor" href="#what-are-bitwise-shift--bit-shift--operators-and-how-do-they-work">#&lt;/a>&lt;/h4>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@misc&lt;/span>{derekpark2008WhatAreBitwiseShift,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{What are bitwise shift (bit-shift) operators and how do
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> they work?}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">url&lt;/span> = &lt;span style="color:#e6db74">{https://stackoverflow.com/a/141873}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">journal&lt;/span> = &lt;span style="color:#e6db74">{What are bitwise shift (bit-shift) operators and how do
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> they work}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">{Stackoverflow}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Derek Park}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2008&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">month&lt;/span> = &lt;span style="color:#e6db74">{Sep}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h2 id="database">Database&lt;a class="anchor" href="#database">#&lt;/a>&lt;/h2>
&lt;h3 id="sql-databases-v-dot-nosql-databases">SQL databases v. NoSQL databases&lt;a class="anchor" href="#sql-databases-v-dot-nosql-databases">#&lt;/a>&lt;/h3>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@article&lt;/span>{stonerbraker2020SQLDatabasesvNoSQLDatabases,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Stonebraker, Michael}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{SQL Databases v. NoSQL Databases}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2010&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">issue_date&lt;/span> = &lt;span style="color:#e6db74">{April 2010}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">{Association for Computing Machinery}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">address&lt;/span> = &lt;span style="color:#e6db74">{New York, NY, USA}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">volume&lt;/span> = &lt;span style="color:#ae81ff">53&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">number&lt;/span> = &lt;span style="color:#ae81ff">4&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">issn&lt;/span> = &lt;span style="color:#e6db74">{0001-0782}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">url&lt;/span> = &lt;span style="color:#e6db74">{https://doi.org/10.1145/1721654.1721659}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">doi&lt;/span> = &lt;span style="color:#e6db74">{10.1145/1721654.1721659}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">abstract&lt;/span> = &lt;span style="color:#e6db74">{The Communications Web site, http://cacm.acm.org, features
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> more than a dozen bloggers in the BLOG@CACM community. In each
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> issue of Communications, we&amp;#39;ll publish excerpts from selected
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> posts.twitterFollow us on Twitter at
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> http://twitter.com/blogCACMMichael Stonebraker considers
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> several performance arguments in favor of NoSQL
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> databases---and finds them insufficient.}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">journal&lt;/span> = &lt;span style="color:#e6db74">{Commun. ACM}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">month&lt;/span> = apr,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">pages&lt;/span> = &lt;span style="color:#e6db74">{10–11}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">numpages&lt;/span> = &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h2 id="algorithms">Algorithms&lt;a class="anchor" href="#algorithms">#&lt;/a>&lt;/h2>
&lt;h3 id="lock-free-red-black-trees-using-cas">Lock-Free Red-Black Trees Using CAS&lt;a class="anchor" href="#lock-free-red-black-trees-using-cas">#&lt;/a>&lt;/h3>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@inproceedings&lt;/span>{Kim2011LockFreeRT,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span>=&lt;span style="color:#e6db74">{Lock-Free Red-Black Trees Using CAS}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span>=&lt;span style="color:#e6db74">{Jong Ho Kim and Helen Cameron and Peter C. J. Graham}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span>=&lt;span style="color:#e6db74">{2011}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h3 id="parallel-algorithms-for-red-black-trees">Parallel algorithms for red–black trees&lt;a class="anchor" href="#parallel-algorithms-for-red-black-trees">#&lt;/a>&lt;/h3>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@article&lt;/span>{park2001ParallelAlgorithms,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Parallel algorithms for red–black trees}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">journal&lt;/span> = &lt;span style="color:#e6db74">{Theoretical Computer Science}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">volume&lt;/span> = &lt;span style="color:#ae81ff">262&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">number&lt;/span> = &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">pages&lt;/span> = &lt;span style="color:#e6db74">{415-435}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2001&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">issn&lt;/span> = &lt;span style="color:#e6db74">{0304-3975}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">doi&lt;/span> = &lt;span style="color:#e6db74">{https://doi.org/10.1016/S0304-3975(00)00287-5}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">url&lt;/span> = &lt;span style="color:#e6db74">{https://www.sciencedirect.com/science/article/pii/S0304397500002875}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Heejin Park and Kunsoo Park}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">keywords&lt;/span> = &lt;span style="color:#e6db74">{Red–black trees, Balanced search trees, Parallel
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> algorithms, Dictionary operations}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">abstract&lt;/span> = &lt;span style="color:#e6db74">{We present parallel algorithms for the following four
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> operations on red–black trees: construction, search,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> insertion, and deletion. Our parallel algorithm for
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> constructing a red–black tree from a sorted list of n items
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> runs in O(1) time with n processors on the CRCW PRAM and runs
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> in O(loglogn) time with n/loglogn processors on the EREW PRAM.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Our construction algorithm does not require the assumptions
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> that previous construction algorithms used. Each of our
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> parallel algorithms for search, insertion, and deletion in
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> red–black trees runs in O(logn+logk) time with k processors on
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> the EREW PRAM, where k is the number of unsorted items to
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> search for, insert, or delete and n is the number of nodes in
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> a red–black tree.}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h3 id="introduction-to-algorithms">Introduction to algorithms&lt;a class="anchor" href="#introduction-to-algorithms">#&lt;/a>&lt;/h3>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@book&lt;/span>{introToAlgorithms2009,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Cormen, Thomas H. and Leiserson, Charles E. and Rivest,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Ronald L. and Stein, Clifford}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Introduction to Algorithms, Third Edition}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2009&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">isbn&lt;/span> = &lt;span style="color:#ae81ff">0262033844&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">{The MIT Press}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">edition&lt;/span> = &lt;span style="color:#e6db74">{3rd}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">abstract&lt;/span> = &lt;span style="color:#e6db74">{If you had to buy just one text on algorithms, Introduction
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> to Algorithms is a magnificent choice. The book begins by
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> considering the mathematical foundations of the analysis of
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> algorithms and maintains this mathematical rigor throughout
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> the work. The tools developed in these opening sections are
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> then applied to sorting, data structures, graphs, and a
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> variety of selected algorithms including computational
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> geometry, string algorithms, parallel models of computation,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> fast Fourier transforms (FFTs), and more. This book&amp;#39;s strength
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> lies in its encyclopedic range, clear exposition, and powerful
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> analysis. Pseudo-code explanation of the algorithms coupled
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> with proof of their accuracy makes this book is a great
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> resource on the basic tools used to analyze the performance of
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> algorithms.}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h3 id="toward-a-unique-representation-for-avl-and-red-black-trees">Toward a Unique Representation for AVL and Red-Black Trees&lt;a class="anchor" href="#toward-a-unique-representation-for-avl-and-red-black-trees">#&lt;/a>&lt;/h3>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@article&lt;/span>{BOUNIF2019,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{{Toward a Unique Representation for AVL and Red-Black
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> Trees}}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">journal&lt;/span> = &lt;span style="color:#e6db74">{{Computaci\~A\textthreesuperiorn y Sistemas}}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Bounif, Lynda AND Zegour, Djamel Eddine}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">ISSN&lt;/span> = &lt;span style="color:#e6db74">{1405-5546}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">language&lt;/span> = &lt;span style="color:#e6db74">{en}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">URL&lt;/span> = &lt;span style="color:#e6db74">{http://www.scielo.org.mx/scielo.php?script=sci_arttext&amp;amp;pid=S1405-55462019000200435&amp;amp;nrm=iso}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">volume&lt;/span> = &lt;span style="color:#ae81ff">23&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2019&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">month&lt;/span> = &lt;span style="color:#ae81ff">06&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">pages&lt;/span> = &lt;span style="color:#e6db74">{435 - 450}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">publisher&lt;/span> = &lt;span style="color:#e6db74">{scielomx}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">crossref&lt;/span> = &lt;span style="color:#e6db74">{10.13053/cys-23-2-2840}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h3 id="problemas-dinâmicos-de-coleta-e-entrega-com-janelas-de-tempo">Problemas Dinâmicos de Coleta e Entrega Com Janelas de Tempo&lt;a class="anchor" href="#problemas-dina%cc%82micos-de-coleta-e-entrega-com-janelas-de-tempo">#&lt;/a>&lt;/h3>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@inproceedings&lt;/span>{problemasDinamicosDeColetaEEntregaComJanelasDeTempo,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Eccel, Renan and Carlson, Rodrigo}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2019&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">month&lt;/span> = &lt;span style="color:#ae81ff">11&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{PROBLEMAS DINÂMICOS DE COLETA E ENTREGA COM JANELAS DE
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> TEMPO: ANÁLISE DAS INSTÂNCIAS DE BENCHMARK}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details>
&lt;h3 id="concurrent-lock-free-insertion-in-red-black-trees">Concurrent, lock-free insertion in red-black trees&lt;a class="anchor" href="#concurrent-lock-free-insertion-in-red-black-trees">#&lt;/a>&lt;/h3>
&lt;details >&lt;summary>Bibtex&lt;/summary>&lt;div class="markdown-inner">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">@article&lt;/span>{ma2004concurrent,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">{Concurrent, lock-free insertion in red-black trees}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">author&lt;/span> = &lt;span style="color:#e6db74">{Ma, Jianwen}&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">year&lt;/span> = &lt;span style="color:#ae81ff">2004&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/div>&lt;/details></description></item><item><title>Notes on RISC-V CPU HARD IP Cores enter SoC FPGAs</title><link>https://seds.nl/notes/notes_on_risc_v_cpu_hard_ip_cores_enter_soc_fpgas/</link><pubDate>Mon, 16 Nov 2020 22:49:00 +0000</pubDate><guid>https://seds.nl/notes/notes_on_risc_v_cpu_hard_ip_cores_enter_soc_fpgas/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/riscv/">RISCV&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-architecture/">Computer Architecture&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/risc_v_instruction_format/">RISC-V Instruction Format&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Notes on &lt;a href="https://ieeechicago.org/event/ieee-chicago-rockford-consultants-network-risc-v-cpu-hard-ip-cores-enter-soc-fpgas-virtual-meeting/">RISC-V CPU HARD IP Cores enter SoC FPGAs&lt;/a> presentation&lt;/p>
&lt;ul>
&lt;li>Frozen base ISA&lt;/li>
&lt;li>Consolidation in the semiconductor industry&lt;/li>
&lt;li>RISC-V is not owned by anyone&lt;/li>
&lt;li>Custom instruction extension to extend the virtuous cycle of semiconductor
innovation&lt;/li>
&lt;/ul>
&lt;h2 id="polarfire-soc-risc-v-enabled-innocation-platform">PolarFire SoC - RISC-V enabled innocation platform&lt;a class="anchor" href="#polarfire-soc-risc-v-enabled-innocation-platform">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>Mixed critically RTOS + Linux support&lt;/li>
&lt;li>Defence grade security&lt;/li>
&lt;li>Exceptional reliability&lt;/li>
&lt;li>Designed for low-power&lt;/li>
&lt;li>L2 memory subsystem
&lt;ul>
&lt;li>Can be made to be deterministic&lt;/li>
&lt;li>Not all L2 are deterministic&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;figure>&lt;img src="https://seds.nl/imgs/polarfire-soc.png">
&lt;/figure></description></item><item><title>Modeling C-based systems with UML</title><link>https://seds.nl/notes/modeling_c_based_systems_with_uml/</link><pubDate>Sat, 14 Nov 2020 12:54:00 +0000</pubDate><guid>https://seds.nl/notes/modeling_c_based_systems_with_uml/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/software_engineering/">Software Engineering&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/methodologies/">Methodologies&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="introduction">Introduction&lt;a class="anchor" href="#introduction">#&lt;/a>&lt;/h2>
&lt;p>The Unified Modeling Language (UML) is used almost exclusively for Object
Oriented Programming (OOP). Since embedded system design has become increasingly
more complex, designers have been searching for new methodologies to manage
these complexities and allowing higher productivity. Due to the exclusivity of
UML for OOP, it makes it difficult for functional programmers to integrate UML
concepts into the modeling because the transformation of many UML concepts to C
is difficult and confusing &lt;wang2009modeling>.&lt;/p></description></item><item><title>Technical challenge checklist</title><link>https://seds.nl/notes/technical_challenge_checklist/</link><pubDate>Fri, 16 Oct 2020 07:43:00 +0000</pubDate><guid>https://seds.nl/notes/technical_challenge_checklist/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a> &lt;a href="https://seds.nl/notes/software_engineering/">Software Engineering&lt;/a>&lt;/dd>
&lt;/dl>
&lt;p>Having done quiet a lot of technical challenges, and having forgotten some
details when submitting, I came up with a good checklist of things to check
before submitting the technical test.&lt;/p>
&lt;h2 id="must-do-checklist">Must do checklist&lt;a class="anchor" href="#must-do-checklist">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>&lt;input disabled="" type="checkbox"> Keep commit readable, check if the company has any commit format of their
own in their public GitHub organization or their wiki page (if any),
otherwise, use &lt;a href="https://www.conventionalcommits.org/en/v1.0.0/">conventional commits&lt;/a>&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> Structure your commits so we can revert in case of any bug. Make your
&lt;code>git&lt;/code> history ready for production, see &lt;a href="https://seds.nl/notes/personal_git_workflow/">Personal git workflow&lt;/a>&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> Use well stable, known libraries&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> Document your decisions of &lt;em>why&lt;/em>, &lt;em>where&lt;/em> and &lt;em>how&lt;/em>&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> Write tests for &lt;strong>everything your write&lt;/strong>&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> Run static code analysers and make sure there aren&amp;rsquo;t any undefined
variables&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> Benchmark what you wrote for validating algorithms/project&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> Configure and use a linter&lt;/li>
&lt;/ul>
&lt;h2 id="technical-project">Technical project&lt;a class="anchor" href="#technical-project">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>&lt;input disabled="" type="checkbox"> Use environment variables for secrets, api urls, debugging and general
configuration&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> Enable application logging where needed&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> Document reusable API functions&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> Lock dependency versions&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> Take some time to think of the project structure, create diagrams, check
out related project&amp;rsquo;s structure&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> Read and re-read the requirements, if you have any doubts, &lt;code>do&lt;/code> ask the
developers/human resources&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> HTTP API? Run a stress test against your API&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> Containerize your application&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> Last but not least, have fun learning&lt;/li>
&lt;/ul>
&lt;h2 id="algorithms">Algorithms&lt;a class="anchor" href="#algorithms">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>&lt;input disabled="" type="checkbox"> Document algorithm decisions and steps&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> Make algorithm comparison if possible&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> Don&amp;rsquo;t over complicate. It&amp;rsquo;s not because it&amp;rsquo;s an algorithm that it requires
to be unreadable&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> Make sure the algorithm you are applying is well suited for the task&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> Don&amp;rsquo;t panic, you are not supposed to know all algorithms out there, but
you are supposed to know where to search and implement your findings&lt;/li>
&lt;/ul>
&lt;h2 id="bonus">Bonus&lt;a class="anchor" href="#bonus">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>&lt;input disabled="" type="checkbox"> Add CI integration (CircleCI, Travis, GitHub Workflow, etc)&lt;/li>
&lt;/ul></description></item><item><title>Emacs - Search and replacing versioned controled files</title><link>https://seds.nl/notes/emacs_search_and_replacing_versioned_controled_files/</link><pubDate>Sat, 26 Sep 2020 01:53:00 +0000</pubDate><guid>https://seds.nl/notes/emacs_search_and_replacing_versioned_controled_files/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/emacs-editor/">Emacs&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/using_macros_in_emacs/">Using macros in Emacs&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>I had to search and replace many files in a git repository, for some reason
&lt;code>dired-do-find-regexp-and-replace&lt;/code>, but I found using &lt;code>counsel-git-grep&lt;/code> with
&lt;code>wgre&lt;/code> much easier. Here is on you do it:&lt;/p>
&lt;ol>
&lt;li>&lt;code>M-x counsel-git-grep&lt;/code>
Search for the string&lt;/li>
&lt;li>Press &lt;code>ivy-occur&lt;/code> key on &lt;code>ivy&lt;/code>&amp;rsquo;s search prompt result, which is set to &lt;code>C-c C-o&lt;/code> by default. This will open the search results in a new buffer&lt;/li>
&lt;li>On your new buffer, run &lt;code>wgrep-change-to-wgrep-mode&lt;/code> (&lt;code>C-c C-p&lt;/code>) and do your
editing.&lt;/li>
&lt;li>&lt;code>C-c C-c&lt;/code> to apply your changes&lt;/li>
&lt;/ol>
&lt;p>I still have to figure out why isn&amp;rsquo;t &lt;code>dired-do-find-regexp-and-replace&lt;/code> working
properly on strings without any regular expression, for example
&lt;code>name_to_change&lt;/code>. It might be a bug on my end or upstream, but &lt;a href="https://www.reddit.com/r/emacs/comments/5y1c11/direddofindregexpandreplace%5Fvs%5Fqueryreplaceregexp/?utm%5Fsource=share&amp;amp;utm%5Fmedium=web2x&amp;amp;context=3">this&lt;/a> might seem a
bit related.&lt;/p></description></item><item><title>Adopting conventional commits in a codebase</title><link>https://seds.nl/notes/adopting-git-conventional-commits/</link><pubDate>Wed, 16 Sep 2020 00:00:00 +0200</pubDate><guid>https://seds.nl/notes/adopting-git-conventional-commits/</guid><description>Recently, it came to my attention that conventional commits don&amp;rsquo;t fit all
codebases; in fact, they can annoy more than they can help in some situations.</description></item><item><title>Go binary search tree</title><link>https://seds.nl/notes/go_binary_search_tree/</link><pubDate>Mon, 07 Sep 2020 18:52:00 +0000</pubDate><guid>https://seds.nl/notes/go_binary_search_tree/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/go-programming/">Go Programming&lt;/a> &lt;a href="https://seds.nl/notes/software_engineering/">Software Engineering&lt;/a>&lt;/dd>
&lt;/dl>
&lt;h2 id="requirements">Requirements&lt;a class="anchor" href="#requirements">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>Sorted array of lenght &lt;code>N&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="performance">Performance&lt;a class="anchor" href="#performance">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>Say an array contains &lt;code>N&lt;/code> (search space o &lt;code>N&lt;/code>) elements, and we divide &lt;code>N/2&lt;/code>,
getting a search space of &lt;code>N/2&lt;/code>, how many steps do we need until we get down
to just one an array of 1 element.&lt;/li>
&lt;li>&lt;code>O(log2 n)&lt;/code> problem.&lt;/li>
&lt;/ul>
&lt;h2 id="implementation">Implementation&lt;a class="anchor" href="#implementation">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>Can be implemented recursively or non-recursively.&lt;/li>
&lt;li>An array of &lt;code>N&lt;/code> elements.&lt;/li>
&lt;/ul>
&lt;h2 id="code">Code&lt;a class="anchor" href="#code">#&lt;/a>&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Go Context package</title><link>https://seds.nl/notes/go_context_package/</link><pubDate>Thu, 03 Sep 2020 17:08:00 +0000</pubDate><guid>https://seds.nl/notes/go_context_package/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a> &lt;a href="https://seds.nl/notes/go-programming/">Go Programming&lt;/a>&lt;/dd>
&lt;/dl>
&lt;h2 id="keywords">Keywords&lt;a class="anchor" href="#keywords">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>Cancellation: is when you are requesting some services, and you cancel this request&lt;/li>
&lt;li>Propagation: means that if we asked someone for a service then you tell that person to cancel&lt;/li>
&lt;/ul></description></item><item><title>Git change commit author</title><link>https://seds.nl/notes/git_change_commit_author/</link><pubDate>Sat, 22 Aug 2020 14:09:00 +0000</pubDate><guid>https://seds.nl/notes/git_change_commit_author/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a> &lt;a href="https://seds.nl/notes/software_engineering/">Software Engineering&lt;/a>&lt;/dd>
&lt;/dl>
&lt;p>The following scripts changes all repository commits from an specific author to
a new author. This is specially handy if you mess up your git config at
somepoint without knowing and start commiting with a random author or you change
your email/name.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#!/bin/sh
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git filter-branch --env-filter &lt;span style="color:#e6db74">&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">OLD_EMAIL=&amp;#34;your-old-email@example.com&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">CORRECT_NAME=&amp;#34;Your Correct Name&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">CORRECT_EMAIL=&amp;#34;your-correct-email@example.com&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">if [ &amp;#34;$GIT_COMMITTER_EMAIL&amp;#34; = &amp;#34;$OLD_EMAIL&amp;#34; ]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">then
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">export GIT_COMMITTER_NAME=&amp;#34;$CORRECT_NAME&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">export GIT_COMMITTER_EMAIL=&amp;#34;$CORRECT_EMAIL&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">fi
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">if [ &amp;#34;$GIT_AUTHOR_EMAIL&amp;#34; = &amp;#34;$OLD_EMAIL&amp;#34; ]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">then
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">export GIT_AUTHOR_NAME=&amp;#34;$CORRECT_NAME&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">export GIT_AUTHOR_EMAIL=&amp;#34;$CORRECT_EMAIL&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">fi
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">&amp;#39;&lt;/span> --tag-name-filter cat -- --branches --tags&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Automating and testing dotfiles</title><link>https://seds.nl/notes/automating-and-testing-dotfiles/</link><pubDate>Sun, 09 Aug 2020 13:06:00 +0200</pubDate><guid>https://seds.nl/notes/automating-and-testing-dotfiles/</guid><description>I run multiple Archlinux machines at home and an OSX machine for work, so I need
to keep my system configuration in sync. This is how I do it.</description></item><item><title>Personal git workflow</title><link>https://seds.nl/notes/personal_git_workflow/</link><pubDate>Tue, 04 Aug 2020 11:06:00 +0000</pubDate><guid>https://seds.nl/notes/personal_git_workflow/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>Git &lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a> Workflow&lt;/dd>
&lt;/dl>
&lt;p>As of today, this is currently my git flow for most of my projects.&lt;/p>
&lt;h2 id="commit-messages">Commit messages&lt;a class="anchor" href="#commit-messages">#&lt;/a>&lt;/h2>
&lt;p>From: &lt;a href="https://chris.beams.io/posts/git-commit/">https://chris.beams.io/posts/git-commit/&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;code>Feat&lt;/code>: Any code that contains &lt;strong>only&lt;/strong> a new feature, whether a new model
field, a new API flag, etc&lt;/li>
&lt;li>&lt;code>Refactor&lt;/code>: Any general code refactoring that does not contain anything new
nor fixes anything.&lt;/li>
&lt;li>&lt;code>Chore&lt;/code>: Anything related to the build configuration, dependency updates&lt;/li>
&lt;li>&lt;code>Docs&lt;/code>: Anything related to documentation. This could be a function/class doc,
READMEs, etc.&lt;/li>
&lt;li>&lt;code>Fix&lt;/code>: Anything that fixes a bug or any bad business logic&lt;/li>
&lt;/ul>
&lt;p>Don&amp;rsquo;t commit unrelated code, it&amp;rsquo;s easy for us to quickly change a function name
and commit together with the new feature. Don&amp;rsquo;t do that. Separate your commits
nicely, it will be much easier to revert commits, view logs and understand the
development flow of a project.&lt;/p></description></item><item><title>Kommunistische Partei Deutschlands (KPD)</title><link>https://seds.nl/notes/kommunistische_partei_deutschlands/</link><pubDate>Mon, 03 Aug 2020 15:10:00 +0000</pubDate><guid>https://seds.nl/notes/kommunistische_partei_deutschlands/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/politics/">Politics&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>KPD election poster, 1932. The caption at the bottom reads &lt;em>&amp;lsquo;An end to this
system!&amp;rsquo;&lt;/em>.&lt;/p>
&lt;p>&lt;a id="org3044a1b">&lt;/a>&lt;/p>
&lt;figure>&lt;img src="https://seds.nl/imgs/1932-kpd.jpg"
 alt="Figure 1: KPD election poster, 1932. The caption at the bottom reads &amp;lsquo;An end to this system!&amp;rsquo;.">&lt;figcaption>
 &lt;p>Figure 1: KPD election poster, 1932. The caption at the bottom reads &amp;lsquo;An end to this system!&amp;rsquo;.&lt;/p>
 &lt;/figcaption>
&lt;/figure>

&lt;h2 id="related-links">Related links&lt;a class="anchor" href="#related-links">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://en.wikipedia.org/wiki/Communist%5FParty%5Fof%5FGermany">https://en.wikipedia.org/wiki/Communist%5FParty%5Fof%5FGermany&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Python temporary file</title><link>https://seds.nl/notes/python_temporary_file/</link><pubDate>Sun, 02 Aug 2020 16:44:00 +0000</pubDate><guid>https://seds.nl/notes/python_temporary_file/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/python/">Python&lt;/a> &lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/dd>
&lt;/dl>
&lt;p>Python&amp;rsquo;s &lt;a href="https://docs.python.org/3/library/tempfile.html">tempfile&lt;/a> standard library is pretty neat when we need to create a
temporary file and/or directories. Instead of having a much of code like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> pathlib
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">create_file&lt;/span>(filename):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> pathlib&lt;span style="color:#f92672">.&lt;/span>Path(filename)&lt;span style="color:#f92672">.&lt;/span>exists():
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># handle path removal/rewrite/backup&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">pass&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">with&lt;/span> open(filename, &lt;span style="color:#e6db74">&amp;#34;w&amp;#34;&lt;/span>) &lt;span style="color:#66d9ef">as&lt;/span> f:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># write to file&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">pass&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We can ask Python to take care of handling this type of tasks for us. &lt;code>tempfile&lt;/code>
handles most of the OS API, so we can focus on writting the logic instead.&lt;/p></description></item><item><title>Python Async</title><link>https://seds.nl/notes/python_async/</link><pubDate>Thu, 30 Jul 2020 22:38:00 +0000</pubDate><guid>https://seds.nl/notes/python_async/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/python/">Python&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="important-keywords">Important keywords&lt;a class="anchor" href="#important-keywords">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>&lt;code>Asynchronous IO (async IO)&lt;/code> Language-agnostic paradigm (model)&lt;/li>
&lt;li>&lt;code>coroutine&lt;/code> A Python (sort of generator function)&lt;/li>
&lt;li>&lt;code>async/await&lt;/code> Python keywords used to defined a coroutine&lt;/li>
&lt;li>&lt;code>asyncio&lt;/code> Python package that provides an API for running/managing coroutines&lt;/li>
&lt;/ul>
&lt;h2 id="coroutine">Coroutine&lt;a class="anchor" href="#coroutine">#&lt;/a>&lt;/h2>
&lt;p>A coroutine allows a function to pause before returning or indirectly call
another coroutine for some time, for example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> asyncio
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> time
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">async&lt;/span> &lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">count&lt;/span>(n):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> print(&lt;span style="color:#e6db74">f&lt;/span>&lt;span style="color:#e6db74">&amp;#34;n is &lt;/span>&lt;span style="color:#e6db74">{&lt;/span>n&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">await&lt;/span> asyncio&lt;span style="color:#f92672">.&lt;/span>sleep(n)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> print(&lt;span style="color:#e6db74">f&lt;/span>&lt;span style="color:#e6db74">&amp;#34;Returning from &lt;/span>&lt;span style="color:#e6db74">{&lt;/span>n&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">async&lt;/span> &lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">main&lt;/span>():
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">await&lt;/span> asyncio&lt;span style="color:#f92672">.&lt;/span>gather(count(&lt;span style="color:#ae81ff">1&lt;/span>), count(&lt;span style="color:#ae81ff">2&lt;/span>), count(&lt;span style="color:#ae81ff">3&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>m &lt;span style="color:#f92672">=&lt;/span> time&lt;span style="color:#f92672">.&lt;/span>perf_counter()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>asyncio&lt;span style="color:#f92672">.&lt;/span>run(main())
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>elapsed &lt;span style="color:#f92672">=&lt;/span> time&lt;span style="color:#f92672">.&lt;/span>perf_counter() &lt;span style="color:#f92672">-&lt;/span> m
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>print(&lt;span style="color:#e6db74">f&lt;/span>&lt;span style="color:#e6db74">&amp;#34;Executed in &lt;/span>&lt;span style="color:#e6db74">{&lt;/span>elapsed&lt;span style="color:#e6db74">:&lt;/span>&lt;span style="color:#e6db74">0.2f&lt;/span>&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74"> seconds.&amp;#34;&lt;/span>)&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>n is 1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>n is 2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>n is 3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Returning from 1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Returning from 2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Returning from 3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Executed in 3.00 seconds.&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Using macros in Emacs</title><link>https://seds.nl/notes/using_macros_in_emacs/</link><pubDate>Wed, 29 Jul 2020 08:51:00 +0000</pubDate><guid>https://seds.nl/notes/using_macros_in_emacs/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/emacs-editor/">Emacs&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Emacs macros allows us to record sequence of keyboard keystrokes, mouse actions,
menu actions that is bound to an Emacs command. It allows us to record these
actions and repeat them when needed.&lt;/p>
&lt;h2 id="creating-a-new-macro">Creating a new macro&lt;a class="anchor" href="#creating-a-new-macro">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>&lt;code>C-x (&lt;/code> starts recording a macro&lt;/li>
&lt;li>&lt;code>C-x )&lt;/code> stops recording a macro&lt;/li>
&lt;li>&lt;code>C-x e&lt;/code> executes the macro&lt;/li>
&lt;li>&lt;code>C-u 37 C-x e&lt;/code> executes the macro 37 times&lt;/li>
&lt;li>&lt;code>C-u 0 C-x e&lt;/code> executes the macro an infinite number of times until EOF.&lt;/li>
&lt;/ul>
&lt;h2 id="testing">Testing&lt;a class="anchor" href="#testing">#&lt;/a>&lt;/h2>
&lt;p>Create a macro to remove the &lt;code>-&lt;/code> from the following fruit list and replace it
with an &lt;code>+&lt;/code> (org-mode has still already setup, but for learning purpose, let&amp;rsquo;s
do it with a macro).&lt;/p></description></item><item><title>Data and Reality: A Timeless Perspective on Perceiving and Managing Information in Our Imprecise World</title><link>https://seds.nl/notes/data_and_reality_a_timeless_perspective_on_perceiving_and_managing_information_in_our_imprecise_world/</link><pubDate>Mon, 13 Jul 2020 07:28:00 +0000</pubDate><guid>https://seds.nl/notes/data_and_reality_a_timeless_perspective_on_perceiving_and_managing_information_in_our_imprecise_world/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/database/">Database&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="reading-data-and-reality-a-timeless-perspective-on-perceiving-and-managing-information-in-our-imprecise-world">READING Data and Reality: A Timeless Perspective on Perceiving and Managing Information in Our Imprecise World&lt;a class="anchor" href="#reading-data-and-reality-a-timeless-perspective-on-perceiving-and-managing-information-in-our-imprecise-world">#&lt;/a>&lt;/h2>
&lt;div class="table-caption">
 &lt;span class="table-number">Table 1&lt;/span>:
 Clock summary at &lt;span class="timestamp-wrapper">&lt;span class="timestamp">[2020-07-13 Mon 08:05]&lt;/span>&lt;/span>
&lt;/div>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Headline&lt;/th>
 &lt;th>Time&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;strong>Total time&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>1:01&lt;/strong>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Data and Reality: A Timeless&amp;hellip;&lt;/td>
 &lt;td>1:01&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>:BOOK_CATEGORY: Database, software architecture, software engineering
:BOOK_AUTHORS: William Kent
:START_DATE:&lt;span class="timestamp-wrapper">&lt;span class="timestamp">&amp;lt;2020-07-12 Sun&amp;gt;&lt;/span>&lt;/span>
:END_DATE: nil
:URL: &lt;a href="https://www.goodreads.com/book/show/19305264-data-and-reality">https://www.goodreads.com/book/show/19305264-data-and-reality&lt;/a>&lt;/p></description></item><item><title>Methodologies</title><link>https://seds.nl/notes/methodologies/</link><pubDate>Tue, 23 Jun 2020 09:50:00 +0000</pubDate><guid>https://seds.nl/notes/methodologies/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/software_engineering/">Software Engineering&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/technical_challenge_checklist/">Technical challenge checklist&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr></description></item><item><title>Software Engineering</title><link>https://seds.nl/notes/software_engineering/</link><pubDate>Tue, 23 Jun 2020 09:50:00 +0000</pubDate><guid>https://seds.nl/notes/software_engineering/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a> &lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/dd>
&lt;/dl></description></item><item><title>Use case template</title><link>https://seds.nl/notes/use_case_template/</link><pubDate>Tue, 23 Jun 2020 09:49:00 +0000</pubDate><guid>https://seds.nl/notes/use_case_template/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a> &lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a> &lt;a href="https://seds.nl/notes/methodologies/">Methodologies&lt;/a> &lt;a href="https://seds.nl/notes/software_engineering/">Software Engineering&lt;/a>&lt;/dd>
&lt;/dl>
&lt;p>The following is a requirements template developed by &lt;a href="https://heartofagile.com/alistair-cockburn/">Alistair Cockburn&lt;/a>.
This template may or may not have all or more fields related to the requirements
itself.&lt;/p>
&lt;p>Recommended reading:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/files/Use-Case-Template%20%28Cockburn%29.pdf">Basic Use Case Template&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>USE CASE &lt;strong>#N&lt;/strong>&lt;/th>
 &lt;th>&lt;em>&lt;The name of the goal as a short active verb phrase>&lt;/em>&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Goal in context&lt;/td>
 &lt;td>&lt;em>&lt;A longer statement of the goal in context if needed>&lt;/em>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Scope&lt;/td>
 &lt;td>&lt;em>&lt;What system is being considered back box under design>&lt;/em>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Level&lt;/td>
 &lt;td>&lt;em>&amp;lt;one of: Summary, Primary task, Subfunction&amp;gt;&lt;/em>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Preconditions&lt;/td>
 &lt;td>&lt;em>&lt;what we expect is already the state of the world>&lt;/em>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Success end condition&lt;/td>
 &lt;td>&lt;em>&lt;the state of the world upon successful completion>&lt;/em>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Failed end condition&lt;/td>
 &lt;td>&lt;em>&lt;the state of the world if goal abandoned>&lt;/em>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Primary actor&lt;/td>
 &lt;td>&lt;em>&amp;lt;a role name for the primary actor, or description&amp;gt;&lt;/em>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Trigger&lt;/td>
 &lt;td>&lt;em>&amp;lt;the action upon the system that starts the use case, may be time event&amp;gt;&lt;/em>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Priority&lt;/td>
 &lt;td>&lt;em>&amp;lt;how critical to your system/organization&amp;gt;&lt;/em>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Frequency&lt;/td>
 &lt;td>&lt;em>&lt;how often it is expected to happen>&lt;/em>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>Usage example:&lt;/p></description></item><item><title>Go interfaces</title><link>https://seds.nl/notes/go_interfaces/</link><pubDate>Mon, 22 Jun 2020 20:26:00 +0000</pubDate><guid>https://seds.nl/notes/go_interfaces/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/go-programming/">Go Programming&lt;/a> &lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a> &lt;a href="https://seds.nl/notes/code-snippets/">Code snippets&lt;/a>&lt;/dd>
&lt;/dl>
&lt;p>The following implements a &lt;code>DataModel&lt;/code>, like Django&amp;rsquo;s Model class which requires
&lt;code>Validate&lt;/code> and &lt;code>Save&lt;/code> methods be implemented by whoever uses that Interface. The
problem is the &lt;code>Model&lt;/code>. &lt;code>m&lt;/code> object will be &lt;code>nil&lt;/code>, because &lt;code>Model&lt;/code> cannot access
the &lt;code>User&lt;/code> due to the embedded &lt;code>Model&lt;/code> struct within the &lt;code>User&lt;/code> struct.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">package&lt;/span> &lt;span style="color:#a6e22e">main&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> &lt;span style="color:#e6db74">&amp;#34;fmt&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">type&lt;/span> &lt;span style="color:#a6e22e">DataModel&lt;/span> &lt;span style="color:#66d9ef">interface&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">Validate&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">Save&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">type&lt;/span> &lt;span style="color:#a6e22e">Model&lt;/span> &lt;span style="color:#66d9ef">struct&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">DataModel&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">func&lt;/span> (&lt;span style="color:#a6e22e">m&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#a6e22e">Model&lt;/span>) &lt;span style="color:#a6e22e">Validate&lt;/span>(){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">fmt&lt;/span>.&lt;span style="color:#a6e22e">Println&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;Validating..&amp;#34;&lt;/span>, &lt;span style="color:#a6e22e">m&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">func&lt;/span> (&lt;span style="color:#a6e22e">m&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#a6e22e">Model&lt;/span>) &lt;span style="color:#a6e22e">Save&lt;/span>(){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">fmt&lt;/span>.&lt;span style="color:#a6e22e">Println&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;Saving..&amp;#34;&lt;/span>, &lt;span style="color:#a6e22e">m&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">type&lt;/span> &lt;span style="color:#a6e22e">User&lt;/span> &lt;span style="color:#66d9ef">struct&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">name&lt;/span> &lt;span style="color:#66d9ef">string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">Model&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">func&lt;/span> &lt;span style="color:#a6e22e">main&lt;/span>(){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">user&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span>&lt;span style="color:#a6e22e">User&lt;/span>{&lt;span style="color:#a6e22e">name&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Benjamin&amp;#34;&lt;/span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">fmt&lt;/span>.&lt;span style="color:#a6e22e">Println&lt;/span>(&lt;span style="color:#a6e22e">user&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">user&lt;/span>.&lt;span style="color:#a6e22e">Validate&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">user&lt;/span>.&lt;span style="color:#a6e22e">Save&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>&amp;amp;{Benjamin {&amp;lt;nil&amp;gt;}}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Validating.. &amp;amp;{&amp;lt;nil&amp;gt;}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Saving.. &amp;amp;{&amp;lt;nil&amp;gt;}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Database</title><link>https://seds.nl/notes/database/</link><pubDate>Sun, 21 Jun 2020 03:24:00 +0000</pubDate><guid>https://seds.nl/notes/database/</guid><description>&lt;p>Notes from &lt;a href="https://seds.nl/notes/data_and_reality_a_timeless_perspective_on_perceiving_and_managing_information_in_our_imprecise_world/">Data and Reality: A Timeless Perspective on Perceiving and Managing
Information in Our Imprecise World&lt;/a>&lt;/p>
&lt;p>William tries to approach data towards how we perceive the world. The following
key concepts can be considered in data modeling as to our inner domain.&lt;/p>
&lt;ol>
&lt;li>Existence: To what extend are you really present and engaged in the process of
life around yourself? How real are the physical things around you?&lt;/li>
&lt;li>Identity: Who are you? What is the true nature that identifies you?&lt;/li>
&lt;li>Attributes: What kind of person are you? What are your values, assets and so
on.&lt;/li>
&lt;li>Relationships: What are the qualities of your interactions with parents,
friends, lovers, etc? What are your connection with things material, social,
and otherwise? What are your needs? What are the issues and problems?&lt;/li>
&lt;li>Behavior: What should you plan to do in various situations? What might be
the consequences, both indented and not indented?&lt;/li>
&lt;li>Modeling: How useful and accurate are the constructs you use to explain all
these things? How effective are these kinds of explanation in helping you
change what needs to be changed?&lt;/li>
&lt;/ol></description></item><item><title>Postgres</title><link>https://seds.nl/notes/postgres/</link><pubDate>Sun, 21 Jun 2020 03:22:00 +0000</pubDate><guid>https://seds.nl/notes/postgres/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/computer-architecture/">Computer Architecture&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/database/">Database&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr></description></item><item><title>List Foreign key constrants defined in a database</title><link>https://seds.nl/notes/list_foreign_key_constrants_defined_in_a_database/</link><pubDate>Sun, 21 Jun 2020 03:20:00 +0000</pubDate><guid>https://seds.nl/notes/list_foreign_key_constrants_defined_in_a_database/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a> &lt;a href="https://seds.nl/notes/code-snippets/">Code snippets&lt;/a> &lt;a href="https://seds.nl/notes/postgres/">Postgres&lt;/a> &lt;a href="https://seds.nl/notes/postgres/">Postgres&lt;/a>&lt;/dd>
&lt;/dl>
&lt;p>View foreign key constrants defined in all databases&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">select&lt;/span> kcu.table_schema &lt;span style="color:#f92672">||&lt;/span> &lt;span style="color:#e6db74">&amp;#39;.&amp;#39;&lt;/span> &lt;span style="color:#f92672">||&lt;/span>kcu.&lt;span style="color:#66d9ef">table_name&lt;/span> &lt;span style="color:#66d9ef">as&lt;/span> foreign_table,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#39;&amp;gt;-&amp;#39;&lt;/span> &lt;span style="color:#66d9ef">as&lt;/span> rel,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rel_tco.table_schema &lt;span style="color:#f92672">||&lt;/span> &lt;span style="color:#e6db74">&amp;#39;.&amp;#39;&lt;/span> &lt;span style="color:#f92672">||&lt;/span> rel_tco.&lt;span style="color:#66d9ef">table_name&lt;/span> &lt;span style="color:#66d9ef">as&lt;/span> primary_table,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> string_agg(kcu.&lt;span style="color:#66d9ef">column_name&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;, &amp;#39;&lt;/span>) &lt;span style="color:#66d9ef">as&lt;/span> fk_columns,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kcu.&lt;span style="color:#66d9ef">constraint_name&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">from&lt;/span> information_schema.table_constraints tco
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">join&lt;/span> information_schema.key_column_usage kcu
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">on&lt;/span> tco.&lt;span style="color:#66d9ef">constraint_schema&lt;/span> &lt;span style="color:#f92672">=&lt;/span> kcu.&lt;span style="color:#66d9ef">constraint_schema&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">and&lt;/span> tco.&lt;span style="color:#66d9ef">constraint_name&lt;/span> &lt;span style="color:#f92672">=&lt;/span> kcu.&lt;span style="color:#66d9ef">constraint_name&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">join&lt;/span> information_schema.referential_constraints rco
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">on&lt;/span> tco.&lt;span style="color:#66d9ef">constraint_schema&lt;/span> &lt;span style="color:#f92672">=&lt;/span> rco.&lt;span style="color:#66d9ef">constraint_schema&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">and&lt;/span> tco.&lt;span style="color:#66d9ef">constraint_name&lt;/span> &lt;span style="color:#f92672">=&lt;/span> rco.&lt;span style="color:#66d9ef">constraint_name&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">join&lt;/span> information_schema.table_constraints rel_tco
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">on&lt;/span> rco.unique_constraint_schema &lt;span style="color:#f92672">=&lt;/span> rel_tco.&lt;span style="color:#66d9ef">constraint_schema&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">and&lt;/span> rco.unique_constraint_name &lt;span style="color:#f92672">=&lt;/span> rel_tco.&lt;span style="color:#66d9ef">constraint_name&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">where&lt;/span> tco.constraint_type &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;FOREIGN KEY&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">group&lt;/span> &lt;span style="color:#66d9ef">by&lt;/span> kcu.table_schema,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kcu.&lt;span style="color:#66d9ef">table_name&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rel_tco.&lt;span style="color:#66d9ef">table_name&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rel_tco.table_schema,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kcu.&lt;span style="color:#66d9ef">constraint_name&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">order&lt;/span> &lt;span style="color:#66d9ef">by&lt;/span> kcu.table_schema,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kcu.&lt;span style="color:#66d9ef">table_name&lt;/span>;&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Returns&lt;/p></description></item><item><title>Go reading struct tag</title><link>https://seds.nl/notes/go_reading_struct_tag/</link><pubDate>Sun, 21 Jun 2020 03:02:00 +0000</pubDate><guid>https://seds.nl/notes/go_reading_struct_tag/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/go-programming/">Go Programming&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/code-snippets/">Code snippets&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>The following code reads a specific &lt;code>struct&lt;/code> Tag by name.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> (
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#e6db74">&amp;#34;reflect&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#e6db74">&amp;#34;strings&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#e6db74">&amp;#34;fmt&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">type&lt;/span> &lt;span style="color:#a6e22e">Profile&lt;/span> &lt;span style="color:#66d9ef">struct&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">Id&lt;/span> &lt;span style="color:#66d9ef">int&lt;/span> &lt;span style="color:#e6db74">`validate:&amp;#34;numeric&amp;#34; json:&amp;#34;id&amp;#34;`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">First&lt;/span> &lt;span style="color:#66d9ef">string&lt;/span> &lt;span style="color:#e6db74">`validate:&amp;#34;required&amp;#34; json:&amp;#34;first&amp;#34;`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">Last&lt;/span> &lt;span style="color:#66d9ef">string&lt;/span> &lt;span style="color:#e6db74">`validate:&amp;#34;required&amp;#34; json:&amp;#34;last&amp;#34;`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">Birth&lt;/span> &lt;span style="color:#66d9ef">string&lt;/span> &lt;span style="color:#e6db74">`validate:&amp;#34;required&amp;#34; json:&amp;#34;birth&amp;#34;`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">Sex&lt;/span> &lt;span style="color:#66d9ef">string&lt;/span> &lt;span style="color:#e6db74">`validate:&amp;#34;required&amp;#34; json:&amp;#34;sex&amp;#34;`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">MaritalStatus&lt;/span> &lt;span style="color:#66d9ef">string&lt;/span> &lt;span style="color:#e6db74">`validate:&amp;#34;required&amp;#34; json:&amp;#34;marital_status&amp;#34;`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">Children&lt;/span> &lt;span style="color:#66d9ef">int&lt;/span> &lt;span style="color:#e6db74">`validate:&amp;#34;numeric&amp;#34; json:&amp;#34;children&amp;#34;`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">func&lt;/span> &lt;span style="color:#a6e22e">GetStructFieldValidators&lt;/span>(&lt;span style="color:#a6e22e">data&lt;/span> &lt;span style="color:#66d9ef">interface&lt;/span>{}) &lt;span style="color:#66d9ef">map&lt;/span>[&lt;span style="color:#66d9ef">string&lt;/span>][]&lt;span style="color:#66d9ef">string&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">v&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#a6e22e">reflect&lt;/span>.&lt;span style="color:#a6e22e">ValueOf&lt;/span>(&lt;span style="color:#a6e22e">data&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">t&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#a6e22e">reflect&lt;/span>.&lt;span style="color:#a6e22e">TypeOf&lt;/span>(&lt;span style="color:#a6e22e">data&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">validators&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> make(&lt;span style="color:#66d9ef">map&lt;/span>[&lt;span style="color:#66d9ef">string&lt;/span>][]&lt;span style="color:#66d9ef">string&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#66d9ef">for&lt;/span> &lt;span style="color:#a6e22e">i&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>; &lt;span style="color:#a6e22e">i&lt;/span> &amp;lt; &lt;span style="color:#a6e22e">v&lt;/span>.&lt;span style="color:#a6e22e">NumField&lt;/span>(); &lt;span style="color:#a6e22e">i&lt;/span>&lt;span style="color:#f92672">++&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		&lt;span style="color:#a6e22e">validators&lt;/span>[&lt;span style="color:#a6e22e">strings&lt;/span>.&lt;span style="color:#a6e22e">ToLower&lt;/span>(&lt;span style="color:#a6e22e">v&lt;/span>.&lt;span style="color:#a6e22e">Type&lt;/span>().&lt;span style="color:#a6e22e">Field&lt;/span>(&lt;span style="color:#a6e22e">i&lt;/span>).&lt;span style="color:#a6e22e">Name&lt;/span>)] = []&lt;span style="color:#66d9ef">string&lt;/span>{&lt;span style="color:#a6e22e">t&lt;/span>.&lt;span style="color:#a6e22e">Field&lt;/span>(&lt;span style="color:#a6e22e">i&lt;/span>).&lt;span style="color:#a6e22e">Tag&lt;/span>.&lt;span style="color:#a6e22e">Get&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;validate&amp;#34;&lt;/span>)}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">validators&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">func&lt;/span> &lt;span style="color:#a6e22e">main&lt;/span>() {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#66d9ef">for&lt;/span> &lt;span style="color:#a6e22e">k&lt;/span>, &lt;span style="color:#a6e22e">v&lt;/span> &lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#66d9ef">range&lt;/span> &lt;span style="color:#a6e22e">GetStructFieldValidators&lt;/span>(&lt;span style="color:#a6e22e">Profile&lt;/span>{}){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		&lt;span style="color:#a6e22e">fmt&lt;/span>.&lt;span style="color:#a6e22e">Println&lt;/span>(&lt;span style="color:#a6e22e">k&lt;/span>, &lt;span style="color:#a6e22e">v&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>id [numeric]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>first [required]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>last [required]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>birth [required]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sex [required]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>maritalstatus [required]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>children [numeric]&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Go defer</title><link>https://seds.nl/notes/go_defer/</link><pubDate>Fri, 19 Jun 2020 09:47:00 +0000</pubDate><guid>https://seds.nl/notes/go_defer/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/go-programming/">Go Programming&lt;/a> &lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/dd>
&lt;/dl>
&lt;!--listend-->
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> &lt;span style="color:#e6db74">&amp;#34;fmt&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">func&lt;/span> &lt;span style="color:#a6e22e">trace&lt;/span>(&lt;span style="color:#a6e22e">name&lt;/span> &lt;span style="color:#66d9ef">string&lt;/span>) &lt;span style="color:#66d9ef">string&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">fmt&lt;/span>.&lt;span style="color:#a6e22e">Println&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;Entering &amp;#34;&lt;/span>, &lt;span style="color:#a6e22e">name&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">name&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">func&lt;/span> &lt;span style="color:#a6e22e">un&lt;/span>(&lt;span style="color:#a6e22e">name&lt;/span> &lt;span style="color:#66d9ef">string&lt;/span>) &lt;span style="color:#66d9ef">string&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">fmt&lt;/span>.&lt;span style="color:#a6e22e">Println&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;Exiting&amp;#34;&lt;/span>, &lt;span style="color:#a6e22e">name&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">name&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">func&lt;/span> &lt;span style="color:#a6e22e">a&lt;/span>() {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#66d9ef">defer&lt;/span> &lt;span style="color:#a6e22e">un&lt;/span>(&lt;span style="color:#a6e22e">trace&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">fmt&lt;/span>.&lt;span style="color:#a6e22e">Println&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;Hello, world&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">func&lt;/span> &lt;span style="color:#a6e22e">b&lt;/span>(){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#66d9ef">defer&lt;/span> &lt;span style="color:#a6e22e">un&lt;/span>(&lt;span style="color:#a6e22e">trace&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;b&amp;#34;&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">fmt&lt;/span>.&lt;span style="color:#a6e22e">Println&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;Before i &amp;lt; 10 loop&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#66d9ef">for&lt;/span> &lt;span style="color:#a6e22e">i&lt;/span>&lt;span style="color:#f92672">:=&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span> ; &lt;span style="color:#a6e22e">i&lt;/span> &amp;lt; &lt;span style="color:#ae81ff">10&lt;/span>; &lt;span style="color:#a6e22e">i&lt;/span>&lt;span style="color:#f92672">++&lt;/span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		&lt;span style="color:#66d9ef">defer&lt;/span> &lt;span style="color:#a6e22e">fmt&lt;/span>.&lt;span style="color:#a6e22e">Println&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;i =&amp;#34;&lt;/span>, &lt;span style="color:#a6e22e">i&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">fmt&lt;/span>.&lt;span style="color:#a6e22e">Println&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;After i &amp;lt; 10 loop&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">func&lt;/span> &lt;span style="color:#a6e22e">main&lt;/span>(){
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">a&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">b&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>Entering a
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Hello, world
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Exiting a
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Entering b
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Before i &amp;lt; 10 loop
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>After i &amp;lt; 10 loop
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>i = 9
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>i = 8
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>i = 7
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>i = 6
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>i = 5
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>i = 4
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>i = 3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>i = 2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>i = 1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>i = 0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Exiting b&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Antifa</title><link>https://seds.nl/notes/antifa/</link><pubDate>Mon, 15 Jun 2020 09:09:00 +0000</pubDate><guid>https://seds.nl/notes/antifa/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/politics/">Politics&lt;/a>&lt;/dd>
&lt;/dl>
&lt;h2 id="hold-antifa-the-anti-fascist-handbook">HOLD Antifa: The Anti-Fascist Handbook&lt;a class="anchor" href="#hold-antifa-the-anti-fascist-handbook">#&lt;/a>&lt;/h2>
&lt;div class="table-caption">
 &lt;span class="table-number">Table 1&lt;/span>:
 Clock summary at &lt;span class="timestamp-wrapper">&lt;span class="timestamp">[2020-06-15 Mon 09:11]&lt;/span>&lt;/span>
&lt;/div>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Headline&lt;/th>
 &lt;th>Time&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;strong>Total time&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>0:00&lt;/strong>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>:BOOK_CATEGORY: politics
:BOOK_AUTHORS: Mark Bray
:START_DATE: nil
:END_DATE: nil
:URL: &lt;a href="https://www.amazon.com.br/Antifa-Anti-Fascist-Handbook-Mark-Bray/dp/1612197035">https://www.amazon.com.br/Antifa-Anti-Fascist-Handbook-Mark-Bray/dp/1612197035&lt;/a>&lt;/p></description></item><item><title>Weed</title><link>https://seds.nl/notes/weed/</link><pubDate>Sat, 06 Jun 2020 04:21:00 +0000</pubDate><guid>https://seds.nl/notes/weed/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/politics/">Politics&lt;/a>&lt;/dd>
&lt;/dl>
&lt;blockquote class="twitter-tweet" data-lang="en" data-dnt="true" data-theme="dark">&lt;p lang="en" dir="ltr">Selling weed literally went from major felony to essential business (open during pandemic) in much of America &amp;amp; yet many are still in prison. Doesn’t make sense, isn’t right.&lt;/p>&amp;mdash; Elon Musk (@elonmusk) &lt;a href="https://twitter.com/elonmusk/status/1269163651958595584?ref_src=twsrc%5Etfw">June 6, 2020&lt;/a>&lt;/blockquote> &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script></description></item><item><title>Org-roam</title><link>https://seds.nl/notes/org_roam/</link><pubDate>Thu, 04 Jun 2020 08:51:00 +0000</pubDate><guid>https://seds.nl/notes/org_roam/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/emacs-editor/">Emacs&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/org_mode/">Org-mode&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr></description></item><item><title>Ox-hugo export all roam to Hugo</title><link>https://seds.nl/notes/ox_hugo_export_all_roam_to_hugo/</link><pubDate>Thu, 04 Jun 2020 08:39:00 +0000</pubDate><guid>https://seds.nl/notes/ox_hugo_export_all_roam_to_hugo/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/emacs-editor/">Emacs&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/org_mode/">Org-mode&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/org_roam/">Org-roam&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/export_org_roam_backlinks_with_gohugo/">Export org-roam backlinks with Gohugo&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Export all org-roam files to Hugo markdown (this might take some time)&lt;/p>
&lt;p>From: &lt;a href="https://github.com/jethrokuan/dots/blob/0064ea2aab667f115a14ce48292731db46302c53/.doom.d/config.el#L488">jethrokuan/dots&lt;/a>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-emacs-lisp" data-lang="emacs-lisp">&lt;span style="display:flex;">&lt;span>(defun benmezger/org-roam-export-all ()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;Re-exports all Org-roam files to Hugo markdown.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (interactive)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (dolist (f (org-roam--list-all-files))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (with-current-buffer (find-file f)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (when (s-contains? &lt;span style="color:#e6db74">&amp;#34;SETUPFILE&amp;#34;&lt;/span> (&lt;span style="color:#a6e22e">buffer-string&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (org-hugo-export-wim-to-md)))))&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Adding an empty &lt;code>#+SETUPFILE:&lt;/code> forces &lt;code>benmezger/org-roam-export-all&lt;/code> to export
the file.&lt;/p></description></item><item><title>Emacs</title><link>https://seds.nl/notes/emacs-editor/</link><pubDate>Thu, 04 Jun 2020 08:36:00 +0000</pubDate><guid>https://seds.nl/notes/emacs-editor/</guid><description/></item><item><title>Org-mode</title><link>https://seds.nl/notes/org_mode/</link><pubDate>Thu, 04 Jun 2020 08:35:00 +0000</pubDate><guid>https://seds.nl/notes/org_mode/</guid><description/></item><item><title>Org-roam export backlinks on Hugo</title><link>https://seds.nl/notes/org_roam_export_backlinks_on_hugo/</link><pubDate>Thu, 04 Jun 2020 08:29:00 +0000</pubDate><guid>https://seds.nl/notes/org_roam_export_backlinks_on_hugo/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/org_mode/">Org-mode&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/emacs-editor/">Emacs&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/org_roam/">Org-roam&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/dots_config_el_at_master_jethrokuan_dots/">dots/config.el at master · jethrokuan/dots&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/export_org_roam_backlinks_with_gohugo/">Export org-roam backlinks with Gohugo&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;blockquote class='book-hint '>
&lt;p>❗️*Note:* This no longer applies (probably due to an upstream update). See the
following note for another approach: &lt;a href="https://seds.nl/notes/export_org_roam_backlinks_with_gohugo/">Export org-roam backlinks with Gohugo&lt;/a>&lt;/p>&lt;/blockquote>&lt;p>Insert roam backlinks URL when exporting orgmode to HTML&lt;/p>
&lt;p>From: &lt;a href="https://github.com/jethrokuan/dots/blob/0064ea2aab667f115a14ce48292731db46302c53/.doom.d/config.el#L495">jethrokuan/dots&lt;/a>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-emacs-lisp" data-lang="emacs-lisp">&lt;span style="display:flex;">&lt;span> (defun benmezger/org-roam-export-all ()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;Re-exports all Org-roam files to Hugo markdown.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (interactive)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (dolist (f (org-roam--list-all-files))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (with-current-buffer (find-file f)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (when (s-contains? &lt;span style="color:#e6db74">&amp;#34;SETUPFILE&amp;#34;&lt;/span> (&lt;span style="color:#a6e22e">buffer-string&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (org-hugo-export-wim-to-md)))))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (defun benmezger/org-roam--backlinks-list (file)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (when (org-roam--org-roam-file-p file)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#a6e22e">mapcar&lt;/span> &lt;span style="color:#a6e22e">#&amp;#39;car&lt;/span> (org-roam-db-query [:select :distinct [from]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> :from links
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> :where (&lt;span style="color:#a6e22e">=&lt;/span> to $s1)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> :and from :not :like $s2] file &lt;span style="color:#e6db74">&amp;#34;%private%&amp;#34;&lt;/span>))))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (defun benmezger/org-export-preprocessor (_backend)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (when-let ((links (benmezger/org-roam--backlinks-list (&lt;span style="color:#a6e22e">buffer-file-name&lt;/span>))))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#a6e22e">insert&lt;/span> &lt;span style="color:#e6db74">&amp;#34;\n** Backlinks\n&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (dolist (link links)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#a6e22e">insert&lt;/span> (&lt;span style="color:#a6e22e">format&lt;/span> &lt;span style="color:#e6db74">&amp;#34;- [[file:%s][%s]]\n&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (file-relative-name link org-roam-directory)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (org-roam--get-title-or-slug link))))))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (add-hook &lt;span style="color:#e6db74">&amp;#39;org-export-before-processing-hook&lt;/span> &lt;span style="color:#960050;background-color:#1e0010">#&lt;/span>benmezger/org-export-preprocessor))&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Communication</title><link>https://seds.nl/notes/communication/</link><pubDate>Tue, 02 Jun 2020 08:55:00 +0000</pubDate><guid>https://seds.nl/notes/communication/</guid><description/></item><item><title>Politics</title><link>https://seds.nl/notes/politics/</link><pubDate>Tue, 02 Jun 2020 08:52:00 +0000</pubDate><guid>https://seds.nl/notes/politics/</guid><description/></item><item><title>Coding Theory</title><link>https://seds.nl/notes/c-coding-theory/</link><pubDate>Sun, 31 May 2020 16:10:00 +0000</pubDate><guid>https://seds.nl/notes/c-coding-theory/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/information_theory/">Information Theory&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Related video: &lt;a href="https://www.khanacademy.org/computing/computer-science/informationtheory/info-theory/v/source-encoding-language-of-coins-4-9">https://www.khanacademy.org/computing/computer-science/informationtheory/info-theory/v/source-encoding-language-of-coins-4-9&lt;/a>&lt;/p>
&lt;h2 id="source-encoding">Source encoding&lt;a class="anchor" href="#source-encoding">#&lt;/a>&lt;/h2>
&lt;p>Say Alice and Bob want to communicate with each other over some cable. They both
live far from each other, so they decided to run a wire between both of their
houses. Their communication has been working fine until winter. When winter
arrived, lots wind &lt;strong>noise&lt;/strong> started to happen and they are unable to communicate
with each other over their cable communication system. With the wind, it becomes
impossible to hear the &lt;strong>signal&lt;/strong> over the noise.&lt;/p></description></item><item><title>Code snippets</title><link>https://seds.nl/notes/code-snippets/</link><pubDate>Sun, 31 May 2020 14:28:00 +0000</pubDate><guid>https://seds.nl/notes/code-snippets/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/python/">Python&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="python-run-http-server-locally">Python run HTTP server locally&lt;a class="anchor" href="#python-run-http-server-locally">#&lt;/a>&lt;/h2>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>python -m http.server &lt;span style="color:#ae81ff">8000&lt;/span> --bind 127.0.0.1&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>Binary calculation</title><link>https://seds.nl/notes/binary-calculation/</link><pubDate>Sun, 31 May 2020 13:06:00 +0000</pubDate><guid>https://seds.nl/notes/binary-calculation/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/math/">Math&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-architecture/">Computer Architecture&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/bit_shifting/">Bit shifting&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>The &lt;code>b&lt;/code> before the code blocks mean binary number, to avoid confusion&lt;/p>
&lt;h2 id="binary-addition">Binary Addition&lt;a class="anchor" href="#binary-addition">#&lt;/a>&lt;/h2>
&lt;h3 id="possibilities">Possibilities&lt;a class="anchor" href="#possibilities">#&lt;/a>&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>A&lt;/th>
 &lt;th>OP&lt;/th>
 &lt;th>B&lt;/th>
 &lt;th>\=&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>1&lt;/td>
 &lt;td>+&lt;/td>
 &lt;td>1&lt;/td>
 &lt;td>10&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>1&lt;/td>
 &lt;td>+&lt;/td>
 &lt;td>0&lt;/td>
 &lt;td>1&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>0&lt;/td>
 &lt;td>+&lt;/td>
 &lt;td>1&lt;/td>
 &lt;td>1&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>0&lt;/td>
 &lt;td>+&lt;/td>
 &lt;td>0&lt;/td>
 &lt;td>0&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>1&lt;/td>
 &lt;td>+&lt;/td>
 &lt;td>1+1&lt;/td>
 &lt;td>11&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>Carry is involved whenever we have a result larger than &lt;code>bin 1&lt;/code>&lt;/p>
&lt;h2 id="binary-multiplication">Binary multiplication&lt;a class="anchor" href="#binary-multiplication">#&lt;/a>&lt;/h2>
&lt;h3 id="possibilities">Possibilities&lt;a class="anchor" href="#possibilities">#&lt;/a>&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>A&lt;/th>
 &lt;th>OP&lt;/th>
 &lt;th>B&lt;/th>
 &lt;th>\=&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>0&lt;/td>
 &lt;td>*&lt;/td>
 &lt;td>0&lt;/td>
 &lt;td>0&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>1&lt;/td>
 &lt;td>*&lt;/td>
 &lt;td>0&lt;/td>
 &lt;td>0&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>1&lt;/td>
 &lt;td>**&lt;/td>
 &lt;td>1&lt;/td>
 &lt;td>1&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="binary-subtraction">Binary subtraction&lt;a class="anchor" href="#binary-subtraction">#&lt;/a>&lt;/h2>
&lt;h3 id="possibilities">Possibilities&lt;a class="anchor" href="#possibilities">#&lt;/a>&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>A&lt;/th>
 &lt;th>OP&lt;/th>
 &lt;th>B&lt;/th>
 &lt;th>\=&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>0&lt;/td>
 &lt;td>-&lt;/td>
 &lt;td>0&lt;/td>
 &lt;td>0&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>1&lt;/td>
 &lt;td>-&lt;/td>
 &lt;td>0&lt;/td>
 &lt;td>1&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>1&lt;/td>
 &lt;td>-&lt;/td>
 &lt;td>1&lt;/td>
 &lt;td>0&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>0&lt;/td>
 &lt;td>-&lt;/td>
 &lt;td>1&lt;/td>
 &lt;td>(borrow 1 from the next column 10 - 1) = 1)&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table></description></item><item><title>Math</title><link>https://seds.nl/notes/math/</link><pubDate>Sun, 31 May 2020 13:06:00 +0000</pubDate><guid>https://seds.nl/notes/math/</guid><description/></item><item><title>Python</title><link>https://seds.nl/notes/python/</link><pubDate>Sun, 31 May 2020 13:04:00 +0000</pubDate><guid>https://seds.nl/notes/python/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a> &lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/dd>
&lt;/dl></description></item><item><title>Compiler</title><link>https://seds.nl/notes/compiler/</link><pubDate>Sun, 31 May 2020 13:03:00 +0000</pubDate><guid>https://seds.nl/notes/compiler/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-architecture/">Computer Architecture&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/risc_v_instruction_format/">RISC-V Instruction Format&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="syntax-analysis">Syntax Analysis&lt;a class="anchor" href="#syntax-analysis">#&lt;/a>&lt;/h2>
&lt;p>Syntax analysis happens after the Lexical phase, and it is responsible for detecting
syntax errors.&lt;/p>
&lt;h2 id="grammar">Grammar&lt;a class="anchor" href="#grammar">#&lt;/a>&lt;/h2>
&lt;p>Be design, computer languages have defined structure of what constitutes a
valid program. in &lt;a href="https://seds.nl/notes/python/">Python&lt;/a>, a program is made up of functions/classes/imports, a
function requires declarations and/or statements and so on. In C, a valid
program needs to have a least a function called main, otherwise the GNU&amp;rsquo;s linker is
unable to link the program.&lt;/p></description></item><item><title>Computer Architecture</title><link>https://seds.nl/notes/computer-architecture/</link><pubDate>Sun, 31 May 2020 13:01:00 +0000</pubDate><guid>https://seds.nl/notes/computer-architecture/</guid><description/></item><item><title>RISCV</title><link>https://seds.nl/notes/riscv/</link><pubDate>Sun, 31 May 2020 12:37:00 +0000</pubDate><guid>https://seds.nl/notes/riscv/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/operating-systems/">Operating Systems&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-architecture/">Computer Architecture&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/risc_v_instruction_format/">RISC-V Instruction Format&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/notes_on_risc_v_cpu_hard_ip_cores_enter_soc_fpgas/#polarfire-soc-risc-v-enabled-innocation-platform">PolarFire SoC - RISC-V enabled innocation platform&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="understanding-riscv-stack-pointer">Understanding RISCV stack pointer&lt;a class="anchor" href="#understanding-riscv-stack-pointer">#&lt;/a>&lt;/h2>
&lt;h3 id="l06-riscv-functions--6up--dot-pdf-dot-pdf">&lt;a href="https://inst.eecs.berkeley.edu/~cs61c/fa17/lec/06/L06%20RISCV%20Functions%20%286up%29.pdf">L06 RISCV Functions(6up).pdf&lt;/a>&lt;a class="anchor" href="#l06-riscv-functions--6up--dot-pdf-dot-pdf">#&lt;/a>&lt;/h3>
&lt;h2 id="exceptions">Exceptions&lt;a class="anchor" href="#exceptions">#&lt;/a>&lt;/h2>
&lt;p>Exception are unusual condition occurring at run time associated with an
instruction in the current RISCV thread. Exceptions may be converted to traps,
but that all depends on the execution environment.&lt;/p>
&lt;h2 id="traps">Traps&lt;a class="anchor" href="#traps">#&lt;/a>&lt;/h2>
&lt;p>Trap refers to the synchronous transfer control to a trap handler caused by an
exceptional condition occurring within a RISC thread. Trap handlers normally
execute in a more privilege environment.&lt;/p></description></item><item><title>Thesis</title><link>https://seds.nl/notes/thesis/</link><pubDate>Sun, 31 May 2020 12:35:00 +0000</pubDate><guid>https://seds.nl/notes/thesis/</guid><description/></item><item><title>C programming</title><link>https://seds.nl/notes/c-programming/</link><pubDate>Sun, 31 May 2020 12:33:00 +0000</pubDate><guid>https://seds.nl/notes/c-programming/</guid><description>&lt;dl>
&lt;dt>Tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a> &lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/dd>
&lt;/dl>
&lt;h2 id="c-project-architecture-guidelines">C project architecture guidelines&lt;a class="anchor" href="#c-project-architecture-guidelines">#&lt;/a>&lt;/h2>
&lt;h3 id="functions-exposed-in-the-header-are-like-public-methods">Functions exposed in the header are like public methods&lt;a class="anchor" href="#functions-exposed-in-the-header-are-like-public-methods">#&lt;/a>&lt;/h3>
&lt;p>Think of each module like a class. The functions you expose in the
header are like public methods. Only put a function in the header if it
part of the module&amp;rsquo;s needed interface.&lt;/p>
&lt;h3 id="avoiding-circular-module-dependencies">Avoiding circular module dependencies&lt;a class="anchor" href="#avoiding-circular-module-dependencies">#&lt;/a>&lt;/h3>
&lt;p>Avoid circular module dependencies. Module A and module B should
not call each other. You can refactor something into a module C to avoid
that.&lt;/p></description></item><item><title>Programming</title><link>https://seds.nl/notes/programming/</link><pubDate>Sun, 31 May 2020 12:33:00 +0000</pubDate><guid>https://seds.nl/notes/programming/</guid><description/></item><item><title>Go Programming</title><link>https://seds.nl/notes/go-programming/</link><pubDate>Sun, 31 May 2020 12:31:00 +0000</pubDate><guid>https://seds.nl/notes/go-programming/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a> &lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/dd>
&lt;/dl>
&lt;p>Related notes: &lt;a href="https://seds.nl/notes/interesting-golang-libraries/">Interesting Golang libraries&lt;/a>&lt;/p>
&lt;h2 id="packages">Packages&lt;a class="anchor" href="#packages">#&lt;/a>&lt;/h2>
&lt;p>In Go, programs start running in package &lt;code>main&lt;/code>. Package names are defined by
the last element of the import path: &lt;code>import math/rand&lt;/code> has files which begin
with the &lt;code>package rand&lt;/code>. Packages consists of a bunch of &lt;code>.go&lt;/code> files.&lt;/p>
&lt;p>Package identifiers (functions, variables, struct and other data), may be used
in other packages, with a few exceptions. Go allows only exported identifiers to
be called after the package import. An exported identifier is any identifier
which the first character starts in &lt;code>UPPER CASE&lt;/code>. Any identifier which starts
with a &lt;code>lower case&lt;/code> letter is not exported.&lt;/p></description></item><item><title>Computer Science</title><link>https://seds.nl/notes/computer-science/</link><pubDate>Sun, 31 May 2020 12:29:00 +0000</pubDate><guid>https://seds.nl/notes/computer-science/</guid><description/></item><item><title>Operating Systems</title><link>https://seds.nl/notes/operating-systems/</link><pubDate>Sun, 31 May 2020 12:29:00 +0000</pubDate><guid>https://seds.nl/notes/operating-systems/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/thesis/">Thesis&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-architecture/">Computer Architecture&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="os-kit">OS Kit&lt;a class="anchor" href="#os-kit">#&lt;/a>&lt;/h2>
&lt;p>The OSKit is a framework and a set of &lt;a href="https://www.cs.utah.edu/flux/oskit/html/oskit-wwwch1.html">34 component libraries&lt;/a>
oriented to operating systems, together with extensive documentation. By
providing in a modular way not only most of the infrastructure &amp;ldquo;grunge&amp;rdquo;
needed by an OS, but also many higher-level components, the OSKit&amp;rsquo;s goal
is to lower the barrier to entry to OS R&amp;amp;D and to lower its costs. The
OSKit makes it vastly easier to create a new OS, port an existing OS to
the x86 (or in the future, to other architectures supported by the
OSkit), or enhance an OS to support a wider range of devices, file
system formats, executable formats, or network services. The OSKit also
works well for constructing OS-related programs, such as boot loaders or
OS-level servers atop a microkernel&lt;/p></description></item><item><title>Integral Calculus</title><link>https://seds.nl/notes/integral-calculus/</link><pubDate>Sun, 31 May 2020 13:05:00 +0200</pubDate><guid>https://seds.nl/notes/integral-calculus/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/math/">Math&lt;/a>&lt;/dd>
&lt;/dl>
&lt;blockquote class='book-hint '>
&lt;p>These are the two ways we commonly think about definite integrals: they describe
an accumulation of a quantity, so the entire definite integral gives us the net
change in that quantity.&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p>&lt;/blockquote>&lt;h2 id="why-integral-calculus">Why Integral Calculus&lt;a class="anchor" href="#why-integral-calculus">#&lt;/a>&lt;/h2>
&lt;p>Figure represents 2 graphs of &lt;code>y = cos(x)&lt;/code>. Let&amp;rsquo;s say we would
like to calculate the area of &lt;span class="book-katex">( x_1 )&lt;/span>&lt;link rel="stylesheet" href="https://seds.nl/katex/katex.min.css" />&lt;script defer src="https://seds.nl/katex/katex.min.js">&lt;/script>&lt;script defer src="https://seds.nl/katex/auto-render.min.js" onload="renderMathInElement(document.body, {&amp;#34;delimiters&amp;#34;:[{&amp;#34;left&amp;#34;:&amp;#34;$$&amp;#34;,&amp;#34;right&amp;#34;:&amp;#34;$$&amp;#34;,&amp;#34;display&amp;#34;:true},{&amp;#34;left&amp;#34;:&amp;#34;\\(&amp;#34;,&amp;#34;right&amp;#34;:&amp;#34;\\)&amp;#34;,&amp;#34;display&amp;#34;:false},{&amp;#34;left&amp;#34;:&amp;#34;\\[&amp;#34;,&amp;#34;right&amp;#34;:&amp;#34;\\]&amp;#34;,&amp;#34;display&amp;#34;:true}]});">&lt;/script>. We could calculate
the area by aproximation, for example, Graph B is filled with the area we would
like to calculate, so we could divide this area by equal sections of
\(\Delta x_n\) from &lt;code>a&lt;/code> to &lt;code>b&lt;/code> rectangles, then we could calculate the area of
these rectangles by \(f(x_i) * \Delta x_n\) where \(f\) is the area of each of
the rectangles. We do this for each rectangle then sum them up: \(\sum_{i=1}^n f(x_i) *
\Delta x_n\). This will give us an approximation of our area, we could have a
better approximation by having our \(\Delta x_n\) smaller, but this implies that
our &lt;code>n&lt;/code> becomes bigger and bigger. The smaller \(\Delta x_n\) gets, the more &lt;code>n&lt;/code>
approaches infinity.&lt;/p></description></item><item><title>Socratic questioning</title><link>https://seds.nl/notes/socratic-questioning/</link><pubDate>Sun, 31 May 2020 10:16:00 +0000</pubDate><guid>https://seds.nl/notes/socratic-questioning/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/thinking-methods/">Thinking methods&lt;/a> &lt;a href="https://seds.nl/notes/mindset/">Mindset&lt;/a> &lt;a href="https://seds.nl/notes/mental-models/">Mental models&lt;/a> &lt;a href="https://seds.nl/notes/learning/">Learning&lt;/a>&lt;/dd>
&lt;/dl>
&lt;p>Socratic questioning is one of many &lt;a href="https://seds.nl/notes/mental-models/">Mental models&lt;/a> allows us to pursue thoughts
in many directions and establish first principles through strict analysis. It
allows us to establish truth and separate knowledge from ignorance by reveling
underlying assumptions. The method allows us to explore complex ideas and find
the truth out of things while opening up issues and problems.&lt;/p>
&lt;h2 id="key-principles-of-the-method">Key principles of the method&lt;a class="anchor" href="#key-principles-of-the-method">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>Identifying principles of thinking and cut through dogma and shared belief&lt;/li>
&lt;li>Open up issues and problems&lt;/li>
&lt;li>Explore complex ideas and find the truth out of things&lt;/li>
&lt;li>Reveals underlying assumptions&lt;/li>
&lt;li>Separates knowledge from ignorance&lt;/li>
&lt;li>Uses to establish truth&lt;/li>
&lt;li>Establish first principles through strict analysis&lt;/li>
&lt;li>Pursue thoughts in many direction&lt;/li>
&lt;/ul>
&lt;h2 id="using-the-process">Using the process&lt;a class="anchor" href="#using-the-process">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>Clarify your thinking and explaining the origins of your idea
&lt;ul>
&lt;li>&lt;em>Why do I think this?&lt;/em>&lt;/li>
&lt;li>&lt;em>What exactly do I think?&lt;/em>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Questioning the original question
&lt;ul>
&lt;li>&lt;em>Why did I think that?&lt;/em>&lt;/li>
&lt;li>&lt;em>Was I correct?&lt;/em>&lt;/li>
&lt;li>&lt;em>What conclusions can I draw from the reasoning process?&lt;/em>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Challenging assumptions
&lt;ul>
&lt;li>&lt;em>How do I know this is true?&lt;/em>&lt;/li>
&lt;li>&lt;em>What if you think the other way around?&lt;/em>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Looking for evidence
&lt;ul>
&lt;li>&lt;em>How can I back this up?&lt;/em>&lt;/li>
&lt;li>&lt;em>Is there any research made on this?&lt;/em>&lt;/li>
&lt;li>&lt;em>What are the sources?&lt;/em>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Consider alternative perspectives
&lt;ul>
&lt;li>&lt;em>What might others think?&lt;/em>&lt;/li>
&lt;li>&lt;em>How do I know I am correct?&lt;/em>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Examining consequences and implications
&lt;ul>
&lt;li>&lt;em>What if I am wrong?&lt;/em>&lt;/li>
&lt;li>&lt;em>What are the implications and consequences if I am wrong?&lt;/em>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item><item><title>Mental models</title><link>https://seds.nl/notes/mental-models/</link><pubDate>Sun, 31 May 2020 01:30:00 +0000</pubDate><guid>https://seds.nl/notes/mental-models/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/thinking-methods/">Thinking methods&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/mindset/">Mindset&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/learning/">Learning&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/communication/">Communication&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;blockquote class='book-hint '>
&lt;p>« You only think you know, as a matter of fact. And most of your actions are
based on incomplete knowledge and you really don’t know what it is all about, or
what the purpose of the world is, or know a great deal of other things. It is
possible to live and not know. »&lt;/p>
&lt;p>&amp;ndash; Richard Feynman&lt;/p>
&lt;p>Parrish, Shane. The Great Mental Models Volume 1: General Thinking Concepts (p.
12). Latticework Publishing Inc.. Kindle Edition.&lt;/p></description></item><item><title>Mindset</title><link>https://seds.nl/notes/mindset/</link><pubDate>Sun, 31 May 2020 01:24:00 +0000</pubDate><guid>https://seds.nl/notes/mindset/</guid><description/></item><item><title>Learning</title><link>https://seds.nl/notes/learning/</link><pubDate>Sun, 31 May 2020 01:23:00 +0000</pubDate><guid>https://seds.nl/notes/learning/</guid><description/></item><item><title>Thinking methods</title><link>https://seds.nl/notes/thinking-methods/</link><pubDate>Sun, 31 May 2020 01:19:00 +0000</pubDate><guid>https://seds.nl/notes/thinking-methods/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/learning/">Learning&lt;/a> &lt;a href="https://seds.nl/notes/mindset/">Mindset&lt;/a> &lt;a href="https://seds.nl/notes/mental-models/">Mental models&lt;/a>&lt;/dd>
&lt;/dl>
&lt;p>Thinking methods are techniques where we can get better at solving complex
problems and having a clearer view of the problem. It allows us to thought
experience and running towards reality instead of away from. Understanding must
constantly be tested against reality and updated accordingly. We can break
problems into sub-problems so we can better view reality.&lt;/p>
&lt;p>&lt;strong>Prevents failure from interacting with reality&lt;/strong>&lt;/p>
&lt;p>&lt;a id="org7c57d46">&lt;/a>&lt;/p>
&lt;figure>&lt;img src="https://seds.nl/imgs/thinking-methods.jpg"
 alt="Figure 1: Mindmap of thinking methods">&lt;figcaption>
 &lt;p>Figure 1: Mindmap of thinking methods&lt;/p></description></item><item><title>Interesting Golang libraries</title><link>https://seds.nl/notes/interesting-golang-libraries/</link><pubDate>Sat, 30 May 2020 20:33:00 +0000</pubDate><guid>https://seds.nl/notes/interesting-golang-libraries/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/go-programming/">Go Programming&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;ul>
&lt;li>&lt;a href="https://github.com/jmoiron/sqlx">https://github.com/jmoiron/sqlx&lt;/a>&lt;/li>
&lt;li>&lt;del>&lt;a href="https://pg.uptrace.dev/guide/">https://pg.uptrace.dev/guide/&lt;/a>&lt;/del> &lt;a href="https://pg.uptrace.dev/">https://pg.uptrace.dev/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/go-pg/pg">https://github.com/go-pg/pg&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Entered on &lt;span class="timestamp-wrapper">&lt;span class="timestamp">[2020-05-27 Wed 21:36]&lt;/span>&lt;/span>&lt;/p>
&lt;p>&amp;lt;~/workspace/commit-validator/requirements.txt&amp;gt;&lt;/p></description></item><item><title>Abortion</title><link>https://seds.nl/notes/abortion/</link><pubDate>Sat, 30 May 2020 20:09:00 +0000</pubDate><guid>https://seds.nl/notes/abortion/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/politics/">Politics&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Abortion should be legal, safe and rare&lt;/p></description></item><item><title>Media</title><link>https://seds.nl/notes/media/</link><pubDate>Sat, 30 May 2020 20:08:00 +0000</pubDate><guid>https://seds.nl/notes/media/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/politics/">Politics&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="mídia-noam-chomsky">&lt;strong>&lt;strong>Mídia&lt;/strong>&lt;/strong> - Noam Chomsky&lt;a class="anchor" href="#m%c3%addia-noam-chomsky">#&lt;/a>&lt;/h2>
&lt;h3 id="duas-concepções-diferentes-de-democracia">Duas concepções diferentes de democracia&lt;a class="anchor" href="#duas-concep%c3%a7%c3%b5es-diferentes-de-democracia">#&lt;/a>&lt;/h3>
&lt;ol>
&lt;li>Uma sociedade democrática é aquela em que o povo dispõe de&lt;/li>
&lt;/ol>
&lt;p>condições de participar de maneira significativa na condução de seus
assuntos pessoais e na qual os canais de informação são acessíveis e
livres&lt;/p>
&lt;ol>
&lt;li>O povo deve ser impedido de conduzir seus assuntos pessoais e os&lt;/li>
&lt;/ol>
&lt;p>canais de informação devem ser estreita e rigidamente controlados&lt;/p>
&lt;ul>
&lt;li>Essa é a concepção predominante&lt;/li>
&lt;li>Primeiras revoluções democráticas na Inglaterra do século XVII
(17) expressam em grande medida esse ponto de vista&lt;/li>
&lt;/ul>
&lt;h3 id="primeira-operação-de-propaganda-governamental">Primeira operação de propaganda governamental&lt;a class="anchor" href="#primeira-opera%c3%a7%c3%a3o-de-propaganda-governamental">#&lt;/a>&lt;/h3>
&lt;h4 id="governo-de-woodrow-wilson">Governo de &lt;a href="https://en.wikipedia.org/wiki/Woodrow%5FWilson">Woodrow Wilson&lt;/a>&lt;a class="anchor" href="#governo-de-woodrow-wilson">#&lt;/a>&lt;/h4>
&lt;h4 id="presidente-dos-estados-unidos-em-1916">Presidente dos Estados Unidos em 1916&lt;a class="anchor" href="#presidente-dos-estados-unidos-em-1916">#&lt;/a>&lt;/h4>
&lt;!--list-separator-->
&lt;ul>
&lt;li>
&lt;p>Plataforma &amp;ldquo;Paz sem Vitória&amp;rdquo;&lt;/p></description></item><item><title>Na batalha contra o coronavirus, faltam lideres a humanidade</title><link>https://seds.nl/notes/na-batalha-contra-o-coronavirus/</link><pubDate>Sat, 30 May 2020 20:06:00 +0000</pubDate><guid>https://seds.nl/notes/na-batalha-contra-o-coronavirus/</guid><description>&lt;ul>
&lt;li>Related paged
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/politics/">Politics&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="">&lt;span class="timestamp-wrapper">&lt;span class="timestamp">&amp;lt;2020-04-01 Wed 22:23&amp;gt;&lt;/span>&lt;/span>&lt;a class="anchor" href="#">#&lt;/a>&lt;/h2>
&lt;p>O verdadeiro antídoto para epidemias não é a segregação, mas a
cooperação.&lt;/p>
&lt;h2 id="">&lt;span class="timestamp-wrapper">&lt;span class="timestamp">&amp;lt;2020-04-01 Wed 22:28&amp;gt;&lt;/span>&lt;/span>&lt;a class="anchor" href="#">#&lt;/a>&lt;/h2>
&lt;p>Isso porque a melhor defesa que os humanos têm contra os patógenos não é o
isolamento, mas a informação. A humanidade tem vencido a guerra contra as
epidemias porque, na corrida armamentista entre patógenos e médicos, os
patógenos dependem de mutações cegas, ao passo que os médicos se apoiam na
análise científica da informação.&lt;/p></description></item><item><title>Alice in wonderland: The complete collection</title><link>https://seds.nl/notes/alice-in-wonderland/</link><pubDate>Sat, 30 May 2020 20:05:00 +0000</pubDate><guid>https://seds.nl/notes/alice-in-wonderland/</guid><description>&lt;h2 id="">&lt;span class="timestamp-wrapper">&lt;span class="timestamp">&amp;lt;2020-03-07 Sat 03:33&amp;gt;&lt;/span>&lt;/span>&lt;a class="anchor" href="#">#&lt;/a>&lt;/h2>
&lt;p>Why, there’s hardly enough of me left to make one respectable person!”&lt;/p>
&lt;h2 id="">&lt;span class="timestamp-wrapper">&lt;span class="timestamp">&amp;lt;2020-03-13 Fri 01:10&amp;gt;&lt;/span>&lt;/span>&lt;a class="anchor" href="#">#&lt;/a>&lt;/h2>
&lt;p>at least I know who I was when I got up this morning, but I think I must have
been changed several times since then.’&lt;/p>
&lt;h2 id="">&lt;span class="timestamp-wrapper">&lt;span class="timestamp">&amp;lt;2020-03-14 Sat 00:29&amp;gt;&lt;/span>&lt;/span>&lt;a class="anchor" href="#">#&lt;/a>&lt;/h2>
&lt;p>‘they’re sure to kill it in a day or two: wouldn’t it be murder to leave
it behind?’&lt;/p>
&lt;h2 id="">&lt;span class="timestamp-wrapper">&lt;span class="timestamp">&amp;lt;2020-03-25 Wed 00:39&amp;gt;&lt;/span>&lt;/span>&lt;a class="anchor" href="#">#&lt;/a>&lt;/h2>
&lt;p>‘In most gardens,’ the Tiger-lily said, ‘they make the beds too soft —
so that the flowers are always asleep.’&lt;/p></description></item><item><title>Nonviolent communication: A language for life</title><link>https://seds.nl/notes/non-violent-communication/</link><pubDate>Sat, 30 May 2020 20:04:00 +0000</pubDate><guid>https://seds.nl/notes/non-violent-communication/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/mindset/">Mindset&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/learning/">Learning&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/communication/">Communication&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="nonviolent-communication-a-language-for-life">&lt;span class="org-todo done READ">READ&lt;/span> Nonviolent Communication: A language for life&lt;a class="anchor" href="#nonviolent-communication-a-language-for-life">#&lt;/a>&lt;/h2>
&lt;div class="table-caption">
 &lt;span class="table-number">Table 1&lt;/span>:
 Clock summary at &lt;span class="timestamp-wrapper">&lt;span class="timestamp">[2020-06-06 Sat 03:49]&lt;/span>&lt;/span>
&lt;/div>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Headline&lt;/th>
 &lt;th>Time&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;strong>Total time&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>8:12&lt;/strong>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Nonviolent Communication: A language&amp;hellip;&lt;/td>
 &lt;td>8:12&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>CLOSED: &lt;span class="timestamp-wrapper">&lt;span class="timestamp">[2020-05-14 Thu 09:18]&lt;/span>&lt;/span>&lt;/p>
&lt;p>:BOOK_CATEGORY: psychology
:BOOK_AUTHORS: Marshall B. Rosenberg
:START_DATE: &lt;span class="timestamp-wrapper">&lt;span class="timestamp">&amp;lt;2020-04-14 Tue&amp;gt;&lt;/span>&lt;/span>
:END_DATE: &lt;span class="timestamp-wrapper">&lt;span class="timestamp">&amp;lt;2020-05-14 Thu&amp;gt;&lt;/span>&lt;/span>
:URL: &lt;a href="https://www.goodreads.com/book/show/560861.Non%5FViolent%5FCommunication">https://www.goodreads.com/book/show/560861.Non%5FViolent%5FCommunication&lt;/a>&lt;/p></description></item><item><title>The great mental models: General thinking concepts</title><link>https://seds.nl/notes/the-great-mental-models/</link><pubDate>Sat, 30 May 2020 20:03:00 +0000</pubDate><guid>https://seds.nl/notes/the-great-mental-models/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/thinking-methods/">Thinking methods&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/mental-models/">Mental models&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/mindset/">Mindset&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/learning/">Learning&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="the-great-mental-models-general-thinking-concepts">&lt;span class="org-todo done READ">READ&lt;/span> The Great Mental Models: General Thinking Concepts&lt;a class="anchor" href="#the-great-mental-models-general-thinking-concepts">#&lt;/a>&lt;/h2></description></item><item><title>Clean code</title><link>https://seds.nl/notes/clean-code/</link><pubDate>Sat, 30 May 2020 20:01:00 +0000</pubDate><guid>https://seds.nl/notes/clean-code/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-architecture/">Computer Architecture&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="clean-code">&lt;span class="org-todo todo NEXT">NEXT&lt;/span> Clean Code&lt;a class="anchor" href="#clean-code">#&lt;/a>&lt;/h2></description></item><item><title>Clean architecture</title><link>https://seds.nl/notes/clean-architecture/</link><pubDate>Sat, 30 May 2020 20:00:00 +0000</pubDate><guid>https://seds.nl/notes/clean-architecture/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-architecture/">Computer Architecture&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="hold-clean-architecture">HOLD Clean Architecture&lt;a class="anchor" href="#hold-clean-architecture">#&lt;/a>&lt;/h2></description></item><item><title>Operating systems: Internals and design principles (9th edition)</title><link>https://seds.nl/notes/operating-systems/</link><pubDate>Sat, 30 May 2020 19:58:00 +0000</pubDate><guid>https://seds.nl/notes/operating-systems/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/operating-systems/">Operating Systems&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="reading-operating-systems-internals-and-design-principles--9th-edition">READING Operating Systems: Internals and Design Principles (9th Edition)&lt;a class="anchor" href="#reading-operating-systems-internals-and-design-principles--9th-edition">#&lt;/a>&lt;/h2>
&lt;div class="table-caption">
 &lt;span class="table-number">Table 1&lt;/span>:
 Clock summary at &lt;span class="timestamp-wrapper">&lt;span class="timestamp">[2020-06-06 Sat 03:47]&lt;/span>&lt;/span>
&lt;/div>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Headline&lt;/th>
 &lt;th>Time&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;strong>Total time&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>3:24&lt;/strong>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Operating Systems: Internals and&amp;hellip;&lt;/td>
 &lt;td>3:24&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="exercises">Exercises&lt;a class="anchor" href="#exercises">#&lt;/a>&lt;/h3>
&lt;p>1.1. CPU: Takes care of processing data
Main memory: Volatile memory for storing data and program instructions
Secondary storage: Non-volatile for permantely storing data.
I/O: External peripherals such as USB drive, printer and etc.&lt;/p>
&lt;p>1.2. Memory address register (MAR): specifies the memory address for the next
read or write.
Memory buffer register (MBR): contains data to be written to memory or
receives data read from memory.&lt;/p></description></item><item><title>The Pragmatic programmer: from journeyman to master</title><link>https://seds.nl/notes/the-pragmatic-programmer/</link><pubDate>Sat, 30 May 2020 19:57:00 +0000</pubDate><guid>https://seds.nl/notes/the-pragmatic-programmer/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-architecture/">Computer Architecture&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="reading-the-pragmatic-programmer-from-journeyman-to-master">READING The Pragmatic Programmer: From Journeyman to Master&lt;a class="anchor" href="#reading-the-pragmatic-programmer-from-journeyman-to-master">#&lt;/a>&lt;/h2>
&lt;div class="table-caption">
 &lt;span class="table-number">Table 1&lt;/span>:
 Clock summary at &lt;span class="timestamp-wrapper">&lt;span class="timestamp">[2020-06-23 Tue 09:01]&lt;/span>&lt;/span>
&lt;/div>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Headline&lt;/th>
 &lt;th>Time&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;strong>Total time&lt;/strong>&lt;/td>
 &lt;td>&lt;strong>10:04&lt;/strong>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>The Pragmatic Programmer: From&amp;hellip;&lt;/td>
 &lt;td>10:04&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>:BOOK_CATEGORY: Computer science, software architecture, software engineering
:BOOK_AUTHORS: Andy Hunt, David Thomas
:START_DATE: &lt;span class="timestamp-wrapper">&lt;span class="timestamp">&amp;lt;2020-05-25 Mon&amp;gt;&lt;/span>&lt;/span>
:END_DATE: nil
:URL: &lt;a href="https://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X">https://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X&lt;/a>&lt;/p></description></item><item><title>Org-roam Firefox bookmark</title><link>https://seds.nl/notes/org-roam-firefox-bookmark/</link><pubDate>Sat, 30 May 2020 19:30:00 +0000</pubDate><guid>https://seds.nl/notes/org-roam-firefox-bookmark/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/org_mode/">Org-mode&lt;/a> &lt;a href="https://seds.nl/notes/emacs-editor/">Emacs&lt;/a> &lt;a href="https://seds.nl/notes/org_roam/">Org-roam&lt;/a>&lt;/dd>
&lt;/dl>
&lt;p>&lt;a href="https://www.orgroam.com/manual.html">Org-roam&lt;/a> has roam-protocol, which we can call throughout the system just like
&lt;a href="https://seds.nl/notes/orgmode-firefox-bookmark/">Org-mode Firefox bookmarks&lt;/a>.&lt;/p>
&lt;p>&lt;code>Org-roam&lt;/code> protocol supports specifying the roam template to use.
Template is the &lt;code>template&lt;/code> key for a template in org-roam-capture-ref-templates.
More documentation on the templating system can be found here.&lt;/p>
&lt;p>These templates should contain a &lt;code>#+ROAM_KEY: ${ref}&lt;/code> in it.&lt;/p>
&lt;h2 id="roam-ref-protocol">&lt;code>Roam-ref&lt;/code> protocol&lt;a class="anchor" href="#roam-ref-protocol">#&lt;/a>&lt;/h2>
&lt;p>Find and creates from with a specific ROAM_KEY&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">javascript&lt;/span>&lt;span style="color:#f92672">:&lt;/span>&lt;span style="color:#a6e22e">location&lt;/span>.&lt;span style="color:#a6e22e">href&lt;/span> &lt;span style="color:#f92672">=&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">&amp;#39;org-protocol://roam-ref?template=r&amp;amp;ref=&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">+&lt;/span> encodeURIComponent(&lt;span style="color:#a6e22e">location&lt;/span>.&lt;span style="color:#a6e22e">href&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#e6db74">&amp;#39;&amp;amp;title=&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">+&lt;/span> encodeURIComponent(document.&lt;span style="color:#a6e22e">title&lt;/span>)&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Org-mode Firefox bookmarks</title><link>https://seds.nl/notes/orgmode-firefox-bookmark/</link><pubDate>Sat, 30 May 2020 19:22:00 +0000</pubDate><guid>https://seds.nl/notes/orgmode-firefox-bookmark/</guid><description>&lt;dl>
&lt;dt>tags&lt;/dt>
&lt;dd>&lt;a href="https://seds.nl/notes/org_mode/">Org-mode&lt;/a> &lt;a href="https://seds.nl/notes/emacs-editor/">Emacs&lt;/a>&lt;/dd>
&lt;/dl>
&lt;p>Add the following scripts to call org-capture from Firefox&lt;/p>
&lt;h2 id="call-capture-template">Call capture template&lt;a class="anchor" href="#call-capture-template">#&lt;/a>&lt;/h2>
&lt;p>The following calls capture template key &lt;code>n&lt;/code>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">javascript&lt;/span>&lt;span style="color:#f92672">:&lt;/span>&lt;span style="color:#a6e22e">location&lt;/span>.&lt;span style="color:#a6e22e">href&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#39;org-protocol://capture?template=n&amp;#39;&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#e6db74">&amp;#39;&amp;amp;url=&amp;#39;&lt;/span>&lt;span style="color:#f92672">+&lt;/span>encodeURIComponent(window.&lt;span style="color:#a6e22e">location&lt;/span>.&lt;span style="color:#a6e22e">href&lt;/span>)&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#e6db74">&amp;#39;&amp;amp;title=&amp;#39;&lt;/span>&lt;span style="color:#f92672">+&lt;/span>encodeURIComponent(document.&lt;span style="color:#a6e22e">title&lt;/span>)&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#e6db74">&amp;#39;&amp;amp;body=&amp;#39;&lt;/span>&lt;span style="color:#f92672">+&lt;/span>encodeURIComponent(window.&lt;span style="color:#a6e22e">getSelection&lt;/span>());&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="without-a-capture-template">Without a capture template&lt;a class="anchor" href="#without-a-capture-template">#&lt;/a>&lt;/h2>
&lt;p>If unspecified, the template key is set in the variable
org-protocol-default-template-key. The following template placeholders are
available:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-org" data-lang="org">&lt;span style="display:flex;">&lt;span>%:link The URL
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>%:description The webpage title
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>%:annotation Equivalent to [[&lt;span style="color:#a6e22e">%:link&lt;/span>][&lt;span style="color:#f92672">%:description&lt;/span>]]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>%i The selected text&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>See: &lt;a href="https:orgmode.org/manual/The-capture-protocol.html#The-capture-protocol">https:orgmode.org/manual/The-capture-protocol.html#The-capture-protocol&lt;/a>&lt;/p></description></item><item><title>List of Spotify artists</title><link>https://seds.nl/notes/list-of-spotify-artists/</link><pubDate>Sat, 30 May 2020 18:56:00 +0000</pubDate><guid>https://seds.nl/notes/list-of-spotify-artists/</guid><description>&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Artists&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Lana Del Rey&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Slipknot&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>CocoRosie&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Papir&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Jungbluth&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Winds of Plague&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Billy Talent&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Russian Circles&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Neversleep&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Serj Tankian&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Annotations Of An Autopsy&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Circular&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Hollywood Undead&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ocean of Grief&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Rosetta&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Darude&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Mos Def&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Amenra&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>The Game&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>POWERS&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Keny Arkana&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Cartola&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>The Stranglers&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Armin van Buuren&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Sting&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Kavinsky&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Snowmine&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Linde Schöne&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Molotov Solution&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Skazi&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Grave Miasma&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Pathology&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>CHO&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Klint&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Mc João&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Alpinist, Masakari&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Mässmörd&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Mano Brown&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Passenger&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Seu Jorge&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Oliver Schories&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Wolfbrigade&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Tim Maia&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Machine Head&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>La Gossa Sorda&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Shpongle&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Paul Kalkbrenner&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Carpathian Forest&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Impending Doom&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Jonas Mantey&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>After The Burial&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Calle 13&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Opeth&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Black Label Society&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ufomammut&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Cássia Eller&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Buena Vista Social Club&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Muse&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Weval&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>A$AP Rocky&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Zero 7&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Parkway Drive&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>XXXTENTACION&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Uncle Acid &amp;amp; The Deadbeats&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Gramatik&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Hatebreed&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>CCCP – Fedeli Alla Linea&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>O Rappa&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Tom Rosenthal&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Johnny Preston&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Emmure&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Audialist&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Motörhead&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ott&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>The Faceless&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Bring Me The Horizon&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>The Kooks&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Lady Gaga&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Scann-Tec&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Slayer&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Lee DeWyze&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Behemoth&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Frank Sinatra&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>SBTRKT&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>RJD2&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Air&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Archive&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Cigarettes After Sex&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Aeuria&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Kid Loco&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Grupo Fundo De Quintal&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Devendra Banhart&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Dödsrit&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>2Pac&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>The Mamas &amp;amp; The Papas&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>The Blues Brothers&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Alesana&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Milky Chance&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Dvne&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>DOWN&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Mr. Catra&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Mani&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Tipper&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Altarage&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Sex Pistols&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>ZSK&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Marcelo D2&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Peter Joseph&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>YTCracker&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Tribo da Periferia&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Jpod&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Suffokate&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Dark Funeral&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>The Doors&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Brokencyde&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Post Malone&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Arsonists Get All The Girls&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Sarabante&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Supercommuter&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Thievery Corporation&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Cage The Elephant&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Yes-R&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Britney Spears&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Scorpions&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Vintage Culture&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>DARKSIDE&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Racionais MC&amp;rsquo;s&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>S.L.A.B.&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Against Me!&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Scars On Broadway&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Keizer&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Oasis&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Bilderbuch&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Deicide&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Blind Witness&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Miss May I&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Nick Murphy / Chet Faker&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Bob Marley &amp;amp; The Wailers&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Cacife Clandestino&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>STRFKR&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Marilyn Manson&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Soviet Suprem&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Kleerup&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Downfall Of Gaia&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Luiz Gonzaga&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Extortion&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Aspencat&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Rage Against The Machine&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Emicida&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>iwrestledabearonce&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Esham&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Moderat&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ska-P&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Orishas&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>His Hero Is Gone&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>John Coltrane&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>See You Next Tuesday&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Modeselektor&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Marduk&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Immortal&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Zero Cult&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Novos Baianos&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Neutral Milk Hotel&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>1200 Micrograms&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Dead by April&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Puscifer&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Kings of Leon&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Mike Love&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Tom Odell&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>DECASIA&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>SOJA&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>As I Lay Dying&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Irie Révoltés&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>TOOL&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Bad Religion&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Metallica&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Decibel&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Wu-Tang Clan&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Yung Buda&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>De Leve&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Criolo&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Carbon Based Lifeforms&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Conjurer&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Auroch&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Nancy Sinatra&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Burning The Masses&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Lamb of God&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Izah&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Thriftworks&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Despised Icon&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Moby&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Damian Marley&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>The Clash&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Morrow&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Lo-Pan&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Mac DeMarco&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Disturbed&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Howling&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Oranssi Pazuzu&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>alt-J&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Heaven In Her Arms / Aussitot Mort&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Intifada&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Bezerra Da Silva&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Sonic Boom Six&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>leon chang&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Alaskan&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Thy Art Is Murder&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>MC Guime&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Kevcody&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>The xx&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Weezer&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Marconi Union&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Planet Hemp&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Kick Bong&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Clear Conscience&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ultraje a Rigor&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Kings of Convenience&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Joy Division&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ação Direta&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Angus MacRae&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Louise Attaque&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>A Perfect Circle&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>laCasta&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>I Declare War&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Big Brother &amp;amp; The Holding Company&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Disfiguring The Goddess&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>As Blood Runs Black&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Iron &amp;amp; Wine&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Hymn&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ir Sais&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Janis Joplin&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Martyrdöd&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>NOFX&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Chelsea Grin&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Attila&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Lost in Kiev&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Fatboy Slim&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>King Conquer&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Cruciamentum&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Elza Soares&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Hol Baumann&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Adele&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Deaf Radio&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Abominable Putridity&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Coldplay&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Electric Wizard&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>De Dijk&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>The Prodigy&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>AWOLNATION&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Carnifex&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Mv Bill&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Body Void&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Oi Polloi&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Queens of the Stone Age&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Darvin&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>MC Cidinho&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Nightmares On Wax&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Daft Punk&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>DuvelDuvel&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>The Black Dahlia Murder&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Insane Clown Posse&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Fall Of Efrafa&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Younger Brother&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Glass Animals&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Think of One&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Joe Byrd &amp;amp; The Field Hippies&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>U2&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Whitechapel&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>James Blake&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Telefon Tel Aviv&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Imagine Dragons&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Haikaiss&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Alceu Valença&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Deep Purple&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Bijou&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ratatat&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>René Osmanczyk&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Gabriel O Pensador&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Optimus Rhyme&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Noorvik&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Scott Bradlee&amp;rsquo;s Postmodern Jukebox&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Lange Frans&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Eiffel&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Light Bearer&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Job For A Cowboy&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Areski Belkacem&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Hallucinogen&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>The Offspring&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Black Sabbath&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>The Police&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Phaeleh&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Asura&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Art Of Burning Water&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Victims&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Stick Figure&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Sonic Youth&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Anopheli&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Hundred Year Old Man&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Bleed From Within&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Jonna Fraser&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Sabotage&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>System Of A Down&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Fever Ray&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Stromae&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Hemelbestormer&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Tycho&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>August Burns Red&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ali B&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Gentleman&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Rose Funeral&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>B.B. King&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Bluetech&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ancst&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Sacha Robotti&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Martin Garrix&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Soulfly&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Young And In The Way&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Animals As Leaders&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Vomitory&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>The Who&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Foals&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Massive Attack&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>James Murray&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Tragedy&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Emancipator&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Suicide Silence&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Sepultura&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ventania.records&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Hogni&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Eric Clapton&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Otto&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Infected Mushroom&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>O Surto&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Exaltasamba&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Atomikylä&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Rise Against&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Toots &amp;amp; The Maytals&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Chelsea Wolfe&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ozzy Osbourne&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Dimmu Borgir&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Black Pumas&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>The Digital Connection&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Paul Jebanasam&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Mano Negra&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>20syl&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>AES DANA&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Cell&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Lykke Li&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Abstracter&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Beirut&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Falamansa&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Chinese Man&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Manu Chao&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Rammstein&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Rancid&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>AC/DC&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Animosity&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Childish Gambino&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Motivés&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Grift&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Tom Day&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Phantom Winter&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>MASTER BOOT RECORD&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Oceano&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Easily Embarrassed&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Matt Corby&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Cult Of Luna&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>1000mods&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ventania Banda Hippie&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>We Lost The Sea&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>All Shall Perish&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Solar Fields&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Decasia&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Zefanio&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Burzum&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Arctic Monkeys&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Zeca Baleiro&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>And Hell Followed With&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Putridity&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Blockhead&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Juventude Maldita&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Rappin&amp;rsquo; Hood&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Stevie Nicks&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Hef&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Snoop Dogg&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Bullet For My Valentine&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Black Merda!&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Buried Inside&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Epic Mountain&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Los Fastidios&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Flux Pavilion&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Alpinist&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Johnny Hooker&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>blessthefall&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Steinsopp&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Sync24&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Grupo Revelação&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>In The Hearts Of Emperors&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table></description></item><item><title>Information Theory</title><link>https://seds.nl/notes/information_theory/</link><pubDate>Sat, 30 May 2020 16:14:00 +0000</pubDate><guid>https://seds.nl/notes/information_theory/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/compiler/">Compiler&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Related content: &lt;a href="https://www.khanacademy.org/computing/computer-science/informationtheory/info-theory/">https://www.khanacademy.org/computing/computer-science/informationtheory/info-theory/&lt;/a>&lt;/p>
&lt;p>Humans express themselves using a variations of communication, such as language,
physical gestures, drawing and etc. Language allows us to take a thought and
break it down to a series of chunks. These chunks are externalized using a
series of signals or symbols.
Informally we can think of &lt;em>information&lt;/em> as some message, stored or transmitted
using some medium.&lt;/p>
&lt;p>Information is a collection of possible symbols. For example, the alphabet
allows us to choose between symbols to create words within the current context.
Everyday, we look for faster and efficient ways to transporting information
across spaces.&lt;/p></description></item><item><title>Attaching Jira issues to commit</title><link>https://seds.nl/notes/attaching-jira-issues-to-commits/</link><pubDate>Sun, 24 May 2020 02:39:00 +0200</pubDate><guid>https://seds.nl/notes/attaching-jira-issues-to-commits/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/git_change_commit_author/">Git change commit author&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;details >&lt;summary>TLDR&lt;/summary>&lt;div class="markdown-inner">
&lt;p>Dynamically attach Jira attributes to commit body using git-hook. Check the project&amp;rsquo;s &lt;a href="https://github.com/benmezger/gjira/">README&lt;/a>.&lt;/p>
&lt;/div>&lt;/details>
&lt;p>The place I work at requires Jira story ID and task ID attached to the commit
body. Initially, I was attaching the ID to the commit body manually, by checking
either my previous commit or opening up the Jira board, however, after working
some hours I was easily forgetting to attach the IDs to the commit and getting
annoying having to either reword them and perhaps having to lookup Jira again.&lt;/p></description></item><item><title>Patching requests HTTP hooks with custom arguments</title><link>https://seds.nl/notes/http-hooks-with-custom-arguments/</link><pubDate>Thu, 07 May 2020 00:00:00 +0000</pubDate><guid>https://seds.nl/notes/http-hooks-with-custom-arguments/</guid><description>&lt;p>I am working on a project where we have lots of functions integrated with
external APIs. Functions where HTTP requests get dispatched, we log the current
caller’s name, headers, and data (if any) in case we need to debug anything. For
example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> logging
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> requests
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>LOGGER &lt;span style="color:#f92672">=&lt;/span> logging&lt;span style="color:#f92672">.&lt;/span>getLogger(&lt;span style="color:#e6db74">&amp;#34;external&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">create_external_services&lt;/span>():
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> LOGGER&lt;span style="color:#f92672">.&lt;/span>info(&lt;span style="color:#e6db74">f&lt;/span>&lt;span style="color:#e6db74">&amp;#34;[func] | Request &lt;/span>&lt;span style="color:#e6db74">{&lt;/span>data&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> response &lt;span style="color:#f92672">=&lt;/span> requests&lt;span style="color:#f92672">.&lt;/span>post(&lt;span style="color:#e6db74">&amp;#34;..&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> LOGGER&lt;span style="color:#f92672">.&lt;/span>info(&lt;span style="color:#e6db74">f&lt;/span>&lt;span style="color:#e6db74">&amp;#34;[func] | Response &lt;/span>&lt;span style="color:#e6db74">{&lt;/span>response&lt;span style="color:#f92672">.&lt;/span>status_code&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74"> &lt;/span>&lt;span style="color:#e6db74">{&lt;/span>response&lt;span style="color:#f92672">.&lt;/span>text&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">delete_external_services&lt;/span>():
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> LOGGER&lt;span style="color:#f92672">.&lt;/span>info(&lt;span style="color:#e6db74">f&lt;/span>&lt;span style="color:#e6db74">&amp;#34;[func] | Request &lt;/span>&lt;span style="color:#e6db74">{&lt;/span>data&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> response &lt;span style="color:#f92672">=&lt;/span> requests&lt;span style="color:#f92672">.&lt;/span>delete(&lt;span style="color:#e6db74">&amp;#34;..&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> LOGGER&lt;span style="color:#f92672">.&lt;/span>info(&lt;span style="color:#e6db74">f&lt;/span>&lt;span style="color:#e6db74">&amp;#34;[func] | Response &lt;/span>&lt;span style="color:#e6db74">{&lt;/span>response&lt;span style="color:#f92672">.&lt;/span>status_code&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74"> &lt;/span>&lt;span style="color:#e6db74">{&lt;/span>response&lt;span style="color:#f92672">.&lt;/span>text&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>)&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>So far so good, but it gets ugly when you have a bunch of functions logging HTTP
one or multiple requests and responses.&lt;/p></description></item><item><title>Hello, org-mode and hugo</title><link>https://seds.nl/notes/hello-orgmode/</link><pubDate>Sat, 25 Apr 2020 00:00:00 -0300</pubDate><guid>https://seds.nl/notes/hello-orgmode/</guid><description>&lt;p>Hello, world! This is my first post here. This blog is created using &lt;a href="https://gohugo.io">Hugo&lt;/a> and Emacs
&lt;a href="https://orgmode.org">org-mode&lt;/a>. I am still busy migrating my posts from Asciidoc to org-mode, so this
should take a bit of time.&lt;/p></description></item><item><title>Finding exposed .git repositories</title><link>https://seds.nl/notes/finding-exposed-git-repositories/</link><pubDate>Mon, 30 Oct 2017 00:00:00 +0000</pubDate><guid>https://seds.nl/notes/finding-exposed-git-repositories/</guid><description>&lt;p>Developers use &lt;code>git&lt;/code> to version control their source code. We all do, in fact,
this blog is currently versioned by &lt;code>git&lt;/code>. However, we not only use &lt;code>git&lt;/code>
to version control, but also to deploy applications. Usually we push new code to
a remote server, where the server takes care of testing the code and then
deploying the application. There are different ways of deploying an application,
but this is one of them.&lt;/p></description></item><item><title>Notes on Linux's printk</title><link>https://seds.nl/notes/notes-on-linux-printk/</link><pubDate>Thu, 09 Mar 2017 00:00:00 +0000</pubDate><guid>https://seds.nl/notes/notes-on-linux-printk/</guid><description>&lt;p>Some of the content might be incorrect, since I am still trying to understand it
thoroughly.&lt;/p>
&lt;p>So I started studying the Linux Kernel more in depth, so I decided it would be
nice for me to document my findings, so I can read it from time to time. I will
be daily updating this post, as I am studying it everyday.&lt;/p>
&lt;p>Keep in mind that I am using the &lt;code>x86&lt;/code> architecture.&lt;/p></description></item><item><title>Higiene e bons hábitos online</title><link>https://seds.nl/notes/higiene-e-bons-habitos-online/</link><pubDate>Mon, 12 Dec 2016 00:00:00 +0000</pubDate><guid>https://seds.nl/notes/higiene-e-bons-habitos-online/</guid><description>&lt;blockquote class='book-hint '>
&lt;p>❗️*Observação:* Esse guia provavelmente se encontra defasado&lt;/p>&lt;/blockquote>&lt;p>Aqui se encontra bons hábitos e higiene online para manter sua
privacidade e segurança online.&lt;/p>
&lt;h2 id="gerenciando-seus-dados-online">Gerenciando seus dados online&lt;a class="anchor" href="#gerenciando-seus-dados-online">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>Procure todos os serviços de Data Brokers (Pipl.com, e etc), e selecione
&lt;strong>opt-out&lt;/strong> (excluir).&lt;/li>
&lt;li>Mantenha consciência e pense duas vezes antes de postar algo online
(principalmente em serviços como Facebook, Twitter, Google e outros).&lt;/li>
&lt;li>Não use o Google.com para pesquisas, como alternativa, use &lt;a href="https://www.startpage.com/">StartPage&lt;/a>,
&lt;a href="https://duckduckgo.com/">DuckDuckGo&lt;/a>, etc.&lt;/li>
&lt;li>Não faça &lt;em>check in&lt;/em> no Facebook/Foursquare e etc.&lt;/li>
&lt;li>Verifique e &lt;a href="https://www.eff.org/deeplinks/2010/05/more-privacy-facebook-new-privacy-controls">ajuste&lt;/a> suas &lt;a href="https://www.eff.org/deeplinks/2013/01/how-protect-your-privacy-facebooks-graph-search">configurações&lt;/a> de privacidade do Facebook.&lt;/li>
&lt;li>&lt;a href="https://www.eff.org/deeplinks/2015/11/guide-google-account-privacy-settings-students">Ajuste&lt;/a> suas configurações de privacidade da sua conta do Google.&lt;/li>
&lt;/ul>
&lt;h2 id="senhas">Senhas&lt;a class="anchor" href="#senhas">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Nao use senhas do tipo &lt;code>Constantinople&lt;/code>, &lt;code>yellowtiger&lt;/code>, etc.&lt;/p></description></item><item><title>Mantendo sua privacidade</title><link>https://seds.nl/notes/mantendo-sua-privacidade-online/</link><pubDate>Sun, 11 Dec 2016 00:00:00 +0000</pubDate><guid>https://seds.nl/notes/mantendo-sua-privacidade-online/</guid><description>&lt;blockquote class='book-hint '>
&lt;p>❗️*Observação:* Esse guia provavelmente se encontra defasado&lt;/p>&lt;/blockquote>&lt;p>O intuido desse guia manter uma coleção de guias, links e pensamentos sobre a
privacidade e segurança online. Nós temos em foco criar ferramentas
antifascistas, contra regimes autoritários para ajudar comunidades, organizações
e ativistas.&lt;/p>
&lt;p>Andamos observando que muitos grupos antifascistas/ativistas, usam ferramentas
como o Facebook, WhatsApp e outros para organizar seus protestos, se comunicar
com amigos e familiares, porém, essas ferramentas de comunicação são apenas uma
arma contra sua privacidade e não estão no seu lado.&lt;/p></description></item><item><title>A brief introduction to Emacs Lisp for people with programming background | lgmoneda</title><link>https://seds.nl/notes/a_brief_introduction_to_emacs_lisp_for_people_with_programming_background_lgmoneda/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://seds.nl/notes/a_brief_introduction_to_emacs_lisp_for_people_with_programming_background_lgmoneda/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/emacs-editor/">Emacs&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/computer-science/">Computer Science&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr></description></item><item><title>dots/config.el at master · jethrokuan/dots</title><link>https://seds.nl/notes/dots_config_el_at_master_jethrokuan_dots/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://seds.nl/notes/dots_config_el_at_master_jethrokuan_dots/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/org_roam_export_backlinks_on_hugo/">Org-roam export backlinks on Hugo&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/export_org_roam_backlinks_with_gohugo/">Export org-roam backlinks with Gohugo&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/emacs-editor/">Emacs&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Source: &lt;a href="https://github.com/jethrokuan/dots/blob/0064ea2aab667f115a14ce48292731db46302c53/.doom.d/config.el#L488">https://github.com/jethrokuan/dots/blob/0064ea2aab667f115a14ce48292731db46302c53/.doom.d/config.el#L488&lt;/a>&lt;/p>
&lt;p>The following exports all roam files to Hugo and includes backlinks
pre-processor.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-emacs-lisp" data-lang="emacs-lisp">&lt;span style="display:flex;">&lt;span> (defun jethro/org-roam-export-all ()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;Re-exports all Org-roam files to Hugo markdown.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (interactive)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (dolist (f (org-roam--list-all-files))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (with-current-buffer (find-file f)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (when (s-contains? &lt;span style="color:#e6db74">&amp;#34;SETUPFILE&amp;#34;&lt;/span> (&lt;span style="color:#a6e22e">buffer-string&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (org-hugo-export-wim-to-md)))))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (defun jethro/org-roam--backlinks-list (file)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (when (org-roam--org-roam-file-p file)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#a6e22e">mapcar&lt;/span> &lt;span style="color:#a6e22e">#&amp;#39;car&lt;/span> (org-roam-db-query [:select :distinct [from]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> :from links
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> :where (&lt;span style="color:#a6e22e">=&lt;/span> to $s1)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> :and from :not :like $s2] file &lt;span style="color:#e6db74">&amp;#34;%private%&amp;#34;&lt;/span>))))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (defun jethro/org-export-preprocessor (_backend)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (when-let ((links (jethro/org-roam--backlinks-list (&lt;span style="color:#a6e22e">buffer-file-name&lt;/span>))))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#a6e22e">insert&lt;/span> &lt;span style="color:#e6db74">&amp;#34;\n** Backlinks\n&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (dolist (link links)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (&lt;span style="color:#a6e22e">insert&lt;/span> (&lt;span style="color:#a6e22e">format&lt;/span> &lt;span style="color:#e6db74">&amp;#34;- [[file:%s][%s]]\n&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (file-relative-name link org-roam-directory)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (org-roam--get-title-or-slug link))))))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> (add-hook &lt;span style="color:#e6db74">&amp;#39;org-export-before-processing-hook&lt;/span> &lt;span style="color:#a6e22e">#&amp;#39;&lt;/span>jethro/org-export-preprocessor))&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>The Go Programming Language Specification - The Go Programming Language</title><link>https://seds.nl/notes/the-go-programming-language-spec/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://seds.nl/notes/the-go-programming-language-spec/</guid><description>&lt;ul>
&lt;li>Related pages
&lt;ul>
&lt;li>&lt;a href="https://seds.nl/notes/go-programming/">Go Programming&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/programming/">Programming&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/go_context_package/">Go Context package&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://seds.nl/notes/go_interfaces/">Go interfaces&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>For an operand x of type T, the address operation &amp;amp;x generates a pointer of
type *T to x. The operand must be addressable, that is, either a variable,
pointer indirection, or slice indexing operation; or a field selector of an
addressable struct operand; or an array indexing operation of an addressable
array. As an exception to the addressability requirement, x may also be a
(possibly parenthesized) composite literal. If the evaluation of x would cause
a run-time panic, then the evaluation of &amp;amp;x does too.&lt;/p></description></item></channel></rss>