Autor Zpráva
Gray blogger
Profil *
Začal jsem psát jednoduchou aplikaci, která má jako uložiště používat ftp. Databázi nechci používat, protože psaní mysql příkazů a vše kolem mysql mi příjde strašně složité a náročné na čas. Chci udělat jednoduché přihlašování. Nejdříve jsem si říkal, že se obejdu bez idéček, ale nakonec jsem to zvážil a říkám si, přece nemůže být tak těžké napsat funkci na převod decimálního čísla na string v takovém formátu, aby číslo využilo rozsah ordinálních hodnot 32-255. Tak jsem to všechno dal do tabulky a pak to zkouším napsat v php. Pak zjistím, že banální věc v tabulce nebo na papíru nejde tak snadno převést na algoritmus, abych se v tom vyznal. Ale nakonec jsem přišel s těmito dvěma pomocnýma funkcema, které mi to pomohou realizovat: getRem($n,$max,$divisor); a correctRem_RQ(&$rem, &$rq, $divisor).

Zatím to zpracovává idéčka jen do hodnoty 49728, ale tolik uživatelů stejně nikdy mít nebudu. No pro případ, že bych v budoucnu chtěl zavést třeba vzkazy, bylo by dobré mít vyšší číselný rozsah.

Dekódování je snadné:

function decode_2byteStrToNum($a,$b){ return 223*$a+$b; }
function decode_3byteStrToNum($a,$b,$c){ return 49729*$a+$b; }
function decode_4byteStrToNum($a,$b,$c,$d){ return 11089567*$a+$b; }

Pomocné funkce pro zakódování:
function getRem($n,$max,$divisor){
  if ( $divisor == 0 ) die("Cannot devide by 0.");
  if ( $n > $max ) die("N is too high.");
  $roundedQuotient = (int) ($n / $divisor);
  $wn = $roundedQuotient * $divisor;
  return array($n-$wn, $roundedQuotient);
}
// Correct values if bigger than $divisor
function correctRem_RQ(&$rem, &$rq, $divisor){
 if ($rem>$divisor) {
   $rq2 = (int) ($rem / $divisor);
   // CORRECTION OF REM:
   $rem = $rem1 - ($rq2*$divisor);
   $rq = $rq+$rq2;
   }
}

A hlavní kódovací funkce:
function encode_numToStr($n,$s){
  if ( $n<224 )
     return $s = char($n);
  else {
    // max is 11089567 and 49729
    if ( $n<49729 ) // two byte string
       {
       ECHO "<h2>A</h2>";
       list($rem, $rq) = getRem($n,49729,223);
       echo "RQ: $rq, REM: $rem<br>";
       correctRem_RQ($rem, $rq, 223);
       echo "corrected:<br>";
       echo "RQ: $rq, REM: $rem<br>";
       // Shift to safe ord value:
       $rq += 32;
       $rem += 32;
       die("n:$n ; RQ_SHIFTED: $rq - REM_SHIFTED: $rem <i>(0-255 are correct values)</i>"); 
       return chr($rq) . chr( $rem );        
       }
    else 
    if ( $n>49729 ) // three byte string
       {
       }
    } // n bigger than 224
}
die ( encode_numToStr(49729,"")."" );

Přemítám nad tím jak postupovat dál, kdybych chtěl použít větší rozsah. Kdyby se vám chtělo mi s tím pomoci, budu rád.


Tabulku s návrhem jsem poslal sem:
sheet.zoho.com/sheet/editor.do?doc=7e1e21751ee4c20b75369265b3f19386077abee6ba2fcd891a843f670268d1480e0e0bc8af51329b33ec3116fcc1af8130007c44eafd2373320bfa96d7368192
Případně kdybyste si ji chtěli stáhnout, řekněte kam bych ji měl nahrát.


var    meaning    czech    
n    original number    vstup    input value
q    quotient    podíl    result after division
rq    quotient rounded down    podíl zaokrouhlen dolů    
rem    remainder    zbytek    zbytek po dělení
wn    whole number    celé číslo    celé číslo beze zbytku
Kcko
Profil
MySQL je náročná a složitá na čas?
Nauč se to, budeš to potřebovat.

To na co se tady ptáš je s prominutím sra*ka. Ani se nedivím, že takovouhle kravinu nechce nikdo řešit.
Neobcházej smysluplné řešení polodementním výmyslem.
Tomášeek
Profil
Gray blogger:
Pardon, ale... LOL
Gray blogger
Profil *
Kcko:
Nebudu díky a nemluv jak hovado.
RastyAmateur
Profil
Gray blogger:
Jakože já většinou také nesouhlasím s Kckovou formulací odpovědí odpovědí, ale tato byla vlastně zcela na místě... Začni používat SQL, víc to snad rozvádět nemusím.
Gray blogger
Profil *
RastyAmateur:
Namístě je jedině slušný dialog. Jakékoliv urážlivé odpovědi naopak svědčí o zhovadilosti - přesněji: o morální a duševní zaostalosti kohokoliv kdo má potřebu používat sprosté a urážlivé výrazy. Říkejte si tomu jak chcete, podle mě je to jasný důkaz duševní lability takového člověka. Doufám, že si příště dáte pozor na pusu.


SQL v žádném případě používat nehodlám. Vím kolik toto obnáší času. Vy kdo toto děláte profesionálně: kolik času a peněz jste investovali, aby jste se ty věci ohledně SQL/MySQL databází naučili? Já čas nemám, takže nemám z čeho investovat. Pokud byste někdo chtěl zdarma dělat na projektu a pomáhat (nevidím důvod) pak máte příležitost. A jestliže mi odpovíte "nemám čas", nebo "nemám peníze" pak proč to samé chcete po mě?
RastyAmateur
Profil
Gray blogger:
SQL v žádném případě používat nehodlám
Smůla, pak si tento problém budeš muset s největší pravděpodobností vyřešit sám... GL

