Fun

Mar 102012
 

Flattr this!

Video: Atviras kodas bei jo svarba nūdienos visuomenėje

Prezentacija: Atviras kodas bei jo svarba nūdienos visuomenėje

Prezentacija (Atviras kodas bei jo svarba nūdienos visuomenėje) su public RW teisėmis

Creative Commons Licence
Atviras kodas bei jo svarba nudienos visuomeneje by Ruslanas Gžibovskis is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Based on a work at lpic.lt.
Permissions beyond the scope of this license may be available at http://lpic.lt/2012/03/10/atviras-kodas-bei-jo-svarba-nudienos-visuomeneje/.

Mar 052012
 

Flattr this!

Sveiki, nusprendžiau pasidalinti, savo mikro sąrašiuku, kiniškų el. parduotuvių:

Mar 012012
 

Flattr this!

Sveiki, radau toki straipsniuką, kur išrašyti visi meta htmltag’o parametriukai.

Atributas Šaltinis Apibūdinimas
Allow rfc1945 Gives allowed http methods
Alternates rfc2068 List alternate representations
Bulletin-Date Lotus Date, e.g. 1997-03-24 15:57
Bulletin-Text Lotus Document description
Cache-Control rfc2068 Directives to cacheing mechanisms
Content-Base rfc2068 Specify base URL for entity
Content-Disposition rfc2183 Specify content handler (Microsoft)
Content-Encoding rfc1945 Gives compression scheme
Content-language rfc1945 Natural Language of document
Content-Length rfc1945 Size of body in bytes
Content-Location rfc2068 Resource location for entity
Content-MD5 rfc2068 MD5 digest of entity body
Content-Range rfc2068 Range of partial response
Content-Script-Type html40 Specifies default scripting language
Content-Style-Type html40 Specifies default style sheet language
Content-Type rfc1945 Media type
Content-type rfc1945
Content-Version rfc2068 Version tag of evolving entity
Date rfc1945 Date message originated (HTTP format)
Default-Style html40 Set preferred style sheet
Derived-From rfc2068 Version tag of previous version
ETag rfc2068 Entity tag for resource identification
Expires rfc1945 Expiry date of document (HTTP date format)
Ext-cache Netscape Alternate cache path
Instance-Delegate SHOE Pointer to Ontology Key
Instance-Key SHOE Ontology Key
Last-Modified rfc1945 Date resource was last changed
Link rfc1945 Relationship to other resources
Location rfc1945 URL of resource
MIME-Version rfc1945 May indicate MIME-compliance. Ignore.
Page-Enter MSIE 4 Sets page entry transistion
Page-Exit MSIE 4 Sets page exit transistion
PICS-Label PICS Document content labelling
Pragma rfc1945 no-cache prevents cacheing
Public rfc2068 List of supported methods by server
Range rfc2068 Specify subrange (bytes)
Refresh Netscape Delay till browser reloads (optional URL)
Server rfc1945 Gives information about server
Set-Cookie Netscape Sets cookie value
Site-Enter MSIE 4 Sets site entry transistion
Site-Exit MSIE 4 Sets site exit transistion
Title rfc1945 Title of entity (obsoleted in rfc2068)
Transfer-Encoding rfc2068 Specify transfer (cf. entity) encoding
URI rfc1945 URIs by which resource is located. (obsoleted in rfc2068)
Vary rfc2068 Specify that request was selected from alternates (e.g. different languages)
Via rfc2068 Generated by gateways
Warning rfc2068 Warning about cache problems, etc.
Window-target Netscape Specify target window of current document
Feb 192012
 

Flattr this!

Sveiki, kaip besiseka?

Mano bendradarbis, Ignas Kazlauskas, man pasiūlė pasirašyti savo elektroninius laiškus. Kad niekas, nepastebėtai, negalėtų pakeisti laiško turinio. Tokia mintis man visai patiko. Taigi jis man atsiuntė laiškutį, kaip pasirašyti savo laišką, kuriame buvo pateiktos instrukcijos. Tomis instrukcijomis, aš nusprendžiau pasidalinti su Jumis!

Instrukcijos

Rakto kurimas ir naudojimas susideda iš kelių etapų.

  1. Mes turime susikurti PGP raktą.
  2. Jei norime jį galime patalpinti į viešą raktų serverį (Jie tarpusavyje susisinchronizuoja)
  3. Susikonfigūruoti klientą
  4. Pasirašyti draugų raktus

