($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
?>
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ă!
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 SysInternals ' PS Tools .
NT+ (1 )
PSSHUTDOWN \\myw2ksrv -O -F -T 0
Logoff
Immediately logoff console user on \\myw2ksrv
Uses PSSHUTDOWN.EXE from SysInternals ' PS 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 R eboot, L ogoff, P oweroff or S hutdown.
force
can be either F orce or N oforce.
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
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)
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!
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
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.