[WT] [Архив]  [Поиск] Главная Управление
[Совместно с Ычаном]
[Назад] [Вся нить] [Первые 100 сообщений] [Последние 50 сообщений]
Ответ в нить
Имя
Animapcha image [@] [?]
Тема   ( ответ в 19666)
Сообщение flower
Файл 
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаются файлы типов 7Z, BZ, BZ2, GIF, GZ, JPG, MO, MP3, MP4, OGG, OGV, PDF, PNG, PSD, RAR, SVG, SWF, TXT, WEBM, XCF, ZIP размером до 5000 кБ.
  • Ныне 3301 unique user posts. Посмотреть каталог
  • Максимальное количество бампов нити: 500
15241877094.png-(426.24KB, 720×720, junior_developer_popukko.png)
19666
No. 19666 Закреплено watch    
Здесь можно получить помощь и консультацию по любому языку программирования, в любой сфере разработки. Не важно, программируете ли вы собственного робота, пишете серверную приблуду, интегрируете чужие API, ковыряете игру, или пытаетесь сделать сайт на Wordpress - если аноним что-то об этом знает, он обязательно поможет.

Пополняемая база знаний: http://pastebin.com/AGhLZppH

Не знаете, какой язык и библиотеки взять для вашей задачи? Вам сюда.
Не знаете, где клиент, а где сервер? Вам сюда.
Не понимаете, что такое ООП? Вам сюда.
Написали код, и не понимаете, почему не работает? Вам сюда.
Обнаружили кусок кода, и не понимаете, как оно вообще могло работать? Вам тоже сюда.
Не знаете, как подступиться к проблеме? Вам обязательно сюда.

Другие тематические нити (периодически обновляется): https://pastebin.com/psy43ibG

Примеры кода лучше выкладывать в виде ссылок на http://pastebin.com или http://ideone.com
Фронтендные вещи лучше выкладывать на http://jsfiddle.net

Аноним будет стараться дать максимально точный ответ на ваш вопрос и не пытаться предложить вам поменять весь стек технологий только потому что не знает, как решить проблему с тем что у вас есть. Впрочем, если вы забиваете гвоздь микроскопом, аноним постарается вас об этом предупредить.

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

Если здесь поселится достаточное количество программистов на одном языке / одной сферы, можно будет их выделить в отдельную нить, а в этой оставить на неё ссылку.
По мере поступления вопросов можно составлять FAQ и базу знаний.

Архив нитей:
http://410chan.org/dev/arch/res/14160.html
http://410chan.org/dev/arch/res/15681.html
http://410chan.org/dev/arch/res/17424.html

Прошлая нить пока тонет тут: >>/dev/17424
Развернуть все изображения
No. 19667    
>>19666
В процессе систематизация прошлой нити для пополнения базы знаний.
No. 19679    
Некоторая обобщенная информация из прошлой нити:

>Хочу литературу по архитектуре компьютерных игр
>>/dev/17571

>Хочу написать клон Picross (Nonogram) с использованием xamarin
>>/dev/17597

>Хочу альтернативу фреймворку MongoGame
>>/dev/17623

>Видеоматериалы для обучения Python
>>/dev/17661

>Хочу отзеркалить изображение с веб-камеры
>>/dev/17892
>>/dev/17895

>Тяжело ли искать местро трудоустройства программисту?
>>/dev/18085
>>/dev/18086

>Хочу узнать как были написаны классические игры (крестики-нолики, змейка, етц)
>>/dev/18114
>>/dev/18143
>>/dev/18144
>>/dev/18145

>Хочу научить ИИ проходить ПакМан
>>/dev/18160

>Расскажите про прерывания
>>/dev/18390
>>/dev/18393

>Помогите начать работать с БД
>>/dev/18418
>>/dev/18421
>>/dev/18422
>>/dev/18432

>Расскажите что такое load balancer
>>/dev/18466

>Подскажите упражнения для front-end разработчика
>>/dev/18880
No. 19687    
Хочу сделать парсер для одного довольно старого сайта, которых хранит в себе электронные дневники людей, нет, не школьные, а обычные, как блоги, http://www.diary.ru/ что бы можно было удобно искать нужные тебе записи по ключевым словам, потому что там крайне ущербная навигация, есть только циферки внизу, по которым можно подгружать новые страницы, а строки поиска там нет в принципе, \
интерфейс напоминает старые имиджбордовые движки без куклоскрипта,
как вообшще можно сделать такой парсер и каков будет принцип его работы?
Сначала в какой-то отдельный текстовый файл скачивается весь дневник, а потом в нем происходит поиск и переадресация на нужную страницу?
На чем лучше такое писать и какая должна быть архитектура приложения?
No. 19688    
>>19687

>чтобы можно было удобно искать нужные тебе записи по ключевым словам, потому что там крайне ущербная навигация, есть только циферки внизу, по которым можно подгружать новые страницы, а строки поиска там нет в принципе

Первое решение, самое простое и ленивое для достижения твоей цели - завести google custom search для этого ресурса, если это еще можно. Альтернативно, просто воспользоваться встроенными инструментами поиска гугла, и совершать поиск, добавив инструкцию site:myawesomediarysite.ru и возможно дополнительно inurl:myauthorurl

Ссылки по этой теме:
https://bynd.com/news-ideas/google-advanced-search-comprehensive-list-google-search-operators/
https://support.google.com/websearch/answer/2466433?hl=en

Теперь второе решение - реализация приложения, которое ты задумал.

>Как вообшще можно сделать такой парсер и каков будет принцип его работы?

Тут ты начинаешь строить гугл в миниатюре.
В лоб эти приложения строятся таким образом:
  • Берется движок / фреймворк для полнотекстового поиска, на целевом языке
  • Потом пишется код для импорта этой информации, где средствами этого движка / фреймворка составляются индексы по ключевым словам и складываются в хранилище, например в бд
  • Потом пишется код, который позволяет тебе запускать поисковый запрос по этой информации и показывать результаты в нужном виде, например выдержка из текста и ссылка на запись
  • Потом, по желанию, ты приделываешь любой удобный тебе интерфейс, который позволит тебе запускать этот поиск и работать с результатами. Это может быть простая веб-страничка с полем для ввода запроса и местом для вывода результатов.
>На чем лучше такое писать и какая должна быть архитектура приложения?
Писать лучше на том, с чем лучше всего знаком. Если мало знаком со всем, попробуй написать на NodeJS, т.к. хотя бы будешь и фронтэнд и бэкенд свой реализовывать на одном языке

Воркфлоу у тебя получится примерно такой:
Интерфейс --> Контроллер поиска --> Поисковый Фреймворк --> Хранилище

Но я бы всё таки попробовал сначала инструменты гуглопоиска.
No. 19690    
>>19687
Очевидно, нужно парсить хтмл перловыми регулярками.
No. 19701    
>>19688
Спасибо за такой подробный ответ. Буду пробовать и то и другое.
Из всех ЯП я лучше всего знаю Java (SE), именно на ней я бы реализовал бэкенд,не знаю правда какой фреймворк использовать для работы с текстом, не посоветуешь какой-нибудь?,
а интерфейс уже можно на чем угодно написать..
Так что наверно бэк - Java, БД - MySQL, фронтенд - что-нибудь,

>>19690
ох, надеюсь нет, вообще не представляю, как можно нормально знать регулярки, если конечно ты не работаешь с ними каждый божий день
No. 19702    
На реплику >>19690 рекомендую вообще не обращать внимания, так как это либо троллинг, либо просто шуточный невѣрный отвѣтъ, основанный на появлении мема «Залго» в отклике https://stackoverflow.com/a/1732454 на сайте StackOverflow.
No. 19703    
>>19702
Нет ничего плохого в парсинге регулярками если иметь голову на плечах.

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

Хватит тащить в конкретные прикладные задачи идеологическую чепуху.
No. 19704    
>>19703
А почему нельзя взять какой-нибудь specflow и selenium.webdriver, да написать простейшие ui-тесты которые просто и понятно будут делать все что ты захочешь?
No. 19705    
>>19704
Потому что использовать веб-драйвер для парсинга - оверкилл, если все данные доступны на статичной страничке.
Но как отрисовывает diary.ru я не смотрел, да.
No. 19711    
>>19701
>не знаю правда какой фреймворк использовать для работы с текстом, не посоветуешь какой-нибудь?
Конечно посоветую. Мне в своё время очень понравился Jaunt: http://jaunt-api.com/

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

Правда, помни, что
>Jaunt is the ideal tool when Javascript support is not required
Так что жаваскрипт он тебе не эвалюирует. Но вроде, в твоем случае это и не нужно, верно?
No. 19740    
152527207256.png-(27.61KB, 597×478, cc5x.png)
19740
Извините, что влезаю со своей мелочью, но такой вопрос: вот есть компилятор cc5x для PIC микроконтроллеров, на его оффсайте заявлена поддержка MPLABX, надо только плагин поставить. Только вот планига нет, в репозитории плагинов пусто. Ни для 2.35, ни для 3.х. Не, добавить сторонний компилятор можно и вручную, только будет такая фигня, как на рисунке - среда просто не видит объявления имен из файлов компилятора и все. То есть, IDE нормально компилирует программы для разных микроконтроллеров, все ок, только вот выделение конкретно достает, так как настоящих ошибок не видно. Может быть кто-то знает, что с этим сделать можно, а то информации про cc5x как то уж слишком мало. Или хотя бы показать, куда пойти спросить.
No. 19742    
>>19740
Почему не XC8/XC16? Объявления <p18xxxxx.h> точно есть в инклудах?
No. 19749    
>>19742
XC8 заметно портит код (бесплатный вариант), точнее, сильнее, чем cc5x. На всякий, на асм'е писать могу, просто для неответственных задач это долго, читабельность старого кода так себе и тд. Header конечно же объявлен, иначе уже компилятор начал бы ругаться на необъявленные символы.
Сейчас подумал, header нужно прописывать с путем, что немного странно, так как при добавлении компилятора я указываю пути, IDE типа в этих путях не ищет? Попробую посмотреть настройки путей поиска, хотя сомнительно, что поможет.
No. 19754    
>>19740
Ты просто не дочитал. Плагины есть, только представлены они в виде исходников, которые надо собрать самому:

В файле
>http://www.bknd.com/files/mplabx-i.txt
Лежит ссылка на
https://github.com/mc6pac/toolchainCC5X
>CC5X from v3.5D
>MPLABX from v3.40

По связыванию через добавление стороннего компилятора у них лежит другой гайд: http://www.bknd.com/files/mplabx-p.txt
No. 19759    
>>19754
Да, конечно, я видел этот гит, но я решил, что он заброшен, так как не нашел там нормального гайда, что делать с файлами (ну, я все-таки электронщик и "лоу-левел" программист, в компиляции программ на этих ваших явах я не очень).

А вот про тайпдефы из гайда про дженерик плагин недочитал, да. Собственно, сейчас cc5x через дженерик плагин и стоит. Попробовал скопипастить их в тект программы, добавлял через #include внешний файл, и все равно среда не видит объявлений.
No. 19760    
Есть ли причины использовать Hg вместо git, в 2018?
No. 19762    
Привет.
Вопрос: является ли в 2018 году Джанго хорошим выбором для получения первой работы программистом? (ниже подробности)

Я начал изучать Джанго именно с целью зарабатывать в дальшейшем программированием, и меня постоянно мучает вопрос: правильно ли я выбрал? Не трачу ли я силы на умение, не пользующееся спросом? Да, хэдхантер выдаёт результат по запросу Django, но выдача не даёт понимания того, как сложно найти работу. Выбрал Питон-фреймворк, потому что был до этого знаком с Питоном на любительском уровне.

Если в моём вопросе видно, например, наивность, или непонимание «как всё устроено», то будет здорово, если укажете что не так, объясните или поправите.
No. 19763    
>>19762
Расскажу тут историю, если ты не против.

Три или четыре года назад, решил серьезно заняться кодингом и начал аналогично метаться: языки, фреймворки, вакансии.
Путь мой, конечно, начинался с php. Но там и с языком пиздец, если писать что то больше простой странички и с фреймворками такой же, да и из работы либо веб студии, либо допиливание/исправление старого говна.

Начал смотреть на nodejs, посмотрел туторы, тогда был модным express. Сколько же я плевался от синтаксиса. Js такое же говно если писать что то сложнее мелких скриптов на сайте. Создаешь лапшу из колбеков, тогда для меня вообще было дикостью, объявлять функцию в аргументе функции и она тянется вниз и сиди разбирай эти скобки.
Более всего нравилось в самом низу страницы такая хрень "}))));". Сейчас с синтаксисом там полегче, но все равно видно, что это блять костыли.

Смотрел на питоны, сразу скажу, что общение на долго не сохранилось. Не знаю почему.
Либо то, что всё какое-то не сишное или эта классическая модель ооп меня добивает. Хз.

Потом я ебанулся в край, решил заняться Perl в 2014 или 2015 то. Не знаю откуда такая идея появилась ебнуло и все. Но зато ебнуло правильно, что изучать надо не как на пхп макакать что то, а книги открыть, концепции языка узнать, фичи. Прочитал я 2 книги по нему начальный с верблюдом и углубленное с ламой там есть смешнявки на эту тему в книгах. Было полезно, сейчас до сих пор юзаю когда надо с текстом поколдовать или регулярки потестить, но не более, хотя Пайтон лучше наверное зайдет для этого.

Ну и гуглю язык, чтобы на Си было похоже, чтобы ооп костыльно-ебаного не было, чтобы можно было процедурщину ебошить и красиво чтобы, а не как в си есть у меня друг, который всё на си ебошит и сайты и микрухи, что не предложи сделать ответ очивидный - Си!. Нашел я таким образом Go. Понравилось всё, компилируемый, мусор собирает, строгая типизация, встроенная либа жирная всё есть, go get любой хуйни с гитхаба, ООП местный которого там нет понял с пол пинка, а не как эти годичные осиляторства классического джава ООП. Идеально и веб можно ебошить, и утилиты себе на линупс.

Открываю, значит hh, в фильтрах мой мухосранский миллионик, вбиваю в поиск Golang. В выдаче - нихуя. Окей, пишу Go в строке, две вакансии. Ура - первая танцовщица GoGo, вторая с машинками связана. Ну вот это заебись, вот это мне фортит.
Ну я и решил, чтобы все шли нахуй. Купил книгу по го та что с оленем, вторую скачал, которая с мостом красным. Прочитал за три месяца, изучил концепции, наваял пару прог, утилиты да браузерку на web сокетах.

Заключение:
А нихуя ещё не понятно чем кончилось, вроде и работа есть теперь пишу периодически на гошке, деньги есть, вакансий куча появилось, уровень ЗП гораздо выше чем пхп макака. В общем развиваюсь дальше, тестирование осилил недавно.
Да и вакансии все на свежие проекты, без допиливания древнего говна.

Кароч забивай хуй и качайся в том что нравится, без работы не останешься, а знания питона, вроде как классно. Можно и машин лернинг и дэйта саенс пилить.
Где то на Хабре было, чувак писал про свои 20-25, что он метался, чем заняться, что выбрать, как угадать. Ощущение, что куда то не успел и поезд уже ушел.
На самом деле все ещё только создаётся.
No. 19764    
>>19759
>Да, конечно, я видел этот гит, но я решил, что он заброшен, так как не нашел там нормального гайда, что делать с файлами (ну, я все-таки электронщик и "лоу-левел" программист, в компиляции программ на этих ваших явах я не очень).

Плагин надо открыть в NetBeans и собрать в .nbm:
https://platform.netbeans.org/tutorials/nbm-projectsamples.html#building
Тебя интересует
>Creating a Shareable Module Binary

Затем взять этот .nbm и скормить MPLABX по инструкции здесь:
http://microchipdeveloper.com/mplabx:tools-plugins-downloaded
No. 19765    
>>19762
Питон и конкретно Джанго смогут надежно трудоустроить тебя в крупные компании или хорошие стартапы в ДС и ДС2 (предполагая, что ты из России), а также, после некоторого опыта, и на европейскую/американскую удаленку. Здесь проблем с поиском работы не будет еще довольно долгое время, потому что, во-первых, язык и фреймворк для своих задач достаточно хорошие (много вспомогательных инструментов, большая база знаний, отсутствие фатальных подводных камней), и, во-вторых, на них пишет довольно много людей, чтобы можно было начинать новый проект на Питоне и быть уверенным, что получится собрать для него штат - что, например, неверно для Руби (в России; в США, насколько я знаю, с этим получше). В регионах ситуация для питонистов, конечно, печальнее, но какую-то работу тоже можно найти - сужу по немаленькому количеству откликов иногородних питонистов на свои вакансии.
No. 19773    
хочу стать программистом по мамашиному обучению нашел курсы http://skillfactory.ru вопрос стоит ли доверять этим курсам, и что еще нужно изучать что бы стать специалистом по машинному обучению? извиняюсь просто не знал куда обратиться.
No. 19774    
>>19773
Обучись сначала начинать предложения с большой буквы.
No. 19775    
>>19774
Какая тебя вообще разница как я пишу?
это я просто тупо не подумал.
No. 19776    
>>19774
Чиочую.
No. 19780    
>>19773
К сожалению, не сталкивался с их курсами, но возможно про них знают в нити машинного обучения:
>>/dev/19531
No. 19781    
>>19773
>>19780
Также вижу, что вот прямо завтра, 14го мая, на курсере стартует курс по машинному обучению, который будет вести профессор Стенфордского университета: https://www.coursera.org/learn/machine-learning

Мне кажется, это может тебя заинтересовать.
No. 19785    
Хочу поступать на кафедру искусственного интеллекта. Есть вопрос: насколько реально после выпуска заработать на этом? Не в этой стране, так за границей.
No. 19786    
>>19785
Смотря в какой АИ-связанной сфере ты хочешь заработать. Сейчас вот все увлеченно ищут специалистов по машинному обучению. Если у тебя есть навык, то можешь начинать и без поступления на кафедры, работая удаленно.
No. 19994    
что не так сделал
public class Its_alive {
public static void main(String[] args) {
System.out.println ("Its Alive!");
}
}

