Powershell scripts

Читаем файл, ищем в нем строку, из строки извлекаем 2 числа, затем проверям чтоб одно число было в заданном диапазоне. Все нужные строки пишем в файл.

Get-Content .\db.sql | select-string "X1RZ" 
| ?{$_ -match "(?<id>X1RZ002\d{5}).*-(?<digits>07[3,4]\d\d)"}
| where-object {7342 -le $matches['digits'] -and  7410 -gt $matches['digits']} > filtered.sql

 

 

Настройка синонимов в Elasticsearch

Хорошая штука ElasticSearch, только вот видимо все силы отдали написанию кода, а на документацию ни сил, ни времени не хватило.

Задача: создать индекс для поиска, в котором поиск по некоторым полям будет осуществляться с использованием синонимов. Синонимы будут использоваться только во время поиска, но не во время создания индекса.

Для создяния конфига была использована информация главным образом из второго пункта  списка литературы.

Процедура следующая:

1. Для изменения индекса его первым делом необходимо остановить:

curl -XPOST 'http://localhost:9200/test_direct/_close'

 

2. Создаем конфигурацию и обновляем настройки индекса командой :

curl -XPUT 'localhost:9200/pocket_dwh_direct/_settings' -d '
 {'settings': {
      "index": {
         "analysis" : {
              "analyzer" : {
                  "my_search_analyzer" : {
                       "tokenizer" : "whitespace",
                       "filter" : ["standard", "asciifolding", "lowercase", "kstem", "search_synonym"]
                  }
             },
          "filter" : {
                "search_synonym" : {
                    "ignore_case" : "true",
                    "type" : "synonym",
                    "synonyms" : ["aaaa , bbb, ccc"]
                 }
           }
    }
   }
  },
  "mappings": {
        "mydoc_data": {
            "properties": {
                 "mysocName": {
                    "type": "string",
                    "index_analyzer": "standard",
                    "search_analyzer": "my_search_analyzer"
                  }, 
                  "mydocSecondName": { 
                    "type": "string",
                    "index_analyzer": "standard",
                    "search_analyzer": "my_search_analyzer"
                  }
             }
         }
   }
}'

 

немного пояснений:

{ 
	'settings': 
		{ "index": 
			{ "analysis" : 
				{"analyzer" : 
				{// Просто конфигурация синтаксического анализатора 
					"my_search_analyzer" : { 
						"tokenizer" : "whitespace",
						// Этот анализатор будет использовать фильтр синонимов при анализе фраз 
						"filter" : ["standard", "asciifolding", "lowercase", "kstem", "search_synonym"] 
					} 
				},
				// Описываем конфигурацию фильтра-синонима 
				"filter" : { 
					"search_synonym" : { 
						"ignore_case" : "true", 
						"type" : "synonym", 
						"synonyms" : ["aaaa , bbb, ccc"] 
					} 
				} 
			} 
		} 
	},
	// Настраиваем индекс 
	"mappings": {
	// название типа данных, на который это будет распространяться. 
		"mydoc_data": { 
			"properties": {
				// настройка полей вышеуказанного типа данных которы будут использовать	my_search_analyzer при поиске
				"mydocName": { 
					"type": "string", 
					"index_analyzer": "standard", 
					"search_analyzer": "my_search_analyzer" },
				// аналогично вышеуказанному 
				"mydocSecondName": { 
					"type": "string", 
					"index_analyzer": "standard", 
					"search_analyzer": "my_search_analyzer" 
				}
			} 
		} 
	} 
}

3. После оновления конфигурации индекса его необходимо сделать доступным для использования командой:

сurl -XPOST 'http://localhost:9200/test_direct/_open'

 

4. Убедиться что все сделано правильно можно командой

curl -XGET 'http://localhost:9200/test_direct/_analyze/?analyzer=my_search_analyzer&amp;text=aaa'

 

В ответ должна быть выдана строка:

{  
   "tokens":[  
      {  
         "token":"aaa",
         "start_offset":0,
         "end_offset":4,
         "type":"SYNONYM",
         "position":1
      },
      {  
         "token":"bbb",
         "start_offset":0,
         "end_offset":4,
         "type":"SYNONYM",
         "position":1
      },
      {  
         "token":"ccc",
         "start_offset":0,
         "end_offset":4,
         "type":"SYNONYM",
         "position":1
      }
   ]
}

говорящая, что при поиске фразы aaa также будет искаться bbb и ccc

 

Литература

1. https://gist.github.com/clintongormley/4095280

2. http://bitsandbites.me/blog/2014/04/08/elasticsearch-synonyms/

VirtualBox, Android и портретный режим

Если вам в силу каких-то причин необходимо изменить разрешение экрана в связке VirtualBox + Android x86, то делается это так:

1. Добавляем нужный режим в конфиг VirtualBox командой:

VBoxManage setextradata "Android" "CustomVideoMode1" "480x800x16"

где Android" имя виртуальной машины.

2. При запуске андроида, в меню вариантов загрузки выбираем опцию, которая позволяет нам изменить параметры запуска, где дописываем в параметры запуска опцию:

vga=yes

Ну а дальше грузимся, видим список режимов, выбираем нужный и радуемся.

wshom.ocx error (EventID 1000 in Application log)

На некоторых домен-контроллерах в журнале приложений постоянно возникала ошибка 1000 со следующими описаниями:

Faulting application cscript.exe, version 5.7.0.18005, time stamp 0x49e01e5f, faulting module ntdll.dll, version 6.0.6002.18005, time stamp 0x49e03821, exception code 0xc00000fd, fault offset 0x0004a4d2, process id 0x87d0, application start time 0x01cc114200749b48.

