Privacy design of f-droid.org webservers

F-Droid is committed to upholding privacy-by-design principles. This
commitment has significant architectural implications for all of our
software and systems. Here’s what it means for our web servers.

At present, many websites rely on commercial content delivery network (CDN)
providers. While this simplifies scaling out for website operators, it
centralizes the internet, which has some implications on user privacy. First
and foremost, CDN providers can see all user data. This means that users
need to trust that none of their data is being stored and/or leaked. CDN
providers tend to have strong privacy policies. However, users and website
operators cannot verify how these policies are enforced. Regulations such as
GDPR have reporting requirements that can help, but ultimately trust is
required.

To scale out f-droid.org in a privacy-friendly manner, we rely on mirroring
and adding more servers under our control.

Mirroring has been a successful scaling strategy for many GNU/Linux
distributions. Anyone can host a mirror of our app repository by keeping an
up-to-date copy on their web
server
. Traditionally,
Universities and ISPs provide mirroring to speed up their internet
infrastructure. Our app automatically selects a mirror for each download
based on connection performance. F-Droid carefully curates a list of
official mirrors. Our app gives users complete control over which mirrors
they want to use. We are also exploring ways to provide more information
about mirrors to assist users in making informed trust decisions. Towards
that end, the country where the mirror is located is now
provided
for official mirrors, which the client will soon
use
when choosing
where to download from. Additionally, we require a good privacy policy for
new mirrors, and are working on a way to make that
visible to
users.

As a side note, the popular proprietary CDN provider Cloudflare is
sponsoring a mirror of our website and
repository. If you trust them
you can add this repository as a mirror to your F-Droid App by going to
repository settings and adding the mirror as if you were adding a new
repository. We are working with them to get TLS Encrypted Client Hello
(ECH) enabled on that site. That is the upcoming IETF standard for
protecting metadata in TLS connections, including the domain name in the SNI
field.

We’ve automated our webserver operations with ansible on top of
Debian. This gives us a lot of flexibility, such as the ability to implement
privacy enhancing network and logging configurations, as well as the freedom
to easily change server hosting providers.

Our web servers are protected by HTTPS transport encryption. Although we use
a state of the art implementation of this protocol, the domain name that
users are connecting to is typically transmitted in clear text during
connection establishment. This is because of a widely used technique called
SNI. While SNI is a fundamental requirement for building multi-tenant CDNs,
we have configured our servers to accept connections without SNI. This
allows clients to connect to f-droid.org without having to include the SNI.
This provides the same kind of protection as ECH, but is available right now
for clients that implement it.

Based on research from Guardian Project’s Clean Insights, we’ve configured
our web servers to log country codes instead of IP addresses. This means
that we do not store any personally identifiable information. Our servers
also delete log data after 14 days. We’ve been running this configuration
for over a year now and it seems to be working pretty well. Here’s what our
web server logs look like:

0.0.0.0 - - [29/Feb/2024:00:00:00 +0000] "HEAD /repo/index-v1.jar HTTP/1.1" 200 0 "-" "-" DE
0.0.0.0 - - [29/Feb/2024:00:00:00 +0000] "GET /repo/entry.jar HTTP/2.0" 200 2574 "-" "-" US
0.0.0.0 - - [29/Feb/2024:00:00:00 +0000] "GET /repo/entry.jar HTTP/2.0" 200 2574 "-" "-" DE
0.0.0.0 - - [29/Feb/2024:00:00:00 +0000] "GET /repo/entry.jar HTTP/2.0" 200 2574 "-" "-" BE
0.0.0.0 - - [29/Feb/2024:00:00:00 +0000] "GET /F-Droid.apk HTTP/2.0" 206 1474560 "https://f-droid.org/" "-" NG

With fine-grained control over our web server logs and a significant amount
of traffic, F-Droid is in a great position to innovate on privacy
metrics. We’re aggregating our logs and publish the resulting raw metrics
for f-droid.org
on a weekly basis. The
numbers we collect here don’t include metrics from our mirrors, but they
should be good enough for statistical analysis. No one on our team is
currently working on this analysis, so if this sounds interesting to you,
this could be a great way to make a valuable contribution to F-Droid.

If you’re interested to learn more about privacy protections in F-Droid,
here is an article about why F-Droid doesn’t have user
accounts
.

European Commission’s use of Microsoft 365 infringes data protection law for EU institutions and bodies

Following its investigation, the EDPS has found that the European Commission (Commission) has infringed several key data protection rules when using Microsoft 365. In its decision, the EDPS imposes corrective measures on the Commission. ↫ European Data Protection Supervisor You often hear people state that EU rules and regulations are designed exclusively to harm non-EU companies. The massive amounts of fines and corrective actions handed out to EU companies in all kinds of sectors already disprove this notion, and here’s a case where even the European Commission itself gets a slap on the wrist for violating its own rules and regulations – rules and regulations, we’re often told by especially American corporatists, are designed specifically to target poor American businesses. Not that corporatists have any use for reality and facts, but still.

