Сергей Барамба Температура в серверной под контролем define command{ command_name term_on_sensor1 command_line /usr/lib/nagios/plugins/check_snmp -H '$HOSTADDRESS$' -C '$ARG1$' -o .1.3.6.1.4.1.25728.8800.1.1.2.4 -l 'Term on sensor1' -u 'degree' -w '$ARG2$' -c '$ARG3$' } #Описываем устройство define host{ # имя используемого шаблона заданного для хоста use generic-host ; # логическое имя, данное устройству host_name netping; alias ServerRoomTemp ; #Дружественное имя устройства address 192.168.3.253 ; IP адрес сервера #Количество проверок max_check_attempts 3 } #Описываем службу, которую будем наблюдать на устройстве define service { # Имя хоста, за которым будем следить, взято из параметра host_name host_name netping # Имя данное сервиса service_description TERM1 # Команда, которая будет использоваться для проверки. # Передаваемые ей параметры разделяются восклицательным знаком и имеют следующий синтаксис # 1. Имя SNMP Community чтения, которое мы запомнили в п.1 # 2. Значение, при превышении которого ситуация будет считаться опасной (Warning) # 3. Значение, при превышении которого ситуация будет считаться критической (Critical) check_command term_on_sensor1!SWITCH!22!24 # Используемый шаблон use generic-service # Интервал между проверкой и отправкой оповещений notification_interval 60 # Время, когда хост должен быть доступен notification_period 24x7 # Список уровней событий, для которых будут отсылаться оповещения notification_options w,u,c,r } cfg_file=/etc/nagios/objects/netping.cfg service nagios restart ___________________________________________ Денис Силаков Управление Ubuntu-машинами с помощью Landscape $ sudo add-apt-repository ppa:landscape/15.01 $ sudo apt-get update $ sudo apt-get install landscape-server-quickstart $ apt-get install landscape-client ssl_public_key = /etc/landscape/landscape_server_ca.crt $ sudo landscape-config --computer-title "My First Client" --account-name standalone --url https:///message-system --ping-url http:///ping $ export LANDSCAPE_API_KEY="" $ export LANDSCAPE_API_SECRET="" $ export LANDSCAPE_API_URI="https:///api/" $ export LANDSCAPE_API_SSL_CA_FILE="/etc/landscape/landscape_server_ca.crt" ____________________________________________________ Сергей Яремчук Настройка BitLocker для хранения ключей восстановления в Active Directory > manage-bde -protectors -get c: > manage-bde -protectors -adbackup c: -id '{DFB478E6-8B3F-4DCA-9576-C1905B49C71E}' __________________________________________ Андрей Бирюков Управляем локальными аккаунтами Set-AdmPwdComputerSelfPermission –OrgUnitDesktops Set-AdmPwdReadPasswordPermission -OrgUnit Desktops –AllowedPrincipalsAdminPwd Register-AdmPwdWithGPO -GpoIdentity: Pwd_Admin_Local ______________________________________________ Сергей Яремчук Новое в PowerShell 5.0. Just Enough Administration PS> Install-Module xJea Сonfiguration Demo xJeaToolKit Process { Name = 'Process' CommandSpecs = @" Name,Parameter,ValidateSet,ValidatePattern Get-Process Get-Service Stop-Process,Name,calc;notepad Restart-Service,Name,,^A "@ applications = "ipconfig" } CommandSpecs = Get-Content "C:\Toolkit\tools.csv" –Delimiter "NoSuch" xJeaEndPoint Demo { Name = 'Demo' Toolkit = 'Process' DependsOn = '[xJeaToolKit]Process' } Demo -OutputPath C:\DSCDemo Start-DscConfiguration -Path C:\DSCDemo -ComputerName localhost -Verbose –wait PS> Enter-PSSession –ComputerName localhost –ConfigurationName Demo PS> Enter-PSSession –ComputerName localhost __________________________________ Владимир Тихомиров, Валерий Михеичев Опыт секционирования таблиц в Oracle. Часть 2. Особенности перевода больших таблиц SELECT OWNER,SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME, ROUND(BYTES/1024/1024) MB FROM DBA_SEGMENTS S WHERE OWNER='ИМЯ СХЕМЫ' AND SEGMENT_NAME='ИМЯ ТАБЛИЦЫ'; SELECT I.TABLE_OWNER,I.TABLE_NAME,I.OWNER INDEX_OWNER, I.INDEX_NAME, S.PARTITION_NAME, S.TABLESPACE_NAME, ROUND(BYTES/1024/1024) MB FROM DBA_INDEXES I,DBA_SEGMENTS S WHERE S.OWNER=I.OWNER AND S.SEGMENT_NAME=I.INDEX_NAME AND I.OWNER='ИМЯ СХЕМЫ' AND I.TABLE_NAME='ИМЯ ТАБЛИЦЫ'; SELECT TABLESPACE_NAME, ROUND(SUM(BYTES/1024/1024)) FREE_MB FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME ORDER BY 1 ALTER TABLE AIX.DOC_T RENAME TO DOC_T_ARX; ALTER TABLE AIX.DOC_T_P RENAME TO DOC_T; Select * from имя с-таблицы union all Select * from имя архивной таблицы; ALTER TABLE ИМЯ_СЕКЦИОНИРОВАННОЙ_ТАБЛИЦЫ --в которую переносим EXCHANGE PARTITION ИМЯ_СЕКЦИИ --куда переносятся данные WITH TABLE ИМЯ_СУЩЕСТВУЮЩЕЙ_ТАБЛИЦЫ --из какой таблицы переносим INCLUDING INDEXES WITHOUT VALIDATION UPDATE GLOBAL INDEXES; Create table aix.agreemen (isn number, created date, status varchar2(1)); Create unique index aix.pk_agreemen_isn on aix.agreemen(isn); Create index aix.x_agreemen_created on aix.agreemen(created ); Alter table aix.agreemen add constraint pk_agreemen_isn primary key(isn) using index; Create table aix.agreemen_p(isn number, created date, status varchar2(1)) partition by range(isn) (partition p_maxvalue values less than (maxvalue)) enable row movement; Create unique index aix.pk_agreemen_p_isn on aix.agreemen_p(isn) local; Create index aix.x_agreemen_p_created on aix.agreemen_p(created) local; Alter table aix.agreemen_p exchange partition p_maxvalue with table aix.agreemen including indexes without validation update global indexes; Select max(isn) from aix.agreemen_p partition (p_maxvalue); Alter table aix.agreemen_p Split partition p_maxvalue at (1000) into (partition p_1, partition p_maxvalue) update global indexes; Alter table aix.agreemen_p Split partition p_maxvalue at (2000) into (partition p_2, partition p_maxvalue) update global indexes; … Alter table aix.agreemen_p Split partition p_maxvalue at (5026) into (partition p_5, partition p_maxvalue) update global indexes; Select * from all_tab_partitions where table_name='AGREEMEN_P' and table_owner='AIX' order by 8 Alter table aix.agreemen_p drop partition (p_maxvalue) update global indexes; Alter table aix.agreemen_p set interval(1000); Select owner, table_name, partitioning_type,interval from all_part_tables p where table_name='AGREEMEN_P' and owner=’AIX’; Alter table aix.agreemen rename to agreemen_arx; Alter table aix.agreemen_p rename to agreemen; Alter table aix.agreemen_arx drop constraint pk_agreemen_isn; Drop index aix.pk_agreemen_isn; Alter index aix.pk_agreemen_p_isn rename to pk_agreemen_isn; Drop index aix.x_agreemen_created; Alter index aix.x_agreemen_p_created rename to x_agreemen_created; Alter table aix.agreemen add constraint pk_agreemen_isn primary key(isn) using index; Update /*+ parallel(8) */ aix.agreemen set isn=isn+1/1000;commit; Update /*+ parallel(8) */ aix.agreemen set isn=isn-1/1000;commit; Update /*+ parallel(8) */ aix.agreemen set created=created+1/24/60/60;commit; Select partition_name from all_tab_partitions where table_name='AGREEMEN_P' and table_owner='AIX' and partition_position=1 ___________________________________________________________________ Олег Филиппов Расширяем функциональность 1С:Предприятия. Часть 2. Внешние компоненты Native API ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканераШтрихкодов", "Сканер"); Компонента = Новый("AddIn.Сканер.BarcodeReader"); const wchar_t *wsExtension = L"AddInNativeExtension"; Новый("AddIn.AddInNative.AddInNativeExtension"); static const wchar_t *g_PropNames[] = {L"IsEnabled", L"IsTimerPresent"}; static const wchar_t *g_PropNamesRu[] = {L"Включен", L"ЕстьТаймер"}; enum Props { ePropIsEnabled = 0, ePropIsTimerPresent, ePropLast // Always last }; switch(lPropNum) { case ePropIsEnabled: TV_VT(pvarPropVal) = VTYPE_BOOL; TV_BOOL(pvarPropVal) = m_boolEnabled; break; static const wchar_t *g_MethodNamesRu[] = {L"Включить", L"Выключить", L"ПоказатьВСтрокCFеСтатуса", L"СтартТаймер", L"СтопТаймер", L"ЗагрузитьКартинку", L"ПоказатьСообщение"}; static const wchar_t *g_MethodNames[] = {L"Enable", L"Disable", L"ShowInStatusLine", L"StartTimer", L"StopTimer", L"LoadPicture", L"ShowMessageBox"}; enum Methods { eMethEnable = 0, eMethDisable, eMethShowInStatusLine, eMethStartTimer, eMethStopTimer, eMethLoadPicture, eMethShowMsgBox, eMethLast // Always last }; switch(lMethodNum) { case eMethEnable: m_boolEnabled = true; break; case eMethDisable: m_boolEnabled = false; break; __________________________________ Алексей Верижников Компьютерная графика на основе OpenGL. Часть 6. WebGL

