Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) vydal Zprávu o stavu kybernetické bezpečnosti ČR za rok 2024 (pdf). V loňském roce NÚKIB evidoval dosud nejvíce kybernetických bezpečnostních incidentů s celkovým počtem 268. Oproti roku 2023 se však jedná pouze o drobný nárůst a závažnost dopadů evidovaných incidentů klesá již třetím rokem v řadě. V minulém roce NÚKIB evidoval pouze jeden velmi významný incident a významných incidentů bylo zaznamenáno 18, což oproti roku 2023 představuje pokles o více než polovinu.
Byl publikován aktuální přehled vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie). Servo mimo jiné nově zvládne animované obrázky APNG a WebP.
Na chytré telefony a počítačové tablety v Rusku bude od začátku příštího měsíce povinné předinstalovávat státem podporovanou komunikační aplikaci MAX, která konkuruje aplikaci WhatsApp americké společnosti Meta Platforms. Oznámila to dnes ruská vláda. Ta by podle kritiků mohla aplikaci MAX používat ke sledování uživatelů. Ruská státní média obvinění ze špehování pomocí aplikace MAX popírají. Tvrdí, že MAX má méně oprávnění k přístupu k údajům o uživatelích než konkurenční aplikace WhatsApp a Telegram.
Společnost PINE64 stojící za telefony PinePhone nebo notebooky Pinebook publikovala na svém blogu srpnový souhrn novinek. Kvůli nedostatečnému zájmu byla ukončena výroba telefonů PinePhone Pro.
Po pěti měsících vývoje byla vydána nová verze 0.15.1 programovacího jazyka Zig (GitHub, Wikipedie). Verze 0.15.0 byla přeskočena. Přispělo 162 vývojářů. Přehled novinek v poznámkách k vydání.
Před sedmi lety společnost Valve představila fork projektu Wine s názvem Proton umožňující v Linuxu přímo ze Steamu hrát počítačové hry do té doby běžící pouze ve Windows. Aktuální přehled podporovaných her na stránkách ProtonDB
Společnost DuckDuckGo rozšířila svůj AI chat Duck.ai o GPT-5 mini (𝕏). Duck.ai umožňuje anonymní přístup bez vytváření účtů k několika modelům umělé inteligence. Aktuálně k GPT-4o mini, GPT-5 mini, Llama 4 Scout, Claude Haiku 3.5 a Mistral Small 3.
Marek Tóth v příspěvku DOM-based Extension Clickjacking: Data ve správcích hesel v ohrožení na svém blogu popsal novou clickjacking techniku s několika variantami útoků a otestoval ji proti 11 správcům hesel. Výsledkem bylo nalezení několika 0-day zranitelností, které mohly ovlivnit uložená data desítek milionů uživatelů. Jedno kliknutí kdekoliv na webové stránce kontrolované útočníkem umožňovalo ukrást uživatelská data ze
… více »Na dnešní akci Made by Google 2025 (YouTube) byly představeny telefony Pixel 10 s novým čipem Google Tensor G5 a novými AI funkcemi, hodinky Pixel Watch 4 a sluchátka Pixel Buds 2a.
The Document Foundation oznámila vydání nové major verze 25.8 svobodného kancelářského balíku LibreOffice. Podrobný přehled nových vlastností i s náhledy v poznámkách k vydání (cs) a také na Youtube a PeerTube.
Odkazy
Nedávno som písal blogy o ukladaní lokalizovaného obsahu do databázy a o vytvorení jednoduchého CMS v Djangu. Dnes sa pozrieme na 2 aplikácie pre Django, pomocou ktorých sa dá jednoduchý CMS rozšíriť o podporu lokalizácie a zároveň sa pozrieme na spôsob, ktorým sú preklady uložené v databáze.
Jazyky webovej aplikácie sa definujú v súbore cms/settings.py
premennou LANGUAGES
, ktorá obsahuje dovjice: ISO-639-1 kód a viditeľný názov jazyka.
LANGUAGES = ( ('sk', 'Slovensky'), ('en', 'English'), )
Na prepínanie jazykov budeme musieť do premennej MIDDLEWARE_CLASSES
položku 'django.middleware.locale.LocaleMiddleware'
. Jazyk tak bude dať zmeniť prefixom URL napr. http://localhost:8000/sk/
.
Najpopulárnejším balíkom na preklad obsahu je podľa djangopackages.com balík modeltranslation. Nainštalovať sa dá príkazom pip install django-modeltranslation
vykonaným vo virtuálnom prostredí.
V cms/settings.py
do nainštalovaných balíkov (INSTALLED_PACKAGES
) pridáme riadok 'modeltranslation'
. Ďalej potrebujeme vytvoriť súbor article/translation.py
, ktorý bude obsahovať metainformácie o lokalizovateľných poliach pre modeltranslation
from modeltranslation.translator import translator, TranslationOptions from article.models import Article class ArticleTranslationOptions(TranslationOptions): fields = ('title', 'content',) translator.register(Article, ArticleTranslationOptions)
Aby boli preklady dostupné v administrátorskom rozhraní musí sa základná trieda django.contrib.admin.ModelAdmin
v article/admin.py
vymeniť za modeltranslation.admin.TranslationAdmin
.
from django.contrib import admin from article.models import Article from modeltranslation.admin import TranslationAdmin class ArticleAdmin(TranslationAdmin): prepopulated_fields = {'slug': ('title', )} fieldsets = ((None, {'fields': ('user', 'slug')}), ('Article', {'fields': ('title', 'content')})) admin.site.register(Article, ArticleAdmin)
Teraz synchronizujeme databázu príkazom python manage.py syncdb
. Následne môžme v administrátorskom rozhraní upravovať lokalizovaný obsah.
Z užívateľského hľadiska nie je rozrhanie práve optimálne. V balíku však nájdeme dodatočné súbory, ktoré administrátorské rozhranie trochu "ohackujú". Postačí do ArticleAdmin
pridať dodatočné médiá.
class ArticleAdmin(TranslationAdmin): ... class Media: js = ( 'modeltranslation/js/force_jquery.js', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.24/jquery-ui.min.js', 'modeltranslation/js/tabbed_translation_fields.js', ) css = { 'screen': ('modeltranslation/css/tabbed_translation_fields.css',), }
Tento projekt je pokračovaním balíka django-nani. Nainštaluje sa príkazom pip install django-hvad
a pridaním riadku 'hvad'
do nainštalovaných aplikácií.
Preklady sa definujú priamo v modeli. Základná trieda modelu sa zmení z django.db.models.Model
na hvad.models.TranslatableModel
. Preklady sa definujú inštanciou TranslatedFields
. Celý súbor article/models.py
bude vyzerať takto:
from django.db import models from django.contrib.auth.models import User from hvad.models import TranslatableModel, TranslatedFields class Article(TranslatableModel): user = models.ForeignKey(User) slug = models.SlugField(unique = True) translations = TranslatedFields( title = models.CharField(max_length = 100), content = models.TextField(), )
V administrátorskom rozhraní zmeníme základnú triedu ModelAdmin
na hvad.admin.TranslatableAdmin
. Nastavenia ako prepopulated_fields, fieldsets … pri tomto module nefungujú tak, ako sme u djanga zvyknutí. Tieto vlastnosti sa totiž musia nastaviť až po zavolaní nadradeného konštruktora.
from django.contrib import admin from article.models import Article from hvad.admin import TranslatableAdmin class ArticleAdmin(TranslatableAdmin): def __init__(self, *args, **kwargs): super(ArticleAdmin, self).__init__(*args, **kwargs) self.prepopulated_fields = {'slug': ('title',)} self.fieldsets = ((None, {'fields': ('user', 'slug')}), ('Article', {'fields': ('title', 'content')})) admin.site.register(Article, ArticleAdmin)
Multilingual | Preklady v samostantých stĺpcoch (title_sk, title_en …). Vytvorenie nových stĺpcov pri pridaní jazyka dokáže zariadiť samotný modul zavolaním python manage.py sync_translation_fields . |
Hvad | Každá tabuľka má samostatnú tabuľku s prekladmi so suffixom _translation . V nej sú stĺpce language_code pre kód jazyka, master_id pre ID objektu a samotné stĺpce obsahujúce preklad. |
Pri vývoji webových aplikácií som sa s menším množstvom problémov stretol u balíka django-multilingual
. O niečo lepšie administrátorské rozhranie má django-hvad
, ale kód administrátorského rozhrania môže byť kvôli vlastnostiam ako prepopulated_fields
značne odlišný oproti štandardnému kódu.
Flexibilnejšiu štruktúru databázy má django-hvad
. Skripty dodávané s django-multilingual
však dokážu databázovú schému pri zmene podporovaných jazykov migrovať. Z princípu však nie je možné pridávať nové jazykové mutácie bez reštartu webovej aplikácie.
Tiskni
Sdílej:
Django sa dobre hodí na webové aplikácie, kde hlavnou činnosťou je vytváranie, zobrazovanie, úprava a mazanie záznamov v databáze. Na tieto činnosti poskytuje slušné ORM, generovanie formulárov z databázových modelov, generické pohľady (create, update, delete, view, list, archive ...). Na špeciálne prípady použitia ako napr. webové UI k torrent klientovi však neposkytuje prakticky žiadnu podporu. V týchto prípadoch by bolo asi lepšie použiť niečo ľahšie, alebo viacej nízkoúrovňové (pylons, flask ...).
Veľkosť v prípade djanga nie je veľký problém. Veľmi veľká časť balíka sú lokalizácie. Ďalej sa tam nachádzajú extra aplikácie ako integrované admin rozhranie, systém komentárov, správa užívateľov, podpora markdown syntaxe ... ktoré môžu, ale nemusia byť v aplikácii použité.