четверг, 14 февраля 2013 г.

Mono в Visual Studio 2010

Оказывается, в Visual Studio 2010 при написании программ можно использовать Mono, вместо Framework .NET. Как это сделать написано тут.

Отмена запроса PostgreSQL

Если программа вызовит долговыполняющийся запрос к PostgreSQL, то даже её закрытие не прекратит выполнение этого запроса. Особенно это актуально для REINDEX или FULL VACUUM, которые кроме того что долго выполняются, еще и блокируют таблицу.
Для отметы такого запроса, нужно вызвать другой запрос:
SELECT pg_cancel_backend(procpid) as x 
FROM pg_stat_activity 
WHERE current_query like 'REINDEX%';

среда, 13 февраля 2013 г.

WMI на C#

WMI (Windows Management Instrumentation) - это одна из базовых технологий для централизованного управления и слежения за работой различных частей компьютерной инфраструктуры под управлением платформы Windows. (Википедия)

Для работы с WMI Framework .NET предоставляет сборку System.Management.dll и одноименным неймспейсом.

Работа с WMI начинается с класса ManagementScope, который предназначен для подключению к серверу WMI, как локального компьютера, так и удаленного. Основной конструктор этого класса принимает 2 параметра:
  1. path - путь для подключения;
  2. options - параметры подключения.
Параметр path обычно: string.Format(@"\\{0}\root\cimv2", host). Пусть содержит хост компьютера к которому нужно подключиться, и путь неймспейса WMI (имеет иерархическую структуру). Имеется много нейсмпейсов, но наиболее используемый cimv2.
Параметр options содержит следующие поля:
  • Username - имя пользователя Windows.
  • Password/SecurePassword - пароль пользователя Windows.
  • Другия параметы - не использовал.
После создания объекта, для того чтобы подключения к WMI нужно вызвать метод Connect.
Исходный код подключения к WMI:
ConnectionOptions options = new ConnectionOptions();
options.Username = username;
options.Password = password;
scope = new ManagementScope(string.Format("\\\\{0}\\root\\cimv2", host),
    options);
scope.Connect();
Свойство IsConnected возвращает состояние подключения.
Важно: класс ManagementScope не имеет метода для разрыва связи, для того чтобы переподключиться, ножно повторно вызвать метод Connect.

После создания подключения, мы можем начать запрашивать различную информацию от WMI.
Для этого существует класс SelectQuery. В конструкторе ему передается строка с SQL-подобным запросом. После этого мы можем использовать объект класса SelectQuery для передачи его в конструктор класса ManagementObjectSearcher.

SelectQuery query = new SelectQuery(@"Select
    DeviceID, FreeSpace, Size, DriveType from Win32_LogicalDisk");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope,
    query);
ManagementObjectCollection queryCollection = searcher.Get();
foreach (ManagementObject mo in queryCollection) {
    Console.WriteLine("DeviceID: {0}", mo["DeviceID"]);
    Console.WriteLine("FreeSpace: {0}", mo["FreeSpace"]);
    Console.WriteLine("Size: {0}", mo["Size"]);
    Console.WriteLine("DriveType : {0}", mo["DriveType "]);
}

Таким вот нехитрым способом можно получить с компа очень много системной информации.

понедельник, 11 февраля 2013 г.

JavaScript: объект select

Как известно объект select представляет собой выпадающий список. Он содержит список параметров (который и выпадает при нажании на него), доступ к которому можно получить через свойство options. Количество элеменов можно получить из свойства length самого объекта select. Свойство же size возыращает и задает количество отображаемых на странице элементов (не в выпадающем списке, а именно на странице). Я тестил это свойство в Chrome и при заничении size > 1 отображались все элементы списка.

Если необходимо чтобы список поддерживал множествнное выделение нужно присвоить свойсту multiple значение true.

Индекс текущего выбранного элемента содержится в свойстве selectedIndex. Если выбран режим со множественным выдылением, то это свойство содержит индекс первого выделенного элемента.

Так же имеется свойство form, которое ссылается на форму, в которой находится объект select.

Вставить новый элемент в список можно как с помощъю метода add самого select'a, так и с помощью метода add свойсва options.
selectObject.add(option,before)

Удаляются элементы списка методом remove:
selectObject.remove(index)

Также стоит напомнить как оформляеся select в HTML:


PS: подробная информация с примерами об объекте select находится сдесь.

пятница, 8 февраля 2013 г.

OpenSource: JSIL - компилятор C# в JS

Нашел в инете 3 основный проека по компилированию C# в JS:
Script# я тестил давно, мне не понравился :-) Не доделанный какой-то.
Про SharpKit пишут хорошие отзывы, но он платный.
А вот с JSIL можно поэксперементоровать. Он OpenSource и генерит вполне читаемый и логичный JS. На сайте есть возможность в онлайне скомпилировать любой код и увадеть что получится.
Написано что JSIL позволяет компилировать XNA игры и приведено нескольно демок. Но это надо еще проверить... У меня есть одна простая игра на XNA, будет время попробую скомпилировать.

Доступ к PostgreSQL через сеть

По умолчанию БД PostgreSQL настроина на доступ к ней только локально. Для того чтобы сделать доступной БД по сети нужно изменить настройку host в файле pg_hba.conf в каталоге БД. По умолчанию там стоит:
host    all             all             127.0.0.1/32            md5
Для того чтобы к БД можно подключиться в любого IP, намените эту настройку на следующую:
host    all             all             0.0.0.0/0            md5
или укажите нужную вам масту подсети.