Tam mes naudosime:

  • gnupg2
  • gnupg-agent
  • kmail arba evolution

Susidiekime programikes:


$ aptitude install gnupg2 gnupg-agent kmail

Dar šiektiek, apie PGP ir GnuPG:
PGP (Pretty Good Privacy) yra duomenų šifravimo ir dešifravimo technologija, kuri suteikia kriptografinį privatumą ir autentiškumą duomenų perdavimo metu. PGP yra dažnai naudojama pasirašyti, užšifruoti ir iššifruoti tekstus, elektroninius laiškus, failus, katalogus ir visą diską. Phil Zimmermann šią technologiją sukūrė 1991 m.
GPG – GNU Privacy Guard (GnuPG arba GPG), yra nemokama licencija (GPL) licenzijuota alternatyva PGP kriptografinei programinei įrangai. GnuPG yra suderinamas su RFC 4880, kuriuo šiuo metu yra vystoma OpenPGP specifikacija IETF‘o. Dabartinės versijos PGP (ir Veridis’ Filecrypt) yra suderinamos su GnuPG ir kitų OpenPGP-suderinamų sistemų

Rekto generavimas


gpg2 --gen-key

generuojamas raktas, Jūsų pasiteiraus:
  • Rakto tipas: Siūlome, RSA and RSA (1)
  • Rakto dydis: 4096
  • Rakto galiojimas: Aš pasirinkau, 0, rakto galiojimas, nesibaigia, patvirtinkime, kad rakto galiojimas nesibaigia.
  • Naudotojo Vardas: El. pašto, naudotojo tikrieji vardas ir pavardė
  • Rakto el. pašto adresas: Įrašome el. pašto adresą
  • Rakto komentaras: Komentaras nebūtinas
  • Rakto patvirtinimas: patikriname ar viską gera isuvedėme ir jei kas blogai ištaisome, ištaisė mygiame O ir Enter
  • Slaptažodžio įvedimas: pasirenkame ir įrašome slaptažodį, slaptažodis reikalingas, jei norite, kad niekas be Jūsų žinios prisėdęs prie Jūsų pašto programos, negalėtų išsiųsti el. pašto. Jei paliksite tusčią laukelį, pinentry programos pagalba turėsite įvesti pin kodą
  • Rakto generavimas: šio žingsnio metu rekomenduotina kuo labiau išnaudoti procesorių ir kietąjį diską, galima paleisti, kokio DVDRip kodavimą ar bentjau su -c "strings /dev/sda bei judinti pelytę bei paleisti katiną palakstyti per klavietūrą!

Peržiūrėkime ar pasidarė mūsų raktas: gpg2 --list-keys. Tokia komanda grąžina:


$ gpg2 --list-keys
/home/$LOGNAME/.gnupg/pubring.gpg
---------------------------------
pub 4096R/81582DBB 2012-02-18
uid Tikras Vardas
sub 4096R/E8FEC9DA 2012-02-18


Tuomet, karts nuo karto, mums reikės pasidalinti Mūsų viešu raktu, tai galime padaryti komanda:

gpg2 --armor --export 81582DBB > MusuViesasRaktas.pub.key

Jei pastebėjote, aš pariebinau vieną rakto vietą, tai yra rakto ID (IDentification), kiek suprantu.
  • –armor
  • nurodo, kad tai bus tekstas, o ne duomenų bazė

  • –export
  • išveda raktą į ekraną

  • > MusuViesasRaktas.pub.key
  • nurodo, kad visą komandos išvedimą į ekraną nukreipia į bylą vardu: MusuViesasRaktas.pub.key

Na ir jei norėsime, kad mūsų Certifikatas nebegaliotų, turėsime susigeneruoti revoke-key:


gpg2 --output Atsaukti-Certifikata.asc --gen-revoke D8B179FA

Vėliau, jei kažkas sukompromituos (nulauš) Jūsų raktą, galėsite savo raktą panaikinti. patalpinę šį raktą į vieną iš internetinių raktų serverių.

Rakto viešinimas

Visų pirma mums reikia susikonfigūruoti savo gnupg programą, tam mes paleiskime programą:


$ gpgconf
# Ji mum išveda kažką panašaus į:
gpg:GPG for OpenPGP:/usr/bin/gpg2
gpg-agent:GPG Agent:/usr/bin/gpg-agent
scdaemon:Smartcard Daemon:/usr/bin/scdaemon
gpgsm:GPG for S/MIME:/usr/bin/gpgsm
dirmngr:Directory Manager:/usr/bin/dirmngr


ir tuomet atidarome gpg.conf failą:

$ vi ~/gnupg/gpg.conf
# Šio failo apačioje prirašome:
keyserver hkp://pgp.mit.edu


Dabar beliko išsiųsti raktą į serverį:

gpg2 --send-keys D8B179FA

Kliento konfigūracija

Kadangi, mano pašto dėžutėje yra laiškai nuo 2004 :) ir Visi jie guli 1 kataloge, Thunderbird, su tokiu kiekiu laiškų, prastai susitvarko :) Prasianalizavus kodėl, paaiškėjo, Thunderbird, laiškų saugojimui naudoja mbox laiškų saugojimo formatą, o KMail – palaiko kelis formatus, tarp jų yra maildir… KMail programoje, pasirinkus maildir formatą galima vienu metu ir trinti laiškus iš katalogo ir gauti, tvarkyti laiškus… Ir labai paprastas ir lengvas migravimas visų mano laiškų į KMail… :) vat,

KMail nustatymas su PGP. Nueikite į Settings -> Configure KMail, ten pasirenkame Identities ir pasirinkę savo tapatybę spauskime Modify atsidariusiame lange, pasirinkite kertelę Cryptogaphy tuomet paspaudę Sign ir Encrypt (ar kažką panašaus) Change pasirenkame raktą, kurį norime naudoti ;) ir viskas, mes jau galėsime pasirašyti ir užšifruoti pranešimą… :) kai rašysime naują laišką, įrankių juostos gale turi būti Sign ir Encrypt mygtukai ;)
Beje, aš nuėjęs į Settings -> Configure KMail dar pasirinkau Security -> Composing uždėjau visas varneles

  • Automatically sign messages
  • When encrypting emails, always also encrypt to the certificate of my own identity
  • Always show encryption keys for approval

O jei norite Susikonfiguruoti Thunderbird, Jum reik atsisiusti atskirą įskiepį enigmail, kuris nežinia, kaip ar suėtins Jūsų programos darbą ar ne ir ar tiks Jūsų versijai :( :/

Tuo tarpu kitas pašto klientas Linux’e gali Palaikyti PGP taip pat paprastai kaip ir KMail, taigi toks klientas vadinas Evolution. Čia reikia nueiti į Edit -> Preferences čia pasirinkti Sąskaitą (account) ir paspausti Edit bei nueiti į Security kertelę ir ten įrašykime savo rakto ID ir galbūt uždėkite varnlę ant Always sign outgoing messages when using this account. Vat, atrodo tiek, nežinau, nenaudojau…

Patikimų draugų pridėjimas

Dabar išsiuntę, kažkam laišką, jį atidarę per programą, kuri palaiko PGP pagal nutylėjimą (didžiam džiaugsmui Thunderbird to nesugeba ir tenka naudoti papildinį) mes matysime, kad laiškas yra nepatvirtintas… Taigi mums reikia atsisiųsti draugo raktą ir jį patvirtinti, nes kai Jūs pasirašote laišką, parašas bus validus, tik žmogui kuris, Jus patvirtino.
Taigi, kaip Jums pasitvirtinti savo draugą, o jam Jus?
Jums tereikia surasti Jūsų draugo raktą


gpg2 --search-keys ruslanas@lpic.lt
gpg: searching for "ruslanas@lpic.lt" from hkp server pgp.mit.edu
(1) Ruslanas Gžibovskis (lpic.lt he he)
4096 bit RSA key D8B179FA, created: 2012-02-17
Keys 1-1 of 1 for "ruslanas@lpic.lt". Enter number(s), N)ext, or Q)uit > 1


. Pasirinkite Jūsų draugo raktą, mano atveju tai pirmas variantas taigi mygiam Vienetuką.
Raktas atsiųstas! Dabar jį reikia pasirašyti, tam mes turime patikrinti rakto žymes (Fingerprint), pasirašyti ir išsaugoti:

