Денис Силаков
Проект 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");