Compilation error
Main.java:1: error: class Its_alive is public, should be declared in a file named Its_alive.java
public class Its_alive {
^
1 error

Please do not declare public classes.

пишет не объявляете открытые классы что это значит не врубаюсь вот идиот по ход
No. 19995    
>>19994
>Main.java:1: error: class Its_alive is public, should be declared in a file named Its_alive.java
Ну, компилятор тебе всё написал. Жаве не нравится, когда имя файла и имя класса не совпадают. Переименуй файл в Its_alive.java, или переименуй класс в Main, и всё у тебя станет лучше.
No. 19996    
>>19995 уже пробовал пишет
Compilation error
Main.java:1: error: '{' expected
public class Its_alive.java {
^
1 error
No. 19997    
>>19995 ну ответь
No. 19998    
>>19995 ебать я долбоеб был
No. 20001    
>>19998
Разобрался с созданием класса?
No. 20004    
152697055514.jpg-(81.97KB, 540×720, 15230838174210-b.jpg)
20004
>Не знаете, как подступиться к проблеме? Вам обязательно сюда.
Здравствуйте. Дело такое, что я в целом не понимаю как подступиться к 3д. Цель - наваять какой-нить примитивный, очень простой 3д шутер. Потом его допиливать. Прикрутить сеть LAN/Ethernet, и т.д.
Гуглил много инфы по directx, но ничего не понятно. Вернее там 99% всего нагугленного состояло из "делаем сложную штуку, объяснять как работает и что значат команды буду в уроке 2, который я никогда не напишу".

Я очень устал. Мне уже кажется, что между hello world и любым нормальным приложением с каким-нить API просто непреодолимая пропасть. Поэтому прошу подкинуть хоть какую-нить инфу, может книги/статьи, которые помогли именно вам в этой сфере.

Интересует именно использование directx/opengl, скажем, с с++.
No. 20005    
>>20004
Всё зависит в первую очередь зависит от опыта.
В твоём случае, когда ты хочешь просто собрать простой шутер, или можно сказать, рабочий прототип шутера, а также хочешь прикрутить к нему какие-то достаточно абстрактные фичи (вроде мультиплеера по LAN), то создаётся впечатление, что тебе надо как можно быстрее прыгнуть в работу непосредственно над самой игрой, а не созданием движка для неё. Созданием движка можно будет заняться уже потом, когда будет понятно, как игра должна работать.

И в этом контексте, очень хочется вспомнить про Unity, который достаточно быстро позволяет создать что-то типа такого: https://my.mixtape.moe/oplint.mp4

Есть только одна загвоздка, в то время как Unity поддерживает С++ для написания плагинов, основной используемый язык там С# альтернативно, JavaScript. Если само по себе это не является препятствием, то продолжай читать дальше.

Для Unity существует достаточно много туториалов, их можно найти много где, включая официальный сайт.

Вот например, туториал конкретно о том как создать шутер с мультиплеером: https://unity3d.com/learn/tutorials/topics/multiplayer-networking/merry-fragmas-30-multiplayer-fps-foundation
Это первая часть из трёх, тут закладывается базис игры.

А вот детальный список туториалов по сетевому коду, где в том числе есть список по вышеупомянутому шутеру: https://unity3d.com/learn/tutorials/s/multiplayer-networking

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

Если же хочется поработить именно с С++, то из готовых движков стоит смотреть в сторону Unreal Engine 4. Он достаточно популярен, хотя и имеет своеобразный "блок-схемный" подход к созданию и управлению сценой. Если работать с Unity тебе не захочется, или он тебе попросту не понравится, напиши мне и я постараюсь принести тебе материлов по UE4.
No. 20006    
>>20005
Мне кажется, что анон выше имел в виду, что ему хочется прям с нуля создать шутер используя именно directx/opengl. А ты предлагаешь ему по сути готовый вариант всего того что он хотел бы создать сам.
No. 20007    
>>20004
Теперь, если тебе хочется непосредственно пощупать и потрогать 3д-графику за всякое, и понять как она работает то стоит посмотреть в сторону книги:
>Андре Ламот
>Программирование трехмерных игр для Windows. Советы профессионала по трехмерной графике и растеризации
https://vk.com/wall-54530371_660

Конечно, она уже старая, но по крайней мере поможет тебе разобраться в базе, и упростит понимание более совеременных технологий.

Теперь, если тебе хочется потрогать такие вещи, как АИ противников, обработка управления, работа со звуком, многопоточность, физика (к сожалению про сетевой код там нет, в качестве мультиплеера они рассматривают разве что сплит-скрин)
>Андре Ламот
>Программирование трехмерных игр для Windows. Советы профессионала. Второе издание.
http://www.cosmic-rays.ru/books61/20036101Ламот.pdf

Опять же, сама книга уже старая, но в данном случае это может помочь разобраться, как же это всё делается.

По сетевому коду, пока могу найти только общие вводные статьи:
https://gafferongames.com/post/what_every_programmer_needs_to_know_about_game_networking/
No. 20008    
>>20006
Написав свой ответ, я тоже так подумал, поэтому приложил ему материалы, которые помогут создать эти вещи с нуля в >>20007, пусть не самые современные, но достаточные для того чтобы их потом можно было осовременить. Найти бы теперь такое же детальное описание сетевого кода, это ж очень влияющая на архитектуру игры вещь.
No. 20009    
>>20005
>>20006
>>20007
>>20008
Ребят, спасибо, вы лучшие.
С Андре Ламота и начну. За информацию по движкам тоже спасибо, но почему-то мне кажется, что прежде чем с ними работать, нужно попробовать сделать свое, понять, как это работает.
No. 20010    
>>20009
>мне кажется
Скажи мне, ты, перед тем как есть, создаёшь вселенную, моделируешь планеты, проводишь эволюцию, находишь нужных растений и животных и убиваешь и готовишь их самостоятельно, попутно добывая и обрабатывая ресурсы на стол, стул, ложку, тарелку и вилку, или идёшь есть приготовленное дома и купленное в магазине?

Разбираться в вопросе полезно, но изучение может убить слишком много времени, чтобы интерес полностью пропал. Тем более в таких комплексных вещах и на таком низком уровне.

Дело твоё, но >>20005-совет лучше описывает процесс, если тебе интересно в первую очередь сделать игру, а не. Плюс, движки тоже требуют времени на изучение, и понимание того, как они работают, учит каким-то концепциям ничуть не хуже велосипединга. А ещё лучше читать книжки о базе, чтобы понять теорию, отпракать на чём попроще, а потом не возвращаться без необходимости.
No. 20011    
Ищу совета доброго анонима.
Есть желание и способности работать в it. Правда такая проблема: на кого лучше поступать и кем работать? Ведь действительно хочется быть всем везде.
Для себя самым оптимальным вижу прикладное программирование, ну или машинное обучение и ИИ (после: работа в крупных компаниях или инди-разработка какого-либо ПО, последнее вряд ли прокатит с ИИ).
No. 20013    
>>20011
>на кого лучше поступать и кем работать
На туда, кого берут в твоём регионе.
>хочется быть всем везде
Иди в software engineering, будешь потом пробиваться в тимлиды/менеджеры и пить смуззи.
No. 20014    
>>20011
По вопросу, чем конкретно заняться, возможно, тебе поможет такая информация из пополняемой базы знаний: https://pastebin.com/AGhLZppH

>>Я хочу программировать, но не понимаю, куда можно приложить усилия
http://410chan.org/dev/arch/res/14160.html#14354

>>Я ищу свой стек / хочу переквалифицироваться / поменять стек
http://410chan.org/dev/arch/res/14160.html#14188
http://410chan.org/dev/arch/res/14160.html#14265
http://410chan.org/dev/arch/res/14160.html#15233
http://410chan.org/dev/arch/res/14160.html#14968

>на кого лучше поступать и кем работать
Поправь, если данные устарели, но по-моему многие ИТ-специальности в наших краях выпускают тебя почти всегда одинаково, как инженера-программиста. Плюс некий общий ИТ-курс до непосредственных занятий по специальности ты всё равно пройдешь. Надо понимать, что в универе обычно учат плохо и старому. Хотя дела могут быть лучше, если в универе есть кафедра открытая местной ИТ-компанией, чтобы дергать оттуда новых сотрудников.

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

Что подводит к ответу на вопрос
>кем работать
Без опыта ты сможешь пойти работать скорее всего только как джуниор. Это очень сужает твой круг возможностей, т.к. большую часть времени ты будешь заниматься всякими мелочами и просто работать над мелкими и средними задачами которые приедут тебе сверху. Но если ты будешь работать пока учишься, как я тебе и предлагаю, то это всё не очень критично, т.к. доход как для студента это всё равно даст немалый, и поможет достичь главной цели - получение опыта и необходимой квалификации, чтобы устроиться туда, куда ты захочешь. Если к моменту окончания универа у тебя уже будет пару-тройку лет опыта, ты уже будешь в курсе того, что там в индустрии на тот момент круто и куда бы ты хотел себя подать. Главное, не иди "программистом" в какую-то непрофильную шарашку, устраивайся именно как разработчик в софтвер контору, продуктовую или аутсорс - не так важно.
No. 20018    
>>20011
> работа в крупных компаниях или инди-разработка какого-либо ПО, последнее вряд ли прокатит с ИИ
Вот и решай уже сейчас, продавать свою жизнь крупной компании или инди-разрабатывать для инди-разработки, скорее всего, потребуются и другие таланты и умения кроме программирования.
>>20013
> На туда, кого берут в твоём регионе.
Игнорируй этот совет, если ты живешь в СНГ.
>>20014
> пару-тройку лет опыта, ты уже будешь в курсе того, что там в индустрии на тот момент круто
Конечно, он обязательно должен за это время освоить стек из модных фреймворков и получить опыт agile-разработки в крупной компании, накопив портфолио проектов.
No. 20019    
хуёня не объяснимая кто нибудь поможет решить вот это
Реализуйте метод, возвращающий true, если среди четырех его аргументов ровно два истинны (любые). Во всех остальных случаях метод должен возвращать false.

Воспользуйтесь шаблоном кода, который предлагает система. Ввод-вывод будет сделан за вас. Вам надо только проанализировать переданные в метод booleanExpression значения (a, b, c, d) и вернуть результат. Попробуйте составить формулу с использованием булевых операторов. Если не получается, вернитесь к этому заданию после просмотра степов про условные операторы и циклы.

При записи сложных выражений рекомендуется использовать скобки, чтобы не запутаться в порядке применения операторов.

В качестве примера уже указано заведомо некорректное решение задачи. Исправьте его.

Совет тем, у кого не проходит какой-то из тестов. В данной задаче возможно всего 16 комбинаций значений входных параметров. Их можно выписать на бумажку, посчитать для них правильные ответы и сравнить с тем, что выдает ваше решение. Попробуйте самостоятельно проделать это, найти ошибку и исправить решение.
Sample Input 1:
false false false false
Sample Output 1:
false
Sample Input 2:
true true true true
Sample Output 2:
false
Sample Input 3:
false false true true
Sample Output 3:
true
No. 20021    
public static boolean booleanExpression(boolean a, boolean b, boolean c, boolean d) {
return a & b & c & d;
}
No. 20024    
>>20019
Выпиши таблицу истинности булевой функции, по этой таблице построй формулу в дизъюнктивной нормальной форме; опционально можешь упростить формулу, применяя законы булевой алгебры.
No. 20025    
Анон!!! Помоги, пожалуйста. В oracle sql вообще не разбираюсь. Заставили на работе срочно посчитать количество записей за один определенный месяц, причем количество по значению типа. Вообщем на сколько я смог додуматься это
select type, count()
from table
where time >= to_date('01.01.2017')
and time < to_date('01.02.2017')
group by type;
Но блин проблема в том, что уже несколько часов считает, а результата нет.
Там таблица по секвенциям разбита, например я знаю что можно сделать запрос по одной секвенции
select from table partition(p_01_01_2017)
но как сделать запрос по нескольким секвенциям??? Или как иначе можно ускорить?? Я должен успеть до утра посчитать
No. 20026    
>>20025
https://stackoverflow.com/questions/19523061/select-from-several-partitions-at-once
>>20025
> Или как иначе можно ускорить??
Создать индексы по нужным колонкам. Только не нужно создавать их сейчас, а то точно не успеешь. Посмотреть какие задержки ввода/вывода, использование памяти и обновить железо при необходимости.
No. 20027    
>>20019
>>20021
На скорую руку решение видится как-то так:
https://ideone.com/1ELQep
Наверняка есть более элегантное, но уж что пришло в голову.
No. 20033    
>>20026
Кароче успел. Вообщем ночью придумал запрос выполнять по каждому фрагменту таблицы по отдельности. Прикинул что в одном месяце 30 дней, то есть 30 фрагментов. И сидел запускал 30 раз ночью такой запрос:

select /+ parallel(32) /type, count(*)
from table partition(p_01_01_2017)
group by type;

Потом результат каждого вставлял в librecalc. В конце в librecalc просуммировал формулой всех 30 дней значения и получил результат за месяц. Для ускорения использовал parallel, хотя его запрещают использовать почему то. Надо все таки как то фундаментально этот sql выучить, а то так запаришься.

Ну, вообщем от души Анон по-братски, спасибо за поддержку.
No. 20047    
хочу выложить свой asp.net mvc сайтик на гитхаб, чтобы обновлять было удобнее, но меня волнует безопасность данных... на сайте можно регистрироваться и логиниться (Forms authentication), после чего добавлять/удалять картинки. мне вот интересно, может ли как-нибудь пользователь получить контроль над данными другого пользователя? например, печеньку авторизации подделать и поудалять все, или еще что.

вот так выглядит метод удаления: https://pastebin.com/SvXCFxKP

меня интересует правильно ли я делаю проверку на то, принадлежит ли картинка пользователю. возможно, стоит делать как-то по-другому?
No. 20048    
>>20047
Если тебе нужен гит и не хочется выкладывать в общий доступ, то можешь создать репозиторий на bitbucket
>вот так выглядит метод удаления:
>https://pastebin.com/SvXCFxKP
Не очень информативно.
Обычно делают так: при авторизации клиент получает от сервера cookie с идентификатором случайным сессии, а на сервере в базе хранится информация связанная с сессией (id пользователя и т. д.), ассоциированная с этим идентификатором. При такой реализации куки подделать нельзя, только своровать.
No. 20049    
>>20048
в базе я храню только логин-пароль пользователя, но данные сессии/авторизации не сохраняю.
вот метод логина: https://pastebin.com/nzyfEtu3
может, это
> клиент получает от сервера cookie с идентификатором случайным сессии, а на сервере в базе хранится информация связанная с сессией
делает метод "FormsAuthentication.RedirectFromLoginPage(model.Login.Trim(), true);"?

мсдн пишет, что второй параметр "true to create a durable cookie (one that is saved across browser sessions); otherwise, false.". это не оно?
No. 20055    
Привет, это снова я.
Что нужно знать, чтобы претендовать на позицию джуниора, если а) профильной вышки нет б) опыта нет в) мне 26 (так ли это важно?)

Сейчас
  • по алгоритмам: как реализовать сортировки быструю, слиянием, выбором, вставкой и хипсорт; понимаю как они работают
  • по структурам данных: как реализовать стэк, очередь, кучи (min и max)
  • по Джанго: прочитаны туториал Джанго и Obey the Testing Goat; знаю как писать темплейты, виды, модели (слабовато), юниттесты средставами из коробки, функциональные тесты применительно к Файрфоксу с помощью Селениум и Геккодрайвер.
  • по git: простейшие понятия и операции вроде состояний файлов (modified/staged), создания и удаление ветвей, фаст-форвард коммитов, тегов.
Не знаю ничего о SQL-запросах, базах данных; контейнерах, виртуализации, Докере и деплое вообще; rebase, tracking ветви и многое другое, а самое главное — мало опыта. В большинстве случаев я имею представление как делать и откуда начинать поиск решения в случае чего, а не именно знаю как делать.

Извините, если это глупый вопрос, но так как я не в отрасли даже на чуть-чуть, я не могу оценить свой уровень объективно. Понятно, что это мало и слабо, но мало и слабо может быть разным.
No. 20056    
>>20055
Насколько я понял, ты спрашиваешь про питон, поэтому я могу ответить только на твои общие вопросы.

>а) профильной вышки нет
ничего страшного, если только ты не хочешь прямо сейчас эмигрировать
>б) опыта нет
для джуниора - ничего страшного
>в) мне 26 (так ли это важно?)
не важно

Первое что у тебя будут спрашивать на интервью на джуниорскую позицию - это скорее всего основы ООП. Это три парадигмы, и как они работают, повторное использование кода и подобные вещи.

>алгоритмы
Мне кажется, это не так важно, как базовые знания целевого языка, типа как в нем из коробки работают коллекции, какой метод сортировки (раз уж ты её упомянул) использует в них стандартная библиотека, етц.

Что для джуниора важнее в контексте конкретно алгоритмов, так это понимание оценки сложности алгоритмов, т.е. та самая Big-O Notation: http://bigocheatsheet.com/

>структуры данных: как реализовать стэк, очередь, кучи (min и max)
Добавь сюда еще связанный список, но в то время как это могут спросить на собеседовании, в реальности тебе врядли придётся самому реализовывать эти структуры. Обычно любят спрашивать про различия между разными типами коллекций.

>Не знаю ничего
>о SQL-запросах, базах данных;
Не уверен, что тебе надо связываться именно с SQL, это надо смотреть по желаемому месту работы, но базово, тебе как джуниору надо уметь самое простое - создать/удалить базу, уметь создать/удалить в ней таблицу/коллекцию, уметь делать к ней CRUD-запросы: создание сущности, выборка сушности, обновление поля в сущности, удаление сущности.

>Не знаю ничего
>о контейнерах, виртуализации, Докере и деплое вообще
Это тебе как джуниору и НЕ девопсу знать не нужно. Об особенностях местного деплоя тебе местный девопс / админ / деплой инженер обязательно расскажет.

>по git
>Не знаю ничего о rebase, tracking ветви и многое другое
Это достаточно простые вещи, которыми легко овладеть если ты сделаешь какой-нибудь свой микропроект с использованием системы контроля версий. Но базово, от джуниора хотят чтобы он своими действиями с репозиторием не портил репозиторий, а поскольку для отдельных фич разработчики обычно создают отдельные ветки в репозитории, которые по окончании работы они сначала обновляют (например, делая rebase на master), потом отправляют на код ревью, а потом, по результатам код ревью, мержат в целевой бранч (например master), то тебе действительно стоит понимать суть базовых операций в системе контроля версий, особенно направление в котором они происходят (ты не представляешь, сколько людей мержат мастер в свой бранч, вместо того чтобы мержить свой бранч в мастер). Соответственно, кроме простейших операций тебе надо в контексте git знать про checkout, fetch, pull, rebase, cherry-pick, merge, push.

>самое главное — мало опыта
Вот поэтому мы и говорим о джуниорской позиции, там и не ожидают что у тебя есть много опыта, там обычно ожидают что
>я имею представление как делать и откуда начинать поиск решения в случае чего

Теперь подождем кого-то кто сможет тебе прокомментировать твой пункт про Джангу.
No. 20079    
Здесь есть программисты на qt? Можете подсказать такой момент. Допустим у меня программа будет состоять из нескольких файлов исходников. В интернете рекомендуют собирать так, зайти в корень исходников и выполнить qmake --project; qmake; make. Что происходит когда я редактирую один файл исходников? Все cpp файлы перекомпилируются по новой, или только один, измененный?

Просто раньше, когда писал на крестах, использовал свой скрипт, который следил за изменениями, пересобирал только измененные cpp, а остальные .o оставлял нетронутыми. В qt все сложно, и свой велосипед к qmake уже не применить.
No. 20083    
>>20079
Make для того и придумали, чтобы заново генерировать только те объектные файлы, которые устарели. Если в Makefile правильно описаны зависимости, то лишних перекомпиляций не происходит. При сборке с использованием qmake определение зависимостей и генерирование Makefile происходят автоматически.
No. 20086    
>>20055
Больше, чем я?
No. 20087    
>>20083
Тогда я доверюсь qmake, спасибо!
No. 20090    
152914263364.png-(90.52KB, 1530×456, wewrt.png)
20090
Почему может не работать этот floodFill()? Программа просто завершает работу, ничего не говорит ни про стек, ни про ошибки сегментации.
No. 20091    
15291426764.png-(21.26KB, 753×87, srdytfug.png)
20091
>>20090
Пример запуска
No. 20092    
>>20090
Я не сишник, но сделаю осторожное предположение, что такое поведение будет если у тебя никогда не срабатывает условие:
if (c_current_color == c_old_color) {}

И тогда твой код считает что выполнение уже успешно завершено, т.к. семпл цвета не является цветом, который надо заменить. Проверь с помощью дебага, срабатывает ли это условие, попадаешь ли ты внутрь. Можешь по-настоящему брейкпоинтов поставить и завести дебаггер, можешь просто натыкать выводов в консоль в нужных местах (например, вывести c_current_color, потом c_old_color, потом результат операции их сравнения, может чего-то из этого нет или ты их неправильно сравниваешь)
No. 20093    
152917106428.png-(78.62KB, 1519×292, ertyrjyrtuy.png)
20093
>>20092
Нет, похоже это таки ошибка переполнения стека. Вообще код, тоже с ошибкой, но я ее пофиксил, один фиг - тот же результат. На маленьких изображениях, до 300х300, все работает. Больше - программа молча завершается. Видимо какой-то внутренний баг, и не выпадает сообщение о переполненном стеке. Надо переходить на другой алгоритм, с очередью или еще чем.
No. 20094    
>>20093
Ну, здесь не совсем понятно, зачем тебе рекурсия нужна как таковая. Ты можешь просто взять и линейно пройтись по всем пикселям картинки, и поменять им цвет, так? Если хочешь параллелизации, можно сделать дополнительный кусок кода который разобьет обработку на чанки по количеству ядер.
No. 20095    
>>20093
Каждый ход внутрь рекурсии кладёт (в теории) в стек все аргументы функции и ещё по мелочи. Делай заливку обходом в ширину.
И то, на ещё больших полотнах может быть проще закрашивать сразу большими квадратами, а потом уточнять.
No. 20096    
152921636142.png-(102.94KB, 1716×493, qe.png)
20096
>>20094
>>20095
Я взял алгоритм с очередью. Он не вылетает, и работает вполне себе быстро.
No. 20099    
152934992673.png-(46.21KB, 1366×768, 2018-06-18_22-19-47.png)
20099
asp.net mvc. метод Html.DisplayFor не отображает объекты типа short, когда использую рефлексию.
все это дело выглядит так: https://pastebin.com/uYcN4x5x

что я делаю не так?
No. 20100    
>>20099
Вижу такое:
>Html.DisplayFor() will render the DisplayTemplate that matches the property's type.
Т.е. когда ты ей даешь
>объекты типа short
Она ищет темплейт для вывода этого типа (скорее всего что-то типа short.cshtml), а его по какой-то причине нет. Думаю, что тебе надо или сконвертировать значение в строку, или создать темплейт для нужного типа. Подробнее тут: https://stackoverflow.com/a/6365658
No. 20104    
>>20100
> сконвертировать значение в строку
в таком случае все будет отображаться в виде строки, даже объекты типа bool, которые выводятся как миленькие чекбоксы будут строками (тру/фолс)
> или создать темплейт для нужного типа
выглядит слишком сложно. прикол в том, что без использования рефлексии числа нормально выводятся. и даже если я создам темплейт short.cshtml, вполне возможно, что все остальные числовые типы данных выводиться не будут...
пока сделал такую заглушку:
@if (propValue!=null && propValue.GetType().Equals(typeof(short)))

{
    @:@propValue
}

No. 20105    
>>20099
Там для каждого свойства из item возвращается голый object, из-за чего DisplayFor паникует и не знает что делать. По идее, у тебя вообще ничего отображаться не должно.
No. 20106    
>>20105
а можно как-то голый object распаковать в нужный (неизвестный) тип и скормить DisplayFor?
пытался делать что-то типа "var xxx = Convertor.ChangeType(propValue, prop.Type)", но метод возвращает object
No. 20107    
Посоветуйте .NET библиотеку по искусственным нейросетям. Многослойный перцептрон нужен.
No. 20108    
>>20106
Нельзя. Нужно вызывать DisplayFor для каждого свойства вручную.
No. 20112    
>>2010
Как минимум во фреймворке AForge.NET была библиотека для этого, но сам фреймворк уже довольно протух
No. 20144    
делаю jquery плагин для создания ajax пейджинга, который планирую в будущем использовать на всех моих сайтах. хочу чтобы кто-то поругал мой код, указал бы как лучше что-то сделать, а что делать не стоит. хочу чтоб все было классненько.
код тут: https://github.com/aenen/MovieVote/blob/master/Movie Vote/Scripts/paginationAjax.js
No. 20146    
Случайно вчера нашёл ftp://ftp.micronet-rostov.ru/linux-support/ — там 13 гб книг по программированию, CS, администрированию и прочему компьютер-рилейтеду.
Извините, если это не подходящее место для этого
No. 20150    
153029268845.png-(21.55KB, 452×217, Снимок экрана от 2018-06-29 19-44-14.png)
20150
>>20144
По поводу оформления кода -- Idiomatic.JS
На данных момент популярный стайлгайд.

После переделки по стайлгайду можно и уже саму логику посмотреть.
No. 20153    
>>20150
прочитал и вроде пофиксил все, что увидел (2 дополнения для проверки кода не ругаются).

посмотри, пожалуйста, как у меня со структурой и логикой. как-то волнует объект стилей, в котором куча длинных функций. еще я с функцией style[allPagesShrink].create намудрил в начале, хотелось сделать как-то попроще, но не получилось

и еще, как и где стоит функции и объявление переменных/вызов функций разместить? у меня все объявления/вызовы в начале, а функции ниже все вместе - это нормально?
No. 20163    
Есть один сайт, который я хочу попарсить, и во всех документах нужные мне элементы там во множестве <p>-тегов внутри одного <div>.

Для некоторых документов мне нужно вытащить и неким образом обработать эти теги, а для некоторых — только вытащить.

Я придумал сделать базовый класс, который предоставляет функциональность просто вытаскивания тегов, и его наследник, который их ещё обрабатывает. Интерфейс у них одинаковый: ссылка на вход, набор на выходе.

Это хорошая схема?
У меня есть мысль сделать универсальный класс-вытаскиватель, которому будут при инициализации передаваться функции-обработчики. Т.е. если ничего не передал, то на выходе чистые теги, а если передал, то обработанные. Это лучше или хуже?

Где искать ответы на подобные вопросы (ну, кроме опыта)? В Gang of Four?

Это проект для личного пользования, не продакшен какой-нибудь жёсткий
No. 20167    
153095255383.jpg-(29.60KB, 714×182, Excessive Use of Bicycle Fatal.jpg)
20167
>>20163

> Где искать ответы на подобные вопросы (ну, кроме опыта)? В Gang of Four?

Внутри существующего открытого исходного кода.

