Odborníci z Penn State University zkoumají způsob ukládání informací na lepicí pásku. Principiálně by podle nich bylo možné kombinací odlepení a zpětného přilepení dosáhnout uložení informace, kterou opětovným odlepením dokážou přečíst. Výhodou je, že způsob uložení i přečtení je čistě mechanický. Zde o tom referují ve volně dostupném článku. Zajímavé bude sledovat zda se jim v rámci výzkumu podaří prokázat použitelnost i v jiné než
… více »Na GitHubu byl publikován reprodukovatelný návod, jak rozchodit Adobe Lightroom CC na Linuxu a Wine. Návod byl vytvořený pomocí AI Claude Code.
Pokud by někdo potřeboval Wayland kompozitor uvnitř počítačové hry Minecraft, aby mohl zobrazovat okna desktopových aplikací přímo v herním prostředí, může sáhnout po Waylandcraftu. Ukázka na YouTube.
Uroš Popović v krátkém článku vysvětluje, co jsou emulátor terminálu, TTY a shell a jaké jsou mezi nimi rozdíly. Jde o první díl seriálu na jeho novém webu Linux Field Guide věnovaném nízkoúrovňové práci s linuxovými systémy.
Byl vydán Debian 13.5, tj. pátá opravná verze Debianu 13 s kódovým názvem Trixie a Debian 12.14, tj. čtrnáctá opravná verze Debianu 12 s kódovým názvem Bookworm. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 13 a Debianu 12 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.
CiviCRM (Wikipedie) bylo vydáno v nové verzi 6.14.0. Podrobnosti o nových funkcích a opravách najdete na release stránce. CiviCRM je robustní open-source CRM systém navržený speciálně pro neziskové organizace, spolky a občanské iniciativy. Projekt je napsán v jazyce PHP a licencován pod GNU Affero General Public License (AGPLv3). Český překlad má nyní 45 % přeložených řetězců a přibližuje se milníku 50 %. Potřebujeme vaši pomoc, abychom se dostali dál. Pokud máte chuť přispět překladem nebo korekturou, přidejte se na platformu Transifex.
Další lokální zranitelností Linuxu je ssh-keysign-pwn. Uživatel si může přečíst obsah souborů, ke kterým má právo ke čtení pouze root, například soubory s SSH klíči nebo /etc/shadow. V upstreamu již opraveno [oss-security mailing list].
Singularity (YouTube) je nejnovější otevřený film od Blender Studia. Jedná se o jejich první 4K HDR film.
Vyšla hra Život Není Krásný: Poslední Exekuce (Steam, ProtonDB). Kreslená point & click adventura ze staré školy plná černého humoru a nekorektního násilí. Vžijte se do role zpustlého exekutora Vladimíra Brehowského a projděte s ním jeho poslední pracovní den. Hra volně navazuje na sérii Život Není Krásný.
Společnost Red Hat představila Fedora Hummingbird, tj. linuxovou distribuci s nativním kontejnerovým designem určenou pro vývojáře využívající AI agenty.
popisky.txt - tam je vše v pořádku, ovšem název a popis galerie, autor a pár dalších informací se bere ze souboru config.xml, a tam nastává problém. Pokud je v některém popisu znak s diakritikou, parser před ním zastaví a tento ani další znaky již nezpracuje. A skočí na další položku. Psal jsem Tomášovi, ale odepsal mi, že se již dlouho PHP nevěnuje, ale že by ten problém měl být někde v parseru.
config.xml vypadá takto:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE conf SYSTEM "../config.dtd"> <conf> <const name="ROW_THUMB_NUM" desc="pocet nahledu na radce">3</const> <const name="PREFIX" desc="prefix souboru s nahledem">tn_</const> <const name="DESC_FILE" desc="nazev souboru s popiskami">popisky.txt</const> <const name="SHOW_DESC" desc="zobrazovat popisky u fotek [0|1]">1</const> <const name="SHOW_THUMB_DESC" desc="zobrazovat popisky i u nahledu [0|1]">1</const> <const name="IMPLICIT_DESC" desc="implicitni title a alt, tak kde neni popisek">obrázek</const> <const name="GALLERY_NAME" desc="popis galerie">Jarní květinky</const> <const name="DATE" desc="datum vytvoreni fotek"></const> <const name="AUTHOR" desc="autor fotografii">Oťula</const> <const name="NOTE" desc="poznamka k fotogalerii">Jsou opravdu překrásné</const> </conf>A parser vypadá takto (je v něm už doplněno i vše možné, co jsem poznacházel po webu ohledně UTF-8, že by mělo pomoci, ale nepomohlo):
function start_element($parser,$tag,$attr)
{
global $at, $desc, $current;
$current=$tag;
if (strcmp($tag,"const")==0)
{
$at=$attr["name"];
}
}
function end_element($parser,$tag)
{
global $current;
$current="";
}
function element_data($parser,$data)
{
global $at,$current;
if (strcmp($current,"const")==0)
{
define($at,$data);
}
}
function config($loc)
{
if (!file_exists($loc))
{
return 0;
}
else
{
if(!($f=fopen($loc,"r")))
{
return 0;
}
else
{
$at="";
$current="";
$parser=xml_parser_create("UTF-8");
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING,"UTF-8");
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_set_element_handler($parser,"start_element","end_element");
xml_set_character_data_handler($parser,"element_data");
if(!xml_parse($parser,fread($f,filesize($loc))))
{
xml_parser_free($parser);
return 0;
}
}
xml_parser_free($parser);
return 1;
}
}
Při uvedených příkladech to tedy vypadá tak, že se název galerie zobrazí "Jarn", autor "O", implicitní title a alt "obr", a poznámka "Jsou opravdu p".
Byl bych vděčný za radu, jak to dát dohromady.
Řešení dotazu:
config("config.xml");
$dc = get_defined_constants(true);
echo "<pre>", print_r($dc["user"], true), "</pre>";tak sa mi zobrazí niečo takéto:Array
(
[ROW_THUMB_NUM] => 3
[PREFIX] => tn_
[DESC_FILE] => popisky.txt
[SHOW_DESC] => 1
[SHOW_THUMB_DESC] => 1
[IMPLICIT_DESC] => obrázek
[GALLERY_NAME] => Jarní květinky
[AUTHOR] => Oťula
[NOTE] => Jsou opravdu překrásné
)(a teda, mne to funguje normálne)
...
//nacteni konstant z xml souboru
include("./xml.php"); //nacteni xml parseru
@$chyba = config($folder.$setting); //pokud nebyl config.xml nalezen, tak nastav hodnoty explicitne
//implicitni nastaveni promenych z config.xml
(!defined("THUMB_NUM"))?define("THUMB_NUM","15"):""; //9 nahledu na stranku
(!defined("ROW_THUMB_NUM"))?define("ROW_THUMB_NUM","3"):""; // 3 nahledy na radku
(!defined("PREFIX"))?define("PREFIX","tn_"):""; //prefix souboru s nahledy
(!defined("DESC_FILE"))?define("DESC_FILE","popisky.txt"):""; //nazev souboru s popiskami
(!defined("SHOW_DESC"))?define("SHOW_DESC","1"):""; // zobrazovat popisky u fotek
(!defined("SHOW_THUMB_DESC"))?define("SHOW_THUMB_DESC","1"):""; // zobrazovat popisky u nahledu
(!defined("IMPLICIT_DESC"))?define("IMPLICIT_DESC","obrázek"):""; // implicitni popiska
(!defined("GALERY_NAME"))?define("GALLERY_NAME",""):""; // nazev galerie
(!defined("DATE"))?define("DATE",""):""; // datum vytvoreni fotek
(!defined("AUTHOR"))?define("AUTHOR",""):""; // autor fotek
(!defined("NOTE"))?define("NOTE",""):""; //poznamka k fotogalerii
...
...
...
...
//vypis nadpisu, autora a data porizeni fotek
echo "<div id=\"hlavicka\">\n";
echo (GALLERY_NAME != "" && defined("GALLERY_NAME"))?"<h2>".GALLERY_NAME."</h2>\n":"\n";
echo (NOTE != "" && defined("NOTE"))?"<p>".NOTE."</p>\n":"\n";
echo (AUTHOR != "" && defined("AUTHOR"))?"<p><strong>Autor: </strong>".AUTHOR."</p>\n":"\n";
echo (DATE != "" && defined("DATE"))?"<p><strong>Datum: </strong>".DATE."</p>\n":"\n";
echo "</div>\n";
...
...
...
a je to načítáno do souboru s takovouto hlavičkou:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" > <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> ...
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<?php
include("./xml.php");
@$chyba = config("config.xml");
$dc = get_defined_constants(true);
echo "<pre>", print_r($dc["user"], true), "</pre>";
?>
</body>
</html>
config.xml a ponechám ho v tom souboru, odkud se načte, pokud v config.xml nic není, tak je to v pořádku.
<?php
function start_element($parser,$tag,$attr)
{
global $at, $desc, $current;
echo "start_element: (", $tag, ", ", print_r($attr, true), ")<br>";
$current=$tag;
if (strcmp($tag,"const")==0)
{
$at=$attr["name"];
}
}
function end_element($parser,$tag)
{
global $current;
echo "end_element: (", $tag, ")<br>";
$current="";
}
function element_data($parser,$data)
{
global $at,$current;
echo "element_data: (", $data, ")<br>";
if (strcmp($current,"const")==0)
{
define($at,$data);
}
}
function config($loc)
{
if (!file_exists($loc))
{
return 0;
}
else
{
if(!($f=fopen($loc,"r")))
{
return 0;
}
else
{
$at="";
$current="";
$parser=xml_parser_create("UTF-8");
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING,"UTF-8");
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_set_element_handler($parser,"start_element","end_element");
xml_set_character_data_handler($parser,"element_data");
if(!xml_parse($parser,fread($f,filesize($loc))))
{
xml_parser_free($parser);
return 0;
}
}
xml_parser_free($parser);
return 1;
}
}
?>Zo zobrazovaných informácií je jasné, že sa bude musieť presunúť definovanie tej konštanty až do funkcie end_element (a v element_data sa bude ten text spájať).
start_element: (const, Array ( [name] => GALLERY_NAME [desc] => nazev akce, odkud fotky pochazi ) ) element_data: (Jarn) element_data: (í květinky) end_element: (const) element_data: ( ) start_element: (const, Array ( [name] => DATE [desc] => datum vytvoreni fotek ) ) end_element: (const) element_data: ( ) start_element: (const, Array ( [name] => AUTHOR [desc] => autor fotografii ) ) element_data: (O) element_data: (ťula) end_element: (const) element_data: ( ) start_element: (const, Array ( [name] => NOTE [desc] => poznamka k fotogalerii ) ) element_data: (Jsou opravdu p) element_data: (řekrásné) end_element: (const) element_data: ( ) end_element: (conf)
<?php
function start_element($parser,$tag,$attr)
{
global $at, $element_data, $desc, $current;
$current=$tag;
if (strcmp($tag,"const")==0)
{
$at=$attr["name"];
$element_data = "";
}
}
function end_element($parser,$tag)
{
global $at,$element_data,$current;
if (strcmp($current,"const")==0)
{
define($at,$element_data);
}
$current="";
}
function element_data($parser,$data)
{
global $at,$element_data,$current;
if (strcmp($current,"const")==0)
{
$element_data .= $data;
}
}
function config($loc)
{
if (!file_exists($loc))
{
return 0;
}
else
{
if(!($f=fopen($loc,"r")))
{
return 0;
}
else
{
$at="";
$current="";
$parser=xml_parser_create("UTF-8");
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING,"UTF-8");
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_set_element_handler($parser,"start_element","end_element");
xml_set_character_data_handler($parser,"element_data");
if(!xml_parse($parser,fread($f,filesize($loc))))
{
xml_parser_free($parser);
return 0;
}
}
xml_parser_free($parser);
return 1;
}
}
?>
Až budeš v Brně, máš u mne panáka
Tiskni
Sdílej: