Избранные сообщения cchr
nDPI как замена l7filter
Если кому интересно, то вот рецепт
На большом потоке ( >300мбит/с ) c большим числом протоколов (>20) используется примерно 40% одного ядра Intel(R) Xeon(R) CPU E31230@3.20GHz. Если поток больше или процессор слабее, то включаем RPS или используем сетевые карты с multi-queue и irq-affinity :)
Требуется много памяти. На каждое соединение расходуется примерно 800+264*0.7 байт.
Исходники теперь есть на https://github.com/vel21ripn/nDPI/tree/netfilter
Веб-разработка в Vim
Предлагаю обсудить и поделиться опытом по веб-разработке в Vim.
Я использую Vim в терминале termite (со своими патчами для дефолтного копипаста и прочее) с цветовой схемой gruvbox: как для терминала, так и для Vim.
Этот клавиатура-ориентированный vim-like терминал я упомянул не столько потому, что у него реализованы режимы как Vim (insert mode, selection mode, выделение клавиатурой включая блочное), а потому, что у него есть приятная фича (которую можно наблюдать в iTerm2 для OS X) при работе Vim'а в нём, а именно цвет курсора изменяется в зависимости от цвета символа, на котором находится курсор, а также при выделении цвет выделения повторяет цвет слов/строк (но без инвертирования где нужно, может еще допилят), скриншот.
Менеджер плагинов:
Перед обсуждением плагинов и настроек, хочу подчеркнуть почему я использую менеджер плагинов vim-plug: перепробовав все известные менеджеры плагинов, включая недоменеджер pathogen, остановился именно на vim-plug потому, что он самый быстрый (параллельная установка/обновление, к-во потоков настраивается), имеет приятный интерфейс, краткий синтаксис, а самое главное позволяет настроить загрузку или отключение плагинов по filetype и/или первому вызову самого плагина, это не только ускоряет старт/работу Vim, но и помогает разрулить конфликты некоторых плагинов, простой пример:
Plug 'tpope/vim-endwise', { 'for': [ 'ruby','vim','sh','zsh' ] }
Кроме всего прочего, отдельно от веб-разработки-related для самого вима у меня такое:
Автоматическое переключение на английский в Normal mode и обратно на предыдущий в Insert mode:
Конечно же нужно решать проблему с локалями (т.к. веб-разработка, в отличие от программирования иногда ведется на отличных от английского языках), а именно с неудобством при их переключении в Normal mode и обратно, самое лучшее решение, это установка в систему xkb-switch + плагин в Vim для него.
Plug 'lyokha/vim-xkbswitch'
let g:XkbSwitchEnabled = 1
let g:XkbSwitchLib = '/usr/lib64/libxkbswitch.so'
let g:XkbSwitchIMappings = ['ru']
let g:XkbSwitchSkipIMappings = {'*' : ['[', ']', '{', '}', "'"]}
Линейка номеров строк:
set nu
set nuw=4
autocmd InsertEnter * set nornu
autocmd InsertLeave * set rnu
Автоматическая паста с отступами:
Чтобы навсегда забыть эту проблему и не включать перед пастой каждый раз режим пасты или использовать хитрые хоткеи, можно просто добавить настройку:
let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"
inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()
function! XTermPasteBegin()
set pastetoggle=<Esc>[201~
set paste
return ""
endfunction
Замена заменяемого без удаления (проблема забивания иксового буфера обмена):
Чтобы заменить слово или кусок окруженный делиметрами без удаления в иксовый буфер, можно использовать такую настройку на хоткей S :
nnoremap <silent> S :set opfunc=PasteReplace<CR>g@
function! PasteReplace(type, ...)
if a:0
silent exe "normal! `<" . a:type . "`>p"
elseif a:type == 'line'
silent exe "normal! '[V']p"
elseif a:type == 'block'
silent exe "normal! `[\<C-V>`]p"
else
silent exe "normal! `[v`]p"
endif
endfunction
nmap SS S$
Sw , Si" , Si( , и т.п.Проекты/сессии:
Плагин vim-startify - стартовый экран, можно настроить на сессии и букмарки, чтобы каждый раз не открывать то же самое в сплиты/табы/буферы.
Документация:
Для открытия документации в браузере (как минимум для того, что нас интересует: HTML, JavaScript, CSS, SCSS, LESS, Ruby, Rails, Django, PHP и т.п.) исходя из из ft= и положения курсора, удобно замапить на F1:
Plug 'Keithbsmiley/investigate.vim'
nnoremap <F1> :call investigate#Investigate()<CR>
Автокомплит и сниппеты:
В отличие от YouCompleteMe, автокомплитер neocomplete не тормозит (при работе и старте), не нужен питон (но нужен lua), а всё остальное такое же (для веб-разработки). Интегрируется с родным движком сниппетов neosnippet, который работает как с родными, так и универсальными vim-snippets (объединенные Snipmate & UltiSnip).
Настройка для навигации по комплиту через Tab (сам комплит всплывает автоматически, можно настроить обратное):
imap <expr><TAB> neosnippet#expandable_or_jumpable() ? "\<Plug>(neosnippet_expand_or_jump)" : pumvisible() ? "\<C-n>" : "\<TAB>"
smap <expr><TAB> neosnippet#expandable_or_jumpable() ? "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"
if has('conceal')
set conceallevel=2 concealcursor=i
endif
ZenCoding/Emmet:
Полнофункциональный Emmet для Vim: emmet-vim
Работает как нужно, но по дефолту неудобный (как по мне) хоткей <c-y>, , я настроил себе на jk . Т.е. Esc у меня kj , а дополнить jk . Первое время пользовался F4, привожу настройки, но jk намного удобнее. Просто на Tab настроить нельзя (иначе как пользоваться Tab?).
Plug 'mattn/emmet-vim', { 'for': ['html','xhtml','css','sass','scss','less'] }
au FileType html,css,sass,scss,less imap <expr><F4> emmet#expandAbbrIntelligent("\<tab>")
au FileType html,css,sass,scss,less imap <expr>jk emmet#expandAbbrIntelligent("\<tab>")
au FileType html imap <C-\> <CR><CR><Esc>ki<Tab>
Кроме Emmet'а для Vim существует аналог: Sparkup (нужен питон, не пробовал).
Отображение отступов:
Можно настроить каким символом и цветом отображать линии отступов, я настроил на хоткей <A-i> , альт как непечатаемый символ, так что проще посмотреть настройку склонировав репу на гитхабе и заглянув в .vimrc (или нажать C-v A-хоткей), скриншот.
Plug 'Yggdroot/indentLine'
let g:indentLine_enabled = 0
let g:indentLine_char = '¦'
let g:indentLine_color_term = 239
let g:indentLine_color_gui = '#A4E57E'
nmap ^[i :IndentLinesToggle<CR>
Подсветка синтаксиса:
Plug 'tpope/vim-haml', { 'for': 'haml' }
Plug 'wavded/vim-stylus', { 'for': 'stylus' }
Plug 'groenewege/vim-less', { 'for': 'less' }
Plug 'digitaltoad/vim-jade', { 'for': 'jade' }
Plug 'slim-template/vim-slim', { 'for': 'slim' }
Plug 'othree/html5-syntax.vim', { 'for': 'html' }
Plug 'cakebaker/scss-syntax.vim', { 'for': 'scss' }
Plug 'hail2u/vim-css3-syntax', { 'for': ['html','css'] }
augroup VimCSS3Syntax
autocmd!
autocmd FileType css setlocal iskeyword+=-
augroup END
Проверка синтаксиса:
Для проверки синтаксиса используется Syntastic + сторонние чеккеры:
Plug 'scrooloose/syntastic', { 'for': ['ruby','html','css', 'javascript', 'haml'] }
let g:syntastic_auto_jump = 1
let g:syntastic_error_symbol = '✖'
let g:syntastic_warning_symbol = '►'
let g:syntastic_javascript_checkers = ['jshint' ] " sudo npm install -g jshint
let g:syntastic_html_checkers = ['jshint' ] " sudo npm install -g jshint
let g:syntastic_ruby_checkers = ['rubylint' ] " gem install ruby-lint
let g:syntastic_haml_checkers = ['haml-lint'] " gem install haml-lint
let g:syntastic_css_checkers = ['csslint' ] " sudo npm install -g csslint
let g:syntastic_css_csslint_args = "--ignore=zero-units"
Деобфускация / beautify'еры:
Плагин vim-autoformat работает со сторонними 'formatprograms', например js-beautify для HTML, CSS и JavaScript. autopep8 для питона и т.д. Всё это должно быть установленно.
Plug 'Chiel92/vim-autoformat'
let g:formatprg_args_javascript = "-j -q -B -f -"
noremap <F8> :Autoformat<CR><CR>
vnoremap <C-F8> gq
JavaScript:
Дефолтная поддержка JavaScript в Vim на довольно низком уровне, так что необходимы плагины как для самого JS, так и для библиотек, плагин javascript-libraries-syntax поддерживает почти все основные либы: jQuery, underscore.js, Backbone.js, AngularJS, RequireJS, Sugar.js, Jasmine и т.д.
Plug 'moll/vim-node'
Plug 'pangloss/vim-javascript', { 'for': 'javascript' }
Plug 'jelera/vim-javascript-syntax', { 'for': 'javascript' }
let javascript_enable_domhtmlcss = 1
let g:html_indent_inctags = "html,body,head,tbody"
let g:html_indent_script1 = "inc"
let g:html_indent_style1 = "inc"
Plug 'othree/javascript-libraries-syntax.vim', { 'for': 'javascript' }
let b:current_syntax = 'javascript'
let g:used_javascript_libs = 'angularjs'
Также полезен tern_for_vim (сам Tern должен быть установлен), который умеет в 'Jump to the definition', 'Find the type' и т.д.
Пробельные символы:
По A-w показывает, по \-dw удаляет. Перевести все табы в пробелы (вдруг кто не знает), в Vim: :retab .
Plug 'ntpeters/vim-better-whitespace'
let g:better_whitespace_enabled = 0
nmap ^[w :ToggleWhitespace<CR>
nmap <Leader>dw :StripWhitespace<CR>
И кое-какие настройки по-мелочи:
set splitbelow
set splitright
inoremap kj <Esc>
map gm :call cursor(0, virtcol('$')/2)<CR>
nnoremap <F12>f :exe ':silent !firefox %'<CR><C-l>
nnoremap <F12>c :exe ':silent !chromium-browser %'<CR><C-l>
3: Esc на kj - мегаудобно.
4: для попадания на средину строки.
И последние две для предпросмотра в браузерах.
Мой ~/.vimrc
Кто что использует и как, кроме вышеуказанного?
занимательная диетология
Вот уж где такой кладезь с серебрянными пулями, который прям не знаю даже, глубже и шире, чем тот, что с методологиями программирования.
Мне в него пришлось сунуться по одной простой причине: здоровье не позволяет жрать то, что раньше, иначе бы мне было по барабану. Случилось также, что по состоянию здоровья мне нельзя в углеводы. То есть совсем обезопаситься нельзя, но и жрать пачками, как раньше, тоже уже не вариант.
И вы знаете что? Мясо, даже самое изысканное, приедается. В 90-е мне бы никто не поверил, я бы и сам не поверил, что такое скажу. Раньше приесться могли макароны и каша. Хлеб и картошка приедаться не могли по определению, но хлеб и картошку пришлось исключить.
Блины же с использованием муки из орехов крошатся и очень сухие. На вкус ничего, но второй раз отгрызаешь — и в горле поперек стает.
Я провентилировал этот вопрос и оказалось, что можно из пшеничной муки выделить глютен, который, собственно, придает тесту свойства, за которые мы хлеб любим, и который является белком, что, за исключением не слишком распространенных болезней, вещь хорошая. Добавляешь его в тесто без муки, и нужная вязкость и влаговпитывание в шляпе. Закавыка одна: глютен этот для кулинарии надо иметь в виде порошка, той же муки, а такое дома не сделаешь.
И что вы думаете? Оказывается, в мире диетического питания все посходили с ума насчет безглютеновых продуктов. Вообще, диетическое питание — это своего рода секта. Это целый особый мир. Ровно так же, как наклеивание на что-либо брэнда Apple дает минимум 30-40% к цене, точно так же наклеивание плашек «натуральное», «диетическое» и «экологичное» дает к цене 200-300%. (На заметку юным продаванам в поисках бизнес-идеи.). Короче, раньше была мода на сыроедение, была волнища вегетарианства и веганства, теперь очередным Злом объявлен глютен: народ готов радостно жевать картон, который называется безглютеновым хлебом и который стоит раза в четыре дороже обычного, будучи раза в три мельче, а рынок приспосабливается.
В результате я чистый глютен могу найти только в интернет-магазинах по довольно хамским ценам, и даже в магазинах с пекарскими комплектующими типа различных дрожжей, всех сортов муки, порошков-разрыхлителей его нет.
Можно, конечно, отмывать его из муки самому, и варить что-то типа галушек (на вкус получается как пельмени, если недоварить — как резиновые пельмени, даже если мяса не давать, хотя лучше давать — или мне в жизни довелось только хреновые пельмени есть), но какой смысл.
Я не хочу унизить тех, кто не может есть глютеносодержащее из-за проблем с малой кишкой, аллергией или разрушением щитовидки, но из-за идиотов, думающих, что это очередная панацея, нормальных вещей не найти в продаже.
В общем, печалька.
Презентация «Rust - лучше, чем C++» на русском языке от разработчика из Яндекса
http://tech.yandex.ru/events/cpp-party/june-minsk/talks/1978
Степан Кольцов
Яндекс
Rust — это современный, практический, быстрый и безопасный язык программирования. Некоторые говорят, что Rust — это как C++, если бы его писал человек, знающий Haskell.
Система типов Rust решает главную проблему C++ — небезопасность. C++ очень легко сделать ошибки, которые приведут к поломкам (например, use after free). Rust позволяет писать безопасный код, сохраняя при этом выразительность и околонулевые накладные расходы C++. В докладе будут подробно описаны механизмы языка, которые контролируют безопасность программы.
Хотя в данный момент Rust ещё не подходит для использования в продакшне, его всё равно стоит изучать. Во-первых, потому что это очень интересный подход к программированию, а во-вторых, потому что через несколько лет для разработки требовательных к ресурсам программ будет необходим именно Rust или другой похожий инструмент.
профит с маленького городка?
живу в маленьком городке, численность ~12 тыс чел вроде, город рабочий, никаких развлекух (пару кафешек не считаеца).
что бы замутить такого? бизнес планы смотрел в инете, они какие то банальные, и начальный взнос слишком велик.
Как можно затюнинговать этот участок кода?
Я не програмист и С знаю достаточно плохо, но вот тут хочеться разобраться и попытаться оптимизировать этот участок. Это код из gstreamer, который участвует в перегоне RGB в UYV http://cgit.freedesktop.org/gstreamer/gst-plugins-base/tree/gst/videoconvert/...
#define SCALE (8)
#define SCALE_F ((float) (1 << SCALE))
static void
videoconvert_convert_matrix8 (VideoConvert * convert, gpointer pixels)
{
int i;
int r, g, b;
int y, u, v;
guint8 *p = pixels;
for (i = 0; i < convert->width; i++) {
r = p[i * 4 + 1];
g = p[i * 4 + 2];
b = p[i * 4 + 3];
y = (convert->cmatrix[0][0] * r + convert->cmatrix[0][1] * g +
convert->cmatrix[0][2] * b + convert->cmatrix[0][3]) >> SCALE;
u = (convert->cmatrix[1][0] * r + convert->cmatrix[1][1] * g +
convert->cmatrix[1][2] * b + convert->cmatrix[1][3]) >> SCALE;
v = (convert->cmatrix[2][0] * r + convert->cmatrix[2][1] * g +
convert->cmatrix[2][2] * b + convert->cmatrix[2][3]) >> SCALE;
p[i * 4 + 1] = CLAMP (y, 0, 255);
p[i * 4 + 2] = CLAMP (u, 0, 255);
p[i * 4 + 3] = CLAMP (v, 0, 255);
}
}
При записи скринкаста в фуллхд videoconvert_convert_matrix8 жрет нереально много времени. Может чей-то опытый глаз поможет, хоть напрвит в сторону чего тут можно оптимизировать. например i * 4 повторяеться 6 раз, хотя понимаю что оно то почти и не дает нагрузку.
Как бороться с зергами?
В общем не совсем классические зерги, но близко. Муравьи. Перепробовали уже кучу отравы/присыпок/прочего УГ, от которой они тупо сваливают на другие места. В общем, порекомендуйте что-то годное для радикального выпилинга этой угрозы.
VIM как python IDE
Знаю тема могла уже много раз поднималась, в том числе и в интернетах. Но из-за большого количества плагинов и как следствие одни плагины приходят на смену другим, засоветуйте оптимальный набор для создания python-IDE:
Нужно:
Удобные сниппеты аля в Geany. Т.е. повесил
Удобная работа с git. Хотя пожалуй еще не придумали лучшую работу с git, чем из терминала.
Автодополнение, документация, рефакторинг и т.д. - это решается rope и вообще python-mode в целом.
Навигация по проекту: дерево файлов, поиск всего и вся по всему проекту. Создание проекта из директории (на сколько я понял нужно rope указать директорию)
Перечень меток навроде «TODO»
Множественное выделение аля емакс - нашел такой плагин: https://github.com/terryma/vim-multiple-cursors
Какими плагинами реализовать вышеперечисленное и что еще удобного посоветуете?
UPD:
А еще что есть для Jinga2/Django темплейтов, и HTML в целом. Например выделить блок текста, тыкнуть комбинацию и блок текста засовывается в <div>...</div>
sys.path разный у интерпретатора и при Py_Initialize()
Такая беда чайника у меня. Пришлось разбираться с Питоном.
Окружение: Linux Mint, python 2.7.
Надо сделать embedded python приложение. Проблема: sys.path отличается при запуске интерпретатора и при загрузке из C программы. Python code:
import sys
print sys.path
Если вызов из программы, то получается так:
['/usr/lib/python2.7/',
'/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload']
Если вызов интерпертатором python filename.py (я заменил точкой название текущей директории, чтобы скрыть юзернэйм):
['.',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages/PILcompat',
'/usr/lib/python2.7/dist-packages/gst-0.10',
'/usr/lib/python2.7/dist-packages/gtk-2.0',
'/usr/lib/pymodules/python2.7',
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client',
'/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode']
Как сделать так, чтобы они не отличались? Что пробовал: import site (не лечит проблему вообще никак).
Хорошие описания способов обхода файрвола из Ирана и КНР
Есть ли хорошие и актуальные описания методов обхода Firewall из Ирана и КНР?
По тому что пока нагуглил все выглядит крайне грустным. SSL, видимо, либо полностью блочится, либо легко может начать блочиться.
Пока что угадывается один способ - стаганография SSL в обычный HTTP трафик. Но это тоже еще вопрос - а не смогут ли они отследить такие сообщения?
Собственно, с той стороны VPS мне купят если что - одноклассники и сотрудники трудятся в США и Канаде. Вопрос в том, как до этого VPS законнектиться...
Интернет магазин радиодеталей
Где можно заказать радиодеталей, что бы цена за доставку была не бешеной, и чтобы товаров было побольше, и самое важно что бы качественные были. Конденсаторы надо на 10нФ заказать, в городе нету, с ибея и али долго ждать.
На чем контейнеры будем разворачивать?
Все мы знаем и любим proxmox, особенно всё что они сделали за последний год :) . Мне по прежнему интересно, куда можно сваливать простым смертным, у которых всего лишь несколько серверов в контейнерах, а не миллионы.
Пожелания такие:
1. Работа базовой системы с родными ядрами, без патчей.
2. Веб панелько, без особых наворотов, но с поддержкой нескольких серверов.
3. Возможность централизованно настроить бекапы данных.
4. Лимиты по памяти для контейнеров (дисковые квоты не так критичны).
Из того что вижу, lxc в непонятном состоянии, но docker «почти готов». Хотя это всё равно не для конечного юзера.
Из коробочных проектов, которые медленно но уверенно должны закопать proxmox, пока знаю только два:
1. https://coreos.com/ - нема панельки
2. http://www.projectatomic.io/ - на федоре
Кто еще знает что-то подобное? Интересуют именно коробочные решения, которыми можно просто пользоваться, не погружаясь в тонкости настройки. Как конечный юзер, я хочу конфигурировать только контейнеры, внешние адреса и бекапы.
Бесплатные on-line библиотеки
А какие есть? librusec стал платным, а что есть из подобного. Желательно большие, а не с 3,5 книгами
Замена матрицы
Очень хочется в лаптопе поменять матрицу на аналог большего разрешения, поверхностное гугление показало что у большинства матриц совместимые разъемы. Толком никакой информации конкретно по моей модели не нашлось (Samsung LTN140AT20).
Реально?
()
есть одна тян...
но тред не об этом, ибо тян сейчас на некоторое время в пролете.
Для тех, кто не в курсе что такое Diablo III, это игра в которой можно делать так (youtube, 18+)
Итак, 25.03, состоялся выпуск первого дополнения к Diablo III, для игроков, оформивших предзаказ, в чьих числах был и я. Накануне пришлось ложиться аж в 16-00, ведь запуск был запланирован в 3-00 по МСК, а потом в 9-00 нужно было в инст. Боясь очереди на серверах, встал по-раньше, в 1.30 и за 85мин. пробежал все 4 акта ванильной Diablo III. В 2.55 всплыло уведомления и я был готов покорять Вестмарш.
Итого, за первые часы патча, сорка взяла 70-й, Санктурий в очередной раз был спасен, Малтаэль - ангел смерти был повержен, а Диабло... не буду спойлерить, но он там причем. Такие дела.
Более на неделе нормально поиграть не удалось, ибо учеба/работа, лишь по-немного траил «испытания». Сурперская штука, скажу вам! Кто играл в Diablo III, и устал от бесконечного фарма 3-го акта, выдохните.
И вот, сегодня, я таки взялся за фулл-ран нового контента. Как вы уже могли догадаться я являюсь достаточно фанбоем, что бы играть в Diablo и из-за сюжета, потому за 8 часов я таки закрыл акт с закрытием всех квестов/инстов и прослушкой всех диалогов . Я в шоке, люди. Это прекрасно. Я 10 лет ждал DiabloIII, 2 года «ту_самую_diablo», и вот, дождался. Сюжет, атмосфера, музыка, крафт,огромные локации, море мобов, качественный дроп..... Да, я помню эти времена. Я помню Diablo II. Это так же. Только лучше.
Линукс тут при том, что все это делалось на нем-родном, с чем он прекрасно справляется. В общем, задавайте свои вопросы, я вроде как в теме, могу ответить и посоветовать.
А на скриншоте Fedora с OpenBox. На обоине Малтаэль, в вайне DiabloIII:RoS. Какие иконки - без понятия, ибо я по ним не загоняюсь. Ну и ШГ.
Технологии 3D-печати
На сайте ixbt.com опубликована обзорная статья по технологиям трехмерной печати. Для каждой технологии описан принцип ее работы, сформулированы достоинства и недостатки, приведены примеры коммерчески доступных принтеров. Описаны следующие технологии:
- Стереолитография (StereoLithography Apparatus, SLA)
- Выборочное лазерное спекание (Selective Laser Sintering, SLS)
- Метод многоструйного моделирования (Multi Jet Modeling, MJM)
- Послойное склеивание пленок (Laminated Object Manufacturing, LOM)
- 3D Printing (3DP, 3D-печать)
- Послойное наплавление (Fusing Deposition Modeling, FDM; эту технологию использует свободный принтер RepRap)
>>> Подробности (ixbt.com)
TCP Congestion Control
Внезапно, при выставлении
sysctl net.ipv4.tcp_congestion_control=westwoodКажется, нашёлся тот самый неуловимый «ускоритель интернета» ^__^
Опенсорсный проект с openGL >=3.2
Хочу присоединиться к сабжу (желательно, если это будет игра - независимо от степени нужности и перспектив), чтобы понять, каково это - низкоуровневая графика. Знаю Unity3D в первом приближении (на работе делаю серверную часть игры на этом движке, периодически приходится что-то фиксить в клиенте), давным-давно читал спецификацию какой-то из четвёртых версий openGL - думаю, смогу втянуться. Что посоветуете?
Снова выбор роутера
| ← назад | следующие → |