В данном частном случае — в исходном коде нескольких существующих парсеров HTML.
No. 20168    
Ребята, есть csv файлик с датасетом протеганных картинок, нужно его обработать и поместить в бд. Там будут теги и урлы картинок. Нужно будет искать какой-то набор тегов и возвращать урл, с наибольшим количеством найденных тегов.
Вопрос в том, какую бд лучше использовать или же каким способом обойтись без нее?
No. 20169    
Ребята, есть csv файлик с датасетом протеганных картинок, нужно его обработать и поместить в бд. Там будут теги и урлы картинок. Нужно будет искать какой-то набор тегов и возвращать урл, с наибольшим количеством найденных тегов.
Вопрос в том, какую бд лучше использовать или же каким способом обойтись без нее?
No. 20170    
Посоветуйте книгу, что б освещались темы:
Параллельное программирование.
Проектирование многопоточных приложений
Реализация многозадачности в Windows (process, thread, fiber)

вот какие работы предстоит делать, что почитать что б быть готовым?

Практика 1

Способы межпроцессного взаимодействия.
Порождение дочерних процессов.
Создание серверного и клиентского приложений.
Взаимодействие посредством пользовательского межпроцессного сообщения.
Взаимодействие посредством сообщения WM_COPYDATA
Взаимодействие посредством механизма отображения файлов на память:

совместное использование двумя процессами общей области памяти,
совместное использование двумя процессами одного и того же файла.
Практика 2

Создание библиотек.
Статическая библиотека.
Динамическая библиотека. Неявная загрузка DLL. Явная загрузка DLL. DEF файлы.
Утилита DUMPBIN
Практика 3
Каналы.
Неименованный канал. Создание тестовых приложений: клиента и сервера. Взаимодействие тестовых приложений посредством неименованного канала на одном компьютере.
Именованный канал. Создание тестовых приложений: клиента и сервера. Взаимодействие тестовых приложений посредством именованного канала на разных компьютерах.

Практика 4

Потоки. Синхронизирующие объекты Windows
Запуск потоков.
Приоритеты потоков. Взаимодействие потоков с разными приоритетами.
Синхронизация потоков одного процесса. Критическая секция, событие, мьютекс, семафор, ожидаемый таймер.
Синхронизация потоков разных процессов.
No. 20171    
>>20169

Главным образом это зависит от нагрузки (то есть от того, как часто придётся выполнять поиск). Если менее 100 000 раз в сутки, то на основании https://sqlite.org/whentouse.html я рекомендую SQLite.
No. 20175    
>>20170
Попробуй почитать немного Танненбаума "Операционные системы". Теория там есть, а более практические вещи, я думаю, можно освоить только решая задачки.
No. 20176    
>>20170
>Реализация многозадачности в Windows (process, thread, fiber)
Как пользовать - Windows via C/C++
Как реализовывать - Windows Internals
No. 20187    
Есть тут люди, которые работали с Spring Security Oauth? Хочу прикрутить OAuth2 к RESTful API и сделать бесконечные refresh tokens для одного клиента. В гитхабе написано, что для этого надо поставить refresh token validity равное 0 или отрицательному числу (https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provide
r/ClientDetails.java), однако когда я так делаю, мне просто не выдаётся refresh token. Как это исправить и получить бесконечные токены?
No. 20212    
>>20187
Давай разбираться.