Elon Musk partage le programme de son chatbot Grok

Elon Musk a annoncé lundi que sa start-up xAI allait rendre accessible cette semaine en open source le programme informatique sur lequel repose son interface d’intelligence artificielle (IA) générative Grok.

L’info en continu https://buzzplus.fr/
Infos, news & actualités – L’information internationale en direct.

Azeem logon ke Akhlaq – Naimat e Iftar – 12 March 2024 – Shan e Ramzan – ARY Qtv

Azeem logon ke Akhlaq – Naimat e Iftar | 12 March 2024 – Shan e Ramzan | ARY Qtv

Host: Sarwar Hussian Naqshbnadi

Guest: Mufti Ramzan Silavi, Peer Irfan Elahi Qadri, Qari Younus Qadri, Al-Hajj Akhtar Hussain Quereshi

#AzeemlogonkeAkhlaq #TalkShow #ShaneRamzan #NaimateIftar

Official Facebook: https://www.facebook.com/ARYQTV/
Official Website: https://aryqtv.tv/
Watch ARY Qtv Live: http://live.aryqtv.tv/
Programs Schedule: https://aryqtv.tv/schedule/
Islamic Information: https://bit.ly/2MfIF4P
Android App: https: //bit.ly/33wgto4
Ios App: https: https://apple.co/2v3zoXW

Ultrasonic HC-SR04 ESP8266/ESP32 motion sensor with e-mail reporting

A program/setup is described, whereby a HC-SR04 ultrasonic sensor measures distance and reports to a microcontroller, an ESP 8266 or ESP 32, any detected disturbances in the measured distance (usually through movement, hence functioning as a motion detector), which in turn reports such disturbances to a “disposable e-mail-address” (vulgo “trash mail”) of your choice. Extremely easy to set up through the Arduino IDE. For the code see https://github.com/KedalionDaimon/Motion-Sensor-ESP8266-ESP32-HC-SR04-Mail

#ultrasound #hcsr04 #esp32 #esp8266 #motion

Specbee: Better Page Layouts with the CSS Grid Layout Module in Drupal

Fed up with the hassle of finicky CSS positioning and floats for organizing your page layout? They don’t always play nice with all browsers. It’s time for a smoother solution! Let’s talk about the brand new module – CSS Grid or Grid Layout that brings a two-dimensional grid system to CSS.
This grid-based layout system is a versatile way of organizing your content, with rows and columns, making it easier to design complex layouts. Check out the rest of the blog for insights on CSS Grid Layout and integrating the CSS Grid Layout Drupal module into your project.

CSS Grid Terminology
Similar to CSS Flexbox, where we have flex containers and flex items, in CSS Grid, we follow a similar concept with grid containers and grid items. To turn a container into a CSS Grid container, we simply set its display property to “Grid”.
Grid Container: The grid container wraps all the grid items within its area.
Grid Cell: Each individual item inside the grid container is referred to as a grid cell or grid item.A Grid layout forms a two-dimensional structure, with columns along the Y-axis and rows along the X-axis.

Grid Line: The vertical and horizontal lines that divide the grid into columns and rows are called grid lines. They are automatically numbered for columns as well as for the rows starting from 1 all the way to the number of rows or columns plus 1.
Grid Gap: The space between Grid cells is called a gutter or Grid Gap.
Grid Track: Grid items aligned in a row or column are referred to as a grid track. For horizontal alignment, we use the term “row track,” and for vertical alignment, it’s called a “column track.”
Grid Area: The area between two vertical and horizontal lines is called grid area.

Demonstration of row and column values and properties
HTML
<div class=”wrapper”>
<div class=”header”>Header</div>
<div class=”box-1″>Box 1</div>
<div class=”box-2″>Box 2</div>
<div class=”box-3″>Box 3</div>
<div class=”main-content”>Main Content</div>
<div class=”sidebar”>Sidebar</div>
<div class=”footer”>Footer</div>
</div>CSS
.wrapper{
display: grid;
grid-template-rows: 100px 200px 400px 100px;
grid-template-columns: repeat(3, 1fr) minmax(200px, 1fr);
grid-gap: 30px;

// Line names
grid-template-rows: 100px [box-start] 200px [box-end content-start] 400px [content-end] 100px;

// Grid area names
grid-template-areas: “head head head .”
“box1 box2 box3 side”
“main main main side”
“foot foot foot foot”;
}

// Using Line numbers
.header{
grid-column: 1 / -1;
}

