psilogic: (wpriz)
Мой френд [livejournal.com profile] leo_sosnine поднял тему о девушках-программистках (и вообще девушках-инженерах). Вроде бы таковые время от времени случаются, но желающих мало. Причем, не в смысле мало желающих нанять программистКУ, а в смысле мало желающих стать программистКОЙ.

По этому поводу у меня к девушкам из френд-ленты вопрос.

Представьте себе, что вам сейчас лет 16-18 и вы выбираете себе будущую профессию. И в числе прочего от кого-то из родственников/близких вам поступило предложение учиться (и стать потом) программисткой. Допустим, конкретно хардкорной кодершей (а не в тестировании/поддержке/настройке/документации).

Допустим, вам честно расписали и бонусы этой профессии (разнообразный ассортимент неглупых мужиков вокруг; нежесткий рабочий график; отсутствие суровой дисциплины; относительно высокая з/п), и минусы (постоянная необходимость переучиваться, причем, самостоятельно; целыми днями морщить мозг; мало подружек, чтобы потрепаццо; и совсем нет клиентов, чтобы, опять же, потрепаццо; хамоватый начальник-ботан, требующий результат, и хамоватые коллеги-ботаны, которые не прочь с вами пофлиртовать, но не имеют времени, чтобы делать работу за вас или учить вас - даже если вдруг такая идея взбредет в вашу головку).

Так вот, мой вопрос: какие унутренние соображения заставят вас ОТКАЗАТЬСЯ от этой идеи и предпочесть другую профессию?
psilogic: (croco)
Пердуперждение: эта запись вряд ли будет понятна непрограммистам. А на программистов может навеять скуку... или не навеять.

Иногда при кодировании случаются ситуёвины, напоминающие детектив. Вчера такое вот случилось.

Ковыряюсь я в своем звуковом редакторе "Bard". Как полигон для тренировки и освоения разных технологий - очень даже зачетная вещь. Вчера захотелось мне странного: чтобы два преобразования музыкальных файлов шли в параллель.

Преобразования у меня трех типов - built-in, на основе ACM и на основе любимой многими утилиты FFmpeg. Вот о последней и пойдет речь.

Я эту FFmpeg имел в самых разных позах - например, работал прилагаемой к ней с ней библиотекой кодеков через ейное API, собирал саму утилиту как модуль-часть-программы и как отдельную подгружаемую на runtime DLL-ку с кастрированием лишних функций... как-то все не то. И самый последний вид сношений, к которому я прибег, это использование pipe-ов.

Вкратце суть проблемы была такой: на вход одного преобразования подается файл Alice.wav, на выходе ождижается Alice1.mp3. Второе преобразование на вход берет тот же Alice.wav, на выходе - Alice2.mp3.

И вот... запускаю я два преобразования одновременно (с интервалом в пару секунд) и совершенно внезапно программа выдает ошибку: "доступ запрещен, файл: Alice1.mp3". Ну, я, естественно, лезу в стек, и обнаруживаю, что сбойнула функция rename. Кто бы мог подумать, какой длиннющий детектив породит такая ерунда.

Дальше - больше... )
psilogic: (Default)
Сколько пишу .bat-файлы, но с такой хренью не сталкивался. У меня .bat-сценарий случайным образом (т.е. не каждый раз) выдает ошибку access denied при попытке исполнить только что созданную программу или при попытке удалить только что исполненную программу. Выглядит так, как будто программа еще не успела дописаться к моменту запуска и не успела отработать к моменту удаления.

Сам скрипт:


@echo off
:a
copy /B 7z.exe 7.exe >nul
7.exe >nul
del 7.exe >nul
goto a


В консоль выдает ошибки:
Read more... )

Помогите разобраться, пожалуйста :)

Upd: спасибо [livejournal.com profile] metaclass, проблема решена.
psilogic: (Default)
Как программисту мне все время приходится иметь дело с понятием "информация", вот только обычно я работаю с ним на уровне интуиции. Но интуиция - не всегда хорошо, иногда ведь надо и другому человеку объяснить. И в этот момент можно оказаться в положении "умной собачки, которая все понимает, но сказать не может".

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

Я буду перемешивать математические формулы с пояснениями "на нормальном языке", так что надеюсь, что меня поймут и любители формул, и любители объяснений на пальцах.

Итак, информация... )
psilogic: (Default)
Задачка: как оптимизировать такой код, чтобы убрать копи-пасты?
Напрашивается заведение двух функций... а, может, кто-нибудь знает другие трюки?

Read more... )
psilogic: (Default)
Я по ходу дела много раз сталкивался с задачей отрисовки окон без мелькания при перемещении/скрытии/появлении.

Специально подчеркну: речь не идет об устранении мелькания при отрисовке вообще, и про технологию double buffer я, естественно, знаю. Речь идет об устранении мелькания при массовом изменении расположения и видимости окон.

Обычно это относится к child-окнам в пределах одного parent-окна. Например, есть закладка (в Tab Control), на которой десяток кнопок, edit-box-ов и тому подобного, и есть другая закладка, тоже насыщенная небольшими окнами. И вот между этими закладками мы быстро переключаемся (скажем, зажав Ctrl-Tab). Другой вариант: в верхней части диалога имеется combo-box, при прокрутке которого (стрелками или колесом мыши) меняется нижняя часть диалога: какие-то кнопки исчезают, какие-то появляются, какие-то смещаются или увеличиваются в размерах.

При этом возникают разные, иногда достаточно раздражающие эффекты мелькания.

В Windows имеется механизм BeginDeferWindowPos/DeferWindowPos/EndDeferWindowPos, который работает, но не всегда так хорошо, как хотелось бы.

Мне интересно, какие методы используют (если вообще используют) по этому поводу френды-коллеги. Возможно, есть какие-то хорошие методы, о которых я не знаю. Я в конце-концов дошел до создания собственного алгоритма, который жестко минимизирует всяческую перерисовку, и тем самым устраняет мелькание. Алгоритм работает хорошо, но получился достаточно нетривиальным, поэтому мне интересно насчет других подходов.
psilogic: (Default)
Мне тут процитировали классическую задачку для кондовых сишников: написать объявление переменной, которая является "указателем на функцию, на указатель на..." - ну и далее какие-нибудь такие навороты. Знакомо?

Так вот, ежели этот блог читают студенты, которых мучают такими задачками, а также старички, которые решают такие задачки методом тыка, то открою страшную тайну: задачки такие решаются чисто механически. Схема такая:
Read more... )
psilogic: (Default)


libavcodec побежден, правда, для этого пришлось идти через Альпы :) Был взят исходный код от консольной утилиты ffmpeg, ее функция main переименована в ffmpeg_main и стала модулем программы :) Извращение, конечно, но иначе задолбаться можно.

Пришлось сколько-то повозиться, чтобы превратить консольную C-99 standalone программу в C++ гуёвый модуль... но в конце-концов все заработало. Теперь буду красоты наводить. :)

libavcodec

Feb. 16th, 2010 12:37 am
psilogic: (Default)
Камрад [livejournal.com profile] ishc кинул в меня сцылкой на библиотеку преобразования форматов libavcodec. Я про нее раньше уже слышал. Вот и сам попробовал. Мне оно понадобилось для звуковых файлов.

Дальше под катом отзыв. Матерный.

Read more... )

Короче, консольная утилита полезна. А вот как API - маст дай. Разве что найдется кто-то, кто в этом libavcodec-е уже собаку сожрал и поможет. Вот как я собаку сожрал на ACM, так что если у кого какие вопросы - всегда помогу.
psilogic: (Default)
Помнится, кто-то из моих френдов делал крутейшую программу для преобразования звуковых форматов, может, прочтет эту запись. Посоветуйте freeware C/C++ библиотеку для конвертирования? Или хотя бы декодирования (из MP3, MP1, MP2, WMA, OGG). Только не программу, не плеер, а библиотеку.

Сейчас я пользуюсь преобразованием на ACM-драйвере, но он, сцуко, не понимает MPEG Layer-1 и 2. В поставке Window 7 есть файл "C:\Users\Public\Music\Sample Music\Kalimba.mp3", и это похоже именно MPEG Layer-1. Если у кого-то нет W7, тут продублировано: http://psi-logic.shadanakar.org/Kalimba.mp3
Там же есть файл "C:\Users\Public\Music\Sample Music\Sleep Away.mp3" который вообще непонятно что :( Дубль: http://psi-logic.shadanakar.org/Sleep_Away.mp3
psilogic: (Default)
Обновил версию своего локализатора на сайте. В данной версии пофиксен 1 баг и добавлена возможность хранить локализации в ресурсах exe-файла.
psilogic: (Default)
В виндах есть диалог для выбора каталога SHBrowseForFolder. В работе сие позорище выглядит так:



Не буду объяснять, насколько оно неудобно - если разок столкнетесь, то поймете на опыте.

Вместо этого хотелось бы иметь диалог, подобный тем, что дают функции GetSaveFileName/GetOpenFileName. Что-то в таком роде:



Осталось понять, как этого добиться - ведь те функции позволяют выбрать файл, а не фолдер. Под катом решение, опробованное на работоспособность под Win XP и Win 7. Можно прямо копипастить.

Read more... )
psilogic: (Default)
Можно создать на виндах (XP, NTFS) большой файл на 5 Гигов, заполненный нулями, и притом быстро?

Если заполнять все 5 Гб выровненными блоками по 4 Кб, то у меня это занимает где-то 100 секунд. Плохо. Изменение размера блока не влияет. Функция chsize работает примерно столько же, но нет возможности показать пользователю "прогресс".

Но есть забавный способ. Надо открыть файл, сделать "fseek" на 5 Гб вперед, записать туда один нулевой байт (fwrite) и сказать fclose. Через секунду файл на 5 Гб готов.

Но рано радоваццо. Стоит попытаться записать в конец этого файла один-единственный ненулевой байт, сказать flush и... все виснет на те же 2 минуты без всяких шансов на показ "прогресса". Чудес не бывает, увы :(
psilogic: (Default)
Хе-хе... долго ковырялся, как сделать частично прозрачное окно типа "Ассистента" у Microsoft Word или скругленных уголков у окна WinAmp. Ковыряния увенчались успехом, так что, если кому надо, делюсь фишкой.

0. Создаем окно WS_POPUP (только этот стиль, больше ничего)
1. Создаем пустой HRGN - CreateRectRgn(0, 0, 0, 0)
2. Добавляем туда (через CombineRgn) все области, которые НЕ должны быть прозрачными. В моем случае это все child-окна, но не само parent-окно.
3. Вызываем SetWindowRgn для этого окна и суммарного HRGN (важно: суммарный HRGN после этого не удаляем)
4. Только после этого делаем окно видимым - через ShowWindow(...SW_SHOWNOACTIVATE)

Роботаед *hop* *hop* :)
psilogic: (Default)
Специально для любителей шОблоноф и прочих C++ наворотов. :) Сразу пердупердяю: задачка с подвохом.

Дано.

В программе есть некоторое количество классов, которые являются элементами односвязных списков с internal storage (проще говоря, это когда указатель на следующий элемент является членом класса).

Классы имеют вид:
class MyClass...
{
   MyClass *nextListItem;


Причем, варьируется не только название класса, но и название поля "nextListItem".

Задача.

Написать универсальную функцию вставки в начало списка с применением template, inline и pointer-to-member операторов. На входе должны быть: вставляемый элемент; указатель на первый элемент; название поля, указывающего на следующий элемент и тип класса. Функция может быть глобальной или членом namespace или функцией какого-либо нового класса - важно, чтобы она была одна, но работала для всех тех классов. Функция должна работать примерно так же, как ниже представленный #define:

#define INSERT_TO_LIST(firstItemPtr, item, nextItemName) \
(item)->nextItemName= (firstItemPtr), (firstItemPtr)= (item)


Посчитать количество строк в полученной функции. Факультативно: перечислить и обосновать преимущества перед приведенным #define.
psilogic: (Default)
[ Предупреждение: для непрограммистов неинтересно ]

Пусть у нас есть два класса - базовый Base и отнаследованный от него Derived. В Derived есть конструктор, похожий на конструктор копии с параметром типа Base.

class Base
{
...
};

class Derived: public Base
{
public:
    Derived() {...}
    Derived(const Base &b) { /* важные манипуляции */ }
};


Допустим, в программе это используется вот так:

Derived d1;
Derived d2(d1);


И оно не работает.

Тщательное расследование показало эпическое западло...

Read more... )
psilogic: (Default)
Как сделать параллельную компиляцию C++ проекта в Visual Studio Express Edition 2008?

XP, Core 2 Duo. Про параметр "maximum number of parallel project builds" в опциях знаю. Не дает эффекта :(

Знаю только метод при помощи cook-а, но это геморрой.
psilogic: (Default)
А вы сталкивались со шрединбагом? :)

Цитата: "Термин, используемый в программировании для описания программной ошибки, которая никак не проявляет себя, однако внезапно возникает, если кто-то наткнётся на неё в исходном коде или попытается использовать программу в необычных условиях и осознает, что система вообще не могла работать при наличии такой ошибки".

Я, бывает, сталкиваюсь с противоположной ситуацией: ошибка многократно проявляет себя, а при попытке ее отладить вдруг исчезает, и больше не беспокоит, как будто ее и не было.
psilogic: (Default)
(пост для программистов)

Наткнулся здесь на одну неочевидную фишку - может, "виндузятникам" пригодится. Сам по себе прием достаточно известный, но вот подводные камни, которые там обнаруживаются...
Read more... )
psilogic: (Default)
(только для программистов)

Если вдруг кто-то рискнул попользоваться моим локализатором, то сегодня сделал новую версию - 1.3.3. Изменения косметические и один багфикс (интересно, сколько багинжектов). Вроде бы полгода использования тулзы на довольно большом проекте выявили только один этот баг. В общем, юзать можно спокойно :)

December 2016

S M T W T F S
    123
45678910
11121314151617
181920212223 24
25262728293031

Syndicate

RSS Atom

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 21st, 2017 03:16 am
Powered by Dreamwidth Studios