Реклама

воскресенье, 19 марта 2017 г.

Не определяется сетевая карта на Virt2Real на Windows 10

Попала мне тут в руки забавная платка Virt2real. По инструкции, надо просто подключить ее через micro-usb к компу и появится RNDIS интерфейс, через который уде можно общаться. Но не тут то было! При подключении к Windows 10 RNDIS отпределяется как USB-COM переходник.
Решение: руками насильно подсунуть эти драйвера на устройство.

Skype на Windows Xp в 2017 году

Несмотря на то, что на дворе 2017 год, у моего деда все равно стоит невероятно старый комп с ЭЛТ монитором и системником, в котором кипятит воздух старый Celerom на 1,1 ГГц. И управляет всем этим счастьем Windows XP SP2. И в один прекрасный день меня ошарашивают новостью - "Сломался скайп и не заходит в него". 

четверг, 16 марта 2017 г.

База стран, областей и городов всего мира

Для одной из задач было необходимо использовать каталог городов по странам. В итоге был найден чудесный репозиторий https://github.com/x88/i18nGeoNamesDB . Использовал выгрузку в PostgreSQL.
Из минусов можно заметить только то, что если нужны только отдельные страны, то проще развернуть дамп на тестовом сервере, затем настроить Foreign key в таблице городов и регионов до стран и поудалять ненужные страны.
Данные таблицы хорошо использовать с DjangoORM в связке с django-modeltranslation

суббота, 11 марта 2017 г.

Война с DHCP на LWIP+FreeRTOS после генерации проекта STM32Cube

В общем, решил я поднять как-то свой старый китайский девборд под управлением STM32F107VCT и сделать небольшой проект с использованием сети. Причем именно упороться и сгенерировать проект в STM32Cube. Ну и конечно куда без FreeRTOS ? Но вот загвоздка. DHCP включен, FreeRTOS включен адрес на DHCP сервере резервируется, но не подтверждается устройством. Интересно то, что если не использовать RTOS, а просто в бесконечном цикле вызывать сгенерированную кубом функцию MX_LWIP_Process, то все работает. "Значит не работает обработчик сети" - подумал я. В конечном итоге оказалось, что проблема в размере кучи. 

пятница, 1 апреля 2011 г.

Atheros Communication AR8152 на Asus Eee PC 1251 под Linux

Ставил тут всю ночь на недобуку свою Asus Eee PC 1251 великую могучую ArchLinux. Все красиво подоткнул и встала проблема - подключение к сети было невозможно по причине того что сетевой в упор не было видно. Всю ночь проебся, но откопал сработавшее решение.

Сразу упомяну, что версия ядра у меня 2,26 , на других не проверял.

Итак, в выводе lspci упомянулись такие вещи как
03:00.0 Network controller: Broadcom Corporation Device 4727 (rev 01)
04:00.0 Ethernet controller: Atheros Communication AR8152 v2.0 Fast Ethernet (rev c1)
Отлично, значит это то что нужно. На другой машинке подсосал с http://linuxwireless.org/download/compat-wireless-2.6 файл compat-wireless-2.6.tar.bz2, записал его на флешку и выполнил примерно такой список команд.


mount /dev/sdb /mnt
cp /mnt/compat-wireless-2.6.tar.bz2 /root/
cd /root
tar -xjvf compat-wireless-2.6.tar.bz2
cd compat-wireless*
scripts/driver-select atl1c
make
sudo make install
 

А потом благополучно перезагрузился

вторник, 1 февраля 2011 г.

Выбор из строки числа в формате Exel

Как известно, в Экселе иногда встречается запись числа типа

1,566653e5


Где e - это у нас степень числа. Так вот в одном проекте мне нужно было выбрать из строки такое число. Решил эту задачу регуляркой. Сама регулярка конечно моет и не блещет идеалом и сам код можно улучшить, но что есть. Писал на Qt4 C++

long double convert(QString in)
{
QRegExp rx("([\\-]{0,1}[0-9]{1,}[\\.\\,]{0,1}[0-9]{0,})(|\\e)([\\-]{0,1}[0-9]{0,})");
if(rx.indexIn(in)!=-1)
{
double cel=rx.cap(1).toDouble(); // целая часть
if(rx.cap(2).size()!=0)
{
if(rx.cap(3).size()>0)
{
long double res=pow(cel,rx.cap(3).toDouble());

return res;
}
else
{
QMessageBox::critical(0,QString("Error"),QString("Set a in true format"));
return -100;
}
}
else
{

return cel;
}
}
return in.toDouble();
}

среда, 1 декабря 2010 г.

Показ изображений в зависимости от разрешения экрана

Встречается иногда такая подлая вещь, когда изображение, которое надо вывести на экран, оказывается слишком большим и рвет ко всем чертям дизайн. Как можно обойти эту проблему? Можно пойти по жутко-быдлометоду, как задание параметров height и width у изображение. Например

<img src="images/image.gif" width="100px" height="100px">

Да, такой вариант выведет картинку размером 100*100 , только если исходное изображение было с разрешением 500000*500000 и весило стопицот мегабайт, то оно будет предварительно загружено (все стопицот мегабайт) и потом показано как 100*100. Вывод, ради ускорения загрузки страницы и экономии трафика, надо нарисовать срипт, который будет ужимать изображение до приличных параметров. Ну или, например, нам надо будет выводить картинку в зависимости от разрешения экрана пользователя. Те кто пишет на JavaScript или Java конечно предложат несколько вариантов решения этой проблемы, брызгая слюной, что на этих языках такая проблема решается проще, понятнее и шустрее. Ктулху с ними, мы пишем на PHP. Я столкнулся с такой проблемой, когда писал сайт для одной мебельной компании. И в итоге получился скрипт, который можно использовать для вывода изображений по заданным размерам или же в зависимости от разрешения экрана пользователя.

<?php

session_start();

$width=(!empty($_GET['w']))?(int)$_GET['w']:false;

$height=(!empty($_GET['h']))?(int)$_GET['h']:false;

if(!$width)

{

$width=(!empty($_SESSION['w']))?((int)($_SESSION['w'])):800;

}

if(!$height)

{

$height=(!empty($_SESSION['h']))?((int)($_SESSION['h'])):800;

}

if($width<0) $width*=-1;

elseif($width==0) $width=800;

if($height<0) $height*=-1;

elseif($height==0) $height=800;

$def_folder="portfolio"; //стандартная папка с изображениями

$folder=(!empty($_GET['fd']))?(trim($_GET['fd'])):$def_folder;

$file=(!empty($_GET['f']))?(trim($_GET['f'])):"";

if(strlen($file)==0 || !file_exists($folder."/".$file))

{

$im=imagecreatefromgif("images/noimage.gif"); //изображение, если ничего нет файла

imagegif($im);

}

else

{

$im;

create($folder,$file,$im);

$imwidth=imagesx($im);

$imheight=imagesy($im);

$width=(int)($width*0.8);

$height=(int)($height*0.8);

if($imwidth>$width || $imheight>$height)

{

$rw=$imwidth-$width;

$rh=$imheight-$height;

if($rw>$rh)

{

$k=$width/$imwidth;

$height=(int)($imheight*$k);

}

else

{

$k=$height/$imheight;

$width=(int)($imwidth*$k);

}

$res=imagecreatetruecolor($width,$height);

imagecopyresampled($res,$im,0,0,0,0,$width,$height,$imwidth,$imheight);

imagedestroy($im);

out($file,$res);

imagedestroy($res);

}

else

{

out($file,$im);

}

}

function create($folder,$file,&amp;$im)

{

$patch=$folder."/".$file;

$type=strrchr($file,'.');

switch($type)

{

case ".jpg":

case ".jpeg":

case ".JPG":

case ".JPEG": $im=imagecreatefromjpeg($patch); break;

case ".png":

case ".PNG": $im=imagecreatefrompng($patch); break;

case ".gif":

case ".GIF": $im=imagecreatefromgif($patch); break;

default: $im=imagecreatefromwbmp($patch);

}

}

function out($file,&amp;$im)

{

$type=strrchr($file,'.');

switch($type)

{

case ".jpg":

case ".jpeg":

case ".JPG":

case ".JPEG":

header("Content-type: " . image_type_to_mime_type(IMAGETYPE_JPEG));

imagejpeg($im,'',100);

break;

case ".png":

case ".PNG":

header("Content-type: " . image_type_to_mime_type(IMAGETYPE_PNG));

imagepng($im);

break;

case ".gif":

case ".GIF":

header("Content-type: " . image_type_to_mime_type(IMAGETYPE_GIF));

imagegif($im);

break;

}

}

?>

Samsung S24E310HL Store mode

Случайно прижал кнопки управления монитором и монитор перешел в режим Store mode. Монитор раз в 10-20 секунд моргает и внизу показывается ре...