вторник, 23 сентября 2014 г.

Добавляем SD карту в виртуальную машину в Oracle VirtualBox

  1. Запускаем cmd с правами администратора
  2. Выполняем: wmic diskdrive list brief
    Получаем что-то похожее на это:
    C:\Users\Administrator>wmic diskdrive list brief
    Caption                      DeviceID            Model                        Partitions  Size
    WDC WD7500BPKT-75PK4T0       \\.\PHYSICALDRIVE0  WDC WD7500BPKT-75PK4T0       3           750153761280
    O2Micro SD SCSI Disk Device  \\.\PHYSICALDRIVE1  O2Micro SD SCSI Disk Device  1           3964584960
    
    Находим нашу карту. Нас интересует ее DeviceID: \\.\PHYSICALDRIVE1
  3. Перемещаемся в директорию с VirtualBox (C:\Program Files\Oracle\VirtualBox\):
    cd C:\Program Files\Oracle\VirtualBox
    
  4. Теперь создадим ссылку на SD-карту:
    VBoxManage internalcommands createrawvmdk -filename "%USERPROFILE%/Desktop/sdcard.vmdk" -rawdisk "\\.\PHYSICALDRIVE1"
    

    Таким образом мы создали файл (sdcard.vmdk, на рабочем столе), который и есть наша ссылка на SD-карту.

  5. Теперь добавляем полученную ссылку в виртуальную машину Открываем Settings для нужной ВМ. Идем в Storage -> Controller: SATA -> (клик правой клавишей) Add Hard Disk -> Choose Existing Disk И выбираем файл на рабочем столе который мы создали в предыдущем шаге.
Запускаем машинку.... и... вуаля!

пятница, 10 сентября 2010 г.

Событие изменения свойства в Javascript

Довольно частая задача - запустить какие-то действия в скрипте в ответ на изменение некоторого свойства объекта. Подумав в очередной раз над этой задачей написал небольшой класс реализующий это поведение.

function Property (param_value) {
var value = param_value;
var delegates = new Array();
var RiseChangedEvent = function () {
$.each(delegates, function (index, item) {
item(value);
});
};
this.Property = function () {

this.SetChangedEventDelegate = function (delegate) {
delegates.push(delegate);
};
this.Get = function () {
return this;
};
this.Set = function (param_value) {
value = param_value;
RiseChangedEvent();
};

};
return new this.Property();
};

delegates - коллекция ссылок на функции обратного вызова.
Подписываемся функцией - SetChangedEventDelegate(),


Использование:


event.finished = new Property(event.finished);
//Заменяем переменную свойством (объектом класса Proerty)
event.finished.SetChangedEventDelegate(function (value) {
input.attr("checked", value);
});
//Подписываемся на событие изменения свойства
//Теперь все обращения только через get и set
var input = event.finished.Get();
event.finished.Set(this.checked);

воскресенье, 2 мая 2010 г.

Kooboo CMS. Процедура обновление версии

В Kooboo предусмотрена удобная система обновления версии СМS. Но как и для всего, остального что связанно с Kooboo по этой теме крайне мало информации. В этой заметке я постараюсь кратко описать процедуру.

Для начала необходимо скачать девелоперскую версию Kooboo и версию до которой необходимо обновить сайт.

Скачанную версию CMS распаковываем в отдельную папку. После чего необходимо собрать и запустить проект Kooboo.Upgrade Tool. В появившемся диалоге выбираем размещение старой версии сайта, размещение новой версии и запускаем обновление.

Вот собственно и все.

суббота, 12 декабря 2009 г.

Прекрасная статья о том как упаковывать dll в один exe файл.

Single Assembly Deployment of Managed and Unmanaged Code

В кратце:

Добавляем нужную dll сборку как emebeded resource. Затем в статическом конструкторе класса, где она нужна (у меня это статический класс оборачивающий функции этой dll) прописываем вызов следующего метода:

namespace MyLib
{
public class MyClass
{
static MyClass()
{
ResourceExtractor.ExtractResourceToFile("MyLib.ManagedService.dll", "managedservice.dll");
ResourceExtractor.ExtractResourceToFile("MyLib.UnmanagedService.dll", "unmanagedservice.dll");
}

...

А это собственно реализация экстрактора:

public static class ResourceExtractor
{
public static void ExtractResourceToFile(string resourceName, string filename)
{
if (!System.IO.File.Exists(filename))
using (System.IO.Stream s = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
using (System.IO.FileStream fs = new System.IO.FileStream(filename, System.IO.FileMode.Create))
{
byte[] b = new byte[s.Length];
s.Read(b, 0, b.Length);
fs.Write(b, 0, b.Length);
}
}
}

воскресенье, 9 августа 2009 г.

Танцы с бубнами.

Существует некоторый класс простых багов, которые могут запросто превратиться в головную боль, привести к срыву всех сроков и довести до нервного истощения. Чаще всего оказывается, что решение лежало на поверхности.

Вот например кусок XAML, который мучал меня почти сутки



Если попытаться записать ему DataContext из CodeBehind, вот так:

MainChart.DataContext = Sale.Data;

то можно поймать совершенно изумительное ВэллНоун исключение:
...................................................
.................................
................

Вот так всегда. Даже попытка повторить его не удалась. Спрашивается, с чем я боролся то сутки? Танцы с бубнами, да и только...

В общем исключение было следующим: "Collection was modified; enumeration operation may not execute". Как я его заборол не понимаю до сих пор. Код, вроде как, тот же. Раньше не работал, теперь работает.

Возможно нужно было убрать установку DataContext из шаблонов в XAML и все. Еще один вариант - необходимо явно указывать Binding на родительские элементы. А те в свою очередь необходимо инициализировать из XAML каким-то начальным значением. Что-то из этого работает.

среда, 29 июля 2009 г.

Странный баг в .Net Silverlight RIA Services

Портируя Silverlight приложение на .Net RIA Services столкнулся с неприятным багом, который сейчас и попробую описать.

Имеется некий метод TotalDueByRegionId который принимает в качестве параметра с именем inputName строку ( раньше принимал число, но баг повторяется независимо от этого ).
И вот необходимо вызвать его из XAML кода контрола, что я и делаю следующим образом, пытаясь передать ему параметр:











Запускаем код и отлавливаем в вызов TotalDueByRegionId в сгенерированом коде:



В этом месте инструкция по адресу 03Bh передает значение в переменную this._value



Следующая инструкция устанавливает эту же переменную в null:



Дизасемблер IL кажет нам следующие:


Что явно не вяжется с тем, что происходит в реальности. Я в тупике. Как жить дальше?

UPD: Запостил на официальный форум Silverlight: http://silverlight.net/forums/p/115386/260071.aspx#260071

UPD 2: Решение: Когда необходимо просто передать параметр в запрос - надо использовать тип parameter вместо controlparameter. Controlparameter позволяет забаиндиться к свойствам других контролов. (Надо меньше тупить... Надо меньше тупить... и чаще отдыхать)

пятница, 22 мая 2009 г.

У меня программерская проблема. Некоторые вещи очень медленно компиляться. И за время компиляции я успеваю зачитатьс чьим нибудь блогом.