gl.clearColor ( 0.0, 0.0, 0.0, 1.0 ); gl.clearDepth ( 1.0 ); gl.enable( gl.DEPTH_TEST ); gl.depthFunc (gl.LEQUAL); canvas.onmousedown = function (event) { drag = 1; xOffs = event.clientX; yOffs = ev.clientY; } canvas.onmouseup = function (event) canvas.onmousemove = function (event) function drawScene() { gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) perspective(45, 1.0, 0.1, 100.0); loadIdentity(); mvTranslate([0.0, 0.0, -15.0]); mvRotate(xRot, [1, 0, 0]); mvRotate(yRot, [0, 1, 0]); gl.bindBuffer(gl.ARRAY_BUFFER, posBuffer); gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, posBuffer.itemSize, gl.FLOAT, false, 0, 0); gl.bindBuffer(gl.ARRAY_BUFFER, normalBuffer); gl.vertexAttribPointer(shaderProgram.vertexNormalAttribute, normalBuffer.itemSize, gl.FLOAT, false, 0, 0); gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer); gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, texCoordBuffer. itemSize, gl.FLOAT, false, 0, 0); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer); setMatrixUniforms(); gl.drawElements(gl.TRIANGLES, indexBuffer.numItems, gl.UNSIGNED_SHORT, 0); } ___________________________________________ Игорь Антонов Sails.js – фреймворк для ленивых $ npm install -g sails $ sails –v sails new bugTracker cd bugTracker title: { type: 'string', required: true, maxLength: 100 }, name: { type: 'string', required: true, maxLength: 30 }, description: { type: 'string', required: false, maxLength: 1024 } performer: { required: true, model: 'user' }, status: { required: true, model: 'status' }, Листинг 1. Добавляем запись в БД addStatus: function (req, res) { var data = { title : req.param('title'), name : req.param('name'), description : req.param('description'), } Status.create(data).exec(function (err, status) { if (err) return res.send(500); res.redirect('/status/'); }); } Листинг 2. Удаляем запись из БД deleteStatus: function (req, res) { var statusId = req.param('id'); Status.destroy(statusId).exec(function (err) { if (err) return res.send(500); res.redirect('/status'); }); } Листинг 3. Редактирование записи updateStatus: function (req, res) { var statusId = req.param('id'); var updatedData = { title : req.param('title'), name : req.param('name'), description : req.param('description'), }; Status.update(statusId, updatedData). exec(function (err) { res.redirect('/status'); }); }, Листинг 4. Код метода index контроллера Task Task.find() .populate('performer') .populate('status') .sort('id DESC') .exec(function (err, tasks) { if (err) return res.send(500); res.view({ tasks : tasks}); }); Листинг 5. Код метода create контроллера Task var data = {}; User.find() .then(function(users) { data.performers = users; Status.find() .then(function(statuses) { data.statuses = statuses; res.view({data : data}); }); }); <Метод отправки данных> <псевдо путь> [параметры] : { controller: <Имя контроллера> action: <Метод действия> } 'post /task/create': { controller: 'task', action: 'addTask' } 'get /task/delete/:id': { controller: 'task', action: 'deleteTask' } <%- body %> //Возвращаем представление res.view( { tasks: tasks }); <% _.each(tasks, function (task) { %> <%= task.id %> <%= task.title %> <%= task.endDate %> <%= task.performer.userName %> Delete <%}) %> @import 'bootstrap/bootstrap'; 'js/dependencies/sails.io.js', 'js/dependencies/jquery-2.1.1.min.js', 'js/front.js', 'js/dependencies/bootstrap.min.js', npm install sails-mysql connection: someMysqlServer _________________________________ Александр Календарев Пять шагов в написании расширений под HHVM $ wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add - $ echo deb http://dl.hhvm.com/ubuntu trusty main | sudo tee /etc/apt/sources.list.d/hhvm.list $ sudo apt-get update $ sudo apt-get install hhvm-dev HHVM_EXTENSION(my_module my_module.cpp) #include "hphp/runtime/ext/extension.h" namespace HPHP { class MyModuleExtension : public Extension { public: MyModuleExtension(): Extension("my_module", "1.0") {} } s_my_module_extension; HHVM_GET_MODULE(my_module); } // namespace HPHP $ hphpize $cmake . $ make $ sudo make install hhvm.dynamic_extension_path = /usr/lib/x86_64-linux-gnu/hhvm/extensions/20150212/ hhvm.dynamic_extensions[my_module] = my_module.so $ hhvm test.php | grep my_module > function hello_goodbye(string $name, bool $hello = true): String; namespace HPHP { static String HHVM_FUNCTION(hello_goodbye, const String& name, bool hello) { return hello ? "Hello " + name : "Goodbye" + name; } class MyModuleExtension : public Extension { public: MyModuleExtension(): Extension("my_module", "1.0") {} void moduleInit() override { HHVM_FE(hello_goodbye); loadSystemlib(); } } s_my_module_extension; HHVM_GET_MODULE(my_module); } // namespace HPHP const String& name. const StaticString BUILD_YEAR("BUILD_YEAR"), YANDEX_URL("YANDEX_URL"), the_URL("http://yandex.ru"); ; class Example1Extension: public Extension { public: Example1Extension(): Extension("example1", "1.0") {} void moduleInit() override { Native::registerConstant(BUILD_YEAR.get(), 2015); Native::registerConstant(YANDEX_URL.get(),the_URL.get()); } } s_my_module_extension; $value) static Array Create(const Variant& key, const Variant& value); // три перегруженных метода int64_t, const String&, // const Variant& const Variant operator[...] bool exists(...) void set(...) void setRef(...) // array_unshift($v); void prepend(const Variant& v); // array_shift($v); Variant dequeue(); // array_push($v); aka => $arr[] = $v; void append(const Variant& v); // array_pop($v); Variant pop(); // $arr[] =& $v; void appendRef(Variant& v); void remove(key); // unset($arr[$key]); static Array HHVM_FUNCTION(get_data, const String& data) { Array ret = Array::Create(); ret.set(name, value); if (!data.empty()) { ret.set( 0, data ); } return ret; } <<__Native>> function get_data(string $data): Array; value [0] => *** ) #include "hphp/runtime/base/execution-context.h" // g_context static void HHVM_FUNCTION(check_array, const Array& data) { g_context->write("len="); g_context->write( data.length()); g_context->write( "\n"); for (int i=0; i < data.length(); i++) { Variant el(data[i]); g_context->write( "["); g_context->write( String(i) ); g_context->write( "] "); switch(el.getType()) { case KindOfInt64 : g_context->write( "int\n"); break; case KindOfStaticString : g_context->write( "str\n"); break; case KindOfArray : g_context->write( "array\n"); break; case KindOfObject : g_context->write( "mixed\n"); break; default : g_context->write( "wrong\n"); } } } 4], 1.5 , $sting, $int ] ); static void printVariant(const Variant& data) { switch(data.getType()) { case KindOfInt64 : { g_context->write( "int: "); g_context->write( data.toInt64()); break; } case KindOfNull : { g_context->write( "null"); break; } case KindOfStaticString : case KindOfString : { g_context->write( "str: "); g_context->write( data.toString()); break;} case KindOfArray : g_context->write( "array"); break; case KindOfObject : g_context->write( "mixed"); break; case KindOfRef : g_context->write( "ref"); break; case KindOfDouble : g_context->write( "float: "); g_context->write( data.toDouble()); break; default : g_context->write( "wrong"); } } static void HHVM_FUNCTION(traverse_array, const Array& data) { ArrayData* ad = data.get(); for (ssize_t pos = ad->iter_begin(); pos != ad->iter_end(); pos = ad->iter_advance(pos)) { const Variant key = ad->getKey(pos); const Variant val = ad->getValue(pos); printVariant( key); g_context->write( "\t\t"); printVariant( val); g_context->write( "\n"); } } $a ='Bob' [ 'key' => 'val', 'foo' => 42, 1 => "baz", 2 => "Alice", $a => 123 , 3.14 => 'bar'] ; class Hello { public function greet() { echo "Hello {$this->name}\n"; } } public function __construct(protected string $name = 'Stranger') {} $hello = Hello(); echo $hello->greet() // Hello Stranger $hello = Hello('Alex'); echo $hello->greet() // Hello Alex <<__Native>> public function getName(): string; <<__Native>> static public function DefaultHello(): string; #include "hphp/runtime/ext/extension.h" namespace HPHP { const StaticString Hello("Hello"), s_name("name"); String HHVM_METHOD(Hello, getName) { return this_->o_get(s_name, false, Hello); } String HHVM_STATIC_METHOD(Hello, DefaultHello) { return "Hello"; } class MyModuleExtension : public Extension { public: MyModuleExtension(): Extension("my_module", "1.0") {} void moduleInit() override { HHVM_ME(Hello, getName); HHVM_STATIC_ME(Hello, DefaultHello); loadSystemlib(); } } s_my_module_extension; HHVM_GET_MODULE(my_module); } // namespace HPHP Variant o_set( const String& propertyName, const Variant& data, const String& context = null_string); void ObjectData::o_setArray(const Array& properties) getName(), PHP_EOL; // Baby $c = new Hello(); echo $c->getName(), PHP_EOL; // Stranger __________________________________