DUzun's Web
Programare, proiecte personale, divertisment

DUzun it's ME
 
  
News

<< [4] [3] [2] [1] >>  

($i = $j = 0;) sau ($i = 0; $j = 0;) ? - PHP5
 

Prin ce se deosebeşte în PHP5 expresia

        $i = 0;

        $j = 0;

de expresia

        $i = $j = 0; ?

Ca sens prin nimic, însă ca consum de memorie şi funcţionare internă a PHP sunt două expresii total diferite!

De ce?

În primul caz se crează două variabile de tip integer care consumă împreună 8 octeţi (pe un SO de 32 biţi), iar în al doilea caz se alocă spaţiu pentru un singur număr integer - 4 octeţi. Memoria pentru al doilea integer se alocă atunci când cel puţin una din variabile obţine altă valoare.

Dacă valoarea se obţine prin atribuire din altă variabilă ($j = $k;), atunci nu se alocă memorie, pentru că se foloseşte memoria alocată deja pentru variabila cu noua valoare.

 

Concluzie:

În rezultatul execuţiei codului

      for($i=0;$i<100000;$i++) $a[$i] = 0;

tabloul $a consuma mai multă memorie decât în cazul:

      $t = 0;

      for($i=0;$i<100000;$i++) $a[$i] = $t;

Deci deosebirea e esenţială!
 

 Încearcă singur:

<?php

    $mu1 = memory_get_usage();
    $a = array();      
    for($i=0;$i<100000;$i++) $a[$i] = 0;
    $mu2 = memory_get_usage();
    $a = array();
    $t = 0;
    for($i=0;$i<100000;$i++) $a[$i] = $t;
    $mu3 = memory_get_usage();

    echo 'mu1: '. ($mu2 - $mu1)/1024 . '<br />'; // pe SO de 32biti, 8Mo
    echo 'mu2: '. ($mu3 - $mu1)/1024 . '<br />'; // pe SO de 32biti, 5Mo
    echo 'diferenta: ' . ($mu2 - $mu3)/1024;     // pe SO de 32biti, diferenta e 3Mo
?>

  </> 29.01.2011
strpos vs stripos - PHP
 

Funcţiile strpos şi stripos (PHP şi nu numai) sunt foarte utile pentru căutarea unui subşir de caractere într-un şir. Nu vreau sa descriu aici cum se folosesc, descrierea detaliată şi exemple puteţi găsi pe site-ul PHP.net. Însă aici vreau să fac o mică observaţie asupra felului cum funcţionează acestea două şi ce probleme pot apărea în special la utilizarea funcţiei stripos.

Funcţia strpos este foarte rapidă şi recomandată pentru căutarea unui subşir într-un şir.

Funcţia stripos este asemănătoare cu strpos, însă ignoră registrul literelor (majuscule/minuscule). Cât despre performanţă, nu e cea mai bună alegere... De ce?

Să vedem cum lucrează:

    $pos = stripos($str, $substr);

este echivalent cu:

    $str    = strtoupper($str);
    $substr = strtoupper($substr);
    $pos    = strpos($str, $substr);

Parcă nu se petrece nimic deosebit, însă în cazul când $str este destul de mare se pierde mult timp la convertirea în majuscule. Şi dacă stripos este apelată repetat pentru acelaşi şir $str, de fiecare dată se converteşte registrul şirului, deci se face acelaşi lucrul de mai multe ori şi în zadar.

De exemplu, să considerăm următorul cod:

<?php

    $t1 = microtime(1);
    $str = str_repeat('abcdefghijklmnopqrstuvwxyz', 1<<16); // se genereaza un şir de 1.7Mo
    echo strlen($str) . '<BR>';
    $sub = substr($str, rand(0, strlen($str)-10), 10); // un subşir aleator al str de lungimea 10
    for($i=0; $i<1000; $i++) stripos($str, $sub); // apoi sa incercati cu strpos
    echo $sub . '<BR>';
    $t2 = microtime(1);
    echo 'Executat in '. ($t2 - $t1) . ' sec.';

?>

Pe calculatorul meu personal acest cod s-a executat în aproximativ un minut. Însă cu strpos - 0.002 secunde, deosebire radicală!

  </> 28.01.2011
Shutdown, Reboot şi Logoff de la linia de comanda
 
O colecţie de comenzi pentru deconectarea PC pentru majoritatea versiunilor de DOS şi Windows şi limbaje de scriptare.

