Денис Силаков Проект Juju. Развертываем сложные приложения одним кликом $ sudo add-apt-repository ppa:juju/stable $ sudo apt-get update $ sudo apt-get install juju-quickstart $ juju-quickstart mediawiki-single $ juju expose mediawiki $ juju status mediawiki $ juju help commands $ juju help <имя_команды> $ juju help topics $ juju deploy mysql $ juju deploy wordpress $ juju add-relation wordpress mysql $ juju expose wordpress $ juju deploy mysql wordpress_db $ juju deploy mysql mediawiki_db $ juju add-relation wordpress wordpress_db $ juju add-relation mediawiki mediawiki_db $ juju deploy --constraints "mem=8G" mysql $ juju deploy memcached $ juju add-relation mediawiki memcached $ juju set mediawiki skin='monobook' $ juju-quickstart –i ------------------------------------------------------------------- Даниил Прахин Система vsDesk. Большой помощник маленького ИТ-отдела $ sudo a2enmod rewrite $ sudo php5enmod imap $ sudo php5enmod opcache ServerName vsdesk ServerAlias vsdesk.smalloffice.net DocumentRoot /var/www/vsdesk Options FollowSymLinks AllowOverride All Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny Allow from all ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ AllowOverride None Options +ExecCGI –MultiViews +SymLinksIfOwnerMatch Order allow, deny Allow from all ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined $ sudo service apache2 restart ------------------------------------------------------- Владимир Безмалый Аутентификация в Windows 10 gpedit.msc --------------------------------------------------------- Денис Макрушин Кто владеет информацией # COMMENT # REGULAREXPRESSION;SCORE yara32.exe –d md5= --------------------------------------------------------- Андрей Пахомов Отображение систематизированных данных в Android заголовок статьи текст новости int eventType = parser.getEventType(); while(eventType != XmlPullParser.END_DOCUMENT){ if(eventType == XmlPullParser.START_TAG){ if (parser.getName().equals("item")) {sItem = new NewsItem();} else if (parser.getName().equals("title")) {sItem.TITLE=true;} else if (eventType == XmlPullParser.TEXT) {sItem.setData(parser.getText().trim());} else if (parser.getName().equals("enclosure")) {URL imageUrl=new URL( parser.getAttributeValue(0)); } inflater = (LayoutInflater) getContext().getSystemService( Context.LAYOUT_INFLATER_SERVICE); row = inflater.inflate(R.layout.sngl_item_news, null); row = convertView; ImageView image= (ImageView)row.findViewById(R.id.logo); image.setImageBitmap(i.image); @Override myView.setOnItemClickListener( new AdapterView.OnItemClickListener() { public void onItemClick(..., View v, ...) {String title = (TextView) v.findViewById( R.id.title).getText().toString(); titleList.add(title);}}); File myFile = File.createTempFile("internal", ".log", this.getCacheDir()); PrintWriter pw = new PrintWriter( new FileOutputStream(myFile)); for (String str : titleList) {pw.println(str);} pw.close(); outputStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + myFile.toString() +"\"" + "\r\n"); move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path); public class LoadXml extends AsyncTask { protected ImprovedAdapter doInBackground( String... urls) {… parseXml(items, sportUrl); ...} myView.setAdapter(adapter); new LoadXml().execute(); ./stix_import.py -f STIXDocument.xml -i 192.168.56.2 -t XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX -r MyReferenceSet ---------------------------------------------------------------------- Александр Майоров Обзор релиза TypeScript 1.5 и 1.6 beta // math.ts export function add(x, y) { return x + y } export function subtract(x, y) { return x - y } export default function multiply(x, y) { return x * y } // someController.ts import {add, subtract} from "math"; import times from "math"; let result = times( add(2, 3), subtract(5, 3) ); var someArray:Array = ['a', 'b', 'c']; { let first = someArray[0]; let secnd = someArray[1]; let third = someArray[2]; } var someArray:Array = ['a', 'b', 'c']; { let [ first, second, third ] = someArray; } [ переменная1, переменная2, ..., переменнаяN ] = массив; { переменная1, переменная2, ..., переменнаяN } = объект; var someArray:Array = ['a', 'b', 'c']; { const [ first, second, third ] = someArray; } var [foo, [[bar], baz]] = [1, [[2], 3]]; console.log(foo); // 1 console.log(bar); // 2 console.log(baz); // 3 var [,,third] = ["foo", "bar", "baz"]; console.log(third); // "baz" var [head, ...tail] = [1, 2, 3, 4]; console.log(tail); // [2, 3, 4] var fooA = { name: "Foo" }; var fooB = { name: "Bar" }; var { name: fooA } = fooA; var { name: fooB } = fooB; console.log(fooA); // "Foo" console.log(fooB); // "Bar" var { foo, bar } = { foo: "lorem", bar: "ipsum" }; console.log(foo); // "lorem" console.log(bar); // "ipsum" function removeBreakpoint({ url, line, column }) { // ... } jQuery.ajax = function (url, { async = true, beforeSend = false, cache = true, complete = false, crossDomain = false, global = true }) { // ... some code ... }; var foo = config.foo || theDefaultFoo; /** * Какой-то класс с методами */ class Fooclass { // Декорируем метод @log foo(n: number):number { return n * 2; } @log bar(s:string):string { return `Some string with ${s}`; } } var a = new Fooclass, f = a.foo(48), b = a.bar('lol'); /* Нам не нужно писать такие строчки, так как методы логируются благодаря декоратору console.log(f); console.log(b); */ /** * Декоратор логирования * @param target * @param key * @param val * @returns {{value: (function(...[any]): *)}} */ function log(target: Function, key: string, val: any) { return { value: (...args: any[]) => { let a = args.map(a => JSON.stringify(a)).join(); let result = val.value.apply(this, args); let r = JSON.stringify(result); console.log(`Call: ${key}(${a}) => ${r}`); return result; } }; } //EOF// { "compilerOptions": { "module": "commonjs", "noImplicitAny": true, "removeComments": true, "preserveConstEnums": true, "out": "../../bld/bundle.js", "sourceMap": false }, "files": [ "core.ts", "sys.ts", "types.ts" ] } npm install -g typescript@1.6.0-beta tsc –v или tsc –version function* g(limit) { for (let i = 0; i < limit; i++) { yield i; } } for (let i of g(100)) { console.log(i); } var array = [...g(50)]; var [first, second, ...rest] = g(100); interface Generator extends IterableIterator { next(n: TNext): IteratorResult; // throw and return methods elided } interface Generator extends IterableIterator { next(n: TNext): IteratorResult; // throw and return methods elided } function *g(): Generator { var x = yield 0; // x имеет тип string } function f() { if (true) { interface T { x: number } let v: T; v.x = 5; } else { interface T { x: string } let v: T; v.x = "hello"; } } function f() { enum E { A, B, C } class C { x: E; } interface I { x: E; } type A = I[]; let a: A = [new C()]; a[0].x = E.B; type Source = T | (() => T); function unwrap(p: Source) { return (typeof p === "function") ? p() : p; } var Rect = class { area: number; constructor(public length: number, public width: number) { this.area = this.length * this.width; } } var rect = new Rect(5, 10); var MyNode = class Node { next: Node; set nextNode(node: Node) { this.next = node; } constructor() {} } var node = new MyNode(); var nextNode = new MyNode(); node.nextNode = nextNode; type int = number; abstract class A { foo(): int { return bar(); } abstract bar() : int; } class B extends A { bar() { return 42; } } new A(); // Error! new B(); // OK function isCat(a: Animal): a is Cat { return a.name === 'kitty'; } var x: Animal; if(isCat(x)) { x.meow(); // OK, x is Cat in this block } export interface ITodoItemState {} export interface ITodoItemProps { item: ITodo; onRemove?: (todo: ITodo) => any; key?: number; } export class TodoItem extends React.Component { constructor () { super(); this.removeItem = this.removeItem.bind(this); } removeItem () { this.props.onRemove(this.props.item); } render () { return (
  • {this.props.item.description}
  • ); } } ----------------------------------------------------------------- Владимир Тихомиров, Валерий Михеичев Опыт секционирования таблиц в Oracle. Часть 3. Модификация секционированных таблиц ALTER TABLE AIF.DOC_T ENABLE ROW MOVEMENT; ALTER TABLE AIX.DOC_T SET INTERVAL (INTERVAL '1' MONTH) ALTER TABLE AIX.DOC_T SET INTERVAL () ALTER TABLE AIF.DOC_T DROP PARTITION P_MAXVALUE UPDATE GLOBAL INDEXES; ALTER TABLE AIF.DOC_T SPLIT PARTITION P_MAXVALUE --диапазон вновь создаваемой секции AT (TO_DATE('01/11/2015','DD/MM/YYYY')) INTO (PARTITION P102015, --имя новой секции P_MAXVALUE) UPDATE GLOBAL INDEXES; Select status, a.* from all_indexes a where table_name='DOC_T' Select * from dba_tab_subpartitions p where table_owner='ИМЯ СХЕМЫ ТАБЛИЦЫ' and table_name='ИМЯ ТАБЛИЦЫ' order by subpartition_position; Create table aif.histr_p(updated date, raions number) partition by Range(updated) interval(interval '1' MONTH) subpartition by List(raions) subpartition template (subpartition sub1 values(1), subpartition sub2 values(2), subpartition sub3 values(3)) (partition part_2015_07 values less than (to_date('01.01.2015','DD.MM.YYYY'))) enable row movement; Create table aif.ae_spares_р(period number, id number, spares_name varchar2(100)) partition by range(period) Interval(1) subpartition by hash(id) subpartitions 500 (partition ps values less than (2) ) enable row movement compress nologging; Create table aif.ae_price( period number, id number, raions number, price number) partition by range(period) Interval(1) subpartition by hash(id) subpartitions 500 (partition pr values less than (2) ) enable row movement compress nologging; Insert into aif.priscetariff Select * from aif.price p, aif.spares s where p.id=s.id Insert into aif.priscetariff Select * from aif.price subpartition(SYS_SUBP6786) p, aif.spares subpartition(SYS_SUBP5786) s where p. spares_id=s.id; Declare p_owner varchar2(30):='AIF'; str varchar2(2000); p_name_s varchar2(30):='SPARES';p_name_p varchar2(30):='PRICE'; Begin For cur in ( --поиск одинаковых секций и подсекций в цикле select s.subpartition_name subname_s, s2.subpartition_name subname_p, from dba_tab_partitions p, dba_tab_subpartitions s, dba_tab_partitions p2, dba_tab_subpartitions s2 where p.table_owner=s.table_owner and p.table_name=s.table_name and p.partition_name=s.partition_name and p2.table_owner=s2.table_owner and p2.table_name=s2.table_name and p2.partition_name=s2.partition_name and p.partition_position=p2.partition_position and s.subpartition_position=s2.subpartition_position and p.table_owner= p_owner and p.table_name= p_name_s and p2.table_owner= p_owner and p2.table_name= p_name_p ) loop ---выполнение команды Insert Str:=’ insert into aif.priscetariff select * from aif. price subpartition('||cur.subname_p||') p, aif. spares subpartition('||cur.subname_s||') s where p. id=s.id and s.period=p.period; Execute immediate Str; End loop; End; CREATE INDEX AIF.X_DOC_T_UPDATED ON AIF.DOC_T(UPDATED) LOCAL TABLESPACE INDXDATA; CREATE INDEX AIF.X_DOC_T_CLASSISN ON AIF.DOC_T(CLASSISN) LOCAL TABLESPACE NDXDATA; Select * from all_indexes where owner='ИМЯ СХЕМЫ' and table_name='ИМЯ ТАБЛИЦЫ'; Select * from all_ind_partitions where index_owner='ИМЯ СХЕМЫ' and index_name='ИМЯ ИНДЕКСА'; CREATE INDEX AIF.X_DOC_T_UPDATED ON AIF.DOC_T(UPDATED, CLASSISN) GLOBAL PARTITION BY RANGE(UPDATED) (PARTITION P_08_2015 VALUES LESS THAN( TO_DATE('01/09/2015','DD/MM/YYYY')), PARTITION P_MAXVALUE VALUES LESS THAN (MAXVALUE)); CREATE INDEX AIF.X_DOC_T_UPDATED ON AIF.DOC_T(UPDATED) GLOBAL PARTITION BY HASH (ISN) PARTITIONS 8; Create table aif.agreem (isn number, updated date, classisn number); --- Create index aif.x_agreem on aif.agreem(updated) global partition by range(updated) (partition p_01 values less than( to_date('01.09.2015','dd.mm.yyyy')), partition p_maxvalue values less than(maxvalue)); Create index aif.x_agreem_hash on aif.agreem(isn,classisn) global partition by hash(isn) partitions 16; Select i.table_owner,i.table_name,i.owner index_owner,i.index_name, partitioned, p.partition_name,partition_position pos,high_value,interval from dba_indexes i,all_ind_partitions p where i.index_name=p.index_name and i.table_owner='ИМЯ СХЕМЫ ТАБЛИЦЫ' and i.table_name=’ИМЯ ТАБЛИЦЫ’ order by i.index_name,p.partition_name; Select i.table_owner,i.table_name,i.owner index_owner, i.index_name,i.index_type,p.status, p.partition_name,c.column_name,c.column_position, p.tablespace_name from dba_indexes i, dba_ind_columns c,all_ind_partitions p where i.index_name=p.index_name and i.index_name=c.index_name and i.owner=c.index_owner and i.table_owner='ИМЯ СХЕМЫ ТАБЛИЦЫ' and i.table_name='ИМЯ ТАБЛИЦЫ' order by i.index_name,p.partition_name, c.column_position; create index aif.x_agreem_u on aif.agreem(updated) global partition by range(updated) (partition p_01 values less than(to_date('01.09.2015', 'dd.mm.yyyy')), partition p_02 values less than(to_date('01.10.2015', 'dd.mm.yyyy')), partition p_maxvalue values less than(maxvalue)); Alter index aif.x_agreem drop partition p_02; Alter index aif.x_agreem rebuild partition p_02 parallel (degree 32) nologging online; Alter index aif.x_agreem rename partition p_02 to p_02_2015; Alter index aif.x_agreem modify partition p_02 unusable; Alter index aif.x_agreem split partition p_maxvalue at (to_date('01.11.2015','dd.mm.yyyy')) into ( partition p_03, partition p_maxvalue); Create index aif.x_agreem_hash on aif.agreem_hash(isn) global partition by hash(isn) partitions 16; Alter index aif.x_agreem_hash add partition; Alter index aif.x_agreem_hash coalesce partition; ------------------------------------------------------------------------------- Павел Малахов Перенос БД с SQLite на MySQL на примере MediaWiki $wgReadOnly = 'Сайт обновляется, и редактирование временно запрещено'; sqlite3 sample.db .dump > sqlite_dump.sql python parse_sqlite_sql.py sqlite_tables.sql insert into user ("user_id", "user_name", "user_real_name", "user_password", "user_newpassword", "user_newpass_time", "user_email", "user_touched", "user_token", "user_email_authenticated", "user_email_token", "user_email_token_expires", "user_registration", "user_editcount", "user_password_expires") values ('28', 'SysopJ', 'User Name', ':B:9c5753aa:3b3ac9baf34afb0a67467bf7f038b590', , NULL, 'e-mail@domain.org', '20150527205309', '2068c2567b61edf35199bdb2d395f229', '20111210155445', '85e61feb0a1ba4ee3b8e6253a5e300f7', '20111217024350', '20111210024350', '2806', NULL); insert into user values ('28', 'SysopJ', 'User Name', :B:9c5753aa:3b3ac9baf34afb0a67467bf7f038b590', , NULL, 'e-mail@domain.org', '20150527205309', '2068c2567b61edf35199bdb2d395f229', '20111210155445', '85e61feb0a1ba4ee3b8e6253a5e300f7', '20111217024350', '20111210024350', '2806', NULL); $ mysql -u UserName -p DBName < mysql_db.sql -------------------------------------------------------------------------- Олег Филиппов Расширяем функциональность 1С:Предприятия. Часть 3. Прочие средства Объект = Новый COMОбъект("ProgID") scr = Новый COMОбъект("WScript.Shell"); Процедура Пауза(Сек) Экспорт scr = Новый COMОбъект("WScript.Shell"); scr.Run("ping 127.0.0.1 -n "+СокрЛП(Число(Сек)+1),0,1); КонецПроцедуры ;запускаем приложение в свернутом режиме Run($sFileExe, @ScriptDir, @SW_MINIMIZE) $hWin = WinWait($sTitle, '', 5) ;ждем 5 секунд окно If Not $hWin Then ;если окна нет – сообщение об ошибке и выход MsgBox(16, 'Error', 'Нет окна') Exit EndIf ;клик по кнопке ControlClick($hWin, '', '[CLASS:Button; INSTANCE:1]') Locator = Новый COMОбъект("WbemScripting.SWbemLocator"); ИмяСервера = "."; Имя = ПолучитьИмяПользователя(); ТочкаПодключения = "root\cimv2"; objWMIService = Locator.ConnectServer(ИмяСервера, ТочкаПодключения); МассивЗаданий = objWMIService.ExecQuery("Select * from Win32_PrintJob where Owner='" + Имя + "'",,48); ЗаданийВОчереди = КоличествоЗаданий(МассивЗаданий); Wrap = CreateObject("DynamicWrapperX"); Wrap.Register("USER32.DLL", "GetWindowRect", "i=lp", "r=l"); Rect = Wrap.Space(256); pStr = Wrap.StrPtr(Rect); Wrap.GetWindowRect(ДискрипторОкна, Rect); left = Wrap.NumGet(pStr,0,"l"); top = Wrap.NumGet(pStr,4,"l"); right = Wrap.NumGet(pStr,8,"l"); bottom = Wrap.NumGet(pStr,12,"l");