На первом шаге нужно указать проекцию карты, для нашего родного генштаба проекция будет примерно такого вида:
+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs
+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=23.9,-141.3,-80.9,0,-0.37,-0.85,-0.12 +units=m +no_defs
(параметр towgs84, определяет параметры перехода к датуму wgs84, который используется в том же GPS, этот параметр автоматом добавится, если в мастере настройки проекции выбрать датум Pulkovo 1942)
собственно для каждого листа миллионки она будет своя, жирным выделено то, что будет меняться от листа к листу. Теперь пояснения:
Как видно, оба параметра зависят от номер зоны, что бы не заморачиваться, есть ещё один очень простой способ определения её: по номеру листа, вычитая из него 30. Т.е. лист у нас O-50, значит его номер - 50, тогда:```scilab
Nз = 50 - 30 = 20
Так же, для простоты, можно принять, что мнимый восток это: 500000 перед которым написан номер зоны, как он есть, т.е. как результат объединения двух строк (в программировании):```
“20” + “500000” = “20500000”
Давно пользуюсь услугами cppcheck, но решил поглядеть что есть ещё (как оказалось, лучше, по сути, ничего и нету). Наткнулся на статью по теме на хабре:
http://habrahabr.ru/post/75123
Тезисно:
Далее,
Анализ утилит статического анализа C++ кода, автор рассматривает следующие анализаторы:
- rats (выше писал)
- cppcheck (аналогично)
- Graudit (есть в AUR)
причём рассматривает проблемы, которые они не выявляют.
Список статических анализаторов можно поглядеть на страничке в википедии:
http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis, причём не только для C/C++
Для интереса можно почитать перевод статьи Джона Кармака о статическом анализе:
http://habrahabr.ru/post/135234/((Оригинал статьи: altdevblogaday.com/2011/12/24/static-code-analysis/)), где кратко излагается, какими инструментами ему довелось воспользоваться, и какие впечатления остались после них.
И на последок серия из четырёх заметок камрада
Andrey2008((Один из разработчиков PVS-Studio, поэтому малость пропускаем его отсылы к этому продукту)) “Как уменьшить вероятность ошибки на этапе написания кода”:
-
Заметка №1:
- Избегайте функции memset, memcpy, ZeroMemory и им аналогичные
- Внимательно следите, работаете вы со знаковым или беззнаковым типом
- Избегайте большого количества вычислений в одной строке
- Выравнивайте в коде всё, что возможно
- Не размножайте строку более, чем один раз
- Выставляйте высокий уровень предупреждений у компилятора и используйте статические анализаторы
-
Заметка №2
- Не используйте тернарную операцию ‘?:’ в составных выражениях
- Не стесняйтесь использовать скобки
-
Заметка №3 - на примерах ошибок в Qt4
- Обрабатывайте переменные в той же последовательности, как они объявлены
- Табличные методы — это хорошо
- Разное интересное (про разные и интересные ошибки в Qt4)
-
Заметка №4 - на примерах ошибок в Firefox
Проблема странная, проявляется не сразу: вроде при запуске всё отлично работает, потом бац, перестаёт, при этом выводится сообщение слудющего содержания:
Error: in bind call: /home/user/.config/luakit/webview.lua:341: attempt to perform arithmetic on local 'p' (a nil value)
Решение проблемы нашёл тут:
https://github.com/mason-larobina/luakit/issues/68, нормальный рабочий вариант получается этот:
https://github.com/mason-larobina/luakit/issues/68#issuecomment-5528890
На правах заметки: цикл статей о многопоточности в C++.
В цикле рассматриваются создание обёртки над pthreads((ссылки по теме:
- POSIX_Threads
-
POSIX Threads Programming
-
Краткое описание pthread (threads))), использование
boost::thread, а так же использование идиомы RAII|RAII (Захват ресурса есть инициализация)
в контексте потоков.
Вообще, блог
Empty Crate крайне рекомендую к ознакомлению - интересные заметки по программированию на C++.
Так же в тему многопоточности concurency в C++0x (но всё это можно переложить, с небольшими оговорками и на boost::thread) серия статей в блоге Just Software Solution:
Достаточно запустить:
dia –integrated
теперь вполне можно пользоваться.
Ну и чуть ярости: ну какого чёрта не вынести это в настройки!?
Первый тестовый пост после обновления PHP с 5.3.10 на 5.4.3 и отказа BlogTNG.
Причина: BlogTNG использует SQLite2, который выкинули из PHP 5.4.0.
Не всё делается одинаково во всех компиляторах, не на всех платформах, приходится временами городить хитрые конструкции из #if/#elif/#endif. Случайно наткнулся на шпаргалку, в которой описано, какие директивы препроцессора предопределяют конкретные компиляторы:
http://sourceforge.net/p/predef/wiki/Compilers/
С того же ресурса:
А так же определение порядка байтов:
http://sourceforge.net/p/predef/wiki/Endianness/
Другие ссылки на эту тематику:
- C++ Containers Cheat Sheet:
1.
http://homepages.e3.net.nz/~djm/cppcontainers.html
2.
http://habrahabr.ru/company/infopulse/blog/194726/
- C++ Iterators & Algorithms Cheat Sheet:
1.
http://homepages.e3.net.nz/~djm/cppiterators.html
- Shifting from C to C++ strings:
1.
http://homepages.e3.net.nz/~djm/cppstrings.html
- C++03 vs C++11:
1.
http://dl.dropboxusercontent.com/u/13100941/C%2B%2B11.pdf
- C++ Quick Reference:
1.
http://www.dreamincode.net/downloads/ref_sheets/cpp_reference_sheet.pdf
- STL Quick Reference:
1.
http://www.digilife.be/quickreferences/QRC/STL%20Quick%20Reference%201.29.pdf
- C++ Concurency:
1.
http://cpprocks.com/wp-content/uploads/C++-concurrency-cheatsheet.pdf
Отдельно по ANSI C:
http://www.digilife.be/quickreferences/QRC/C%20Reference%20Card%20%28ANSI%29%202.2.pdf
Цикл статей камрада
Игоря Кальницкого для “самых маленький” про плюшки нового стандарта C++:
-
Введение в C++11: auto, decltype, nested templates и range-based-for
-
Введение в C++11: nullptr и нововведения в системе инициализации
-
Введение в C++11: лямбда функции
-
Введение в C++11: умные указатели
-
Введение в C++11: новые спецификаторы
-
Введение в C++11: пользовательские литералы
Так же стоит прочитать статью на Википедии, на удивление информативная: C++11
![](/img//post/2012/04/16/bgbilling_5.2_-_oshibka/screen_shoot-20120416-100445-fix.png)
А как оказалось, на разделе с /tmp кончилось место, сказал об том Midnight Commander при запуске.
Надеюсь, что всё таки выберемся за пределы орбиты Земли..
Хорошее руководство:
http://www.newty.de/fpt/index.html
PDF версия:
http://www.newty.de/fpt/zip/e_fpt.pdf
Там же, прицепом: “Callback Implementations in C++”
Дано: контейнер примерно такого вида:
std::list< boost::weak_ptr<Item> > items;
Вместо %%boost::weak_ptr<>%% могу быть:
- %%std::tr1::weak_ptr<>%%
- %%std::weak_ptr<>%% для C++11
Задача: нужно удалить элемент по значению.
Казалось бы, просто сделай:
...
items.remove(value);
...
ан нет: для %%weak_ptr<>%% не определён оператор сравнения. Если потеоретизировать, можно предположить, почему так сделано: что бы гарантировать консистентность указателей при сравнении нужно их захватить (сделать %%value.lock()%%), т.е. создать два %%shared_ptr%% и уже их сравнивать, т.е. лишние накладные расходы.
Поэтому удаление можно делать так:
template <typename T>
bool operator == (const boost::weak_ptr<T>& a, const boost::weak_ptr<T>& b)
{
return a.lock() == b.lock();
}
после такого %%std::list::remove(const T&)%% будет работать для всех типов. Можно и сузить до конкретного.
Либо использовать %%std::list::remove_if(Predicate)%%, предикат объявить как:
struct EqPredicate
{
const boost::weak_ptr<Item>& item;
EqPredicate(const boost::weak_ptr<Item>& item)
: item(item)
{
}
bool operator () (const boost::weak_ptr<Item>& p) const
{
return p.lock() == item.lock();
}
};
и использовать так:
std::list< boost::weak_ptr<Item> > items;
...
items.remove_if(EqPredicate(value));
Информация взята отсюда:
http://stackoverflow.com/questions/1390340/how-can-i-use-stdremove-on-a-container-with-stdtr1weak-ptr
Вышесказанное верно для %%boost::weak_ptr%%, %%std::tr1::weak_ptr%%, %%std::weak_ptr%%
Проект новой игры от создателя Minecraft
-
0x10c
Канву и основные фичи читать на сайте, отмечу только, что в игре придётся заниматься программированием 16-битного компьютера на чипе
DCPU-16, спецификация чипа прилагается. Думаю, что тут можно будет проследить историю развития языков :)