Форматтеры и линтеры для PHP?
Как сейчас принято форматировать код на PHP? Есть какой-нибудь общепринятый кодинг стайл? Какие есть утилиты командной строки для форматирования файлов?
Какие есть линтеры для PHP? Статические чекеры?
Как сейчас принято форматировать код на PHP? Есть какой-нибудь общепринятый кодинг стайл? Какие есть утилиты командной строки для форматирования файлов?
Какие есть линтеры для PHP? Статические чекеры?
Перечислите библиотеки максимально широкого плана для С++, где пытаются решить все проблемы сразу, иными словами наборы utils
Из тех которые не сдохли я припоминаю Glib(-mm), Qt, boost, Facebook Folly
Захотелось вот такого: накрутить OpenBox (со свистелками) на нулевую убунту. Чтобы вообще ничего лишнего не было. Но все эти убунты ставятся уже с DE и софтом.
Нормально ли воткнуть серверную убунту на десктоп и накрутить всё там? Чем это может грозить, чем отличается от «пользовательской» версии? Суть это и вопрос топика.
Ну и до кучи. Сначала думал про Дебиан, но у них репозитории обновляются раз в сто лет, как я понял. Генту я боюсь, не дорос. Что еще этакого поставить даже не знаю.
25 марта вышла новая версия графовой базы данных Neo4J.
В этом релизе представлены улучшения, которые, как утверждается, позволят существенно повысить производительность операций чтения и записи данных, а также улучшают возможности по отладке и тестированию.
Ключевые моменты изменений версии 2.2:
На начало 2015 года графовая база данных Neo4J занимает 23 место по популярности (по версии сайта DB-ENGINES).
>>> Подробности
Кто что использует? Засоветуйте чего, а то я по старинке принтом отлаживаю и мой dev_print ($arr) {echo '<pre>', print_r($arr,true), '</pre>'}; разросся уже до нескольких десятков килобайт и имеет собственный установщик, загрузчик и еще кучу какой-то неведомой хрени... (((
Здравствуйте.
Читаю «Programming In Lua». В главе про C API автор постоянно заканчивает массивы структур «стражем» - структурой с нулевыми полями. Видимо для того, чтобы в цикле можно было проверить, что структура последняя.
Мне не понятно, почему используется такой «изобретательный» подход вместо sizeof?
struct ColorTable {
char *name;
unsigned char red, green, blue;
} colortable[] = {
{"WHITE", MAX_COLOR, MAX_COLOR, MAX_COLOR},
{"RED", MAX_COLOR, 0, 0},
{"GREEN", 0, MAX_COLOR, 0},
{"BLUE", 0, 0, MAX_COLOR},
other colors
{NULL, 0, 0, 0} /* sentinel */
};
Дабы выбросить из своего проекта ACE Framework пришлось сделать свою реализацию таймеров. Получилась небольшая библиотека, которая не имеет внешних зависимостей и использует только возможности стандартной библиотеки C++11. Проверялась под Windows (MSVC++2013, MinGW-w64 GCC 4.9.1) и Linux (GCC 4.9.1).
Лицензия: 3-х секционная BSD. Т.е. использоваться может без проблем как в открытых, так и в закрытых проектах.
Библиотека поддерживает только таймеры на основе тайм-аутов, т.е. таймеры, которые должны сработать через сколько-то миллисекунд (секунд, минут и т.д.) после момента активации таймера. wallclock-таймеры не поддерживаются.
Таймеры могут быть однократными (срабатывают всего один раз, после чего деактивируются), либо периодическими (повторяются до тех пор, пока не будут явно деактивированы или пока таймерная нить не завершит свою работу).
Библиотека поддерживает три таймерных механизма: timer_wheel, timer_heap и timer_list, у каждого из которых есть свои преимущества и недостатки. Может поддерживаться большое количество таймеров (сотни тысяч, миллионы или даже десятки миллионов) и обеспечивается высокая скорость обработки таймеров (до нескольких миллионов в секунду, но это зависит от времени работы связанных с таймером пользовательских событий).
В коде все это выглядит приблизительно следующим образом:
#include <iostream>
#include <cstdlib>
#include <timertt/all.hpp>
using namespace std;
using namespace std::chrono;
using namespace timertt;
int main()
{
timer_wheel_thread_t tt;
// Timer thread must be started before activation of timers.
tt.start();
// The simple single-shot timer.
tt.activate( milliseconds( 20 ),
[]() { cout << "Simple one-shot" << endl; } );
// The simple periodic timer.
// Will work until timer thread finished.
tt.activate( milliseconds( 20 ), milliseconds( 20 ),
[]() {
static int i = 0;
cout << "Simple periodic (" << i << ")" << endl;
++i;
} );
// Allocation of timer and explicit activation.
auto id1 = tt.allocate();
tt.activate( id1, milliseconds( 30 ),
[]() {
cout << "Preallocated single-shot timer" << endl;
} );
// Periodic timer with timer preallocation, explicit activation
// and deactivation from the timer action.
auto id2 = tt.allocate();
tt.activate( id2, milliseconds( 40 ), milliseconds( 15 ),
[id2, &tt]() {
static int i = 0;
cout << "Preallocated periodic (" << i << ")" << endl;
++i;
if( i > 2 )
tt.deactivate( id2 );
} );
// Single-shot timer with explicit activation and deactivation
// before timer event.
auto id3 = tt.allocate();
tt.activate( id3, milliseconds( 50 ),
[]() {
cerr << "This timer must not be called!" << endl;
std::abort();
} );
tt.deactivate( id3 );
// Wait for some time.
this_thread::sleep_for( milliseconds( 200 ) );
// Finish the timer thread.
tt.shutdown_and_join();
}
Скачать можно с SourceForge: только header-only вариант или же полный вариант с тестами/примерами. Документация там же в Wiki (пока на русском языке, потихоньку будет переводиться на английский).
Еще чуть-чуть подробностей по релизу здесь.
Сразу поясню для желающих спрашивать «нафига это нада?» и/или «афтар, а чем это лучше/хуже?». Если вы в своем проекте уже используете какой-то фреймворк/библиотеку, предоставляющий таймеры (например, ACE/Boost/Qt/wxWidgets/libuv/libev/libevent/you-name-it), то, скорее всего, timertt вам не нужен. Если только вы не обнаружите, что ваш инструмент не очень хорошо справляется с миллионом таймеров или же вам надоело натягивать свою прикладную логику на API вашего инструмента (актуально, например, для ACE, где таймерные очереди реализованы здорово, на вот API для них несколько своеобразный и не всегда удобный).
Если же в вашем проекте никаких тяжеловесных зависимостей нет, а таймеры нужны, то можно и в сторону timertt посмотреть.
Ну а вообще делал для себя, но не вижу причин не выложить в виде OpenSource.
SObjectizer — это небольшой фреймворк для упрощения разработки многопоточных приложений на C++. SObjectizer позволяет создавать объекты-агенты, которые взаимодействуют друг с другом только посредством асинхронных сообщений. Сам SObjectizer берет на себя задачи диспетчеризации сообщений и предоставление агентам рабочего контекста для обработки получаемых сообщений.
Проект живет на SourceForge, распространяется под 3-х секционной BSD-лицензией.
Версию 5.5.3 можно взять либо из секции Files на SF, либо из Svn-репозитория.
Если говорить кратко, то в версии 5.5.3:
Если интересны подробности, то сюда.
Для тех, кто больше любит смотреть слайды есть пара презенташек (для того, чтобы получить более полное представление об инструменте, лучше смотреть вторую, которая подлинее).
Выпущена корректирующая версия интерпретатора текстово-графических LUA-игр Instead.
Говорит разработчик Пётр Косых:
«Исправлена регрессия, которая была введена в версии 2.2.0. Всем кто использует версию 2.2.0 или 2.2.1 рекомендую обновиться. Ошибка проявляется в играх, где есть переходы в комнаты с пустым описанием.
Бинарные сборки будут появляться по мере их готовности.»
Основные изменения (c версии 2.2.0):
( читать дальше... )
>>> Подробности
Осваиваю си. Всё шло хорошо пока внезапно не понадобилось склеить строки (константные и переменные). Покурил stackoverflow. Предлагают 2 варианта:
Первый - создать char buf[молись_чтобы_хватило] и делать str(n)cat/sprintf в этот buf.
Второй - использовать asprintf, который расширение, нестандарт и вообще.
Вопрос: как вы склеиваете строки? Может есть какая-нибудь общепринятая либа?
Простите за нубский вопрос
TL;DR: Планирую девайс на st32, что-нить в духе 64-128кб ROM, 32kb sram (аля STM32F401 или другое недорогое решение от этого производителя).
1) стоит ли заморачиваться этими всеми *RTOS для небольшого проекта для микроконтроллеров st32? Есть шанс что придётся попотеть с портированием.
2) Какую именно RTOS взять?
Делаю блок питания с микроконтроллером (для управлением дисплеем, кнопками и энкодерами). Неспешно пилил всё под atmega328 на голом си и даже что-то получалось. Но однажды утром проснулся и понял что жить не могу без arm. Тут-то проект полетел к чертям :)
После ночей раздумий остановился на серии mcu st32f4. Приобрёл для начала stm32F429I-DISCO . Однако застрял на написании простей программы по миганию светодиодом: в инете куча устаревшей инфы и либ под разные виндовые IDE типа truestudio итп. А вот чтобы просто под gcc и Makefile и чтобы готовое, рабочее и совместимое с последним sdk... Родной sdk от производителя это какое-то малоструктурированное адовое мессиво автосгенерированного кода. Я заставил компилироваться некоторые примеры из инета, но они не заработали (подозреваю грабли в коде инициализации). Поэтому я пошёл другим путём.
Я решил скачать какой-нить готовый пример с freertos. И, о чудо, вот это заработало: https://github.com/winfred-lu/stm32f429-freertos800 . Оно даже работает с последним FreeRTOS. Стоит ли продолжать изыскания с FreeRTOS?
Пытаюсь разобраться с программированием встроенных систем. Сейчас читаю Embedded Programming with the GNU Toolchain,
где для программирования ARM-систем предлагается скачать CodeSourcery GNU toolchains Lite Edition.Однако Sourcery CodeBench Lite Edition больше не поддерживает ARM-архитектуру.
На какой toolchain можно заменить чтобы он был «совместим» с текстом Embedded Programming with the GNU Toolchain?
мне тут люди не сговариваясь советуют купить и использовать для своих целей STM32F4DISCOVERY, в связи с чем у меня вопрос, а какими средствами мне вести под него разработку? как пользоваться дебагом? какую литературу читать если в ARMе я не в зуб ногой?
я так понимаю, что данная демоплата не предполагает установки linux на нее, но это мне пока и ненужно. более того, для того чтобы получше изучить архитектуру, абстракции в виде операционной системы или ЯПВУ мне будут только мешать.
а еще я боюсь, что я куплю ее и мне будет на выбор или уродливая IDE под оффтопик или еще более уродливая IDE на java, после чего я плюну и выброшу все в окно.
хочется няшности: vim, ANSI C, gcc, gdb, assembler конечно.
аппликэйшн у меня будет примерно вот такой:
http://ru-radio-electr.livejournal.com/1047113.html
http://nowere.net/b/res/82734.html
я чувствую себя нубом задающим тупые вопросы. я даже не представляю себе примерный ассортимент ARM based MCU, потому что их делает кто не попадя и называет как хочет. или я не прав?
помогите сориентироваться пожалуйста, дайте точку входа. мне нужно описание архитектуры и системы комманд, в первую очередь, а потом описание того, что мне делать чтобы код скомпилился, залился и выполнялся как надо.
пусть даже описание будет достаточно поверхностным, это даже лучше, потому что теретический бэкграунд у меня есть, главное чтобы я пошел по принципиально проходимому пути.
живу на gentoo, так что можете сразу советовать оверлэи и тулчейны
кроме того я совершенно не вцепился мертвой хваткой в данную конкретную плату или в ARM вообще, может быть MIPS даже интереснее будет?
собственно, мне видится так,что первую ось нужно ставить как обычно, а вот как ставить вторую ось в данном случае ?
На протяжении последних месяцев был возрожден открытый видеодрайвер ATI Rage 128 для X.Org.
Драйвер xf86-video-r128 поддерживает все старые видеокарты ATI Rage 128, в том числе Rage Fury AGP, XPERT 128 AGP, и XPERT 99. Rage 128 был лучшим графическим процессором от ATI еще в 1998 году. Он был построен по 250 нм технологии, с поддержкой 32MB и 64MB видеопамяти, тактовая частота ядра составляла около 100 МГц.
Поддержка OpenGL ограничена версией 1.2. Хотя в это трудно поверить, но Rage 128 до сих пор используется в продакшене, с использованием современных Linux-систем, для которых и был возрожден данный драйвер.
Коннор Бехан регулярно обновлял код драйвера R128 в течение последних двух месяцев, и переписал большую user-space часть, отвечающую за mode-setting. Теперь драйвер поддерживает такие расширения X.Org, как Resize и Rotate (RandR). Код в некоторых отношениях близок к бывшей поддержке UMS драйвера xf86-video-ati.
Хотя возраст оборудования Rage 128 составляет почти два десятилетия, еще остаются проблемы с обнаружением монитора из-за отсутствия некоторой документации по регистрам Rage 128.
>>> Подробности
Это достаточно известная книга Кристиана Кеннека, рассматривающая семантику Лиспа и основы его реализации на примере диалекта Scheme. В процессе повествования разбирается множество аспектов семантики языка, начиная разнообразными вариантами окружений, проходя через продолжения и исключения, заканчивая рефлексией, сутью макросов, компилятором в Си и объектной системой.
Книга содержит 11 интерпретаторов, 2 компилятора, стопку упражнений в каждой главе, уйму интересного материала об истории Лиспа и причинах принятия тех или иных решений в дизайне языка, некоторое количество аллюзий на современные языки программирования, а также небольшой вагончик литературы впридачу.
Здесь нет откровений, невероятно эффективных оптимизаций, мощных систем типов и прочих атрибутов современной computer science (книге 20 лет всё же), но есть отличное твёрдое введение в реализацию языков программирования, призванное заинтересовать новичков, познакомить их с основными понятиями и приёмами этого дела, построив таким образом фундамент для дальнейшего развития.
>>> Скачать PDF
← предыдущие |