Ычан: [d | b / bro / gf / hr / l / m / med / mi / mu / o / ph / r / s / sci / tran / tu / tv / x | es / vg | au / tr | a / aa / abe / c / fi / jp / rm / tan / to / vn / vo]
[Назад] [Вся нить] [Первые 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 кБ.
  • Ныне 3116 unique user posts. Посмотреть каталог
  • Максимальное количество бампов нити: 500
15241877094.png-(426.24KB, 720×720, junior_developer_popukko.png)
19666
No. 19666    
Здесь можно получить помощь и консультацию по любому языку программирования, в любой сфере разработки. Не важно, программируете ли вы собственного робота, пишете серверную приблуду, интегрируете чужие 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
Если найдешь подходящую литературу, пости сюда тоже, чтобы можно было советовать тем, кому тоже интересна эта тема.
No. 21172    
Существует ли какой-нибудь вменяемый способ борьбы с code duplication в CSS? Постоянно натыкаюсь на что-то вроде этого:
body {color: #024}

#header {border-bottom: 1px solid #024;}
svg|path {fill: #024;}
.invert {background-color: #024;}

…И так далее. А если я захочу сменить этот #024 на какой-нибудь другой цвет — мне придется это делать везде, что совсем не радует.

Есть способ избежать такого средствами самого css? Или только юзать что-то внешнее в качестве макропроцессора?
No. 21173    
>>21172
https://www.w3schools.com/css/css3_variables.asp
No. 21175    
>>21173
Однако, работает. Спасибо!
(смотрит на список новых css-стандартов) Сколько же туда новых фич за последние годы добавили…
No. 21200    
Допустим, мне нужно собрать под 32 разрядную XP программу, в исходных кодах которой заявлены требования к Visual Studio 12. Собрать на той же 32 разрядной XP, на которой и .NET Framework ка то подходящей версии не завезли. Такое в принципе возможно без переделки исходного кода?
No. 21202    
>>21200
> заявлены требования к Visual Studio 12
Вот что это значит?
Солюшен создан в 12 студии и будет открываться только в 12 и выше? Ну, ок. Это не проблема для целевой машины, на которой будет софт работать. Проблема в том, что если этот софт требует фреймворк, то на целевой машине обязан быть .net и вариантов никаких.

Можно задать строгую сборку релизника под x86 (и упрёмся в проблемы, если у других залинкованых проектов/либ сборка под х64/всё).
Можно поиграться с минимальной версией .net'а, в настройках проджекта изменяя версию фрейморка вниз, но даунгрейд рано или поздно потребует переделки кода. Начиная с мелочей типа синтаксического сахара, заканчивая методами / классами, которых в старом фреймворке ещё нет.

Алсо, в XP SP3 (кажется) уже входит вреймворк какой-то.
No. 21203    
>>21202
Подробностей без анализа кода не скажу. Там по заверениям автора кода нужен NF4.6 а в XP 4.0 кажется последний. В любом случае, спасибо за ответ.
No. 21204    
>>21203
В WinXP SP1 максимум это 4.7.2

https://docs.microsoft.com/en-us/dotnet/framework/get-started/system-requirements
No. 21205    
>>21204
Тогда вся проблема только в том как эту вещь откомпилировать под XP из под XP. На самом деле, проблему допустимо свети даже к тому чтобы заставить кого-нибудь другого это сделать.
No. 21206    
154853924920.jpg-(19.17KB, 600×454, c387614cb5522e58355771f53fd4cf20ddffede3.jpg)
21206
>>21205
Однажды после череды бесплодных попыток установить этот ваш NET Framework я на него плюнул, как и на остальные поделия МелкоМягких. Юзайте Джаву, будет вам счастье.
No. 21207    
>>21206
>Джаву
>счастье
Вот на что в шапке и просят не ругаться о вкусовщине, но пусть уж юзают интерпретируемое.
No. 21208    
>>21207
Она хотя бы устанавливается и работает на XP, в отличии от .NET.
No. 21209    
>>21206
>>21207
>>21208
>в шапке просят не ругаться о вкусовщине
Именно. Если вы хотите долго и упорно о чем-то спорить, то создайте для диспутов отдельную "діспутовъ ніть"
No. 21210    
>>21209
То есть, реальный опыт на трёх рабочих машинах уже вкусовщина? Тогда тебе самому следует быть внимательным при копипасте ответов со stackoverflow, а то вдруг там вкусовщина. Или тут есть ещё один человек, использующий XP для чего-то более серьёзного, чем поплакать на свою ушедшую молодость?
No. 21211    
>>21210
>Если вы хотите долго и упорно о чем-то спорить, то создайте для диспутов отдельную "діспутовъ ніть"
No. 21214    
154874170918.jpg-(382.60KB, 1024×768, 11 - 1024x768@32 [SIG7a032aad0db0fd2e24b8a8b568da1.jpg)
21214
>>21211
>Индус, пишущий сейчас обновления, не гарантирует даже их работоспособности. Он уже грохнул летом прошлого года поддержку процов без SSE.
>Совсем никто в 2019-м году не гарантирует работоспособность древнючего .NET Framework-а.
>Если вам надо, чтобы ваша поделка гарантированно запускалась на XP, пишите её или на 8-й Джаве, или используйте инструменты, предоставляемые OpenSource-сообществом.
>Если вам пофапать, так и указывайте, дабы не вводить никого в заблуждение.

Ну и для особо упёртых: https://docs.microsoft.com/en-us/dotnet/framework/install/on-windows-xp
>The .NET Framework 4.7.2 is the latest version.
>It is not supported on Windows XP and Windows Server 2003.
>Not supported, Carl!
No. 21217    
Хочу в разработку 3д игор/программок на с++.
Выучилс синтаксис,прочел книгу по языку,но не могу понять где и как применять все эти массивы,классы и тд.
И так,вопросы:
1.Какие инструменты и литру использовать для разработки игор?
2.Все ли юзают готовые движки и не слишком ли это "не честно",мол ты просто используешь готовый продукт,в который только пихаешь модельки и то что тебе нужно?
3.Насколько сложно написать свой движок?(на будущее)
4.Каким образом сейчас делают всякие декстопные программы?Мы на первом курсе ВУЗа используем на практике С++ Builder и просто перетаскиваем нужные кнопки куда надо и прописываем пару строк кода для них,но все чувствуют что нас наебали,а вот на лекциях простой консольный с++ учим.
5.На чем писать и что использовать и для того и для того?
No. 21219    
>>21217
> 4.Каким образом сейчас делают всякие декстопные программы?Мы на первом курсе ВУЗа используем на практике С++ Builder и просто перетаскиваем нужные кнопки куда надо и прописываем пару строк кода для них,но все чувствуют что нас наебали,а вот на лекциях простой консольный с++ учим.

Мир C# и винды. Можно как бы поделить на десктопный/планшетный софт и веб.

Пилится всё в Visual Studio. Краем уха я слышал про JetBrains Rider, но не знаю, во всех конторах пользовались MSVS.

Десктопный/плашетный софт это, обычно, WinForms (старьё) и WPF.
Базово, бросаешь кнопочки на форму и пишешь, что произойдёт по нажатию.
Если углубляться (в WPF), то там тебе будет MVVM, слои доступа к БД/сервисам/ресурсам/файловой системе, слои абстракций, фабрики, конверторы, стили, шаблоны контролов (чтобы, когда ты в список засунешь class Cat он рисовал котят, а когда class Girl — голых девок) и тонна другого дерьма.

Кратко описать не получится, но здесь всё сложнее, чем button_click() {тонна кода}.

Веб-софт — ASP.Net, MVC / WebForms(дерьмо мамонта), JS. По сути, та же самая херня — кнопочки на страницу, код в контроллере. Если углубляться, то там тоже найдёшь слои абстракций, слои доступа к базам данных.

я не буду говорить про какое-то светлое будущее с кросс-платформенными UI и .net core, это надолго и я там только сервера писал
No. 21220    
>>21217
> 2.Все ли юзают готовые движки и не слишком ли это "не честно",мол ты просто используешь готовый продукт,в который только пихаешь модельки и то что тебе нужно?
Очень многие. Разработка движка это долго, дорого и не каждая компания такое дерьмо потянет.
А если учитывать, что игру хочется продавать на win/xbox/ps/switch/iphone/кофеварка, то цены и время улетают куда-то в бесконечность.
Можно затянуть пояса, вместо еды фотосинтезировать и 15 лет писать свой идеальный движок, который устарел пять лет назад, а потом ещё 5 лет пилить игру, которая не окупится.

Инди / маленькие компании берут Unity, так как лицензия не дорогая, на рынке много специалистов (они тоже не дорогие), да и штука эта более-менее дружелюбная.

> не слишком ли это "не честно"
Тебе шашечки или ехать? Если ты хочешь делать движок, то делай движок. Если хочешь игру, то бери юнити и делай игру.
А если и то, и другое, то ты огромная корпорация и просто выделяешь на это дело пару отделов.
No. 21221    
>>21217
>1.Какие инструменты и литру использовать для разработки игор?

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

В контексте вот этого
>Хочу в разработку 3д игор/программок на с++.
>Выучил синтаксис, прочел книгу по языку, но не могу понять где и как применять все эти массивы,классы и тд.

Можно предположить, что ты хочешь непосредственно разобрать и пощупать 3д-графику, в этом тебе поможет литература из этого ответа: >>/dev/20007

Но также тебя может заинтересовать общая архитектура видеоигр, т.е. как все эти массивы-классы-функции собирать в игру:
http://410chan.org/dev/arch/res/17424.html#17571

>2.Все ли юзают готовые движки
Не все, но многие. Обычно выбор делается индивидуально для каждой игры. Например, Final Fantasy XV сделана на собственном движке Square Enix, LightRoom, а Final Fantasy VII Remake создается на базе "готового" Unreal Engine 4.

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

>3.Насколько сложно написать свой движок? (на будущее)
Зависит от того, для какого типа игр.
Зависит от того, для какого типа графики.
Зависит от того, для того чтобы пользоваться самостоятельно, или для того, чтобы было удобно пользоваться другим.

В зависимости от этих факторов сложность варьируется от "не очень сложно" до "лучше взять готовый"

>5. На чем писать и что использовать и для того и для того?
В контексте игр - расскажи о том, какую игру планируешь создать и я постараюсь помочь тебе определиться с языком и инструментарием.
No. 21222    
Привет.
Подскажите, что учить, чтобы работать удаленно так, чтобы не пришлось ходить на завод.
Какие-то базовые понимания есть, делал довольно серьезные проекты на Ардуине, которые иногда даже продавал за очень хорошие деньги. IoT всякий, простенькая автоматизация вентиляции ангара у майнера-миллионера, мониторинг и управление всяким через интернеты, контроль доступа на проходной по RFID с записью логов и ябедами боссу, всякое такое. Одно время паял американцам ретрочасы разные из советской рассыпухи. Выгодно, но путь в никуда.
Но в общем, я скорее железячник, чем кодер — а это на удаленку не пойдет.
Хочу уехать в теплую лоу-кост страну и работать там удаленно.
Какое направление востребовано при таких вводных?
Я спрашивал у друга $300к/с программиста, работающего по базам данных в каком-то банке, он мне накидал Structure and Interpretation of Computer Programs и книжек по Джаваскрипту, это круто, но с чего начинать — не понятно. Вижу пустоту в IDE, и зависаю.
Так что в нужен курс, который бы меня, раздолбая, держал в графике. Тема на день-два, практика, разбор по частям мною написанного. Структура обучения, в общем.
Спасибо.
No. 21223    
>>21222
Идеальных курсов не существует, поэтому надо пробовать много разных.
Давай начнем с дефолтного места для курсов, www.coursera.org

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

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

Отправные точки для кодинга:
https://www.coursera.org/browse/computer-science/software-development
https://www.coursera.org/browse/computer-science/mobile-and-web-development
https://www.coursera.org/browse/computer-science/algorithms
No. 21224    
>>21223
Спасибо. Сертификат и живой учитель мне не нужен пока, наверное, подошел бы учебник классической формы: теория, примеры, домашка. Ну и ключ ответов в какой-то форме (не знаю, как это может выглядеть для кодинга, может, какая-то интерактивная штука). Тут уже халтурить не выйдет: смотришь аниму и параграф не прошел — сам виноват, садись и тащи.
И главное: какое направление-то копать? Что сейчас наиболее востребовано на рынке труда и нормально оплачиватся? (Исключая элитные темы типа ИИ, теоретической computer science, криптографии и всякого такого).
Хотелось бы начать реально работать и зарабатывать года за три, ну или меньше.
В мечтах выйти на зарплату $1,5-3k. Это не слишком жирная фантазия? (Первое время и за 20 баксов готов работать, конечно же).
No. 21228    
>>21224
>Что сейчас наиболее востребовано на рынке труда и нормально оплачиватся?
Есть вещи суперхайповые, вроде блокчейна, машинного обучения, нейросетей и т.д. Есть вещи куда более казуальные с довольно большим спросом, вроде веб- и мобильной разработки.

Если речь про веб, то можно лезть в устоявшийся мирок бэк-энда с PHP, либо в набирающий обороны JavaScript с NodeJS. Python будет где-то по середине. Если речь про фронт-энд, то само-собой нужны будут всякие HTML/CSS, ну и JavaScript, с фреймворками вроде ReactJS/VueJS.
No. 21229    
154887755537.jpg-(122.33KB, 423×700, 3366282eca8a25be393296633df4bd20d745d092.jpg)
21229
Продолжим парад больных ублюдков.

Насколько больным ублюдком я стану по шкале от 0 до 100, если для сортировки дочерних узлов поддерева DOM напишу на ванильном JS-е quickSort, который будет работать прямо с узлами поддерева? Или лучше будет использовать стандартный подход — сортировать массив, после делать массированную вставку?

З.Ы.: Поддерево отключено, так что просадок производительности от рендера не будет.

>>21217
>Каким образом сейчас делают всякие декстопные программы?
https://habr.com/en/post/348850/ — как-то так, например.
No. 21230    
>>21229
Оказалось, что стандартный подход, т.е. перегнать childNodes в массив, использовать стандартную сортировку и после произвести массированную вставку в родителя, будет на порядок быстрее — DOM, даже отключённый, имеет нехилый performance penalty. А казалось, что быстрее будет как-раз таки на DOM-е.
No. 21231    
15489263188.jpg-(50.58KB, 600×580, a02bca2006d027dc6dc8c8863b1f127e1d236f62.jpg)
21231
Верстал первый раз, пользовался буцтрапом, под конец пришлось даже немного дописать десяток строк жаваскрипта для адаптивности. На это ушло 4 дня по 5 часов в день, а парень с ютуба, у которого я взял макет, управился за 2 часа, естественно без собственного js, при этом говорил не умолкая. Пассажиры и пассажирки, скажите мне, что я не глупый, что это нормально в первый раз, что дальше будет легче. А то я совсем себя ничтожеством чувствую.
No. 21232    
>>21231
Парень с ютуба не монтировал видео?
No. 21233    
>>21231
И парень с ютуба не готовился перед записью?
No. 21234    
>>21231
>Верстал первый раз
У тебя провал производительности всего 10 раз (20 часов vs 2 часа) относительно человека, который явно занимается этим куда дольше тебя. Это не то чтобы неплохо, это более чем хорошо. Ты бы еще полез двигатель автомобиля перебирать первый раз и охуевал почему все долго лел. Опыт заруливает, как ни крути. Ты главное не забрасывай.

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

>пришлось даже немного дописать десяток строк жаваскрипта для адаптивности
А вот это немного зашквар. В идеале адаптивность должна работать без скриптов. Понятно, что это не всегда возможно по тем или иным причинам, но все-таки.
No. 21235    
>>21232
Нет, исправлял ошибки прям во время записи.
>>У тебя провал производительности всего 10 раз (20 часов vs 2 часа) относительно человека, который явно занимается этим куда дольше тебя.
До этого я повторял то, что в видео говорилосьи более-менее объяснялось, а теперь сам с нуля попробовал и обнаружилась слишком большая разница
>10 раз
а ведь это даже не настоящий заказ, это простенький макет одностраничника
No. 21236    
>>21235
Верстка это дело наживное. Чем больше верстаешь, тем лучше верстаешь. Т. е., сначала нужно набить базу в плане использования основных стилей css, основных классов в бутстрапе. причем, как помню, последний бутстрап вообще позволяет писать без css, ибо на многие основные стили стоят классы
И со временем ты уже не будешь заморачиваться по поводу того как реализовать тот или иной блок, а просто будешь его делать.
Я бы советовал не обращать сейчас внимание на скорость, а больше обратить внимание на то, чтобы ты мог сверстать как можно больше и может более сложных элементов без гугления.
No. 21237    
>>21236
>обратить внимание на то, чтобы ты мог сверстать как можно больше и может более сложных элементов без гугления
Не соглашусь. Гугление это важный скилл в процессе обучения. Умение найти решение, документацию, гайд это чуть ли не основное, вместе с усидчивостью, что надо в этом деле.
No. 21238    
>>21237
Ты наверно не так меня понял. Я имею в виду что если, к примеру, надо сверстать типовую вещь, то нужно научиться верстать её просто без гугления(именно типовых вещей, простого и среднего уровня). То есть, это то к чему надо стремиться.
Уметь пользоваться поисковиком это отличная и нужная способность, тут споров нет.
No. 21243    
>>21221
В целом,соглашусь со сказанным выше.Я хочу не готовый продукт,потому что глупо делать готовый продукт не имея почти никаких знаний.Хочу потренироваться,и, для начала, написать какую-то примитивную бродилку по карте без каких-либо плюшек,но со своей картой/модельками,но,наверное,подобное можно сделать банальным безкодовым инструментарием какого-то юнити,верно?Тогда в чем будет обучение?Тогда надо вкатываться в скрипты и прочее?
No. 21244    
Как найти наибольший общий делитель списка на python?
Сразу спасибо.
No. 21245    
>>21230
Любой чих в сторону DOM это ад, т.к. оно тормозное by design. Поэтому надо стараться минимизировать изменения в нем всеми силами. Собственно поэтому большинство современных фреймворков для веб-приложений, вроде VueJS и ReactJS, содержат в себе т.н. "виртуальный DOM". По сути, все изменения заранее считаются в нем, а потом, когда все готово, состояние сравнивается с текущим DOM и синхронизируют одно с другим, избегая кучи изменения DOM'а в процессе. Выигрыш в производительности получается очень большой.
No. 21247    
154915107850.gif-(4.28MB, 460×259, AnotherExhaustedConch-size_restricted.gif)
21247
Есть тут кто-нибудь, кто работает в сфере телекома или хотя бы знаком с DPI? Хочется покурить на тему DPI и того, как там устроены блокировочки. Ну и в теории разобраться.
No. 21248    
154919373066.jpg-(44.91KB, 595×700, 84721051.jpg)
21248
>>21245
Ну, не совсем так. Ад будет, если дерево подключено к документу и каждое изменение браузер будет рендерить. А на неподключенном просадки будут на живых коллекциях, вроде NodeList childNodes, которые себя пересчитывают при каждом swap-е.

Старое правило же: отключаешь поддерево от документа, изменяешь его, подключаешь назад. Или втупую клонируешь поддерево, изменяешь, после подменяешь оригинал на клона.
No. 21249    
>>21243
https://cs50.harvard.edu/games/2019/spring
No. 21251    
Ответьте слабому в теории анону, конструкция "если - то" в декларативных языках является родной концепцией или пришла из императивных?
No. 21256    
>>21251
Это как спрашивать, в какой парадигме программирования запятая появилась.
No. 21257    
154932567953.jpg-(137.77KB, 1509×1920, 847308-milfeulle_sakuraba_149.jpg)
21257
Что лучше, JsRender или Handlebars? Работают по моим тестам одинаково. Второй вроде отлаживать удобнее, но там настолько дубовый синтаксис, что это как-то и не преимущество. У первого провал с 2013-го и пилит он его один, но зато сайт симпатичный.
No. 21258    
>>21256
Кстати, в какой?
No. 21260    
>>21257
Ну смотри, по моему опыту, главное в шаблонизаторах это то, чтобы ты не уперся в их кривизну и ограничения, которые бы заставили тебя сражаться и переписывать логику под их хотели. Так-то handlebars в целом норм, но вроде я пару раз встревал с ним. Советую попробовать хотя бы ради получения опыта с ним.
No. 21261    
15494141458.png-(60.98KB, 381×505, lts-8974c71c.png)
21261
>>21257
Если выбирать — handlebars.Хорошая поддержка, реальное использование (тот же ember), нормальные зависимости. А что не то с синтаксом? Довольно распространенный же.
No. 21264    
>>21260
Ну, там всего-то надо из entity-объектов делать HTML, т.е. всё довольно тупо. Упираюсь я совсем в другие вещи — hashCode (), equals () и конструкторы копирования-то в JS не завезли.

А с чем встревал? Вроде Mustache и Handlebars logic-less шаблонизаторы. Это JsRender, который продолжатель jQuery Templates, с логикой, там вроде проще встрять.

>>21261
>А что не то с синтаксом?
Он осваивается за десять минут, дальше все эти человеческие сообщения об ошибках в общем-то и не нужны становятся.
No. 21306    
>>21257
А почему бы не dot.js? Когда сравнивал, он самый быстрый был, да и возможностей из коробки поболе, плюс не надо исхитряться, когда что-то сильно кастомное требуется сделать.
No. 21307    
>>21306
Сага случайно прилипла.
No. 21308    
>>21306
У них на сайте написано, что
>Latest version: 1.0.3 December 2, 2014
Т.е. он, похоже, немного мёртвый, мертвее даже, чем оригинальный jQuery Template.
No. 21315    
>>21308
Ну и что? Это не настолько сложная библиотека, чтобы нуждаться в бесконечном допиливании. Там кода то 150 строк, все давно доделано.
No. 21316    
>>21315
Это вопрос целей: вам или шашечки, или ехать. Если вам ехать, надо брать то, что едет. У меня задача была накидать шаблоны за десять минут, а не заниматься изучением кишок брошенной авторами библиотеки.
No. 21323    
Не знал, куда написать, написал сюда.
Нубас просит помощи.
Есть 2 скрипта, скрывающих посты без картинок на имаджбордах.

https://pastebin.com/dvLdsa1g
https://pastebin.com/qdATyyed

Они управлялись встроенной на страничке кнопкой, а потом кнопку выпилили. Нагуглил, что можно заставить JS запускаться локально в браузере букмарклетом, помогите отвязать команду от управляющей кнопки, чтоб при вызове скрипта сразу запускалось действие.
No. 21324    
>>21316
Это абсолютно параллельные вещи.
No. 21329    
>>21323
Не особо разбираясь чего там написано, могу посоветовать просто вызвать функции, привязанные к кнопке: напиши их имя со скобочками в коде вне других блоков кода и всё.
No. 21330    
>>21329
ТЫ ГЕНИЙ!!!111 СПАСИБО.

Я в скриптах ни бум бум, но что-то подладить могу, как продвинутый пользователь пк.
Взял хтмл страничку из веб архива с кнопкой, в ней встроенный код скрипта, через ф12 в лисе элемент инспектором нашел функцию кнопки noimg_del_f()
и с помощью букмарклет мейкера caiorss.github.io/bookmarklet-maker/ сделал. РАБОТАЕТ.
Осталось запихнуть букмарклет в аддон лисы кейконфиг и дело сделано.

Сердечно благодарю, 10 дней без кнопки было очень тяжко.

Но больше всего боязно, что афтор сайта выпилит скрытый скрипт насовсем, тогда только запускать локально, а не вызывать функцией, что сделать для меня совсем не по силам.
No. 21332    
>>21329
Рано радовался, метод работает если только кнопка "физически" есть на странице, если ее нет, ничего не происходит.
No. 21334    
>>21332
А кнопка была родная или тоже скриптами добавлялась?
No. 21336    
>>21334
Ну в смысле, статическая?
No. 21338    
155012284664.png-(367.17KB, 589×700, mill007.png)
21338
>>21323
$("table.noimgtable").hide ();

Понапридумывают фигни всякой, потом разобраться не могут.

>>21324
Начните писать свои проекты, набьёте шишков об допил до рабочего состояния брошенных авторами пять лет назад библиотек, в которых «кода то 150 строк, все давно доделано», перестанете писать глупости под сажей.
No. 21339    
>>21338
Занимаюсь этим регулярно. Всё ещё не вижу проблемы воротить нос от того, что, вам говорят, работает, только потому что разработка давно не ведётся.
А если так уж надо за десять минут, то это наверное не на мелкоборду за советом идти, а копипасить из примеров.
No. 21343    
>>21323
>>21332
Если вы просто хотите средство, которое поможет вам на имиджбордах скрывать посты из тредов, и может еще пару других вещей, то вам нужно просто установить и соответственным образом настроить DollChan Extension Tools.

Скачать: https://dscript.me/
Вики: https://github.com/SthephanShinkufag/Dollchan-Extension-Tools/wiki
Руководство по спеллам: https://github.com/SthephanShinkufag/Dollchan-Extension-Tools/wiki/spells-ru

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

>>21338
>>21339
Вот действительно, пора открывать диспутов нить, где уважаемые разработчики смогут друг с другом объясняться.
>Чтобы не сбивать новичков с толку, а также не разбавлять полезную информацию мусором, беспредметные споры типа "какой язык / парадигма / библиотека / етц лучше" здесь запрещены.
No. 21344    
>>21343
Имиджбоды разные бывают, например, danbooru или e-shuushuu. С чего вы взяли, что Степано-скрипт подойдёт для них?
>Вот действительно, пора открывать диспутов нить, где уважаемые разработчики смогут друг с другом объясняться.
Осталось дождаться того героя, кто откроет...

>>21339
>Занимаюсь этим регулярно
Проектами или набиванием шишков? Или и тем, и другим понемногу? ;-)
>Всё ещё не вижу проблемы воротить нос от того, что, вам говорят, работает, только потому что разработка давно не ведётся.
1. У кого-то ещё Win3.11 работает, и что? У кого-то бухгалтерия предприятия на FoxPro крутится. Кто-то Фрю на десктопе пользует. У меня XP стоит. То, что вы — «больной ублюдок», — или имеете производственную необходимость экплуатировать древность ещё не делает автоматически эту древность пригодной для современной разработки.
2. JS — нестабильная технология. Для подобных технологий четыре года — это огромный срок.
3. Продукт, поддержка которого прекращена, вы используете на свой страх и риск, занимаясь поддержкой и решением возникающих проблем самостоятельно.
Так с чего вы вдруг решили, что подобные вещи уместно советовать в треде начинающих, особенно когда о них не спрашивали?
>А если так уж надо за десять минут, то это наверное не на мелкоборду за советом идти, а копипасить из примеров.
А теперь перечитайте исходный вопрос внимательней, перестаньте из слов в моих сообщениях конструировать свои собственные сообщения и на них отвечать.
No. 21345    
>>21344
У меня dot.js на реальном сайте уже больше 3 лет используется, генерирую статику на сервере и динамически рендерю на клиенте. Вообще ни одной проблемы не было ни разу. Использую все что там только есть, от простейшей интерполяции до include-ов и сложных кастомных кусков с логикой на жс. Но ведь осуждать что-то априори гораздо проще, чем разобраться.
No. 21347    
>>21344
>>21345

>Чтобы не сбивать новичков с толку, а также не разбавлять полезную информацию мусором, беспредметные споры типа "какой язык / парадигма / библиотека / етц лучше" здесь запрещены.
No. 21348    
>>21347
>мусором
Это литералли ответ на заданный здесь вопрос, в диалоге с задавшим этот вопрос.
И да, или вы энфорсите правило, или всем пофиг, диалог так не работает.
Алсо алсо, спам одним и тем же сообщением вообще ничего не приносит в тред.
No. 21349    
>>21347
>Чтобы не сбивать новичков с толку
Никто никого не сбивает. Я предложил не забивать гвозди отверткой, а использовать молоток, пусть и немного пыльный, но по-прежнему надежный.
>не разбавлять полезную информацию мусором
Чем ты успешно занимаешься, потому что устраиваешь
>беспредметные споры типа "какой язык / парадигма / библиотека / етц лучше"
которые, как ты верно подметил,
>здесь запрещены.
No. 21356    
>>21348
>>21349

Эта нить существует для помощи начинающим программистам.
Может я не прав, но вы сейчас скорее выясняете отношения друг с другом.

Поскольку вас заинтересовала идея диспутов нити, создал её для вас >>/dev/21353
Check it out.
No. 21359    
155033046823.jpg-(230.30KB, 1280×853, 15494978613301.jpg)
21359
>>19666
Привет. Сам учу js для работы, но хочу в свободное время что-то более низкоуровневое начать ковырять, но, конечно, с пользой.
Насколько, например, изучение Си помогает правильнее писать на других языках и прививает правильные привычки?
Или для этого пойдет что-то более свежее, например Rust или хотя бы java?
Может вообще идея плохая и стоит вариться только в своем выбранном для начала направлении, оставив в стороне прихоти?
No. 21360    
>>21359
>Насколько, например, изучение Си помогает правильнее писать на других языках и прививает правильные привычки?
Не очень, на самом деле. Если хочешь чтобы вот совсем понимать, как оно там внутри устроено, то учи ассемблер. Оно не так сложно, как его малюют в интернетах (сишка, например, сложнее), но интересно и полезно. Если хочешь именно улучшить стиль программирования и прочее такое, то учи лучше окамл/хаскель. Ну, или лисп, если мазохист.
No. 21365    
>>21360
>учи ассемблер
Тут ещё нужно добавить, что у каждой архитектуры свой ассемблер.
No. 21372    
155040500595.jpg-(34.06KB, 560×560, 15387566838440.jpg)
21372
>>21360
>окамл/хаскель
>ассемблер
>лисп
У них же синтаксис совсем уникальный
Как они помогают лучше писать на популярных Си-подобных языках?
No. 21373    
>>21365
Это не так важно. Если учить не для какой-то совсем игрушечной архитектуры, то все ассемблеры будут похожи. Можно будет новый освоить за неделю-другую.
Вообще, если хочется низкоуровщины, то я бы порекомендовал, наверное, пройти nand2tetris, а потом если понравится и захочется что-нибудь побольнее, то митовский курс с edx в трёх частях, Computational Structures, по-моему. Но там прямо хардкорное трахание транзисторов и CMOS элементов.
>>21372
Синтаксис языков к программированию имеет мало отношения. Синтаксис не важен до тех пор, пока он тебе не мешает писать код (как, например, в лиспе или крестах). А изучение новых парадигм полезно. Функциональщина довольно интересна (хотя бы просто как паззл), и ещё и имеет некоторые удобные и дешёвые идиомы, которые можно перетащить в другие языки и слегка облегчить себе жизнь. Ассемблер же помогает тебе осознать, что быстро, а что не очень. Да и ту же сишку учить потом будет гораздо проще, чем с нуля.
Вообще, есть курс на курсере в трёх частях - Programming Languages. Там в первой части sml, во второй - схемка, в третьей - руби. Вот там как раз показывается отношение между разными языками. Рекомендую.
No. 21376    
155053176758.jpg-(415.31KB, 1024×768, tumblr_mjksv2RUeq1r6jc31o1_1280.jpg)
21376
>>21359
Дискуссионный вопрос, на самом деле, даже в преподавательской среде. В общем случае полезно трогать разные вещи, а что из этого можно вынести — сугубо индивидуально. Могу только про свой опыт рассказать.

Получив опыт программирования на языках с ручным управлением памятью ты начнёшь понимать, что значат подобные >>19653 ошибки. Правда окажется, что в данных версиях ведра просто кривой GC, и единственное, что можно сделать, — это выполнить реквест №2 из >>21179 и надеяться, что GC в этом режиме будет выполнять свою работу, но это не точно хотя бы потому, что я не в курсе, как именно сделано фоновое обновление тредов и оно ли мешает GC дефрагментировать память в фоновом режиме. Т.е. это понимание может оказаться бесполезным на практике.

Ты можешь начать экономить вычислительные ресурсы, т.е. бояться делать много (например, в результате попадания в «Тьюрингову яму» https://en.wikipedia.org/wiki/Turing_tarpit ; потом, на какой-нибудь Джаве с кучей удобных фреймворков и библиотек тебя таки прорывает; или не прорывает, если до Джавы не дошел) и периодически лепить оптимизационные велосипеды, которые по факту будут работать на порядки медленней, чем общепринятые для данной среды исполнения решения, поскольку среда до какой-то степени будет виртуализована.

Байтоложство. Это просто немного расширенная арифметика и часть стандартного учебного курса.

Указатели и адресная арифметика. Это полезно, только понаблюдать удастся лишь на игрушечных ЭВМ, вроде AVR.

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

Ассемблер. Сам по себе — это мнемокод для инструкций процессора, он у каждой архитектуры свой, т.е. выучить ассемблер вообще, без привязки к конкретному железу, невозможно, но можно поупражняться в написании транслятора.
Когда-то давным-давно инструкции процессором декодировались аппаратно, сейчас они интерпретируются. В эту кухню производители процессоров никого не посвящают, следовательно понимать, «как оно там всё унутре устроено», ты будешь лишь до той степени, до которой разрешил производитель. Это упрощённо-абстрактный уровень понимания, необходимый для работы с чёрным ящиком, не более того.

Дивайсы. Работа с дивайсами сводится к умению всовывать/высовывать нужные биты в/из нужных регистров в нужное время. Биты, регистры и время у каждого дивайса свои собственные, значит вынести отсюда что-то полезное «в общем» не получится. Взаимодействовать ты будешь с чёрным ящиком через интерфейс программирования, заданный производителем, т.е. получишь упрощённо-абстрактный уровень понимания.

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

Функциональщина... Ну, во-первых, сами математики без каких-либо угрызений совести используют условия и циклы, лол. Вопрос лишь в том, что они описывают, поток данных или поток управления.
Во-вторых, профессора Computer Science обязаны заниматься научной работой чтобы оставаться профессорами, посему часть из них тупо угорает, изобретая за гос.счёт какой-нибудь функциональный VHDL, часть велосипедит йобы времён их молодости на современном железе, а часть под видом научной работы выполняет коммерческий заказ. Иными словами, при пристальном критическом взгляде может оказаться так, что практического применения у этих разработок не было, нет и вообще о нём как-то не думали.
А в-третьих... ну, вместо лапши из if-ов ты научишься лепить лапшу из функций... может быстрее поймёшь, что такое callback-hell, если на JS-е ещё не понял; споткнёшься об идиомы, когда через неделю-две начнёшь их забывать и будет сложно понять и переиспользовать старый код. Т.е. полезно это лишь для расширения кругозора и голову поломать. Ну и это сейчас модно, можешь получить плюс в карму от работодателя, начальства и коллег а можешь схлопотать минус, как слишком умный.
No. 21377    
Не влезло...

>>21373
Неоднозначно, как изучение литературы в школе: вроде полезно, но оно никому само по себе не помогало. С другой стороны, лучше влезть и разочароваться, чем не влезть и всю жизнь себя корить за это.
>nand2tetris
Проблема, с которой пришлось столкнуться на дипломе: есть очень подробная инфа по запилу своей йобы с нуля, и есть очень куцые пользовательские мануалы для дурачков по работе уже запиленных йоб. Можете до посинения «хардкорно трахать транзисторы», но это не поможет вам понять, как работает процессор в вашем ноуте. Скорее вы получите иллюзию начинающего психолога, будто знаете, как работает чёрный ящик на самом деле.
>Ассемблер же помогает тебе осознать, что быстро, а что не очень.
Было верно десять лет назад. Сейчас работать вы будете с так или иначе виртуализованной средой исполнения, в которой рутинные задачи оптимизированны, т.е. имеют относительно этой среды нулевую стоимость.
No. 21378    
>>21376
>Когда-то давным-давно инструкции процессором декодировались аппаратно, сейчас они интерпретируются
Строго говоря, они и сейчас декодируются аппаратно. И интерпретируются они тоже аппаратно. И, собственно, там просто интерпретатор, который реализован в железе, а не софтом. То есть, ты можешь (на жабаскрипте) написать свой интерпретатор х86 кода и получить то самое понимание.
>но это не поможет вам понять, как работает процессор в вашем ноуте
Зависит от понимания понятия "понимать". Вот возьмём условие: if cond then trueBranch else falseBranch. Есть хайлевельное понимание: при выполнении этого выражения, если cond == true, то выполнится trueBranch, иначе выполнится falseBranch. Вот такое теоретическое понимание тебе даст даже nand2tetris. Если же тебя интересует низкий уровень - что там во что транслируется, и куда переходы генерируются, то митовский курс как раз заставляет тебя пилить самый обычный современный ARM-процессор.
>Сейчас работать вы будете с так или иначе виртуализованной средой исполнения
Сишка живее всех живых. Раст почти не умер. Кресты переживают второе рождение. ЛЛВМ на подъёме. Даже этот ваш го пытается что-то там про нативность иногда где-то упоминать. А у тебя весь мир жабой ограничивается.
>будут иметь нулевую стоимость
И тут следует вспомнить майнкрафт, который генерировал полтора гигабайта мусора в секунду. А так же модные нынче штуки уровня input.split(x).map(split(y)).flatten().filter(a).map(b).filter(c).reduce(w). А потом я сижу за таким вот веб-сайтом и удивляюсь, как сраная страничка может отжирать полгига памяти и тормозить.

Тут, на самом деле, и на всё остальное можно ответить, но не буду. И твой подход "пишите лучше круды на пыхе, а всё остальное - оно нинужно и вообще" - это не очень хорошая позиция.
No. 21382    
155075455285.jpg-(24.05KB, 363×239, break11_.jpg)
21382
Стив, нужно мнение твоего коллективного бесознательного. Вот сколько я литературы по программированию не читал, но почти и всегда, везде встречаю мысль о том, что об операторе break вроде как и нужно знать и даже можно применять, но лучше его избегать, в крайнем случае не распространяться о том, что ты его используешь в своем коде. Так что вопрос, Стив - что с ним не так?
No. 21383    
>>21382
Поверье времён Дийкстры и боготворения идей структурированного кода.
На деле команда как команда, как и гото, свитч без него вообще не напишешь.
No. 21384    
>>21382
>Так что вопрос, Стив - что с ним не так?
С ним всё в порядке как и с goto, дело скорее всего, как часто в таких случаях и оказывается, в чрезмерном и не очень целевом пользовании оператором программистами, из-за которого решили, что проще учить программистов оператором не пользоваться, чем объяснять, как правильно им пользоваться. Например в твоём примере с циклом тебе бы сразу посоветовали переписать на while / do while с двумя условиями. Возможно, роль играет еще то, что начинающий программист может и не понимать куда вывалится код из break в каждом конкретном случае

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

Один из подобных случаев с которым столкнулся я, был как твой пример только на стеройдах, там была родительская итерация, и куча вложенных итераций разного уровня с брейками, управлявшими бизнес-логикой. Разбираться что там происходит и как пришлось достаточно долго, потом пришлось понимать, где же и из-за чего происходит указанный баг (в том случае - из-за того что неправильно поставленный брейк происходил не тогда и не туда), и в итоге тот кусок кода был зарефакторен так, чтобы брейки там больше логикой не управляли, и чтобы каждый мог быстро понять условия по которым там что-то срабатывает.
No. 21386    
Вот объясните мне, как всё-таки работает экранирование в r-строках в питоне? И почему оно так странно работает
Пишу:
print(r"Tst: \' ) # \" ) # \\" " ) " ) # \\ ) # \" ) # " ) # " ) # " )
Получаю:
Tst: \' ) # \" ) # \\ )

No. 21387    
>>21382
>Стив - что с ним не так?
Если твой код читаем и понятен и имеет хорошее объяснение в виде комментария, если это он непонятен - ничего.
No. 21388    
https://ideone.com/5CZNdT
Дискасс.
No. 21389    
Знает ли кто-то бесплатные редакторы кода с терминалом по SSH для айпада?
No. 21390    
>>21388
Попробуйте задать вопрос.
No. 21391    
>>21386
На то они и raw строки, что экранирование в них не работает, кроме как для обратного слеша и кавычек (и то только в том случае, если предшествующий backslash сам не заэкранирован), но в любом случае экранирующий обратный слеш остаётся в строке. В твоём примере печатается конкатенация строк
r"Tst: \' ) # \" ) # \\"
и
" ) "
, далее идёт закрывающая скобка вызова print и начинающийся с # комментарий.
> И почему оно так странно работает
Чтобы логика лексического анализатора, разбивающего текст программы на токены, не менялась. Этот компонент знает только, что обратный слеш экранирует следующий символ. Компилятор же выражений в байт-код знает, что всё между первой и последней кавычками в r-строке есть значение этой строки.
No. 21392    
>>21390
https://ideone.com/5CZNdT
Дискасс?
No. 21393    
>>21389
Вроде бы все более или менее кошерное является платным. Там правда цены до 10 баксов обычно, так что хз как это может быть проблемой.
No. 21394    
Как сеньоры одолевают кризис среднего возраста в проф. деятельности?
No. 21395    
>>21391
>конкатенация строк
«Вот оно чё, Михалыч…»
Всё, вопрос снят. Этот момент я проглядел.

Ну, и тогда вдогонку еще вопрос.
Вот пишу я, допустим, плагин на этом питоне к какой-нибудь крите, или там блендеру (для чего мне, собственно, этот язык и понадобился). Написал. А потом понадобилось второй написать.
Так вот — где кошерно располагать общий код, который будут юзать оба плагина?
No. 21396    
>>21395
Умеют ли питонские плагины к этим инструментам устанавливать каким-либо образом сторонние пакеты как зависимости для себя? Если умеют, то можешь свой общий код вынести в отдельный репозиторий, потом выложить его на общий индекс питонских пакетов pypi (напр. так https://dzone.com/articles/executable-package-pip-install ) и после этого импортировать его как зависимость и использовать.
No. 21397    
>>21393
А что из платного самое кошерное для своей цены?
No. 21398    
>>21396
По крайней мере для криты (сейчас наиболее актуальна именно она) — очень не похоже, что там такое api там вообще может быть.
Более того, если она, скажем, идет как appimage, то там внутри свой питон со своим блекджеком, к питону, установленному в системе, никакого отношения не имеющий.
No. 21401    
>>21397
Топ-3 неплохих вариантов за суб 10 баксов, все должны уметь то, что тебе надо, но можешь на всякий случай почитать по них и посмотреть детально перед покупкой:

GoCoEdit: https://itunes.apple.com/us/app/gocoedit-code-text-editor/id869346854#?platform=ipad

Textastic: https://itunes.apple.com/us/app/textastic-code-editor-7/id1049254261

Buffer Editor: https://itunes.apple.com/us/app/buffer-editor-code-editor/id502633252#?platform=ipad

Пафосный вариант за 25 баксов Coda: https://itunes.apple.com/us/app/coda-by-panic/id500906297 - по сути айпад-версия неплохого интегрированного маковского редактора, от известной (в узких кругах) компании, специализирующейся на Mac/iOS софте.
No. 21405    
155118252669.jpg-(49.70KB, 640×480, durr.jpg)
21405
>>21382
break, continue и exit — это implicit goto. Каждый такой бранч добавляет ещё одну ветвь в потоке управления и увеличивает цикломатическую сложность. Это чаще плохо, чем хорошо:
— Цикломатическая сложность: каждая ветвь потока управления — это +1 кейс для тестирования и -1 к пониманию человеком происходящего в коде;
— Множество ветвей — это часто невозможность статического анализа кода сторонними утилитами и невозможность для компилятора оптимизировать полученный в результате преобразований IR-код (обычно это трёхадрессный код вроде Фортрана), т.е. даже если все показания для оптимизации есть, компилятор вынужден оставить этот код без изменений;
— Плохая поддержка во всех ЯП: по-идее такие переходы должны быть именованными, но я не видела ни одного ЯП, где это было бы правилом, а не опцией;
— Преподавательская практика показала, что студентам нельзя давать г-код в качестве примеров, как не надо делать, — они не видят разницы и используют в итоге хороший код вперемешку с плохим;
— Не знаю, куда впихнуть: некоторые ЯП, например Джава или Перл, позволяют делать подобные вещи:

READ_BYTE: {
   //  Читаем байты из Raf-а например.
   if (buffer.length () <= 0) {
      break READ_BYTE;
   }
   //  Делаем что-нибудь с буффером.
}

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

(LABEL:)?
loop
   ...
   exit (LABEL)? (when *condition*)?;
   ...
end loop;

является полностью легитимной. А вот continue легитимной не является ни разу и вообще, за него надо руки отрывать.
No. 21412    
Аноны, а какую IDE лучше использовать для изучения C++: MS Visual Studio или Qt Creator?
No. 21413    
>>21405
>continue легитимной не является ни разу и вообще, за него надо руки отрывать.
Не знаю, что там говорит теория, а, как по мне, так на практике
while(cond) {

    if(cond1) continue;
    if(cond2) continue;
    
    long_main_cicle;
}
выглядит куда более читабельным и ясным для понимания, чем
while(cond) {

    if(!(cond1 || cond2)) {
        long_main_cicle;
    }
}

No. 21414    
>>21413
Вы просто логику размазали соплёй по телу цикла — в глаза бросаться перестало и проблему «запаха» можно не решать. С тем же успехом можно руки не мыть, а просто грязь по штанам размазывать пока заметным быть не перестанет.
No. 21415    
155127925990.jpg-(60.65KB, 485×480, 2I0ilf.jpg)
21415
>>21414
No. 21420    
155134212925.jpg-(66.89KB, 455×370, Cirno_feeds_the_troll.jpg)
21420
>>21414
О, значит само появление таких конструкций для вас пахнет? И исходный пример, разумеется, слишком абстрактен, чтобы можно было продемонстрировать рефакторинг, решавший эту проблему?

Окей, рассмотрим более конкретный пример (этот код на перле можно было бы записать в одну строчку, но в рамках обсуждения распишем полностью) :
while(<>) {

    next if /^foo/;
    s/bar/baz/g;
    print;
}
Как именно вы полагайте нужным этот код рефакторить (оставаясь в рамках языка, переписать на голом sh на предлагать ^_^), и какую задачу такой рефакторинг должен будет решать?
No. 21421    
155135714479.jpg-(46.57KB, 432×432, 62 - 432x432@32 [SIG2bdaa8ee081d9c11124c1f55701b27.jpg)
21421
>>21420
Тут вопрос скорее в том, где вы живёте, в обществе , бочке или пещере. Отсюда и плясать.

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

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

З.Ы.: Тут, кстати, можно задуматься, почему никто не хочет писать на Perl.
No. 21423    
>>21421
>next-ов сюда докидают добрые коллеги
А если писать по второму варианту из >>21413, то там вместо 10-ти некстов появится 10 elsif. Это чем-нибудь лучше?

В любом случае, если код вдруг разросся до таких размеров, значит пора его переделывать под какой-нибудь более адекватный выросшему уровню сложности механизм. Который не имело никакого смысла городить, пока там было три строчки. И к исходному вопросу, что лучше — с кишками или без кишок с continue или без — это отношения не имеет.
No. 21426    
Везде пишут, что ссылками можно оборачивать и строчные, и блочные элементы, но нигде не пишут, что ссылками нельзя оборачивать ссылки, а если всё таки обернуть, то интерпретатор всё равно сделает их детьми одного родителя, а не вложенными один в другой элементами. Удивительно, с каким количеством пользы можно провести два дняблин.
No. 21427    
>>21420
>>21421
Если вы дальше собрались выяснять отношения между собой, переместитесь, пожалуйста, в диспутов нить: >>/dev/21353
No. 21429    
155169798466.jpg-(371.13KB, 1024×768, 34 - 1024x768@32 [SIG32f7df6653c3e885defb9261e501d.jpg)
21429
>>21423
>Это чем-нибудь лучше?
1. Это бросается в глаза, т.е. делается наглядным превращение кода метода в лапшу из if-ов; соответсвенно, решение о том, что с лапшой надо что-то делать принимается раньше. В вашем случае решение примется уже постфактум, когда очередной next if condition_with_side_effects; внедрить не получится.
2. break довольно просто перекладывается на return при выносе кода в отдельный метод. С continue придётся измудрятся, значит ловить дополнительные баги, порождённые самим процессом переноса. Это лишние проблемы, за решение которых не платят.

>И к исходному вопросу, что лучше — с кишками или без кишок с continue или без — это отношения не имеет.
Лучше для кого/чего? Для скорейшего выявления проблем с архитектурой программы и/или пониманием решаемой задачи скрывающие или маскирующие эти проблемы конструкции лучше не использовать — вы только отложите столкновение с основной проблемой и накопите побочных проблем количество достаточное для того, чтобы сделать невозможной дальнейшую разработку.
No. 21447    
>>21083
>диспетчеризацию

[#macro dispatch object]
[#local macroName="render" + object.class.name?split(".")?last /]
[@.vars[macroName] object /]
[/#macro]

и описываем конкретные рендеры как

render ::= "render" TopClassSimpleName ("$" (InnerClassSimpleName))? ;

Скучный этот FreeMarker, без огонька.
No. 21451    
Скажите пожалуйста, как мне изменять количество отображаемых слайдов в совиной карусели в зависимости от ширины экрана? Ну кроме написания нескольких каруселей с разными настройками, которые будут каждая на своём разрешении.
No. 21463    
>break, continue и exit — это implicit goto.
В то время, как это правда, это вполне себе привязанные к определенным структурам языка и областям видимости goto. Я полагаю, тебе известен принцип структурного программирования, блаблабла.
По-моему, иногда скипнуть итерацию - это элегантно, и я не могу придумать альтернатив этому ходу, как и досрочному выходу из цикла break. Каждая итерация может быть дорогой сама по себе, какбе, и предварительное условие для "войти в основной цикл только если то-то и то-то" может быть не готово заранее. Но я не особо над этим задумывался и не особо часто применяю это. Я не помню, чтобы когда-либо писал более одного continue за цикл, мне просто интересно, можно ли его выкинуть в принципе.
>Множество ветвей — это часто невозможность статического анализа кода сторонними утилитами и невозможность для компилятора оптимизировать полученный в результате преобразований IR-код (обычно это трёхадрессный код вроде Фортрана), т.е. даже если все показания для оптимизации есть, компилятор вынужден оставить этот код без изменений;
Отца русской демократии спасут только чистые функции и иммутабельные данные, видимо.
>Плохая поддержка во всех ЯП: по-идее такие переходы должны быть именованными, но я не видела ни одного ЯП, где это было бы правилом, а не опцией;
По чьей идее? По идее структурного программирования тебе следует разрабатывать сверху вниз, и конструкция вида

loop1 start
work on stuff
loop2 start
if condition break loop1 (а не scope-defined break, автоматически относящийся к loop2)
more stuff
loop2 end
stuff
loop1 end

Выглядит как плохоинтерпретируемая моском лапша еще покруче чем if else if else if, или что там тебе снится в твоих страшных снах. Да и вообще, есть ситуации, когда тебе нужно и управлять порядком операций, и вводить условия, то есть if {if {if{ if{}}}}, ну ты понел. Тут goto выглядит даже более элегантным (скажем, ты проверяешь одно и то же условие, и если оно фейл, то последующие действия не имеют смысла, и надо скипнуть весь блок) (а, ну да, можно функцию написать, окей, видимо, этого ты и хочешь, типа call() {if then stuff else return repeat to the victory} - ящитаю тут вопрос в тривиальности кода - лично я допускаю до 4 уровней вложенности if, а если их больше, сэтим надо чтото делать, лол).

Что же до лапши из ифов в принципе - помоему, if else if else if... else нифига не лапша само по себе. Это как бы одно логическое условие дефакто - в этот блок одна точка входа с последовательной проверкой условий. Если же у нас условия на условиях вложены, то таки да, привет, лапша. Но МЕТОДЫ, пффффф? Я вообще не понимаю ооп, ткскзть, в принципе, как идею улучшения над процедурной и структурной парадигмой. Это мы как бы раскромсали глобальный неймспейс на именованные, и сказали, что у нас якобы инкапсуляция и мы вовсе не гоняем глобальную переменную по всем глобальным функциям (что вообще-то не особо комильфо в структурной парадигме в принципе). ДААААА, теперь нам надо написать МЕТОДЫ, чтобы это делать. Это не абстракция, это говно. Возьмите пример с функциональщиков, они вам по хардкору пояснят, что функция может вернуть иное значение, только если ей дать иной ввод. Это не всегда эффективно по памяти, но это круто что для человека, что для компилятора.
No. 21464    
>>21463
Если вы хотите повыяснять отношения с автором того поста, пригласите его в диспутов нить >>/dev/21353
No. 21465    
>>21451
>Скажите пожалуйста, как мне изменять количество отображаемых слайдов в совиной карусели в зависимости от ширины экрана? Ну кроме написания нескольких каруселей с разными настройками, которые будут каждая на своём разрешении.

Очевидно, под совиной каруселью, ты имеешь в виду Owl Carousel.

В инструкции можно видеть такие опции:
https://owlcarousel2.github.io/OwlCarousel2/docs/api-options.html

>items
>The number of items you want to see on the screen

А также
>responsive
>Object containing responsive options.

В первом же демо можно увидеть, как responsive комбинируется с items:
https://owlcarousel2.github.io/OwlCarousel2/demos/basic.html

В опции просто передаётся респонсив блок, а внутри него - количество айтемов под примерную ширину.

    responsive:{
        0:{
            items:1
        },
        600:{
            items:3
        },
        1000:{
            items:5
        }
    }

No. 21467    
>>21465
Ах, так вот как оно должно указываться, а я туда медиа-запросы писал. Мне кажется такое нужно указывать сразу в resonsive, а не в демках.
No. 21468    
>>21429
>break довольно просто перекладывается на return при выносе кода в отдельный метод. С continue придётся измудрятся, значит ловить дополнительные баги, порождённые самим процессом переноса.

Эм… Наоборот же, не?
Если мы переносим содержимое цикла в отдельную функцию (во многих случаях — вполне логичный первый шаг рефакторинга), continue заменяется на return, а вот break — это уже выброс исключения или что-то еще в том же роде…
No. 21469    
>>21468
Если у нас

ourloop{if {continue} if {break}}

трансформируется в

func() {
ourloop{if {<here we need to skip a tick and how do we do it really?>} if {return /execution will be identical to breaking the cycle, provided the cycle is everything the function has, of course/}}
}

то он прав.
Такой вариант - первое, о чем я подумал. У тебя что-то иное на уме?
No. 21470    
А, я понял

outerloop{if {break} if {continue}}

func() {if {//say WHAT?} if {return // we can exit the function and outerloop will skip a beat YAY}}

outerloop {func()}

Тогда да.
Вообще, лол.
>эксепшн
Фи. Пусть функция возвращает разные значения на наши псевдоbreak и псевдоcontinue.

func() {if {return breakval} if {return continueval}}
outerloop {if (func() == breakval) {break} }

Правда, это не устраняет break. Но если написать ЕЩЕ ФУНКЦИЮ снаружи, то можно избавиться от него как показано выше.

func2() {outerloop{if (func() == breakval) {return}}}
No. 21471    
>>21451
Ни в коем случае не надо делать несколько отдельных слайдеров. У Owl карусели встроена специальная опция для поддержки респонсив режимов (как у большинства других толковых). Тебе уже подсказали, но работает это примерно так:

$('.owl-carousel').owlCarousel({

    loop:true,
    margin:10,
    responsiveClass:true,
    responsive:{
        0:{
            items:1,
            nav:true
        },
        600:{
            items:3,
            nav:false
        },
        1000:{
            items:5,
            nav:true,
            loop:false
        }
    }
})


Т.е. в свойстве responsive ты передаешь объект, в котором каждый элемент это настройки адаптивности для конкретного размера. Каждый из объектов в responsive перебивает собой основные глобальные настройки. В примере выше у нас три настройки прописано для размеров 0, 600 и 1000 - которые переопределяют основные настройки (сколько показывать на экране слайдов, выводить ли навигацию, делать ли прокрутку зацикленной и т.д.) для соответствующих разрешений. Значения разрешений здесь подразумевают стартовое значение. Т.е. 0 будет работать от 0 до 599 пикселей ширины, потом включиться 600 который будет работать до 999 пикселей ширины и так далее.
No. 21472    
>>21470
>Фи. Пусть функция возвращает разные значения на наши псевдоbreak и псевдоcontinue.

Так я не случайно написал «выброс исключения или что-то еще в том же роде» ^_^
Возврат кодов значений, это типичнейшее "в том же роде". Не даром их обычно во всех учебниках рядом помещают, в разделе "обработка ошибок".
Можно даже считать, что код возврата/ошибки — это эмуляция обработки исключений "в ручном режиме"…

Оба механизма не слишком-то приятные. И какой из них хуже — зависит от. В данном случае код возврата примелем. Но если придется подниматься на 10 уровней вверх…

>ЕЩЕ ФУНКЦИЮ снаружи
Имеет смысл, если мы хотим как-то менять сущности, по которым производим итерацию. Т.е. — это, скорее всего, уже следующий этап, который может и не наступить.

А вообще, я тут подумал, что такая цепочка if/continue применимая к последовательности — это ярко выраженная попытка реализовать на процедурном (в общем случае) языке декларативную парадигму.
No. 21473    
>>21472
>Но если придется подниматься на 10 уровней вверх…
Мне кажется, если мы допускаем подобный ужс, мы совершили где-то архитектурный просчет. То есть: мы не предусмотрели, что обработка ошибки будет нужна заранее, и теперь мы врубаем топором дополнительный disruptive код, как я это вижу. Возможно, я требую от программиста слишком многого, но не это ли требование к хорошему коду в принципе? Внимательное планирование?
Как дополнительный вариант - вообще, глобальные переменные для этого are fine too. В смысле, они более fine, чем экссепшны, если уж нам так надо. Функциональщики меня бы пристрелили, ну да ладно. Исключателей они бы тоже пристрелили, по крайней мере, за часть вещей, что делается исключениями.
>Имеет смысл, если мы хотим как-то менять сущности, по которым производим итерацию.
В рамках задачи "убрать break/continue потому что мне так захотелось" это всегда имеет смысл, лол. Этим функциям можно будет выдать какие-то значимые имена для того, чтобы легче понимать, что происходит, но вообще, наверно, именно для таких ситуаций удобны анонимные функции с областью видимости исключительно внутри блока.
No. 21474    
>>21473
>если мы допускаем подобный ужс
На два уровня вверх — это тоже уже неприятно, и по-хорошему, от такого тоже надо избавляться.

Я бы, в описанной ситуации, для начала попробовал бы выделить случаи с break в отдельный метод. И тогда код стал бы примерно таким:
while(i.next()) {

    if(i->it_happens()) return;
    i->do_this(i);
}
Хм… здесь у меня, похоже, написался код сильно следующего уровня, когда мы выделили из этой фигни иерархию классов и во всю юзаем виртуальные функции. И это отражает сермяжную правду, поскольку неисключено, что до того порождающий брейки код оделить не получится… Это возвращаясь к вопросу о том, что сложнее обороть при рефакторинге — break или continue ^_^

>глобальные переменные для этого are fine too. В смысле, они более fine, чем экссепшны
Вот уж с этим точно не соглашусь.
Левые сайд-эффекты неизвестно куда — это вообще худшее, что может сделать код. Эксепшен, хотя бы, ведет точно вверх и, поднявшись по цепочке, всегда можно найти, где он ловится…

Кстати, если исходный вариант с continue у нас действительно эмулировал декларативный подход, то сайд-эффектов в нём быть не должно, что бы там не говорил(а) >>21429. И брейков, кстати, тоже.
No. 21476    
>>21473
>>21474

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

Перемещайтесь в диспутов нить >>/dev/21353
No. 21479    
Вроде бы sh можно считать языком программирования? Тогда спрошу здесь.

Какое подмножество регескпов работает в sed?
Я пробовал варианты:
sed "s/^foo=\w+/foo=$bar/" tst.conf

sed "s/^foo=[a-z]+/foo=$bar/" tst.conf
sed "s/^foo=.+/foo=$bar/" tst.conf
Ни один из них не сработал.

Работоспособным оказалось только выражение
sed "/^foo=/c foo=$bar" tst.conf
Что меня совсем не радует. Если бы там было что-то более сложное — такой фокус бы не прошел.

Возможно ли всё таки указать ему что-то, что он понял бы, как "один или более алфавитно-цифровых (или, хотя бы, вообще любых) символов"?
No. 21480    
155238360639.png-(63.49KB, 356×425, 71 - 356x425@32 [SIGa2a9e09e4a236a52dae2560aea8f54.png)
21480
>>21479
POSIX 1003.2 standard regexp. https://www.freebsd.org/cgi/man.cgi?query=re_format&apropos=0&sektion=7&manpath=FreeBSD 6.4-RELEASE&arch=default&format=html
Сокращений нет, “\w” =(ЕМНИП) “[:alpha:]”, “+” = “{1,}”.
Де-факто стандартизации нет. Изучай груду юникс-подобных ОС и выводи подмножество функций, применимое к ним всем. Ну или забей, если скрипт одноразовый, и ботай маны для ОС, под которую делаешь. А лучше брось это дерьмо и возьми Perl — он делает всё тоже самое, что и sed + sh, но хотя бы одинаково во всех системах.
No. 21482    
>>21479
Так, разобрался. Надо писать
sed "s/^foo=\w\+/foo=$bar/" tst.conf

sed "s/^foo=[a-z]\+/foo=$bar/" tst.conf
sed "s/^foo=.\+/foo=$bar/" tst.conf
Еще квотить нужно ( | ). Звездочку — не нужно.
"Это нельзя понять, это можно только запонить" ©

>>21480
Перл дергать в конфигах при загрузке системы — ни разу не комильфо. Так-то конечно, на нём такое любой дурак напишет.
No. 21483    
>>21482
При загрузках системы вообще дёргать что-то, что не находится в /bin и /sbin, противопоказано. Keep it as simple as possible.
No. 21484    
>>21482
>man sed
>-E, -r, --regexp-extended
>use extended regular expressions in the script (for portability use POSIX -E).
Вкратце, extended regexp отличаются как раз некоторыми правилами где (не) надо бэкслешить и расширенным функционалом. Правила для этого написаны хоть на той же википедии. Basic POSIX regexp не поддерживает +, ? и | в принципе, так что лично я бы винил штульмана за такую фигню. GNU is Not Unix, GNU is Not Usable. Когда-то давно они сломали более чем одну дефакто конвенцию, лол.
https://www.gnu.org/software/sed/manual/sed.html#BRE-syntax
>\+
>As *, but matches one or more. It is a GNU extension.
Это значит, что если ты используешь sed, который не поддерживает ERE, тебе не стоит использовать ERE функции в принципе. А если ты их используешь, то обязан предоставить -E ключ (если он поддерживается, лол, и значит то, что мы хотим, ибо хз, что там в легаси может быть чисто в теории), потому что BRE и ERE не совместимы, что очень печально, но такова жызнь.
No. 21486    
155247762159.png-(3.37KB, xss.png)
21486
У меня вопрос по поводу XSS в SVG.
Допустим, я буду загружать потенциально опасную картинку, как
<img src='<img src='data:image/svg+xml;base64,....'/>
Насколько это будет безопасно?
Если такая картинка будет просто на странице, как картинка — скрипты не выполняются.
Если юзер попробует ее открыть — зависит от браузера. Лиса и ее клоны показывают черный экран.

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

P.S. Сейчас попробую переименовать картинку в png и загрузить сюда. Если загрузится — у автобуса, возможно, проблемы с безопасностью.
No. 21487    
>>21486
>xss.png
Поздравляю. Теперь желающие могут попробовать ее открыть в разных браузерах. Если хоть в одном откроет и вылезет скрипт — у автобуса проблемы.

Ванильная кусаба такое не пропускает, между прочим.
No. 21488    
>>21487
У меня нигде нет. Автобус в безопасности?
No. 21490    
>>21488
А кто же его знает. Вообще, чтобы угроза реализовалась, надо, чтобы браузер
  • самостоятельно определил, что это не png, а svg
  • отобразил ее после этого в режиме страницы, т.е. с полными правами.
У меня показывает саму картинку только konqueror. Но он скриптов при этом не выполняет.
Вообще, судя по >>/d/2155, сам Соус это сколько-нибудь значимой угрозой не считает. Наверное, он прав.

>>21486
><img src='<img src='
О, только сейчас внимание обратил. Разумеется, тэг должен повторяться один раз, а не два. Второй — опечатка.
No. 21491    
>>21486
Если сохранить, переименовать в .svg и открыть фаерфоксом, то открывает, но никаких скриптов не выполняет (как я понел, там должен alert вылететь). Правда, это если не отключать носкрипт, лол. Если отключить, то выводит этот alert.
Что вообще за фигня и почему это легально? Картинка у нас теперь активный элемент?
No. 21493    
155252675740.png-(13.53KB, 512×384, 1152716540940.png)
21493
>>21487>>21490
XSS не будет выполняться, потому что данные отдаются как image/png (ибо .png). PHP не будет выполняться, потому что у файла расширение не .php.
No. 21494    
>>21493
>данные отдаются как image/png
А где-нибудь в спеках это четко прописано? Что типа, если svg пришел с левым mime type, то скрипты из него не выполнять?
Я сходу нашел только про запрет на скрипты, если он в тэге img/image.

И, кстати, исходный вопрос из >>21486 остаётся в силе. Если у меня на картинке svg в base64, юзер кликнет по ней "открыть картинку в новой вкладке", а браузер таки откроет — в каком контексте будут выполняться скрипты и какие угрозы от них могут исходить?
No. 21496    
>>21494
Это не в спеках, это в том, какой хэдер отдаст сервер. Апач много не думает: видит .png - значит image/png.

Ну а в целом, если открыть неправильный svg, можно получить много весёлых вещей, да.
No. 21497    
>>21496>>21494
Ну разве что можешь начать читатьспеки апача и его расширение по работе с MIME. И затем переключиться на другие сервера. Но в общем случае ожидай реакцию как здесь.
No. 21498    
>>21496
>Апач много не думает: видит .png - значит image/png.

Это понятно (хотя, опять же, смотря какие модули там стоят).

Меня интересует другое — где-нибудь регламентировано, что должен/может/не имеет права делать браузер, если в заголовке указано, что это png (или еще какая абракадабра), а сам он распознал файл, как svg, и намерен его в таком виде отобразить?
No. 21499    
>>21498
Я сам не знаю, но хочется задать еще один вопрос, в том числе тебе, если ты можешь ответить:
Где-то регламентировано, что в SVG можно встраивать скрипты, и как они будут работать? В смысле, скажем, если оно подгружается со стороннего сайта, как будет работать same origin policy? Как для стороннего сайта или как для same origin? Если сайт послабляет same origin policy, то есть какие-то механизмы отлова активного контента, то есть не SVG, а скриптов, в переданном SVG?
Мне в целом кажется, это более важный XSS-вопрос, если ответ на первый вопрос "как для same origin" или если ответ на второй вопрос "нет, стандартных механизмов нет". Это вопрос о разрешении SVG по белым спискам в принципе.
No. 21502    
>>21499
Я пока из официальных документов по теме нашел только вот это: https://www.w3.org/wiki/SVG_Security

Еще есть Content Security Policy, но, вообще говоря, никто не гарантировал, что любой данный наперёд браузер будет его поддерживать. Скорее наоборот.
Вот небольшой обзор по использованию этого CSP (из него, собственно картинку и взял). Но полагаться на это, боюсь, нельзя.
No. 21503    
>>21502
Спасибо.
>Я пока из официальных документов по теме нашел только вот это
Смотрим:
>Scripts must not be executed.
Лол.
Окей.
У меня правда не новейший фаерфокс. Ты проверял эту картинку как xss.svg (не .png) на последнем фаерфоксе? Просто по прямой ссылке? Это выглядит как баг, о котором следует сообщить прямо в мазилу.
No. 21506    
>>21498
>где-нибудь регламентировано, что должен/может/не имеет права делать браузер
Есть RFC2045, RFC2046, но они не говорят, что браузер ОБЯЗАН следовать уточнённому типу. Хотя исторически это скорее так (https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types). Только в самих описаниях типов встречаются MUST.

SVG есть как в типе image, так и в типе application. Но что та, что та спецификация подразумевает исполняемый код. Решение не выполнять скрипты в первом случае полностью на совести разработчика.

>>21499
https://www.w3.org/TR/SVG11/script.html

>>21502
Расскажи лучше, как ты ссылку заинлайнил.
No. 21507    
>>21503
>>Scripts must not be executed.
Только для тэгов img/image и подгружаемых по ссылкам внутри самого svg ресурсов. Погоди, или ты это и спрашивал? Если так, то я сторомозил…

Заметим, что если эту же самую картинку, которую мы передали через img, юзер откроет в соседнем окне — все скрипты будут выполнены. Так что как защиту этот факт использовать нельзя.

>Ты проверял эту картинку как xss.svg (не .png) на последнем фаерфоксе?
Если просто ее открыть — то скрипт и должен выполниться.
Если же ты про тест https://svg.digi.ninja/svg — то имеющиеся у меня firefox, palemoon, chromium и konqueror его проходят.
No. 21508    
>>21503
>Это выглядит как баг, о котором следует сообщить прямо в мазилу.
Но просто по прямой ссылке - это одно, а must not be executed - это про встраивание через img.
No. 21513    
>>21506
>как ты ссылку заинлайнил.
Вот так
No. 21514    
>>21507
>>21508
>Только для тэгов img/image и подгружаемых по ссылкам внутри самого svg ресурсов.
А, ну да, я уже перечитал это.
Что вообще за фигня. Отключить SVG в панде тоже нельзя уже с 2011.
Как бы всегда можно использовать носкрипт на недоверенных ресурсах, но если ты разрешаешь js, то SVG - потенциально опасный элемент, и я этого не знал. Окей.
No. 21516    
>>21506
>There are security concerns as some MIME types represent executable content.
>Решение не выполнять скрипты в первом случае полностью на совести разработчика.
Ясно. Тогда ждем виндузятников, пусть смотрят, как ведёт себя картинка из >>21486 в разных IE (и что там у них еще).
No. 21517    
>>21516
Последние IE перешли на блинк, нет?
No. 21518    
>>21517
А предпоследние?
No. 21520    
>>21498
> Меня интересует другое — где-нибудь регламентировано, что должен/может/не имеет права делать браузер, если в заголовке указано, что это png (или еще какая абракадабра), а сам он распознал файл, как svg, и намерен его в таком виде отобразить?
Раньше спецификация HTTP/1.1 прямо запрещала попытки угадывания типа в том случае, если в заголовке уже указан тип, но потом решили https://trac.ietf.org/trac/httpbis/ticket/155 в новом RFC7231 просто задокументировать существующее положение дел.
No. 21521    
>>21518
Легаси в винде - скорее легаси, а не что-то еще. Пальцем в небо - подавляющее большинство пользователей IE на венде будет пользоваться последним IE либо Microsoft Edge (кстати, я лопухнулся, это Edge на блинке, а IE нет), потому что устанавливать альтернативные версии будет нетривиально.
Это не повод игнорировать странных вендоводов, конечно, но тут я как бы намекаю на подавляющую долю хрома и blink-based браузеров на рынке в принципе. Мы находимся в стадии, когда доля фаерфокс выглядит как 10% и продолжает падать, и это наиболее конкурентоспособный гуглу продукт.
No. 21522    
>>21521
Хм. Да, наверное так.
Действительно, рассчитывать, что кто-то захочет причинить вред сайту таким странным способом — загрузив картинку в расчете на то, что кто-то откроет ее в совсем уж экзотическом браузере — довольно странно. Своими руками этот гипотетический диверсант мог бы причинить куда больше вреда.

Так что, видимо, осталось убедиться, что последний IE с ней не безобразит — и можно вопрос о потенциальном XSS на автобусе закрывать.
No. 21523    
>>21522
Веселье в том, что дырка, теоретически, куда больше.
No. 21524    
>>21522
Вообще, я попытался нагуглить статистику использования браузеров по отдельным версиям IE, но это оказалось довольно нетривиально, так что я ниасилил и решил забить. Полагаю, есть некий заметный процент (отличный от десятой доли процента) каких-то специфических версий IE в использовании, но опять же, IE сейчас далеко не хозяин ситуации.

>>21523
?
No. 21544    
>>21524
Детали тут: https://bitbucket.org/Therapont/fbe-410/pull-requests/31/imagemagick-and-ffmpeg-image-conversions/diff
No. 21565    
155303413476.jpg-(55.26KB, 480×512, 61 - 480x512@32 [SIG269682e6a79b145381f7fcd93857b5.jpg)
21565
У меня очередной невероятно глупый вопрос!

Есть маленькое предприятие, у него есть производство и несколько складов, в том числе, склад покупных деталей и склад готовой продукции. У этого предприятия есть некая информационная SQL-based кто бы мог подумать! система.

Так вот, первый вопрос: Как сделать журнал перемещения материальных ценностей между подразделениями? Пока мне в голову приходит сделать: 1) справочник подразделений, в журнале указывать пары («Подразделение», «Номер приходного/расходного документа») и извлекать их отдельными запросами — это, однако, требует статической (т.е. самодельной) диспетчеризации; 2) joined класс приходных/расходных документов и все подвиды описать в дочерних классах — это хорошо перекладывается на ООП без самодельных костылей, но увеличивает количество записей в базе в d раз, где d — глубина иерархии наследования.
Второй вопрос: Как наладить архивирование: а) пар поступление/реализация на складах; б) заказов на производстве; в) журнальных записей?
No. 21567    
>>21565
А зарплатой ты с тредом тоже поделишься?
No. 21568    
>>21567
Я и сама не откажусь от зарплаты за отвлечённое теоретизирование.
No. 21574    
>>21565
Наследование родило больше проблем, чем решило.

Решение с продакшена.
Таблица "Журнал транзакций"
Откуда (FK), Куда (FK), Что (FK, Штуки), Сколько, Идиницы измерения (FK на Справочник единиц измерения), Как (FK, тип транзакции), Бумажка (FK, Документ транзакций)

Таблица "Справочник типов транзакций"
Таблица "Справочник единиц измерения"
Таблица "Документ транзакций"
Простые и плоские штуки.

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

Какие проблемы у нас вызвал этот подход:
Непонятно, что делать с величинами, когда на складе лежит 10 коробок, передают на производство 500 метров, а обратно на склад возвращается 200 квадратных метров. Так как менеджер умеет говорить только "Да", то расходы на диспетчеризацию возросли и таблица склада стала костылём, где есть столбцы на каждый тип измерения и много-много конвертирования при каждой транзакции.

> Как наладить архивирование
Это уже вопрос бизнеса.
Там каждый квартал проводилась инвентаризация (списание по утере, восстановление из излишков, восстановление утрат, реструктуризация единиц) и всё, что было до даты инвентаризации отправляется в отдельную БД Архива (на каждый квартал своя таблица журнала). Раз в год делался дамп слишком старых архивных данных и они удалялись из таблиц Архива.
No. 21584    
>>21574
>Наследование родило больше проблем, чем решило.
Пока из проблем вижу только те, что имеются в стратегиях JOINED и SINGLE_TABLE, и некоторый гемор с написанием откровенно одинаковых классов для каждого подразделения. С другой стороны вижу довольно простой журнал, в котором необходимый минимум инфы.

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

>Непонятно, что делать с величинами, когда на складе лежит 10 коробок, передают на производство 500 метров, а обратно на склад возвращается 200 квадратных метров.
А единицы измерения — это разве не свойство того, что перемещают? По идее возврат должны оформлять с приходного документа. Или как, взяли комплект, вернули некомплект?

>всё, что было до даты инвентаризации отправляется в отдельную БД Архива (на каждый квартал своя таблица журнала)
Т.е. по технической части — сделай копию базы, обзови её «Архив».
No. 21620    
>>21584
>Пока из проблем вижу только те, что имеются в стратегиях
¯\_(ツ)_/¯
Собери митинг и пусть команда с умным видом постоит у доски и порисует всякое.
Может найдутся подводные камни.

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

> коль скоро организация разрастётся,
Бестолково закладываться на глобальный рост.
Как пример, те три месяца проектирования и шесть месяцев разработки сервиса, способного выдержать 300к в секунду лучше было бы потратить на фичи, тестирование и всё такое. А потом допиливать куски по требованиям бизнеса. А то можно оказаться с серваком, который держит 150к в секунду при пиковой нагрузке 2 в час.

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

> Или как, взяли комплект, вернули некомплект?
Разным производствам и разным залам удобней вести учёт расхода в своих единицах, потому, что они привыкли. Менеджер сказал, что не проблема, пусть ведут, как удобно, умный компудахтер всё посчитает.

> Т.е. по технической части — сделай копию базы, обзови её «Архив».
Несовсем. Да, Архив это отдельная БД, доступная только для чтения. На случай, когда надо заниматься расследованиями и искать перерасход самоклеющейся плёнки.
По сравнению с основной базой там нет многих штук.
No. 21621    
>>21620
“What one fool can do, another can.” :-D Конструкторская деятельность по Анохину — итеративный процесс бесконечного сближения желаемого и действительного. За желаемым лучше ходить к заказчику, за действительным — шерстить StackOverflow с sql.ru и подглядывать за конкурентами. В процессе не одну доску измалюешь прежде чем родишь что-то, что можно начинать кодировать. Напрягать людей, которые просто вне контекста этих итераций, не очень-то и умно, если только на рандом не уповаешь.
>Бестолково закладываться на глобальный рост.
Ну, рост, он не только внешними причинами вызывается, но и внутренними. Сам бизнес может усложниться, потребуется отражать новые методы. Чтобы допиливать куски по требованиям надо сначала в архитектуру заложить модульность, а в модель — некоторую избыточность. Так что я пока в этом напралении двигаюсь, по перформансу смотрю только, чтобы откровенной лажи, вроде трёхста джойнов на полиморфный запрос, не было.
>У тебя, кстати, коробочное решение или внутренняя разработка?
Внутренняя. Небольшая организация, не особенно много документов, много специфики и сложных отношений с поставщиками и заказчиками, т.е. декларативно модель не описывается хотя, как конечный автомат — вполне себе, лол.
>По сравнению с основной базой там нет многих штук.
It depends... Надо, например, смотреть, что закупалось под аналогичные заказы, т.е. по архиву нужен поиск. Справочники можно не архивировать, да, при условии, что из них ничего не удаляют.
No. 21629    
Вопрос администрации: бамп-лимиты для закрепленных нитей уже отменили, или всё же нужно создать новую?
No. 21630    
>>21629
Я не администрация, но считаю, что стоит осуществлять ротацию тредов, чтобы не плодить толстенных левиафанов, подвешивающих браузеры на пару секунд. Это даже не пожелание: я считаю, что это хорошая практика.
No. 21632    
155336830169.jpg-(411.95KB, 1024×768, 23 - 1024x768@32 [SIGd3950905b9bc5d03a231cce1f60b5.jpg)
21632
>>21630
Хорошей практикой считается не навешивать на страницу дурацких скриптов и CSS3-стилей, которым в обязательном порядке нужен аппаратный рендеринг. А то потом проблемы тормозов начинают решаться в духе Гашека и того еврея из анекдота, который ищет там, где светло. А если говорить про скорость открытия страничек, то 0.5-2 секунды в зависимости от провайдера, фазы Луны и погоды в Зимбабве идёт только коннект и с этим вы ничего не сделаете.
Дурацких скриптов здесь нет, тяжелых стилей по умолчанию тоже нет.

Со стороны узабилити неплохо было бы иметь пагинацию, поскольку на мобилах скролл не через жопу сделан только в “Baidu Browser”. Однако большинство мобильных пользователей использует сторонний фронтенд костыль, который, очевидно, пагинацию и скролл может сделать самостоятельно.
Так что это тоже не проблема.

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

>подвешивающих браузеры на пару секунд
Как там в 2005-м?
No. 21633    
>>21632
У меня заметна разница между открытием всего треда, и "последних пятидесяти сообщений". Коннект тут ни при чем, браузер делает то же самое для страниц из file://
Ну, может не на пару секунд, но для тысячи сообщений эта разница будет еще больше. Мне не особо важны детали (хотя я бы съежил максимум постов в треде до сотни), важен принцип - недопущение тяжелых страниц.
Еще в принципе возможен вариант когда кто-то будет грузить страницу в мегабайт-два через, скажем, полумегабайтный коннект. Этого тоже неплохо бы избегать.
No. 21634    
>>21633
А какие-нибудь объективные причины, оправдывающие существование принципа будут? Со стороны даже самодельного фронтенда, который этот форум рисует в браузере, я причин не нахожу. Может вы перепутали форум с чятиком?
No. 21635    
>>21634
Непонятно сравнение с форумом, потому что на форумах обычно всегда есть пагинация по количеству постов гораздо меньшему, чем 500.
No. 21636    
>>21635
Борда — это, внезапно, древовидный форум. Форумы были распространены в эпоху диалапа, поэтому пагинация на них была жизненно необходима. Необходима не от того, что браузер давился тяжелыми документами, а потому, что страницы генерировались динамически, ибо имели для отображения динамический контент, и давился ими сервер, иными словами, GET-запрос имел значительную стоимость. Собственно проблема актуальна и по сей день. Статика в свою очередь отдаётся бесплатно, стоимость её генерации включена в POST-запрос, городить пагинацию особой нужды не стало. Были, однако, диалап, помегабайтная тарификация, тормозные машины и кривые браузеры. Сейчас и этого нет. Смысл тогда заниматься оптимизацией несуществующих проблем? Ну и форум — не чятик, — мгновенно грузиться топик и не должен.
No. 21637    
>>21635
>Сейчас и этого нет.
Вообще говоря, есть.
>Ну и форум — не чятик, — мгновенно грузиться топик и не должен.
Может, и не должен, но чем быстрее, тем лучше.

Я не вижу смысла в этом разговоре, если ты не создатель этих тредов.
No. 21639    
>>21629
Какой-то дурацкий вопрос в контексте треда № 4.
No. 21640    
>>21636
>Статика
Модерка через динамику делается.
No. 21643    
Cделали новую нить >>/dev/21641
Закрепите её вместо этой, пожалуйста.
No. 21645    
>>21637
>Вообще говоря, есть
На уровне HTML4 и CSS2 таки нет. Странички отображаются одинаково, костылей и хаков под каждый браузер нет.
>Может, и не должен, но чем быстрее, тем лучше.
«Что русскому хорошо, то немцу — смерть.» Кому лучше и для чего?
>Я не вижу смысла в этом разговоре, если ты не создатель этих тредов.
Его и не было изначально. Вы, однако, продолжаете со мной спорить, значит вкладываете в разговор какой-то свой локальный смысл; иначе занялись бы более осмысленными делами вместо того, чтобы обсуждать, как распорядиться тем, что нам обоим не принадлежит.
Удалить сообщение []
Пароль  
[Mod]