OS (1) Command line Effect Remarks
XP Pro NLTEST /server:localhost /shutdown:"Shutting down, just for fun" 60 Shutdown in 1 minute, displaying the "reason" in a popup Use a remote server name instead of localhost to shutdown that remote server.
XP Pro NLTEST /server:localhost /shutdown_abort Abort the shutdown in progress Use a remote server name instead of localhost to abort a shutdown in progress on that remote server.
XP Pro WMIC OS Where Primary=TRUE Call Shutdown Immediate shutdown Use WMIC's /NODE switch to shutdown a remote computer.
XP Pro WMIC OS Where Primary=TRUE Call Reboot Immediate reboot Use WMIC's /NODE switch to reboot a remote computer.
XP SHUTDOWN -r -t 10 Delayed reboot Reboot after a 10 seconds delay.
Can be stopped during those 10 seconds using SHUTDOWN -a
XP SHUTDOWN -s -t 01 Delayed shutdown Shutdown after a 1 second delay, NO poweroff.
XP SHUTDOWN -i Interactive use with GUI Can be used to shutdown multiple computers.
TS LOGOFF 16 /SERVER:termserv1 Logoff Logoff session 16 on Terminal Server TERMSERV1.
Use the QUERY USER command to find out which session ID belongs to whom.
Find more Terminal Server commands.
TS TSSHUTDN 45 /SERVER:termserv1 /POWERDOWN /DELAY:20/V Delayed poweroff Notify all users on Terminal Server TERMSERV1, logoff all Terminal Server sessions after 45 seconds, wait another 20 seconds, and then shut down Terminal Server TERMSERV1 and power off.
See my Terminal Server Commands page for the exact syntax.
W2K (5) DEVCON Reboot Reboot Requires Microsoft's DEVCON utility
W2K RUNDLL32 PowrProf.dll, SetSuspendState Activate suspend state  
W2K RUNDLL32 USER32.DLL,LockWorkStation Lock Credits: Steven Clements (posted on alt.msdos.batch.nt)
W2K Learn how to shutdown a remote Windows 2000 computer Shutdown GUI, no command line
NT+ (1) PSSHUTDOWN \\mynt4srv -K -F -T 20 Delayed poweroff Poweroff \\mynt4srv after a 20 seconds delay.
Can be aborted using PSSHUTDOWN \\mynt4srv -A
Uses PSSHUTDOWN.EXE from SysInternalsPS Tools.
NT+ (1) PSSHUTDOWN \\myw2ksrv -O -F -T 0 Logoff Immediately logoff console user on \\myw2ksrv
Uses PSSHUTDOWN.EXE from SysInternalsPS Tools
NT4+RK
W2K+RK
SHUTDOWN /L /R /T:0 /Y Reboot Immediate shutdown & reboot
NT4+RK
W2K+RK
SHUTDOWN /L /T:10 /Y /C Delayed shutdown Shutdown in 10 seconds, close without saving.
Can be stopped during those 10 seconds using SHUTDOWN /A
NT4 See Reboot NT on my Solutions found in alt.msdos.batch page Reboot Reboot immediately
NT4 RUNDLL32 USER32.DLL,ExitWindowsEx
RUNDLL32 USER32.DLL,ExitWindowsEx
Logoff Most systems require the command to be called twice before logging off
Win98/ME RUNDLL32 SHELL32.DLL,SHExitWindowsEx n Any n can be any combination (sum) of the following numbers: (4):
0	Logoff
1	Shutdown
2	Reboot
4	Force
8	Poweroff (if supported by the hardware)
Win98/ME RUNONCE.EXE -q Reboot (4)  
Win98 RUNDLL32 KRNL386.EXE,exitkernel Poweroff Poweroff for ATX boards only, otherwise normal shutdown (3)
Win9* RUNDLL USER.EXE,ExitWindows Shutdown (2)  
Win9* RUNDLL USER.EXE,ExitWindowsExec See Remarks Win95: various results, usualy fast shutdown (and lock PC), sometimes restart Windows, sometimes reboot.
Win98: Restart Windows, sometimes reboot.
Win9* RUNDLL SHELL.DLL,RestartDialog Restart dialog "System Settings Changed, Do you want to restart your computer now?" dialog
Win31* ECHO G=FFFF:0000| DEBUG Task Manager popup And sometimes reboot
DOS ECHO G=FFFF:0000| DEBUG Reboot Warm boot, sometimes cold boot.
May not work with "exotic" memory managers, like Quarterdeck's QEMM or DesqView; in that case, use RESET.COM instead.
PowerShell Stop-Process -processname * Blue Screen Kills all running processes immediately without confirmation, resulting in a "Blue Screen Of Death".
KiXtart $RC = SHUTDOWN( "\\server", "Shutting down...", 10, 1, 0 ) Delayed shutdown Shutdown \\server in 10 seconds, with message, close without saving, no reboot
KiXtart $RC = SHUTDOWN( "\\server", "", 0, 1, 1 ) Reboot Immediate shutdown & reboot \\server, without a message
KiXtart $RC = LOGOFF( 1 ) Logoff Forcing applications to close.
Use 0 instead of 1 if you don't want to force applications to close
KiXtart $RC = SetSystemState( 0 ) Lock Requires KiXtart 4.51 or later
KiXtart $RC = SetSystemState( 1 ) Standby Requires KiXtart 4.51 or later
KiXtart $RC = SetSystemState( 2 ) Hibernate Requires KiXtart 4.51 or later.
KiXtart $RC = SetSystemState( 3, 0 ) Poweroff Power off with prompt to close applications. Use SetSystemState( 3, 1 ) to close applications without prompting.
Requires KiXtart 4.51 or later
Perl InitiateSystemShutdown( $sComputer, $sMessage, $uTimeoutSecs, $bForce, $bReboot )   General syntax (ActivePerl for Windows only)
Perl InitiateSystemShutdown( "", "", 0, 1, 1 ) Reboot Immediate reboot without message, force applications to close without saving data
Perl InitiateSystemShutdown( "", "Going down...", 10, 0, 1 ) Delayed reboot Reboot after 10 seconds, with message and without forcing applications to close
Perl InitiateSystemShutdown( "10.0.1.16", "Sorry", 5, 1, 0 ) Delayed shutdown Shutdown of remote computer after 5 seconds, with message and forced closing of applications
Regina Rexx RC = W32SysShutdown( how [,force] )   General syntax (Regina Rexx for Windows with W32Funcs only).
how can be either Reboot, Logoff, Poweroff or Shutdown.
force can be either Force or Noforce.
Regina Rexx RC = W32SysShutdown( "P", "F" ) Poweroff Immediate shutdown and poweroff, forced closing of application
Regina Rexx RC = W32SysShutdown( "L", "N" ) Logoff Logoff, prompt for saving unsaved data
WSH [1] Set OpSysSet = GetObject("winmgmts:{(Shutdown)}//./root/cimv2").ExecQuery("select * from Win32_OperatingSystem where Primary=true")
[2]
[3]
 for each OpSys in OpSysSet