gpg2 --edit-key D8B179FA
Command> fpr
pub 4096R/D8B179FA 2012-02-17 Ruslanas Gžibovskis (lpic.lt he he)
Primary key fingerprint: 25D1 6402 C415 C145 2748 CDB1 761D E8AA D8B1 79FA
Command> sign
Command> save


Pabrauktoji dalis (25D1 6402 C415 C145 2748 CDB1 761D E8AA D8B1 79FA), tai ir būtų mano rakto unikalioji žymė (tie išraitymai, jei lygintume su tikrais raktais)… :)

Sėkmingo saugaus rašinėjimosi!
Dabar niekas lengvai neturėtų gebėti, pakeisti Jūsų siųsto laiško…

Feb 152012
 

Flattr this!

Norite bendrauti su savo draugais kurie naudojasi facebook, GTalk, LiveJournal per vieną vietą ir nebūtinai prisijungti per šiuos atskirus puslapius, o norite naudoti vieną programą?! Galite atsisiųsti Nemokamą programą PidGin>PidGin. Instaliacijos metu (jei tai windows), rekomenduoju pasirinkti GTK diegimą (šis punktas būna pažymėtas pagal nutylėjimą). Jeigu naudojate Linux paprastai diekite iš repų… Debian atveju:
aptitude install pidgin
(Jei naudojame windows) Įdiegus PidGin Uždėkime, varnelę, kad norime paleisti PidGin starto metu.
(Jei naudojate Linux) Raskite PidGin (Instant Messenger) prie internetinių programų rinkinio.


Konfiguracija

Pirmą kartą paleidus PidGin programą iššoka Sąskaitų tvarkymo langas, jo apačioje paspauskite mygtuką “Add…” arba “Pridėti…”.
Protokolo sąraše pasirenkame xmpp arba GTalk (jei norime konfigūruoti GTalk)
pidgin accounts add. Ir užpildome laukus:

  • UserName
  • – savo naudotojo vardą (pvz: ruslanas.gzibovskis, įrašius šį vardą po www.facebook.com Jūs pateksite į savo feisbuko puslapį, tai galite pasidaryti adresu: https://www.facebook.com/settings?ref=mb pasirinkę, berods, antrą punktą: Naudotojo vardas…)

  • Domain
  • – savo norimo serverio adresą (pvz: chat.facebook.com, jei tai feisbukas, livejournal.com jei tai ЖЖ :) )

  • Resursas
  • – Vieta iš kur dirbate/koks tai kompiuteris

  • Slaptažodis
  • – Jūsų slaptažodis

  • Ir (jeigu naudojamės vieni šiuo kompiuteriu) uždedame varnelę ant slaptažodio išsaugojimo (Save Password)

Pavyzdukas:pidgin accounts add 2 Na va, Viskas turėtų veikti… :)

Jeigu norite naudotis kitu xmpp serveriu tai dar siūlau pažiūrėti Advanced kertelę (tabą) jei serveris rekomenduoja galite nustatyti file sending proxy Jūsų pasirinktą serverį pidgin accounts advanced


Registracija

Jeigu norite Užsiregistruoti naudotoją atvirame xmpp serveryje Tai pidgin accounts add 2 apačioje pažymėkite varnelę Create This new account on server ir iššokusiame lange suveskite naudotojo vardą ir slaptažodį.

Oct 122011
 

Flattr this!

Sveiki,

norėdami įdiegti Solaris 10u9 mdb programėlę susidiekime SUNWmdb ir SUNWmdbr paketus. Visų pirma prijunkime CD.ISO, kas gali būti atlikta tik iš globalios zonos (Jei nenaudojate konteinerių, tai galėjote pabraukto teksto ir neskaityti :) ):
lofiadm -a /tmp/software.iso /dev/lofi/1
mount -F hsfs -o ro /dev/lofi/1 /mnt

Pereikim į mum reikiamą aplanką
cd /mnt/Solaris_10/Product
Susimeskim visą tai:
pkgadd -d . SUNWmdb
pkgadd -d . SUNWmdbr

Toliau beliko arba prisijungti (ir sustabdyti) procesą: mdb -p ĖPID arba atidaryti core/dump failą: mdb core_dump
Na va o daba mdb komandos:

Control Commands
$< or $<< Replace input with a macro or source a macro.
$>filename or
::log filename
Log session to a file. If no filename, use default.
| Pipe. Allows simple commands to be joined.
! Shell escape. Acts as a pipe to a shell command. (Not available in kmdb.)
// Comment. Following words on the same line are ignored.
$M Show built-in macros (Kernel debugger only).
$Pstring Set prompt to string.
$Q
::quit
Quit. (From kmdb, use -u option to avoid exiting to ok> prompt.)
$W Re-open target in writable mode.
$p Change target context.
$w Control output page width.
:A Attach to a process or core file.
:R Release attachment.
:k Kill and release targets.
$v Print non-zero variables.
>
::typeset
Assign a variable.
::dcmds Print available commands.
::nm Print symbol table. (-P specifies a private symbol table. Manipulated with ::nmaddand ::nmdelete
::help dcmd Provide usage notes on a dcmd.
::typeset Manipulate variable.
::walk Walk data structure.
::walkers List available walkers.

 

 

Input & Output Commands
$< 
$<<
Replace input with a macro or source a macro.
$>filename Log session to a file. If no filename, use default.
address/format-spec
/format-spec
Read the value in a memory addressformatted as format-spec. If no address is provided, use dot.
address/W value Write the value in the four bytes starting with address. If no address is provided, usedotvw or Z may also be used instead of Wto write 1, 2 or 8 bytes, respectively.
address=format-spec
=format-spec
Format immediate value of address or dot.
? Read/write primary object file.
@format-spec Read/write physical address as format-spec.
\format-spec Read/write physical address as format-spec.

The difference between / and = is subtle. For example, to find the address holding the value of the maxphys symbol in decimal, we would run:
maxphys=D
To find the value inside the above address, we would use / like:
maxphys/D

 

 

Format Specification
Note that the ::formats dcmd prints out a full list of supported formats.
D Display in signed decimal.
i Display as a disassembled instruction.
U Display in unsigned decimal.
X Display in signed hexidecimal.
0txyz Specifies xyz as a decimal value.

 

 

System Examination
cpu$<cpus Display cpu0.
cpun$<cpu Display cpu #n.
$<msgbuf Display message buffer, including all console messages up to panic.
<sp$<stacktrace Use the stack pointer address (sp) to display a detailed stack trace.
$r
::regs
Display general registers, including program counter and stack pointer.
::callout Print callout table.
::cpuinfo -v Information about activities of CPUs, including runqueue inhabitants.
::cpuregs
::cpuregs -c cpuid
Print CPU registers. kmdb only. Can specify a cpu.
::cpustack
::cpustack -ccpuid
Print CPU stack. kmdb only. Can specify a cpu.
::dnlc Print DNLC contents.
::ipcs Print SVR4 IPC information.
::kmalog Display kernel memory log and stack traces.
::kmastat Print current kernel memory allocations
::memstat Print current memory usage.
::nm Print symbol table. (-P specifies a private symbol table. Manipulated with ::nmaddand ::nmdelete
::ps List processes with associated threads and lwps
::ptree Print process tree.

 

 

Target Examination
$? Print status and registers.
$C Show call trace and arguments, saved frame pointer and saved program counter for each stack frame.
$X$Y$x$y and::fpregs Display floating point registers.
$c Display stack backtrace.
$e Print list of global symbols.
$f Print list of source files.
$l Print representative thread’s lwp ID.
$m Print address space mappings.
$r
::regs
Display general registers, including program counter and stack pointer.
as::as2proc Convert as pointer to a proc_t pointer.
::devbindings devinfo nodes bound to device-name ormajor-num.
::devinfo Detailed devinfo of node.
::devinfo2driver Driver name for this node.
::devnames Print devnames array.
::devt Display dev_t‘s major & minor numbers.
::did2thread Kernel thread for this ID.
::dumpaddress Dump memory from address.
::findfalse Find potentially falsely shared structures.
::findleaks Search for potential kernel memory leaks.
::findlocks Find locks held by specified thread.
threadp::findstack Find kernel thread stack for associated thread.
::inode Display summary of inode_t.
::kmsqid Display message queue structure (kmsqid).
::ksemid Display a semaphore structure (ksemid).
::kshmid Display a shared memory structure (kshmid).
::pgrep pattern Find proc_t pointers matching the pattern.
0tPID::pid2proc Convert decimal PID to a proc_t pointer.
procp::ps Process information matching the associated proc_t.
::status Print summary of target status.
sobj::walk blocked Walk threads blocked on a particular synchronization object (sobj).
procp::walk thread Walk threads of associated process.
sobj::wchaninfo -v Blocked on condition variables for a particular synchronization object (sobj).
address::whatis Attempts to identify address contents.
vnode::whereopen Processes with vnode open.

 

 

Tracing, Watchpoints and Breakpoints
(Breakpoints for kernel debugger only.)
$b Show all breakpoints.
$i Print list of ignored signals.
:a Set a watchpoint.
:b Set a breakpoint.
:c or ::cont Continue target execution.
:d Delete a breakpoint.
:e Step over next instruction.
:i Step over next instruction.
:k Kill and release targets.
:p Set execute access watchpoints.
:r Run new target process.
:s Step target to next instruction.
:t Stop on delivery of specified signals.
:u Step out of current function.
:w Set write access watchpoint.
:z Delete all breakpoints.

 

 

General Debugging
$G Toggle C++ demangling.
$V Toggle disassembly mode.
$g Toggle C++ demangling.
address::dis Disassemble text starting at address.

 

 

Comparison Operators
== Logical equality.
!= Logical inequality.
& Bitwise AND.
| Bitwise OR.
^ Bitwise XOR.
Oct 082011
 

Flattr this!

Sveiki, turiu darbo, taiatsiranda laiko parašyt skriptukus, nusprendžiau vienu jų pasidalinti.

Pasirašiau 88×31 uptime baneriuką: .

$uptime=shell_exec ("cat /proc/uptime | awk '{print $1}'");
function getTime ($unix_laikas) {
if ($unix_laikas<60) {
$returnas=intval($unix_laikas);
if ($returnas<10) {$returnas="0".$returnas;} return $returnas."!";
} elseif (60<=$unix_laikas && $unix_laikas<3600) {
$returnas=intval($unix_laikas/60);
if ($returnas<10) {$returnas="0".$returnas;} return $returnas;
} elseif (3600<=$unix_laikas && $unix_laikas < 86400) {
$returnas=intval($unix_laikas/3600);
if ($returnas<10) {$returnas="0".$returnas;} return $returnas;
} else {
return intval($unix_laikas/86400);
}
}

function uptime ($s0, $s1, $s2) {
$iwidth=88; $iheight=31;
// create a true colour, transparent image
// turn blending OFF and draw a background rectangle in our transparent colour
$image=imagecreatetruecolor($iwidth,$iheight);
imagealphablending($image,false);
$col=imagecolorallocatealpha($image,255,255,255,127);
imagefilledrectangle($image,0,0,$iwidth,$iheight,$col);
imagealphablending($image,true);
// Alpha blanding is back on.
// insert image manipulation stuff in here
$font=3;
$red=imagecolorallocatealpha($image,0,0,0,0);
imagestring($image, $font, 1, 0, $s0, $red);
imagestring($image, $font, 1, 9, $s1, $red);
imagestring($image, $font, 1, 20, $s2, $red);
// output the results...
header("Content-Type: image/png;");
imagealphablending($image,false);
imagesavealpha($image,true);
imagepng($image);
}
if ($uptime<60) { // Sekundes
$s1="up 0 days";
$s2="00:00:".getTime($uptime);
} elseif (60<=$uptime && $uptime<3600) { // Minutes
$tmp=getTime($uptime);
$s1="up 0 days";
$s2="00:".$tmp.":".getTime($uptime-($tmp*60));
} elseif (3600<=$uptime && $uptime<86400) { // Valandos
$tmp=getTime($uptime);
$s1="up 0 days";
$s2=$tmp.":";
$uptime-=$tmp*3600;
$tmp=getTime($uptime);
$s2.=$tmp.":".getTime($uptime-($tmp*60));
} else {
$tmp=getTime($uptime);
$s1="up ".$tmp ." days";
$uptime-=$tmp*86400;
$tmp=getTime($uptime);
$s2=$tmp.":";
$uptime-=$tmp*3600;
$tmp=getTime($uptime);
$s2.=$tmp.":".getTime($uptime-($tmp*60));
}

$s0=shell_exec("hostname -d");
$s0=substr($s0, 0, strlen($s0)-1);
uptime ($s0, $s1, $s2);
?>

Jeigu turite idėjų, kaip visą tai atnaujinti brūkūtelėkite.