Faulting application cscript.exe, version 5.7.0.18005, time stamp 0x49e01e5f, faulting module wshom.ocx, version 5.7.0.18005, time stamp 0x49e03856, exception code 0xc00000fd, fault offset 0x0000df97, process id 0x84e8, application start time 0x01cc1142b346a8f3.

 

Содержимое ключа состояло в огромном количестве записей вида:

Failed to create object 'McActiveDir.ActiveDirectory'.This is an unexpected error.
The error returned was 'ActiveX component can't create object' (0x1AD)
Failed to create object 'McActiveDir.ActiveDirectory'.This is an unexpected error.
The error returned was 'ActiveX component can't create object' (0x1AD)
Failed to create object 'McActiveDir.ActiveDirectory'.This is an unexpected error.
The error returned was 'ActiveX component can't create object' (0x1AD)
Failed to create object 'McActiveDir.ActiveDirectory'.This is an unexpected error.
The error returned was 'ActiveX component can't create object' (0x1AD) 

Очистка данного ключа устраняет ошибку и как результат, возникающее событые с номером 1000.

 

Проблема с инсталяцией Android SDK

При попытке установить Android SDK, инсталятор в упор не видаи JDK. Вообще. Решение оказалось очень простым – на странице, где сообщается о том, что JDK отсутствует, надо нажать back, ну а потом снова next. И тут чудесным образом JDK виден….

Как я ставил OS X 10.6.6 Snow Leopard.

Захотелось мне написать программку для  iPhone. Для начала был куплен iPod touch 4, который  в общем-то является iPhone за исключением отсутствия в нем GPS и GSM модуля.  Учитывая что в нем есть Wi-Fi работать с сетью можно, а какой там протокол ниже IP это уже дело третье, так низко опускаться я в модели OSI я пока не собираюсь. 

Read More

xorg на FreeBSD – не работает клавиатура и мышь

Если сразу после установки xorg клавиатура и мышь не работает, а в логах xorg можно увидеть сообщение “сannot locate a core keyboard device”, то надо добавить в /etc/rc.conf строчку
hald_enable=”YES”
При следующей перезагрузке или после ручного старта hald клавиатура и мышь в xorg должны заработать.

Создание Менеджмент пака

В предыдущей заметке я рассказал как включать логирование информационных событий о печати в операционных системах семейства Windows. Теперь я расскажу что же с этими событиями можно делать.  Ответ очень прост – их надо собирать и на основе их создавать отчеты. Собирать можно разными способами, один из них это использование для данной цели SCOM 2007.  Конфигурация SCOM описывается в менеджмент-паках, и процесс создания менеджмент-пака для сбора статистики использования принтеров показан в нижеприведенном видео.

 

Скачать Менеджмент-пак

Включение логирования событий от диспетчера печати

Для простейшего анализа кто что печатает можно включить логирование информационных событий печати. И тогда в журнале событий будут появляться события с данными о принтере, количесве напечатанных листов, названиями документов. Выглядит такое событие так:

Как оказалось включение логирования данного события принципиально отличается в в редакциях Windows 7/2008 R2 и более ранних. На картинке показано событие из Windows Server 2008 R2.
Отличия следующие: �
1. Номер события был 10, стал 307;
2. Журнал был System, стал Microsoft-Windows-PrintService/Operational;
3. Включаось логирование события в свойствах диспетчера печати, теперь в свойствах соответствующего журнала.

Для включения логирования данного события в Windows Server 2008 R2 необходимо сделать следующее:

Server Manager->Diagnostics->Event Viever->Applications and services Logs->Microsoft->Windows->Microsoft-Windows-PrintService/Operational и нажать Enable Log
Либо установить ключ реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows\CurrentVersion\WINEVT\Channels \Microsoft-Windows-PrintService/Operational-Enabled равным 1.

Для включения логирования данного события в Windows Server 2003 необходимо сделать следующее:
Start-Settings->Control Panel->Printers and Faxes File->Server Properties->Advanced и установить флаг “Log spooler information events
Либо установить ключ реестра: HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Control \Print\Providers -> EventLog
равным 7.

Алерт – Root Management Server Unavailable

Появлялся у меня с завидной периодиностью алерт Root Management Server Unavailable, хотя вроде все работает. Для избавления от него было проледано слеюующее:

1. Regedt32
2. Locate HKEY_LOCAL_MACHINE -> SOFTWARE -> MICROSOFT -> MICROSOFT OPERATIONS MANANGER -> 3.0 -> SDK SERVICE
3. Right click – New Key
4. Enter “RHS Watcher”
5. Right click “RHS Watcher” -> New -> DWORD
6. Enter “MinutesToWaitBeforeAlerting”
7. Double-click on “MinutesToWaitBeforeAlerting” and enter value of 5
8. Close regdt32 and open Services.msc
9. Restart OpsMgr Config Service, OpsMgr Health Service, and OpsMgr Health Service

Идея не моя, взято отсюда – http://it.peterspowerblog.com/2008/09/04/root-management-server-unavailable.aspx

Однако данные действия не помогли мне избавиться от ошибки. Далее было найдено решение зачем-то удалить сетевые устройства, у меня одно такое было, которое не мониторилось – удалил, не помогло. После чего была найдена статья http://blogs.technet.com/b/kevinholman/archive/2009/11/10/29106-event-on-rms-index-was-out-of-range-wait-what.aspx Действительно в логе был Event с ID=29106, после удаления 2-х агентов проблема не решилась. В итоге проблема решилась проверкой времени на RMS и SQL серверах. На SQL сервере время отличалось от доменного на 2 минуты. Поле принудительной синхронизации времени командой net time /domain:domain /set проблема исчезла.