?

Log in

Программизм's Journal
 
[Most Recent Entries] [Calendar View] [Friends]

Below are the 20 most recent journal entries recorded in Программизм's LiveJournal:

[ << Previous 20 ]
Tuesday, May 30th, 2017
12:02 pm
[kray_zemli]
Инструмент для разбирательства в чужом C++ кода
На нашей работе много так себе написанного C++ кода и очень мало документации.

У меня большой опыт использования одной очень известной тулзы для reverse-engineering. Её особенность в том, что перед заголовком функции она показывает так называемые XREF'ы, т.е. места, откуда эта функция вызывается. На них можно нажать и попасть туда, там опять нажать на XREF или вызов функции, всё кладётся как бы в стек, и потом по шагам можно возвращаться обратно.

Хочется подобного, но не для бинарников, а для C++ исходного кода. Что-то типа специализированного статического анализатора. Чтобы быстрым нажатием нескольких кнопок узнать, где используются поля структуры, откуда вызывается функция или метод, в т.ч. виртуальный, где создаётся экземпляр класса, и т.п. Полнотекстовый поиск не всегда хорошо справляется, даёт ложные совпадения (одноименные методы в разных классах и т.п.), и вообще, недостаточно автоматизирует процесс.
Monday, March 13th, 2017
9:33 pm
[m_f]
Вопрос по swing
Есть такой код.
Collapse )
import org.jdesktop.swingx.JXLabel;
import org.jdesktop.swingx.JXTaskPane;



LayoutManager lm = panel.getLayout();


FlowLayout fl = (FlowLayout) lm;

JXTaskPane pane2 = new JXTaskPane();
pane2.setTitle("pane2");
JXLabel label = new JXLabel();
JTextField textField = new JTextField();
textField.setText("value");
label.setText("label");
label.setHorizontalAlignment(Label.LEFT);
pane2.add(label);
pane2.add(textField);

JXTaskPane pane3 = new JXTaskPane();

JLabel label2 = new JLabel();
label2.setText("label2");
pane3.add(label2);
pane3.setTitle("pane3");
label2.setHorizontalAlignment(JXLabel.LEFT);
panel.add(pane2);
panel.add(pane3);
showThis();
В итоге, два диалога pane2 и pane3 выводятся рядом. Я хочу, чтобы они выводились один под другим. Пытался ставить выравнивание по левому краю в дayout manager-е - они выводятся у правого края родительской панели, но все равно один справа от другого. Что мне могут посоветовать коллеги?

Заранее спаисбо.
Tuesday, January 10th, 2017
7:13 pm
[m_f]
Вопрос по JNI
Пытаюсь запустить java-ское приложение из-под eclipse. При старте оно пытается подгрузить jni библиотеки. Получаю exception-ы вида:
java.lang.UnsatisfiedLinkError: /home/user/workspace/myapp/extlibs/linux64/libsecond.so: libfirst.so: cannot open shared object file: No such file or directory
При этом я вижу в том же каталоге, что и libsecond.so, файл libfirst.so. У него есть права на исполнение. В чем может быть проблема? Ubuntu, eclipse.
Wednesday, December 28th, 2016
9:19 pm
[m_f]
Вопрос по swing, ,часть 2
В общем, с помощью полученных советов у меня получилось нарисовать tree view. Проблем теперь две
1. Контрол для редактирования не переключается обратно, на контрол для показа.
2. Когда я все-таки вышел обратно, нажав Esc, данные не поменялись на отредактированные.

Заранее благодарен за советы.
Monday, December 26th, 2016
8:27 pm
[m_f]
Вопрос по java(swing)
Есть такой класс JTree. Как я понял, он предназначен для отображения иерархической tree view. Он позволяет заменять всякие пошлые иконки нормальными человоеческими вью, с возможностью их редактировать. Но я не вполне понимаю как сделать так, чтобы разным итемам соотвтетствовали вью разных типов. Скажите, это вообще возможно? Если да, то как это сделать, если CellEditor устанваливается один раз для всего tree?

Заранее благодарен
Saturday, December 24th, 2016
10:16 am
[saotome_kun]
Оптимизация функции на С++ STL
Побывал на днях на собеседовании (С++) и дали там задание оптимизировать функцию типа такой.

Employee findEmployee(vector< Employee > data, string addr) {
  for (auto it = data.begin(); it != data.end(); it++) {
    if (it->m_addr == addr)
      return it;
  }
}


