Byla vydána první veřejná preview verze PrusaSliceru 3.0. Přesně 15 let po zveřejnění první verze Slic3ru, které připadlo na 1. září 2011. Jedná se o dosud největší upgrade PrusaSliceru: "Řídili jsme se tím, co skutečně potřebujete, a tak jsme například zcela zahodili stávající uživatelské rozhraní a vytvořili ho znovu od nuly. Přinášíme také nový systém projektů, kompletně přepracované profily navržené pro moderní tiskárny s větším
… více »Byl vydán Mozilla Firefox 155.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Vypíchnout lze Smart Window, zatím ale dostupné pouze pro uživatele v USA, Kanadě a Francii. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 155 bude brzy k dispozici také na Flathubu a Snapcraftu.
Tima Cooka na pozici generálního ředitele společnosti Apple dnešním dnem nahradil John Ternus, který byl dosud odpovědný za hardware. Tim Cook vedl Apple od roku 2011, kdy funkci převzal od později zesnulého spoluzakladatele společnosti Stevea Jobse. Za 15 let v čele Applu více než zdvojnásobil tržní hodnotu firmy.
Organizátoři konference LinuxDays ukončil veřejné přihlašování přednášek. Teď je na vás, abyste vybrali nejlepší témata pro letošní ročník. Hlasovat můžete do pondělí 7. září, poté bude podle výsledků hlasování sestaven program pro letošní ročník.
Servo, engine webového prohlížeče napsaný v Rustu, byl vydán ve verzi 0.5.0. Novinky shrnuje přehled projektu za červenec. Došlo k dalšímu pokroku ve vykreslování webových stránek. Současným cílem projektu je vytvořit komponentu webového prohlížeče jako WebView pro použití v jiných aplikacích.
IKEA a XBOX představují kolekci YXSTABY (pdf). Ta přináší designová a praktická řešení, díky nimž se prostor pro hraní během sekundy promění v útulný a harmonický domov.
Jonathan Thomas oznámil vydání verze 4.0 nelineární střižny OpenShot. Nově podporuje nahrávání obrazu a zvuku, vylepšuje uživatelské rozhraní, mj. color grading, přidává další efekty a mnoho dalšího (seznam změn).
Proběhlo hlasování o používání LLM při vývoji Debianu. Vývojáři Debianu si odhlasovali zodpovědné využívání generativní umělé inteligence.
Sovereign Tech Agency (Wikipedie) prostřednictvím svého fondu Sovereign Tech Fund podpoří vývoj Flatpaku částkou 508 640 eur.
Byla vydána první veřejná verze v7.0-mk2 projektu Multikernel (mklinux), který umožňuje spouštět více nezávislých linuxových jader současně na jednom stroji bez hypervizoru.
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: