Skip to content

27th May 2025

Life navigation

Life chores management

dawarich

  • New: Introduce dawarich.

    Dawarich is a self-hostable alternative to Google Location History (Google Maps Timeline)

    Installation

    Tweak the official docker-compose keeping in mind:

    Then run docker compose up. You can now visit your Dawarich instance at http://localhost:3000 or http://:3000. The default credentials are demo@dawarich.app and password

    Go to your account and change the default account and password.

    Be careful not to upgrade with watchtower, the devs say that it's not safe yet to do so.

    Not there yet - Immich photos are not well shown: This happens when opening the map, or selecting one of the buttons "Yesterday", "Last 7 Days" or "Last month". If you select the same date range through the date-pickers, the photos are shown. - Support import of OSMand+ favourites gpx - OpenID/Oauth support

    References

Technology

Coding

Forgejo

  • New: Push to a forgejo docker registry.

    Login to the container registry

    To push an image or if the image is in a private registry, you have to authenticate:

    docker login forgejo.example.com
    

    If you are using 2FA or OAuth use a personal access token instead of the password.

    Image naming convention

    Images must follow this naming convention:

    {registry}/{owner}/{image}
    

    When building your docker image, using the naming convention above, this looks like:

    docker build -t {registry}/{owner}/{image}:{tag} .
    
    docker tag {some-existing-image}:{tag} {registry}/{owner}/{image}:{tag}
    

    Where your registry is the domain of your forgejo instance (e.g. forgejo.example.com). For example, these are all valid image names for the owner testuser:

    • forgejo.example.com/testuser/myimage
    • forgejo.example.com/testuser/my-image
    • forgejo.example.com/testuser/my/image

    NOTE: The registry only supports case-insensitive tag names. So image:tag and image:Tag get treated as the same image and tag.

    Push an image

    Push an image by executing the following command:

    docker push forgejo.example.com/{owner}/{image}:{tag}
    

    For example:

    docker push forgejo.example.com/testuser/myimage:latest
    
  • New: Installing all the binaries the application installs.

    If the package installs more than one binary (for example ansible), you need to use the --install-deps flag

    pipx install --install-deps ansible
    

Configure Docker to host the application

  • New: Push an image with different architectures after building it in different instances.

    To push both an ARM and AMD Docker image to Docker Hub, from two separate machines (e.g., an ARM-based and an AMD-based instance), follow these steps:

    Tag the image correctly on each architecture

    On each instance, build your image as normal, but tag it with a platform-specific suffix, like myuser/myimage:arm64 or myuser/myimage:amd64.

    On the ARM machine:

    docker build -t myuser/myimage:arm64 .
    docker push myuser/myimage:arm64
    

    On the AMD machine:

    docker build -t myuser/myimage:amd64 .
    ocker push myuser/myimage:amd64
    

    Create a multi-architecture manifest (on one machine)

    If you want users to pull the image without worrying about the platform (e.g., just docker pull myuser/myimage:latest), you can create and push a manifest list that combines the two:

    Choose either machine to run this (after both images are pushed):

    docker manifest create myuser/myimage:latest \
        --amend myuser/myimage:amd64 \
        --amend myuser/myimage:arm64
    
    docker manifest push myuser/myimage:latest
    
  • Correction: Add note to run gitea actions runners in kubernetes.

    Kubernetes act runner, there is a stale issue and an ugly implementation to run docker in docker inside the kubernetes node.

Streamlit

  • New: Show a spinner while the data is loading.

    st.title("Title")
    
    with st.spinner("Loading data..."):
        data = long_process()
    st.markdown('content shown once the data is loaded')
    
  • New: Deploy in docker.

    Here's an example Dockerfile that you can add to the root of your directory

    FROM python:3.11-slim
    
    WORKDIR /app
    
    RUN apt-get update && apt-get install -y \
      build-essential \
      curl \
      software-properties-common \
      && rm -rf /var/lib/apt/lists/*
    
    COPY . .
    
    RUN pip3 install -r requirements.txt
    
    EXPOSE 8501
    
    HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health
    
    ENTRYPOINT ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0"]
    

    While you debug you may want to replace the COPY . . to:

    COPY requirements.txt .
    
    RUN pip3 install -r requirements.txt
    
    COPY app.py .
    

    So that the build iterations are faster.

    You can build it with docker build -t streamlit ., then test it with docker run -p 8501:8501 streamlit

    Once you know it's working you can create a docker compose

    services:
      streamlit:
        image: hm2025_nodos
        container_name: my_app
        env_file:
          - .env
        ports:
          - "8501:8501"
       healthcheck:
          test: ["CMD", "curl", "--fail", "http://localhost:8501/_stcore/health"]
          interval: 30s
          timeout: 10s
          retries: 5
    

    If you use swag from linuxserver you can expose the service with the next nginx configuration:

    server {
        listen 443 ssl;
        listen [::]:443 ssl;
    
        server_name my_app.*;
    
        include /config/nginx/ssl.conf;
    
        client_max_body_size 0;
    
        location / {
            # enable the next two lines for http auth
            #auth_basic "Restricted";
            #auth_basic_user_file /config/nginx/.htpasswd;
    
            # enable the next two lines for ldap auth
           #auth_request /auth;
            #error_page 401 =200 /login;
    
            include /config/nginx/proxy.conf;
            resolver 127.0.0.11 valid=30s;
            set $upstream_streamlit my_container_name;
            proxy_pass http://$upstream_streamlit:8501;
        }
    }
    

    And if you save your docker-compose.yaml file into /srv/streamlit you can use the following systemd service to automatically start it on boot.

    ``ini [Unit] Description=my_app Requires=docker.service After=docker.service

    [Service] Restart=always User=root Group=docker WorkingDirectory=/srv/streamlit TimeoutStartSec=100 RestartSec=2s ExecStart=/usr/bin/docker compose -f docker-compose.yaml up ExecStop=/usr/bin/docker compose -f docker-compose.yaml down

    [Install] WantedBy=multi-user.target ```

DevSecOps

AWS

  • New: Remove the public IP of an ec2 instance.

    • Navigate to the network interfaces of the instance
    • Click on the one that contains the public IP
    • Actions/Manage IP addresses
    • Click on the Interface to unfold the configuration
    • Click on Auto-assign public IP

Operating Systems

Linux Snippets

  • New: Check the file encoding.

    file -i <path_to_file>
    
  • New: Simulate the environment of a cron job.

    Add this to your crontab (temporarily):

    * * * * * env > ~/cronenv
    

    After it runs, do this:

    env - `cat ~/cronenv` /bin/sh
    

    This assumes that your cron runs /bin/sh, which is the default regardless of the user's default shell.

    Footnote: if env contains more advanced config, eg PS1=$(__git_ps1 " (%s)")$, it will error cryptically env: ": No such file or directory.

Wireguard

  • New: More wg-easy configurations.

    configure with ansible

    Configuration

    Split tunneling

    Keep in mind though that the WG_ALLOWED_IPS only sets the routes on the client, it does not limit the traffic at server level. For example, if you set 172.30.1.0/24 as the allowed ips, but the client changes it to 172.30.0.0/16 it will be able to access for example 172.30.2.1. The suggested way to prevent this behavior is to add the kill switch in the Pre and Post hooks (WG_POST_UP and WG_POST_DOWN)

    Restrict Access to Networks with iptables

    If you need to restrict many networks you can use this allowed ips calculator

    Kill switch

    Monitorization

    If you want to use the prometheus metrics you need to use a version greater than 14, as 15 is not yet released (as of 2025-03-20) I'm using nightly.

    You can enable them with the environment variable ENABLE_PROMETHEUS_METRICS=true

    Scrape the metrics

    Add to your scrape config the required information

      - job_name: vpn-admin
        metrics_path: /metrics
        static_configs:
          - targets:
              - {your vpn private ip}:{your vpn exporter port}
    

    Create the monitor client

    To make sure that the vpn is working we'll add a client that is always connected. To do so we'll use linuxserver's wireguard docker

    # References

    diff --git a/mkdocs.yml b/mkdocs.yml index 77e5ba92b2..ef6703047d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -86,6 +86,7 @@ nav: - Trip management: - Route management: route_management.md - Map management: map_management.md + - dawarich: dawarich.md - Food management: food_management.md - Stock management: - Grocy: grocy_management.md @@ -212,514 +213,522 @@ nav: - Fitness Tracker: - fitness_band.md - Amazfit Band 5: amazfit_band_5.md - - Coding: - - Learning to code: - - code_learning.md - - Frontend developer: frontend_learning.md - - Languages: - - Python: - - python.md - - Project Template: - - coding/python/python_project_template.md - - Command-line Project Template: - - coding/python/python_project_template/python_cli_template.md - - Configure SQLAlchemy for projects without flask: >- - coding/python/python_project_template/python_sqlalchemy_without_flask.md - - Flask Project Template: >- - coding/python/python_project_template/python_flask_template.md - - Microservices Project Template: >- - coding/python/python_project_template/python_microservices_template.md - - Common configurations: - - Create the documentation repository: >- - coding/python/python_project_template/python_docs.md - - Load config from YAML: coding/python/python_config_yaml.md - - Configure SQLAlchemy to use the MariaDB/Mysql backend: - >- - coding/python/python_project_template/python_sqlalchemy_mariadb.md - - Configure Docker to host the application: >- - coding/python/python_project_template/python_docker.md - - Libraries: - - Alembic: coding/python/alembic.md - - asyncio: asyncio.md - - aiocron: aiocron.md - - Apprise: apprise.md - - aiohttp: aiohttp.md - - BeautifulSoup: beautifulsoup.md - - Boto3: boto3.md - - Click: coding/python/click.md - - Dash: coding/python/dash.md - - Dash Leaflet: coding/python/dash_leaflet.md - - DeepDiff: coding/python/deepdiff.md - - FactoryBoy: coding/python/factoryboy.md - - Faker: coding/python/faker.md - - FastAPI: fastapi.md - - Flask: coding/python/flask.md - - Flask Restplus: coding/python/flask_restplus.md - - Folium: coding/python/folium.md - - Feedparser: coding/python/feedparser.md - - Gettext: gettext.md - - GitPython: coding/python/gitpython.md - - Goodconf: goodconf.md - - ICS: ics.md - - Inotify: python_inotify.md - - watchdog: watchdog_python.md - - Jinja2: python_jinja2.md - - Maison: maison.md - - mkdocstrings: coding/python/mkdocstrings.md - - NetworkX: networkx.md - - Org-rw: org_rw.md - - Pandas: coding/python/pandas.md - - Passpy: coding/python/passpy.md - - pexpect: pexpect.md - - Prompt Toolkit: - - coding/python/prompt_toolkit.md - - REPL: prompt_toolkit_repl.md - - Full screen applications: prompt_toolkit_fullscreen_applications.md - - Pydantic: - - coding/python/pydantic.md - - Pydantic Field Types: coding/python/pydantic_types.md - - Pydantic Validators: coding/python/pydantic_validators.md - - Pydantic Exporting Models: coding/python/pydantic_exporting.md - - Pydantic Validating Functions: coding/python/pydantic_functions.md - - Pydantic Factories: pydantic_factories.md - - Pydantic Mypy Plugin: coding/python/pydantic_mypy_plugin.md - - Pypika: coding/python/pypika.md - - psycopg2: psycopg2.md - - Elasticsearch: python_elasticsearch.md - - python-gnupg: python_gnupg.md - - Python Mysql: python_mysql.md - - pythonping: pythonping.md + - Technology: + - Coding: + - Learning to code: + - code_learning.md + - Frontend developer: frontend_learning.md + - Languages: + - Python: + - python.md + - Project Template: + - coding/python/python_project_template.md + - Command-line Project Template: + - coding/python/python_project_template/python_cli_template.md + - Configure SQLAlchemy for projects without flask: >- + coding/python/python_project_template/python_sqlalchemy_without_flask.md + - Flask Project Template: >- + coding/python/python_project_template/python_flask_template.md + - Microservices Project Template: >- + coding/python/python_project_template/python_microservices_template.md + - Common configurations: + - Create the documentation repository: >- + coding/python/python_project_template/python_docs.md + - Load config from YAML: coding/python/python_config_yaml.md + - Configure SQLAlchemy to use the MariaDB/Mysql backend: + >- + coding/python/python_project_template/python_sqlalchemy_mariadb.md + - Configure Docker to host the application: >- + coding/python/python_project_template/python_docker.md + - Libraries: + - Alembic: coding/python/alembic.md + - asyncio: asyncio.md + - aiocron: aiocron.md + - Apprise: apprise.md + - aiohttp: aiohttp.md + - BeautifulSoup: beautifulsoup.md + - Boto3: boto3.md + - Click: coding/python/click.md + - Dash: coding/python/dash.md + - Dash Leaflet: coding/python/dash_leaflet.md + - DeepDiff: coding/python/deepdiff.md + - FactoryBoy: coding/python/factoryboy.md + - Faker: coding/python/faker.md + - FastAPI: fastapi.md + - Flask: coding/python/flask.md + - Flask Restplus: coding/python/flask_restplus.md + - Folium: coding/python/folium.md + - Feedparser: coding/python/feedparser.md + - Gettext: gettext.md + - GitPython: coding/python/gitpython.md + - Goodconf: goodconf.md + - ICS: ics.md + - Inotify: python_inotify.md + - watchdog: watchdog_python.md + - Jinja2: python_jinja2.md + - Maison: maison.md + - mkdocstrings: coding/python/mkdocstrings.md + - NetworkX: networkx.md + - Org-rw: org_rw.md + - Pandas: coding/python/pandas.md + - Passpy: coding/python/passpy.md + - pexpect: pexpect.md + - Prompt Toolkit: + - coding/python/prompt_toolkit.md + - REPL: prompt_toolkit_repl.md + - Full screen applications: prompt_toolkit_fullscreen_applications.md + - Pydantic: + - coding/python/pydantic.md + - Pydantic Field Types: coding/python/pydantic_types.md + - Pydantic Validators: coding/python/pydantic_validators.md + - Pydantic Exporting Models: coding/python/pydantic_exporting.md + - Pydantic Validating Functions: coding/python/pydantic_functions.md + - Pydantic Factories: pydantic_factories.md + - Pydantic Mypy Plugin: coding/python/pydantic_mypy_plugin.md + - Pypika: coding/python/pypika.md + - psycopg2: psycopg2.md + - Elasticsearch: python_elasticsearch.md + - python-gnupg: python_gnupg.md + - Python Mysql: python_mysql.md + - pythonping: pythonping.md + - Python Prometheus: python-prometheus.md + - Python Telegram: + - python-telegram.md + - pytelegrambotapi: pytelegrambotapi.md + - Python VLC: python_vlc.md + - Playwright: playwright.md + - Plotly: coding/python/plotly.md + - questionary: questionary.md + - rich: rich.md + - Ruamel YAML: coding/python/ruamel_yaml.md + - Selenium: selenium.md + - Streamlit: streamlit.md + - SQLAlchemy: coding/python/sqlalchemy.md + - sqlite3: sqlite3.md + - Redis-py: coding/python/redis-py.md + - Requests: requests.md + - Requests-mock: coding/python/requests_mock.md + - Rq: coding/python/rq.md + - python_systemd: python_systemd.md + - sh: python_sh.md + - Talkey: talkey.md + - Tenacity: tenacity.md + - TinyDB: coding/python/tinydb.md + - Torch: torch.md + - Typer: typer.md + - Yoyo: coding/python/yoyo.md + - Type Hints: coding/python/type_hints.md + - Logging: python_logging.md + - Code Styling: coding/python/python_code_styling.md + - Docstrings: coding/python/docstrings.md + - Properties: python_properties.md + - Protocols: python_protocols.md + - Package Management: + - python_package_management.md + - PDM: pdm.md + - pipx: pipx.md + - Pipenv: pipenv.md + - Poetry: python_poetry.md + - Lazy loading: lazy_loading.md + - Plugin System: python_plugin_system.md + - Profiling: python_profiling.md + - Optimization: python_optimization.md + - Anti-Patterns: coding/python/python_anti_patterns.md + - Pytest: + - coding/python/pytest.md + - Parametrized testing: coding/python/pytest_parametrized_testing.md + - Pytest-cases: coding/python/pytest_cases.md + - Pytest-HttpServer: pytest_httpserver.md + - Pytest-xprocess: pytest-xprocess.md + - Internationalization: python_internationalization.md + - Python Snippets: coding/python/python_snippets.md + - Data Classes: coding/python/data_classes.md + - Vue.js: + - vuejs.md + - Vue snippets: vue_snippets.md + - Vuetify: vuetify.md + - Development tools: + - Cypress: cypress.md + - Vite: vite.md + - Vitest: vitest.md + - Bash: + - Bash snippets: bash_snippets.md + - Bash testing: bats.md + - lua: lua.md + - JSON: coding/json/json.md + - SQL: coding/sql/sql.md + - SQLite: sqlite.md + - YAML: coding/yaml/yaml.md + - Promql: coding/promql/promql.md + - Logql: logql.md + - HTML: html.md + - CSS: css.md + - Javascript: + - coding/javascript/javascript.md + - Javascript snippets: javascript_snippets.md + - MermaidJS: mermaidjs.md + - Latex: latex.md + - Graphql: graphql.md + - Qwik: qwik.md + - nodejs: linux/nodejs.md + - JWT: devops/jwt.md + - React: coding/react/react.md + - Coding tools: + - IDES: + - Vim: + - vim.md + - Vim configuration: + - vim_config.md + - Vim Keymaps: vim_keymaps.md + - Vim Package Manager: + - vim_plugin_managers.md + - LazyVim: lazyvim.md + - Packer: vim_packer.md + - UI management configuration: + - Vim foldings: vim_foldings.md + - Vim movement: vim_movement.md + - Tabs vs Buffers: vim_tabs.md + - File management configuration: + - NeoTree: neotree.md + - Telescope: telescope.md + - fzf.nvim: fzf_nvim.md + - Editing specific configuration: + - vim_editor_plugins.md + - Vim formatters: vim_formatters.md + - Vim autocomplete: vim_completion.md + - Vim markdown: vim_markdown.md + - Vim spelling: vim_spelling.md + - Vim autosave: vim_autosave.md + - Coding specific configuration: + - vim_coding_plugins.md + - Treesitter: vim_treesitter.md + - LSP: vim_lsp.md + - Snippets: luasnip.md + - DAP: vim_dap.md + - Git management configuration: + - vim_git.md + - Diffview: diffview.md + - gitsigns: gitsigns.md + - Testing management configuration: vim_testing.md + - Email management: vim_email.md + - Other Vim Plugins: + - linux/vim/vim_plugins.md + - Vim Snippets: vim_snippets.md + - Vim Troubleshooting: vim_troubleshooting.md + - Neovim Plugin Development: vim_plugin_development.md + - Vi vs Vim vs Neovim: vim_vs_neovim.md + - Tridactyl: tridactyl.md + - VSCodium: vscodium.md + - Coding with AI: ai_coding.md + - Git: + - git.md + - Github cli: gh.md + - Forgejo: forgejo.md + - Gitea: gitea.md + - Radicle: radicle.md + - Data orchestrators: + - data_orchestrators.md + - Kestra: kestra.md + - memorious: memorious.md + - Scrapers: + - morph.io: morph_io.md + - ETL: + - Singer: singer.md + - Espanso: espanso.md + - Generic Coding Practices: + - How to code: how_to_code.md + - Program Versioning: + - versioning.md + - Semantic Versioning: semantic_versioning.md + - Calendar Versioning: calendar_versioning.md + - Use warnings to evolve your code: use_warnings.md + - Keep a Changelog: changelog.md + - Writing good documentation: documentation.md + - Conventional comments: conventional_comments.md + - TDD: coding/tdd.md + - GitOps: gitops.md + - Abstract Syntax Trees: abstract_syntax_trees.md + - Software Architecture: + - SOLID: architecture/solid.md + - Domain Driven Design: + - architecture/domain_driven_design.md + - Repository Pattern: architecture/repository_pattern.md + - Service Layer Pattern: architecture/service_layer_pattern.md + - Architecture Decision Record: adr.md + - Database Architecture: architecture/database_architecture.md + - ORM, Query Builder or Raw SQL: architecture/orm_builder_query_or_raw_sql.md + - Microservices: architecture/microservices.md + - Restful APIS: architecture/restful_apis.md + - OCR: + - Table parsing: + - Camelot: camelot.md + - Frontend Development: frontend_development.md + - Park programming: park_programming.md + - Sponsor: sponsor.md + - Issues: issues.md + - DevSecOps: + - devops/devops.md + - Infrastructure as Code: + - Helm: + - devops/helm/helm.md + - Helm Installation: devops/helm/helm_installation.md + - Helm Commands: devops/helm/helm_commands.md + - Helm Secrets: devops/helm/helm_secrets.md + - Helm Git: helm_git.md + - Helmfile: devops/helmfile.md + - Terraform: terraform.md + - Ansible: + - Ansible Snippets: ansible_snippets.md + - Molecule: molecule.md + - Nix: nix.md + - Dotfiles: + - dotfiles.md + - Home Manager: home-manager.md + - Chezmoi: chezmoi.md + - Dotdrop: dotdrop.md + - Infrastructure Solutions: + - Kubernetes: + - devops/kubernetes/kubernetes.md + - Architecture: devops/kubernetes/kubernetes_architecture.md + - Resources: + - Namespaces: devops/kubernetes/kubernetes_namespaces.md + - Pods: devops/kubernetes/kubernetes_pods.md + - ReplicaSets: devops/kubernetes/kubernetes_replicasets.md + - Deployments: devops/kubernetes/kubernetes_deployments.md + - Horizontal Pod Autoscaling: >- + devops/kubernetes/kubernetes_hpa.md + - Volumes: devops/kubernetes/kubernetes_volumes.md + - Services: devops/kubernetes/kubernetes_services.md + - Labels: devops/kubernetes/kubernetes_labels.md + - Annotations: devops/kubernetes/kubernetes_annotations.md + - Ingress: devops/kubernetes/kubernetes_ingress.md + - Jobs: devops/kubernetes/kubernetes_jobs.md + - Kubectl: + - devops/kubectl/kubectl.md + - Kubectl Installation: devops/kubectl/kubectl_installation.md + - Kubectl Commands: devops/kubectl/kubectl_commands.md + - Additional Components: + - Metrics Server: devops/kubernetes/kubernetes_metric_server.md + - Ingress Controller: >- + devops/kubernetes/kubernetes_ingress_controller.md + - External DNS: devops/kubernetes/kubernetes_external_dns.md + - Cluster Autoscaler: >- + devops/kubernetes/kubernetes_cluster_autoscaler.md + - Dashboard: devops/kubernetes/kubernetes_dashboard.md + - Storage Driver: devops/kubernetes/kubernetes_storage_driver.md + - Vertical Pod Autoscaler: >- + devops/kubernetes/kubernetes_vertical_pod_autoscaler.md + - Networking: devops/kubernetes/kubernetes_networking.md + - Debugging: kubernetes_debugging.md + - Backups: + - Velero: velero.md + - Operators: devops/kubernetes/kubernetes_operators.md + - Tools: + - devops/kubernetes/kubernetes_tools.md + - Krew: krew.md + - Ksniff: ksniff.md + - Mizu: mizu.md + - AWS: + - devops/aws/aws.md + - AWS Snippets: aws_snippets.md + - AWS Savings plan: aws_savings_plan.md + - Security groups workflow: devops/aws/security_groups.md + - EKS: devops/aws/eks.md + - EFS: efs.md + - IAM: + - devops/aws/iam/iam.md + - IAM Commands: devops/aws/iam/iam_commands.md + - IAM Debugging: devops/aws/iam/iam_debug.md + - S3: devops/aws/s3.md + - WAF: aws_waf.md + - Databases: + - Redis: architecture/redis.md + - RabbitMQ: rabbitmq.md + - Continuous Deployment: + - ArgoCD: argocd.md + - Continuous Integration: + - devops/ci.md + - Drone: drone.md + - Linters: + - Alex: devops/alex.md + - Flakeheaven: flakeheaven.md + - Flake8: devops/flake8.md + - Markdownlint: devops/markdownlint.md + - Proselint: devops/proselint.md + - Shellcheck: shellcheck.md + - Yamllint: devops/yamllint.md + - Write Good: devops/write_good.md + - Formatters/Fixers: + - Black: devops/black.md + - Yamlfix: yamlfix.md + - Pyment: pyment.md + - mdformat: mdformat.md + - Type Checkers: + - Mypy: devops/mypy.md + - Security Checkers: + - pip-audit: pip_audit.md + - Bandit: devops/bandit.md + - Safety: devops/safety.md + - Dependency managers: + - Pip-tools: devops/pip_tools.md + - Automating Processes: + - copier: copier.md + - cookiecutter: linux/cookiecutter.md + - cruft: linux/cruft.md + - renovate: renovate.md + - letsencrypt: letsencrypt.md + - Threat modeling: + - Privacy threat modeling: privacy_threat_modeling.md + - Storage: + - storage.md + - NAS: nas.md + - OpenZFS: + - linux/zfs.md + - OpenZFS storage planning: zfs_storage_planning.md + - Sanoid: sanoid.md + - ZFS Prometheus exporter: zfs_exporter.md + - Hard drive health: + - hard_drive_health.md + - Smartctl: smartctl.md + - badblocks: badblocks.md + - Resilience: + - linux_resilience.md + - Memtest: memtest.md + - watchdog: watchdog.md + - Magic keys: magic_keys.md + - Monitoring: + - Monitoring Comparison: monitoring_comparison.md + - Prometheus: + - devops/prometheus/prometheus.md + - Architecture: devops/prometheus/prometheus_architecture.md + - Prometheus Operator: devops/prometheus/prometheus_operator.md + - Prometheus Install: devops/prometheus/prometheus_installation.md + - AlertManager: devops/prometheus/alertmanager.md + - Blackbox Exporter: devops/prometheus/blackbox_exporter.md + - cAdvisor: cadvisor.md + - Elasticsearch Exporter: elasticsearch_exporter.md + - Node Exporter: devops/prometheus/node_exporter.md + - Process Exporter: process_exporter.md - Python Prometheus: python-prometheus.md - - Python Telegram: - - python-telegram.md - - pytelegrambotapi: pytelegrambotapi.md - - Python VLC: python_vlc.md - - Playwright: playwright.md - - Plotly: coding/python/plotly.md - - questionary: questionary.md - - rich: rich.md - - Ruamel YAML: coding/python/ruamel_yaml.md - - Selenium: selenium.md - - Streamlit: streamlit.md - - SQLAlchemy: coding/python/sqlalchemy.md - - sqlite3: sqlite3.md - - Redis-py: coding/python/redis-py.md - - Requests: requests.md - - Requests-mock: coding/python/requests_mock.md - - Rq: coding/python/rq.md - - python_systemd: python_systemd.md - - sh: python_sh.md - - Talkey: talkey.md - - Tenacity: tenacity.md - - TinyDB: coding/python/tinydb.md - - Torch: torch.md - - Typer: typer.md - - Yoyo: coding/python/yoyo.md - - Type Hints: coding/python/type_hints.md - - Logging: python_logging.md - - Code Styling: coding/python/python_code_styling.md - - Docstrings: coding/python/docstrings.md - - Properties: python_properties.md - - Protocols: python_protocols.md - - Package Management: - - python_package_management.md - - PDM: pdm.md - - pipx: pipx.md - - Pipenv: pipenv.md - - Poetry: python_poetry.md - - Lazy loading: lazy_loading.md - - Plugin System: python_plugin_system.md - - Profiling: python_profiling.md - - Optimization: python_optimization.md - - Anti-Patterns: coding/python/python_anti_patterns.md - - Pytest: - - coding/python/pytest.md - - Parametrized testing: coding/python/pytest_parametrized_testing.md - - Pytest-cases: coding/python/pytest_cases.md - - Pytest-HttpServer: pytest_httpserver.md - - Pytest-xprocess: pytest-xprocess.md - - Internationalization: python_internationalization.md - - Python Snippets: coding/python/python_snippets.md - - Data Classes: coding/python/data_classes.md - - Vue.js: - - vuejs.md - - Vue snippets: vue_snippets.md - - Vuetify: vuetify.md - - Development tools: - - Cypress: cypress.md - - Vite: vite.md - - Vitest: vitest.md - - Bash: - - Bash snippets: bash_snippets.md - - Bash testing: bats.md - - lua: lua.md - - JSON: coding/json/json.md - - SQL: coding/sql/sql.md - - SQLite: sqlite.md - - YAML: coding/yaml/yaml.md - - Promql: coding/promql/promql.md - - Logql: logql.md - - HTML: html.md - - CSS: css.md - - Javascript: - - coding/javascript/javascript.md - - Javascript snippets: javascript_snippets.md - - MermaidJS: mermaidjs.md - - Latex: latex.md - - Graphql: graphql.md - - Qwik: qwik.md - - nodejs: linux/nodejs.md - - JWT: devops/jwt.md - - React: coding/react/react.md - - Coding tools: - - IDES: - - Vim: - - vim.md - - Vim configuration: - - vim_config.md - - Vim Keymaps: vim_keymaps.md - - Vim Package Manager: - - vim_plugin_managers.md - - LazyVim: lazyvim.md - - Packer: vim_packer.md - - UI management configuration: - - Vim foldings: vim_foldings.md - - Vim movement: vim_movement.md - - Tabs vs Buffers: vim_tabs.md - - File management configuration: - - NeoTree: neotree.md - - Telescope: telescope.md - - fzf.nvim: fzf_nvim.md - - Editing specific configuration: - - vim_editor_plugins.md - - Vim formatters: vim_formatters.md - - Vim autocomplete: vim_completion.md - - Vim markdown: vim_markdown.md - - Vim spelling: vim_spelling.md - - Vim autosave: vim_autosave.md - - Coding specific configuration: - - vim_coding_plugins.md - - Treesitter: vim_treesitter.md - - LSP: vim_lsp.md - - Snippets: luasnip.md - - DAP: vim_dap.md - - Git management configuration: - - vim_git.md - - Diffview: diffview.md - - gitsigns: gitsigns.md - - Testing management configuration: vim_testing.md - - Email management: vim_email.md - - Other Vim Plugins: - - linux/vim/vim_plugins.md - - Vim Snippets: vim_snippets.md - - Vim Troubleshooting: vim_troubleshooting.md - - Neovim Plugin Development: vim_plugin_development.md - - Vi vs Vim vs Neovim: vim_vs_neovim.md - - Tridactyl: tridactyl.md - - VSCodium: vscodium.md - - Coding with AI: ai_coding.md - - Git: - - git.md - - Github cli: gh.md - - Forgejo: forgejo.md - - Gitea: gitea.md - - Radicle: radicle.md - - Data orchestrators: - - data_orchestrators.md - - Kestra: kestra.md - - memorious: memorious.md - - Scrapers: - - morph.io: morph_io.md - - ETL: - - Singer: singer.md - - Espanso: espanso.md - - Generic Coding Practices: - - How to code: how_to_code.md - - Program Versioning: - - versioning.md - - Semantic Versioning: semantic_versioning.md - - Calendar Versioning: calendar_versioning.md - - Use warnings to evolve your code: use_warnings.md - - Keep a Changelog: changelog.md - - Writing good documentation: documentation.md - - Conventional comments: conventional_comments.md - - TDD: coding/tdd.md - - GitOps: gitops.md - - Abstract Syntax Trees: abstract_syntax_trees.md - - Software Architecture: - - SOLID: architecture/solid.md - - Domain Driven Design: - - architecture/domain_driven_design.md - - Repository Pattern: architecture/repository_pattern.md - - Service Layer Pattern: architecture/service_layer_pattern.md - - Architecture Decision Record: adr.md - - Database Architecture: architecture/database_architecture.md - - ORM, Query Builder or Raw SQL: architecture/orm_builder_query_or_raw_sql.md - - Microservices: architecture/microservices.md - - Restful APIS: architecture/restful_apis.md - - OCR: - - Table parsing: - - Camelot: camelot.md - - Frontend Development: frontend_development.md - - Park programming: park_programming.md - - Sponsor: sponsor.md - - Issues: issues.md - - DevSecOps: - - devops/devops.md - - Infrastructure as Code: - - Helm: - - devops/helm/helm.md - - Helm Installation: devops/helm/helm_installation.md - - Helm Commands: devops/helm/helm_commands.md - - Helm Secrets: devops/helm/helm_secrets.md - - Helm Git: helm_git.md - - Helmfile: devops/helmfile.md - - Terraform: terraform.md - - Ansible: - - Ansible Snippets: ansible_snippets.md - - Molecule: molecule.md - - Nix: nix.md - - Dotfiles: - - dotfiles.md - - Home Manager: home-manager.md - - Chezmoi: chezmoi.md - - Dotdrop: dotdrop.md - - Infrastructure Solutions: - - Kubernetes: - - devops/kubernetes/kubernetes.md - - Architecture: devops/kubernetes/kubernetes_architecture.md - - Resources: - - Namespaces: devops/kubernetes/kubernetes_namespaces.md - - Pods: devops/kubernetes/kubernetes_pods.md - - ReplicaSets: devops/kubernetes/kubernetes_replicasets.md - - Deployments: devops/kubernetes/kubernetes_deployments.md - - Horizontal Pod Autoscaling: >- - devops/kubernetes/kubernetes_hpa.md - - Volumes: devops/kubernetes/kubernetes_volumes.md - - Services: devops/kubernetes/kubernetes_services.md - - Labels: devops/kubernetes/kubernetes_labels.md - - Annotations: devops/kubernetes/kubernetes_annotations.md - - Ingress: devops/kubernetes/kubernetes_ingress.md - - Jobs: devops/kubernetes/kubernetes_jobs.md - - Kubectl: - - devops/kubectl/kubectl.md - - Kubectl Installation: devops/kubectl/kubectl_installation.md - - Kubectl Commands: devops/kubectl/kubectl_commands.md - - Additional Components: - - Metrics Server: devops/kubernetes/kubernetes_metric_server.md - - Ingress Controller: >- - devops/kubernetes/kubernetes_ingress_controller.md - - External DNS: devops/kubernetes/kubernetes_external_dns.md - - Cluster Autoscaler: >- - devops/kubernetes/kubernetes_cluster_autoscaler.md - - Dashboard: devops/kubernetes/kubernetes_dashboard.md - - Storage Driver: devops/kubernetes/kubernetes_storage_driver.md - - Vertical Pod Autoscaler: >- - devops/kubernetes/kubernetes_vertical_pod_autoscaler.md - - Networking: devops/kubernetes/kubernetes_networking.md - - Debugging: kubernetes_debugging.md - - Backups: - - Velero: velero.md - - Operators: devops/kubernetes/kubernetes_operators.md - - Tools: - - devops/kubernetes/kubernetes_tools.md - - Krew: krew.md - - Ksniff: ksniff.md - - Mizu: mizu.md - - AWS: - - devops/aws/aws.md - - AWS Snippets: aws_snippets.md - - AWS Savings plan: aws_savings_plan.md - - Security groups workflow: devops/aws/security_groups.md - - EKS: devops/aws/eks.md - - EFS: efs.md - - IAM: - - devops/aws/iam/iam.md - - IAM Commands: devops/aws/iam/iam_commands.md - - IAM Debugging: devops/aws/iam/iam_debug.md - - S3: devops/aws/s3.md - - WAF: aws_waf.md + - Instance sizing analysis: devops/prometheus/instance_sizing_analysis.md + - Prometheus Troubleshooting: >- + devops/prometheus/prometheus_troubleshooting.md + - Grafana: grafana.md + - Log analysis: + - Loki: + - loki.md + - Logcli: logcli.md + - Promtail: promtail.md + - Graylog: graylog.md + - Elastic Security: elastic_security.md + - SIEM: siem.md - Databases: - - Redis: architecture/redis.md - - RabbitMQ: rabbitmq.md - - Continuous Deployment: - - ArgoCD: argocd.md - - Continuous Integration: - - devops/ci.md - - Drone: drone.md - - Linters: - - Alex: devops/alex.md - - Flakeheaven: flakeheaven.md - - Flake8: devops/flake8.md - - Markdownlint: devops/markdownlint.md - - Proselint: devops/proselint.md - - Shellcheck: shellcheck.md - - Yamllint: devops/yamllint.md - - Write Good: devops/write_good.md - - Formatters/Fixers: - - Black: devops/black.md - - Yamlfix: yamlfix.md - - Pyment: pyment.md - - mdformat: mdformat.md - - Type Checkers: - - Mypy: devops/mypy.md - - Security Checkers: - - pip-audit: pip_audit.md - - Bandit: devops/bandit.md - - Safety: devops/safety.md - - Dependency managers: - - Pip-tools: devops/pip_tools.md - - Automating Processes: - - copier: copier.md - - cookiecutter: linux/cookiecutter.md - - cruft: linux/cruft.md - - renovate: renovate.md - - letsencrypt: letsencrypt.md - - Threat modeling: - - Privacy threat modeling: privacy_threat_modeling.md - - Storage: - - storage.md - - NAS: nas.md - - OpenZFS: - - linux/zfs.md - - OpenZFS storage planning: zfs_storage_planning.md - - Sanoid: sanoid.md - - ZFS Prometheus exporter: zfs_exporter.md - - Hard drive health: - - hard_drive_health.md - - Smartctl: smartctl.md - - badblocks: badblocks.md - - Resilience: - - linux_resilience.md - - Memtest: memtest.md - - watchdog: watchdog.md - - Magic keys: magic_keys.md - - Monitoring: - - Monitoring Comparison: monitoring_comparison.md - - Prometheus: - - devops/prometheus/prometheus.md - - Architecture: devops/prometheus/prometheus_architecture.md - - Prometheus Operator: devops/prometheus/prometheus_operator.md - - Prometheus Install: devops/prometheus/prometheus_installation.md - - AlertManager: devops/prometheus/alertmanager.md - - Blackbox Exporter: devops/prometheus/blackbox_exporter.md - - cAdvisor: cadvisor.md - - Elasticsearch Exporter: elasticsearch_exporter.md - - Node Exporter: devops/prometheus/node_exporter.md - - Process Exporter: process_exporter.md - - Python Prometheus: python-prometheus.md - - Instance sizing analysis: devops/prometheus/instance_sizing_analysis.md - - Prometheus Troubleshooting: >- - devops/prometheus/prometheus_troubleshooting.md - - Grafana: grafana.md - - Log analysis: - - Loki: - - loki.md - - Logcli: logcli.md - - Promtail: promtail.md - - Graylog: graylog.md - - Elastic Security: elastic_security.md - - SIEM: siem.md - - Databases: - - PostgreSQL: - - postgres.md - - Postgres operators: - - postgres_operators.md - - Zalando Postgres operator: zalando_postgres_operator.md - - elasticsearch: linux/elasticsearch.md - - Oracle Database: oracle_database.md - - Authentication: - - Authentik: authentik.md - - API Management: - - devops/api_management.md - - Kong: devops/kong/kong.md - - Scrum: - - scrum.md - - Templates: - - Refinement Template: refinement_template.md - - Hardware: - - CPU: cpu.md - - RAM: - - ram.md - - ECC RAM: - - ecc.md - - rasdaemon: rasdaemon.md - - Power Supply Unit: psu.md - - GPU: gpu.md - - Pedal PC: pedal_pc.md - - Pentesting: pentesting.md - - Operating Systems: - - Linux: - - linux.md - - Linux Snippets: linux_snippets.md - - Distros: - - Libreelec: libreelec.md - - Tails: tails.md - - Recovery tools: - - finnix: finnix.md - - Security tools: - - fail2ban: linux/fail2ban.md - - pass: pass.md - - Wireshark: wireshark.md - - Canary tokens: canary_tokens.md + - PostgreSQL: + - postgres.md + - Postgres operators: + - postgres_operators.md + - Zalando Postgres operator: zalando_postgres_operator.md + - elasticsearch: linux/elasticsearch.md + - Oracle Database: oracle_database.md + - Authentication: + - Authentik: authentik.md + - API Management: + - devops/api_management.md + - Kong: devops/kong/kong.md + - Scrum: + - scrum.md + - Templates: + - Refinement Template: refinement_template.md + - Hardware: + - CPU: cpu.md + - RAM: + - ram.md + - ECC RAM: + - ecc.md + - rasdaemon: rasdaemon.md + - Power Supply Unit: psu.md + - GPU: gpu.md + - Pedal PC: pedal_pc.md + - Pentesting: pentesting.md + - Operating Systems: + - Linux: + - linux.md + - Linux Snippets: linux_snippets.md + - Distros: + - Libreelec: libreelec.md + - Tails: tails.md + - Recovery tools: + - finnix: finnix.md + - Security tools: + - fail2ban: linux/fail2ban.md + - pass: pass.md + - Wireshark: wireshark.md + - Canary tokens: canary_tokens.md

      • Sysadmin tools:
      • brew: linux/brew.md
      • detox: detox.md
      • Docker: docker.md
      • Watchtower: watchtower.md
      • Dynamic DNS: dynamicdns.md
      • goaccess: goaccess.md
      • Gotify: gotify.md
      • HAProxy: linux/haproxy.md
      • journald: journald.md
      • LUKS: linux/luks/luks.md
      • Outrun: outrun.md
      • rm: linux/rm.md
      • sed: sed.md
      • Syncthing: linux/syncthing.md
      • Tahoe-LAFS: tahoe.md
      • Wake on Lan: wake_on_lan.md
      • Wireguard:
      • linux/wireguard.md
      • wg-easy: wg-easy.md
      • yq: yq.md
      • zip: linux/zip.md
      • Window manager tools:
      • dunst: dunst.md
      • ferdium: ferdium.md
      • i3wm: i3wm.md
      • rofi: rofi.md
      • User tools:
      • Browsers:
      • google chrome: linux/google_chrome.md
      • Chromium: chromium.md
      • Hushboard: husboard.md
      • Peek: peek.md
      • Terminals:
      • terminal_comparison.md
      • Alacritty: alacritty.md
      • Wezterm: wezterm.md
      • Kitty: kitty.md
      • Instant messaging apps:
      • Delta Chat: deltachat.md
      • Simplex Chat: simplexchat.md
      • Sysadmin tools:
      • brew: linux/brew.md
      • detox: detox.md
      • Docker: docker.md
      • Watchtower: watchtower.md
      • Dynamic DNS: dynamicdns.md
      • goaccess: goaccess.md
      • Gotify: gotify.md
      • HAProxy: linux/haproxy.md
      • journald: journald.md
      • LUKS: linux/luks/luks.md
      • Outrun: outrun.md
      • rm: linux/rm.md
      • sed: sed.md
      • Syncthing: linux/syncthing.md
      • Tahoe-LAFS: tahoe.md
      • Wake on Lan: wake_on_lan.md
      • Wireguard:
      • linux/wireguard.md
      • wg-easy: wg-easy.md
      • yq: yq.md
      • zip: linux/zip.md
      • Window manager tools:
      • dunst: dunst.md
      • ferdium: ferdium.md
      • i3wm: i3wm.md
      • rofi: rofi.md
      • User tools:
      • Browsers:
      • google chrome: linux/google_chrome.md
      • Chromium: chromium.md
      • Hushboard: husboard.md
      • Peek: peek.md
      • Terminals:
      • terminal_comparison.md
      • Alacritty: alacritty.md
      • Wezterm: wezterm.md
      • Kitty: kitty.md
      • Instant messaging apps:
      • Delta Chat: deltachat.md
      • Simplex Chat: simplexchat.md
      • Android:
      • Android Tips: android_tips.md
      • OS:
      • GrapheneOS: grapheneos.md
      • FuriOS: furios.md
      • Apps:
      • Cone: cone.md
      • GadgetBridge: gadgetbridge.md
      • LibreTube: libretube.md
      • HappyCow: happycow.md
      • ICSx5: icsx5.md
      • Orgzly: orgzly.md
      • OsmAnd: osmand.md
      • Seedvault: seedvault.md
      • Android SDK Platform tools: android_sdk.md
      • Android:
      • Android Tips: android_tips.md
      • OS:
      • GrapheneOS: grapheneos.md
      • FuriOS: furios.md
      • Apps:
      • Cone: cone.md
      • GadgetBridge: gadgetbridge.md
      • LibreTube: libretube.md
      • HappyCow: happycow.md
      • ICSx5: icsx5.md
      • Orgzly: orgzly.md
      • OsmAnd: osmand.md
      • Seedvault: seedvault.md
      • Android SDK Platform tools: android_sdk.md
      • Hardware:
      • Redox: redox.md
      • Vial: vial.md
      • Rock64: rock64.md
      • Filosofía:
      • filosofía.md
      • Amor: amor.md
    • Arts:
      • Writing:
        • writing/writing.md @@ -746,9 +755,6 @@ nav:
      • Calistenia: calistenia.md
      • Aerial Silk: aerial_silk.md
      • Meditation: meditation.md
      • Maker:
      • Redox: redox.md
      • Vial: vial.md
      • Sudokus: sudokus.md
      • Drawing:
        • drawing/drawing.md @@ -811,6 +817,7 @@ nav:
      • Board Games:
        • board_games.md
        • Regicide: regicide.md
      • Monologues: monologues.md
    • Projects: projects.md
    • Contact: contact.md

Hardware

Rock64

  • New: Install Debian in a rock64.

    Installation

    • Go to the rock64 wiki page to get the download directory for the debian version you want to install
    • Download firmware.rock64-rk3328.img.gz and partition.img.gz
    • Combine the 2 parts into 1 image file: zcat firmware.rock64-rk3328.img.gz partition.img.gz > debian-installer.img
    • Write the created .img file to microSD card or eMMC Module using dd: dd if=debian-installer.img of=/dev/sda bs=4M. Replace /dev/sda with your target drive.
    • Plug the microSD/eMMC card in the Rock64 (and connect a serial console, or keyboard and monitor) and boot up to start the Debian Installer

    Notes:

    • An Ethernet connection is required for the above installer
    • Remember to leave some space before your first partition for u-boot! You can do this by creating a 32M size unused partition at the start of the device.
    • Auto creating all partitions does not work. You can use the following manual partition scheme:
     #1 - 34MB  Unused/Free Space
     #2 - 512MB ext2 /boot           (Remember to set the bootable flag)
     #3 - xxGB  ext4 /               (This can be as large as you want. You can also create separate partitions for /home /var /tmp)
     #4 - 1GB   swap                 (May not be a good idea if using an SD card)
    

Software tools

Liberaforms

  • New: Usage of liberaforms.

    Marked true

    If you are a forms admin you can mark the answers which can be used to for example state that those have been checked and are not trolls, the user can then edit the answers through the magic link but it's not very probable that it becomes a trollo

    Send edit email

    If you want the users to receive an email with the magic link so that they can edit their answers you need to add a "Short text" field of type "Email" and then in the Options you need to enable the setting to send the users the magic link

    Extract the results through API

    Each form at the bottom of the Options tab has a section of API endpoints, once enabled you can extract them with curl:

    BASE_URL=https://forms.komun.org
    form_id=478
    curl -sqH "Authorization: Bearer ${JWT_TOKEN}" "${BASE_URL}/api/form/${form_id}/answers"
    

    That will give you an answer similar to:

    {
      "answers": [
        {
          "created": "2025-04-25T15:05:02.384121",
          "data": {
            "radio-group-1712945984567": "Hitzaldia--Charla--Xerrada",
            "radio-group-1713092876455": "55",
            "radio-group-1713373271313": "Castellano_1",
            "radio-group-1713382758036": "Si_1",
            "radio-group-1744968040362-0": "d8b35c755d9d41e2a844a344ae2494d6",
            "text-1712945594310": "Historia de la criptograf\u00eda",
            "text-1712945631444": "",
            "text-1712945663611": "user",
            "text-1712947404812": "user@sindominio.net",
            "text-1744967213162-0": "Divulgativa",
            "text-1744967571620-0": "Ninguno",
            "textarea-1712945646944": "Aproximaci\u00f3n hist\u00f3rica a la criptograf\u00eda, desde la Antig\u00fcedad a d\u00eda de hoy",
            "textarea-1712945755946": "",
            "textarea-1712945806547": "HDMI",
            "textarea-1712945865865": "Privacidad, criptograf\u00eda, matem\u00e1ticas, historia",
           "textarea-1713380502724": ""
          },
          "form": 478,
          "id": 36148,
          "marked": false
        }
      ],
      "meta": {}
    }
    ``
    
    As you can see the fields have weird names, to get the details of each field you can do the same request but to `${BASE_URL}/api/form/${form_id}` instead of `${BASE_URL}/api/form/${form_id}/answers`
    
    ```json
    {
      "form": {
        "created": "2025-04-25T11:45:43.633038",
        "introduction_md": "# Call4Nodes Hackmeeting 2025",
        "slug": "call4nodes-hackmeeting-2025-cas",
        "structure": [
         {
            "className": "form-control",
            "label": "T\u00edtulo",
            "name": "text-1712945594310",
            "required": true,
            "subtype": "text",
            "type": "text"
          },
          {
            "className": "form-control",
            "label": "Descripci\u00f3n",
            "name": "textarea-1712945646944",
            "required": true,
            "type": "textarea"
          },
          ...
    

Filosofía

Amor

Arts

Cooking

Cooking Basics

  • New: Todos los cortes para una cebolla.

    Picada

    • Dividir la cebolla por la raiz
    • apoyar cada mitad en la tabla con la raiz en perpendicular a ti
    • cortes grandes perpendicular a la raiz
    • poner la raiz en tu dirección
    • cortes grandes paralelos a la tabla
    • cortes grandes perpendiculares a la tabla

    Juliana

    • Dividir la cebolla por la raiz
    • apoyar cada mitad en la tabla con la raiz en paralelo a ti
    • cortes al gusto de grosor perpendiculares a la tabla

    Media luna

    • Dividir la cebolla por la raiz
    • apoyar cada mitad en la tabla con la raiz en perpendicular a ti
    • cortes al gusto de grosor perpendiculares a la tabla

    Brunoise

    • Dividir la cebolla por la raiz
    • apoyar cada mitad en la tabla con la raiz en paralelo a ti
    • cortes al gusto de grosor perpendiculares a la tabla sin llegar hasta el final
    • poner la raiz en perpendicular
    • cortes al gusto de grosor paralelos a la tabla sin llegar hasta el final
    • cortes al gusto de grosor perpendiculares a la tabla

    Discos

    • Sin dividir la cebolla, poner la raiz paralela a la tabla y en perpendicular a ti
    • cortes al gusto de grosor perpendiculares a la tabla

    Aros

    • Corte de discos
    • desmontar los discos

Relevant content

Videogames

Age of Empires

Monologues

  • New: Add Sammy Obeid.