Что я перечислил:

  • изменение асимптотической сложности на O(log(n)) c map или на O(1) с unordered_map, если память позволяет, но оказалось, что алгоритм менять не предполагается;

  • передача входных и выходных параметров по ссылке;

  • замена it++ на ++it;

  • вынос конечного итератора в константу const auto itend = data.end() и сравнение итератора с ней.


Но от меня ждали чего-то еще. Я добавил пункт про возможность оптимизации сравнения строк путем сравнения типов данных более широких чем char, исходя из разрядности целевой платформы.
И все. Но от меня ждали чего-то еще. Напишите пожалуйста, если знаете или догадались что именно? Я в непонятках.
Thursday, December 8th, 2016
10:32 pm
[nicka_startcev]
svg
а подскажите люди добрые, чем парсить svg?

что хочется получить: хочется руками не очень вникая в устройство того svg, что выдает инкскейп, получить "программу" для репрапа на языке г-код, который, по сути, состоит из "задать толщину линии, температуру головки/подложки, скорость; дождаться прогрева; тупо подряд отрисовать набор отрезков, в каждом выдавая еще и 4ю координату - подачу пластка".

давным-давно находил и правил какую-то питоновскую приблуду для фрезера, а не репрапа, но там было две проблемы
1. у фрезера нет 4й координаты - подачи пластика. приходилось считать руками
2. инкскейп иногда выдает очень странные файлы, в которых что-то не то и радкально не так интерпретируется.

ну или подскажите похожий плагин к инкскейпу. под переделку.

и да, нужен именно вектор. при растеризации через слайсер вечно идут проблемы с "ажурными решетками" и прочими кружевами, когда в ширину линии получается не 2 или 3, а 2.5 колбаски и щель между ними.
Friday, November 4th, 2016
3:59 am
[m_f]
вопрос по C++
Мне немного стыдно за такой тупой вопрос, но я что-то не соображу, как быть.
Есть чисто виртуальный класс Base с чисто виртуальным методом, например void func(). От него унаследован класс Derived, где этот метод определен. Есть метод в некоем классе, который берет vector<Base>.

Вопрос: как скормить этому методу vector<Derived>?
Friday, October 28th, 2016
7:23 pm
[m_f]
Вопрос о boost(C+)
Краткое содержание предыдущих серий: в предыдущем посте меня убедили использовать boost.
Я подключил в свой проект boost/filesystem, добавил параметр -lboost_system и пытался его построить. В ответ была получена ошибка cannot find -lboost_system. Предварительно я построил boost и добавил фолдер D:/boost1_62 в пути для линкера. Как я понимаю, гду-то должен быть файл libboost_system.o, но я его нигде не нашел.
Вопрос: что я делаю не так и как это исправить?
UPD. Решено. Оказывается, реально оно называется не boost_system, а boost_system-mgw49-mt-1_62.
Monday, October 24th, 2016
3:36 pm
[m_f]
вопрос по C++
Вопрос, чтобы не изобретать велосипед. Вот в Java есть прикольный класс File, сс помощью, которого, в частности, можно переходить от абсолютных путей к относительным. А есть что-нибудь подобное в C++? Я, конечно, могу и свой велосипед написать, но вдруг оно уже есть.
Thursday, October 20th, 2016
11:18 pm
[nicka_startcev]
gnu plot
а подскажите люди добрые как гнуплот готовить

1. есть у меня в квартире куча термодатчиков. иногда они долго показывают одну и ту же температуру, тогда гнуплот начинает ворнинговать, что по оси У ноль, всё плохо. как задать именно разность температур, а не диапазон?
2. можно ли тупо подавить этот ворнинг, не давя другие?
3. гнуплот любит красиво ставить метки далеко друг от друга. можно ли заставить его ставить метки в 4 раза чаще? не через каждые 1/16 градуса, а именно в 4 раза чаще, чем по умолчанию?