В DefaultTokenServices.java на строке 279 (https://git.io/fNY4U) в методе createRefreshToken можно увидеть, что если validitySeconds > 0, то возвращается инстанс DefaultExpiringOAuth2RefreshToken, а если нет - DefaultOAuth2RefreshToken. Т.е вроде бы всё честно.

Также там есть обертка вокруг getRefreshTokenValiditySeconds, которая заботится о том, чтобы вернуть стандартный срок (30 дней), если получить эти данные вообще по любым причинам не удалось.

Само обслуживание refresh token производится там же, в методе createAccessToken в строке 82 (https://git.io/fNY4E) и по коду оба токена попадают в токенстор

По этому коду, в самом худшем случае тебе бы возвращался токен на 30 дней, но никак не "просто не выдается refresh token". У тебя версия спринга точно соответствует той, код для которой ты смотришь в гитхабе?
No. 20213    
>>20212
Я не использую DefaultTokenServices. Вместо этого я использую JdbcTokenStore. Вот конфигурация сервера авторизации: https://pastebin.com/q9Rhf9AL
Если выставить в БД refresh_token_validity не 0, а какое-нибудь число, то refresh token нормально выдаётся.
No. 20214    
>>20212
>У тебя версия спринга точно соответствует той, код для которой ты смотришь в гитхабе?
Использую последнюю версию Spring Boot (2.0.3), так что всё должно быть норм.
No. 20221    
>>20213
>>20214
>JdbcTokenStore
В методе readRefreshToken класса JdbcTokenStore ( https://git.io/fNOPP ) видно, что этот стор бинарно маппит вычитанные данные на потомка OAuth2RefreshToken, которых два:
DefaultOAuth2RefreshToken и DefaultExpiringOAuth2RefreshToken, первому нужно 1 поле (сам токен), второму - 2 поля (токен и дата протухания)

Таким же образом токен сериализуется и хранится в бинарном виде.
Методы, которые это делают, лежат в SerializationUtils ( https://git.io/fNO1L )

Т.е. всё должно быть честно, если пришел и сохранился DefaultOAuth2RefreshToken, то именно его из стора и достанут.
А если пришел DefaultExpiringOAuth2RefreshToken, то достанут его.

Получается, проблема возникает еще до того, как этот токен попадает в стор на сохранение.
Ты можешь посмотреть, что у тебя пытается сохраниться в стор в обоих случаях (и доходит ли до него дело вообще)?

При этом, для получения даты экспирейшона, ты используешь JdbcClientDetailsService (https://git.io/fNODG)
Который уже маппит данные из базы по колонкам. По ссылке как раз то место, где маппится протухание рефреш токена.

rs.getObject(9)

Как видим, оно ищет эту дату экспирейшона в колонке с индексом 9.
Мне кажется, что твои проблемы происходят где-то здесь. Возможно, они связаны со схемой таблицы или особенностями выброки (т.е. нарушается индекс колонок, или происходит ошибка когда оно пытается сделать readObject)
В любом случае, посмотри дебаггером что происходит в этом месте, и сообщи результат.

На всякий случай, вот схемы таблиц, которые пацаны в спринге пользуют для тестов:
https://git.io/v5cFT

>Я не использую DefaultTokenServices. Вместо этого я использую JdbcTokenStore.
Ну, официальная документация (https://git.io/fNOPl) предлагает тебе использовать свою реализацию AuthorizationServerTokenServices, которую ты создашь на базе DefaultTokenServices, а вот ей уже передашь свой JdbcTokenStore.

В любом случае, по твоей конфигурации, если верить AuthorizationServerEndpointsConfigurer ( https://git.io/fNOMy ), то если ты не указал свои сервисы, оно создаст тебе DefaultTokenServices подпихнув ему указанный тобой tokenStore
No. 20329    
Хацкеры, такая проблема
Майкрософт выебал меня в рот и лишил меня виндофона как основной специальности.
Стоит ли лезть в ксамарин, или пойти в другие ЯП?
No. 20332    
>>20329
Спрос на мобильную разработку с помощью Xamarin вполне себе есть, как в вопросе рабочих мест в обычных конторах, так и на фрилансе. Не то чтобы это было каким-то уж гипер-популярным, но своя ниша вполне себе есть, т.к. на бумаге это эпик вин: "нативная" (читай "не cordova/phonegap") разработка во многом одновременно под iOS и Android.
No. 20340    
>>>>20332
Спасибо
No. 20352    
153279923264.jpg-(1.65MB, 1200×1800, 1528985031858.jpg)
20352
Такой вопрос, хочется сделать программу, которой будут передавать клиентские программы какие-то данные, а она будет передавать эти данные всем клиентам, и мне нужны какие-то инструменты для этого, ну и учебник или что-то вроде того. Пишу на срр, раньше решал задачки и писал простенькие програмки с stl и gui библиотеками.
No. 20353    
>>20352

>хочется сделать программу, которой будут передавать клиентские программы какие-то данные
>а она будет передавать эти данные всем клиентам

Насколько я понимаю, речь идет о передаче каких-то конкретных структурированных данных. Также вангую, пересылать это ты хочешь через интернет по HTTP-протоколу.

>мне нужны какие-то инструменты для этого
Если выше я наванговал правильно, то тебе нужно воспользоваться вебсокетами (WebSocket), это такой клиент-серверный канал для потоковой передачи данных поверх HTTP, асинхронный, умеет учитывать подключенные клиенты, делать броадкасты и т.д.

Вебсокет-сервер и вебсокет-клиент можно встроить в любое свое приложение с помощью соответствующих библиотек.

>Пишу на срр
Есть готовые библиотеки для этого на плюсах:
https://github.com/eidheim/Simple-WebSocket-Server
https://github.com/mnisjk/cppWebSockets
https://github.com/zaphoyd/websocketpp
Вот даже сразу с клиентской и серверной частью, и примером как это делается:
https://github.com/uNetworking/uWebSockets
Qt тоже предлагает свою реализацию
http://doc.qt.io/qt-5/qtwebsockets-simplechat-example.html

Стоит отметить, пусть это и очевидно, что если сервер на плюсах, это не значит что клиент тоже должен быть на плюсах, можно хоть из браузера жаваскриптом это делать, т.к. им важно только быть подключенными к друг другу по HTTP.

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

Другое дело, что готовый примеров на C++ для этого может и не быть, поэтому придётся сначала понять архитектуру на другом языке (на том же жаваскрипте), а потом переложить всё на свою C++ либу.

Туториалы по вебсокетам, чтобы понять что оно вообще:
https://www.tutorialspoint.com/websockets/websockets_overview.htm
https://www.html5rocks.com/en/tutorials/websockets/basics/
(^^ там еще ссылки на реализации на разных языках)
https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications

Туториал по чат-приложению (внимание, используется web-стек):
https://medium.com/@martin.sikora/node-js-websocket-simple-chat-tutorial-2def3a841b61

Если что, задавай вопросы, уточняй, постараюсь подсказывать в меру своих сил.
No. 20354    
153280951660.jpg-(66.93KB, 1024×768, 15308886742410.jpg)
20354
>>20353
Таки да, вполне равносильно чатикам.
Спасибо, пойду читать про вебсокеты, попробую чатик запилить, если вопросы будут, обращусь
No. 20355    
Lua. Имеем что-то вроде такого:
for _, v in ipairs({a, b, c, d, e, f}) do foo(v) end

Можно ли это записать как-то короче, без всех этих лишних телодвижений с ipairs? Хочется чего-то в таком роде:
for v in a, b, c, d, e, f do foo(v) end

No. 20358    
Какие годные книги, ресурсы для изучения администрирования windows можете посоветовать нубасу? Нужно научиться работать с реестром, службы как правильно создавать, сетевые диски подключать, вообщем с сервером нормально чтоб работать. Я в этом вообще сейчас не разбираюсь.
No. 20359    
>>20355
>Можно ли это записать как-то короче, без всех этих лишних телодвижений с ipairs?

Не знаю насчет "короче", но без телодвижений с ipairs всегда можно по индексу:

myList = { a, b, c, d, e, f }
for i = 1, #myList do foo(myList[i]) end

No. 20361    
>>20358
>Нужно научиться работать с реестром, службы как правильно создавать, сетевые диски подключать, вообщем с сервером нормально чтоб работать. Я в этом вообще сейчас не разбираюсь.

Как насчет начать с видеокурса самого майкрософта в их MVA?

https://mva.microsoft.com/en-us/training-courses/windows-server-administration-fundamentals-8477

По ссылке - видео с закладками по темам.
>Network attached storage
Обещают в главе Managing Storage
>Работать с реестром
Обещают в главе Managing Windows Server 2008 R
>службы как правильно создавать
К сожалению, этого там не упоминается.
No. 20362    
>>20355
>>20359
Еще можно воспользоваться next, в обход pairs:

list = {a, b, c, d, e, f}
for k, v in next, list do foo(v) end

Или сжато

for _, v in next, {a, b, c, d, e, f} do foo(v) end

Сурс: https://www.lua.org/pil/7.3.html
Но там же из кода можно увидеть, что pairs - это не то что бы лишнее телодвижение.
No. 20363    
>>20359
Это-то понятно, что так можно. Но наличие временной переменной совсем не радует.

По существу, мне нужен list_iter вот отсюда: http://www.lua.org/pil/7.1.html (и лучше бы в варианте с (...) в качестве аргументов). Но же они ведь только в качестве примера его привели, а в стандартную библиотеку включать не стали, я правильно понял?
А добавлять "расширение стандартной библиотеки" в тот кусочек кода, в котором мне это понадобилось, будет, мягко говоря, неуместно.

P.S. А вот в перле всё пишется совсем просто и лаконично:
foo($_) foreach $a, $b, $c, $d, $e, $f;

Чем больше смотрю на lua, тем больше кажется, что это такой перл-инвалид, которому кучу всего нужного ампутировали. Хочешь чего-то сделать — а нету.
No. 20364    
>>20362
О, пока на прошлое отвечал, тут уже новое. Да, пожалуй, этот вариант выглядит лучше других, спасибо.
No. 20373    
153296045349.gif-(4.86MB, 300×377, f851e3948eba21e03cb48434c7c90af0.gif)
20373
>>20362>>20363
Next не гарантирует порядок, это всплывёт, если в таблице будут дырки. Вообще с ipairs самый нормальный вариант был, он делает практически то же самое, что самодельный list_iter, просто возвращает ещё и индексы, и, как по мне, более понятно выглядит, чем сырой generic for.
No. 20377    
>>20373
Спасибо, но в моём случае порядок, в общем-то, не важен.
No. 20404    
>>20361
Спасибо, еще нашел вот этот набор видео на youtube, пока по нему учусь.
https://www.youtube.com/playlist?list=PL1aqAoC4A0sWvR_pLp-mXYNqKst_Hb__W
No. 20414    
Как можно быстро освоить и понять язык ASN.1? По какому источнику лучше научиться? Я его вообще не понимаю.
No. 20415    
>>20414
А как у тебя с этой книгой, пробовал читать?
http://www.oss.com/asn1/resources/books-whitepapers-pubs/larmouth-asn1-book.pdf

Алсо, вижу короткую вводную справку:
http://luca.ntop.org/Teaching/Appunti/asn1.html
No. 20416    
>>20414
>>20415
Также официальный туториал:
http://www.oss.com/asn1/resources/asn1-made-simple/introduction.html?gclid=EAIaIQobChMIw9XI9sDW3AIVweWaCh3i8wLrEAAYAiABEgLq2vD_BwE
No. 20430    
>>20415
>>20416
От души, по-братски. Серьезная тема этот ASN.1
No. 20460    
Я собираюся писать многопользовательскую игру. Но я совсем не понимаю как работает взаимодействие клиент- сервер. Как происходит взаимодействие игрового движка (я выбрал Godot) с сервером. И всё такое прочее... Помогите пожалуйста
No. 20465    
>>20460
>Я собираюся писать многопользовательскую игру.
Уточни, многопользовательскую - это просто мультиплеер (я создал, друзья подключились), пассивный/асинхронный мультиплеер (как дарк соулз), или вообще как в ММО? От этого во многом зависит что у тебя будет сервером выступать. Для обычного мультиплеера сервером будет компонент, являющийся частью игры, т.е. он будет сам реализован на Godot, для второго случая это будет компонент на Godot + внешний компонент для матчмейкинга, для MMO это скорее всего будет основной "внешний" сервер + принимающая / синхронизирующая мир часть на Godot со стороны игрока.

Во всех случаях придётся рещать такие основные задачи:
  • успешно подключить группу игроков к инстансу сервера
  • проводить для всех игроков в группе все события в игре синхронно (включая синхронное начало игры, перемещения, смерти, респавны, т.д)
  • не терять синхронизацию как только данные от других игроков начнут приходить плохо
  • не позволять игрокам, насколько возможно, читить, присылая неверные данные на сервер
Об остальном можно будет поговорить, когда станет понятнее, какая конкретно игра делается.

На всякий случай, в документации к самому Godot описывается высокоуровневое API для построения мультиплеера, с клиентами, серверами и синхронизацией между ними: http://docs.godotengine.org/en/3.0/tutorials/networking/high_level_multiplayer.html
No. 20470    
Кавычки и апострофы, что мы знаем о них?
Если точнее то интересует для чего в С++ применяются апострофы? Насколько я выяснил только для одного отдельного единственного символа, например '▲'.
Вопрос возник в связи с тем что при попытке сравнения n-го символа из строки типа string (s[n]) с символом в кавычках ("▲") возникает ошыбка недопустимого сравнивания мух с бузиной, а при использовании апострофов ('▲') всё работает как надо. Почему так происходит?
No. 20471    
>>20470
Потому что в кавычках строковый литерал, а в апострофах - символьный. И если ты символ берёшь в кавычки, то он становится строковым литералом. Отсюда ошибка при сравнении символа со строкой.
No. 20472    
>>20471
В общем-то я так и подумал по найденному. Просто видимо я ещё не прочувствовал всю глубину строковости литералов. В Delphi таких проблем не было.
Пойду изучать матчасть.
No. 20473    
>>20472
В Питоне тоже странно, зачем ввели и кавычки, и апострофы, причем насколько я понял там они оба означают строки. Следуя принципам ведь можно было оставить только одно.
No. 20474    
153429188646.jpg-(281.69KB, 640×932, 15310549328240.jpg)
20474
>>20473
Там ещё и тройные есть. """
И тройные одиночные. '''
No. 20475    
153439475925.jpg-(103.64KB, 640×775, b366a3a8710d0cac203b26200cf82ba31496777080_full.jpg)
20475
Не знаю где спросить лучше, так что напишу здесь.

Пишу свою буру, хочу захостить её в облаке AWS. Знаю точно, что многие порносайты хостятся там, а Amazon они относится к хентаю? Особенно интересует позиция в отношении лоликона, знаю что в европейских странах приравнивается к ЦП. Какова вероятность абуз, если сам сайт будет рассчитан на русскоязычную аудиторию?
No. 20476    
>>20475
Такое обычно в ToS прописывают, там такое должно быть указано. Можно в конце-концов им написать в поддержку и напрямую спросить.

>Русскоязычная *booru
Было бы интересно увидеть. Gambatte!
No. 20477    
15344213818.jpg-(150.74KB, 430×607, e87cd57c514016e613cb3d70bb3b4fac.jpg)
20477
>>20476
Вот их TOS.
https://aws.amazon.com/ru/aup/
> > Offensive Content. Content that is defamatory, obscene, abusive, invasive of privacy, or otherwise objectionable, including content that constitutes child pornography, relates to bestiality, or depicts non-consensual sex acts.
С одной стороны, лоликон не ЦП, а с другой всё же ЦП в той же Германии и Ирландии. Только вот сервера у них в разных странах. В США вроде как должно быть вполне законно. Но оттуда пинги плохие, я хотел Франкфурт.
> Можно в конце-концов им написать в поддержку и напрямую спросить
Я стесняюсь. У них все мои персональные данные.
No. 20478    
>>20477

Проксируй, люк. Пусть банят прокси с nginx.
No. 20480    
>>20478
> Пусть банят прокси с nginx.
А смысл, если я собираюсь файлы хранить на S3?

Впрочем, я так прикинул. Реддит ведь ещё в 2009 переехал на амазон, а сабреддиты с лолями забанили только 6 лет назад (последний 3 года назад), и по всей видимости только из-за рекламодателей. Значит и проблем особо не было.
No. 20482    
153469736442.png-(70.61KB, 284×229, 2018-08-19_19-40-53.png)
20482
доделываю тут свой сайтик с картиночками и хочу, чтобы дата загрузки изображения отображалась на элементе пикрелейтед. проблема в том, что я не знаю в каком виде и где его лучше отобразить, чтобы еще больше не замусорить карточку изображения.

есть идеи, куда можно поставить дату добавления картинки, не перекрывая ее при этом еще больше чем сейчас?
No. 20491    
Вечер добрый Стив.
Пытаюсь подключить наполненную бд на Sqlite к django проекту, но встречаюсь со следующей ошибкой:
Exception Value:
no such column: guitar_instrument.id
На сколько я понял проблема заключается в том, что при migration поле id не генерируется, хотя должно, в migration/0001_initial.py оно есть.
Подскажи пожалуйста в какую сторону думать.
No. 20492    
>>20491
Вообще, трудно говорить без деталей по твоим моделям и миграциям.

В одном случае можно было бы добавить промежуточную миграцию, которая догенерит id.

В другом случае можно было бы добавить промежуточную миграцию которая удалит связь с guitar_instrument.id из целевой модели, а потом вторую промежуточную миграцию, которая вернет её обратно, в самом конце.

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

Сообщай о том что будешь пробовать и о результатах.
No. 20505    
153488902751.png-(52.13KB, 342×284, fe_example.png)
20505
>>20482
Надо просто расширить плашку вниз. Пример на пикрелейтед.
No. 20511    
>>20505
сделал так. спасибо!
No. 20512    
Что нужно учить, чтобы делать 2D игры?
No. 20513    
>>20512
Если ты хочешь сделать 2д-игру как техническое упражнение для себя самого - скажи, и я скорректирую ответ. Если ты хочешь сделать игру как продукт, или как что-то что ты просто хочешь довести до конца и потом показывать людям, то читай ниже.

>Что нужно учить, чтобы делать 2D игры?
В первую очередь нужно учиться гейм-дизайну, т.е. непосредственно проектировке игр, во-вторую - маркетингу, т.е. навыкам которые позволят выбрать целевую платформу, тип игры которую ты хочешь сделать, и пути вывода её на рынок (при этом не важно бесплатная игра или платная, даже с бесплатной игрой тебе бы хотелось чтобы про неё узнало как можно больше людей). Потом уже ты можешь подбирать конкретный инструментарий для создания своей игры и её компонентов, и целенаправленно получать знания в нужных для разработки конкретной игры областях.

Рекомендую посмотреть такие курсы:
https://www.coursera.org/learn/game-design
https://www.coursera.org/learn/gamedesign

Последнее взято из этого списка:
https://www.coursera.org/specializations/game-development

От себя добавлю, что после того как ты поймешь, какую игру ты хочешь сделать, будет полезно сделать "уменьшенную копию" этой игры, т.е. маленькую, очень короткую игру, но с теми же принципами которые ты хочешь заложить в свой основной проект. Её надо сделать от начала и до конца, и обязательно выпустить. Цель - пройти все этапы процесса разработки, понять, какие из них более важные чем другие, что дается просто, а что тяжело, и как бороться с тем, что результаты любого неизвестного творчества людей не очень интересуют. При этом, и это важно, не потратив кучу времени, и не зависнув в аде девелопмента, постоянно переделывая один и тот же проект с начала.
No. 20525    
153520080082.jpg-(179.32KB, 1024×768, Untitled-1.jpg)
20525
Мне вот тут надо написать небольшое оконное приложение для сохранения кусков текста. Что-то на подобие телеграма (по интерфейсу) или simplenote (но без привязки к аккаунту
Три окошка. В первом кажется по програмистски оно называетя lable вводится название пасты, которую ты хочешь записать. Ниже в таком большом окошечке вставляется сам текст. И при каждом изменении он автоматически сохраняется. Ну или каждые десять секунд пока изменения идут
Между пастами можно переключаться через менюшку слева. Там автоматически появляется то название, которое ты ввёл

Посоветуйте на чём можно это реализовать? У меня есть мысль- на delphi. Но я с ним ни когда не работал, и не знаю вообще, что это за зверь такой. Можно попробовать на C++ с фреймворком GTK/QT, но они болшие и сложные. Я уже пытался с ними разобраться и у меня это не вышло.

Что можете посоветовать начинающему недопрограмисту?
No. 20526    
>>20525
С точки зрения современных реалий, я бы советовал JavaScript во фреймворке-обертке Electron (если совсем упрощать, то это Chrome без своего интерфейса). Если что-то более серьезное, то бери таки C++/Qt, только интерфейс сразу делай на QML - это должно быть проще и быстрее.
No. 20527    
>>20525
Если это десктопное приложение на десктоп винды, то бери C# + WPF/WinForms: https://visualstudio.microsoft.com/vs/community/
Легко, быстро, низкий порог вхождения и такая одноразовая хуйня делается достаточно быстро Давай за 20 баксов тебе сделаю, лол

Всяческие не рекомендую делфи — ёбнешься с доставкой, да и сам по себе это древний кластерфак.
No. 20531    
>>20526
> это Chrome без своего интерфейса
Можно поподробнее? Я ни чего не понял
No. 20533    
>>20526
> С точки зрения современных реалий
Ладно, и наверное последний на сегодня глупый вопрос. А с точки зрения ушедших в прошлое реалий- есть что-нибудь?
Мне мегапроизводительное и сверхкрассивое не надо. Посто чтоб работало и этого хватит
No. 20534    
>>20531
Это специальный фреймворк ElectronJS, который базируется на основе Chromium и NodeJS и по своей сути является куском браузера Chrome без стандартного интерфейса. Основная идея в том чтобы написать итоговое приложение с использованием веб-технологий (JavaScript, HTML, CSS, фреймворки типа VueJS/ReactJS и т.д.), но при это оно существовало в виде "нативного" приложения.

>>20533
Ну вот старый подход это как раз таки набросать мышкой на Delphi. Сейчас просто это уже ретро.
No. 20535    
153522682272.png-(681.98KB, 1600×1200, [SIG794cde424ed9adea9829d4888ddee0eb4fd2eba3f8e339.png)
20535
>>20533
Тебе для чего, лол? Под винду используют WinAPI для C, C++ и Ada; под прыщи не знаю, вроде GTK или QT; для кроссплатформы — Java и Swing.

Хеллоу-ворлд под Windows называется Winnie, он же является основой для любого Windows-приложения, н-р https://www.transmissionzero.co.uk/computing/win32-apps-with-mingw/. Просто берётся он и дописывается в стиле «рисуем сову» в обнимку с MSDN.

Delphi — это такая вещь в себе, немного мёртвая. Про неё ничего сказать не могу, поскольку она ни с чем не взаимодействует. А посему не думаю, что из разработки под неё можно вынести что-то полезное.

З.Ы.: Тебе надо ещё решить вопрос о выборе базы данных.
No. 20536    
15352285014.png-(15.42KB, 596×400, изображение.png)
20536
Ну вот я какой-то простенький интерфейс создал на два textbox-a
Как может называться та фигня слева, которая позволит создавать там новые слоты под пасту и выбирать уже существуюшие?
No. 20537    
>>20536
В сторону ListBox-а смотри.
No. 20539    
знаком кто с "itunes search api"? ищу по нем фильмы, но по одному лишь имени результаты получаю не точные. есть ли возможность туда передать год релиза фильма, чтобы получить результат поточнее? гугл не помог
No. 20540    
>>20539
Если я правильно понял, то это именно то, что тебе надо: https://affiliate.itunes.apple.com/resources/documentation/itunes-store-web-service-search-api/ - тут в разделе аттрибутов как раз есть всякие releaseYearTerm и прочее добро
No. 20542    
>>20540
кажется это не оно. если я поставлю этот атрибут, то он просто выведет мне фильмы, которые вышли в указанном году. скажем, хочу получить робокопа 1987 года, отправлю https://itunes.apple.com/search?term=robocop 1987&country=us&media=movie&attribute=releaseYearTerm - 0 результатов. если в term оставить только год - 50 результатов.

наверно, придется в цикле сравнивать год выхода фильма среди того, что мне отправят
No. 20557    
>>20542
Да, судя по всему, я не внимательно прочитал их примеры и описания, получается, что в их случае атрибуты это не дополнения к изначальному поисковому запросу, а просто другой способ делать этот запрос. Тогда вероятно никаких вариантов, кроме перебора циклом результатов нет.
No. 20615    
>>20535
Неужели я встретил человека, который пишет на Аде? Для чего? Легаси?
Учил её в вузе, были на ней лабы по многопоточности и параллельным системам.

>>20525
Если вариант, то сделай браузерное. (да, я видел слово "оконное", но всё же)
Браузерное можно на чем угодно, питон/руби/джава/...., и сделаешь быстрее и проще, чем тру оконное.
Оконное на винде - шарпы, джава+swing на винду/линукс.

>>20170
> Параллельное программирование.
Специфически для каждого языка/библиотеки/спецификации лучше ищи. Например,

https://javarevisited.blogspot.com/2016/06/5-books-to-learn-concurrent-programming-multithreading-java.html

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

>Реализация многозадачности в Windows
WinAPI например.

>>19763
>Прочитал за три месяца, изучил концепции, наваял пару прог, утилиты да браузерку на web сокетах.
И как на собесах было? Сколько искал, сколько раз походил?
Сам тоже на го ставку делаю, что-то джуновакансий очень мало, так что я просто сижу и дрочу учебу/разные-проекты вечерами. Чёт по-хорошему хочу очень много всего знать и уметь. Ну, и хочу, и думаю, что это надо будет там на собесах/работке.
No. 20616    
>>20025
Вот так работаешь несколько лет с Oracle DB и PL/SQL, мониторишь /dev, но стоит только отчаяться и подзабить - всплывают вопросы. Эх.
No. 20630    
А можете объяснить, как сервер на питоне написать? Нашел модули socket и socketserver, но кроме примеров ничего не понятно.
No. 20632    
>>20630
Какой именно сервер тебе надо tcp, udp или может http?
No. 20633    
>>20632
TCP.
No. 20634    
>>20633
import socket

bind_ip = '0.0.0.0'

bind_port = 9999

# Создать TCP сокет

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

# Привязать сокет к адресу

server.bind((bind_ip, bind_port))

# Режим прослушивания входящих подключений

server.listen(5)

# Ожидать подключение клиента

# как только клиент будет подключен функция вернет сокет для соединения с клиентом и удаленный адрес

client_sock, address = server.accept()

# Прием и отправка данных между клиентом и сервером

request = client_socket.recv(1024)

client_socket.send('Hello world!')

# Окончание заботы с клиентом

client_socket.close()


Прием входящих соединений (метод accept) лучше делать в отдельном потоке.
No. 20635    
>>20634
Я на основе примера так сделал:

import socketserver

class MyTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
#self.data - сокет, подключенный к клиенту
#self.<кто-то>.address - IP и порт
self.data = str(self.request.recv(4096), "utf-8")
print(self.client_address[0] + ': {}'.format(self.data))
self.request.sendall(bytes('Message successfully sent', "utf-8"))

if __name__ == "__main__":
HOST, PORT = "localhost", 9999

with socketserver.TCPServer((HOST, PORT), MyTCPHandler) as server:
server.serve_forever()
No. 20644    
Клиент не работает - хост разрывает подключение после первого запроса. Исходник сервера:
'import socketserver

class MyTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
#self.data - сокет, подключенный к клиенту
#self.<кто-то>.address - IP и порт
self.data = str(self.request.recv(4096), "utf-8")
print(self.client_address[0] + ': {}'.format(self.data))
self.request.sendall(bytes('Message successfully sent', "utf-8"))

if __name__ == "__main__":
HOST, PORT = "localhost", 9999

with socketserver.TCPServer((HOST, PORT), MyTCPHandler) as server:
server.serve_forever()
'
Исходник клиента:
'import socket
import random

HOST, PORT = "localhost", 9999
plid = 'null'
data = ' '.join([plid, 'init', str(random.randint(0, 10)), str(random.randint(0, 10))])
#SOCK_STREAM = TCP-сокет
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.connect((HOST, PORT)) #подключаемся к серверу
sock.sendall(bytes(data + "\n", "utf-8"))
plid = str(sock.recv(1024), "utf-8")
while True:
data = ' '.join([plid, input()])
sock.sendall(bytes(data + "\n", "utf-8"))
received = str(sock.recv(1024), "utf-8")
print('Field: {}'.format(received))'
Что там не так?
No. 20651    
>>20644
TCPServer закрывает соединение при выходе из handle. Если хочешь, чтобы оно разрывалось по инициативе клиента, то сделай цикл в handle. Только учти, что при использовании просто TCPServer без ForkingMixIn или ThreadingMixIn обработка каждого запроса синхронная, то есть к обслуживанию следующего запроса сервер приступает только после завершения обслуживания текущего.
No. 20658    
>>20651
А если клиентов несколько, вариант с циклом в handle работать будет?
No. 20668    
>>20658
Одновременно с несколькими клиентами этот вариант работать будет только в том случае, если обработка каждого запроса выполняется в отдельном процессе (ForkingMixIn) или потоке (ThreadingMixIn). В официальной документации есть пример ThreadedTCPServer, использующий TCPServer с ThreadingMixIn, можешь основываться на нём.
No. 20677    
Говорят, что если код написан девочкой, то у него будет хуже качество, это правда или выдумки?
No. 20678    
>>20677
Качество кода зависит от знаний стандартов написания кода и от опыта в программировании в текущей области.
К полу и возрасту человека качество кода не имеет отношения.
No. 20679    
153772048215.jpg-(379.01KB, 516×722, 014 - 516x722@32 [SIG99ef75cf9b35a2da28f56c8923ad8.jpg)
20679
А Соус, я гляжу, решил выпилить поддержку IE8. Забавно, поскольку у меня с других не постится.

>>20615
>Для чего
Скорее как более удобный С с классами. На ней очень сложно что-то писать, поскольку там даже коллекций нормальных нету. Жалко Аду, but nowadays Ada stays for nothing. На неё, похоже, сами разработчики забивать стали, насколько я могу судить по событиям этого года.
No. 20680    
153774599966.gif-(249.72KB, 388×472, 1528985477808-pol-2.gif)
20680
Я пытаюсь написать rest api и у меня возник вопрос.
Допустим, нужно отправить пост и загрузить несколько тяжёлых файлов к нему. Текст в посте должен быть обязательно и если его нет, или один из файлов не подходит — нужно вернуть ошибку. Стоит ли при обработке ошибки загружать файлы и создавать ресурс, предлагая его "дописать", или сбрасывать состояние и требовать повторной отправки файлов? Как лучше поступить?
No. 20681    
>>20678
А это вообще хорошо или нет, что правила сообщества опенсорс-разработчиков ядра linux теперь будут выставлять приоритет для всяких "интересных личностей"?
No. 20682    
>>20681

Нѣтъ.
No. 20683    
153778552657.jpg-(68.00KB, 640×640, anime-girl-cat-ears-profile-pictures-10.jpg)
20683
Хочу вкотиться с нуля в разработку интеллектуальных алгоритмов (например, процедурная генерация контента нейросетью по изученным ею образцам). Но боюсь что эти знания все равно не найдут практического применения на такой системе как у меня (корыто с i3 2.13 GHz и 3 GB RAM). Может, есть в сети такая облачная платформа, чтобы на ней тестировать свои проекты?
Примерно так: у меня будет код ИНС которая на этом ПК сможет изучить 50 картинок, и длиться это будет трое суток, а генерировать новую картинку она будет 3 часа. Практически никакого полезного результата. Вместо этого я могу отослать код в облако (вычислительную ферму) где за сутки она изучит 5000 образцов, а выдавать новый будет за 30 секунд. И конечно надо чтобы было бесплатно - просто залогинился на сайте, заливаешь код и тестируешь его выполнение на удаленном сервере. Можно такое как-нибудь организовать?
No. 20684    
>>20683
Или в крайнем случае найти добровольца, который имеет мощную систему, и если посчитает интересной мою ИНС, то запустит ее у себя?
No. 20688    
153780986759.jpg-(237.11KB, 700×700, Millhiore_Firianno_Biscotti_full_826889.jpg)
20688
>>20677
%Серия похабных шуток про известный всем русским метод делания вещей, которые я только что сам придумал и сам посмеялся.%

>>20680
Зависит от модели данных. Ты создаёшь ресурс, у тебя ресурсом что является? Ты не можешь сделать в рамках REST болтливое API, сохраняющее состояние на сервере, — это будет уже не REST.
No. 20690    
153781225366.jpg-(122.23KB, 1280×1175, photo_2018-09-24_20-51-02.jpg)
20690
>>20688
Пишу очередную имиджборду, если что.
> у тебя ресурсом что является
Ресурсом является пост. Который имеет id, отображаемый id (так как разделов много, в каждом свой счётчик), текст поста и список файлов. Файлы хранятся в отдельной таблице, за конкретным постом не закреплены, здесь только ссылки на них.
> Ты не можешь сделать в рамках REST болтливое API, сохраняющее состояние на сервере, — это будет уже не REST.
Я уже и так не особо уверен, что у меня REST получается. Например у меня уже выходит дублирование: можно получить тред (вместе с постами), и обратившись к другому ресурсу, только посты из треда.
No. 20691    
>>20683
> Может, есть в сети такая облачная платформа, чтобы на ней тестировать свои проекты?
Есть. Гугл не работает больше с физическими лицами, так что твой выбор — Амазон (или Ажура, но с ней работать не приходилось)
> у меня будет код ИНС которая на этом ПК сможет изучить 50 картинок
Что-то очень замороченный алгоритм у тебя, что так долго обучается на таком малом числе картинок.
> И конечно надо чтобы было бесплатно
Так не бывает. Но у амазона есть бесплатный период с довольно слабым инстансом, зато на целый год. Но я бы на твоём месте отдал пару баксов, купил инстанс помощнее и просчитал всё за пару часов.
No. 20693    
153781676285.jpg-(790.67KB, 2250×1800, Millhiore_Firianno_Biscotti_full_971557.jpg)
20693
>>20690
Щас меня побъють:
/boards/{board_id}/threads/{thread_id}/posts/{post_id}/files/{file_id}
Например:
POST /boards — HTTP/1.0 401 Unauthorized
POST /boards/{board_id}/threads/ — HTTP/1.0 201 Created
POST /boards/{board_id}/threads/{thread_id}/posts — HTTP/1.0 201 Created
POST /boards/{board_id}/threads/{thread_id}/posts/{post_id}/files — HTTP/1.0 201 Created
Чо?
No. 20694    
153781757516.jpg-(75.44KB, 1119×1280, photo_2018-09-24_22-32-22.jpg)
20694
>>20693
> Щас меня побъють
Я их отвлеку. Вот так я наметил схему пока что https://rentry.co/6g2gm
> POST /boards/{board_id}/threads/
Не имеет смысла. Новый тред всего лишь частное нового поста, у которого не указан thread_id в реквесте.
> POST /boards/{board_id}/threads/{thread_id}/posts
Вообще, я больше за плоскую flat же иерархию.
> POST /boards/{board_id}/threads/{thread_id}/posts/{post_id}/files
То есть создавать файлы отдельным запросом, уже после создания поста? Думал о таком варианте, но что-то меня в нём смущает.
No. 20695    
Можно ли использовать PyQt, а точнее - QtNetwork, чтобы не мучаться с TCPThreadingMixin?
No. 20696    
>>20695
Тянуть Qt в зависимостях несколько странно. Попробуй поискать другие библиотеки, или напиши конкретно что хочешь сделать.
No. 20697    
>>20691
>Что-то очень замороченный алгоритм у тебя, что так долго обучается на таком малом числе картинок.
У меня пока нет никакого алгоритма, просто корыто очень слабое. А вообще, плохо представляю, какие там требования к системе, а в кодинге я даже не джун, а шинку.
>Так не бывает. Но у амазона есть бесплатный период
Взаимоисключающие параграфы.
>зато на целый год
А как они проверяют личность, чтобы предотвратить повторную регу через год? Нужно выслать скан паспорта?
>я бы на твоём месте отдал пару баксов, купил инстанс помощнее и просчитал всё за пару часов.
Платить есть смысл в двух случаях: если твой проект коммерческий и ты им отобьешь затраты, или если ты заранее уверен, что получится годнота, за которую не жалко заплатить. А я даже не знаю что получится- то что хотелось бы, или крипотная кривота которой не поможет даже ручная обработка в фотошопе.
No. 20698    
>>19666
>Пополняемая база знаний: http://pastebin.com/AGhLZppH
До сих пор ничего нет про архитектуру ИНС?
No. 20699    
>>20697
> Взаимоисключающие параграфы.
Это не так. Просто на том железе из бесплатного периода только гостевуху хостить.
> А как они проверяют личность, чтобы предотвратить повторную регу через год? Нужно выслать скан паспорта?
Никак, можно через год новый аккаунт зарегистрировать. Кто-то так и делает.
> А я даже не знаю что получится
Ну ты можешь практиковаться и вылизывать свой алгоритм на персоналке, а когда захочется большего и не захочется ждать, то купить какой-нибудь инстанс с 16 ядрами и 32 оперативки за 50 центов/час и прогнать всё быстренько.
No. 20700    
Code Writer, который встроен в Windows 10 - норм программа, или лучше скачать Eclipse?
No. 20701    
153782656836.jpg-(601.04KB, 2560×1600, 025 - 2560x1600@32 [SIG9a086d6823b5e25e5d2a3eaf966.jpg)
20701
>>20694
https://javabeat.net/rest-api-best-practices/
https://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api

>Не имеет смысла.
Как клиент получит список тредов для данной доски? Предлагаешь грузить в него все 10_000 постов и выбирать те, у которых установлено свойство is_op_post? А клиенту плохо не станет?

>Вообще, я больше за плоскую flat же иерархию.
Как ты сможешь тогда разрулить собственные же ограничения и коллизии идентификаторов? Поведение методов REST API не зависит от того, какие методы вызывал клиент раньше и с каким результатом они были выполнены, иными словами, сервер не хранит состояние для каждой сессии, он максимум знает только о правах доступа для сессии.

>То есть создавать файлы отдельным запросом, уже после создания поста? Думал о таком варианте, но что-то меня в нём смущает.
Иначе ты или отправляешь всё в одном POST-e и сервер либо принимает его, либо отвергает, или делаешь файлы отдельным ресурсом, как в Википедии, но тогда клиент сможет аплоадить их без создания поста. В Вики, кстати, много таких файлов, которые загружены, но никуда не прикреплены.

Вообще, можно сделать и так:
/boards/{board_id}
/threads/{thread_id}
/posts/{post_id}
Тогда в POST-е с постом надо указывать board_id и thread_id. Этот подход плох тем, что последующие GET-запросы не кэшируются, т.е. клиент постоянно будет дергать сервер или попадёт в задницу, получив из кэша левые данные.
No. 20702    
>>20701
> Как клиент получит список тредов для данной доски?
Я же скинул выше https://rentry.co/6g2gm
/threads?board_id={id}
> Как ты сможешь тогда разрулить собственные же ограничения и коллизии идентификаторов?
Не понял, можно пример?
> и с каким результатом они были выполнены
Поэтому и спрашивал. Но вообще можно в случае удачного поста возвращать его /posts/{id}
А в случае неудачи /posts/{id}/error
> делаешь файлы отдельным ресурсом, как в Википедии
Так и хотел в любом случае. Потому что буду проверять файлы на уже их наличие на диске, и если они есть, то не сохранять, а просто прикреплять уже ранее загруженный.
> тогда клиент сможет аплоадить их без создания поста
Не сможет, если я не напишу для этого api.
> Тогда в POST-е с постом надо указывать board_id и thread_id
Спасибо, а то я не знал! Вообще я о другом спрашивал.
> последующие GET-запросы не кэшируются
Подумаю над этим, как разберусь с остальным.
No. 20703    
>>20701
> последующие GET-запросы не кэшируются
Буду передавать E-tag в заголовке для /thread/{id} и last_modified в теле для списка тредов. Это если надо одним запросом опросить, например, закладки. Тогда следующим запросом можно получить только новые посты для тредов что их имеют.
No. 20704    
153783572417.jpg-(486.71KB, 1280×720, 019 - 1280x720@32 [SIG03a5561860edf917af9630ab0ac3.jpg)
20704
>>20702
https://spring.io/understanding/REST
http://www.restapitutorial.ru/lessons/restfulresourcenaming.html

>Я же скинул выше https://rentry.co/6g2gm
Так как ты поместил это под спойлер, я решил, что это — необязательная информация.
>/threads?board_id={id}
Что вернёт GET /threads ? GET /posts ?
>Не понял, можно пример?
1) Пост с номером 1 есть во всех тредах. Ты собираешься уникальные идентификаторы тредам и постам придумывать и мапить их на отображаемые у клиента идентификаторы?
2) Можно создавать посты без тредов, а файлы аплоадить без постов, или таки между тредами, постами и файлами есть какие-то отношения, которые надо отображать в URI?
>/posts/{id}/error
То есть ресурс “posts/{post_id}” будет содержать поле “error”? А при попытке создания поста с уже существующим id сервер будет изменять это поле и клиентский GET по этому id вернёт всем Resource modified? А при неудачной попытке создания нового поста сервер создаст пустой пост с таким id и полем “error”, а другому клиенту вернёт 418 Already created? :D
>Так и хотел в любом случае.
У каждого файла будет своя страничка? Типа «Загружено VIP-пользователем Васей такого-то числа. Понравилось 1127 пользователям. Прикреплено к таким-то тредам пользователями Петей, Димой и Дашей. [Мне нравится], [Поделиться с друзьями], [Скачать], [Купить VIP-аккаунт и скачать полную версию]» :D
>Потому что буду проверять файлы на уже их наличие на диске, и если они есть, то не сохранять, а просто прикреплять уже ранее загруженный.
А клиенту разве не наплевать, как файлы хранятся на сервере? Он делает GET posts/{post_id}/files и ожидает получить список урлов, а клиент автора поста делает DELETE posts/{post_id}/files/{file_id} и ожидает, что файл будет удалён.
>Не сможет, если я не напишу для этого api.
Клиент отправил пустой пост с файлами. Ты начал разговор с этого кейса, теперь говоришь, что он этого не может.
>Подумаю над этим, как разберусь с остальным.
Потом окажется, что проще переписать.
No. 20705    
>>20695
Может тогда попробуешь использовать tornado?
https://www.tornadoweb.org/en/stable/tcpserver.html
No. 20711    
153788756825.jpg-(113.99KB, 629×900, Millhiore_Firianno_Biscotti_full_717120.jpg)
20711
>>20706
>Без фильтров? Последние N тредов/постов.
Иными словами, API неконсистентно, и разобраться в нём без бутылки жс-мартышка не сможет.

>Эээ, нет. Внутри треда посты вообще никак не нумеруются, кроме как по id и display_id.
>>Ты собираешься уникальные идентификаторы тредам и постам придумывать и мапить их на отображаемые у клиента идентификаторы?
Ну и где «нет», когда «дат».

>Если пользователь пытается создать пост не указав thread_id, то он по-умолчанию получит новый тред.
Это ошибка сервера в данном случае, хотя должна быть ошибка клиента. Сервер должен вернуть 422 Unprocessable Entity, например.

>В URI эти отношения отображать не нужно.
Есть ещё хоть одна причина кроме той, что ты не знаешь как хэндлить такие случаи?

>Попытка создать ресурс с существующим id = попытка сделать в базу запись с уже имеющимся primary key = ошибка движка, а не api.
Это ошибка клиента. Сервер должен вернуть 405 Method Not Allowed.
API — это набор методов для взаимодействия. Если ты лапоть мимо рта проносишь, это твоя ошибка, а не лаптя, щей или мамы.

>Не пустой пост, а пост в котором уже присутствует частичная информация.
Кому она нужна, если сервер уже вернул клиенту 4хх ошибку с пояснением, что не так? Чтобы быстрее получить отказ в обслуживании?

>404, если другой клиент попытается в GET, 401, если в PUT.
А если остальные 98 попытаются POST?

>Откуда ты такой бред берёшь, сладкий?
Всего лишь довожу до абсурда твои идеи, милый. Это ты решил, что файл достоин вынесения в отдельную сущность, а не я, значит делаешь ты какой-то ВКонтакте а не анонимную борду.

>> клиенту разве не наплевать, как файлы хранятся на сервере?
>Именно так.
>Своя запись в базе и url где он лежит.
>Ожидать можно что угодно, но файл не будет удалён. Будет лишь удалена ссылка на файл для этого поста.
Ты опять себе противоречишь, милый.

>Ты и сюда можешь отправить пустой пост, с одними лишь файлами. Это корректный пост.
>Это корректный пост.
А я помню, что ты спрашивал, как разруливать такую исключительную ситуацию, милый.
>>Текст в посте должен быть обязательно и если его нет, или один из файлов не подходит — нужно вернуть ошибку.
А теперь ты говоришь, что это не исключительная ситуация.
No. 20712    
153789241734.jpg-(88.73KB, 1200×1280, IMG_20180925_191940_141.jpg)
20712
>>20711
Спасибо.
No. 20718    
>>20677
Шутка про производные от названий частей тела, являющихся первичными признаками пола прилагательные и их положение на оси "плохо-хорошо".
No. 20719    
Девочка-улыбнись прочитала документацию об архитектуре нейросети, которую ей скидывали. Думала что там будет не более сложный гайд, чем по установке Gentoo. А там.. вообще! уйма каких-то непонятных слов, или известных, но в непонятном значении. Раскидались словами, вместо того чтобы объяснить, что писать в файл, куда сохранять, какие программы ставить. Кусочки кода чтобы копировать и вставлять, заменяя параметры на нужные. Мне ж не новый Dwarf Fortress разрабатывать, а простенькую утилиту надо - показываешь ей папку с картинками, она учится по ним и делает картинки.
Или допустим эта статья https://habr.com/company/yandex/blog/314508/ , она на русском и вроде бы понятная. Но там вместо образцов кода какие-то схемы, будто бы надо их рисовать в пейнте и прогонять через интерпретатор.
Даже чтобы запустить у себя уже готовый код машинного обучения, скачанный с github, надо сначала поставить несколько каких-то пакетов, и то не факт что оно потом сработает. У меня еще и винда, может на линуксе было бы проще устанавливать в терминале. Почему не сделают обычный программный пакет, который может из коробки работать с изображениями? Для примера, ABBYY Finereader может распознавать текст и им вполне возможно пользоваться без навыков кодинга, так почему нет такой же коммерческой проги но для распознавания и построения картинок?
No. 20720    
>>20719
>простенькую утилиту
>показываешь ей папку с картинками, она учится по ним и делает картинки.
Ты родился не в том веке.
>коммерческой проги
Которую ты бы всё равно спиратил.
No. 20721    
>>20720
Чиочую. Задача-то недетерминированная, и уже потому сложнее чем любой dwarf fortress по определению.
No. 20733    
Скажите мне, какой из этих вариантов лучше и почему?

Вариант 1:
if(cond) {

   expr1;
   expr2;
   expr3;
} else {
   expr2;
}

Вариант 2:
if(cond) expr1;

expr2;
if(cond) expr3;

Мне не нравятся оба, в первом дублируется expr2, во втором — if(cond). Возможно, есть третий?
No. 20734    
>>20733
expr_2;

if cond then
expr_1;
expr_3;
end if;

-- Ты про порядок ничего не говорил :o)
--
-- Ну а иначе, it depends... Что это за выражения?
-- Они сложные?
No. 20735    
>>20734
>Ты про порядок ничего не говорил
Не, порядок важен. Если бы так было можно — вопрос бы не стоял ^_^

>Они сложные?
Скажем так, если какое-либо из них вынести в отдельную функцию, то один только ее вызов займёт больше места, чем занимает само это выражение.
Для определенности можешь считать, что cond — это что-то уровня А > B, а expr2 — уровня foo += bar.
Но мне всё равно не нравится, что одно из них приходится повторять дважды.
No. 20736    
>>20735
Тогда для чукчи-читателя предпочтительней первый вариант, где весь экшн для каждой ветки собран в одном месте — так понимать, что делает код, легче. Да и вообще, как-то не приветствуется дробление условия, потому что уже автоматом начинаешь искать, где изменилось cond с первого раза.

>Но мне всё равно не нравится, что одно из них приходится повторять дважды.
Ну а что делать... Вообще, чтобы не думать над такими вещами (ибо это всегда малопродуктивно), лучше взять какие-нибудь Style and Quality Guidelines и делать всё по ним.
No. 20737    
>>20733
С какой точки зрения лучше? Если вычисление
cond
не может иметь побочных эффектов или зависеть от expr1 или expr2, то оптимизирующий по скорости компилятор скомпилирует оба варианта в примерно одинаковый машинный код, который, вероятно, будет близок к варианту 1, чтобы было меньше ветвлений и cond не вычислялось дважды. Если тебе больше нравится то, как выглядит код в варианте 2, и не нравится повторение cond, то можешь сохранить его значение в булеву переменную и во втором if использовать её.
No. 20738    
>>20737
1. Условие всегда должно быть идемпотентным.
2. Человек, который пишет нечитабельное гумно, в команде не нужен.
3. Компилятору всё-равно, ещё ни один не жаловался.

Т.е. всегда предпочтительней взять человека, код которого легко могут понять остальные, чем старого клоуна, который делает булевы функции с побочными эффектами, дробит conditional blocks без веской на то причины и оптимизирует код для компилятора руководствуясь представлениями 20-и летней давности.

Другой точки зрения тут быть не может.
No. 20739    
>>20738
> оптимизирует код для компилятора руководствуясь представлениями 20-и летней давности
Мне как-то на лабе оценку снизили за то, что не перемножил на калькуляторе две константы перед присвоением переменной. Не int x = 5 * 8, а int x = 40;
No. 20740    
>>20739
Ну, это проблема образовательной системы в этой стране, т.е. сидит старый чудак на букву «м» и учит тому, что было лет 10-20-30 назад. Хотя даже если взять довольно древний “Ada 95 Quality & Style”, там особо написано, что даже не выдумайте заниматься подобной хѣрнёй — вы код для людей пишете, а компилятор один хрен константы сам перемножит, к нужному типу приведёт и вас спрашивать не будет.
No. 20741    
Ну что же, вывод ясен. Победителем объявляется первый вариант, как более человекочитабельный и требующий меньше вычислений.

>>20733-кун
No. 20742    
>>20736
>Style and Quality Guidelines
Хм…
Большинство документов такого рода, которые мне попадались, отражают, в основном, сторону, которую их автор занимает холиварах "пробел vs. таб", "перевод строки перед {" и тому подобная мишура, решаемая у нормальных людей одним запуском чего-нибудь типа Artistic Style.

Таких, в которых подробно расписывались, скажем, вопросы допустимости дублирования кода, сайд-эффектов у функций и другие подобные темы, понимание которых действительно позволяет писать хороший код, мне что-то не встречалось…
No. 20743    
153842571182.png-(70.54KB, 1024×768, Clipboard01.png)
20743
>>20742
Я вообще больше подобных гайдов не видел, которые бы не кончались на “Code formatting”. Так что используешь то, что есть, даже невзирая на то, что здесь больше упирают на фишки языка (хотя большинство их присутствует и в современных). Но интернет — это помойка, здесь очень много мусора и мало чего ценного.

>сайд-эффектов у функций
У функций вообще не должно быть побочных эффектов. Просто в C сделали подпрограммы, которые могут возвращать значения — это технически просто и облегчало процесс преподавания студентам. Так далее и повелось — мы имеем процедуру Remove, производящую деструктивную модификацию контейнера, и функцию Find, которая только возвращает значение, и обе они называются функциями.
No. 20748    
>>20738
Океаны жёлчи в ответе твоём. Возьми это проще. Команды какие-то, "предпочтительней взять человека", серьёзный бизнес. Тот пост, на который ты отвечал, ни в коей мере не защищает вариант 2, который тебе не нравится.
No. 20749    
Почему в Перле
print unpack('H4', hex('1234'));
выдаёт 3436?
Что я делаю не так?
No. 20750    
153870961434.jpg-(84.38KB, 1280×720, Xj9V7PS_.jpg)
20750
>>20749
hex ()
зачем-то прибавляет тройку к старшей кварте каждого октета, т.е. твой код должен выдать
10#3436_3630#
при шаблоне
q(H*)
. Иными словами, тебе никто совместимости между внутренними и внешними форматами представления данных не обещал. Используй
pack ()
.

>>20748
Океаны желчи я в том посте поскипал. Проблемы?
No. 20751    
>>20750
А вот
print unpack('N', pack('b9', '001001001'));
ничего не выдаёт. Хотя тут распакованы упакованные данные. Что не так?
No. 20752    
>>20751
Размерность разная. Читай мануал по pack ().
No. 20753    
>>20752
Можешь на место ткнуть? Или оно не здесь?
https://perldoc.perl.org/functions/pack.html
No. 20754    
>>20753
N — 32 bit, ты только 16 передаёшь. Оно само остальные биты не допишет.
No. 20756    
>>20754
Я думал, что допишет, нулями забьёт.
No. 20757    
153873438766.jpg-(143.13KB, 600×600, 7c40e7e44fdd1064d35d2eb7f1d8c7fe1e4ffb19c6300ea65e.jpg)
20757
>>20756
Лучше бы ты чем-нибудь полезным занялся, дитя, чем теребить биты у старой рабочей лошади cgi-bin; интерпретатор там какого-нибудь паскаля написал, например. А то геронтрофилия какая-то получается; станешь как тот поехавший араб из comp.lang.ada.
No. 20758    
>>20757
Вы что имеете в виду, дядь?
Мне для линукса нужен перл, а с питоном я работал, больше не хочу.
No. 20759    
153874222961.jpg-(188.56KB, 902×1059, 2c6d760c6df49819ebd92f73e3104a72c10a188fe4fa40c55d.jpg)
20759
>>20758
Имею в виду, что студент выбрал тупиковое направление, потому что:
1) эти фичи в Perl-е были запилены для C-шников, т.е. людей, хорошо знающих работу ОС на низком уровне и отлично представляющих работу (сейчас уже устаревшего) железа и проблемы, которое оно с собой несёт;
2) nowadays Perl stays for legacy cgi-bin systems и скоро околеет, ботать особенности его работы с низкоуровневыми системными вызовами и машинозависимыми типами бесперспективно.
>Мне для линукса нужен перл
Судя по вашим вопросам, он вам не нужен от слова «совсем».
No. 20760    
>>20759
>Судя по вашим вопросам, он вам не нужен от слова «совсем».
Я вместо баш-скриптов использую. Я и не о них спрашивал.
Дядь, я хочу написать парсилку гифок, которая выдавала бы полный алфавит файла.
Так как в гифках на каждый символ обычно некруглое число бит, да ещё они и расположены наоборот, а в перле есть pack, который умеет и то, и другое - почему бы его и не использовать? За тем я вас и спрашиваю.
No. 20763    
>>20749
Аргуметом unpack должна быть строка, поэтому hex('1234'), то есть десятичное значение 0x1234 = 4660, интерпретируется как строка "4660", то есть "\x34\x36\x36\x30" в кодировке ASCII. После этого unpack 'H4' вернёт первые четыре шестнадцатеричные цифры из этого упакованного значения, то есть 3436.
>>20756
В конце описания функции unpack сказано, что если для формата требуется больше бит, чем остаётся во входной строке, то результат не определён.
No. 20765    
>>20759
> ботать особенности его работы с низкоуровневыми системными вызовами и машинозависимыми типами бесперспективно
Во-первых, он не спрашивал ни о каких машинозависимых типах, у него вполне переносимый 32-битный беззнаковый big-endian целочисленный тип. Во-вторых, в Ruby эти особенности практически такие же, как в Perl, то есть эти знания применимы и при использовании отличных от Perl языков программирования.
No. 20766    
15387493358.jpg-(53.69KB, 636×356, [SIG56de28aa51ea27296f34007f5049a57aa0006475e1aa61.jpg)
20766
>>20760
Тогда могу лишь пожелать удачи в ботаньи системного программирования под UNIX. Она тебе потребуется.

>>20765
>Ruby
Это умертвие в отличии от Perl-а и не жило толком. Легаси на нём опять же web-only, это Рельсы. Там системщины ещё меньше, чем в перле.
No. 20767    
>>20766
> Легаси на нём опять же web-only
А как же Metasploit, например?
Только ALGOL 68 по-настоящему мёртв. В Python в модуле struct методы pack/unpack тоже не так уж сильно отличаются от этих функций в Perl и Ruby.
No. 20769    
Бывают ли программы, которые "переводят" код с одного языка на другой?
No. 20770    
>>20769
Транспилеры, сэр.
No. 20777    
Анончег, если с помощью python paramiko скачиваю файл с sftp сервера, методом get, он меняет дату модификации у файла назначения в локальном пути? Возможности проверить сейчас нет, а ответ важен для понимания.
No. 20778    
>>20777
Датой модификации будет текущая локальная дата.
No. 20779    
>>20778
Спасибо, теперь все стало понятно.
Получается из стандартной библиотеки функции os.rename, os.getmtime, shutil.copy2, они каким-то чудом сохраняют время модификации файла.
А paramiko get наоборот меняет на текущую дату. Моя ошибка была в том что я думал что он работает как из стандартной библиотеки.
No. 20780    
>>20779
Можешь сам устанавливать полученную с сервера дату модификации файла после скачивания или воспользоваться модулем scp, который использует paramiko и в котором есть возможность указать аргументом методу скачивания необходимость сохранять серверную дату.
No. 20781    
153919250987.jpg-(42.97KB, 600×336, Карыч.jpg)
20781
Здравствуйте, дорогіе анонимы! Собственно, меня къ вамъ привелъ интереснѣйшій вопросъ... Для чего нужна "Ren'Py", если ​подобныя​ ​визуальныя​ новеллы я могу и въ "Delphi/Lazarus" сдѣлать? Даже на V.B.A. в "Excel", забавно.
No. 20786    
Вопрос по джваскрипту.
Насколько актуальны Server Side Events?
No. 20787    
>>20786

Настолько, насколько по адресу https://caniuse.com/#feat=eventsource сказано.

(Главная проблема: не поддерживаются во браузерах Корпорации Microsoft, требуют в них подпорки-костыля https://github.com/Yaffle/EventSource или аналогичного.)
No. 20788    
>>20787
О, Великий, какова же область применения серверных событий, ведь есть вебсокеты?
No. 20789    
>>20788

На сайте запрещённой в Российской Федерации¹ террористической² спецификации HTML5 по адресу https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events сказано, что серверные события генерируются обычным серверным скриптом поверх HTTP, и притом в одном направлении (от сервера во браузер), тогда как по адресу https://html.spec.whatwg.org/multipage/web-sockets.html#network сказано, что вебсокеты действуют поверх специального (по адресу https://tools.ietf.org/html/rfc6455 описанного) протокола, и притом в двух направлениях.

Соответственно, область для применения серверных событий возникает главным образом тогда, когда большой необходимости передачи сообщений в обратном направлении (из браузера на сервер) нѣтъ, а делать WS-сервер либо сложно, либо вообще нельзя (на виртуальном хостинге со строгими правилами, например).

____________

¹ Блокировку можно по адресу https://isitblockedinrussia.com/?host=html.spec.whatwg.org проверить. Лично мне для доступа к странице https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events потребовалось запустить TOR.

² Упомянутое по адресу https://isitblockedinrussia.com/?host=html.spec.whatwg.org решение 27-31-2018/Ид2971-18, принятое 2018-04-16 Генпрокуратурою — это, по-видимому, часть борьбы с мессенджером Telegram, «которым пользуются террористы», как известно.
No. 20790    
153921761986.jpg-(65.69KB, 603×602, 14454326388420.jpg)
20790
>>20789
Чрезвычайно доходчиво, вот тебе дева с котом.
No. 20796    
Можно ещё один вопрос?
Почему вот так

newXHR.open('GET', 'something.json');

всё работает, а вот так вот

fetch('something.json', {method: 'GET'})

нет? Я что-то не понял в синтаксисе фетча, но что?
No. 20797    
>>20796
Что значит не работает? Не отправляет реквест? fetch возвращает промис.
No. 20798    
153937518721.jpg-(19.58KB, 430×304, 1286342971381.jpg)
20798
>>20797
Я немного херню написали доволен был, а сейчас понял, что всё хуже и непонятней, чем я думал.
Так вот. Ситуация. Я поднял сервер на своём компевсё по гайду, чтобы чуть-чуть попрактиковаться в запросах. Код сервера - не мой, что там происходит я представляю слабо. Я шлю туда GET-запросы(и xhr'ом, и фетчем) и хочу получить json. И, к примеру, лисьи(собственно лиса лохматой версии и луна свежей) браузеры просто берут и грузят фал напрямую, минуя серверна сервере стоит специальная задержка перед ответом. А хромовые - просто отклоняют запрос, потому что он кросс-ориджиновый. И я не знаю, что делать, чтобы работало.
No. 20803    
153945012991.jpg-(20.72KB, 441×440, 263623114_2.jpg)
20803
>>20798
Всё оказалось просто, надо было нормально заходить через ip/порт/юри, а непросто вбивать путь к файлу.
No. 20824    
читаю "clr via c#" Рихтера и у меня есть вопрос по перегрузке операторов.
вот он пишет, что не все .net-совместимые языки программирования поддерживают синтаксис перегрузки операторов. пишет, что microsoft рекомендует вместе с перегруженными операторами создавать методы с "дружественными именами", вызывающие "методы перегруженных операторов", типа вот так пример из самой книги:
public sealed class Complex {
 public static Complex operator+(Complex c1, Complex c2) { ... }
 public static Complex Add(Complex c1, Complex c2) { return(c1 + c2); }
}

меня смущает return(c1 + c2);
если язык не поддерживает синтаксис перегруженных операторов, то как он сможет выполнить операцию c1 + c2? или я что-то не так понял? просветите меня
No. 20827    
>>20824
> как он сможет выполнить операцию c1 + c2?
Язык не выполняет операции. Компилятор языка транслирует текст программы в байт-код, который потом, когда пользователь запустит программу, исполняет среда выполнения CLR (Common Language Runtime). Обрати внимание на слово "common" — оно значит, что среда выполнения у всех .NET-языков общая. Класс Complex компилируется компилятором C#, он понимает перегруженный оператор +. Вызывающий метод Add этого класса код, написанный на другом языке, просто передаёт управление на откомпилированный компилятором C# код метода Add.
No. 20828    
>>20827
спасибочки что объяснил!
до меня это дошло вчера ночью, когда уснуть не мог, ха-ха
No. 20829    
Чио-чан, чем поля отличаются от свойств с геттерами и сеттерами по умолчанию в C#? Разве есть разница в использовании?
No. 20830    
Сколько нужно лет чтобы с нуля изучить HTML?
No. 20831    
>>20830
Мне кажется, что ты всё же хочешь изучить не только HTML, но хотя бы связку HTML+CSS, а к ней еще и Javascript, в контексте какого-либо популярного фронтенд фреймворка. Т.е. вещи необходимые и используемые сейчас для создания интерфейса современных веб и околовеб приложений.

Это всё из категории easy to learn, difficult to master. Ты быстро поймешь, как вещи делаются в принципе, но может уйти много времени на то чтобы понять как делать вещи конкретно тебе необходимые. На то чтобы понять как вещи делать в принципе, и начать их делать, никакие годы не нужны, базовый навык ты приобретешь буквально за пару месяцев. На то чтобы научиться с наскоку делать вещи конкретно необходимые, и делать их оптимально, уходит столько времени, сколько ты будешь готов на это потратить. Это уже чисто профессиональный опыт.

В контексте изучения конкретно верстки может пригодится вот эта запись из нашей базы знаний:
>>Хочу верстать
http://410chan.org/dev/arch/res/15681.html#17404
>>Пополняемая база знаний
https://pastebin.com/AGhLZppH
No. 20832    
15398098946.jpg-(789.54KB, 827×1169, __welrod_mk2_girls_frontline_drawn_by_fu_ta__7b0fc.jpg)
20832
>>20829
> Чио-чан, чем поля отличаются от свойств с геттерами и сеттерами по умолчанию в C#? Разве есть разница в использовании?

Окей. Начнём с того, что MS в оформлении кода рекомендует всё публичное делать свойствами, а приватное — полями. И все проекты соблюдают такой подход.

// По сути, здесь разницы никакой нет: 
    public int Age {get; set;}
    private int _age;

А ещё благодаря свойствам можно творить всякую полезную хуйню.

Типа управления доступом:

    public int Age 
    {
        get; 
        private set; //присвоить можно будет только внутри этого класса
    }


Типа инкапсуляции:

    public int Age 
    {
        get { return CalcAge(); }
        set { ReInitializeNpc(value); }
    }


Типа ебли с MVVM:

    private int _age;
    public int Age 
    {
        get { return _age; }
        set 
        {
            _age = value;
            
            //Уведомить, что изменилось свойство Age
            OnPropertyChanged("Age");
        }
    }

No. 20833    
>>20830

Недели вполне достаточно, если каждый день учить по одной седьмой и затем ещё практиковаться в применении изученного.
No. 20834    
153983130974.jpg-(69.33KB, 640×480, Руку к пустой голове не при?.jpg)
20834
Утро идиотских вопросов розовой дуры.

А кто-нибудь здесь делал самописный symbol-driven лексер? У меня есть два варианта архитектуры, но они оба какие-то корявые.
No. 20835    
>>20832
Т.е. публичные свойства с геттерами и сеттерами по умолчанию от публичных полей ничем не отличаются, и использование публичных свойств вместо полей - только соглашение о стиле кода?
No. 20836    
>>20835
> Т.е. публичные свойства с геттерами и сеттерами по умолчанию от публичных полей ничем не отличаются, и использование публичных свойств вместо полей - только соглашение о стиле кода?
Всё так. В базовом варианте они одинаковые.

Ну, насколько помню, то ещё "изкоробочная" сериализации/десериализации поля проебёт.
И рефлексия обосрётся.
No. 20837    
153987223549.png-(36.22KB, 526×395, screenshot.png)
20837
Ко мнению >>20833 прибавлю, что по адресу https://css-tricks.com/?p=277556 общее число тегов HTML5 считается равным 124, так что в неделю достаточно овладевать восемнадцатью новыми каждый день.
No. 20838    
>>20837
HTML лучше изучать вместе с CSS
No. 20839    
>>20837
Ага, потом ещё недели две учить атрибуты и свойства, а так же как их применять.
No. 20840    
>>20839
Хотя вру, я основы хтмл и цсс за три недели в общем освоил.
No. 20841    
>>20831
> для создания интерфейса современных веб и околовеб приложений
Вполне возможно, что задающий подобной вопрос хочет создавать не веб-приложения, а сайты. Веб в первую очередь для гипертекстовых документов, а не для программ.
No. 20842    
153998927185.jpg-(273.56KB, 1024×768, 461148019.jpg)
20842
>>20834
Поясню, что symbol-driven означает, что лексер представляет собой НДКА, состояние которого изменяет только приход нового символа, и весь экшн происходит только при переходе в новое состояние.

В общем-то вопрос заключался в том, кто и на каком уровне иерархии должен работать с буффером символов и заниматься токенизацией. Были два варианта: с разбивкой на подсистемы сканнера и евалятора, и с разбивкой на менеджера лексеров и лексеров с узкой специализацией.

Первый вариант был проще в реализации и отлично расширялся, но оказалось, что в эваляторе надо делать фабрику методов, а лексер определителей может работать только с qr/([A]+)(?=[^A])/, где A — его алфавит, — и разбор потока qr/[A]+/ происходит в эваляторе, т.е. этот лексер не способен оперативно выдать лексическую ошибку на составных определителях, поскольку его сканнер о них ничего не знает.

По размышлению было решено остановится на варианте с менеджером узкоспециализированных лексеров, взаимодействующих с менеджером посредством унифицированного протокола, таким образом алгоритмы сканирования, эваляции и токенизации инкапсулируются в объекте лексера; в обязанности менеджера входит опрос лексеров, закрепление лексера, принявшего символ, за работой над потоком, пока лексер может с ним работать, и предоставление хранилищ данных. Этот вариант сложнее как в реализации, так и в задаче расширения, однако составные определители разбирает на лету.
No. 20843    
154004284146.jpg-(71.61KB, 400×533, A10497294-2.jpg)
20843
>>20842
Теперь осталось решить проблему, что лексема класса Literal не может завершаться другой лексемой этого класса, т.е. в случаях вида i:=2.3sin(0.3); лексер должен останавливаться на букве s с ошибкой. Опять же, есть два решения — такие случаи обрабатывает менеджер (т.е. нужна отдельная ветвь в его таблице переходов или трёхмерная таблица), или создаётся прокси-лексер LiteralLexer, который объединяет все лексеры класса Literal — identifier, numeric, string, character, — но тогда непонятно, как определять ошибку, ибо менеджер, не найдя более ни одного лексера, согласного принять символ, породит ошибку «неизвестный символ». ... Хотя, если все лексеры для менеджера изображают эту qr/([A]+)(?=[^A])/ регулярку, и менеджер даст (что заведомо абсурдно с его точки зрения) символ лексеру, завершившему работу, a лексер его примет, это и будет ошибкой «недопустимый символ».

Вообще, синтаксический анализатор писать гораздо проще, бо задача, хорошо определённая математически.
No. 20848    
>>20430
Кто-нибудь может подсказать самый годный свободный/открытый инструмент по собственному опыту для работы с ASN.1 , чтоб учиться и работать с ним?
No. 20850    
>>20848
Из того, что я нагуглил, ASN.1 — это очень мудрёный стандарт, основной целью которого является, очевидно, экономия байтов при передаче данных по сети. Инфы по нему примерно столько же, сколько по COBOL-у, бесплатные компиляторы несовместимы полностью со стандартом, за нормальные и полностью совместимые надо платить деньги. На Хабре есть цикл статей для нубов: https://habr.com/post/150757/ и ещё пять-десять статей по прикладному разбору сертификатов. Иными словами, не похоже, что тебе вообще есть из чего выбирать.
No. 20852    
>>20850
Зачем делать компиляторы платными? Маркетологи хотят продать стандарт ещё и программистам?
No. 20853    
Тут пишут что
https://www.amazon.com/ASN-1-Tutorial-Reference-Douglas-Steedman/dp/1871802067/
>Best introduction to ASN.1 I've found
No. 20854    
>>20852
Компилятор — это, внезапно, инструмент разработки и сложный программный продукт, разработчики которого банально хотят кушать. А так, спеки открыты и написать свой собственный вам никто запретить не может.
No. 20855    
>>20854
>бесплатные компиляторы несовместимы полностью со стандартом
No. 20856    
>>20855
Ну, во-первых, мопед не мой, а дядек с Хабра. А во-вторых, что вас так удивляет? Большой стандарт вполне может быть реализован частично.
No. 20859    
существует ли сайт, который открывает другой сайт, но при этом удаляя всю рекламу из нее?
типа, вводишь sitename.com/open?href=google.com и сайт гугла открывается например, во фрейме, но уже без рекламы
No. 20860    
>>20859
просто когда играю в игрули на 3дсочке, где-то застреваю, открываю браузер и захожу на геймфаг посмотреть решение - сайт не может загрузиться полностью из-за количества рекламы и отображается только малая его часть
No. 20861    
>>20859
Чем монетизировать предлагается?
No. 20862    
>>20860
Поставь на то устройство, с которого раздаётся Wi-Fi, блокировщик рекламы в виде HTTP-прокси с чёрным списком доменов или в виде скрипта для блокирования на уровне DNS-запросов.
No. 20864    
>>20862
звучит сложно. в панели управления роутером нету какой-либо функции блокировки сайтов, а накатывать кастомную прошивку не хочется, т.к. роутер не мой, вотъ

ну и было бы удобнее иметь возможность где угодно смотреть сайты без рекламы. еще нашел пример сайта https://www.printwhatyoulike.com/ сам он не подходит, так как не нажимается кнопка "я не робот"

я мечтаю, чтобы можно было на него заходить как на гугл.ком, смотреть что нужно - и все без рекламы может самому попробовать сделать...
No. 20865    
>>20863
Популярность сайта (а я уверен, что таким сайтом захотят воспольщоваться многие) приведёт к тому, что за хостинг придётся платить в районе 500 долларов.
Где найти эти 500 долларов, неизвестно.
Можно ещё применять белые списки, например, для постоянных пользователей чиочана.
No. 20866    
>>20865
ну, можно рекламы немного вставить на этот сайт-посредник, лол. например, на главной странице и показывать рекламу 5 секунд перед открытием желаемого сайта без рекламы
No. 20867    
15404321845.jpg-(145.98KB, 1061×1200, 1013383411.jpg)
20867
Привет, Стив. Тут одной обезьянке сервер приложений, для вообще. Она в Гугл, а там и плавающие, и летающие. Какой лучше обезьянке?
No. 20868    
>>20860
Если у сайта есть версия для мобильных устройств, то возможно, что она сможет открыться.
No. 20869    
154049793160.png-(64.56KB, 1522×828, pic.png)
20869
>>19666
Есть одна научная работа по генерации карт текстур с помощью нейронных сетей.
https://www.youtube.com/watch?v=UkWnExEFADI
Я скачал код на пайтоне.
https://repo-sam.inria.fr/fungraph/deep-materials/
Но не смог запустить,так как не понял как настраивать параметры и указать правильно путь.
Помогите, умоляю.
No. 20870    
>>20869
Тебе же даже пример строки показали.
No. 20871    
>>20869
>Но не смог запустить, так как не понял как настраивать параметры и указать правильно путь.

Подскажи пожалуйста:
1. Что ты вводишь, когда пытаешься запустить эту штуку. Т.е. скопируй сюда свою строку запуска.
2. Что тебе в ответ на твою строку запуска выводит в консоль.

Есть две основных возможных причины, почему у тебя не получается. Первая - ты действительно что-то не так настроил, или что-то не так делаешь. Вторая - инструментарий которым ты хочешь воспользоваться не то что бы рассчитан из коробки запускаться под Windows (судя по всему, ты запускаешь из-под неё). Ответы на эти 2 вопроса дадут возможность понять, в какую сторону тебе помогать.
No. 20872    
>>20867
>сервер приложений, для вообще
Поскольку ты еще не имеешь конкретных требований к своему серверу, рекомендовал бы рассмотреть сначала бесплатные опции, приведенные вот в этом посте из нашей базы знаний:
http://410chan.org/dev/arch/res/14160.html#14720

Базово, все эти варианты дают тебе машину с удаленным доступом к ней, и предустановленной ОС на выбор. Мне кажется, это лучший вариант, если тебе нужен сервер для своих кастомных приложений. Потыкав бесплатное, ты уже сможешь понять, подходит тебе конкретный вариант, или нет, и в какую сторону наращивать ресурсы своего VPS.
No. 20873    
>>20842
>Были два варианта: с разбивкой на подсистемы сканнера и евалятора, и с разбивкой на менеджера лексеров и лексеров с узкой специализацией.

>с разбивкой на менеджера лексеров и лексеров с узкой специализацией

>Теперь осталось решить проблему, что лексема класса Literal не может завершаться другой лексемой этого класса, т.е. в случаях вида i:=2.3sin(0.3); лексер должен останавливаться на букве s с ошибкой.

Мне кажется, здесь тебе для корректно обработки ошибок нужно завести еще несколько менеджеров лексеров. По хорошему, синтаксическая ошибка в
>2.3sin(0.3);
заключается в отсутствии токена операции между 2.3 и sin()

Из тех лексеров, что я видел, менеджер лексеров просто пропускает символ через все лексеры по очереди, и потом забирает самый длинный токен, взятый с лексеров у которых токен вообще получился.

>i:=2.3sin(0.3);
Здесь у тебя должно получиться так.

1. Супер менеджер взял менеджер лекс-идентификаторов и скармливает ему строку пока не получится первый токен.
2. Один из лексеров менеджера идентификаторов сожрал i и породил токен идентификатора.
3. Супер менеджер взял менеджер лекс-операций и скармливает ему оставшуюся строку пока не получится токен операции. Если токен операции не получится, выплёвывается ошибка, что ожидалась операция на таком-то символе. В данном случае всё будет хорошо, и у тебя вернется токен операции :=
4. Получив токен операции, супер менеджер опять ищет токен идентификатора, и находит 2.3, как самый длинный из возможных.
5. Супер менеджер опять переключается на поиск оператора, и не находит его. Выплёвывается ошибка.

В целом, такая вот передача управления происходит пока супер менеджер не увидит, что оставшая строка - конец ввода ;

Здесь главным будет определить порядок работы менеджеров и процесс передачи управления между ними. Возможно, такая схема будет слишком сложной для того что ты хочешь.
No. 20874    
154058395260.jpg-(220.11KB, 1104×1200, 10208499871.jpg)
20874
>>20872
Спасибо, но хостинг обезьянке пока не нужен. Обезьянка хотела узнать, что выбрать — http://wildfly.org/about/ или https://www.payara.fish/software/payara-server/ ?

На форуме разработчиков JBoss сказано, что
>memory requirements of WildFly itself are low, it uses less than 20mb of ram on default (empty) standalone config.

Даташит на лучепёрую рыбу семейства цинодонтовых говорит, что надо минимум 512 MB и определённую операционную систему, к тому же хвастается вещами, обезьянке сейчас совсем ненужными.
No. 20876    
>>20874
Если тебе пока нужен простой контейнер для Java-приложух, что-нибудь совсем легковесное типа jetty не подойдет?
https://www.eclipse.org/jetty/
No. 20877    
154059582723.png-(194.52KB, 1355×935, Tokenizer.png)
20877
Как-то так вышло. Чур не ржать громко!

>>20873
Тут есть один нюанс: лексер сам по себе ничего не знает о синтаксисе — это задача парсера a.k.a. синтаксического анализатора, работающего уже с хорошо определёнными токенами. Задача лексера — разобрать входной поток символов на лексемы (стадия сканирования) и преобразовать их в токены (стадия эваляции). Для литералов в ЯП вводится требование, что между соседними литералами должна быть хотя бы одна лексема классов delimiter (определитель?) или separator. Т.е. в случае i:=2.3sin(0.3); это лексическая ошибка записи числового литерала (который, кстати, может иметь вид 12.999e-10), а в случае i:=2.3 sin(0.3); — это синтаксическая ошибка «пропущенный оператор». Тут можно вспомнить, что символ '.' также является определителем метода для экземпляра класса, т.е. случай i:=2.3+sin0.3; абсолютно корректен лексически, но ошибочен синтаксически — числовой литерал не может быть идентификатором метода.

Далее, все, известные мне, лексеры работают либо с файлом, либо с достаточно толстым буффером, и могут по необходимости заглядывать вперёд, т.е. являются self-driven лексерами с backtracking-ом. Здесь же вперёд заглянуть нельзя, таким образом процесс эваляции у всех литералов и разделителей на самом деле лексер разделителей никаких токенов не порождает начинается при приходе символа не из их алфавита, т.е. в случае i:=2.3sin(0.3); токен (identifier, "i") не создастся, пока не придёт следующий символ ':'; лексер идентификаторов вернёт тогда Match_Success и из цикла поиска выпадет. Вот лексер определителей из этой схемы выбился, поскольку определители никак не разделяются и вообще это Exact Match согласно перловому компилятору регулярок.

Вот и пришлось работу с буффером и коробкой готовой продукции делегировать исполнителям, а исполнителей разделить на группы. Таким образом, лексер определителей здесь единственный, кто в дополнение создаёт токены и возвращает In_Progress.
No. 20878    
>>20876
Тут вопрос - а что он из этого вынесет?
No. 20880    
>>20874
Ну не знаю. Мне WildFly понравился. А так, разницы между ними особой нет: https://habr.com/company/otus/blog/344416/

>>20876
Jetty — это контейнер, который как службу не запустишь и мышкой не настроишь. Ну и поддержки JEE можно сказать, что и нет. Значит много вынести от его использования не получится, если, конечно, цель состоит именно в этом.

>>20877
>Tokenizer.java
>строка 55
>менеджер даст (что заведомо абсурдно с его точки зрения) символ лексеру, завершившему работу, a лексер его примет, это и будет ошибкой «недопустимый символ»
Столько про этот кейс говорила, а обработать его забыла. Ну дура же!

Вообще, сейчас уже надо начинать писать юнит-тесты, поскольку отлаживать автоматы автоматов в голове становится всё сложнее. Однако оказалось, что JUnit в виде plain-old-jar больше не поставляется, поэтому надо ставить Maven и переводить проект на него, а уже в настройках проекта указывать зависимость JUnit, чтобы Maven подсосал нужные библиотеки из сети. Надо было сразу это сделать~
No. 20882    
154104702987.png-(220.95KB, 1400×936, Mission_Profile_Tests.png)
20882
>>20880
Когда всё начинает работать с первого раза, становится как-то неинтересно. Теперь надо строить синтаксическое дерево, попутно разбираясь, как устроены известные интерпретаторы в смысле среды исполнения.

Лексер, как можно заметить, работает с лагом в один символ (т.е. look-ahead) для унификации способа работы с отдельными модулями. Парсер так же необходимо сделать look-ahead для удобства разбора приоритетов операторов.
Классификация токенов редуцирована по сравнению, например, с компилятором C, и аналогична таковой для лексического анализатора компилятора Clang. Это позволило убрать зависимость лексера от парсера, т.е. повысить инкапсуляцию алгоритмов и модульность проекта. Задача дальнейшей классификации таких токенов целиком возлагается на синтаксический анализатор. Вообще, как-то не особо понятно, почему классификацией идентификаторов должен заниматься именно лексер, но так сложилось исторически.

Нашел, кстати, неплохой гайд по созданию собственных интерпретаторов: http://craftinginterpreters.com/ Тут предлагают процесс интерпретации сделать через обход дерева с использованием паттерна «Посетитель» или преобразовать дерево в байт-код и сделать виртуальную машину. В принципе, первое проще, но второе лучше разделяется, значит удобнее в разработке, отладке, поддержке и расширении.
No. 20892    
>>20882
пишешь свой яп?
No. 20894    
>>20892
Небольшой интерпретатор в автоматном стиле скорее. Довольно занимательная инженерная задача.

А так, никто по сей день так и не смог сделать ЯП превосходящий Ada 95 (типы и подтипы, определяемые пользователем, иерархии модулей, ADO, GADO, ADT, GADT, метапрограммирование на женериках) и Ada 2005 (интерфейсы, сахарок вида object.method и указание процедур-параметров в женериках с null по умолчанию), так что смысла изобретать велосипед я не вижу.
No. 20901    
154179231667.gif-(110.20KB, 400×433, 002c809093dc00a4829d04740d53fc976cd50e8c.gif)
20901
Чиотян, помоги дуре!

https://stackoverflow.com/questions/17581310/using-enum-for-factory-in-java-a-best-practice/ — какая фабрика лучше, которая с абстрактными методами, которая со ссылками на конструкторы, или которая с классами? Дуре фабрика с классами — просто новые классы добавлять и к 8-й версии не прибита, а тебе?
No. 20902    
>>20901
Я тоже голосую за обычную фабрику с классами: т.е сматчили енум (или что там тебе нужно), и по результатам создали экземпляр нужного класса. Универсально, всегда работает.

Альтернативный способ, если хочется чтобы было альтернативно - сделать мапу строка -> функция (возвращает общий интерфейс). Тело функции - создание экземпляра нужного класса. Тогда ничего самому матчить не надо, достал из мапы по ключу, и вызвал с аргументами (или без). Добавить что-то новое в такую мапу-фабрику тоже элементарно.
No. 20903    
154189101425.png-(71.52KB, 1279×855, Clipboard01.png)
20903
>>20882
Подвисла дура чего-то... Основная задача интерпретатора — это REPL, поэтому такие требования.

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

(Involved performers, Analysis result, Last involved performer)
( 1, In_Progress, Performer.Program)
> function f (x) is
( 2, Delegated,   Performer.Declaration)
( 3, Delegated,   Performer.Function_Declaration)  ->  (enter scope)↑
>> if x < 2 then
( 4, Delegated,   Performer.Statement)
( 5, Delegated,   Performer.If_Statement)          ->  (enter scope)↑
>>> return false;
( 6, Delegated,   Performer.Statement)
( 7, Delegated,   Performer.Return_Statement)
( 7, Finished,    Performer.Return_Statement)
( 6, Finished,    Performer.Statement)
( 5, In_Progress, Performer.If_Statement)
>> end if;
( 5, Finished,    Performer.If_Statement)          ->  (leave scope)↑
( 4, Finished,    Performer.Statement)
( 3, In_Progress, Performer.Function_Declaration)
>> end function;
( 3, Finished,    Performer.Function_Declaration)  ->  (leave scope)↑
( 2, Finished,    Performer.Declaration)           ->  (interpret current subtree)↑
( 1, In_Progress, Performer.Program)

(На самом деле цепочки делегирований более длинные, поскольку BNF этого недо-Паскаля занял пару страниц, ну и половина исполнителей не делает больше ровным счётом ничего, прямо как в жизни.)
По сути, это тот же рекурсивный спуск, только с постоянным состоянием на каждом этапе анализа, ну и один огромный token-driven автомат.

Не нравится, что исполнители вовлекают новых исполнителей самостоятельно, в результате управление слабо централизовано. Ну и поток управления у паровоза lexer->parser->binder->performer начал раздваиваться из-за введения областей видимости. Хотя видится вполне возможным обойтись деревьями утверждений, если всё-равно их потом сплющивать в байт-код.

>>20902
Классика со свичом мне не нравится, если ты про неё: во-первых, нет способа узнать, объекты какого класса создаёт элемент перечисления, во-вторых, элемент и класс создаваемого объекта никак явно не связаны, только через код свича. Ну а ссылки на подпрограммы завезли только в восьмую жабу это вам не Ada 95, где просто статический массив под это дело фигачился: type Constructor is access function return Your_Object'Class; Create : constant array (Your_Enum_Type) of Constructor := ....

Я про enum с классами говорил — способ хороший и наглядный. Но мне не нравится сам метод создания нового объекта и количество исключений, которые при этом кидают Class.getDeclaredConstructor () и Constructor.newInstance ().
No. 20909    
154215526568.png-(268.01KB, 1375×921, Clipboard01.png)
20909
<- У меня глаз замылился.

Поскольку семантику тоже было бы неплохо проверять по мере ввода, а парсер очень глубоко закапывается в стэк, было решено единицей его продукции сделать утверждение (statement) и вынести семантический анализ в отдельную подсистему. Довольно забавно, но семантический анализатор говорит на Лиспе.
No. 20918    
154263549899.jpg-(135.85KB, 720×1280, photo_2018-11-19_14-17-18.jpg)
20918
Тупой анон просит помощи. Язык: Python.
Сижу на олимпиаде (хз как тут оказался). Задача, решить не получается.

Моя попытка:
a = int(input('Vvedite chislo a: '))
b = int(input('Vvedite chislo b: '))
N = int(input('Vvedite chislo N: '))
k = int(input('Vvedite chislo k: '))

#if len(str(a+bN)) > k:

ab = a + b

c = 0

while c <= N:
le = a + (c
b)
c += 1

#sp = str(a) + str(ab) + str(le)
#str(a)
#str(ab)
#tr(le)
#sp = None
#str(sp)
#sp = a + ab + le

sp = str(a) + str(ab) + str(le)
#ka = str(sp[10])

print(sp)
input('PRESS ENTER TO END')

Проблема в том, что цикл добавляет в строку sp только результат последнего витка цикла.
Заранее спасибо тем, кто поможет.
No. 20919    
>>20918
Ни в коем случае не стану, и даже, наверное, желаю тебе отсутствия какой-либо помощи, ибо зло и нечестно это. Могу лишь сказать, что код, судя по, будет автоматически исполняться системою, отчего никакие запросоы а-ля “Input value of x: ” тебе писать не требо.
No. 20920    
Добавлю ещё, пожалуй, что в такого рода олимпиадах ввод будет строго в указанном формате.
No. 20921    
Вывод также должен быть в установленной форме и только.
No. 20922    
>>20918
Так. Я решил.
Код:
a = int(input('Vvedite chislo a: '))
b = int(input('Vvedite chislo b: '))
N = int(input('Vvedite chislo N: '))
k = int(input('Vvedite chislo k: '))

ab = a + b
c = 1
sp = str(a)
while c <= N:
sp += str(a + (c * b))
c += 1

k -= 1

if k > len(sp):
print('-1')
else:
print(sp[k])

input('PRESS ENTER TO END')

Да.. Я думал, что разбираюсь в этом лучше.
No. 20923    
154278354377.png-(117.83KB, 1400×980, Clipboard01.png)
20923
Таки единственный способ при реализации конечного автомата избавиться от богомерзкого switch-case в дзяве — это поюзать таблицу динамической диспетчеризации, которую генерит компилятор, т.е. в enum-е указать абстрактные методы transition и dispatch и реализовать их во всех элементах перечисления.

Количество классов в проекте, тем временем, приближается к сотне.

>>20909
Таки это скобка от if-а, т.е. Compound_Statement. Иначе автомат семантического анализатора не сможет правильно построить граф потока управления.
No. 20924    
154282971698.png-(101.02KB, 1077×936, Clipboard01.png)
20924
http://www.educery.com/papers/patterns/visitors/selective.visitor.html
В общем, я не зна~ю... Можно ли что нибудь сделать с этим кастом? Он мне не нравится, хотя всё в общем-то работает.
No. 20926    
>>20743
Это какая версия акробата? Хочу скачать такую.
No. 20927    
>>20926
Седьмая.
>скачать
Adobe лавочку уже прикрыли, годика этак на два раньше спохватываться надо было.
No. 20929    
154295480293.png-(102.81KB, 715×938, Clipboard01.png)
20929
К сожалению, регулярка $name не свободна от backtraking-а, поскольку перекрывается регуляркой $call. Это можно увидеть на отладочном выхлопе перлового движка: https://pastebin.com/D7DhuvrB

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

>>20923
Заметил баг, лол, — этот еврейский калькулятор строит дерево выражения справа-налево.

>>20924
Поменял на
return ((Expression.Visitor<R>) visitor).visit (this);

То ли я чего-то не понимаю, то ли так лучше. В общем-то, стэк хранит объекты надклассового типа AbstractSyntaxTree, так что этот тип должен иметь метод accept даже несмотря на то, что он является абстрактным прародителем иерархии типов.
No. 20939    
154325182517.jpg-(243.27KB, 1000×1280, 4c84a13fb668a24a9b1842d46eb8119dd51d9c97.jpg)
20939
Binder & Name resolver — чего-то опять застряла.

Основная моя идея — преобразовать вновь задекларированные имена в соответствующие объекты в одномерном пространстве биндера-резолвера, тогда обращение к переменной в коде будет просто преобразовываться в ссылку на её объект, а для хранения значений в tree-walker-е использовать локальный на область видимости массив, связывая в биндере его элементы с объектами переменных по индексам (интерпретируя AST/CFG быстрее можно получить что-то работающее). Идея, к сожалению, плоха тем, что:
1) требует свелосипедить особый вид карты (вероятне всего это будет бинарное дерево списков — ну просто потому, что строки в лексере всё-равно надо кэшировать и переводить в числа, а зачем дополнительные коллизии с хэшами от хэшей чисел в HashMap-е?), но это не точно;
2) из-за большого числа коллизий имён поиск пересечений областей видимости в худшем случае будет квадратным — для каждого объекта в списке омонимов убедится, что его scope недоступен из текущего места;
3) из-за разделённости синтаксического и семантического анализаторов и двусмысленности грамматики появляется промежуточный класс SymbolicReference, объекты которого надо кэшировать;
4) REPL требует введения отложенной декларации для взаимно-рекурсивных подпрограмм, значит референсам к таким именам нужно особое хранилище, а конструкциям языка, вводящим новые области видимости, — флаг Incomplete или что-то в этом духе.

Ой!.. Кажется я придумываю GNAT: https://www2.adacore.com/gap-static/GNAT_Book/html/node9.htm
>the Names Table is a hash table with no duplicated names
Дураки одинаково мыслят: “What one fool can do, another can”! Но в отличие от них у меня ScopeStack введён имплицитно через CFGBuilderStack.
No. 20943    
Вечер добрый
Есть ли способ каким то образом вытаскивать и читать xml скриптов для Zennoposter?
Допустим, у меня есть файлик формата xmlz и весь xml который я получил из него это крокозябры.
No. 20944    
>>20943
В xmlz буква z в конце значит zip
No. 20945    
>>20939
По размышлению, идея разбилась о динамические глупости/бакости. Имена в цепи обращений, хотя бы вида a.b, возможно статически разрешить только для а, остальное переносится на рантайм, т.е. невозможно отбросить цепочку SymbolicReference-ов, заменив её прямой ссылкой на конечную ноду. Т.о. большая часть статического анализа идёт лесом, давая взамен ленивую ошибку рантайма “undefined is not a function”. В рантайм так же пойдут такие кейсы, как сложение числа со строкой и деление функции на объект.

Это довольно забавно — для введения подобных ошибок надо обрезать вполне естественные механизмы разрешения имён в семантическом анализаторе и чрезвычайно усложнить рантайм костылями. Так что лучше будет ввести статическую типизацию. Ну в принципе, я что-то подобное и хотела, просто динамика показалась проще...

>промежуточный класс SymbolicReference
— Это, верно, тот самый лес, — размышляла она, — где нет никаких имён и названий {d}. ...

d Таким лесом является на деле вселенная, если рассматривать её как существующую саму по себе, независимо от существ, манипулирующих символами и наклеивающих ярлычки на те или иные её части, поскольку, как заметила ранее с прагматической прозорливостью Алиса, это полезно только для тех, кто этим занимается. Мысль о том, что мир сам по себе не помечен знаками, что между предметами и их названиями нет никакой связи, помимо той, которую придает им интеллект, находящий эти пометки полезными, — совсем не тривиальная философская истина.

© Льюис Кэрролл, «Алиса в Зазеркалье» (Пер. Н.М.Демуровой)
No. 20947    
>>20943
>>20944
>В xmlz буква z в конце значит zip
Соответственно, тебе надо сначала анзипнуть файл стандартными средствами, во временную директорию, или прямо в память если файлы небольшие а потом читать распакованный xml как обычно.
No. 20953    
>>20947
Собственно, именно после такой последовательности действий я и вижу страшные крокозябры
Перепрыгивания с одной кодировки на другую результатов не даёт.
No. 20955    
>>20953
Если xmlz-файл не секретный, можешь приложить его сюда?
No. 20960    
>>20955
Конкретно сейчас мне все равно какой xmlz файл тыкать
Можно, например, этот. Он из примеров Зенопостера
https://yadi.sk/d/Zgxnn_BgANDoWA
No. 20961    
>>20960
Заметил, что он защищен RSA
Придется искать другой способ, видимо
No. 20962    
154366736840.png-(59.89KB, 630×432, Clipboard01.png)
20962
Определилась с архитектурой, т.е. представляю, как оно должно работать без привлечения волшебных гномиков. Описываю классы узлов AST, начинаю понимать, почему челы из AdaCore в рассылках говорили, что нахѣр в компиляторах ваше ООП не нужно. Ненавижу computer science... Что у меня пока получилось:
1. Тип — это дефиниция множества значений.
2. Переменная — это дефиниция значения заданного типа.
3. Функция — это дефиниция операции над значениями заданных типов.
4. Класс — это дефиниция множества операций над множеством значений заданных типов.
5. Выражение — это последовательность операций над значениями заданных типов.
Классы Expression и Definition отделены друг от друга. Если следовать (а и придётся) идеологии программирования посредством расширения, Definition надо наследовать от Expression. Может есть идеи получше?
No. 20963    
>>20961
Посмотрел этот скрипт. Я так понимаю, что суть в том, что ключ лежит прямо рядом, в файле Template.xml.signer, но сам этот файл дополнительно защищен паролем, и не зная пароля получить ключ и расшифровать xml будет затруднительно.

Интересно, все ли темплейты так энкриптятся, или только те, с которыми авторы пожелали так сделать, проследовав вот этим инструкциям: https://zennolab.com/wiki/en:encryption
No. 20964    
>>20924
Можно, кстати, не определять в каждом дочернем абстрактном классе ещё один метод accept (Visitor<R>):R и не имплементить его — интерфейсы-то тоже наследуются от абстрактного предка.

>>20962
>5. Выражение — это последовательность операций над значениями заданных типов.
Последовательность применения операций над значениями заданных типов, если быть точным. Т.е. надо от Expression унаследовать ещё класс ... Action, например, и там уже описывать применение операций. Плюсом пойдёт перегрузка операторов.
Хотя, всё-равно иерархия плохо выглядит как-то.
No. 20972    
154390461655.png-(271.52KB, 425×425, Icon.png)
20972
Привет. У меня есть вопросец плана "что использовать".
Дано: HTTP-сервер. Клиенты шлют запросы с некими данными. Шлют часто, ~10 раз в секунду (суммарно от всех клиентов). Обрабатывать их запрос "вот прям щас", в пределах запроса, задачи не стоит. Клиента не интересует ответ сервера.
Но данные эти важные, и обрабатывать их нужно. Поэтому их нужно куда-то сохранять с тем, чтобы потом их обработать "скопом".
Вопрос: Куда сохранять?
Требования: т.к. запросов много и идут непрерывно, важно их очень быстрое исполнение, читай сохранение данных, по принципу "дал команду сохранить и забыл". Важно также сохранить очерёдность запросов.

Варианты:
1. fifo-файл. Но тут должен быть не только писатель, но и читатель. А читателя может пока и не быть. Он запустится позже, cron-ом.
2. Разнообразные MQ. Аналогично первому, нужен читатель.
3. Табличка в БД. Так и делал. Но когда запускал обработчик накопленных данных, он блокировал таблицу (данных много, запросы тяжёлые, а из таблицы же ещё удалять надо). Insert-ы в эту таблицу блокировались, кол-во процессов http-сервера накапливалось очень быстро, упиралось в лимит, и сервер становился недоступен. В общем принцип "дал команду сохранить и забыл" нарушается.
4. Разные вариации пункта 3. Типа сделать ещё одну таблицу, потом "лёгкими" запросами переносить данные в другую, над которой работать "тяжёлыми" запросами. Сейчас так и есть, да. Но складывается впечатление, что я какой-то хернёй занимаюсь.

В общем, чувствую, что готовый инструмент уже есть, просто я %по своей отсталости% о нём не знаю. Хелб.
No. 20973    
>>20972

>В общем, чувствую, что готовый инструмент уже есть, просто я %по своей отсталости% о нём не знаю. Хелб.
>1. fifo-файл. Но тут должен быть не только писатель, но и читатель. А читателя может пока и не быть. Он запустится позже, cron-ом.
>2. Разнообразные MQ. Аналогично первому, нужен читатель.

В случае с MQ нет ничего страшного в том, что читателя нет прямо сейчас. Читатель может выходить на связь, вычитывать сколько там надо сообщений, и подтверждать брокеру что он вычитал вот ровно столько. Но, важно всё правильно настроить.

Рассмотрим на примере RabbitMQ:
  • Учитывая сколько у тебя сообщений, тебе нужно создать lazy очередь, чтобы данные лились сразу на диск: https://www.rabbitmq.com/lazy-queues.html
  • Дополнительно, тебе надо пометить свою очередь как durable, а свои месседжи как persistent (что частично перекрывается объявлением lazy очереди), чтобы и очередь и месседжи переживали рестарты: https://www.rabbitmq.com/queues.html и https://www.rabbitmq.com/persistence-conf.html
  • Чтобы протухшие сообщения всё же удалялись, надо правильно настроить им TTL: https://www.rabbitmq.com/ttl.html
Соответственно, по завершении настройки у тебя появится очередь, которая пишется прямо на диск, сама растёт, и сама удаляет старые элементы по TTL. Остается только правильно из неё читать. В первую очередь, правильно подтверждать сообщения, чтобы не пометить необработанные данные как уже принятые. Во вторую - не получить весь миллион сообщений оставшийся с прошлого запуска в свой читатель за раз.

С подтверждениями всё относительно просто - подтверждай принятие каждого сообщения только после того, как ты с данными сделал всё что хотел, а не как только ты данные получил. Это значит что нужно отключить autoAck когда ты создаешь читателя (чтобы брокер не считал доставленные сообщения сразу полученными), и затем отправлять подтверждения вручную. Примеры как это делается вот тут внизу: https://www.rabbitmq.com/confirms.html

С получением не более N сообщений за раз всё тоже просто. Нужно настроить prefetch: https://www.rabbitmq.com/consumer-prefetch.html

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

Со стороны очереди у тебя получается саморегулирующаяся очередь, которая переживает рестарты и настроена не жрать оперативную память, а вместо этого агрессивно растёт на диск (которого всё равно больше, чем оперативки).

Вроде звучит как то, что тебе нужно.
Но, конечно, придётся всё вдумчиво настраивать.
No. 20974    
>>20973
По-моему TTL — это не то, что ему нужно:
>Важно также сохранить очерёдность запросов.
No. 20975    
Кто-нибудь знает, что такое NS_ERROR_STORAGE_BUSY и как его правильно обрабатывать?
Рalemoon у меня внезапно стал выдавать это исключение на вызов window.localStorage.getItem в моём скрипте.
Гугл находит кучу сообщений о связанных с ним ошибках и ничего полезного.
No. 20977    
154395081313.mp4-(153.72KB, 1920×1080, Kono Subarashii Sekai ni Shukufuku wo! 2 - Vanir s.mp4)
20977
>>20972

> Клиенты шлют запросы с некими данными. Шлют часто, ~10 раз в секунду (суммарно от всех клиентов).

> запускал обработчик накопленных данных, он блокировал таблицу (данных много, запросы тяжёлые, а из таблицы же ещё удалять надо). Insert-ы в эту таблицу блокировались, кол-во процессов http-сервера накапливалось очень быстро, упиралось в лимит, и сервер становился недоступен.

Сложно советовать, не зная ни средний размер данных в одном запросе, ни среднее количество секунд, требуемых обработчику накопленных данных. Но я попробую.

Если проблема только в том, что исчерпывается лимит количества процессов HTTP-сервера, а других проблем не предполагается (например, не предполагается, что произведение количества поступающих от клиента данных на 10 запросов в секунду и затем ещё на количество секунд, требуемых обработчику накопленных данных, превзойдёт объём доступной памяти), то тогда решение выглядит очень просто: надо использовать такой HTTP-сервер, которому всегда достаточно только одного процесса, а ввод-вывод (то есть и чтение из HTTP-запроса, и запись в базу данных) совершается асинхронным (неблокирующим) способом, аналогичным постановке в очередь событий. В качестве примера такого HTTP-сервера я назову прежде всего Node.js.

В качестве постскриптума я изложу ещё мрачное подозрение о том, что обработчик накопленных данных также есть куда оптимизировать. Быть может, он делает всю работу внутри одной огромной эксклюзивной транзакции, предотвращая запись в таблицу на всё это время (вместо того, чтобы наперёд один раз считать номера строк накопленных в таблице данных, а затем использовать их в запросах для ограничения употребляемого набора данных, чтобы случайно не ухватить более новую строчку, но зато хотя бы разрешать появление таких новых строчек во время выполнения своих запросов, а не тормозить всю запись). Быть может, он удаляет обработанные строки из таблицы поодиночке (вместо того, чтобы поместить список команд, удаляющих эти строки, внутри одной транзакции, чтобы только один раз выполнять блокировку и последующую разблокировку записи в базу и затем сбрасывать системные буферы на диск — только один раз, а не для каждой стираемой строчки).
No. 20978    
>>20975
На самом деле тут ошибка вполне красноречиво называется. Сторадж занят. В данном у Firefox случае localstorage может быть открыть только один раз в один момент времени, если он открыт чем-то и происходит попытка открыть его второй раз, то выплевывается эта ошибка. Детальнее надо смотреть на сам код и сравнивать с тем как оно работает в обычном Firefox. Я вполне допускают, что разработчики Palemoon просто сами наколхозили что-то.
No. 20979    
>>20978
…И после перезагрузки компа больше этот баг не воспроизводится. Всё работает одинаково во всех лисах. Так что теперь я без понятия, что это вообще было.

>надо смотреть на сам код
Код там простейший — пробуем считать настройку из локалстораджа, если её там нет — возвращаем значение по умолчанию.

Наверное, надо будет его тупо обернуть в try/case блок, чтобы скрипт не вылетал при такой фигне.
No. 20980    
>>20979
Я скорее о том, что у того кода с асинхронностью, пытается ли он вызываться одновременно из разных вкладок браузера и т.д. и т.п.
No. 20981    
154411155437.jpg-(161.17KB, 1913×961, screenshot.jpg)
20981
<section class='main'> должно включать в себя сайдбар, но нет. ЧЯДНТ?
No. 20982    
>>20980
Код вызывается из OnLoad, никакой асинхронности я туда не закладывал, других скриптов, юзающих локалсотораж, на сайте нет, вкладка, в которой скрипт выполнялся, была одна.
No. 20984    
>>20981
Выложи текущее состояние вещей на http://jsfiddle.net/ и дай ссылку. Так будет проще всего тебе помочь.
No. 20985    
>>20981
Есть тег <main>, <section> - это разделы, главы. <aside> по семантике должен быть вне <main>, так как там дополнительный контент. <header> и <footer> тоже в <main> не нужны. Но это лирика.
Скорее всего ты сайдбару назначил float: right, либо еще что-то.
No. 20986    
154427538097.jpg-(482.94KB, 1024×768, 34816_galaxy-angel-kobieta.jpg)
20986
Всё-таки, что-то в этом такое есть: https://pastebin.com/k4j6MGCC Замучилась с этими неоднозначностями, если честно, даже пришлось проброс продуктов вверх по стеку делать. И всё-равно, проверка корректности инструкций (statement, «утверждение» звучит как-то криво) вида obj.met (a1, a2) := 1; на этапе синтаксического анализа осталась невозможной. Но в GNAT-е сделано также, да и вообще ARM 5.2-5 просто говорит, что “The target denoted by the variable_name shall be a variable.”, т.е. выносит эту проверку за рамки синтаксического анализа.

Теперь можно заниматься семантикой, т.е. строить из этих полуфабрикатов направленный граф, узлами которого являются направленные ациклические графы: https://web.cs.wpi.edu/~cs544/PLT8.5.5.html С семантикой, вернее с процессом интерпретации графа, меня всю неделю гложет чюрвь сомнения, упорно утверждающий, что потеряна иерархическая связь между средами выполнения (execution environment) в результате чего родительская среда будет погребена на стеке дочерними средами рекурсивно вызываемой подпрограммы.
No. 20987    
Добрый день, анон.

Прошу подсказать, что выбрать для дата сайенсов и машин лернингов, R или Python.

Месяца 3 назад выбрал R по ряду причин, удобная ide RStudio, быстрая установка пакетов, и знакомый, который разбирается в R.

И в целом разочаровался, по причине того, что R не хватает consistency. Такое ощущение, что у него миллион пакетов, каждый из которых работает по-своему, и что все они находятся в пре-альфа состоянии, и их нельзя пихать в продакшн (я не работал с JS, поэтому мне наверное нельзя жаловаться).
Простой sql запрос типа lag over становится нетривиальной задачей на R. Когда хочешь нарисовать график на ggplot2, не смотря на то, что он вроде как задуман быть tidy, все равно приводит к необходимости качать какие-то сторонние недобиблиотеки, которые не работают, и ты все равно в итоге используешь эксель.
Короче, я не вижу в R рабочую лошадь, которую можно использовать на практике. Вроде и гибкий, и с большими возможностями, но это ненадежный инструмент.

Вот я думаю, а python это хорошо, панацея? Стоит смотреть в его сторону?
No. 20988    
>>20987
Выбери математику и задайся вопросом — сможешь ли ты одновременно ботать математику и бороться с языком? — поскольку ЯП тут вторичен. R создавался для непрограммистов, занятых исследовательскими работами (математики и статистики, как правило, не умеют да и не стремятся уметь программировать, и очевидные программистам вещи им, обычно, неочевидны); Python делался для программистов и продакшена. Если тебе R жмёт, то смысла грызть этот кактус дальше нет.
>Такое ощущение, что у него миллион пакетов, каждый из которых работает по-своему, и что все они находятся в пре-альфа состоянии, и их нельзя пихать в продакшн
Это нормальное состояние для Comprehensive Archive Network: здесь всё держится на честном слове крокодилящих авторов модулей, которые, как только популярность проекта начинает падать, тихо ливают в более популярные проекты.
No. 20990    
>>20987
Поддержу >>20988. Нет смысла продолжать бороться с R, если в нем уже неудобно - дальше будет только хуже. Python будет с тобой надолго: на нем легко интерфейситься с разными базами данных, можно работать с крупными структурами данных с помощью Pandas, можно делать быстрые прикидки с графиками с помощью Jupyter. Если очень захочется - можно прикрутить легковесный web-сервер типа Flask, делать визуализации на JS (питонские графики тут не могут сравниться, если тебе хочется "по красоте") и делиться результатами. Можно даже писать на нём под монстров типа Spark/Hadoop. Ну и само собой, весь спектр средств от логистических регрессий до GAN в твоём распоряжении в нормальных, поддерживаемых библиотеках - бери и пользуйся.
No. 20996    
Очередной глупый вопрос. Кто-нибудь знает, сколько по времени может выполняться вычисление корней n-ой степени методом Ньютона с точностью около 10_000 знаков на одном ядре?
No. 20999    
>>20996
Можно попробовать узнать это, или хотя бы прикинуть, основываясь на сложности этого алгоритма: https://stackoverflow.com/a/5005879

>Using Newton's method as described above, the time complexity of calculating a root of a function f(x) with n-digit precision, provided that a good initial approximation is known, is O((\log n) F(n)) where F(n) is the cost of calculating f(x)/f'(x)\, with n-digit precision.
No. 21000    
154510230036.png-(41.06KB, 846×1218, ArchInternalDependencies-DirectoryStructure.png)
21000
Это старый проект библиотеки в объектно-базированном стиле, но его можно использовать, только сначала отрефакторить.

Проблема в том, что он с дурью. Модуль Big_Decimal является, очевидно, слоем абстракции данных и экспортирует приватный контролируемый тип над которым определены базовые арифметические операции и операторы, иными словами, является интерфейсом библиотеки. Модуль Big_Decimal_Core со своими детьми является, собственно, вычислительным ядром и клиенту экспортироваться не должен. В силу наивного подхода к разработке ядро работает в системе счисления с основанием 10^8, но каждая его подпрограмма арифметической операции принимает как аргумент Scale количество цифр после запятой по основанию 10^1.

Дурости:
1. Scale каждый раз пересчитывается в Internal_Scale и обратно. Это приводит к строчке-трём шаблонного кода в каждой процедуре, и вообще раздражает, ибо костыль.
2. Более серьёзная проблема — для связи интерфейса и ядра пришлось ввести в паблик интерфейса контекст ядра. Компилятор тут же потребовал или контекст убрать, или ядро экспортировать. В итоге пошли лесом все оптимизации, ибо экпортируемые подпрограммы инлайнить нельзя, а у ядра высокая инкапсуляция, предполагающая зверские инлайны. Т.е. получается:

big_decimal.gpr
library project Big_Decimal extends "Abstract_Library_Project" is
   for Library_Name use "big_decimal";
   for Library_Interface use ("big_decimal");
   ...
end Big_Decimal;

big_decimal.ads
with Big_Decimal_Core;
package Big_Decimal is
   type Decimal is private;
   ...
private
   type Decimal is new Ada.Finalization.Controlled with
      record
         Value : Big_Decimal_Core.Decimal;
      end record;
   ...
end Big_Decimal;

big_decimal_core.ads
package Big_Decimal_Core is
   type Decimal is private;
   ...
private
   type Decimal is
      record
         ...
         Vector : Digit_Vector;
      end record;
   ...
end Big_Decimal_Core;

И попытка сборки:

$ gprbuild
...
Error: In library project "Big_Decimal"
         Unit "Big_Decimal_Core" is not in the interface set
         but it is needed by the spec of "Big_Decimal"
gprbuild: incomplete Stand-Alone Library interface

Я уже запуталась, что делать. Вынести тип ядра в отдельный Pure-модуль, типа он не реализует ничего и ладно, этот модуль сделать прародителем иерархии ядерных модулей? Но это как-то коряво смотрится, IMO. Убрать контекст ядра в тело реализации интерфейса? Но это: а) пока неясно, как, ибо требуется описать тип в интерфейсе полностью; б) закроет путь для расширения интерфейса дочерними модулями, использующими ядро напрямую.
No. 21001    
15451970728.png-(245.60KB, 1400×1050, Clipboard01.png)
21001
>>20999
Ну, мне бы хотелось увидеть абсолютные числа, ожидаемое время через сложность-то я и так посчитать могу. Да там и считать нечего, она в Карацубу упирается, т.е. при увеличении размера входных данных в два раза следует ожидать увеличения времени выполнения в три с хвостиком раза.

>>21000
Янизнаюололо!.. Ну, как-то так.

>Вынести тип ядра в отдельный Pure-модуль, типа он не реализует ничего и ладно, этот модуль сделать прародителем иерархии ядерных модулей?
В общем, другого решения не нашлось. Зато теперь оно перестало пытаться экспортировать приватные модули, и можно легко написать отдельный интерфейс для экспорта в C, ибо экспортировать туда перегруженные операторы как-то не умно, хотя и можно.

Ядро имеет высокую цикломатическую сложность (внезапно), поэтому тесты вида 10 / 2 = 5 ничего не покрывают и не тестируют. По этой же причине, плюс из-за высокой взаимозависимости реализаций модулей, неэффективным становится и модульное тестирование. Гораздо эффективнее гонять взаимообратные операции на случайных числах и покрывать единичные редкие кейсы отдельно, однако это требует времени.

Ну и как видно по результатам профилирования, похоже всё упёрлось в 32-битный компилятор, т.е. быстрее она бегать не будет.
No. 21003    
Кто-нибудь знает, почему точность теряется?
Код: https://pastebin.com/mPiARqC2
Выхлоп: https://pastebin.com/D3BSrKKr

Ну и на засыпку: что можно сделать с интерфейсом подсистемы Rounding, чтобы лучше смотрелось? В принципе, Ада не требует наличия конструкторов, гёттеров и сеттеров (это я с Джавы притащила).
No. 21004    
154555472234.png-(74.99KB, 1400×1050, Clipboard01.png)
21004
>>21003
Картинку забыла.
No. 21005    
Как правильно использовать Etag и If-Modified-Since?
Я пока представляю так: На примере борды.
Клиент отправляет запрос HEAD с If-Modified-Since, если тред не изменился, то в ответе передавать 304; если изменился, то 200 и новые посты, которые появились со времени указанном If-Modified-Since.
А если etag, то нужно их ещё и хранить, чтобы знать какому клиенту какие данные отдавать? Etag тогда лучше для файлов подходит, верно?
No. 21006    
>>21005
> отправляет запрос HEAD с If-Modified-Since
Я тут ошибся, надо посылать GET запрос, HEAD не возвращает данные в теле.
No. 21010    
154577631266.png-(274.72KB, 1400×1050, Clipboard01.png)
21010
Раньше хотя бы Апач надо было настроить...
Расскажите про JSF что-нибудь.

>>21003
1. Таки все цифры верные — расчет-то ведётся с абсолютной точностью с 20 знаками после запятой.
2. Х.з. что делать — или одно закопается, или другое. Хотя подсистема просится в отдельный встроенный модуль. Ну и статическое мутабельное поле Global_Model превращает модуль в объект данных, что не очень хорошо.

>>21005
E-Tag в сферической теории — это уникальный идентификатор ресурса, т.е. либо хэш от его контента, либо от времени последней модификации. С If-Modified-Since никак не связан, ты походу с If-None-Match путаешь. На практике, поскольку E-Tag кэшируется браузером, его стали применять для отслеживания уникальных клиентов, т.е. каждому клиенту для одного и того же ресурса отдавался уникальный E-Tag: http://lucb1e.com/rp/cookielesscookies/ не работает в Opera Presto 12.18
>Etag тогда лучше для файлов подходит, верно?
Нет. Он подходит, когда:
1. Ты отслеживаешь клиентов для каких-либо целей.
2. У тебя на одном URI в силу архитектурной недоработки висит разный контент, например, мультиязычная поддержка, и сделать кэширование иначе не получается.
В остальных случаях:
1. Преимуществ не имеет.
2. Является необязательным.
3. Имеет дурную славу.
4. Параноики его вырежут (вернее, он у них перманентно вырезан).
Иными словами, в глобальном Web-е правильней всего будет E-Tag не использовать. Ну а для местной сети он используется параллельно с If-Modified-Since, кроме случаев мультиконтентного ресурса, где они оба используется совместно.

Ну и как-то я не думаю, что это хорошая идея — серверу свою выдачу подгонять под If-Modified-Since.
No. 21015    
>>21010
>Ну и как-то я не думаю, что это хорошая идея — серверу свою выдачу подгонять под If-Modified-Since.
А какие подводные камни? Если заголовок не передается, то возвращать ресурс целиком. Если передается то 304 или новые посты. Вроде согласно стандарту поведение.
No. 21021    
Test POST.
No. 21024    
>>21015
Путаешь транспортный уровень с клиентским — никто не ожидает такого поведения. Ну и стандарт создавался во времена, когда ресурсом была статичная HTML-страничка, а соединение было по диалапу. Вот чтобы одни и те же данные по медленному (и дорогому) каналу не гонять и придумали If-Modified-Since: если страничка на сервере не изменилась, сервер лаконично говорил клиенту 304, а клиент брал данные из кэша; ну а если изменилась, то сервер её изменённую целиком и отдавал.

>>21021
Ой, оно работает! А POST with attachment не работает.

>>21010
Что-то странно у них сделано. Вообще, как-то у них всё плохо на деле, как будто это не “development environment for building distributed high reliability mission critical software systems”, а студент на коленке делал:
— Есть своя система сборки + вместе с компилятором поставляется уже работающий бидон = все используют autotools... вот это вот configure, makefile-ы и костыли на sh, cmd и перле, что должно было умереть десять лет назад и войти в историю как пример того, как не надо делать системы сборки. Задача «собрать фреймворк с поддержкой SSL под винду» т.о. стала совсем нетривиальной.
— Про итераторы с UB в коллекциях уже писано — меня в сообществе просто вежливо послали, мол, «диды так сорок лет писали, и ты пиши, не выделывайся; да и вообще, кому нужны схемы итерации сложнее forEach (с колбеком на procedure (E : in out Element))?»
— Клиент при отправке POST-запроса Content-Type ставит в multipart/form-data, но запрос строит неправильно: Content-Disposition: attachment: filename=... хотя должно быть Content-Disposition: form-data: name=... Как будто кто-то реализовывал RFC без понимания, для чего оно надо.
— Загрузчик сервера за каким-то бесом переименовывает загруженные файлы и новое имя засовывает в Status.Parameters.List (Key : String; Value : List (String)) вместе со старым. При попытке сделать application/x-www-form-urlencoded оно оба этих имени и кодирует. Ведь можно же было это объектом сделать...
— key-value хранилища для хедеров, параметров и вложений не поддерживают удаление ключей, операцию Subset и не реализуют итераторы, т.е. неясно, как решить задачу удаления пары ненужных заголовков иначе, чем созданием нового запроса/ответа и копированием в него содержимого старого.
— Начали шатать довольно годный стандарт Ada95, где была пара недоработок, в итоге сейчас спецификация пакета представляет собой такую же шизофазическую кашу, что и в Дельфи.
— За всё это они хотят денег, причём немалых.

Блджад, я вообще не понимаю, что происходит в этом мире. Вроде хочешь как проще, получается, что проще взять Grizzly и прочий Java EE.

Извините за многабукв.
No. 21040    
>>21024
Тогда какой вариант будет использовать лучше? Передавать last_post в качестве параметра?
No. 21052    
154608626130.png-(553.43KB, 1280×1378, [SIG26740ab0cd5a203e7c568f67ce5af9ccf78c02f3baa441.png)
21052
>>21038
У тебя грузчики на складе решают, какой товар везти в магазин «Ландыш». Ладно хоть сами дату не назначают. Их ли это дело?
>То есть ты предлагаешь тянуть весь блок данных каждый раз, когда нужно их обновить?
Оно так изначально и задумывалось — либо всё, либо ничего. Транспортный уровень ничего о содержимом и семантике запросов не знает. К тому же, в общем случае неизвестно, какую именно часть данных отдавать конкретному клиенту.
Возвращаясь к примеру, тебе надо будет как-то разруливать ситуацию, когда несколько старых постов удалили, т.е. либо сервер таки должен отдавать всё, либо хранить у себя копию данных каждого клиента, вычислять дифф между новыми и старыми данными, этот дифф отдавать клиенту, и всё это делать на каждом запросе. И ради чего нужна такая мутотень?
>>21039
Лучше отдавать то, что можно кэшировать. Кэшировать можно лишь статический контент. Т.е. лучше сделать параметризованный ресурс /update_posts?from={timestamp | last_post_ID}, тогда его можно будет кэшировать на транспортном уровне, а параметры протухания кэша будут устанавливаться сервером приложения.

Разницу подходах видишь? Ты пытаешься отдать контента на пару байт меньше, но обязательно отдать, для этого статический ресурс делаешь динамическим, я же пытаюсь сервер приложений лишний раз не дёргать — грузчики вполне в состоянии сказать, что поступлений на склад на этой неделе не было, для этого им не надо знать, что нужно конкретному «Ландышу»; более того, им даже не обязательно знать, что спрашивают из «Ландыша».
No. 21059    
154627430744.png-(363.04KB, 640×437, poputepipikku.png)
21059
Всех с наступающим Новым Годом!

Спасибо всем, кто помогал, советовал, и подсказывал начинающим программистам в этом году.

Аноним и в новом году будет проверять тред несколько раз в сутки, чтобы каждый мог получить ответ на свой вопрос или хотя бы наводку на него в тот же день.

Всем хорошего кода в Новом Году.
No. 21081    
154718838098.jpg-(1.11MB, 1600×1200, 40 - 1600x1200@32 [SIG82b846bd226562a4f3b7eacb27ce.jpg)
21081
С Новым Годом всех девочек, мальчиков и зверушек с ТауКита!

Тут одна девочка “Spring in Action”... Ну,.. как написать четыреста с лишним страниц об очень простых вещах? Надо каждую вещь повторять по три раза: один раз в виде кода и два раза словами до и после кода, т.е. шаблон вида «Сейчас мы данные из A посредством B положим в C. Код: “C <- B <- A”. Теперь C содержит данные из A, которые мы получили посредством B». Препод девочки пришёл бы в восторг от подобного подхода.

Но ладно, это лирика. В общем-то вопрос вот какой: допустим, что есть некая древовидная структура данных описанная рекурсивно. Ну, пусть ей будет AST от калькулятора выше. Эту структуру надо отображать в виде HTML. Существуют ли какие-нибудь шаблонизаторы для таких задач? Девочка видела FreeMarker, но он работает со статичными моделями данных, а здесь модель динамическая.
No. 21083    
Чтоб не потерять, положу здесь этот чудесный пример MVP-архитектуры: https://stackoverflow.com/a/22032787 — может он кому-нибудь ещё пригодится. Прямо классика проектирования панелей управления.
>>21081
Оказывается, макросы FreeMarker-а и Velocity умеют вызываться рекурсивно. Осталось разобраться, как сделать диспетчеризацию.
No. 21126    
15476280496.jpg-(126.38KB, 390×489, 346.jpg)
21126
Всем привет, пишет вам тридцатилетний безынициативный хикка. Моя нээ-сан последние два года работает в айтишной конторе, ее там все любят и всячески продвигают по службе правда она не кодер а ит-менеджер. Ну и она, предлагает мне вкатиться в кодеры, к ним в фирму посредством кумовства.

Там у них все завязано на веб как и везде. Очевидно надо знать js. Я js не знаю, только жабу относительно глубоко может быть даже на уровне джуна. Надо наверное что-то сделать, потыкать джаваскрипт, забыдлокодить что-то для портфолио. Но меня воротит от веба, и идей никаких нет чтобы писать что-то. Зато есть одна десктопная приложуха на жабе, которой я активно пользуюсь, я думаю переписать ее на js. На скрипте же можно делать десктопные приложения? Какие вообще технологии использовать, чтобы быстро, просто и чтобы потом все это пригодилось? Десктопный скрипт намного тормознутее джавы или нет у меня слабый пк? Какой гайд по разработке десктопных приложений посоветуете, чтобы не был привязан к никаким иде, а можно было писать код в любимом блокноте с подсветкой, и интерфейсы тоже набивать ручками в xml, css или в чем там их клепают на js?

Спасибо.
No. 21130    
>>21126
> Десктопный скрипт намного тормознутее джавы или нет?
В 3-5 раз, хотя для некоторых программ разница может быть незначительной или вообще быть в пользу js, а для каких-то Java может быть быстрее в 10 раз.
No. 21136    
>>21126

Мне кажется, если ты хочешь изучить жаваскрипт для веб, то тебе надо скорее разибраться в распространенных веб-фреймворках, например в Angular, ReactJS, Backbone.js:
https://angular.io/
https://reactjs.org/
http://backbonejs.org/

Впрочем, скорее всего ты сможешь их использовать и в этом случае.
Теперь подробнее по твоим вопросам.

>На скрипте же можно делать десктопные приложения?
Можно.

>Какие вообще технологии использовать, чтобы быстро, просто и чтобы потом все это пригодилось?
Зависит от того, какое приложение ты хочешь.
Если хочешь серверную приблуду, тебе подойдет, например, NodeJS: https://nodejs.org/
Если хочешь клиентскую приблуду, тебе подойдет, например ElectronJS: https://electronjs.org/

Менеджмент библиотек и прочих зависимостей делается через внутренний пакетный менеджер npm.
Сами зависимости описываются в json-файлике.

>Десктопный скрипт намного тормознутее джавы или нет у меня слабый пк?
У десктопного скрипта есть объединяющий фактор - среда исполнения. Среда исполнения обычно - движок Хрома, или без головы вообще (NodeJS), или без внутреннего интерфейса (ElectronJS). Т.е. работать будет так же быстро как браузер, и так же быстро, как в браузере.

>Какой гайд по разработке десктопных приложений посоветуете, чтобы не был привязан к никаким иде, а можно было писать код в любимом блокноте с подсветкой.
Почти все скриптовики используют "простые" редакторы с подсветкой синтаксиса (и иногда деревом файлов), обычно Sublime, поэтому тут у тебя проблем не будет. Можешь начать с официальных гайдов для указанных фреймворков:

https://electronjs.org/docs/tutorial/first-app
https://nodejs.org/en/docs/guides/getting-started-guide/

Чтобы указать на более конкретные гайды, надо знать какое приложение ты будешь портировать.
No. 21138    
154775922863.jpg-(486.10KB, 1562×2000, --38.jpg)
21138
Надоело быдлокодить, хочу заняться нескучными вещами.
Чего можно почитать/изучить, чтобы иметь представление о работе таких сложных сетевых распределенных/отказоустойчивых/что-нибудь ещё штук по типу TOR, I2P или того же Телеграма. Интересно именно понимание архитектуры, а не способы реализации. Желательно с нуля и по возрастающей, чтобы я мог подучить все пропуски в знаниях.
Интересно так же отдельно почитать что-нибудь о повышении надёжности сетевых приложений и инфраструктуры.
No. 21143    
>>21138
Читать спецификации и научные публикации пробовал?
No. 21148    
>>21138
>о работе таких сложных сетевых распределенных/отказоустойчивых/что-нибудь ещё штук по типу TOR, I2P или того же Телеграма.

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

Телеграм - это клиент-серверное приложение, т.е. что-то, что работает поверх сети, а не само по себе является сетью. Поскольку сети всё равно, какие данные ей доставлять, это приложение использует собственный кастомный протокол (MTProto) для обмена предустановленными типами данных между клиентами. Верно и обратное, протоколу всё равно, по какой сети передались данные, и можно адаптировать протокол для передачи данных по любому нужному типу сети.

Т.е. I2P и TOR дают тебе среду для передачи данных, а Телеграм требует у тебя среду для передачи данных.

Основное, что отличает сети типа I2P и TOR от обычных VPN - специфический роутинг.

Для TOR это Onion routing: https://www.onion-router.net/Publications/SSP-1997.pdf
Для I2P это Garlic routing: https://geti2p.net/en/docs/how/garlic-routing

Основное, что отличает Телеграм от обычных мессенджеров - собственный проприетарный протокол MTProto, который может быть адаптирован для работы в любом типе сети: https://core.telegram.org/mtproto
Не смотря на то, что тут указаны реализации под три транспорта, ничто не мешает иметь их больше.

В первую очередь, это открывает возможность для гибридной доставки сообщений, когда твой клиент связывается с целевым сервером используя MTProto over HTTP, или MTProto over TCP, а сервер осуществляет дальнейший роутинг, например, используя MTProto over I2P или MTProto over TOR, что позволяет частично скрыть карту сети и поднимать незаметно больше серверов, чем показывать их публично (что происходит в момент доставки новых настроек клиенту, например)

>>21143
Лучше всегда указывать конкретные публикации, которые ты лично бы рекомендовал, а не "какие-нибудь".
No. 21160    
>>21148
Я понимаю разницу, и всё то что ты написал. И про доки TOR и I2P я знаю. Я прошу чего-нибудь фундаментального почитать на тему сетей, чтобы лучше понимать устройство всего вышеописанного и мочь спроектировать самому.
No. 21165    
154800208422.zip-(3.74MB, Cisco Press 2005 - Building Resilient IP Networks.zip)
21165
>>21160
>Я прошу чего-нибудь фундаментального почитать на тему сетей, чтобы лучше понимать устройство всего вышеописанного и мочь спроектировать самому.
Есть фундаментальный труд Building Resilient IP Networks, от Cisco Press. Прикладываю его в зипнике, внутри *.chm
Скажи, это примерно то, что ты хочешь, или нет.

Взят файл отсюда: https://doc.lagout.org/network/Cisco/Cisco Press Collection/

Там есть и другая литература, которая может тебя заинтересовать.
No. 21166    
>>21165
Не совсем то что я хотел, но есть места которые стоит изучить внимательнее потом.
В общем, ещё раз прочитаю по диагонали Таненбаума, а дальше буду разбирать те или иные протоколы, пытаясь понять как они работают. И заимствовать из них необходимые мне вещи
Спасибо за ссылку на сайт, неплохая подборка.
No. 21168    
>>21166
Если найдешь подходящую литературу, пости сюда тоже, чтобы можно было советовать тем, кому тоже интересна эта тема.
Удалить сообщение []
Пароль  
[Mod]