Byla vydána nová major verze 5.0.0 svobodného multiplatformního nástroje BleachBit (GitHub, Wikipedie) určeného především k efektivnímu čištění disku od nepotřebných souborů.
Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za duben (YouTube).
Provozovatel čínské sociální sítě TikTok dostal v Evropské unii pokutu 530 milionů eur (13,2 miliardy Kč) za nedostatky při ochraně osobních údajů. Ve svém oznámení to dnes uvedla irská Komise pro ochranu údajů (DPC), která jedná jménem EU. Zároveň TikToku nařídila, že pokud správu dat neuvede do šesti měsíců do souladu s požadavky, musí přestat posílat data o unijních uživatelích do Číny. TikTok uvedl, že se proti rozhodnutí odvolá.
Společnost JetBrains uvolnila Mellum, tj. svůj velký jazykový model (LLM) pro vývojáře, jako open source. Mellum podporuje programovací jazyky Java, Kotlin, Python, Go, PHP, C, C++, C#, JavaScript, TypeScript, CSS, HTML, Rust a Ruby.
Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.
V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.
Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).
Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
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é.