kolik času a peněz jste investovali, aby jste se ty věci ohledně SQL/MySQL databází naučili?
V 17 letech jsem si o tom přečetl dva tutoriály. Stálo mě to tak hodinku času čtení? Možná 3, když započítám i to, že jsem si rovnou zkoušel něco naprogramovat. A ty tutoriály byly na internetu zdarma, takže mě to stálo jen elektřinu (musel jsem k tomu mít zapnutý počítač) a přístup k internetu. Naštěstí i bez toho se dá dnes obejít, máš místa s veřejnou WiFi, počítače máš většinou v knihovnách, školách, práci. Takže je možné se to naučit dokonce zdarma! Owww, jak já miluji 21. století!

Já čas nemám, takže nemám z čeho investovat.
Smutný. Kdyby jsi se vykašlal na to, co tu prezentuješ, a místo toho by jsi zkopíroval nějaký kód z prvního tutorialu s ručně naklikanou databází v phpmyadminu, měl bys to bez problémů, za polovinu času a ještě s pomocí na všech diskusích týkajících se webu nebo programování...

A jestliže mi odpovíte "nemám čas", nebo "nemám peníze" pak proč to samé chcete po mě?
Počkej, my sice nemáme čas ani peníze, po tobě ale nic nechceme. To ty chceš po nás, abychom ti s něčím pomohli... My ti jen radíme, aby ses na tuhle s prominutím sra*ku vykašlal a začal vše dělat tak, jako se to v dnešní době dělá.
Ty tvoje poslední dvě věty byly absolutně zcestné a bezpředmětné.
Gray blogger
Profil *
RastyAmateur:
Posílal jsem to tu tak nějak na sdílení. Chtěl jsem vědět jestli tu je nějaký mozek, který rád řeší algoritmy. Ale tenhle algoritmus už mám vyřešený, našel jsem jednodušší způsob.

Ohledně toho učení, ve dvou tutoriálech se naučíš tak akorád jak vytvořit tabulku a používat insert, select... Naneštěstí problém je komplikovanější. Mysql databáze se musí udržovat a zálohovat. Snažíš se to zjednodušit, ale já vím že programování s databází jako mysql sžírá mraky času a do toho znova nejdu. Děkuji, jen při té představě se mi zvedá žaludek. Ale z téhle diskuse je pěkné jak se oba snažíme přidávat emocionální nádech pstanemu textu, jakobychom se snažili jeden druhého ovlivnit, i když oba víme, že to nejde.

No tak, já po vás rozhodně nechci abyste pro mě psali databázi, takže to nechtějtě ani vy po mě :) A to už se opravdu usmívám, protože jak říkám, nikde jsem nepsal, že to po vás chcu. Když se vám nechce řešit algoritmy a nebaví vás, to pak to beru - nebylo to určeno vám.


Chtěl jsem vlastně jen znát reakce na kód, ale chápu to tak, že je tu jen omezené množství programátorů, většinou samí profíci co mají mraky času a a rádi se hrabou v mysql, což není můj případ.
Ikki
Profil
Příspěvky tohoto uživatele bych asi nerozebíral. Má svojí hlavu, poradit si nenechá, nasměrovat na správnou cestu taky ne. To je jako vyplnit učebnici namísto pracovního sešitu.
Gray blogger
Profil *
Ikki:
Zapomněl jsem zmínit, že algoritmus (ne tento nepovedený, ale jiný) použiju i mimo PHP. PHP mě zajímá jen okrajově. No bodejď bych si nechal poradit, chci se brzo vrátit ke své práci na jiném projektu který s webovkama nemá nic společného, nehodlám strávit zbytek svého života v PHP a udržbou myslq db. Algoritmus, který jsem vymyslel je úplně jednoduchý a využiju ho i tam, kde bych mysql nepoužil. Jsou to úplně banální prográmky kde člověk potřebuje rychle zapsat data do souboru txt a ne se otravovat s db...
Anonymouz
Profil
Jak nakonec vypadá to tvoje druhé funkční a jednodušší řešení? Taky se mi moc nechce MySQL učit. Zatím jsem to vždy řešil nějakým redakčním systémem.
tttt
Profil *
říkám si, přece nemůže být tak těžké napsat funkci na převod decimálního čísla na string v takovém formátu, aby číslo využilo rozsah ordinálních hodnot 32-255

Funkční a jednoduché řešení nebude vymýšlet něco výše uvedeného. Gray blogger se zřejmě snaží optimalizovat něco, co skoro určitě nepotřebuje optimalizovat. Tipuju, že to dělá, aby řetězce byly o trochu kratší, než kdyby to použil přímo. Pro unikátní id je třeba uniqid, je-li potřeba něco zakódovat do ascii, je tu base64 kódování.

Soubory můžou rozumně fungovat, pokud se bude jenom číst (konfigurace/statická data) nebo zapisovat (nějaká forma logování). Pokud je potřeba obojí, což tak většinou bývá, je práce se soubory složitější než práce s databází.
Dash
Profil *
To je tedy bizár jaksepatří. Pologramotný převod čísla na alfanumerický znak a ukládání dat do souborů via FTP? To snad ne. Neexistuje use-case, kdy by tohle dávalo smysl. V jakékoliv jazyce.

Pro ukládání tabulkových dat do souboru existuje SQLite. Podpora je výborná (nejen v PHP), výkon pro čtení velmi solidní. Nesnaž se vynalézat kolo, tím méně hranaté…

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0