а может стОит заменить гнуплот чем-то более удобным? на входе текстовый файл в формате "дата время т1 т2 т3 т4" или "дата время т1" из которого хочется видеть график температур в виде картинки (чтоб отобразить на вебстраничке), и это сидит в крон(таб)е.
Monday, October 17th, 2016
3:26 am
[m_f]
Вопрос по STL(C++)
Допустим, есть multimap<string, int>. Как грамотно просуммировать все значения? Как пробежать все значения? Я спрашиваю именно про multimap. С обычным map-ом никогда проблем не было, а mutlimap использовать не приходилось.
Заранее спасибо.
Saturday, October 15th, 2016
6:20 pm
[m_f]
Вопрос по algorithm(C++)
Есть map<time_t,string>. Хочу скопировать только те записи, которые соответствуют определенному string.
map<time_t, string>
Написал код:
copy_if(times.begin(),times.end(),copyTimes.begin(),[&Name](pair<time_t,string> curPair)->bool
{
return (curPair.second == Name);
});
При компиляции выдается ошибка:

assignment of read-only member 'std::pair
[Error: Irreparable invalid markup ('<const [...] std::basic_string<char>') in entry. Owner must fix manually. Raw contents below.]

Есть map&lt;time_t,string&gt;. Хочу скопировать только те записи, которые соответствуют определенному string.
map&lt;time_t, string&gt;
Написал код:
copy_if(times.begin(),times.end(),copyTimes.begin(),[&Name](pair&lt;time_t,string&gt; curPair)->bool
{
return (curPair.second == Name);
});
При компиляции выдается ошибка:

assignment of read-only member 'std::pair<const long long int, std::basic_string<char> >::first'.

Не понимаю в чем дело. Я ж сравниваю, а не присваиваю нифига. Попробовал сделать лямбду mutable - не помогает, та же ошибка.
В чем причина и что делать?
Thursday, October 13th, 2016
12:10 pm
[nicka_startcev]
чтение файла fuse/owfs
несколько странный вопрос - а как в линуксе правильно читать (псевдо)файл?

читаю свежие показания 1-варь термометра через owfs который через fuse.
иногда читается быстро, а иногда тупит.

хочется как-то асинхронно вычитывать оттуда 1 строку (100.562, например) или асинхронно, или по факту изменения содержимого файла.

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

ps: таки да, с/с++, линух, х86, 32бит.
Sunday, October 9th, 2016
3:54 am
[m_f]
Вопрос по STL
Программа падает при попытке добавить в std::map данные. Код приводится ниже
Есть класс,в котором есть map. объявленный статическим полем.
static map<int, DataKeeper*> typeKeepers;
В сишнике оно инициализируется:
static map<int, DataKeeper*> typeKeepers;
Далее, есть вызов статического метода:
DataKeeper DataKeeper::getKeeper (int type)
{
cout<<"getDataKeeper enter"<<::iterator it;
map::iterator it;
DataKeeper* result;
it = keepers.find(type);
if (it == keepers.end())
{
int size;
result = new DataKeeper();
size = sizeof(result);
keepers[type] = result;
}
Проходя по шагам я увидел, что оно не находит значения(что вполне логично - это первый вызов) и пытается добавить указатель в map. Вот на этом добавлении оно и падает. Конкретно на этой строке. Компилятор MinGW.
В чем дело?
Заранее спасибо за любые конструктивные советы.
UPD. Всем спасибо, разобрался. Только сейчас добрался до сети, прошу прощения. Оказалось, вызов идёт раньше, чем map создаётся. После 3 лет на джаве отвык от того, что при обращении к не существующему объекту что-то ещё может дышать, если в этот объект ничего не писать.
Wednesday, October 5th, 2016
3:44 am
[m_f]
Вопрос по rapidjson(C++)
Collapse )
Решил я использовать эту библиотеку. Задача такая: сохранить массив объектов, типа скажем Person, в каждом два поля: std::string name и int age.
Почитал доки и написал следующий код.

