Immich byl vydán v první stabilní verzi 2.0.0 (YouTube). Jedná se o alternativu k výchozím aplikacím od Googlu a Applu pro správu fotografií a videí umožňující vlastní hosting serveru Immich. K vyzkoušení je demo. Immich je součástí balíčků open source aplikací FUTO. Zdrojové kódy jsou k dispozici na GitHubu pod licencí AGPL-3.0.
Český telekomunikační úřad vydal zprávy o vývoji cen a trhu elektronických komunikací se zaměřením na rok 2024. Jaká jsou hlavní zjištění? V roce 2024 bylo v ČR v rámci služeb přístupu k internetu v pevném místě přeneseno v průměru téměř 366 GB dat na jednu aktivní přípojku měsíčně – celkově jich tak uživateli bylo přeneseno přes 18 EB (Exabyte). Nejvyužívanějším způsobem přístupu k internetu v pevném místě zůstal v roce 2024 bezdrátový
… více »Raspberry Pi OS, oficiální operační systém pro Raspberry Pi, byl vydán v nové verzi 2025-10-01. Přehled novinek v příspěvku na blogu Raspberry Pi a poznámkách k vydání. Jedná o první verzi postavenou na Debianu 13 Trixie.
Byla vydána nová verze 4.6 svobodného notačního programu MuseScore Studio (Wikipedie). Představení novinek v oznámení v diskusním fóru a také na YouTube.
Společnost DuckDuckGo stojící za stejnojmenným vyhledávačem věnovala 1,1 milionu dolarů (stejně jako loni) na podporu digitálních práv, online soukromí a lepšího internetového ekosystému. Rozdělila je mezi 29 organizací a projektů. Za 15 let rozdala 8 050 000 dolarů.
Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.17. Díky 278 přispěvatelům.
Bylo vydáno openSUSE Leap 16 (cs). Ve výchozím nastavení přichází s vypnutou 32bitovou (ia32) podporou. Uživatelům však poskytuje možnost ji ručně povolit a užívat si tak hraní her ve Steamu, který stále závisí na 32bitových knihovnách. Změnily se požadavky na hardware. Leap 16 nyní vyžaduje jako minimální úroveň architektury procesoru x86-64-v2, což obecně znamená procesory zakoupené v roce 2008 nebo později. Uživatelé se starším hardwarem mohou migrovat na Slowroll nebo Tumbleweed.
Ministerstvo průmyslu a obchodu (MPO) ve spolupráci s Národní rozvojovou investiční (NRI) připravuje nový investiční nástroj zaměřený na podporu špičkových technologií – DeepTech fond. Jeho cílem je posílit inovační ekosystém české ekonomiky, rozvíjet projekty s vysokou přidanou hodnotou, podpořit vznik nových technologických lídrů a postupně zařadit Českou republiku mezi země s nejvyspělejší technologickou základnou.
… více »Radicle byl vydán ve verzi 1.5.0 s kódovým jménem Hibiscus. Jedná se o distribuovanou alternativu k softwarům pro spolupráci jako např. GitLab.
Společnost OpenAI představila text-to-video AI model Sora 2 pro generování realistických videí z textového popisu. Přesnější, realističtější a lépe ovladatelný než předchozí modely. Nabízí také synchronizované dialogy a zvukové efekty.
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é.