.main-content{
grid-row: 3 / 4;
grid-column: 1 / 4;
}

// Using Line Names
.sidebar{
grid-row: box-start / content-end;
}

// Using Grid Area Names
.footer{
grid-column: foot;
}Grid Properties
For making an element a grid container, we use display:grid
grid-template-row – Defines the number of rows in a grid layout.
grid-template-column – Defines the number of columns in a grid layout.
row-gap & column-gap – Defines the gap between grid row and grid column individually.
grid-gap – Defines the gap between both rows and columns respectively in a grid layout.
The Repeat function –  It is employed to express a recurring segment of the tracklist, enabling the concise notation of a repetitive pattern for a substantial number of columns or rows.
The Fr unit – A fractional unit that dynamically calculates layout divisions. With 1fr, you get one share of the available space within the grid.
Naming Grid Lines – Give names to specific or all lines in your grid while defining it using the grid-template-rows and grid-template-columns properties.
Naming Grid Areas – The grid-template-areas CSS property specifies named grid areas, establishing the cells in the grid and assigning them names.
grid-row – The grid item’s start and end position within the grid row.
grid-columns – The grid item’s start and end position within the grid column.
min-content – The property specifies the intrinsic minimum width of the content.
max-content – The property specifies the intrinsic maximum width or height of the content.
minmax – Defines a size range greater than or equal to min and less than or equal to max content.

Browser inspector view for grid – align and justify items and content
HTML
<div class=”container”>
<div class=”item item–1″>Modern</div>
<div class=”item item–2″>CSS</div>
<div class=”item item–3″>with</div>
<div class=”item item–4″>Flexbox</div>
<div class=”item item–5″>and</div>
<div class=”item item–6″>Grid</div>
<div class=”item item–7″>is</div>
<div class=”item item–8″>Great</div>
</div>CSS
.container{
display: grid;
grid-template-rows: repeat(2, 150px);
grid-template-columns: repeat(2, 300px);
grid-auto-flow: row;
grid-auto-rows: 150px;
grid-gap: 30px;

// Aligning content in row direction
align-content: center;

// Aligning content in column direction
Justify-content: center;

// Aligning items in row direction
align-items: center;

// Aligning items in column direction
justify-items: center;

.item{
&–2{
grid-row: 2 / span 2;

// Aligning item in row direction
align-self: center;

// Aligning item in column direction
justify-self: center;
}
}align-items – Align Grid items inside the grid cell or area in the column/vertical axis.
justify-items – Align Grid items inside the grid cell or area in the row/horizontal axis.
align-self – Overrides the grid item’s align-items value and aligns itself inside the cell/area in the column/vertical axis.
justify-self – Overrides the grid item’s justify-items value and aligns itself inside the cell/area row/horizontal axis.
align-content – Specifies how the grid content is distributed along the column axis / vertically in a grid container.
justify-content – Specifies how the grid content is distributed along the row axis / horizontally in a grid container.
grid-auto-flow – The property regulates the direction in which auto-placed items are inserted into the grid, either in the row or column direction. The default value is row.
grid-auto-rows – This property sets a size for the rows in a grid container.
grid-auto-columns – The grid-auto-columns property sets a size for the columns in a grid container.
auto-fill – This property fills rows with as many columns as possible, even if the added column is empty, occupying space in the row.

Browser inspector view for grid auto-fill property
auto-fit – It fills rows with as many columns as possible. It collapses empty cells, setting their width to 0 to prevent excess space.

Browser inspector view for grid auto-fit property
Implementing the Drupal CSS Grid layout module
The Drupal CSS Grid Layout module seamlessly integrates the power of CSS Grid into your Drupal environment, providing a flexible and efficient way to structure and organize content.
Installing the module
Prerequisites:

Layout builder
Layout Discovery

Install CSS Grid Layout module using
– composer require ‘drupal/css_grid:^1.0@beta’Next, enable the module here: Administration > extend

Add a new layout builder page:
Content → add content → Layout builder page → layout → Add section
Now you have yourself a newly created layout CSS Grid.

Choose CSS Grid, and you’ll find options for columns, rows, and gaps, allowing you to create a dynamic grid layout.

You can then incorporate column, row, and gap values according to the desired structure.

 

You can also choose from different CSS and grid layout units.

Final Thoughts
These are the fundamental aspects of the CSS Grid layout algorithm. Armed with this knowledge, you can construct intricate and interactive layouts, eliminating the reliance on CSS frameworks. For Drupal frontend developers, the integration of the CSS Grid Layout module adds an extra layer of flexibility and enables seamless implementation and customization of grid-based designs within Drupal. If you’re ready to implement these cutting-edge design techniques into your Drupal website, explore our Drupal services for seamless integration and customization.