std::map<string, Person> aPersons;
ofstream ofstr(fname,ios_base::out | ios_base::trunc);
rapidjson::Document doc;
rapidjson::Document::AllocatorType& allocator = doc.GetAllocator();
rapidjson::Value array(rapidjson::kArrayType);
map<string,Person>::iterator it,end = aPersons.end();
int i,size = aStations.size();
array.Reserve(size,allocator);
i = 0;
for (it=aPersons.begin();it!=end;it++)
it->second.saveMe(array[i++],allocator);
Соответственно, в классе Person реализован метод saveMe():
void Person::saveMe (rapidjson::Value& aValue, const rapidjson::Document::AllocatorType& anAllocator)
{
aValue.AddMember("name",name,anAllocator);
aValue.AddMember("age",age,anAllocator);
}
Строиться оно отказывается. Если верить доке и исходникам, то такие методы есть, Что я делаю не так? И как надо?
Заранее спасибо
UPD. Текст ошибки:
no matching function for call to 'rapidjson::GenericValue >::AddMember(const char [5], std::string&, const AllocatorType&)'
no matching function for call to 'rapidjson::GenericValue >::AddMember(const char [8], int&, const AllocatorType&)'
UPD2. Перенес весь код в одну функцию. Стало строиться успешно. Видимо, какая-то фигня происходит при передаче параметров.
UPD3. Проблема в передаче параметров. Не понял почему, но передать Document и Document::AllocatorType через параметры не получается. Даже при передаче через ссылку все равно не компилится. Знает кто, почему так?
Monday, September 26th, 2016
6:18 pm
[nicka_startcev]
экспонента
есть некая физическая система из большого бака, грелки и термодатчика.

термодатчик примерно 2 раза в секунду с неравными интервалами (от 300мс до 2000мс, но в среднем около 500мс) выдает температуру.

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

теоретически, график нагрева должен неплохо аппроксимироваться чем-то типа y=A+B*exp(C*x).

так вот, вопрос. какими методами лучше "на ходу" подбирать эти три коэффициента (по критерию минимизации среднего квадрата отклонения)? нужно ли для этого хранить всю историю или есть более хитрые методы, требующие меньше вычислений?
Wednesday, August 17th, 2016
4:03 pm
[elexandra]
offline
А как нынче принято веб-приложения для работы без интернета делать?

Есть пользователи с планшетами. Пока в офисе - синхронизируется через офисный интернет. Пока ловит мобильный - синхронизируется через мобильный.

Но бывают ситуации, когда интернета нет. Должна быть возможность открыть браузер на планшете, открыть сайт и подгрузить всё, что было синхронизировано раньше.

Сторажи? Манифесты?

Планшеты на андроиде, но желательно кросс-платформенно и кросс-браузерно.

Как быть? 2016 год и далее.
Thursday, July 21st, 2016
12:36 am
[andrewshell]
Майкрософт решил подарить всем нам тьму БЕСПЛАТНЫХ книг. Качайте на здоровье!
Привожу ссылку на мой сайт, где можете найти информацию о бесплатных книгах на английском, которые Майкрософт решил подарить всем нам. Книг - море! Я не считал. А сам директор по продажам Eric Ligman (тот, кто и подарил нам это богатство) утвержадает, что их Миллион! Ну, это конечно, как на Руси обычно говорят: "Тьма", "Было тьма народу". Да чё это я вам из Америки и про русский язык рассказывать то буду.
Скачивайте прямо с Майкрософт сайта. 3 линка я поставил в заметке (начало, середина и конец). А мне будет плюс в карму.

FREE MICROSOFT EBOOK GIVEAWAY
FREE MICROSOFT EBOOK GIVEAWAY

Windows 10 IT Pro Essentials Top 10 Tools

  • Introducing Windows 10 for IT Professionals

  • Introducing Microsoft Power BI

  • Microsoft Azure Essentials Azure Automation

  • Microsoft Azure Essentials Fundamentals of Azure

  • Microsoft Azure Essentials Azure Machine Learning

  • Microsoft® Office 365: Connect and Collaborate

  • Introducing Windows Azure™ for IT Professionals

  • Introducing Windows Server 2016 Technical Preview

  • Virtually Anywhere, Anytime

  • SharePoint Server 2016 Quick Start Guide for Single Server Farms

  • SharePoint Server 2016 Reviewer’s Guide

  • Introducing Microsoft SQL Server 2016: Mission-Critical Applications, Deeper Insights, Hyperscale Cloud, Preview 2

  • WINDOWS POWERSHELL 4.0 LANGUAGE QUICK REFERENCE

  • Windows Powershell 4.0 Examples Quick Guide

  • Programming Windows Store Apps with HTML, CSS, and JavaScript, Second Edition

and much more… .


FREE MICROSOFT EBOOK GIVEAWAY

Thursday, March 3rd, 2016
3:17 pm
[ilvyanyatka]
программировать видеоигры для самых маленьких
Здравствуйте,
Мой шестилетний сын просит научить его программировать видеоигры.
Подскажите есть ли какие нибудь пакеты для такого программирования, для самых маленьких.
Спасибо.
[ << Previous 20 ]
RU PROGRAMMING   About LiveJournal.com