[4]     OpSys.Reboot()
[5] next
Reboot Requires WMI.
Remove [line numbers].
(Found in a forum posting by Alex K. Angelopoulos onwww.developersdex.com)
WSH Replace line 4 in the script above with this one:
[4]     OpSys.Shutdown()
to shut down the PC instead of rebooting it.
Shutdown But no poweroff.
 
See my WSH page for examples on how to reboot or shut down remote computers too.
WSH [1] Const EWX_LOGOFF   = 0
[2]
[3]
 Set wmi = GetObject("winmgmts:{(Shutdown)}")
[4] Set objSet = wmi.InstancesOf("Win32_OperatingSystem")
[5]
[6]
 For Each obj in objSet
[7]     Set os = obj
[8]     Exit For
[9] Next
[10]
[11]
 os.Win32Shutdown EWX_LOGOFF
Logoff Requires WMI.
Remove [line numbers].
(Posted by Michael Harris on microsoft.public.scripting.vbscript)
 
My Logoff.vbs combines this code with that of the reboot and shutdown commands, and allows logoff of remote computers as well.
WSH Set objShell = CreateObject( "Shell.Application" )
Shell.ShutdownWindows
Open the Shutdown dialog Based on the Advanced Stuff listing on groups.msn.com/windowsscript/.
OS/2 START /PM SHUTDOWN && EXIT Shutdown Will still stop and ask for confirmation if a non-PM application is active
OS/2 SETBOOT /B Reboot Unconditional shutdown & reboot from default Boot Manager entry.
(Mailed by Rick Curry)
OS/2 SETBOOT /IBD:C: Reboot Unconditional shutdown & reboot from C: drive
OS/2 SETBOOT /IBA:nonsense Shutdown Unconditional shutdown & failing reboot.
Needs Boot Manager installed.
Will reboot, no questions asked, and then stop if nonsense is an invalid Boot Manager menu entry (which, in this case, is exactly what we want).
OS/2 LOGOFF Logoff Both LAN Server client and Peer

 

Notes: (1) DOS MS-DOS or PC-DOS
  Win31* Windows 3.1, 3.11 or 3.11 for Workgroups
  Win9* Windows 95 or 98
  Win98 Windows 98
  Win98/ME Windows 98 or Windows Millennium Edition (ME)
  NT+ Windows NT 4, 2000 or XP
  NT4 Windows NT 4 (not Windows 2000 or XP)
  NT4+RK Windows NT 4 with Resource Kit
  W2K Windows 2000
  W2K+RK Windows 2000 with Resource Kit
  XP Windows XP
  XP Pro Windows XP Professional and Windows Server 2003
  TS Windows NT 4 Terminal Server Edition or Windows 2000 (Advanced) Server with Terminal Server installed
  PowerShell Windows XP, Server 2003 or Vista with PowerShell installed
  KiXtart Windows (any) with KiXtart
  Perl Windows (any) with ActivePerl
  Regina Rexx Windows (any) with Regina Rexx and W32Funcs
  WSH Windows (32 bits) with Windows Script Host
  OS/2 OS/2 Warp 3 and 4, LAN Server and Warp Server
  (2) Thanks for Bill James and Tom Lavedas, for the information on RUNDLL.
Find more RUNDLL examples I collected on my RUNDLL page.
  (3) Thanks for Sasha Predii for posting this information.
Find more RUNDLL examples I collected on my RUNDLL page.
  (4) See article Q234216 in the Microsoft Knowledge base for more information.
Thanks for Alec Soroudi for pointing out this information.
Windows NT also has a RUNONCE.EXE, but I am not sure what its purpose is -- RUNONCE.EXE -q does not shut down NT.
  (5) Requires Microsoft's DEVCON utility
 
  </> 19.11.2010
PHP preg special chars
 
\ ^ . $ | ( ) [ ]
* + ? { } ,
 
Special Character Definitions
\ Quote the next metacharacter
^ Match the beginning of the line
. Match any character (except newline)
$ Match the end of the line (or before newline at the end)
| Alternation
() Grouping
[] Character class
* Match 0 or more times
+ Match 1 or more times
? Match 1 or 0 times
{n} Match exactly n times
{n,} Match at least n times
{n,m} Match at least n but not more than m times
 
More Special Character Stuff
\t tab (HT, TAB)
\n newline (LF, NL)
\r return (CR)
\f form feed (FF)
\a alarm (bell) (BEL)
\e escape (think troff) (ESC)
\033 octal char (think of a PDP-11)
\x1B hex char
\c[ control char
\l lowercase next char (think vi)
\u uppercase next char (think vi)
\L lowercase till \E (think vi)
\U uppercase till \E (think vi)
\E end case modification (think vi)
\Q quote (disable) pattern metacharacters till \E
 
Even More Special Characters
\w Match a "word" character (alphanumeric plus "_")
\W Match a non-word character
\s Match a whitespace character
\S Match a non-whitespace character
\d Match a digit character
\D Match a non-digit character
\b Match a word boundary
\B Match a non-(word boundary)
\A Match only at beginning of string
\Z Match only at end of string, or before newline at the end
\z Match only at end of string
\G Match only where previous m//g left off (works only with /g)
 
  </> 02.09.2010
Imagini zburătoare în orice site!
 

Pentru a face toate imaginile dintr-o pagină web să danseze, copie codul de mai jos în bara de adresă a paginii respective (înlocuind adresa paginii) și apoi apasă <Enter> sau înearcă acum acest "hack" pe această pagină!

Sper să-ți placă ;-)

  </> 18.08.2010
HTML5 contentEditable face minuni!
  

HTML5 face revoluție pe web!

Recent am descoperit noi posibilități pe care le oferă HTML5, legate de editarea conținutului paginilor web. Nu vreau să descriu prea mult ce am descoperit. Vreau să vă convingeți singuri de puterea acestor noi tehnologii! Doar încercați să editați acest articol (să tapați ceva text sau să adăugați text prin copy&paste...).

 De asemenea vă recomand să vedeți și acest articol: „Editează orice pagină pe WEB!

 

Ca să aveți cu ce vă juca, ceva text aici: 

 

Lorem Ipsum este pur şi simplu o machetă pentru text a industriei tipografice. Lorem Ipsum a fost macheta standard a industriei încă din secolul al XVI-lea, când un tipograf anonim a luat o planşetă de litere şi le-a amestecat pentru a crea o carte demonstrativă pentru literele respective. Nu doar că a supravieţuit timp de cinci secole, dar şi a facut saltul în tipografia electronică practic neschimbată. A fost popularizată în anii '60 odată cu ieşirea colilor Letraset care conţineau pasaje Lorem Ipsum, iar mai recent, prin programele de publicare pentru calculator, ca Aldus PageMaker care includeau versiuni de Lorem Ipsum.


Iată ce am făcut din google.md :-)

Simțiți-vă liberi să trageți imaginea de mai sus oriunde în cadrul acestui articol!

  </> 16.08.2010
JavaScript "v1 ? v2 : v3" vs "v1 && v2 || v3"
 

JavaScript - un limbaj script foarte vestit pentru flexibilitatea și „puterea” sa de scriptare!

Deși inspirat din limbajul Java (care la rândul său este inspirat din C/C++), JavaScript (sau JS) are un mare plus de flexibilitate sintactică, dat fiind faptul că este un limbaj de tip script.

Iată un bun exemplu care îl face pe JS deosebit față de alte limbaje (chiar de timp script): operatorii logici „&&” și „||".

În limbajele tradiționale (C/C++, PHP, ș.a.) expresiile de genul „v1 && v2” sau „v1 || v2” se evaluează ca booleene (true sau false, 1 sau 0). E bine cunoscut faptul (cel puțin printre programatori) că orice valoare nenulă se evaluează ca true și orice valoare nulă (0, false, null, undefined, '') se evaluează ca false. Atunci de ce să forțăm expresiile de mai sus să se evalueze strict la aceste două valori booleene (true sau false)?! De ce să nu se păstreze valoarea inițială a operanzilor, care n-ar fi ea (null, undefined, '', <not nul>, ...).

Cred că ați prins firul, nu? JS așa si face, nu forțează pe nimeni și nimic, adică expresia „v1 && v2” ia valoarea „v1”, dacă v1 este o valoare nenulă și ia valoarea „v2”, dacă v1 e nul.

Exemplu:

var v = true && 'avioanele nu zboara';
alert(v); // v == 'avioanele nu zboara'
var u = true || 'avioanele zboara';
alert(u); // u == true
v = 123 && ''; // v == '', nu false, ci ''
u = 123 || ''; // u == 123, dar nu true
...

Folosind aceste proprietăți ale operatorilor logici specifice JS, putem emita operatorul ternar „?:” în felul următor:

Expresia „v1 ? v2 : v3” poate fi scrisă „v1 && v2 || v3”.

Dar atenție! Această emitație nu este identică cu operatorul ternar autentic. Iată cum se citesc expresiile de mai sus în limbajul omenesc:

„v1 ? v2 : v3” - dacă v1, atunci v2, altfel v3;

„v1 && v2 || v3” - dacă v1 și v2, atunci v2, altfel v3.

Ați prins firul? Sper că da!

După o mică analiză a ideilor și exemplelor expuse mai sus, conchidem că putem construi noi „operatori” logici în JS, care să răspundă necesităților noastre în fiecare situație concretă. Astfel putem scrie mai puțin cod și realiza mai multă funcționalitate - o trăsătură specifică JS și rar întâlnită în alte limbaje de programare.

Autor: Dumitru Uzun

  </> 12.08.2010

<< [4] [3] [2] [1] >>  


Aici acumulez programe şi algoritmi interesanti alcătuiţi de mine (cu mici excepţii) pe parcursul studierii unor limbaje de programare.

Cea mai mare parte din ele sunt realizate în Pascal. 

Nu am scopul creării unui curs specializat sau a descrierii detaliate a anumitor limbaje, ci doar prezint informaţii utile, plus ceva exemple interesante...

 

Răsfoitorul de fișiere (File Browser):

Codul sursă al programelor este organizat în mape şi fişiere.

Paginile care conțin cod sursă de programe de regulă au un răsfoitor de fișiere în partea stangă a paginii reprezentat de un bloc cu titlul „File Browser”.

Pentru a vizualiza un program sau conţinutul unei mape, faceţi click pe numele fişierului / mapei. Dacă fişierul nu este textual, el se va descărca automat, iar dacă este textual, conținutul lui se va afișa într-un bloc pe centrul paginii.

Pentru a descărca un fişier, faceţi click pe dimensiunea (size) lui.

arr_d Limba / Language


 


Flag Counter

arr_r Login