LINUX.ORG.RU

Сообщения aido

 

Не до конца определенные объекты в Python3

Всем привет!

Ищу способ сделать конструктор класса обработчика события каррируемым. Звучит достаточно дико для людей, знакомых с ООП, но суть примерно в этом. Если кратко, то http-серверу мне надо передать класс обработчика запросов (у которого должно быть 3 параметра). Таких серверов, имеющих дело с одной БД, должно быть штуки 3, работающие на разных портах. Соответственно, я не хочу в каждом конструкторе писать один и тот же код соединения с БД, а хочу передать параметром в конструктор обработчика само соединение с БД (pymysql) в соответствии с канонами Dependency Injection. Проблема в том, что для написания этого кода вероятнее всего должны понадобиться placeholder-ы (по крайней мере, в С++ было бы так), для того, чтобы сказать, какие аргументы мы передаем дальше на обработку, а какие - используем сейчас.

В общем, я хочу примерно такой код:

class ServerHandler(BaseHTTPRequestHandler):
    def __init__(self, connection, a,b,c)
...

def run():
    conn = pymysql.connect(host=LOCALHOST, user=DB_USER, 
        passwd=DB_PASS, db=DB_NAME)
    server_address = (LOCALHOST, PORT)    
    httpd = HTTPServer(server_address, ServerHandler(conn, ...))
    httpd.serve_forever()
    conn.close()

 , ,

aido
()

Kernel panic в конце загрузки

Всем привет!

Обновил прошивку платы xilinx zynq (сменил битстрим), попробовал загрузиться - вышло вот такое в самом конце загрузки:

VFS: Mounted root (nfs filesystem) on device 0:11.
devtmpfs: mounted
Freeing unused kernel memory: 200K (405b3000 - 405e5000)
Unhandled fault: imprecise external abort (0x406) at 0x36ffd880
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000007
([<40008560>] (gic_handle_irq) from [<400117c0>] (__irq_svc+0x40/0x74))4)
7f60: 40618fac 40618fac 40419e70 00000000 00000008 405e7f88 4005c70c 403100c8
---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x000000071c4)

Подумал, что из-за неверных адресов в device-tree, поправил их, но все равно не помогло.

Из-за чего может умереть init после своего исполнения?

Код инита:

#!/bin/sh
# devtmpfs does not get automounted for initramfs
/bin/mount -t devtmpfs devtmpfs /dev
exec 0</dev/console
exec 1>/dev/console
exec 2>/dev/console
exec /sbin/init $*

Примечательно, что оно работало на прошлой конфигурации железа.

 , , ,

aido
()

Взгляд в будущее

Всем привет!

Вероятно, на ЛОРе уже подобные темы были, но спрошу еще раз, ибо время идет.

Кто что считает по поводу перспективности изучения тех или иных ЯП и технологий? Например, изначально был C (ну не совсем изначально, но всякие АЛГОЛы и прочее сейчас почти вымерло, кроме асма и фортрана) и он до сих пор является основой линукс. Маловероятно, что C будет заброшен, так как под линукс уже очень много чего написано и ядро работает сносно, а также прекрасно портируется под многие архитектуры. Соответственно, C если и не будет фаворитом рынка ПО, то по крайней мере не вымрет опять же из-за постоянно появляющихся устройств.

Потом появился C++, который во многих аспектах улучшил C и стал основой для таких платформ как QT (чья смерть тоже маловероятна в ближайшие лет 5-10) и огромного количества других ООП-платформ.

Эту историю развития ЯП можно раскатать хоть на целую лекцию, но вопрос-то всегда оставался одним и тем же: что более живуче и почему? Ясно, что будут ответы вида «зависит от области применения». Но не стоит забывать, что база многих ЯП плюс-минус одна и та же и является вопросом времени изучения. Например, мы были бы хреновыми прогерами, если бы не знали важных структур данных (дерево, список, и т.д.), основ теории алгоритмов (оценка сложности) и паттернов программирования. К тому же, если упоминается про область применения, то встает вопрос: а какая область применения будет более актуальна в ближайшие 5-10 лет?

Подобные вопросы меня начинают мучить после того, как в моем окружении всё чаще начинают употреблять неизвестные мне слова: Nagios, Julia, Helpdesk, Docker, Node.js, и т.д.

Базовыми вопросами, соответственно являются: нахера оно мне надо и стоит ли оно времени изучения?

 ,

aido
()

Nginx + XML

Всем привет!

Можно ли настроить nginx на обработку кастомных запросов от мобильного приложения? К примеру для повышения скорости загрузки мобильного приложения не нужно тянуть из сети оформление окон/страниц, а только diff по обновлениям и основные данные после авторизации. Да и сам формат данных обычно упрощенный, из-за чего вся обвязка html-тегов не является необходимой.

 

aido
()

Gdb, как вытащить исходники?

Всем привет!

Положим, у меня есть некий нестрипнутый файл с отладочными символами. Можно ли из него достать исходный код или некое его подобие?

 

aido
()

Libxml2 xi:include C/C++

Всем привет!

А libxml2 сама умеет подтягивать файлы, прописанные в xi:include, а так же понимать все стандартные опции? Глянул на оф.сайте несколько примеров, но не нашел, чтобы оно понимало этот флаг.

 , ,

aido
()

Yet another Eclipse-podelie from TI

Всем привет!

Кто-нибудь здесь имел дело с Code Composer Studio (CCSv6)? Если да, то скажите, как в режиме дебага запустить на плате хотя бы Bare-Metal Hello world из стандартных примеров. Если напрямую делать (Создать проект -> Скомпилировать -> Debug), то выдает «a data verification error occurred file load failed». Вот здесь говорится нечто пространное, что надо бы написать linker script, но и с ним появляется та же ошибка. Также, один и тот же linker_script.cmd работает (сборка проходит успешно) в CCSv6, но не может быть подключен к обычному проекту если собирать руками (arm-linux-gnueabihf-gcc main.o -T linker_script.cmd -o hello_world).

Надеюсь, вам цель моя ясна - запустить в режиме дебага на плате Hello world и увидеть через minicom эти слова. Каким именно образом это делать - пофигу, но лучше из консоли. Ах да - плата из серии C66xx.

 ,

aido
()

Виртуальные деструкторы

Всем привет!

В интернетах пишут, что для того, чтобы не было утечки памяти при наследовании, необходимо деструкторы всех предков делать виртуальными. С другой стороны, архитектура может быть достаточно гибкой и от части классов, которые ранее казались конечными (самые последние производные классы), придется еще раз наследоваться, расширяя функционал. Мало ли что в голову заказчикам и маркетологам взбредет. Каковы будут последствия того, что все деструкторы всех классов всегда делать виртуальными (за исключением случаев, когда понадобится чистый виртуальный деструктор)?

Такой код у меня корректно отработал

#include <iostream>

using namespace std;

class A
{
	public:
		A(int a) : a(a){cout<<a<<endl;}
		virtual ~A() =0;
		
	private:
		int a;
};
A::~A()
{
	cout<<"~A"<<endl;
}

class B : public A
{
	public:
		B(int b) : A(b-10), b(b){cout<<b<<endl;}
		virtual ~B(){cout<<"~B"<<endl;}
		
	private:
		int b;
};

class C : public B
{
	public:
		C(int c) : B(c-10),c(c){cout<<c<<endl;}
		virtual ~C(){cout<<"~C"<<endl;}
		
	private:
		int c;
};

int main()
{
	A* f=new C(30);
	delete f;
	C g(67);
	return 0;
}

 

aido
()

sendEmail. проблемы с Perl-ом

Всем привет!

Вот такой вывод команды:

$ sendEmail -f from@gmail.com -t to@mail.ru -u "test message" -m "hello" -o tls=yes -s smtp.gmail.com:587

invalid SSL_version specified at /usr/share/perl5/IO/Socket/SSL.pm line 368.

Система: Lubuntu 15.04. Perl 5.20.

В инете информации по этому багу не нашлось. У кого-нибудь было? Как лечили или какие аналоги можете посоветовать для отправки почты?

Желательна также поддержка отправки из консоли с microsoft exchange. Видел это, но вроде как мелкомягкие в 2015 новую версию сервера выпустили, потому хз, поломался ли DavMail после этого обновления.

 ,

aido
()

замена символов

Всем привет!

А как при помощи стандартных средств линукса заменить некоторое слово в файле на набор строк, которые читаются из другого файла?

 , , ,

aido
()

Шаблонорезка С++

Всем привет!

Я тут как-то искал какую-нить прогу, которая в CLI-режиме умеет целые проекты создавать, навроде IDE. Не нашел (видимо, плохо искал) и накидал на коленке вот такой велосипед. Баги не исключены.

Пользоваться этим чудом довольно просто:

$ cp ~/projects/dummy ~/projects/myprj
# правим файлик ~/projects/myprj, выставляя основные свойства проекта (умеет пока только cli)
$ cpprj ~/projects/myprj
# переходим в директорию с проектом и накидываем скриптик с архитектурой приложухи из строчек вида:
cclass -dc -dd -dm child par1 par2 par3 -v "int **l; std::string k; struct d r;"
# опции следующие:
# -dd - удалить дефолтный конструктор
# -dc - удалить конструктор копирования
# -dm - удалить конструктор перемещения
# дальше идет имя создаваемого класса и список его родителей
# -v [variables] - вписывает в private-секцию все переменные из списка

Программа далека от совершенства и не претендует на лавры UML (скорее - на лавры деревянной шайтан-коробки). Vim не до конца настроен (конфликтует автодополнение от youcompleteme и snippets). если кто подскажет, как заставить его давать список автодополнений, включая вставку сниппета - тому огромная благодарность. В общем, кому надо - берите, кто хочет поправить - пишите мне на почту (вроде бы она открыто показывается на сайте).

P.S.: Спасибо xaizek-у за консультацию по sed.

 , , , ,

aido
()

Объясните, почему не работает этот скрипт как должен?

Всем привет!

Кто-нибудь может объяснить, почему результаты работы этого кода именно такие?

set -e
args=("$@")
dd=0                                                                            
dc=0                                                                  
dm=0                                                                 
declare -a array                                                                                            
for opt in $args; do                                                                                          
    if [[ "$opt" -eq "-dd" ]]; then                                                                           
        dd=1                                                                                                  
        echo "dd"                                                                                             
    elif [[ "$opt" -eq "-dc" ]]; then                                                                         
        dc=1                                                                                                  
        echo "dc"                                                                                             
    elif [[ "$opt" -eq "-dm" ]]; then                                                                         
        dm=1                                                                                                  
        echo "dm"                                                                                             
    else                                                                                                      
        array[${#array[*]}]="$opt"                                                                        
        echo "$opt"                                                                                           
        echo ${array[@]}                                                                                    
    fi                                                                                                        
done

$ ./myscript -dm -dc -dd arg1 arg2
dd

Ожидалось, что скрипт прочитает все флаги, которые ему переданы и все остальные аргументы скинет в другой массив, но, как видно, после первого if цикл заканчивается.

 ,

aido
()

vim баг с отступами и сниппетами

Всем привет!

Решил я таки перебраться на vim и выставить для себя удобные сниппеты. Например, для декларации функций внутри класса с doxygen-комментами. Запилил нечто вот такое:

# member function declaration
snippet dfun
    /**
     * \brief ${5}
     * \details ${6}
     * \param ${3:a} - ${7}
     * \return ${8}
     */
    ${4:void} ${1:func}(${2:int} ${3:a});

Если писать dfun с самого начала строки, то все корректно работает (кроме замены в строчке с \param). Если объявлять в классе, то выделение символов дико съезжает и сниппет дико глючит - сразу курсор не в том месте и вместо заполнения полей получается каша.

внимание, вопрос: как сделать, чтобы он работал адекватно - чтобы ${3} заменялось сразу в двух местах и чтобы выделение не съезжало?

И да - я хотел бы вытянуть все правки из [include]/usr/share/vim/addons/snippets/cpp.snippets[/include] кужа-нибудь к себе в $/.vim. Как это правильно прописать в .vimrc, чтобы при *.cpp файлах также подхватывало мои сниппеты из другого файла?

 

aido
()

Latex не видит цвета

Всем привет! Собственно, сабж. Захотелось подсветить строчки в таблице, но выдает вот такую ошибку:

Package xcolor Error: Undefined color model `maroon'

Вот код:

\documentclass[12pt,usenames]{article}
% в преамбуле, чтобы использовать полуторный интервал
\renewcommand{\baselinestretch}{1.5}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\usepackage{colortbl}
\RequirePackage[utf8]{inputenc} 
\usepackage[russian]{babel}

\definecolor{maroon}{cmyk}{0,0.87,0.68,0.32}
\begin{document}
\section{Введение}
\begin{table}[H]
\caption{\label{tab:x}Таблица.}
\begin{center}
\begin{tabular}{|c|c|c|c|}
\hline
 & Второй столбец & Третий столбец & Четвертый столбец\\
\hline
\rowcolor[maroon]{.9} Креативность & $1$ & $1$ & $1$\\
\hline
\rowcolor[orange]{.9} Фантазия & $\pi$ & $\frac{1}{2}$ & $0$\\
\hline
\rowcolor[orange]{.9} ГСЧ & $1$ & $1$ & $1$\\
\hline
\end{tabular}
\end{center}
\end{table}

\end{document}

 ,

aido
()

Octave UTF-8 загрузка файлов

Всем привет!

У нас Octave умеет загружать строковые файлы в UTF-8?

просто надо обработать полтысячи файлов, рассованных по дереву каталогов с известной структурой и потом построить суммарный отчет по ним, который будут лежать в корне. Отчет - в csv, название каждой строки берется из имени поддиректории. По идее, правильная реализация - через find ищем нужные файлы, скармливаем их матлабовскому скрипту, получаем выхлоп, упорядочиваем, записываем в отчет. Если бы не Octave - он вроде как не умеет аргументы командной строки передавать в скрипт (или я не умею читать?). Поэтому я начал извращаться: из октава вызывать find, но на выходе не матрица по строкам, а полотно текста, которое надо парсить, чего у меня пока тоже не вышло сделать. Или извне сформировать имена файлов для обработки и имена выхлопов, загрузить эти списки и передавать в цикле построчно в свою функцию, потом извне обрабатывать выхлопы в отчет, но тут fscanf как-то странно себя повел - не смог в utf8.

Any ideas?

 ,

aido
()

perl. передача нескольких массивов в функцию

Всем привет!

В общем, пробовал вот так (не вышло):

sub load($**)
{
    my ($filename, $x1_ref, $x2_ref) = @_;
    my ($num_str, @x1, @x2);
    open my $file, '<', $filename or die "Невозможно открыть файл: $!\n";
    #do_smth
    close $file;
    $x1_ref = \ @x1;
    $x2_ref = \ @x2;
}

sub use_it
{
    my (@x1, @x2) = @_;
    #do smth
    print @x1;
    print @x2;
}

my (@num_str_array_w,@all_str_w);
load($ARGV[1],@x,@y);
use_it(@x,@y);

Хочется, чтобы load, читая из файла, правильно заполняла массивы, которые потом передавались бы в use_it. В перле я пока не до конца понимаю (от слова совсем), как работают ссылки.

Проблема в том, что из load ничего не возвращается. Зная С++, я понимаю почему (после выхода из функции массив умирает, ссылка остается), но не понимаю, как правильно написать код в перле....

 

aido
()

perl. Конкатенация строк

Всем привет!

Почему вот такой код выдает на экране дичь?

my $temp=@all_str_m[$a-5];
$temp=~s/ /\\ /;
$temp=~s/,//;
"regions_stat/".$temp."/full/man/\n"

на выходе вот так:

/full/man/at/Российская\ Федерация

Как будто перл не понимает, куда ему надо пристыковывать строки и перезаписывает значение.

 

aido
()

ffplay не умеет два раза открывать фб

Всем привет!

Проблема в том, что когда в первый раз запускаю на проигрывание видео через фб ffplay movie.avi, то все норм отображается, а когда второй раз ввожу ту же команду после остановки первой, то выдает вот что:

    Stream #0:0: Video: mpeg4 (Simple Profile) (FMP4 / 0x34504D46), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 259 kb/s, 29.97 fps,c
    Stream #0:1: Audio: ac3 ([0] [0][0] / 0x2000), 44100 Hz, stereo, fltp, 192 kb/s
SDL_OpenAudio (2 channels, 44100 Hz): 
SDL_OpenAudio (1 channels, 44100 Hz): 
No more combinations to try, audio open failed
    nan M-V:    nan fd=   0 aq=    0KB vq=   80KB sq=    0B f=0/0

При этом, другие приложения умеют писать в этот фб. Что не так с ffplay?

Также вопрос - если видео не подходит к размеру экрана, то ffplay меняет размер экрана фб под размер видео. Это нормальная практика (а значит, скейлинг надо впиливать в драйвер фб) или же патология (и тогда искать другой плеер/ копать опции ffplay)?

Также, если fbset-ом выставлять виртуальное разрешение (vxres, vyres), то оно не выставляется (старый размер остается), но при этом ffplay как-то умудряется менять виртуальное разрешение фб. Как выставить новый виртуальный размер фб?

 ,

aido
()

i2c шина при загрузке в какой момент подымается?

Всем привет. собственно, сабж.

Есть проект, который живет на SPI-флэшке. Появилась здравая идея перенести это дело в NFS/TFTP. Так вот - все файлы те же, что и раньше (kernel, devicetree, bitstream). Загрузка идет, но часы, которые сидят за i2cswitch, не загружаются, потому что

dmesg | grep pca
pca954x 0-0074: probe failed

Был изменен только u-boot, для того, чтобы он умел загружаться с NFS. Может ли быть в нем проблема?

ЧЯДНТ?

 , , ,

aido
()

bash частично не видит приложения

Всем привет!

В общем, захотелось поковыряться с nfs, в ней у меня находится rootfs. В целевой платформе прописал PATH как надо, чтобы появились приложения из этой rootfs. Проблема в том, что баш умеет автодополнять по табу, но не исполняет эти приложения:

# mount 192.168.1.100:/home/nfs -t nfs -o nolock /mnt

/mnt# ls -la usr/bin/ffplay 
-rwxr-xr-x    1 root     root        110844 Jun 21 14:25 usr/bin/ffplay

# ffplay 
-sh: ffplay: not found
# /mnt/usr/bin/ffplay 
-sh: /mnt/usr/bin/ffplay: not found

 ,

aido
()

RSS подписка на новые темы