Денис Силаков Virtuozzo – резервные копии и мигра-ция # prlctl snapshot vm1 -d "My first snapshot" # prlctl backup vm1 -s :@ # prlctl restore vm1 -s :@ # prlctl move vm1 /new/location # prlctl migrate old_server/vm1 new_server/vm2 # pmigrate h 10.0.0.1 v localhost/vm1 # pmigrate v old_server/vm1 v new_server/vm2 ----------------------------------------------------- Игорь Орещенков Старые сценарии на новый лад Листинг 1. Полный текст CMD-сценария резервного копирования 1. @ECHO OFF 2. REM ============================================= 3. REM Сценарий ежедневного резервного копирования. 4. REM Использование: 5. REM flbackup.cmd Папка1 Папка2 ИмяАрхива Глубина 6. REM где Папка1 - путь к исходной папке, 7. REM Папка2 - путь к папке резервной копии, 8. REM ИмяАрхива - полное имя Zip- или 7Z-архива 9. REM (без суффикса "ДДММ"), 10. REM Глубина - количество копий архивов. 11. REM Например: 12. REM flbackup.cmd C:\SRC D:\TGT E:\ARCH\src.7Z 5 13. REM ============================================= 14. SET ARCHCMD="C:\Program Files\7-zip\7z.exe" 15. SET ARCHEXT=%~X3 16. SET ARCHKEY=a -t%ARCHEXT:~1% 17. SET DD=%DATE:~0,2% 18. SET MM=%DATE:~3,2% 19. SET YYYY=%DATE:~6,4% 20. SET ARCHDDMM=%~DPN3%DD%%MM%%~X3 21. SET ARCHMASK=%~DPN3*%ARCHEXT% 22. SET CAPTION=Резервное копирование: %1 23. SET XCOPYLOG=%TMP%\xcp%RANDOM%.tmp 24. REM ---------------------------------- 25. REM Выполнение резервного копирования. 26. REM ---------------------------------- 27. COLOR 07 28. TITLE %CAPTION% 29. ECHO [%DATE% %TIME%] %CAPTION% -^> %2 30. :LOOP1 31. XCOPY %1 %2 /C /D /I /Y /EXCLUDE:nocopy.txt > %XCOPYLOG% 32. IF ERRORLEVEL 1 GOTO ERRCOPY 33. REM -------------------------------------------- 34. REM Если команда XCOPY выполнила копирование 35. REM каких-то файлов (файлы были модифицированы), 36. REM то повторение резервного копирования. 37. REM -------------------------------------------- 38. FIND /C "Скопировано файлов: 0." %XCOPYLOG% 39. IF ERRORLEVEL 1 GOTO LOOP1 40. REM ---------------------------------------- 41. REM Резервное копирование завершено успешно. 42. REM Выполнение архивирования. 43. REM ---------------------------------------- 44. COLOR 06 45. ECHO [%DATE% %TIME%] Архивирование: %2 -^> %ARCHDDMM% 46. IF EXIST %ARCHDDMM% DEL %ARCHDDMM% 47. %ARCHCMD% %ARCHKEY% %ARCHDDMM% %2 48. IF ERRORLEVEL 1 GOTO ERRARCH 49. REM -------------------------- 50. REM Удаление устаревших копий. 51. REM -------------------------- 52. ECHO [%DATE% %TIME%] Ротация: %ARCHMASK% 53. SETLOCAL ENABLEDELAYEDEXPANSION 54. SET I=0 55. FOR /F %%F IN ('DIR /B /O:-D %ARCHMASK%') DO (SET /A I=1+!I! & IF !I! GTR %4 DEL %~DP3%%F) 56. ENDLOCAL 57. GOTO SUCCESS 58. REM ------------------------------------- 59. REM Обработка ошибок копирования (XCOPY). 60. REM ------------------------------------- 61. :ERRCOPY 62. ECHO Ошибка копирования резервного копирования (XCOPY). 63. GOTO FAILURE 64. REM ------------------------------- 65. REM Обработка ошибок архивирования. 66. REM ------------------------------- 67. :ERRARCH 68. ECHO Ошибка архивирования резервной копии. 69. GOTO FAILURE 70. REM ------------------------------------------- 71. REM Сообщение об итоговом завершении с ошибкой. 72. REM ------------------------------------------- 73. :FAILURE 74. COLOR 04 75. ECHO [%DATE% %TIME%] Завершено с ошибкой. 76. GOTO DONE 77. REM ------------------------------------------ 78. REM Сообщение об итоговом успешном завершении. 79. REM ------------------------------------------ 80. :SUCCESS 81. COLOR 02 82. ECHO [%DATE% %TIME%] Успешное завершение. 83. REM --------------------------- 84. REM Завершение работы сценария. 85. REM --------------------------- 86. :DONE 87. IF EXIST %XCOPYLOG% DEL %XCOPYLOG% 88. PAUSE 89. EXIT TITLE %CAPTION% SET XCOPYLOG=%TMP%\xcp%RANDOM%.tmp %VAR:~s,n% FOR [...] %%параметр [...] IN (...) DO команда Листинг 2. Демонстрация раннего и позднего связывания в CMD-сценариях @ECHO OFF REM SETLOCAL ENABLEDELAYEDEXPANSION SET A=B00 ECHO BEFORE: Aglob=%A%, Aloc=!A! FOR %%I IN (01,02) DO SET A=B%%I&& ECHO BODY: Aglob=%A%, Aloc=!A! ECHO AFTER: Aglob=%A%, Aloc=!A! Результат выполнения сценария: BEFORE: A=B00 BODY: Aglob=B00, Aloc=!A! BODY: Aglob=B00, Aloc=!A! AFTER: A=B02 BEFORE: Aglob=B00, Aloc=B00 BODY: Aglob=B00, Aloc=B01 BODY: Aglob=B00, Aloc=B02 AFTER: Aglob=B02, Aloc=B02 C:\>DIR abc.txt C:\>ECHO %ERRORLEVEL% IF ERRORLEVEL число команда COLOR bf ---------------------------------------------------------------------- Дмитрий Голосов Автоматизация заявок на обслуживание в ManageEngine ServiceDesk Plus Листинг 1. Скрипт установления зависимостей между полями формы var dependencyObj= { "FIELDS" :["Отдел","Запрашиваемая информационная система"], "VALUES":{ "Бухгалтерия":["1С Бухгалтерия"], "Отдел кадров":["1С ЗУП"], "Отдел продаж":["CRM", "1С Бухгалтерия"], "Хозяйственный отдел":[""] } }; $CS.setFieldDependency(dependencyObj); Листинг 2. Скрипт присвоения значений по умолчанию для поля var dep=$CS.getText("ServiceReq_Comm_UDF_CHAR3"); if (dep=="Бухгалтерия") $CS.setText("ServiceReq_Comm_UDF_CHAR5","1С Бухгалтерия"); if (dep=="Отдел кадров") $CS.setText("ServiceReq_Comm_UDF_CHAR5","1С ЗУП"); if (dep=="Отдел продаж") $CS.setText("ServiceReq_Comm_UDF_CHAR5","CRM"); ---------------------------------------------- Олег Левицкий Мини-АТС Yeastar N824 Обзор возможностей, настройка и использование [ASTER-N824] type=friend context=in_office username = ASTER-N824 secret=pincode host=dynamic disallow = all allow = alaw,ulaw,gsm less /etc/asterisk/extensions.conf less /etc/asterisk/pjsip.conf cat /etc/asterisk/pjsip.conf [trunk-ASTER_N824-endpoint](trunk-endpoint-basic) context=from-trunk vi /persistent/custom-cfg/pjsip_custom.conf [trunk-ASTER_N824-endpoint](trunk-endpoint-basic) context= Local_Default_CallingRules [in_office] … exten => _[65]XX,1,Dial(SIP/ASTER-N824/${EXTEN}) [in_office] … exten => _3XX,1,Dial(SIP/${EXTEN}) asterisk -rv vi /persistent/custom-cfg/pjsip_custom.conf [trunk-ASTER_N824-endpoint](trunk-endpoint-basic) context=from-office-asterisk vi /persistent/custom-cfg/extensions_custom.conf [from-office-asterisk] include = Local_Default_CallingRules include = CallingRule_default [in_office] … exten => _8.,1,Dial(SIP/ASTER-N824/${EXTEN}) ------------------------------------------------- Валерий Михеичев, Взаимоблокировки deadlock-сессий в Oracle Select value from v$parameter where name='user_dump_dest'; Create table t(a1 number,a2 number); Insert into t values(1,1); Insert into t values(2,2); Update t set a2=10 where a1=1; Update t set a2=20 where a1=2; Select * from v$lock where sid in (541, 716) and type=’TX’; Select sid,serial# from v$session where audsid in (select userenv('sessionid') from dual); Update t set a2=200 where a1=2; Update t set a2=100 where a1=1; Select s.sid,s.serial#,s.event,s.blocking_session who_sid, p.tracefile,s.server from v$process p,v$session s where s.paddr=p.addr and sid in(716,541); Select p.value from v$parameter p where p.name like '%user_dump_dest%'; Create or replace directory trace_dir as '/u01/orasr/trace'; Declare pfile varchar2(100):='orasr_ora_53018876.trc' ; --имя трассировочного файла pDir varchar2(10000):='TRACE_DIR'; --путь к трассировочному файлу vf utl_file.file_type; vBuf varchar2 (32767); Begin --1.Open File begin vf:= utl_file.fopen(pdir,pfile,open_mode=>'r',max_linesize=>32767); exception when utl_file.invalid_path then raise_application_error(-20000, ' : invalid path'); end; --2. Цикл чтения строк из трассировочного файла For I in 1..1000000 loop begin utl_file.get_line(vf,vbuf,32767 ); exception when no_data_found then exit; when utl_file.read_error then exit; end; dbms_output.put_line(substr(vbuf,1,100)); end loop; --3.Close file begin if utl_file.is_open(vf) then utl_file.fclose(vf); end if ; end;end; Select * from dba_objects where object_id= objn; Select * from dba_objects o, dba_extents f where object_id=1695316 and f.segment_name=o.object_name and f.file_id=312 and 1535341 between f.block_id and f.block_id + f.blocks – 1; test_avr: Create table test_avr (n number); Insert into test_avr values (100);commit; Create or replace procedure p_test_avr as pragma autonomous_transaction; begin update test_avr set n=300 ;commit; end; Begin update test_avr set n=200; p_test_avr; End; --------------------------------------------------- Тимур Шамиладзе Создание внешней печатной формы 1С 8.3 с нуля Листинг 1. Код функции «СведенияОВнешнейОбработке» Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); ПараметрыРегистрации.Вставить("Назначение", ПолучитьНазначениеОбработки()); ПараметрыРегистрации.Вставить("Наименование", "Акт (внешняя печатная форма)"); ПараметрыРегистрации.Вставить("Версия", "1.0"); ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина); ПараметрыРегистрации.Вставить("Информация", "Обработка формирования внешней печатной формы: Акт"); ТаблицаКоманд = ПолучитьТаблицуКоманд(); ДобавитьКоманду(ТаблицаКоманд,"Акт (внешняя печатная форма)","АктВнешний", "ВызовСерверногоМетода",Истина,"ПечатьMXL"); ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); Возврат ПараметрыРегистрации; КонецФункции Функция ПолучитьНазначениеОбработки() Назначение = Новый Массив; Назначение.Добавить("Документ.РеализацияТоваровУслуг"); Возврат Назначение; КонецФункции Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "") НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = Представление; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.Использование = Использование; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение; НоваяКоманда.Модификатор = Модификатор; КонецПроцедуры Макет = ПолучитьМакет("ПФ_MXL_Акт") ---------------------------------------------------- Александр Календарев Введение в Hack server { server_name example.ru root /var/www index index.php location \.php$ { fastcgi_pass unix:/var/run/hhvm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_NAME /var/www$fastcgi_script_name; include fastcgi_params; } } Server { Port = 9000 Type = fastcgi SourceRoot = /var/www } Log { Level = Error UseLogFile = true File = /var/log/hhvm-error.log Access { * { File = /var/log/hhvm-access.log Format = %h %l %u %t \”%r\” %>s %b }} } Server { Port = 80 Type = libevent SourceRoot = /var/www } Log { Level = Error UseLogFile = true File = /var/log/hhvm-error.log Access { * { File = /var/log/hhvm-access.log Format = %h %l %u %t \”%r\” %>s %b }} } VirtualHost { ...} Id = 1; $user->FirstName = 'Alexandre'; $user->LastName = 'Kalendarev'; $users[] = $user; $user = new StdClass; $user->Id = 2; $user->FirstName = 'Vasiliy'; $user->LastName = 'Pupkin'; $users[] = $user; ?>
Id); ?> FirstName); ?> LastName); ?>
num += $delta; return $this; } public function get():int { return $this->num; } public function __construct(int $num): void { $this->num = $num; } } $f = new Bar(13); echo $f->add(567)->get(), PHP_EOL; num += $delta; return $this; } public function get():int { return $this->num; } public function __construct(private int $num): void {} } $f = new Baz(123); echo $f->add(567)->get(), PHP_EOL; { public function add(T $delta): Foo { $this->num += $delta; return $this; } public function get(): T { return $this->num; } public function __construct(private T $num): void {} } $f1 = new Foo(123); $f1->add(567); echo $f1->get(), PHP_EOL; $f2 = new Foo(1.23); echo $f2->add(5.67)->get(), PHP_EOL; $arr):int { $sm = 0; foreach ($arr as $key => $value) { $sm += $value; } return $sm; } $arr=[1, 3]; echo check_sum($arr),PHP_EOL; 1, 'two' => 2, 'three' => 3}; $set = Set {'one', 'two', 'three'}; $pair = Pair {'one', 'two'}; echo $vector[0],PHP_EOL; echo $map['one'],PHP_EOL; echo $set['one'],PHP_EOL; echo $pair[0],PHP_EOL; $hhvm h10.php $cache = Map {}; public function get(int $key ):int { return $this->cache[$key]; } public function set(int $key, int $value ):Cache { $this->cache[$key] = $value; return $this; } public function __construct(): void {} } $cache = new Cache(); $cache->set(1,10)->set(2,20)->set(3,30); echo $cache->get(3), PHP_EOL; 'один', 'two' => 'два' , 'three' => 'три'}; foreach ($map as $eng => $ru) { echo $eng ,' в переводе ', $ru, PHP_EOL; removeKey(1); var_dump($vector); $map = Map {'one' => 'один', 'two' => 'два' , 'three' => 'три'}; $map->removeKey('two'); var_dump($map); containsKey(2)); var_dump($vector->at(1)); var_dump($vector->get(2)); var_dump($vector->setAll($vector2)); var_dump($vector->set(0, 'one')); //var_dump($vector->at(2)); $ hhvm ex14.php bool(false) // всего два элемента с индексами 0 и 1 string(3) "one" // первый элемент имеет индекс 0 NULL // элементы 2 не существует object(HH\Vector)#1 (2) { // заменяет элементы первого вектора из второго [0]=> string(3) "two" [1]=> string(5) "three" } object(HH\Vector)#1 (2) { // заменяет первый элемент вектора [0]=> string(3) "one" [1]=> string(5) "three" } // вызывается исключение на несуществующий элемент 2 ------------------------------------------------- Алексей Вторников Скромный гений из 50-х while (y != 0) { x++; y-- } y = (~y) + 1 x = 0 while (y != 0) { x++; y--; } -------------------------------------------------- Кирилл Ткаченко Играем с компьютером в головоломку «Отшельник» Листинг программы с номерами строк 1 #!/usr/bin/env python3 2 # -*- coding: utf-8 -*- 3 ''' 4 Игра "Отшельник" 5 ''' 6 7 import tkinter 8 9 10 class Samag: 11 ''' 12 Головной класс 13 ''' 14 def __init__(self): 15 ''' 16 Метод инициализации объекта класса 17 ''' 18 self.font_size = 'Times 48 bold' 19 self.board = [] 20 self.x_coords = [] 21 self.y_coords = [] 22 txt = 'Игра \u00ABОтшельник\u00BB' 23 self.root = tkinter.Tk() 24 self.root.title(txt) 25 self.root.geometry('320x640') 26 self.init_board() 27 self.redraw() 28 lbl_new = tkinter.Label(self.root, text='\u25E6', \ 29 font=self.font_size) 30 lbl_new.grid(row=1, column=0) 31 lbl_new.bind('', self.lbl_new_click) 32 lbl_caption = tkinter.Label(self.root, text=txt + \ 33 ' (специально для \u00ABSAMAG\u00BB)') 34 lbl_caption.grid(row=0, column=0, columnspan=7) 35 self.root.mainloop() 36 37 def in_cross(self, x, y): 38 return 2 <= x <= 4 or 2 <= y <= 4 39 40 def init_board(self): 41 self.board = [[self.in_cross(x, y) and \ 42 not (x == 3 and y == 3) \ 43 for y in range(7)] for x in range(7)] 44 self.x_coords = [] 45 self.y_coords = [] 46 47 def redraw(self): 48 for x in range(7): 49 for y in range(7): 50 if self.in_cross(x, y): 51 lbl = tkinter.Label(self.root, text=('\u2022' \ 52 if self.board[x][y] else '\u2043'), \ 53 font=self.font_size) 54 lbl.grid(row=x + 1, column=y) 55 lbl.bind('', lambda e, x=x, y=y: \ 56 self.lbl_board_click(e, x, y)) 57 58 def lbl_board_click(self, e, x, y): 59 self.x_coords += [x] 60 self.y_coords += [y] 61 if len(self.x_coords) > 3: 62 self.x_coords = self.x_coords[-3:] 63 self.y_coords = self.y_coords[-3:] 64 if len(self.x_coords) == 3: 65 self.try_make_move() 66 67 def sign(self, x): 68 return 1 if x > 0 else (0 if x == 0 else -1) 69 70 def is_on_one_line(self, a1, a2, a3, b1, b2, b3): 71 return (b1 == b2) and (b1 == b3) and \ 72 abs(a1 - a2) == 1 and \ 73 abs(a1 - a3) == 2 and \ 74 abs(a2 - a3) == 1 and \ 75 self.sign(a1 - a2) == self.sign(a2 - a3) and \ 76 self.sign(a1 - a2) == self.sign(a1 - a3) 77 78 def try_make_move(self): 79 (x1, x2, x3) = self.x_coords 80 (y1, y2, y3) = self.y_coords 81 if ((self.is_on_one_line(x1, x2, x3, y1, y2, y3) or \ 82 self.is_on_one_line(y1, y2, y3, x1, x2, x3)) and \ 83 self.board[x1][y1] and self.board[x2][y2] and \ 84 not self.board[x3][y3]): 85 self.board[x1][y1] = False 86 self.board[x2][y2] = False 87 self.board[x3][y3] = True 88 self.x_coords = [] 89 self.y_coords = [] 90 self.redraw() 91 self.maybe_win() 92 93 def maybe_win(self): 94 count = 0 95 for a in self.board: 96 for b in a: 97 if b: 98 count += 1 99 if count == 1: 100 self.init_board() 101 self.redraw() 102 103 def lbl_new_click(self, e): 104 self.init_board() 105 self.redraw() 106 107 108 def main(): 109 Samag() 110 111 112 if __name__ == '__main__': 113 main()