Byly publikovány zdrojové kódy počítačové hry Unturned. Pro nekomerční účely. V plánu je přelicencování pod MIT. Hra Unturned je postavena nad multiplatformním herním enginem Unity.
První česká družice navržená a sestavená výhradně studenty se dostala na oběžnou dráhu Země. Družice KOSTKA, kterou vyvinul studentský tým YSpace z Vysokého učení technického v Brně (VUT), dnes odstartovala na palubě rakety Falcon 9 společnosti SpaceX v rámci mise Transporter-17 z kalifornské základny Vandenberg Space Force Base.
Po nákresech ovladače Steam Controller a puku společnost Valve na svém GitLabu publikovala projekt Inkterface, tj. podrobný návod (PDF, video v mp4) na sestavení předního panelu s e-papírovým displejem pro Steam Machine pro zobrazování systémových informací. Použity jsou součástky od společnosti Adafruit.
V jádře Linux byla nalezena a v dubnu letošního roku v upstreamu opravena kritická zranitelnost Bad Epoll aneb CVE-2026-46242. Jedná se o zranitelnost typu "race-condition use-after-free", která běžnému uživateli umožňuje získat práva roota. Na distribucích Linuxu i na Androidu. Dokonce i zevnitř sandboxu prohlížeče Chrome. Chyba byla do Linuxu zavedena v dubnu 2023, tj. Linux 6.4.
Byla vydána nová verze 10.4 sady aplikací pro SSH komunikaci OpenSSH. Přináší řadu důležitých bezpečnostních oprav, vylepšení funkcí a oprav chyb. Vyzkoušet lze experimentální podporu postkvantového algoritmu mldsa44-ed25519.
Open Printer je otevřená kompaktní tiskárna od Open Tools. Brzy by měla být spuštěna kampaň na její podporu na Crowd Supply. Současně by měly být uvolněny zdrojové kódy. Postavena je na Raspberry Pi Zero W a STM32. Používá inkoustové kazety HP 302.
Byla vydána nová verze 3.28.0 FreeRDP, tj. svobodné implementace protokolu RDP (Remote Desktop Protocol). Opraveno bylo 8 zranitelností.
Čeští policisté společně se svými tureckými kolegy zadrželi 51 lidí, kteří se podle kriminalistů podíleli na provozu podvodného call centra v Istanbulu. Skupina je spojena s 1173 případy podvodů na českých občanech, při kterých vznikla škoda přes 553 milionů korun.
Immich byl vydán v nové verzi 3.0.0. 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.
Společnost Juno Computers prodávající počítače s předinstalovaným Linuxem má nově v nabídce linuxový tablet Juno Tab 4 - WiFi. Na výběr je Debian, Ubuntu a Kubuntu. Předobjednat jej lze za 949 liber (26 500 korun).
To je na delší povídání, v podstatě jde o to že uživatel bude muset ten hash opsat z webu do mobilu, takže dlouhý hash nebude zrovna to pravé. Napadlo mě jedno řešení - vzít třeba jenom prvních x cifer z MD5 hashe, to by snad mělo stačit...
Jinak souhlasím, že je lepší ptát se na původní problém, normálně bych to udělal, teď ale dělám na progamu pro jednu firmu a nemůžu mluvit o tom co přesně dělám.
Tak jsem ti něco malýho napsal, protože jsem se nudil. Koukni na to. Jinak by to měl bejt jednosměrnej algoritmus (neměla by se dát napsát funkce, která z čísla udělá string).
public static double getHash(String s, int lenght) {
Double tmp = new Double(0);
for (int i = 0; i < s.length(); ++i) {
char c = s.charAt(i);
int j = (int) c;
tmp += j;
}
while (tmp < Math.pow(10, lenght - 1) || tmp > Math.pow(10, lenght)) {
if (tmp >= Math.pow(10, lenght)) {
//System.out.println("vetší než " + Math.pow(10, lenght));
double zbytek = tmp % 2;
tmp = ((tmp / 2) + zbytek)- (zbytek / 2);
}
if (tmp < Math.pow(10, lenght-1)) {
//System.out.println("menší než " + Math.pow(10, lenght-1));
tmp = tmp * 2;
}
}
return tmp;
}
No tohle je myslim tak trochu odstrasujici priklad, jak podobnou vec neimplementovat
Je to čístě nástřel. Zajímala by mne vaše implementace, když tahle je odstrašující.
Proc je napriklad promenna tmp Double a ne double?
S tim Double máte pravdu, to jsem tam nechal omylem (předtím jsem to tam měl úmyslně).
Proc ten hash neni celociselny?
Hash je celočíselný, ale typu double. Snad napsat return (int)tmp; a přepsat předpis metody dotazující zvládne.
Jenom teď ještě řeším,že pro podobné stringy to hází dost podobné hashe. Ještě pošlu druhou verzi, kde bude tohle ošetřeno.
public static int getHash(String s, int lenght) {
int usedLenght = lenght + 1;
double tmp = 0;
for (int i = 0; i < s.length(); ++i) {
char c = s.charAt(i);
int j = (int) c;
tmp += j;
}
tmp = Math.abs(Integer.reverse((int)tmp));
while (tmp < Math.pow(10, usedLenght - 1) || tmp > Math.pow(10, usedLenght)) {
if (tmp >= Math.pow(10, usedLenght)) {
int zbytek = (int)(tmp % 2);
tmp = ((tmp / 2) + zbytek) - (zbytek / 2);
}
if (tmp < Math.pow(10, usedLenght - 1)) {
tmp = tmp * 2;
}
}
return (int) (tmp / 10.0);
}
Proc vymyslet kolo.
Na 100% souhlasim. Já tu metodu vymýšlim čístě ze zvědavosti.
prehozeni pismen vedlo na ruzny haskod, coz trivialni scitani znaku nesplnuje
Po malé úpravě (viz. příloha) splňuje. Ale trochu se stydím, že mě to nenapdalo hned (a hlavně samo od sebe).
Realizovat celociselne operace v typech s plovouci carkou samozrejme ciste technicky lze (dokud nejsou cisla moc velka), ja to ale povazuji za spatny programatorsky postup, protoze to neni logicke.
Javu se teprve učím. Normálně programuji v jazycích kde se datové typy moc neřeší (hlavně PHP). Upravil jsem metodu, aby celou dobu pracovala s celočíselnými datovým typem. Takhle vám to příjde logicky správné už ?
podivej se treba, jak se pocita hashcode pro tridu String, zdrojaky jsou napriklad pro Sun implementaci k dispozici
Kouknul jsem, implementoval jsem sám ze zvědavosti. Má to však pro zadání (pevná délka a asi by autor chtěl pouze kladná čísla) nějáké mouchy.
Jinak děkuji za poznámky. Rád se něco přiučím.
Jen pro srovnání, jsem změřil NetBeans profilerem rychlosti všech tří hashů (můj originální - getHash, moje implementace hashCode - hashCode a originální hashCode - origHashCode). Výsledky jsem přiložil jako obrázek.
public static long getHash(String s, int lenght) {
int usedLenght = lenght + 1;
long tmp = 0;
for (int i = 0; i < s.length(); ++i) {
char c = s.charAt(i);
int j = (int) c;
tmp += (j*(i+1));
}
tmp = Math.abs(Integer.reverse((int)tmp));
while (tmp < Math.pow(10, usedLenght - 1) || tmp > Math.pow(10, usedLenght)) {
if (tmp >= Math.pow(10, usedLenght)) {
int zbytek = (int)(tmp % 2);
tmp = ((tmp / 2) + zbytek) - (zbytek / 2);
}
if (tmp < Math.pow(10, usedLenght - 1)) {
tmp = tmp * 2;
}
}
return (tmp / 10);
}
public static int hashCode(String s) {
int hash = 0;
for(int i =0; i < s.length(); i++) {
hash = hash + s.charAt(i) * (int)Math.pow(31, s.length() - (i + 1));
}
return hash;
}
tmp = ((tmp / 2) + zbytek) - (zbytek / 2);
Máte uplnou pravdu, je to zbytečné. Teď to opravdu postrádá smysl. Kód jsem opravil. V podstatě jsem došel sám ke stejnému výpočtu, jako je originální javovský String.hashCode. Rozdíl je skoro jen v tom, že já používám:
hash += s.charAt(i)*(i+1);
a originál Sun metoda hashCode:
hash += s.charAt(i) * (int)Math.pow(31, lenght - (i + 1));
Long.reverse() nechápu vůbec. Váš algoritmus se od algoritmu použitého v Javě dost podstatně liší – ovšem je pravda, že ty algoritmy jsou co do míry hashování srovnatelné. Myslím, že pro oba dva nebude problém napsat inverzní funkci (která vrátí některý z možných vstupů), implementace String.hashCode() ve skutečnosti hashuje jenom podle pravých 7 znaků, další znaky se k hashi prakticky jen přičtou (takže u ASCII textu se osmý a další znak zprava promítnou jen do dolních 7 bitů hashe).
Pokud to celé má sloužit jako bezpečnostní kód, použil bych nějakou prověřenou hashovací funkci (SHA nebo klidně i MD5), výsledek bych rozdělil na skupiny bitů požadované délky a z těch bych XORováním udělal jednu skupinu požadované délky.
Tiskni
Sdílej: