Ычан: [d | au / b / bro / hr / l / m / mi / mu / o / ph / r / s / sci / tran / tu / tv / vg / x | a / aa / c / fi / jp / rm / tan / to / vn / vo]
[Назад]
junior_developer_aoba.png - (578.70KB, 720×720)
23830
No. 23830  
Здесь можно получить помощь и консультацию по любому языку программирования, в любой сфере разработки. Не важно, программируете ли вы собственного робота, пишете серверную приблуду, интегрируете чужие API, ковыряете игру, или пытаетесь сделать сайт на Wordpress - если аноним что-то об этом знает, он обязательно поможет.

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

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

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

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

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

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

Если здесь поселится достаточное количество программистов на одном языке / одной сферы, можно будет их выделить в отдельную нить, а в этой оставить на неё ссылку.
По мере поступления вопросов можно составлять 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
http://410chan.org/dev/arch/res/19666.html
http://410chan.org/dev/arch/res/21641.html

Прошлая нить пока тонет тут: >>21641
No. 23831  
>>23830
В процессе систематизация прошлой нити для пополнения базы знаний.
No. 23833  
С настройкой апача с mod_rewrite сюда или нет? Буду считать, что сюда:
RewriteCond %{HTTP_USER_AGENT} MJ12bot

RewriteRule . - [F,L]
(и еще десяток правил для разных ботов)
Может кто-нибудь объяснить, почему оно работает на уровне .htaccess, но не работает, когда я пробую прописать это на уровне <Directory> внутри виртуалхоста?
И до кучи — можно как-нибудь сделать, чтобы эта нечисть, заодно, не мусорила в лог? (Или это плохая идея?)
No. 23834  
>>23833
>Может кто-нибудь объяснить, почему оно работает на уровне .htaccess, но не работает, когда я пробую прописать это на уровне <Directory> внутри виртуалхоста?

Должно работать и там, и там, но:
>Note that rewrite configurations are not inherited by virtual hosts. This means that you need to have a RewriteEngine on directive for each virtual host in which you wish to use rewrite rules.

Ты же не забыл там написать RewriteEngine On?
Можешь показать примерно, как выглядит твой <Directory>?
No. 23835  
>>23831
Пока из прошлой нити собралось вот такое:

>Хочу понять как git делает свой .gitignore
>>22204

>Хочу передавать бинарные данные через вебсокеты
>>22371

>Что лучше для начинающего, Ruby или Python?
>>22386
>>22387

>Хочу реализовать кастомные счетчики для постов в Wordpress
>>22448
>>22451

>Хочу сделать toggle-меню по клику средствами CSS
>>22467

>Как правильно разделять логику модели и логику контроллера?
>>22481
>>22487
>>22488

>Хочу хешировать пароли
>>22492

>Зачем в C++ имена классов начинать с _ ?
>>22520
>>22521

>Хочу разместить изображение поверх градиента средствами CSS
>>23006

>Хочу онлайн Matlab без регистрации и смс
>>23170

>Где узнать, поддерживает ли Node.js конкретную фичу JS?
>>23470

>Поясните про специализацию шаблонов в C++
>>23616

>Вылетает android-приложение при попытке открыть ScrollView
>>23717
>>23721

>Хочу Jupyter в облаке
>>23822
No. 23836  
>>23834
>RewriteEngine On?
Написал, разумеется.

>Можешь показать примерно, как выглядит твой <Directory>?
Да, собственно, стандартно выглядит. Я пробовал разные варианты, от <Directory /srw/www/> (это даже попытался впихнуть прямо в apache2.conf — тоже никакого эффекта), до <Directory /srw/www/user/html/site/> (что, вроде, эквивалентно указанию .htaccess, но всё равно не работает). Никакого эффекта ни на одном уровне нет. Внутри иногда был только этот список, иногда — еще директивы вроде AllowOverride All и т.д., которые, по идее, влиять не должны.

Ну и еще, там далее по тексту конфига была <Directory /srw/www/user/html/site/subfolder/>, в которой свои правила для mod_rewrite (со своим RewriteEngine On). Не могут они конфликтовать? Не должны ведь вроде, по крайней мере за пределами той папки…
No. 23837  
>>23836
>srw
srv то есть
И нет, в конфиге этой опечатки нет, сейчас специально проверил
No. 23839  
>>23836
>>23837

Вот тут расписано про наследование.
https://stackoverflow.com/a/34614298
Там где
>WARNING: mod_rewrite inheritance
Вроде описана прямо твоя ситуация.

>If you are switching between testing .htaccess and <Directory> containers in your server config and wondering why the directives in the <Directory> container aren't doing anything then it's possible that the mod_rewrite directives in .htaccess are completely overriding the directives in the <Directory> container. This is the default behaviour. .htaccess directives will take priority and parent directives are not inherited by default.

И решение:

>Generally, if you are using <Directory> containers in the server config then you don't need .htaccess, so the easiest option is to simply disable them in your <Directory> container with AllowOverride None

Скажи, поможет оно, или нет.

>Ну и еще, там далее по тексту конфига была <Directory /srw/www/user/html/site/subfolder/>, в которой свои правила для mod_rewrite (со своим RewriteEngine On). Не могут они конфликтовать?
Тут быстрее всего отключить и проверить, поменялось ли что.
No. 23844  
Ещё интересные сервисы без регистраций.
https://codesandbox.io — аналог jsfiddle для веб-разработки, но вроде гораздо более фичастый. Сборки бундлером, коллекция быстрых шаблонов, npm модули, fullscreen preview на отдельном поддомене.

https://repl.it — много языков. Выделяют поддомены.
https://docs.repl.it/repls/web-hosting
https://docs.repl.it/repls/http-servers

https://runkit.com/home — тоже что-то вроде repl/notebook, но только для nodejs. Из фич: мгновенный импорт любого npm-пакета, визуализация возвращаемых данных, и такое
> Create an API without worrying about servers or configuration. Just export a endpoint function and your notebook automatically becomes an HTTPS endpoint, accessible from any app.

https://book.klipse.tech — встраиваемые (embed) repl для своих веб-страниц для нескольких языков.
No. 23845  
Освоил верстку и замкнулся

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

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

Главная цель была зарабатывать хотя бы тысяч 5 в месяц с фриланса.. Но как побывал там, понял, что верстать все умеют, и нужно cms изучать..

Пытаюсь читать js по Кантору, получается нормально.
Но дело в том, что это очень нудно и мозг не позволяет заниматься этим делом даже 1 час без перерывов.
А некоторые занимаются этим по 6+ часов? или они просто шутят..

Пытаюсь изучать CMS системы, (wp, opencart) - идет легко, но не верится что там происходит всё путем готовых решений и что я смогу выполнить какой-то заказ с моими знаниями(да нужно практиковаться..)

Как можно вкатиться в фриланс если навыки есть, но заявку грамотно составить не можешь?
Выходит заказ с типичным названием "Создать интернет магазин" с очень маленьким и кратким описанием, на которое невозможно ответить в стиле:
post: задача заказчика
reply: интерес к его задаче и несколько предложений решения его задачи
как я должен красиво ответить, чтобы меня выбрали из 50 кабанчиков?
Да нужны отзывы чтобы тебе доверяли, но легких заказов за отзыв пока не видел..

Я хотел выполнять заказы на фрилансе(не получается) попутно изучая js.
Но все мои планы рухнули, на чем стоит сфокусироваться?
Подскажите пожалуйста
No. 23846  
>>23845
Вот-вот, у меня такой же вопрос.
No. 23847  
>>23846
Привет, конкурент
No. 23848  
>>23845 Портфолио сделай, как вариант. А на каких ты биржах (или где еще) пытаешься брать заказы
No. 23849  
>>23848
На рунет биржах
Портфолио есть, но в нем 2 работы
Заказчик которому нужен хороший исполнитель "с опытом работы" в основном не на портфолио смотрит, а на отзывы + портфолио у меня есть
Вообще зря я разнылся.. нужно искать легенькие заказ и пытаться работать пока за отзывы
No. 23850  
>>23845
No. 23851  
>>23845
Вёрстка это только начало. Дальше либо бекенд, либо фронтенд.
No. 23852  
>>23851
Да я понял, я же расписал все, вы не прочли?
>Я хотел выполнять заказы на фрилансе(не получается) попутно изучая js.
Но все мои планы рухнули, на чем стоит сфокусироваться?
No. 23853  
>>23852
>на чем стоит сфокусироваться?
Ну раз начал js учить, то продолжай. Всё равно он почти везде нужен.
Вёрстка + js + фреймворки = фронтенд.

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

Алсо, не рекомендую вылизывать заказчиков - фриланс это сотрудничество, а не прислуживание. По своему небольшому опыту советую.
No. 23857  
>>23851
А по бэкенду вообще много спроса на фрилансеров? Если да, то советую вкатываться в него: по моему опыту, люди от фронтенда довольно быстро выгорают из-за обилия и частоты смены фреймворков. Сам когда-то проработал два года фуллстеком и в итоге перекатился в бэкенд, лишь бы больше фронт не видеть.
No. 23858  
>>23857
>по бэкенду вообще много спроса на фрилансеров?
Точно не смогу сказать - не хочу уподобляться мартышкам, которые не в курсе дел на другом фронте разработки и делают неправильные выводы в стиле "да %технологию\язык нейм% уже никто не использует 100 лет".
Скорее всего, у всех есть заказы и двигай туда не где больше денег, а где конкретно тебе интереснее.

>люди от фронтенда довольно быстро выгорают из-за обилия и частоты смены фреймворков
Фронтенд это сейчас хайп и туда лезет очень много посторонних людей, которые естественно выгорают, просто потому, что не задроты.
Да и где там обилие фреймворков? Самые на слуху - React, Vue да Ангуляр, а Node.js это таки уже бекенд.
Это много что ли? Выучи один-два и работай на нём.
No. 23859  
>>23858
Ну, у меня когда-то знатно подгорело от чуть ли не ежемесячных изменений: переезд на бауэр, с него на галп, потом с первого ангуляра на второй, потом с js на coffee script. А проект при этом еле двигался.
Не думаю, что разработка не мое, в бэкенде я себя чувствую довольно хорошо. Возможно, что просто к фронтенду нужно отдельную предрасположенность иметь.
No. 23860  
>>23859
Ну у тебя тут только один фреймворк по факту. Кофе скрипт это диалект js, галп это просто библиотека, как и бовер. Такого везде много.

>в бэкенде я себя чувствую довольно хорошо
На чём пишешь?
No. 23862  
>>23860
Java / C++
Сложно объяснить. Меня смущает ментальность, когда люди стремятся впихнуть в проект новую технологию, не доделав задачу, которая нужна бизнесу.
No. 23863  
>>23860
Сразу дополню, что сталкивался с таким в основном фронтенде (и до сих пор сталкиваюсь, когда пересекаюсь по работе). Отсюда и отторжение.
No. 23864  
>>23860
>по факту
По факту есть множество модных способов сделать одно и то же. И каждые полгода мода меняется.
No. 23866  
Чиочан, выручай.
Есть бинарное дерево, просто из указателей, без данных.
struct TreeNode {
struct TreeNode leftChild;
struct TreeNode
rightChild;
}
Надо найти в нем самый длинный путь от корня к листу и вернуть его. Причем таких путей может быть несколько, вернуть надо все.
Как к этому приступиться - вообще непонятно.
No. 23868  
>>23866
Ключевые слова: обход дерева.
Конкретно в твоём случае, для решения в лоб, проще всего будет рекурсивно найти самые длинные пути из левого и правого поддеревьев и прибавить их к текущему узлу.
Если не справишься, пиши, распишу псевдокодом.
No. 23869  
>>23868
>прибавить их к текущему пути
Ещё не проснулся, поправил.
No. 23870  
>>23853
>Пытаюсь читать js по Кантору, получается нормально.
Но дело в том, что это очень нудно и мозг не позволяет заниматься этим делом даже 1 час без перерывов.
А некоторые занимаются этим по 6+ часов? или они просто шутят..

Что посоветуете по этому поводу?
No. 23871  
>>23870
Заниматься с перерывами. Ну или непросто читать, а предложенные примеры решать - очень хорошо разбавляет обучение.
Я так и делал.
No. 23872  
>>23870
>или они просто шутят
Не шутят.
No. 23874  
Еще такой вопрос аноны
Читаю Кантора и прям вообще некоторые моменты запомнить не могу
В новых темах упоминаются моменты которые я не смог запомнить и идет уже полное непонимание
Поможет ли тут метод конспектирования в тетрадь?
No. 23875  
>>23870

Какие уж тут шутки, тут как раз именно такое дело где просто необходимо позадротствовать. Эффект от кантора гарантирован
No. 23876  
>>23874
Поможет, конечно
No. 23877  
>>23868
Распиши, пожалуйста.
No. 23879  
>>23874
>Поможет ли тут метод конспектирования в тетрадь?
Выпиши определения и повторяй пару дней подряд - должно запомнится.
No. 23884  
В общем, с путями в дереве у меня самого так ничего не получилось.
Создал сбалансированное дерево поиска, напечатал. Как найти все пути с максимальной глубиной (да и вообще все пути) - никак не соображу.

Идеоне что-то чудит, поэтому код прямо сюда выложу

void tree_longest_paths() {

int n;
std::cout << "Enter number of nodes (no more that 100): ";
std::cin >> n;
std::cout << std::endl;

if (n < 0 ) {
n = abs(n);
}

if (n > 100 ){
n = 100;
}

int arr = new int[n];

for (size_t i = 0; i < n; i++) {
arr[i] = i;
}

TreeNodeMod
head = CreateBalancedTree(arr, 0, n-1);

PrintTreeTraversal(head);
std::cout << std::endl;
PrintTreeByLevel(head);

}

size_t TreeHeight(TreeNodeMod node) {

if (node == nullptr) {
return 0;
}
else
{
int lheight = TreeHeight(node->leftChild);
int rheight = TreeHeight(node->rightChild);

if (lheight > rheight)
return(lheight + 1);
else
return(rheight + 1);
}

}

TreeNodeMod
MakeNode(int x) {
TreeNodeMod n = new TreeNodeMod;
n->data = x;
n->leftChild = nullptr;
n->rightChild = nullptr;
return n;
}

TreeNodeMod
CreateBalancedTree(int arr[], int start, int end) {

if (arr == nullptr) {
return nullptr;
}

if (end < start) {
return nullptr;
}

int mid = (start + end) / 2;

TreeNodeMod n = MakeNode(arr[mid]);

n->leftChild = CreateBalancedTree(arr, start, mid - 1);
n->rightChild = CreateBalancedTree(arr, mid + 1, end);

return n;
}

void PrintTreeTraversal(TreeNodeMod
n) {

if (n == nullptr) {
return;
}

PrintTreeTraversal(n->leftChild);
std::cout << n->data << " ";
PrintTreeTraversal(n->rightChild);

}

void PrintTreeByLevel(TreeNodeMod n) {

int h = TreeHeight(n);

auto prnt = [](auto&& self, TreeNodeMod
n, int lvl){
if (n == nullptr) {
return;
}
if (lvl == 1) {
std::cout << n->data << " ";
}
else {
if (lvl > 1) {
self(self, n->leftChild, lvl-1);
self(self, n->rightChild, lvl-1);
}
}
};

for (int i = 1; i < h+1; i++) {
prnt(prnt, n, i);
std::cout << std::endl;
}

}
No. 23885  
>>23884
Читать не буду, извини, как-то ты всё усложняешь.
У тебя рекурсивно заданная структура данных, соответственно, работать с ней проще всего рекурсивно: и для просто обхода, и для подсчета путей, итд.
Вот, посмотри: https://pastebin.com/y0V2Zbwm
Пишу с микроволновки, поэтому возможно оно не компилируется и требует доработки напильником.
No. 23886  
>>23839
>Скажи, поможет оно, или нет.
(Долго тормозил, но, на случай, если это кому-то еще может понадобится, всё же отвечу): Помогло добавление в корневой .htassecc директивы
RewriteOptions InheritBefore
Этого хватило, чтобы всё, что установлено в конфигах апача, стало наследоваться.

Кроме того, приятная новость: большинство этих ботов таки слушаются robots.txt. Так что включение их и в него тоже сильно уменьшило размер логов. Только, разумеется, нужно его разрешение прописать в mod_revrite до всего этого черного списка.
No. 23887  
Эх аноны..
2 дня подряд человек с 10 отзывами забирает 2 раза подряд легких заказа на 50$ по верстке, как же у меня припекает и плакать хочется одновременно
No. 23888  
>>23887

Иди в бэкэнд, там софтскилз всё таки поменьше нужны, раз такие проблемы возникают.
No. 23889  
>>23887
Надо с заказчиком уметь работать.

>>23888
А на бэкенде они к тебе с поклоном приходить чтоле будут? Та же история как и везде.
No. 23890  
>>23887
У меня один перец увёл заказ на 200$ пока я дуплился.
Всех денег не заработаешь.
No. 23891  
>>23889

Поменьше, всё таки. Специфика такова, что требует некоторой квалификации, даже если ты просто вордпресс разворачиваешь.
No. 23892  
>>23886
Спасибо что отписал, добавлю в базу знаний.
No. 23893  
Господа фрилансеры, именно те, что начинающие, а что вас толкает на работу во фрилансе? Почему не удалёнка / работа в офисе?
No. 23894  
>>23891
Для вордпресса вообще никакой квалификации не надо - там всё мышкой кликается и это не бэкенд совсем.
Алсо как ты без софтскиллзов будешь заказ обсуждать? Как раз тут именно фронтенд легче - чёткие визуальные правки, без возни с бизнес-логикой и невнятными хотелками в которые ещё въехать надо. Поэтому на фронт все и валят.

>>23893
Я и не собирался только фрилансом кормиться. Сейчас активно подыскиваю офис - мне опыт нужен нормальный, а на фрилансе с этим опытом беда - там только наработанный использовать если.
А так - просто попробовал.
No. 23895  
>>23894
Вот я как раз хотел начинающим посоветовать не ходить во фриланс.
Нормальную культуру работы и софт скиллы (а они, внезапно, чуть ли не самое важное), можно прокачать только работая в команде. Причём лучше всего физически, а не на удаленке. Технические скиллы так тоже гораздо быстрее вырастут.
No. 23896  
>>23894

Я слишком коротко ответил, отсюда и недопонимание.
С заказчиком надо уметь работать разумеется, но могу сказать что при должной квалификации как-то это проще, чисто субъективно. А то что хайп на фронт, ну да, сражаются потом между собой свежеиспеченные реакт программисты в алом от их крови океане рунет бирж.
Сиэмэска то сама может и не бэк, но все что сложнее визитки уже требует его в том или ином виде, ну и посадки её соответственно. Как то так.
No. 23897  
>>23894
>Для вордпресса вообще никакой квалификации не надо - там всё мышкой кликается
Не всё, если без плагинов всё это дело организовывать, то писать таки нужно.
>Алсо как ты без софтскиллзов будешь заказ обсуждать?
Наставника бы найти, только где?
>>23893
>Господа фрилансеры, именно те, что начинающие, а что вас толкает на работу во фрилансе? Почему не удалёнка / работа в офисе?
А у меня в городе нетути никаких офисов, а для удалёнки, я подозреваю, документы всё равно нужно ехать офрмлять за тыщщу километров.
No. 23898  
>>23897
Подписанный договор можно заказным письмом отправить же. Зачем ехать?
No. 23899  
>>23893 Разные всякие бывают жизненные ситуации и конкретные обстоятельства, так то да конечно офис/удаленка лучше для по всем параметрам.
No. 23900  
>>23893

//Для развития по всем параметрам
No. 23902  
>>23885
Подумал и сам решил, вот так получилось

std::vector<std::vector<int>> FindPaths(TreeNodeMod node) {

std::vector<std::vector<int>> paths;
size_t h = TreeHeight(node);
std::vector<int> cur_path;
cur_path.reserve(h);

FindPathHelper(node, paths, cur_path, h);

return paths;
}

void FindPathHelper(TreeNodeMod
node, std::vector<std::vector<int>> & paths, std::vector<int> cur_path, size_t path_len_max) {

// Если узел пуст, то ничего не делать
if (node == nullptr) {
return;
}

// Добавить текущий узел в путь
cur_path.push_back(node->data);

// Если узел - лист, то проверить длину пути и запомнить путь, если он максимальной длины
if (node->rightChild == nullptr && node->leftChild == nullptr) {

if (cur_path.size() == path_len_max) {
paths.push_back(cur_path);
}

}
else {
// Если узел не лист, то рекурсивно обойти левое и правое поддерево
FindPathHelper(node->leftChild, paths, cur_path, path_len_max);
FindPathHelper(node->rightChild, paths, cur_path, path_len_max);

}

}
No. 23907  
Аноны, подскажите как работает данная функция
Я инстинктивно понимаю что она делает(принимает массив объектов со свойством age и сортирует их по нему), но логически не могу понять эту стрелочную функцию
как .sort располагает элементы после этой функции в правильном порядке(понятно что функция отсортировала всё, но не понятно как она работает..)?

function sortByAge(arr) {
arr.sort((a, b) => a.age > b.age ? 1 : -1);
}

let vasya = { name: "Вася", age: 25 };
let petya = { name: "Петя", age: 30 };
let masha = { name: "Маша", age: 28 };

let arr = [ vasya, petya, masha ];

sortByAge(arr);

// теперь отсортировано: [vasya, masha, petya]
alert(arr[0].name); // Вася
alert(arr[1].name); // Маша
alert(arr[2].name); // Петя
No. 23908  
>>23907

function sortByAge(arr) { 
   arr.sort ((a, b) => a.age > b.age ? 1 : -1); 
}

семантически эквивалентно

function sortByAge(arr) { 
   arr.sort (function (a, b) {
      return (a.age > b.age ? 1 : -1);
   }); 
}

Замечу, что с такой операцией сравнения сортировка получается нестабильной.
No. 23909  
>>23907
Скорее всего, sort использует сортировку Хоара. Для сортировки последовательности достаточно знать, больше ли a, чем b. Характеристику чего по сути и возвращает передаваемая в sort фукция. Функция sort не располагает элементы после этой стрелочной функции-сравнителя compare, а использует её для сортировки, полагая, что a > b равносильно compare(a, b) > 0, a = b равносильно compare(a, b) = 0, a < b равносильно compare(a, b) < 0.

Например, для целых чисел compare(a, b) можно задать как дельту a - b, которой достаточно для определения того, находятся ли a и b в отношении >, <, =.
No. 23910  
>>23907
Можешь почитать тут объяснение
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
No. 23911  
Как решать проблему обобщенной или специфической реализации?
Постоянно возникает желание написать более общий код, который бы теоретически мог работать и с тем, и с этим, когда надо решить на самом деле одну конкретную задачу в конкретных условиях.
No. 23912  
>>23911
Само по себе то что ты делаешь не плохо, пишешь сразу с прицелом на расширение, что помогает избежать боли в будущем. Главное не делать это всё во вред, правило правой руки тут такое:

1. Сделать более широкое решение займет в 3 раза больше времени, чем более узкое?

2. Сделать более широкое решение значит сделать структуру классов в 3 раза сложнее для понимания, чем при более узком решении?

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

https://en.wikipedia.org/wiki/KISS_principle

Естественно, это всё не применимо к компонентам, которые изначально пишутся, чтобы их потом расширяли (всякие общие стратегии, и т.д)
No. 23914  
>>23909
Спасиб, именно из-за сортировки Хоара затупил
No. 23915  
Осспаде, как же у меня припекает от баз данных.
Даже не от самих баз, а от вывода ошибок. Почему они их выводят в наиболее нечитаемом виде? Почему не написать прямо - ошибка в такой-то строке(sql-строка) - в таком-то слове.
Зачем писать что-то вроде:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (
bla-bla
.
bla-bla
, CONSTRAINT
bla-bla-bla-bla-bla-bla
FOREIGN KEY (
bla-bla
) REFERENCES
bla-bla
(
bla-bla
))
Сам текст максимально размыт - никакой конкретики. Весь гугл забит поиском по этим ошибкам и народ раздаёт советы один другого костыльней.

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

Вот всегда с этого стул горит. Когда этот бред закончится вообще?
No. 23916  
>>23915
Понимаю боль, но помочь поменять вывод ошибок от СУБД мы не можем. А для простого обсуждения этой несправедливости лучше использовать диспутов нить >>21353
No. 23917  
>>23915
Целиком и полностью зависит от субд.

>>23916
Хватит мусорить в треде.
No. 23921  
Насколько безопасно использование $_SERVER["SERVER_NAME"]? Скажем, для установки кук?

Мне попадались сообщения, что его якобы бы можно подменить, если в запросе будет один адрес, а в заголовке host — другой. Однако, сколько я не пытался такое слать — запрос всегда приходил на тот сайт, который указан в host. И на значение SERVER_NAME это никак не влияло.

Так возможна ли подмена? Или это что-то очень древнее и в современных серверах эта уязвимость давно закрыта?
No. 23923  
>>23921
Подмена возможна, самый простой пример:

1. делаешь файл override_test.php со следующим содержимым (при заходе тебе будет показывать содержимое HTTP_HOST:

<?php 

var_dump($_SERVER['HTTP_HOST']);

?>


2. используешь cURL чтобы сделать к нему запрос следующего вида:


curl -H "Host: 410chan.org" http://www.website.com/override_test.php


И вуаля - ты видишь 410й вместо своего HTTP_POST
No. 23924  
>>23923
>curl -H "Host: 410chan.org" http://www.website.com/override_test.php
>И вуаля - ты видишь 410й вместо своего HTTP_POST
…И я вместо своего www.website.com стучусь на 410chan.org и получаю закономерное 404. Во всяком случае, с теми хостам, с которыми я это делал, у меня результат был именно таким.
No. 23925  
>>23924
Значит зависит от неких условий, я перепроверил перед тем как написать, если что: у меня на двух хостах все отработало
No. 23926  
>>23921
>запрос всегда приходил на тот сайт, который указан в host
С чего бы ему так делать, DNS и IP не читают HTTP-заголовки.
No. 23930  
>>23925
>>23926
Мда, пробовал в разных вариантах
curl -H "Host: domen2.org" http://domen1.org/test.php
Результаты, в порядке убывания:
• Запрос приходил по адресу http://domen2.org/test.php — почти всегда
• DNS error 1001 — при использовании https.
• Запрос переходил к хосту по умолчанию, с закономерным 404 естественно.

Последнее происходило лишь в том случае, если сервер не мог найти domen2.org в списке виртуальных хостов, и запрос не проходил по пути через какие-либо клоудфлары и иже с ними.
Т.е. в это случае, по всей видимости, действительно имеется такая уязвимость. Но вероятность такого события, т.е. того, что на сервере не используется VirtualHost, а хост по умолчанию содержит какую-то актуальную информацию, а не заглушку апача, мне кажется, близка к нулю.
No. 23931  
>>23930
А если вспомнить >>23921
>Скажем, для установки кук
То функция setcookie работает, как я понял, так: если передать ей левый домен, то она вернёт true и реально попытается послать заголовок. Однако фактически — в большинстве браузеров никакая кука установлена не будет.
В некоторых особо экзотических, вроде konqueror — будет, то для того домена, которому принадлежала страница, а не для левого.

Так что, даже если домен будет подменён, то, мне кажется, куку таким образом украсть нельзя. Это так? Или я что-то упускаю?
No. 23932  
>>23930
> вероятность такого события, т.е. того, что на сервере не используется VirtualHost, а хост по умолчанию содержит какую-то актуальную информацию, а не заглушку апача, мне кажется, близка к нулю
Буквально вчера столкнулся с таким ресурсом лол
No. 23933  
>>23923
>>23930
>>23923
>>23932

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

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

Поправьте если что не так.
No. 23935  
https://prettier.io/playground/ - форматирование кода онлайн.
No. 23938  
Есть mingw 8.1.0. Есть куча cpp файлов. Каждый из них конпелируется вот так
g++ src\a.cpp -c -m64 -fassociative-math -ffast-math -fomit-frame-pointer -fwhole-program -o out\a.o
Потом они все вместе линкуются вот так
g++ out\a.o ...ещё-~20-файлов... -shared -Llib-paths -lmore-libs -o xxx.dll
Проблема: если добавить в аргументы компилятору -O3, то он создаёт очень маленькие объектники, в которых больше половины функций просто нет. Если компилировать без оптимизаций, то получается undefined reference вообще на всё, кроме функций объявленных внутри самого файла. Экспериментальным путём было выяснено, что порядок объектных файлов в командной строке не важен.
Что вообще происходит и как заставить это работать?
No. 23941  
>>23938
А заголовки там есть?
No. 23942  
>>23938
> -fwhole-program
> Потом они все вместе линкуются
Возможно, стоит читать руководство к компилятору, прежде чем добавлять все подряд ключи оптимизации. Если тебе нужна глобальная оптимизация, то пользуйся -flto.
No. 23943  
>>23941
Конечно есть. Проблемы на этапе линковки, если я не очень понятно написал.
>>23942
На лто линкер ругается, что ему требуется плагин или что-то такое. Ключи оптимизации я просто скопировал из одного моего проекта. То, что компилятор сделать не может, он игнорирует. Если собирать одной командой все файлы, то результат не меняется. Так что твой комментарий в лучшем случае бесполезен.
No. 23944  
>>23943
> На лто линкер ругается, что ему требуется плагин или что-то такое.
Если под Win64 в используемой тобой версии toolchain нет поддержки LTO, то либо откажись от использования -fwhole-program, либо расставь
__attribute__ ((externally_visible))
для всех переменных и функций, которые должны быть видимы за пределами одной единицы трансляции.
> То, что компилятор сделать не может, он игнорирует.
Ты используешь не просто оптимизации, а ключи, меняющие семантику.
> Если собирать одной командой все файлы, то результат не меняется.
С какой стати ему меняться, если не передаётся ключ -combine?
No. 23945  
>>23944
Спасибо, действительно.
Качество опенсурсных прыщеподелок не перестаёт меня удивлять.
No. 23948  
Пусть у меня имеется некоторый контент, который загружен на сайт пользователями и может, by design, содержать любой js. Подчеркиваю, не внедренной по недосмотру, а именно загруженный совершенно легально динамической контент, который, тем не менее, не может считаться надежным.

Существует ли способ как-то запустить его в изолированной песочнице, чтобы он не смог взаимодействовать со всем остальным контентом сайта, куками, etc. и, соответственно, не представлял опасности?
Желательно также, чтобы друг с другом они тоже взаимодействовать не могли, но при этом могли бы хранить свои (изолированные от всего остального) данные на стороне пользователя.

Вариант выделять для каждого такого скрипта/страницы отдельный домен был бы идеален, но практически, боюсь, не реализуем. Возможно ли как-то реализовать такое же поведение в пределах одного домена?
No. 23949  
>>23948
Идеальное для тебя решение (тем более нативное для веба) это iframe - изолировано все отлично
No. 23950  
>>23948
>>23949
Кроме шуток, iframe действительно считается хорошим решением для изолирования / сендбоксинга скриптов, т.к. он ничего не знает о родительской, и уж тем более соседней DOM-модели и доступа к ним у него нет. Также у iframe при выставленном аттрибуте sandbox свой, уникальный origin, что отрезает same-origin доступ, пока его не разрешат. Подробнее про сендбоксинг iframe можно почитать тут: https://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/

Чтобы запретить iframe всё, ему достаточно указать пустой аттрибут sandbox: https://www.w3schools.com/tags/att_iframe_sandbox.asp
Дальше можно дать ему разрешений по необходимости.
В твоем случае, надо разрешить ему запускать в себе скрипты:
>sandbox="allow-scripts"

По идее это должно тебе подойти.
No. 23951  
>>23948
Может быть пригодится. А может быть и нет.
https://neil.fraser.name/software/JS-Interpreter/docs.html
No. 23953  
>>23951
Мне еще ссылки на google caja попадались >_<

>>23949
>>23950
Спасибо.
Один вопрос — что у них на счет кук, хранилища и т.д? Изолированы? Или нет вообще?

И еще, сейчас в голову пришло, независимо от предыдущего. Если в таком iframe загрузить, внезапно, swf — это как-нибудь повысит его безопасность? Или флеш и так не имеет доступа к внешнему контенту?
No. 23955  
>>23953
>Один вопрос — что у них на счет кук, хранилища и т.д? Изолированы? Или нет вообще?
Изолированы.

>The framed document is loaded into a unique origin, which means that all same-origin checks will fail; unique origins match no other origins ever, not even themselves. Among other impacts, this means that the document has no access to data stored in any origin’s cookies or any other storage mechanisms (DOM storage, Indexed DB, etc.).
No. 23976  
Начинающий питонист в треде.

Спустя почти год изучения кодинга я осознаю, что нихрена не понимаю. Как сделать так, чтобы тебя взяли на работу джуниором? Как выжить на фрилансе? Что делать с т.н. софт скиллами? Зачем мне эти джанги с реактами и sql запросами, если всё это негде применить? Мне кажется я что-то делаю не так. Помоги разобраться, Стив, я в тупике и недоумении.

Вышка была благополучно брошена несколько лет назад, с того времени занимался всякой фигнёй с целью не умереть с голоду. Теперь пытаюсь всё пофиксить.
No. 23977  
>>23976
Я не питонист, но мне кажется я могу дать некоторые рекомендации без питон-специфики.

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

> Как выжить на фрилансе?
Однозначного ответа на этот вопрос, мне кажется, не существует. Но чуть выше по нити ребята-фрилансеры обсуждали свои будни, начиная с >>23845

> Что делать с т.н. софт скиллами?
Говорить всем, что они у тебя есть. На данный момент это buzzword.

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

Надеюсь, хоть чем-то полезная информация.
No. 23978  
>>23977
>В моём опыте, для любого прохождения собеседования, безосновательно стека, надо специально затачиваться проходить собеседования, как будто экзамены сдаешь. Я массово гуглю вопросы на собеседования, читаю их, компилирую важные, гуглю ответы, пишу шпаргалки, потом по ним повторяю. Если нужно в конкретную компанию, пытаюсь узнать о чем там любят спрашивать. Но в целом, в каждый конкретный год есть пересекающиеся у всех "любимые" категории вопросов, поэтому простой поиск + систематизация помогают.

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

>Здесь нужен комментарий питониста по конкретным фреймворкам

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

Проблема в том, что практически сейчас уже нужно бабло на текущие расходы и я ваще не знаю что делать. -_-
Капча советует учить пыху.
No. 23980  
>>23978
>Кроме того изучить новый это дело нескольких дней упорного задротства, другое дело, что задротство без ясной цели слегка контрпродуктивное занятие.
Поэтому твоей целью должно быть быстрая наработка практического опыта. Выбираешь идею простенького пэт-проекта, который изначально уйдет в стол, и который можно напилить быстро (потому, что он не будет единственным), и в рамках его создания выучить пару новых вещей. Например, делаешь какой-то примитивный сервис отзывов, где у тебя будет бэк-энд в виде простенького CRUD с дэшбордом, который работать с фронт-эндом (на условном ReactJS) через REST API. Делаешь пару таких вещей и у тебя сходу больше опыта будет, чем у большинства тех, кто идет устраиваться джуном.

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

>Фриланса просто побаиваюсь из-за огромной конкуренции и опять таки малого опыта.
Фриланса не надо бояться, ты просто должен понимать, что в нижнем ценовом сегменте будут не самые приятные проекты и заказчики, но тебе они нужны просто чтобы встать на ноги и набиться реального опыта.
No. 23981  
>>23978
>Потыкав несколько вакансий в hh я с 'радостью' обнаружил, что почти все мои отклики либо проигнорированы, либо на них отвечено отказом.
Хорошо, а как ты откликался на вакансии? Цепляй сюда то, что ты им писал.
No. 23982  
>>23978
> Потыкав несколько вакансий в hh я с 'радостью' обнаружил, что почти все мои отклики либо проигнорированы, либо на них отвечено отказом.
> проигнорированы
Туда где "проигнорированы" имеет смысл всегда позвонить-написать, сказать вот мол я такой-то такой-то, откликался на вашу вакансию, на всякий случай хотел уточнить что вы получили моё резюме и всё такое. Это сразу даст понять что ты не спам-бот который всем письма рассылает, а человек, и вероятность того что твоё резюме действительно теперь посмотрят и может даже позовут сильно повысится. На HR в компаниях валится огромный поток писем, и большая часть игнорируется просто потому что столько читать они не могут, поэтому обратив на себя внимание ты скорее всего попадешь в поле зрения.

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

Ну и к самому больному
> нужно бабло на текущие расходы и я ваще не знаю что делать. -_-
Собственно, /dev/ решений здесь несколько:
1. Идешь на фрилансерские площадки (западные, это важно) и хватаешь любую вещь которая позволяет тебе получить денег на текущие расходы, и которую ты можешь сделать, хоть шаблоны для ворда собрать.
2. Идешь работать начинающим админом, что даст денег на расходы, и относительно освободит руки для обучения (когда всё настроишь и оно будет просто работать)
3. Пытаешься устроиться вместо разработчика в QA, т.к. понимания софта у тебя есть достаточно, а требования там ниже. Потом в той же конторе переходишь в разработчики, потом переходишь в разработчики в другую контору.

Комментируя >>23980 могу сказать, что если работать "в стол" не хочется, можно делать вещи благотворительно, чтобы и польза, и опыт (и потом можно проекты в свой профиль заносить полноправно), это не подходит в ситуации "надо деньги на расходы", но на всякий случай вот: http://tinyurl.com/gsz9lte Они там закрылись логин-экраном, но ты ж два элемента со страницы сможешь удалить через дев-тулзы, верно? А если заинтересует, зарегистрируешься уже
No. 23983  
1512675133163651320.jpg - (469.05KB, 1262×1874)
23983
>>23980

>Поэтому твоей целью должно быть быстрая наработка практического опыта. Выбираешь идею простенького пэт-проекта, который изначально уйдет в стол, и который можно напилить быстро (потому, что он не будет единственным), и в рамках его создания выучить пару новых вещей. Например, делаешь какой-то примитивный сервис отзывов, где у тебя будет бэк-энд в виде простенького CRUD с дэшбордом, который работать с фронт-эндом (на условном ReactJS) через REST API. Делаешь пару таких вещей и у тебя сходу больше опыта будет, чем у большинства тех, кто идет устраиваться джуном.

Хм, по правде уже есть один пэт-проект на aiohttp и react для постинга embedded видюшек. Правда не вполне допилен, но успешно крутится на моей тестовой vps-ке

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

Да, понимаю, я бы так и пилил что-то своё, возможно постепенно запилил бы что-то крупное даже, но в мой манямирок неумолимо вторгается реальность -_-

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

Ну это понятно, буду что-то придумывать. А какие площадки предпочтительнее? Зарегистрировался вот на freelancer com, fl и weblancer, они норм? Или ещё на что-то стоит обратить внимание?

>>23981
>Хорошо, а как ты откликался на вакансии? Цепляй сюда то, что ты им писал.

По правде откликался без сопроводительного письма. Возможно в этом и проблема. Написал в резюме, что python junior developer, в ключевых технологиях перечислил те языки и фреймворки, с которыми сталкивался (собственно python это django, flask и aiohttp, javascript - react, html/css, базы данных postgresql и redis), а в описании профиля написал что-то вроде 'имею опыт разработки на питоне 1 год, ищу работу для применения имеющихся навыков и получения новых, могу учиться сам и работать с документацией', только на английском.
Говорят люди там чуть ли не поэмы сочиняют, а поэт из меня такой себе -_-

>>23982
>Туда где "проигнорированы" имеет смысл всегда позвонить-написать, сказать вот мол я такой-то такой-то, откликался на вашу вакансию, на всякий случай хотел уточнить что вы получили моё резюме и всё такое. Это сразу даст понять что ты не спам-бот который всем письма рассылает, а человек, и вероятность того что твоё резюме действительно теперь посмотрят и может даже позовут сильно повысится. На HR в компаниях валится огромный поток писем, и большая часть игнорируется просто потому что столько читать они не могут, поэтому обратив на себя внимание ты скорее всего попадешь в поле зрения.

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

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

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

>Идешь работать начинающим админом, что даст денег на расходы, и относительно освободит руки для обучения (когда всё настроишь и оно будет просто работать)
Это где нужно настраивать nginx/apache, ставить базы данных и прочие подобные приблуды? Глянем.

Пачули для всех неравнодушных
No. 23984  
>>23983
> Зарегистрировался вот на freelancer com, fl и weblancer, они норм?
Upwork всему голова имхо
No. 23985  
>>23984
По своему опыту так считаешь? Чем выигрывает в сравнении с другими?
No. 23986  
>>23985
Количество заказов, активность, адекватность и денежность заказов, по крайней мере в сегменте веб-разработке именно так.
No. 23992  
Зарегистрировался я значит на upwork, и вижу:
>Your account has been suspended. Please contact customer support.
А в my requests вот такое:
>I have reviewed all aspects of your account, and unfortunately, you are violating Upwork policies. I regret to inform you that based on that review, it has been determined that your account will not be restored. The policy violation(s) in question lead to this final decision. Please be advised that we may not respond to further requests regarding this issue.

Это шо? Это как? Просто банят без объяснения причин? Какой-то беспредел.
No. 23994  
>>23992 Ну, йокосо. Свяжись с ними, подтверждать будешь видеосеансом. Это нормальная практика там.
No. 23998  
>>23992
Ты не из Крыма случаем?
No. 23999  
>>23994
Причина оказалась в том, что я долбоёб.
При создании аккаунта я криво заполнил кое-какие данные и не нашёл ничего лучше, чем удалить аккаунт и создать новый с тем же почтовым адресом. А потом нагуглил, что за это дают вечный бан. Всегда знал, что стрелять себе в ногу это моё призвание.
No. 24000  
shitsumon.png - (56.77KB, 609×259)
24000
Вот такой вот вопрос: Если между MSB и LSB впихнуть дополнительный байт, то какими тремя буквами он будет называться?
No. 24008  
Хочу написать на перле бо на баше скрипт, который делает следующее:
Рекурсивный обход, подсчёт числа различных суффиксов файла в указанном каталоге и вывод уникальных суффиксов.
No. 24009  
>>24008
Написал такое https://pastebin.com/setRntF0 , но он работает только там где скрипт находится к тому же не заходит в поддиректории.
No. 24012  
>>24008
IO::Dir в помощь.
>>24009
>$#
Не делай так больше.
No. 24014  
>>24008
Но ведь такое можно сделать одной строчкой:
find . -type f | egrep -o '[.][^./]+$' | sort | uniq -c | sort -n

Или это что-то вроде тренировки?
No. 24015  
>>24014
У тебя наивная одна строчка, лучше примерно так:
export LC_ALL=C; find . -type f -print0 |perl -0lne 'print $& if m(\.[^./]+$)'|sort -z|uniq -c -z|sort -z -n
Также можно -L добавить к опциям find, если нужно следовать символьным ссылкам на каталоги при обходе дерева.
No. 24016  
Интересно было бы обозреть проекты сделанные и делающиеся аноннимусом на бордах, особенно не в конфочках, а именно открыто, кажется таких почти нет.
No. 24023  
15832791355870.gif - (464.33KB, 500×338)
24023
Через несколько дней отключат интернет, копеечный заказ на фрилансе(по верстке, вп) взять не получается
Друзья, как быть?
No. 24024  
>>24023
Оплатить интернет?
No. 24025  
>>24024
Так денег же нет, пытаюсь заработать
No. 24037  
>>24025
Попросить у мамки?
No. 24038  
>>24023
Идти на работу.
No. 24060  
Анонче, если знаешь, подскажи как в woocommerce в корзинной таблице вывести несколько вариаций одного товара отдельно друг от друга.
No. 24067  
>>24060
хм, это очень распостраненная штука вообще-то, можешь показать как у тебя это сейчас по-умолчанию выглядит в коризне когда добавлены две вариации разных одного товара?
No. 24068  
>>24067
Стандартно, всё, что я менял в cart.php, так это переставлял столбцы. А стандартно выводится товар, а не вариации.
No. 24069  
>>24068
Положи две вариации разных одного товара в корзину, сделай скриншот и приложи сюда, после чего также приложи код текущего шаблона корзины.
No. 24076  
Безымянный.png - (103.85KB, 1200×1364)
24076
>>24069
Держи. Комментарии - это как раз мои попытки вытащить метаданные товаров. Но ведь вукоммерц в админке сам же отображает заказ нормально, значит есть какие-то родные, встроенные способы. А я не могу их найти.
No. 24077  
>>24076
Кстати, похоже, я уже понял. Можно просто напрямую взять содержимое корзины WC()->cart->get_contents(). Правда тогда нужно подстраивать вывод всей таблицы вручную.
No. 24086  
>>24077
Всё, снимаю вопрос, потому что с корзиной всё в порядке, вариации она отображает отдельно, это просто я передавал с фронтенда неправильные вещикоторые делали неправильный мёд.
No. 24093  
>>24086
Поэтому я и удивился и решил уточнить, т.к. корзина сама должна показывать вариации отдельно, причем уже довольно давно.
No. 24101  
Чего бы мне такого написать, чтобы полезно и порадоваться. Парсер вакабамарка давно написала, желания делать гостевуху с картинками не появилось.
No. 24102  
>>24101
Зрительный нейропротез с высоким разрешением.
Меня тоже позови если вдруг начнёшь.
No. 24103  
>>24102
А что вы умеете?
No. 24104  
>>24101
Клиент для борд (например, того же самого 410-го) на современном JS фреймворке вроде React или Vue.
No. 24105  
>>24104
У меня уже есть морда к Автобусу на jQuery, ничего нового вторая мне не принесёт.
No. 24131  
>>24101
А хостинг у тебя есть? Что на нем доступно?
No. 24132  
>>24131
Heroku. 1 core, 0.5 GB RAM, 1 GB HDD ЕМНИП, JRE8, TomEE, Derby, 20 с гаком часов актива в месяц.
No. 24133  
>>24132
>часов
дней
_sfx_
No. 24145  
>>24105
Ну лол, я тоже так думал пока не начал писать на ReactJS/VueJS. После jQuery сильно лучше заставляет думать о коде, структуре и разработке в целом. Даже хуяк-хуяк получается изящнее и удобнее.
No. 24147  
>>24145
Я за вас очень рада, честно. У меня, к счастью, никогда не было проблем ни с архитектурой, ни с проектной деятельностью.
No. 24165  
>>24132
Сделай хостинг для микроприложений анона.
No. 24167  
>>24037
Хочу сам заработать
>>24038
Лет еще мало. Хочу именно фрилансом деньги заработать
Мимо "Уже 4 месяца не могу взять заказ".
No. 24168  
Анон, что делать если не могу даже самые элементарные задачки решить? По типу:
leetcode.com/problems/merge-two-binary-trees/
Не могу придумать правильные логические условия и всё. Хоть убей..
No. 24169  
>>24167
Тогда нечего клювом щёлкать. У тебя основное занятие - учёба, а не компьютеры, вот и учи то, что у тебя в программе. Родители говорят "нет интернета", значит нет.
No. 24170  
>>24169
>Тогда нечего клювом щёлкать
Навыки и знания для взятия заказа на фрилансе есть, но навыка продавать и писать красивые словечки - нет.
>У тебя основное занятие - учёба, а не компьютеры, вот и учи то, что у тебя в программе
На учебу как-раз таки забил. Всё пытаюсь учить прогу -javascript, параллельно python. В планах после колледжа на джуна устроиться, а оценки в технарьской(пусть и по it специальности) дипломе никому не нужны, в ВУЗ не планирую. Даже если бы планировал, то по вступительным можно пройти.
>Родители говорят "нет интернета", значит нет.
Мама такого не говорила. Она может платить, просто денег не хватает немного, хотелось бы самому подзаработать..
No. 24171  
>>24168
Поверхностно она легкая. Но если внутрь заглянуть то сложно всё становится..
No. 24175  
>>24168
> Анон, что делать если не могу даже самые элементарные задачки решить?
Решать их больше. Приобретение навыков — зачастую небыстрый процесс, требующий труда. Через год-два может такие задачки действительно окажутся для вас элементарными.

>>24169
> У тебя основное занятие - учёба, а не компьютеры, вот и учи то, что у тебя в программе.
Чего учить-то? Циклы трикарбоновых кислот? Номенклатуру ИЮПАК? Структурные формулы нуклеотидов? Преобразования АТФ? Подробную схему кроссинговера хромосом? Или может местоположения административных центров Р(С)Ф(СР)? Вы их сами-то помните? Количество штурмов Порт-Артура? Поминутное описание того, как Наташа NTR-нула Болконского? Чтобы, разумеется, забыть это всё сразу же после экзамена. Ну и смысл жрать всякую дрянь исключительно и целиком то, що дают в таком случае, не занимаясь ни чем иным? И это при том, что денег у человека нет даже на интернеты. Впрочем, касательно той части программы, которая человеку потребуется (или которая может соответствующим образом развить мышление), замечание в какой-то степени разумно. Её мало кто на пристойном уровне осваивает.

>>24170
> На учебу как-раз таки забил
> Навыки и знания для взятия заказа на фрилансе есть, но навыка продавать и писать красивые словечки - нет.
> оценки в технарьской(пусть и по it специальности) дипломе никому не нужны, в ВУЗ не планирую
А ты уверенный парень, лол.
No. 24176  
>>24175
>А ты уверенный парень, лол.
Как раз таки не очень) Но я же буду самообучаться еще 2 года перед выходом на собеседования, разве я имею право завалиться?
No. 24177  
>>24168
Если ты хочешь подкачать алгоритмы, то тебе нужны упражнения по алгоритмам.
Возможно, что-то из базы знаний тебе подойдет?

>>Я ищу задачи и упражнения по алгоритмам (C, Python)
https://410chan.org/dev/arch/res/15681.html#17105
https://410chan.org/dev/arch/res/15681.html#17108
https://410chan.org/dev/arch/res/15681.html#17110
No. 24178  
photolenta_big_photo(4).jpg - (399.31KB, 900×614)
24178
>>24170
>На учебу как-раз таки забил.
Зря.
>В планах после колледжа на джуна устроиться
Ну вот на предприятии и научишься тому, чему не научили.
>оценки в дипломе никому не нужны
Тем не менее, ими интересуются, особенно, если ты молодой.
>>24175
>Чего учить-то?
То, что говорят.
>>24175
>Ну и смысл жрать всякую дрянь^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H исключительно и целиком то, що дают в таком случае, не занимаясь ни чем иным?
Потому что это правильно.
>>24176
>)
А, понятно, с Вами всё ясно.
No. 24181  
>>24165
Это безблагодатное дело. Надо благодатное, чем сама пользоваться буду и радоваться. Прокси для индусов сами делайте.

>>24168
Тебя просят просто наложить одно дерево на другое. Обходишь оба дерева рекурсивно в глубину, строишь третье.
>что делать
Развивать кумекалку.
No. 24182  
>>24181
Я понял условия задачи, просто не особо понимал как правильно составлять логические условия. В итоге решил, но все равно не очень решение вышло..
No. 24183  
>>24182
Там логические условия описаны словами в тексте задачи, лол.
No. 24184  
Привет, Чио-чан!

Если создавать собственную огороженную борду в качестве чатика, то какой движок лучше использовать?

"Вакаба" несколько устарела. "Tiny Board"? Или что-то ещё можешь посоветовать?
No. 24185  
>>24184
Есть один интересный движок...
https://bitbucket.org/Therapont/fbe-410
No. 24186  
>>24185
Но по нему подробной документации для нубов нет, в отличие от "Вакабы".
No. 24193  
Безымянный.png - (98.98KB, 949×809)
24193
>>24069
Анончик, ты ещё тут, не сошёл?
У меня снова с корзиной и вариациями. В корзине ничего не менял, добавлял и тот, и другой одной функцией. Но верхний товар из демки, а нижний добавил я сам. Я подозреваю, что я как-то не так добавил атрбиуты, но не пойму, где ошибся.
No. 24194  
>>24181
>Это безблагодатное дело. Надо благодатное, чем сама пользоваться буду и радоваться.
Ты делаешь хостинг -> анон делает приложения -> виесте пользуетесь благодатными результатами приложения.

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

Алсо, почему с тора даже просматриать автобус нельзя, дудосят?
No. 24204  
>>24194
1. Я несу юридическую ответственность, поскольку хостинг зарегестрирован на мою кредитку. Поднять свой личный хостинг на том же Heroku вам никто не мешает, особого ума для этого не требуется.
2. Так и думала, что хостинг вам нужен для воровства. Всё мы знаем: есть много ресурсов с платным доступом, и есть ещё больше людей, которые не хотят тратить лишнюю копеечку, оплачивая, например, доступ для команды из 50-и наёмных работников; доступ к платному контенту опять же. Дураков в другом месте ищи, ононим.
>почему с тора даже просматриать автобус нельзя
Очевидно потому, что надо или круглосуточно модерировать форум, или перекрыть основные пути проникновения заразы.
No. 24205  
>>24194
А что конкретно надо, чего нет на бесплатных хостингах?
No. 24207  
>>рассизм
Это не раССизм, потому что индусы - европеоиды.
No. 24211  
Screenshot_1.png - (18.69KB, 553×212)
24211
Привет, Чио-чан!

В общем, попытался настроить борду на локалхосте, но почему-то выдаёт ошибку, как на прикреплённой картинке.
No. 24212  
>>24211
Похоже, у вас неверный путь к директории, в которой FBE лежит, в config.php прописан.
No. 24213  
Screenshot_2.png - (7.93KB, 749×175)
24213
>>24212
Да, спасибо. В этом разобрался, но теперь у меня другая ошибка, как на прикреплённой картинке.
No. 24214  
>>24213
Верно ли указана конфигурация БД в config.php и верно ли указан пароль для неё?
No. 24215  
>>24214
Оставил в этом плане всё стандартно, как было, кроме пути до kusaba.php.
No. 24216  
Screenshot_3.png - (32.70KB, 1365×658)
24216
>>24214
Да, спасибо. Там ошибка была в том, что я забыл подключить базу данных. Но теперь появляется другая, как на прикреплённой картинке.
No. 24217  
>>24216
У тебя таблиц соответствующих нет. Можно либо их ручками добавить, либо дёрнуть с оригинальной Кусабы install.php и запустить его.
No. 24218  
>>24205
Минимизация ебли перед входом(регистраций, подтверждений и капчевания), засчет других ограничений. Может быть сам когда-нибудь сделаю подобное, но чем больше, тем лучше.

>>24204
>Я несу юридическую ответственность, поскольку хостинг зарегестрирован на мою кредитку.
И это добавит вам мотивации не допускать цп на вашем сервере.

>хостинг вам нужен для воровства.
>ононим
Я оскорблён.

>с тора даже просматриать автобус нельзя, потому что надо или круглосуточно модерировать форум, или перекрыть основные пути проникновения заразы.
Заразы, которая оскорбляет обвинением в воровстве и которая к тому же рассистка? Я вас имею ввиду.
No. 24220  
>>24204
>>24218

Если вы хотите дальше выяснять отношения между собой, воспользуйтесь нитью для диспутов >>21353
No. 24221  
>>24193
Всегда лучше чуть подробнее писать что и как, а я сразу даже не понял о чем речь лол. Я правильно понял, что проблема состоит сейчас в том, что у демо-товаров в корзине указаны значения их атрибутов показываются, а у твоих товаров - нет?
No. 24222  
>>24221
Именно. Причём я выяснил, что дело в третьем атрибуте, если он естьчто у моего товара, что у демонстрационного, то все атрибуты перестают отображатсья в корзине. Так и должно быть?
No. 24224  
>>24222
Запости на всякий случай код шаблона корзины, а также показывай что там за аттрибуты у тебя (и проблемный аттрибут, и другие)
No. 24225  
>>24218
>засчет других ограничений
С чего ты считаешь, что другие ограничения не несут за собой той же самой регистрации и капчевания, лол? Я бы чужого решился только открытый гитхаб-проект в докере ставить, при условии что прочёл весь код и собрал сам.
No. 24228  
Безымянный.png - (380.10KB, 2924×3024)
24228
>>24224
Вот.
No. 24239  
>>24228
Окей, для начала тебе стоит понять, что именно у тебя выводит эти атрибуты в области названия товара. Заходи в шаблон и отключай сначала:

do_action( 'woocommerce_after_cart_item_name', $cart_item, $cart_item_key );


Пропали ли атрибуты из названий? Если нет, то возвращай эту строку и отключай

echo wc_get_formatted_cart_item_data( $cart_item );


Снова проверяй пропали ли атрибуты из названий? Если и в этом случае не пропали, то по-идее атрибуты у тебя выводятся прямо через

if ( ! $product_permalink ) {

                            echo wp_kses_post( apply_filters( 'woocommerce_cart_item_name', $_product->get_name(), $cart_item, $cart_item_key ) . '&nbsp;' );
                        } else {
                            echo wp_kses_post( apply_filters( 'woocommerce_cart_item_name', sprintf( '<a href="%s">%s</a>', esc_url( $product_permalink ), $_product->get_name() ), $cart_item, $cart_item_key ) );
                        }


И тогда мы дальше будем копать где происходит затык.
No. 24247  
>>24239
Ого, я не думал уже, что получу ответ.
Так вот. Я прошёлся по хукам и выяснил, что эти атрибуты сидятесли сидят сразу в названии ещё в момент фильтра woocommerce_cart_item_product первая строчка в теле foreach. Ну то есть я цеплялся к фильтру и выводил $cart_item['data']->get_name(). И выводилась строка сразу с названием и значением атрибутов/без них.
No. 24250  
>>24247
Смотри, в корзине у тебя там cart_item это базово объект товара, соответственно get_name() ты вызываешь как метод объекта товара. Проблема в том, что сам этот метод это просто обертка вокруг метода get_prop(), который позволяет смотреть на значение тех или иных свойств объекта. Само по себе свойство изначально это пустая строка и заполняется при создании экземпляра объекта.

В общем, покопавшись чуть глубже я обнаружил, что некоторое время назад разработчики WooCommerce чуть добавили и намудрили с выводом атрибутов. Смотри метод generate_product_title() в class-wc-product-variation-data-store-cpt.php: эти извращенцы сначала собирают все атрибуты текущего товара, а потом смотрят будут ли они вообще их добавлять в название или нет на основании условия "если атрибутов меньше трех", т.е. если есть три атрибута, от фиг тебе, а не атрибуты в названии. Далее они еще смотрят, что если атрибутов меньше, но атрибуты содержат знак тире (на самом деле минус, конечно же), то это тоже фактор для того чтобы не выводить атрибуты. Это они так длинные названия атрибутов пытаются определить и выкинуть.

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

add_filter('woocommerce_product_variation_title_include_attributes', '__return_true');

No. 24253  
почти финал.png - (63.33KB, 965×555)
24253
>>24250
Ура-ура, благодаря тебе, анончик, я выхожу на финишную прямую: осталось разобраться с оптимизациейну и стили поправить.
No. 24254  
...Как-то всё хреново. Заразилась идеей сделать свой движок для имиджборд и в связи с этим изучаю PHP, параллельно потихоньку кодописательствуя. И вроде бы как я вижу, что могу сделать движок, но вот именно такой, как задумала - не получается. Дело даже не в том, что я не знаю какого-то момента или столкнулась с неизвестной ошибкой, - если бы всё было так, я бы просто спросила у тех, кто работает с PHP. Моя проблема такая, что и спрашивать-то непонятно что, где и у кого.
В целом я не могу сообразить, как разделить ядро движка и модуль для имиджборды - могу только сделать всё это монолитным и чрезвычайно негибким. Я же хочу чётко разделить основу движка и основу для борды как таковую. Чтобы при желании можно было написать какой-то другой модуль и, вставив его в систему, сразу получить возможность получать сайты уже не бордовского типа - естественно, без внесения каких-либо изменений в само ядро движка. Пожалуй, главная загвоздка в том, что имиджборда предполагает определённую структуру базы данных, и поэтому я никак не могу вынести управляющий базой данных код из модуля имиджборды. По задумке же модуль вообще не должен никак контактировать с БД, это должно делать как раз отдельное от модуля ядро - модуль борды был бы же лишь подключаемым компонентом, этаким "шаблоном" без собственно функционального кода.
Прошу прощения за путаное объяснение, но, может, кто-нибудь здесь подскажет мне какие-то источники информации в помощь на этот счёт? Я либо бросаю этот проект (чертовски обидно!), либо уж понимаю, как сделать хорошо и делаю именно так. Монолитное неуклюжее нечто без хороших перспектив для расширения и дополнения я продолжать делать не хотела бы. Вообще лучшее - чтобы всё было сборным из многих частей, и просто добавляя туда новые компоненты без правки уже имеющихся я могла расширять функциональность своей штуки. И я понятия не имею, как этого добиться.
No. 24255  
>>24254
https://www.goetas.com/blog/modular-application-architecture-intro/
No. 24256  
>>24254
Гугли solid, в частности inversion of control и dependency injection. Ещё почитай про service container и как им пользоваться в твоём фреймворке.

Возьми за привычку не использовать публичные классы напрямую, оперируй только интерфейсами. Запрашивай их через конструктор - контейнер всё разрулит. От бд пока просто абстрагируйся: код потом напишешь, когда нужно будет.
No. 24257  
Посоветуйте хороший учебник по Питону.
No. 24258  
>>24257
Короче, завтра ищешь в интернете книжку Dive into python 3. Плевать если ничего не поймешь. Затем идешь на python.org и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, вызубриваешь конвенцию по написанию питоньего кода - PEP8, чтобы от зубов отскакивало. Когда напишешь свою первую имиджборду,.. и далее по тексту.
No. 24261  
>>24257
Я бы рекомендовал вот эту штуку:
https://runestone.academy/runestone/books/published/pythonds/index.html
Подходит?

А если ты совсем начинающий, есть интерактивный курсу:
https://www.learnpython.org/
No. 24262  
>>24261
Почему вы все такие умные, не все английский знают на таком уровне чтобы читать документацию/учебник и понимать, некоторые и на русском не понимают, а ты на английском советуешь начинающему..
No. 24263  
knigka.jpg - (5.36KB, 175×175)
24263
>>24257
Лутц же.
No. 24264  
>>24262
>не все английский знают на таком уровне чтобы читать документацию/учебник и понимать
Пусть не все читают со словарём. И учат на память.
No. 24265  
>>24262
Могу вместо Питона посоветовать 1С.
No. 24276  
>>24265
Если человек хочет изучать питон, не означает что вся документация/самоучители по нему должны быть изучены исключительно на английском.
No. 24278  
>>24263
Эта стопка сшитой макулатуры еще актуальна? Лучше бы Любановича Простой Питон от того же издателя советовали, он хотя бы на русский переведен.
No. 24279  
>>24278

>Эта стопка сшитой макулатуры

Нельзя ли пояснить?
No. 24280  
>>24278
Что скажешь насчет книги Майкла Доусона?
No. 24294  
Хотелось бы покодить на питоне, но просто так неинтересно. Есть какие-то учебники с задачами? Можно английские.
No. 24295  
А где можно попросить обзора... "кода" темы для вукоммерц?
No. 24301  
>>24294
Олимпиадки решай?
No. 24302  
>>24294
>Хотелось бы покодить на питоне, но просто так неинтересно. Есть какие-то учебники с задачами?

Конечно же есть, даже совсем недавно приводили такие материалы.
Базовый интерактивный курс: https://www.learnpython.org/
Тут можно кодить прямо в браузере.

Учебник с упражнениями:
https://runestone.academy/runestone/books/published/pythonds/index.html

Базовые упражнения оттуда:
https://runestone.academy/runestone/books/published/pythonds/Introduction/ProgrammingExercises.html

После этого можно посмотреть на упражнения и задачи вот тут:
https://leetcode.com/problemset/all/
Питон - одна из опций для решений, кодить тоже можно в браузере, и задачи разбиты по сложности.
No. 24303  
>>24295
можешь уточнить, что именно ты хотел бы увидеть или узнать?
No. 24305  
>>24303
Узнать, что правильно использовал, что неправильно. Про общую манеру письма кода и комментариев.
Ну и вообще про то, что нужно в магазин добавлять обязательно, а без чего можно обойтись.
No. 24321  
>>24265
Ты используешь 1С? Для чего?
No. 24328  
>>24321
В основном для ввода капчи.
No. 24370  
141773354849.jpg - (59.32KB, 377×561)
24370
Вот, говорят, чтобы разрабатывать фронтенд, нужно знать JS, CSS и HTML.
Но сейчас же этого мало. Там всякие NodeJS, Angular существуют - в каком направлении рыть? Что надо изучать после фундаментальной троицы?
No. 24371  
>>24370
>надо
ES6, babel и как работать с npm/yarn. Остальное подхватишь на месте.
No. 24372  
>>24371
Бабель - философ транспилер, npm - пакетный менеджер. Что из этого мне надо было понять, что я подхвачу на месте?
No. 24373  
>>24372

JS же
No. 24374  
>>24373
Спасибо, не поняла
No. 24375  
>>24372
Умничка. А теперь запили мне D&D адаптивную табличку. Решение на чистом жс без использования библиотек не предлагать.
No. 24376  
>>24375
А, и чтобы работало везде, начиная с осла 10.
No. 24381  
>>24370
> Всякие NodeJS, Angular существуют - в каком направлении рыть?
Зависит от того, что ты хочешь делать.

NodeJS - это для серверной лабуды, https://nodejs.org/
ElectronJS - это для десктопной лабуды, https://electronjs.org/
Angular, ReactJS, Backbone.js, Vue.js - это уже конкретно для поддержки клиентской / фронтенд-части веб-лабуды:
https://angular.io/
https://reactjs.org/
http://backbonejs.org/
https://vuejs.org/

Между ними, как всегда, существует большой холивар на основании предпочтений. Я бы посоветовал попробовать каждый и решить, какой ты предпочтешь для себя лично сам.
Для управления JS проектами часто пользуются сборщиками, вроде Grunt: https://gruntjs.com/
Для этих сборщиков, затем, обычно предлагают макеты проектов на целевом фреймворке, чтобы пробовать было легче, и энтузиазм не иссякал на попытке всё засетапить.

Таким образом, в теории, сетап проекта упрощается до установки сборщика, установки пакета с темплейтами, и создания нового проекта на базе темплейта. На практике же, придётся повозиться пока всё заработает. Надеюсь смог чуть-чуть тебя сориентировать.
No. 24384  
>>24381
Grunt уже давно не в моде. Вместо него есть Gulp и Webpack. Они не совсем эквивалентны, Gulp лучше подходит для полностью кастомных задач, Webpack заточен под шаблонные, такие как сборка проектов на упомянутых выше фереймворках.
No. 24385  
1575801843439.jpg - (59.92KB, 549×604)
24385
>>24381
No. 24450  
Есть смысл изучать баш? Или достаточно одного скриптового языка?
No. 24452  
>>24450
Баш - немного улучшенный скриптовый язык.
No. 24457  
15478143153820.jpg - (184.28KB, 960×720)
24457
Есть гайды по го модулям? Ожидал примерно как в питоне, что фал с зависимостями, пополняется и обновляется. А на деле какую-то хуету вычитал, как создать модуль из своего проетка. Хочется быстро и легко управлять зависимостями. Спасибо.
No. 24461  
>>24457

>Хочется быстро и легко управлять зависимостями.
Вроде же в этом гайде всё что надо указано:
https://blog.golang.org/using-go-modules

>Ожидал примерно как в питоне, что фал с зависимостями, пополняется и обновляется.
Вроде бы так и есть, в go.mod указываются версии, если версий нет, резолвится последняя:

>The go command resolves imports by using the specific dependency module versions listed in go.mod. When it encounters an import of a package not provided by any module in go.mod, the go command automatically looks up the module containing that package and adds it to go.mod, using the latest version. (“Latest” is defined as the latest tagged stable (non-prerelease) version

Ну и в целом там рассказывается как зависимостями в проекте управлять. Или надо что-то другое?
No. 24464  
Гружу библиотеку через функцию LoadLibrary.
Библиотека пытается загрузить другую библиотеку, не может, выдаёт сообщение «Unable to locate component».
Как подавить вывод окна с сообщением, если при вызове функции исключение не ловится?
No. 24465  
>>24464
Ты про это?
https://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibrarya

Если да, то вот это не сработает?
> To enable or disable error messages displayed by the loader during DLL loads, use the SetErrorMode function.
https://docs.microsoft.com/en-us/windows/win32/api/errhandlingapi/nf-errhandlingapi-seterrormode
No. 24466  
>>24465
Да, оно самое. Значение SEM_FAILCRITICALERRORS.
В моей версии документации, процитированной строки не оказалось.
Спасибо.
No. 24582  
Одна /dev'очка интересуется, есть ли плагин для вордпресс, с помощью которого можно легко преобразовать pdf в форму? Конечно же, pdf генерируется самим вордпрессом, а потом отдаётся клиенту для заполнения, а клиент заполнив должен загрузить его.
А если нет, то может быть существует уже написанный на ванильном php парсер специально для этого дела?
c: php
No. 24586  
>>24582
> Есть ли плагин для вордпресс, с помощью которого можно легко преобразовать pdf в форму?

Хочу уточнить, я правильно понимаю планируемое взаимодействие, или нет?

1. Ты даешь пользователю скачать PDF-форму с полями.
2. Пользователь заполняет её и сохраняет результат как новый PDF-документ
3. Пользователь закачивает этот новый PDF-документ тебе на сервер.
4. Ты вытаскиваешь из него поля и кладешь в базу.

Если да, то готовые плагины подобного типа мне неизвестны, из-за некоторого зоопарка, который творится с вытаскиванием полей форм из PDF-документов. Сейчас объясню, и заодно отвечу на вопрос:

> Может быть существует уже написанный на ванильном php парсер специально для этого дела?

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

Затем из PDF-документа надо вытащить поля в FDF-формате, единственное известное мне решение это установленная в системе утилита PDFtk Server + её PHP-обвес php-pdftk

https://www.pdflabs.com/tools/pdftk-server/
https://github.com/mikehaertl/php-pdftk

Имея их уже можно взять FDF-файлик от своего PDF вот так:
https://github.com/mikehaertl/php-pdftk#generate-fdf

И потом уже считать сам FDF, спрашивая поля по именам стандартными средствами:
https://www.php.net/manual/en/book.fdf.php

В целом, ничего не мешает оформить этот процесс в собственный плагин для Wordpress, но конечно не то же самое что просто установить и привязать к форме.
No. 24587  
>>24582
>>24586
> Может быть существует уже написанный на ванильном php парсер специально для этого дела?
Если тебе достаточно просто куснуть из своего небольшого PDF текст, а дальше уже как-то самому регексами разобраться, то возможно поможет такой ванильный парсер, основанный на регексах: https://www.tero.co.uk/scripts/extract-text-from-pdf.php
No. 24608  
яблуко______.jpg - (235.09KB, 1440×1280)
24608
Привет! Я хочу сделать крутое приложение с подсказыванием слов как в строке гугл хрома, когда, например, вводишь "410с", а он тебе подтягивает "410chan.ru/dev", выделяя все что после "410с".

Но здесь пробелма в том, что если при использовании автокорректа слов выделить часть (пик1) и попробовать ввести букву, то все слово будет заменено на введенную букву (пик2) вместо выделенного кусочка.

Если автокоррект отключить, то все работает как нужно. Знает кто как можно пофиксить?
No. 24627  
>>24608
К сожалению варианта "как пофиксить" у меня нет, только немного мыслей вслух, но может они помогут привести к решению.

Это выглядит как баг конкретного обработчика событий сервиса спеллчекера. Т.е. из твоих скринов у тебя одна буква считается валидным вариантом автоподстановки, и вроде как вдобавок, когда она вводится просто с клавиатуры, это считается принятием варианта автоподстановки, и он меняет всё слово. Очень трудно будет разбираться с этим. Пока в голове есть только вариант страшного костыля вокруг - попробовать последить за подменой слов так же, как следит само приложение и чинить слово обратно с помощью компонента TextWatcher:
https://developer.android.com/reference/android/text/TextWatcher

Собственно, попытаться ловить состояние слова и выделенную область в событии beforeTextChanged, например когда длина замены 1 символ, и выставить флаг, потом сохранить сам этот символ из текущего состояния в onTextChanged по этому флагу, и по нему же чинить строку обратно и перевыделять нужный кусок в afterTextChanged, после чего флаг снимать. Вроде как это может помочь, но опасаюсь что будет выглядеть как кривая работа приложения. Было бы неплохо, если бы поймав событие на замену слова 1 символом можно было бы это событие просто отменить.
No. 24636  
2018-06-28-966378.png - (115.32KB, 700×1000)
24636
На Хероке чего, изменения в процедуре ухода в идлы? Что значит “Error H10: App crashed”?
No. 24638  
>>24636
Судя по тому что с таким люди сталкивались и пару лет назад, и безответно, скорее всего у них там что-то локально сошло с ума: https://stackoverflow.com/questions/47401071/heroku-considers-my-app-crashed-after-idling-it

Если кому интересно, сама процедура реакции приложения на шатдаун описывается здесь: https://devcenter.heroku.com/articles/dynos#shutdown
No. 24639  
Houseki_no_Kuni_full_2043411.jpg - (766.89KB, 1080×720)
24639
>>24638
Или это такое ненавязчивое напоминание, что надо бы привязать к аккаунту кредитку, а значит паспорт, СНИЛС и биометрику. Сделали бы уже вход через ГосУслуги. А ещё лучше, если бы государство российское сделало систему авторизации на базе ГосУслуг для всех.
No. 24652  
Мде, в общем отписался на тракер, но он мертвый.
>Здесь можно получить помощь и консультацию по любому языку программирования, в любой сфере разработки.
Выручайте котаны. >>24651
No. 24660  
>>24652
Ну смотри, на обоих твоих скриншотах видно, что вылетает оно на
> (G, D, Gs) = pickle.load(stream, encoding='latin1')
С ошибкой, которая говорит о том, что в вычитаном стриме при распаковке оказалось больше элементов чем ожидалось, т.е. там кроме G, D, и Gs оказалось что-то еще.

Чтобы понять в чем проблема точно, надо поцепиться дебаггером, брейкнутся перед этим вызовом, и вывести себе в консольку, что там возвращается из pickle.load(stream, encoding='latin1'), после чего суть проблемы должна стать яснее.

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

Сообщай, смог ли разобраться.
No. 24661  
>>24652
>>24660
Еще может оказаться, что массив выходит длиннее из-за разницы в кодировках, например pkl файл был сделан в мультибайтной UTF8, а вычитывается тобой в однобайтной latin1. Странно, правда, что декодер промолчал и не возмутился, но всё равно стоит проверить.
No. 24669  
>>24660
Разобрался, там просто код проблемный, наверное он под устаревшие библиотеки. Надо было с другого гита брать.
А разбирается тут кто-нибудь в машинном обучении (neural machine learning/deep fakes)? Вкатываюсь и есть вопрос к бывалым программистам (не по коду, а по фундаментальной части).
No. 24670  
>>24669
Нейросети это то в чем мне хотелось бы поковыряться, но к сожалению никак не подвернется подходящий случай. В целом советуют с нейросетями ковыряться в colab:

https://www.tutorialspoint.com/google_colab/index.htm
https://www.analyticsvidhya.com/blog/2020/03/google-colab-machine-learning-deep-learning/
https://colab.research.google.com/github/lmoroney/mlday-tokyo/blob/master/Lab1-Hello-ML-World.ipynb
No. 24671  
>>24670
>В целом советуют с нейросетями ковыряться в colab
Так и делаю, но там есть некий лимит на использование GPU. После ночи тренинга обрубают GPU на сутки. Этот лимит там типа для того, чтобы самые активные пользователи не монополизировали ресурсы и другим тоже оставалось.
Представьте себе человека, у которого верхняя челюсть стала использоваться в качестве подбородка, а нижняя улетела куда-то в епеня. Представили? Вот такое у меня творится с персонажами после tick 4, от того что в датасете голова меньше и немного выше чем в pre-trained модели. Наверное так и должно быть.
No. 24672  
Посоветуйте, как лучше/с чего начать/надо ли(в свете ограниченного владения питоном) изучение замечательного скриптового языка bash?
No. 24673  
>>24672
Скриптовыми языками для консоли владеть никогда не будет лишним, и основные их средства изучать не так-то и долго, с учетом того что в основном ты будешь пользоваться скриптовым языком как обёрткой над, или сопряженно с другими своими инструментами.

Сначала я бы порекомендовал потыкать палочкой простецкие упражнения, чтобы понять что и как это вообще, вроде таких:
https://www.tutorialspoint.com/unix/shell_scripting.htm
https://medium.com/@sankad_19852/shell-scripting-exercises-5eb7220c2252

После чего вооружиться справочником:
https://man.cx/bash
В частности, списком встроенных команд:
https://man.cx/bash#heading31
И соорудить что-то, что необходимо уже непосредственно тебе.

Если вдруг нет своего терминала, то помогут онлайн-песочницы:
https://www.tutorialspoint.com/execute_bash_online.php
https://ideone.com/ (выставь на bash)

Следует упомянуть, что люди часто путают bash (имплементация) и sh (спецификация), о чем подробно рассказано тут: https://stackoverflow.com/a/5725402
В двух словах, в твоей конкретной системе стандартным скриптовым языком может оказаться не баш, стоит это проверить.
No. 24674  
>>24673
>в твоей конкретной системе стандартным скриптовым языком может оказаться не баш
Just use
#!
, Luke.
No. 24684  
1538594361822.jpg - (162.45KB, 1280×720)
24684
Не искал тред веб-разработки дальше нулевой, пощу в закрепленном.

Суть такова, пишу парсер разметки. Возник вопрос, а как лучше поступать с разбиением на абзацы текста.

Такие движки как у Ычана просто пихают голый текст в родительский блок, отбивая его переносами строк <br>.
Стандарты html вроде как советуют помещать текст в блоки <p>, но тогда теряется разница в отступах между разными абзацами (если автор пытался их по смыслу разделить).
Вот все варианты, что я смог придумать, какой лучше?
1. Делать как на Ычане, и разбивать на абзацы переносами строк, так как это делал автор, даже если там на 100 строчек два слова вначале и в конце.
2. Каждый перевод строки — новый блок <p>, пустые строки игнорируются, зато будет однообразное разделение абзацев на всей борде.
3. Объеденить все абзацы в один большой блок <p>, а внутри разделять <br> так как это делал автор. Комбинация первого варианта и стандартов.
4. Каждый перенос строки — новый абзац, но если переносов строки больше чем 2, то добавлять между ними один <br> (опять таки не даст делать слишком большие переносы, но стандарты не любят когда <br> используется для форматирования блоков)
5. То же что и 4, но не использовать тег <br>, а сделать два класса. Один с маленьким отступом после абзаца, другой с большим.

Я аутист, не бейте сильно
No. 24685  
>>24684
Из существующих вариантов, я бы склонился к (3)
>Объеденить все абзацы в один большой блок <p>, а внутри разделять <br> так как это делал автор.

В вариантах (4) и (5) вместо <br> и двух классов я бы предложил сделать, что один отступ генерирует <p>, а два и более отступов подряд дают уже <section>, т.е. контент отделенный по смыслу. И для этого <section> уже определить в стилях отступ побольше. Получается и корректно и элегантно в вёрстке.

Справка по section:
https://www.w3schools.com/tags/tag_section.asp

Есть еше вариант для пиратов:
6. Помещать весь текст в тег <pre>, который как раз предназначен для преформатированного текста. Отступов внутри будет ровно столько, сколько задумал автор. Но придётся поменять стандартный стиль тега, чтобы текст вписывалися в остальной контент, в первую очередь сменить шрифт с моноширного на обычный.

Cправка по pre:
https://www.w3schools.com/tags/tag_pre.asp
No. 24687  
Clipboard01.png - (101.09KB, 1392×920)
24687
>>24684
По-моему, тебе надо для начала определить структуру сообщения, соответственно вывести признаки начала и конца отдельных элементов.

Исторически разбиение на абзацы осуществляется тремя путями:
— типографский отступ с красной строки;
— для ранних редакторов с ручными выравниванием, форматированием и переносом текста абзацы разделяются пустой строкой (это характерно для всего раннего IT, посмотрите для примера стандарты RFC);
— для модерновых, вроде Word, которые выравнивание, форматирование и переносы делают сами, абзацы разделяются новой строкой, отсюда пустая строка для них тоже абзац.

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

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

Ну а структуру форматированного текста в рендере задавать проще всего div-ами, ты же не под HTML 3 пишешь. Или у тебя там требования, чтобы на пятом Осле отображалось?

>>24685
Твой <section> покорёжит структуру моего поста. Это имело бы смысл, если бы требовалось отделять друг от друга ответы на разные сообщения, но опять же, это жесткое формальное требование.
No. 24689  
>>24685
По логике <section> это больше про каталог, где выводится только заголовок и предпросмотр ОП-поста. Потому как для этого тег вроде и создавался.

> Помещать весь текст в тег <pre>
Плохая идея, у меня в нём код/поэзия будет лежать.

>>24687
Другой вариант который я сейчас рассматриваю: один перенос приклеивает две строки к одному тегу <p>, два и более — создают новый абзац. Тут и вроде как стандарты соблюдены, и лишние переносы переварены, и текст красивее отделяется.
> структуру форматированного текста в рендере задавать проще всего div-ами
Не совсем понимаю зачем нужно забивать гвозди <div>ами, если для этого есть готовые теги, которые по смыслу больше подходят.
> Или у тебя там требования, чтобы на пятом Осле отображалось?
Совсем нет, скорее наоборот. Пытаюсь как можно больше черпнуть из новых стандартов. Даже от табличной вёрстки отказался.
No. 24690  
Clipboard01.png - (93.03KB, 1390×916)
24690
>>24689
Oh, my...

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

Отсюда предлагаю оставить семантику на совести автора и
просто считать текстовым блоком наибольшую подпоследователь-
ность строк в сообщении, для которой автор явно не указал
принадлежность к иному блоку. Соответственно, отдельные
строки внутри блока описывать или <br>-ами, или <div>-ами.

>если для этого есть готовые теги, которые по смыслу больше подходят.
Специализированные теги вводятся для человека, который будет их набирать вместе с текстом, отсюда вопросы семантики отпадают сами собой: если человек засунул какой-то текст в <p>, значит это абзац. Это не отменяет того, что большинство человеков лепят эти тэги, как Бог на душу положит, отчего семантический анализ по ним затруднителен, если вообще возможен. Тем не менее, стандарт и браузеры всегда этому попустительствовали чтобы выжить (тот же XHTML невзлюбили из-за его строгости).
Для разметки, создаваемой в результате машинной обработки, придумали универсальный тэг <div>, из которого можно вывести любой специализированный тэг при помощи таблицы стилей. Это вместе с flex-ом позволяет радикально менять вид сайта одними лишь таблицами стилей, не трогая сам HTML, который, как правило, генерируется из кучи шаблонов. Семантика здесь так же уезжает в таблицы стилей и остаётся на совести разработчиков конкретного сайта.
No. 24745  
1570187055516.gif - (149.82KB, 128×128)
24745
набирает воздуха полную грудь
Господи, как же сложно.
Я специально выбрал html и css, так как они казались мне очень простыми и тем, что я мог бы осилить.
А потом оказался необходим js и он меня ежедневно убивает!

Несколько месяцев я с ним вожусь и ничего не понимаю! Слишком сложно, слишком абстрактно, слишком непонятно! Затруднения копятся как снежный ком и каждый новый урок даётся хуже предыдущего!

Господи, как же сложно! Я ведь просто хотел чему-то научиться, чтобы что-то уметь и не быть бездарем! За что так сложно-то?!
No. 24746  
>>24745
Хаха это ты, наверное ещё не дошёл до всяких фреймворков и прочего ужаса вёрстки современного вебсайтостроения. А потом тебя попросят жаваскрипт... Бросай и не лезь в этот омут, если тебе даже база даётся с трудом.

https://www.youtube.com/watch?v=yShfgJYXdfc видео для мотивации
No. 24747  
>>24746
Неправильное у тебя, дядя Фёдор, видео. https://youtu.be/4UhESx6vK4c

>>24745
Просто не учи всё что ES5 и позже, и объекты. Для простеньких задачек достаточно знание DOM. https://habr.com/ru/post/312022/
No. 24748  
>>24450 как по мне, достаточно знать питон
No. 24750  
>>24748
Если уж говорить об околобашевых однострочниках, то тогда уж Перл. И то не весь.
No. 24770  
Не совсем по теме, спрошу здесь. Заранее извиняюсь если пропустил более подходящий тред. Как в CSS отменить у конкретного селектора свойство none? Inb4:переопределить - первым делом пробовал, не помогает, потому что уж очень сложное навороченное правило этот none отменяет и я не могу его повторить, уже неделю мучаюсь. Казалось бы, что может напортачить border:none? А начинаешь переопределять и сразу кнопки пляшут во все стороны вместе с панелью, хоть маргины с падингами индивидуально для ховера каждой кнопки прописывай. И да, я уверен что дело в нём. Как чисто логически, так и экспериментально, отключив (сняв галочку) в средстве разработки встроенном в браузер. Единственный вариант который приходит в голову - переопределить весь файл CSS на свой - слишком радикальный.
No. 24771  
>>24770
initial и inherit приводит к результатам аналогичным none, или я их как то неправильно использую, возможно какое то хитрое комбо нужно?
No. 24772  
>>24771
По идее всё что нужно чтобы перекрыть общий селектор в CSS это написать более специфичный селектор под целевой элемент и проставить там нужное свойство border: 1px black solid или что там необходимо. В случае необходимости, чтобы новый селектор нельзя было просто так перекрыть, можно добавить в конце !important т.е. сделать border: 1px black solid !important

Если можешь, воспроизведи ситуацию на каком-нибудь jsfiddle, чтобы можно было понять всю суть проблемы и опробовать разные подходы к её решению.
No. 24773  
>>24772
В том то и дело, что непонятно какие точно правила отменяет none - слишком много уровней вложенности через @import и очень много кода, в том числе переопределяющего друг-друга. Чёрт ногу сломит. Инструмент браузера почему то вообще не показывает никаких правил на рамки у проблемного элемента. Однако отключение правила border:none; в нём помогает. У других панелей всё прекрасно работает, но они не родительские элементы, поэтому inherit не помогает, у родительского тоже none. Конкретно нужно вернуть появление рамки при наведении курсора. Если попытаться на глаз воссоздать, то как выше писалось начинают кнопки индивидуально прыгать в разные стороны и соседние элементы смещать. Индивидуально по разному, каждая кнопка. Как это может от параметров рамок зависеть - всю голову сломал. Поэтому начал с именно с того что переопределить (по факту написать новые правила по новой) - не вариант. Прекрасно понимаю, что по правилам нужно просто написать новое правило с более высоким приоритетом, на то стили и каскадные. А если предыдущее правило обнуляло правила, то писать нужно целиком. И вообще, чем глубже начну объяснять, тем больше путаницы. Есть ли вариант просто отключить это проблемное правило как в инструменте разработки средствами CSS или сделать его игнорируемым? Потому что сейчас так получается, что проще скопировать сам файл без проблемной строчки.
No. 24774  
Предположительно причина в наличии кучи классов, у каждой кнопки. В результате чего у каждой уникальные правила. А тут под общем селектором они все разом обнуляются none. И разумеется, когда так же общим скопом пытаюсь воссоздать всё единым стилем, всё сразу по дерпу идёт. Т.е. мне нужно все эти стены правил для каждого класса заново переопеределять из-за одной строчки и больше никак?
No. 24775  
>>24774
Ок, теперь я лучше понимаю твою проблему.

> Есть ли вариант просто отключить это проблемное правило как в инструменте разработки средствами CSS или сделать его игнорируемым?

Возможно, unset сработает так как тебе нужно.
https://developer.mozilla.org/en-US/docs/Web/CSS/unset
>The unset CSS keyword resets a property to its inherited value if the property naturally inherits from its parent, and to its initial value if not.
Надо прописать для этого правила border: unset !important и посмотреть что будет.

>Если попытаться на глаз воссоздать, то как выше писалось начинают кнопки индивидуально прыгать в разные стороны и соседние элементы смещать. Индивидуально по разному, каждая кнопка. Как это может от параметров рамок зависеть - всю голову сломал.
Покажи потом этот парад кнопок. Очень хочется увидеть эту фантасмагорию.
No. 24776  
>>24773
>Как это может от параметров рамок зависеть - всю голову сломал.
Рамки добавляют элементу и ширины, и высоты, соответственно своим размерам. Отсюда и берется смещение элементов, кнопки перестают помещаться в ширину / высоту контейнера, и начинаются вот эти неочевидные переносы, которые другие стили на странице не учитывают.
No. 24777  
>>24775
Юнсет применённый к тому же селектору что none даёт тот же результат. Видимо, сбрасывает значение на умолчание или наследует none. К правилу где ховер вообще всё портит - начинают плясать даже кнопки на других панелях. Если не указать оформление, то и рамки при этом теряют. Впрочем, нужно поэкспериментировать с выборочным применением к разным параметрам border и разными комбинациями с inherit. Спасибо.
>Покажи
Как? Видео? Оно же при наведении мыши. Одна вправо, другая влево, третья вообще по диагонали.
No. 24779  
>>24777
>Как? Видео? Оно же при наведении мыши.
Да скриншота "до и после" будет достаточно.
Так-то сюда можно грузить и mp4 и webm.

Можешь еще выкусить со своей страницы используемые стили вот так https://stackoverflow.com/a/24722385

И потом залить срендеренную страничку с этими стилями на https://jsfiddle.net/ чтобы можно было посмотреть предметнее, в чем твоя беда и поэкспериментировать.
No. 24780  
>>24779
Это не сайт, а .xpi Всё равно было бы палевно, так что выложу сам файл. Прости если что криво, второпях сейчас собрал на коленке. Жирный такой потому что там много графики включая обои зашито и несколько тем оформления. Можешь копаться https://files.catbox.moe/zenjkn.xpi
Собирался как только стабильную версию сделаю тред создать, чтобы в свободный доступ выложить, а на такой мелочи застрял. Только из-за нежелания писать файл с нуля или оверрайдить копией с минус 1 строчкой.
Так то проблема решается как 2 пальца облизать. На новой лисе не работает. Только на старой (-57.*), палмуне и фенеке. Обкатывается большую часть времени на MyPal, так что на другом 100% не гарантирую. Там JS ещё ни строчки нет, так что даже настройки свои не умеет читать.
И не в состоянии зарегистрировать глобальную таблицу стилей. overlay и style к xntml не применяются, только к xul Так что дополнительно нужно скопировать в твой userContent.css содержимое вот этого фала https://files.catbox.moe/m4554r.css
Оно себя при установке распаковывает в папку расширений в профиле, оттуда руками тему OldFox установи. Классический стиль и патч тем оформления на оранжевую тему FireFox включён по умолчанию, проблема с кнопками nav-bar. Видишь, не реагирует на курсор? В aerofox та же беда, потому что они обе основаны на дефолтной теме и там -moz-appearance: toolbarbutton; Видишь странно выглядящие серые кнопки при наведении мыши? Это свойство toolbarbutton. В патче OldFox none, во всех кастомных темах от других авторов вообще нет -moz-appearance
PS: может всё же отдельный тред на этой доске создать? На ычане, к сожалению, очень жёстко банят за мой lolifox, потому что думают что это реклама сайта с ЦП. Спасибо тому кто форсит там вирусный лолифокс-браузер собранный из палмуна. Не хотел лишний раз Соуса радовать премьерой оригинального контента, лучше бы на ычане конечно.
No. 24781  
>>24780
Прямо сейчас не смогу в него посмотреть, но позже попробую. Сообщай если что об успехах в борьбе с CSS.
No. 24782  
>Там JS ещё ни строчки нет
Ай! Совсем забыл. Заставил лолисичку плакать, вместо неработающего в режиме совместимости с фенеком href= уже oncommand="window.open('chrome://installskin/content/oldfox.xpi', '_self');" успел написать. Простите, я не вруша. Зато можно не искать файл в распакованной папке, а кликнуть по кнопе установки в настройках.
No. 24783  
Послезавтра стартует конкурс разработки игор.
https://2ch.hk/gd/res/702915.html
No. 24792  
>>24781
В результате всё же переопределил. Но хитро, чтобы компактно вышло:
toolbarbutton {-moz-appearance: none !important; border: 1px solid transparent !important;}
А в ховере меняю цвет рамки. И none перешибло по иерархии и больше не прыгает. Отвечая на свой изначальный вопрос - никак.
No. 24793  
>>24792
Жаль, что не вышло просто откатиться на предыдущее значение через unset, но рад, что получилось достичь нужного результата в целом.
No. 24885  
tenor.gif - (2.96MB, 432×278)
24885
Как перестать чувствовать себя максимально овощем в программировании на третьем курсе прог инжира?
No. 24887  
>>24885
Найти нормального преподавателя или онлайн-курс. К сожалению, большинство из них намеренно усложняют материал, чтобы повысить свою важность. Или ведут себя как сенсеи из аниме или китайских фильмов. Т.е. ориентируют свои программы на одарённых учеников, до которых дойдёт даже если ничего не объясняя лупить до просветления палкой. Если не можешь сделать что=то сам, найди того кто может. В.ч. того кто сможет найти.
No. 24888  
>>24887
Но вроде же "я даже шарю и шарю хорошо"
Ну как хорошо, написать какую-нибудь нужную фичу в опенсорсе могу. Я просто не знаю, что меня ждёт в работе, вообще
Может я даже и знаю больше, чем средняя макака моего уровня, как это понять?
No. 24889  
>>24888
Пройти практику на предприятии, где собираешься работать. Или похожем на него. Рекомендацию откуда с удовольствием примут в месте где ты собираешься работать. На самом деле, единственный смысл высшего и среднего образования - пройти практику. Чтобы трудоустроится там. Практикантов любят, потому что им не нужно платить. На работу любят выбирать из тех кто недавно закончил у них практику. Самый лёгкий путь помимо блата. Практика для того и практика - чтобы практиковаться. Если боишься запороть себе практику, можешь похалтурить на случайного злого дядю за бесплатно. Таких много.
No. 24895  
>>24885
>>24888
>Я просто не знаю, что меня ждёт в работе, вообще
>Может я даже и знаю больше, чем средняя макака моего уровня, как это понять?

Как насчет попробовать себя на волонтерских проектах?
В архиве всё еще рабочая ссылка на волонтёрский хаб:
https://410chan.org/dev/arch/res/14160.html#15210
No. 24901  
>>24889
>>24895
Постараюсь что-нибудь найти, ибо у нас в ДС-2 не очень охотно берут...
No. 24910  
merry_4.jpg - (115.99KB, 1332×850)
24910
>>24673

Спасибо, пойду(спустя пару месяцев) тыкать все таки и туториалы проходить!
No. 24914  
>>24910
Не за что, это всё никогда не поздно.
No. 24918  
Здрасте. Несколько месяцев назад решил начать учить замечательный язык Rust, но быстро забросил т.к. не видел в нем перспектив(в плане зароботка). Стоит ли продолжать его учить, и есть ли похожие, но более популярные ЯП
No. 24919  
>>24918
Не могу сказать, стоит ли продолжать с Rust, но вот человек описывает свой опыт, возможно эта информация поможет:
>>16184
>>16185
>>16197

>есть ли похожие, но более популярные ЯП
Из его же слов могу предположить, что Питон может быть подходящим кандидатом для тебя.
No. 24920  
>>24919
Спасибо большое!
No. 24922  
>>24920
Никаких проблем, заходи если что.
No. 24937  
junior_developer_aoba_2.png - (434.99KB, 720×720)
24937
Аноним наконец-то перенес последние ссылки из прошлой нити в базу знаний: http://pastebin.com/AGhLZppH

Так как прошлая нить еще не попала в архив, ссылки пока указывают на живую нить.
No. 24951  
Привет, 410. Для Morrowind есть патчер "EXE Optimizer". По описанию он заменяет FPU-инструкции на SSE. Где можно прочитать подробнее о том, как патчить .exe под архитектуру конкретного процессора. Цель:пересобирать .exe под конкретные инструкции, увеличивая производительность(без наличия исходников).
No. 24952  
Чио-чан, у меня тут назрел вопрос по поводу свободного ПО…

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

Тем более, что те же nmap, Cheat engine и т.д. вполне можно классифицировать как зловредное ПО, но у них открытый исходный код…

В общем, непонятно.
No. 24953  
>>24951
>Цель: пересобирать .exe под конкретные инструкции, увеличивая производительность (без наличия исходников).

Интересная тема, но не особо широко освещенная. Потому что сложная.
По идее, тебе надо:

1. Декомпилировать / дизассемблировать твой изначальный бинарник, понадеявшись на то что он не заоптимизрован так, что там нельзя будет ничего понять, или не придётся все адреса обновлять на каждый чих. Суть проблемы и почему это важно, тут, в основном ответе и коментах: https://superuser.com/a/328563

На данный момент считается, что лучшие тулзы для таких вещей:
Ghidra: https://ghidra-sre.org/
IDA: https://www.hex-rays.com/products/ida/
Сравнение: https://habr.com/ru/post/480824/

2. Распознать в полученном исходном коде нужные тебе инструкции и заменить их.
Вот это наверное будет самое сложное, тебе нужна документация по этим самым инструкциям.

3. Рекомпилировать бинарник обратно / наложить патч на старый.
4. ?????
5. Профит

Как это выглядит на практике на примере Ghidra можно увидеть тут:
https://materials.rangeforce.com/tutorial/2020/04/12/Patching-Binaries/
Здесь же видно, что к самой гидре нужно как минимум прикрутить примочку SavePatch, чтобы всё работало как надо.

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

Для того чтобы сэмулировать конкретный процессор, в тестовых целях, может также пригодиться QEmu:
https://www.qemu.org/documentation/

Ну и немного саксесс сториз.
В целом таким способом люди умудряются сделать даже полную смену архитектуры:
Ты уже наверное видел x86 -> ARM порт StarCraft:
https://hackaday.com/2014/07/31/playing-starcraft-on-an-arm/
А вот тулзы которые использовались для этого упражнения:
https://github.com/notaz/ia32rtools

Надеюсь, смог чем-то помочь.
No. 24954  
>>24952
Тут скорее надо спрашивать юристов, а не программистов. Предположу, что требования лицензии не могут идти в разрез с международным / местным законодательством, а большинство из них открыто запрещают распространять заведомую бяку в принципе. Я не уверен даже, что этот знаменитый дисклеймер про распространение ПО as is вообще чего-то юридически весит.

>nmap, Cheat engine
Насколько помню, это просто утилита для проверки портов и редактор значений в памяти соответственно. Во вред они сами по себе не работают, их так может использовать только конечный пользователь. По таким критериям ничего классифицировать скорее всего нельзя, потому что тогда у всех программистов надо отобрать их редакторы, а все фирмы которые редакторы выпускают закрыть. Но тут опять же, скорее к юристам, чем к программистам.
No. 24955  
>>24951
Если интересно про FPU -> SSE патчи, то можно посмотреть как это делали имея исходники в Си для ядра Линукса: https://sourceware.org/gdb/papers/linux/linux-sse.html
No. 24956  
>>24953
>>24955
Спасибо.
No. 24957  
>>24954
>из них открыто запрещают распространять заведомую бяку в принципе
Вроде как если пользователь был уведомлён, что это бяка, а также если бы что–то плохое она делала только после осмысленных действий пользователя, то бякой она уже не считается. Иначе бы тогда можно было запретить утилиты для разметки дисков, поскольку неосторожными действиями можно легко стереть всю информацию с компьютера.

>Я не уверен даже, что этот знаменитый дисклеймер про распространение ПО as is вообще чего-то юридически весит.
Если я не ошибаюсь, то в России лицензия GNU GPL является юридически недействительной, поскольку её особенность в виде требования, чтобы форк тоже распространялся под такой же, или совместной, лицензией, идёт вразрез с законами об авторском праве. Именно поэтому есть всякие проприентарные дистрибутивы GNU/Linux вроде "Астра Линукс", который хоть и форк Debian, но не следует лицензии GPL. И это очень странно, поскольку есть российские дистрибутивы, вроде PuppyRus Linux, которые GPL не нарушают. Возможно, потому, что один делает коммерческая компания, а другой — сообщество в качестве хобби. Но тот факт, что открытый код можно использовать в закрытом ПО без каких-либо последствий… Но в таком случае получается, что GPL даже более жёсткая, чем копирайтные лицензии. Лицензия BSD как–то более правдоподобно выглядит.
No. 24958  
>>24956
Заходи, если что.
No. 24961  
Инпут: python 3 и файл csv, в котором две колонки: текст,число.
Надо считав конвертировать это число из строки в int И записать это в лист, чтобы вышло [str : int, str : int, str : int].
Не получается, не гуглится. Спасите.
Нет смысла код показывать, я там просто пытаюсь мудрить с dictReader. Знания этого языка очень плохие.
No. 24962  
>>24961
А тебе надо чтобы это был список пар, или словарь?
В любом случае, тебе надо просто применить к своей коллекции map, преобразовать её в новую коллекцию какой-нибудь функцией, и потом обернуть результат в нужный тип.

Интерактивный туториал по map, поиграться:
https://www.geeksforgeeks.org/python-map-function/

Например, твоё:
>конвертировать число из строки в int И записать это в лист, чтобы вышло [str : int, str : int, str : int]

numbers = ('1', '2', '3', '4') 
result = map(lambda x: (x, int(x)), numbers) 
print(dict(result)) 

Результат:

{'1': 1, '2': 2, '3': 3, '4': 4}

Думаю, в тонкостях сможешь подправить сам.
No. 24963  
>>24961
>>24962
На всякий случай, если у тебя проблемы и с чтением/записью CSV:
https://www.geeksforgeeks.org/reading-and-writing-csv-files-in-python/
No. 24965  
>>24962
>>24963
Спасибо, на свежую голову всё поняла! Надо было искать convert dictionary values. Like
https://stackoverflow.com/questions/5316720/how-to-convert-string-values-from-a-dictionary-into-int-float-datatypes
No. 24966  
>>24965
Хорошо, что получилось. Жаль, не смог сразу точнее совет дать.
No. 24969  
Почему везде зазывают в IT? Из каждого утюга: "Идите в программисты, программист это стильно, модно и не сложно!"
За обесценивание услуг на рынке труда не страшно?
No. 24970  
>>24969
Надо смотреть на темпы роста индустрии, пока индустрия растёт - относительно не страшно. Потому что дефицит кадров, и сколько бы ты не привлёк - всё равно не хватает, можно зазывать всех. Со временем индустрия застагнирует - вот тогда избыток кадров, при устоявшемся количестве или дефиците позиций начнет обесценивать труд.
No. 24974  
Вопрос не критичный, скорее из любопытства, уровня "запустить Дум на калькуляторе".

Какой наиболее простой способ взять один JavaScript-файл, предназначенный для веб-браузера, и получить из него аналогичный файл, предназначенный для более старого веб-браузера, уровня хотя бы ES5?

Пишу веб-страничку в блокноте, вот эту: https://2draw.me/sprite_dress_up/
Требует ES2018 (судя по вики), работает в Firefox 56.

Наткнулся на программу Otter Browser. В ней страничка не работает, жалуется на
async function
в первую очередь.

О транспиляторах и прочих сборочных конвеерах знаю только легенды об их существовании.
Нагуглил https://babeljs.io/en/repl но не смог получить из него ничего рабочего для выдры.

Если для этого придётся что-то ставить и настраивать кучи плагинов с модулями, как я понял из дальнейшего гугления, то вопрос будет отложен до появления реальной необходимости.
No. 24975  
>>24974
Извини что не в тему. Вроде бы существуют какие то конверторы, но я краем уха слышал только о конвертации на более новую спецификацию. Тем не менее, сказать хотел совсем другое. А именно, что нужно не как проще, а как правильнее. Иначе будет всё плохо. А для этого ты должен сам знать и понимать различия спецификаций. В общем то, по этой причине никто с даунгрейдом и не парится, а просто заставляют всех использовать последний хром. Браузеров старых-хороших несовместимых с твоей рисовалкой много, к слову. Я уже давно смирился. Лучше наверное тебе и не заморачиваться, делай на всём самом свежем, как все.
No. 24976  
>>24975
На всякий случай поясню, что и сам планировал дальше писать относительно современный код, используя ту часть стандартов, которая его упрощает, насколько возможно.

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

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

В качестве отдельного анекдота, 11-я Опера не справилась даже с этим перебором, не вызывая от неудобоваримой версии ни
onload
, ни
onerror
. Но там я ни на что и не надеялся.
No. 24977  
>>24974
>https://babeljs.io/en/repl
На вид, их онлайн REPL просто работает неочевидно, ну или полусмломан.

Насколько вижу по спекам, async function definitions появились в ECMAScript 2017:
https://ecma-international.org/ecma-262/8.0/#sec-async-function-definitions

Вот в ECMAScript 2016 их еще нет:
https://ecma-international.org/ecma-262/7.0/

Соответственно, если поставить в Babel REPL пресет es-2017, то простую функцию типа
async function foo() {

  await 1 
}

оно, согласно этой вот доке
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
должно переделать в подобие

function foo() {
   return Promise.resolve(1).then(() => undefined)
}

И оно действительно переделает, именно что в хтоническое подобие, с использованием своего промис-генератора:

function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {  ... }
function _asyncToGenerator(fn) { return function () { ... } }
function foo() {
  return _foo.apply(this, arguments);
}
function _foo() { ... }

Того же самого эффекта можно добиться, если в REPL включить Env presets и в поле Browsers вписать, к примеру, chrome 54 - это последняя версия Хрома, которая не поддерживала async function, согласно той же доке.

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

Если верить автору, твой Otter Browser использует Qt WebEngine из Qt5:
https://doc.qt.io/qt-5/qtwebengine-overview.html
А он внутри использует Chromium
>This version of Qt WebEngine is based on Chromium version 80.0.3987, with additional security fixes from newer versions.
Такой версии, которая уже всё это должна сама поддерживать.
Получается, или автор использует древнюю версию Qt WebEngine, или ты используешь древнюю версию браузера.

Я бы рекомендовал зайти в этом Otter Browser на какой-нибудь ресурс, который проверяет доступность разных фишек, типа:
https://html5test.com/
И посмотреть, насколько плохи дела.

Сообщай, помог ли тот ужас, который выдаёт Babel завестись хоть чему-то в твоём браузере.
No. 24978  
Всегда было интересно, на чём конкретно из свежей спецификации js вылетает опера 12.18
И не могу придумать ни одного адекватного способа узнать.
No. 24979  
>>24977
> если в REPL включить Env presets и в поле Browsers вписать, к примеру, chrome 54
Результат тот же, что я сам получал, перебирая галочки "es-такой-то" наверху или конкретные плагины-преобразователи внизу, а именно — такая ошибка:
ReferenceError: Can't find variable: regeneratorRuntime


> This version of Qt WebEngine is based on Chromium
Тогда можно предположить, что рано или поздно всё там будет и успокоиться.
Версию браузера я взял позавчера прямо из последней папки еженедельных сборок на sourceforge.

> https://html5test.com/
> насколько плохи дела.
На 361 из 555. Из всего списка, что выдаёт тест, не хватает только async/await. И наверно rest/spread arguments, которых в списке нет.

>>24978
11-я на многих современных сайтах вылетает уже на этапе установки HTTPS-соединения. А где проходит, валится на каком-нибудь jQuery.
No. 24980  
Привет, аноним. Есть сайт на битриксе с авторизацией. После авторизации требуется нажать на кнопку. На практике же при авторизации в браузер поступает тонна непонятных кук, я сохраняю их всех и передаю вместе с запросом отправки формы (кнопкожмаканья) через питоний requests. Ниработаит. В чем может быть затыка и как найти корень проблемы?

Вообще, как парсить сайты с JS и динамическим контентом?
No. 24981  
>>24979
>ReferenceError: Can't find variable: regeneratorRuntime
Для трансляции кода Babel использует Regenerator:
https://github.com/facebook/regenerator
Которому для работы сгенерированного кода нужна своя рантайм библиотека, без которой ничего не будет работать.
Если пользоваться плагином отдельно, то можно прямо указать ему включить рантайм в итоговый скрипт:

regenerator es6.js > es5.js # Just the transform.
regenerator --include-runtime es6.js > es5.js # Add the runtime too.

Babel REPL этого не включает, и тебе надо будет подключить его самому, взяв с гитхаба или с npm: https://www.npmjs.com/package/regenerator-runtime

>361 из 555
Не очень дела, современный браузер дает 500+
No. 24982  
>>24980
>Вообще, как парсить сайты с JS и динамическим контентом?
Лучше всего парсить headless-браузером с поддержкой яваскрипта и всех тех же динамических событий, что поддерживает браузер. Обычно это делается с помощью тест-фреймворков, типа
Puppeteer: https://pptr.dev/
CasperJS: http://casperjs.org/ (поддержка приостановлена)
SlimerJS: https://slimerjs.org/ (поддержка приостановлена)
Работающих на базе node.js

Соответственно и парсить потом всё тоже яваскриптом.
No. 24984  
>>24981
После подключения регенератор-рантайма перед ней, в Otter Browser es5-версия запускает сборку UI, завершает содержимое первого пункта меню и останавливается где-то на втором без каких-либо видимых ошибок в консоли.

12-я Опера жалуется на const в актуальной версии и на промисы в es5-конверсии.

Ещё вчера я натыкался на браузер Falkon, который тоже использует Qt5WebEngine. Несмотря на некоторые баги установщика (предложение убить несуществующий процесс и отсутствие msvcr120.dll в сборке, без которой браузер не запустится), в нём моя страничка работает прямо как есть, в актуальном виде.

В общем, спасибо и на этом, смысла дебажить глубже лично у меня нет.
No. 24985  
>>24984
Ок, заходи если что.
No. 24986  
>>24982
Большое спасибо.
No. 24987  
>>24986
Важно помнить, что многие сайты противятся всяким внешним парсерам, и всячески стараются их блокировать. Самый простой вариант, который проверяется - специфический User-Agent или его отсутствие. На всякий случай проверь, что будет отправлять твоя штука и если надо выставь на соответствующий браузер.
No. 24988  
>>24982
Забыл очевидный Selenium.

Ну и в приинципе, можно пытаться в spidermonkey.
No. 24989  
>>24988
На селениуме уже делал, думал, есть какие-то варианты пошустрее и не такие прожорливые.
No. 25019  
435681.jpg - (205.11KB, 1127×1600)
25019
А есть тут кто с тревожностью или вовсе социальной фобией? У вас вышло во фриланс?

Чуть больше чем за два месяца научился основам C, попробовал Пайтон, написал маленький сайт на HTML + CSS + JS, заодно послушал лекции немного про машинную архитектуру: в общих чертах про регистры, память, указатели, дескрипторы.
Когда освоил основы и понял, что теперь могу в принципе изучить любой язык, то из всего решил остановить свой выбор и сконцентрировать внимание на Пайтон. Теперь буду изучать его синтаксис и набивать навык письма.

Дайте советов, что делать потом, что ещё подучить, и как конвертировать это в деньги, при этом не сойдя с ума от страха.
No. 25024  
>>25019
> А есть тут кто с тревожностью или вовсе социальной фобией? У вас вышло во фриланс?
Ну, у меня много проблем в голове. Но я пью таблеточки и начал заниматься с психологом раз в неделю.
Не на фрилансе, но, скажем, работаю из дому, редкие рабочие звонки, и вот это все.
Все возможно конечно же.
В первую очередь рекомендую (если еще нет, конечно же) заняться здоровьем. Тогда все остальное просто у тебя легче пойдет.
Во-вторых, на счет «что подучить» очень зависит от того, что ты хочешь. Если возможно, расскажи подробнее, пожалуйста.
No. 25025  
89653232.jpg - (141.87KB, 800×1041)
25025
>>25024
Ты молодец! И я занимался здоровьем и результаты хорошие. Но чтобы они были ещё лучше нужно заниматься на более высоком уровне, а для этого нужно заработать.
Ну и труд сам по себе терапия, в каком-то смысле.
Всёж остаются, так сказать, ограничения по здоровью на виды деятельности. И именно из этого, мне кажется, нужно исходить в выборе направления. А то я изучить то, наверное, могу что угодно, хоть веб, ход SQL, хоть язык ассемблера. Решил вот выбрать в качестве языка Пайтон как нечто такое общее и востребованное, но теперь хотелось бы это как-то ещё сузить и за месяца полтора определиться с направлением. Чтобы как можно меньше приходилось говорить с заказчиками, выяснять и обсуждать, а оказывать как можно более простую помощь.
Вот здесь бы хотелось найти советов, на какие направления во фрилансе можно обратить внимание, где нет какой-то большой ответственности и не нужны софт скиллы. Потому что идти прямо в бой и учиться на ходу с расчётом на скорые хорошие доходы, это вообще физически невозможно.
Надеюсь в общих чертах обрисовал.
No. 25031  
79660654_p0.jpg - (1.27MB, 1200×1761)
25031
>>25019
>>25025
Кстати. Может быть у кого тут есть желание поиграть роль ментора по Пайтон?
А ещё я слышал, что некоторые крупные фрилансеры нанимают себе неопытных товарищей, которые пишут для них части кода. Наверное для меня это был бы прекрасный вариант для "мягкого" старта.
Позволю себе оставить тут ссылку на крипточатик element.io Найти меня там можно по @habasi:matrix.org Надеюсь меня за это не забанят.
No. 25038  
#!/usr/bin/env python3

a = "WTF"
b = "WTF"
print(a is b) # False
print(a == b) # True

Ожидаю разный объект, но по факту a is b является истиной.

a = 9
b = 9
print(a is b)
Тоже истина.

My god, why?!
No. 25039  
H0kqlA7.png - (19.68KB, 484×374)
25039
>>25038
Шо?
No. 25040  
>>25039
is сравнивает объекты, на которые ссылаются имена? Почему a и b получили один объект? Я ожидал разные.
No. 25042  
>>25040
is сравнивает ссылки.
В 3.7
In [1]: a = 1

In [2]: b = 2

In [3]: id(a)
Out[3]: 4529736784

In [4]: id(b)
Out[4]: 4529736816

In [5]: a is b
Out[5]: False

В 3.9

In [1]: a = 1

In [2]: b = 2

In [3]: id(a)
Out[3]: 4543162672

In [4]: id(b)
Out[4]: 4543162672

In [5]: a is b
Out[5]: True

In [6]:
No. 25043  
>>25042
Ой, у меня руки кудрявые. В 3.7 простые типы тоже не берут новый участок памяти, а ссылаются на существующий.
No. 25045  
Реквистирую ооп экспертов, мобильных экспертов и мобильнооопшных няш

В общем-то хочу:
1. Запилить очередной чаноклиент или крайне схожую по функционалу штуку. Кроссплатформ или андроид-онли
2. Написать в труЪ ооп стиле, в полноценной реализации которого я никогда не писал, но вроде-как знаю основные концепции (ооп иерархию там, суперкласс, абстрактный класс...)
3. Не трахаться с какими-то плагинами и сдк, желательно не иметь в маст-хевах андроид-студию (До этого пытался попинывать RN и Flutter, бошка начинала болеть ещё на стадии открытия на виртуальном девайсе (ну и хеллоу ворлды показались какими-то не теми, чего хотел бы))

Насколько я понял, выбор стоит между Kotlin и Java
Буду признателен получить если не советы, то хотя бы %языкнейм% и %фреймворкнейм%, куда копать чайнику
No. 25049  
>>25045
Я не знаю, что тут консультировать касательно клиента для борд: выглядит как влажные мечты, извини за прямоту. Хочу строить космические ракеты, есть опыт запуск фейерверков.
Если твои цели освоить тру-ООП, то учи Java, для начала в отрыве от мобильной разработки, хорошего обучающего материала по ней выше крыши. Затем уже начинай изучать нативную разработку под Андроид.
Флаттер - не золотая пуля. У соседнего отдела на нем мобильное приложение, и я порой вижу таски в трекере уровня "Нельзя нажать кнопку на iOS, потому что ее перекрывает несворачиваемая клавиатура". Кросс-платформ все равно требует костылей.
No. 25050  
>>25049
> освоить тру-ООП, то учи Java, для начала в отрыве от мобильной разработки
Или с# aka Java от Mircosoft.
Тоже полностью объектно-ориентированный язык.
мимошарпоёб
No. 25051  
>>25045
Постараюсь дать совет в контексте конкретно того что ты хочешь сделать.
Ты хочешь мобильное приложение сделанное по канонам ООП. Давай для начала в контексте андройда.

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

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

Самые популярные схемы тут такие:
Я бы сказал, что для чан-клиента, которому придётся в качестве "бэкендов" иметь кучу чанов на разных движках подойдет как раз MVVM, который для схожих целей и придумывали.

Вот, держи пример, как собирать приложение по MVVM-схеме под андройд (Котлин):
https://medium.com/hongbeomi-dev/create-android-app-with-mvvm-pattern-simply-using-android-architecture-component-529d983eaabe
Вроде реализация не выглядит как "я только создал пустой проект, а уже устал"

И готовое приложение, сделанное по этому гайду "на посмотреть":
https://github.com/hongbeomi/HarryPotter

Дополнительно, держи неплохую шпаргалку по всему ООП в принципе:
https://www.oodesign.com/

Надеюсь, что я правильно понял что ты хочешь, если что - уточняй.
No. 25066  
Всех с наступающим Новым Годом!

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

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

Всем хорошего кода в Новом Году.
No. 25069  
Имеется lua 5.1.
Хотим получить список из трех списков, делаем:
return foo(), bar(), baz()
Обламываемся, потому что у первых двух списков обрезаются все значения, кроме первого. Извращения вроде этого работают (table_merge тупо вызывает table.insert в цикле):
return unpack(table_merge({foo()}, table_merge({bar()}, {baz()})))

Однако восторга у меня такое решение, сами понимаете, не вызывает. Есть более вменяемый способ?
No. 25070  
>>25069
Как минимум твоё извращение можно завернуть в мета-поведение, перегрузив оператор +.

function table_merge (mytable, newtable)
      for i = 1, table.maxn(newtable) do
         table.insert(mytable, table.maxn(mytable)+1,newtable[i])
      end
      return mytable  
end

acc_table = setmetatable({ }, { __add = table_merge })
merged_table = acc_table + foo() + bar() + baz()

print("Merged tables:")
print(unpack(merged_table))

Таким образом не придется писать страшных крокодилов, хотя суть операции и не поменяется. У меня оно выводит:

Merged tables:
1    2    3    4    5    6    7    8    9

Где:

function foo ()
    return { 1, 2, 3 }
end

function bar ()
    return { 4, 5 }
end

function baz ()
    return { 6, 7, 8, 9 }
end

Если интересно, немного инфы по мета-таблицам здесь:
https://www.tutorialspoint.com/lua/lua_metatables.htm
No. 25072  
>>25070
>можно завернуть в мета-поведение, перегрузив оператор +.
Иными словами, кроме синтаксического сахара, который позволяет немного замаскировать это безобразие, язык, похоже, предложить ничего не может.
Ясно. Что же, спасибо и на том.

Склоняюсь к мысли написать скрипт на каком-нибудь нормальном языке, который тупо сгенерирует код на lua, уже содержащий все нужные мне списки в готовом виде.

>немного инфы здесь
За ссылку благодарю. Там, гляжу, не только эта инфа, но и вообще много полезного.
No. 25075  
>>25072
>Иными словами, кроме синтаксического сахара, который позволяет немного замаскировать это безобразие, язык, похоже, предложить ничего не может.
Не совсем так. Перейдя на версию Lua 5.3 ты бы мог воспользоваться table.move():
https://www.lua.org/manual/5.3/manual.html#pdf-table.move

function table_merge(a, b)
  local result = {table.unpack(a)}
  table.move(b, 1, #b, #result + 1, result)
  return result
end

merged_table = table_merge(table_merge(foo(), bar()), baz())

print("Merged tables:")
print(unpack(merged_table ))

Что чуть-чуть, но лучше. И тоже можно завернуть в сахар.
Вывод будет идентичный:

Merged tables:
1    2    3    4    5    6    7    8    9

No. 25080  
>>25075
>Перейдя на версию Lua 5.3
Угу, а был бы там нормальный перл, а не его кастрированное подобие, каковым по существу луа и является, так всё бы вообще работало из коробки.

Учитывая, какую нишу занимает луа: аддоны, моды к играм и пр. вспомогательные скрипты — не думаю, что у большей части тех, кто имеет с ним дело, есть возможность выбирать версию. Если конечно, они сами не являются авторами того приложения, для которого эти аддоны и пишутся.
No. 25081  
Помогите осмыслить копирование пайтона.
Вроде бы понимаю разницу меж shallow и deep копиями. Когда неизменяемый тип, то поверхностная копия прекрасно подойдёт; операция с копией просто создаст новый объект на её основе. Когда список в списке в списке... то .deepcopy() всё-всё скопирует.
Но почему .deepcopy() не нужен для самого списка? Например
a = [6, 6, 6]
b = copy.copy(a)
for num in range(len(b)):
b[num] += 3
print(a, b)

У меня сложилось ожидание, что b просто получит копию ссылки на объект [6, 6, 6]. То есть, это всё равно что b = a, потому что список это изменяемый объект. Так почему же b получил новый независимый список?
Не первый раз уже. Вроде кажется что понимаю систему имён, ссылок и объектов. Но на самом деле нет, какие-то у меня сложились неправильные представления.
No. 25082  
>>25081
>Так почему же b получил новый независимый список?

Смотри, на поверхности о том что так будет заявлено прямо в документации к copy.
>The difference between shallow and deep copying is only relevant for compound objects (objects that contain other objects, like lists or class instances.

Разберемся, почему.
>A shallow copy constructs a new compound object and then (to the extent possible) inserts references into it to the objects found in the original.

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

>If we have an immutable object (str, int, tuple, etc.), all the variables that refer to it will always see the same value, but operations that transform that value into a new value always return a new object.
>operations that transform that value into a new value always return a new object.

Поэтому, как только ты меняешь immutable элемент в списке b, ты на самом деле убираешь старый элемент и ставишь на его место новый. А в списке a он себе остается жить как жил.

Подробнее тут:
https://towardsdatascience.com/https-towardsdatascience-com-python-basics-mutable-vs-immutable-objects-829a0cb1530a

Ну и про copy и всё остальное:
https://docs.python.org/3/library/copy.html
https://docs.python.org/3/faq/programming.html?highlight=immutable#why-did-changing-list-y-also-change-list-x
No. 25083  
>>25082
О, наконец понял логику. Спасибо! Люблю вникать в такие нюансы.
No. 25084  
>>25083
Не за что, заходи.
No. 25085  
>>25083
Стало понятно что это за баковня:
a = 9

b = 9

a is b

True

print(f"{id(a)}\n{id(b)}")

9785120

9785120

Это на самом деле один и тот же объект! Это не важно для кода, поскольку a и b имеют разные ссылки = любая операция с ними присвоит им новый объект. Но это может иметь смысл для оптимизации памяти.
Более того:
a = "immutable"

# ...некоторое количество кода и операций...

c = "immutable"

a is c

True

print(f"{id(a)}\n{id(c)}")

139856783445104

139856783445104

Совсем не очевидная механика.
No. 25086  
>>25085
>a = "immutable"
># ...некоторое количество кода и операций...
>c = "immutable"
>a is c
>True

Похоже на вот эту оптимизацию компилятора / исполняемой среды:
>Python will also optimize immutable literals by storing them once, at compile time, with the bytecode in code objects
Из-за чего у тебя и получается ссылка на один и тот же объект, вместо разных.

Подробнее можно почитать тут:
https://stackoverflow.com/questions/24245324/about-the-changing-id-of-an-immutable-string

Конкретно в этом ответе:
https://stackoverflow.com/a/24245514
No. 25088  
>>25085
>Совсем не очевидная механика.
Со строками в Java ровно такая же петрушка.
No. 25142  
0183028.jpg - (137.34KB, 2048×1148)
25142
Может кто-нибудь сталкивался с такой задачей на Пайтон, что нужно в строке посчитать не просто количество подстрок, а количество последовательностей.
Например подстрока "lalala"
Поиск в строке "nyanyalalalanyanya" должен вернуть 0.
Поиск в строке "nyanyalalalalalala" должен вернуть 1, и далее.
Ситуацию усугубляет то, что подстрок много и нужно посчитать количество каждой последовательности подстрок в очень длинной-длинной строке, а НЕ каждой последовательности отдельно.

Я могу очень легко это сделать на низком уровне, проверяя символ за символом с множеством условий. Но мне хочется найти более pythonic решение, хоть задача и мягко скажем не очень осмысленная.
No. 25143  
>>25142
> а НЕ каждой последовательности отдельно
Потому что они могут накладываться друг на друга.
No. 25144  
>>25142
>>25143
А lalala задается руками, или ты сам должен по строке определить, что там есть такое повторение?
No. 25145  
>>25144
Не руками, случайное. И я немного ошибся, друг на друга она не накладываются, так что можно спокойно проверить строку на все последовательности по очереди.

Придумал такое, смешное: автозамена всех таких подстрок на '1', затем автозамена всех остальных символов на ',' и вот так
l = [l for l in s.split(',') if len(l) > 0]
получаю список строк, из длинны которых я легко получаю длину каждой последовательности! В 4 действия выходит.
No. 25146  
>>25145
Если можно все подстроки проверить по очереди и их не надо находить самостоятельно, то по идее можно просто сделать count() по подстроке?

> s = 'aaabbbcccyyybbb'
> l = ['aaa', 'bbb']
>
> c = { ll: s.count(ll) for ll in l }
> cc = { k: v for (k, v) in c.items() if v > 1 }
>
> print(c)
> print(cc)

Получится
> {'aaa': 1, 'bbb': 2}
> {'bbb': 2}
No. 25147  
>>25146
Думал что можно с count что-то намудрить, но она считает количество подстрок в целом, не придумал как с её помощью получить именно размеры последовательностей.
Ладно. Вижу что у меня ничерта не получается объяснять такие дебильные вещи, а задание я каким-то забавным образом решил, так что спасибо и на этом.
No. 25148  
>>25147
А, дошло наконец, тебе надо считать именно повторения подстроки идущие сразу друг за другом, в группах?

Тогда первое что приходит на ум - регулярки:

>import re
>s = 'bbbaaabbbcccyyybbbbbbcccdddbbbbbbbbbeeebbbbbb'
>l = ['aaa', 'bbb']

>groups = { ll: re.findall('%s{2,}'%(re.escape(ll)), s) for ll in l }
>reps = { k: [ vv.count(k) - 1 for vv in v ] for (k,v) in groups.items() }

>print(groups)
>print(reps)

Выведет

>{'aaa': [], 'bbb': ['bbbbbb', 'bbbbbbbbb', 'bbbbbb']}
>{'aaa': [], 'bbb': [1, 2, 1]}

Хотя возможно и лиховато их в таких целях использовать.
No. 25149  
>>25148
Стив Балмер, ты крутой! Очень классно уметь писать такие сложные генераторы.
No. 25150  
>>25149
Спасибо, но лучше бы я умел сводить дела к простым генераторам.
No. 25157  
А тперь объясните мне причем тут Аоба, которая дизайнер, и разработка, которая код?
No. 25163  
>>25157
>>/misc/84
No. 25164  
А где можно найти более-менее читаемое руководство по Boost Graph Library? Возникла потребность реализовать один алгоритм на графах, которого в библиотеках нет, а официальная документация читается плохо.
No. 25165  
>>25164

>более-менее читаемое руководство по Boost Graph Library
Скорее всего, это руководство ты уже нашел, но на всякий случай вот^
A well-connected C++11 Boost.Graph tutorial
https://github.com/richelbilderbeek/BoostGraphTutorial

Автор начал работать над второй версией, где должна была быть покрыта и работа с алгоритмами, но так и не закончил работу:
Boost.Graph Cookbook
Basics: https://github.com/richelbilderbeek/boost_graph_cookbook_1
Algorithms: https://github.com/mywtfmp3/boost_graph_cookbook_2

Касательно
>реализовать один алгоритм на графах, которого в библиотеках нет
На удивление не много информации на этот счет, и даже официальная документация Boost ссылается на университетскую статью от 2001 года:
https://www.boost.org/doc/libs/1_75_0/libs/graph/doc/constructing_algorithms.html
В ней рассматривается алгоритм раскраски графа.
На гитхабе есть рабочая реализация, кажется по данной же статье:
https://github.com/sk-surya/gcp-BOOST
https://github.com/sk-surya/gcp-BOOST/blob/master/src/dsatur_boost.hpp

А вот здесь другие люди самостоятельно добавили несколько алгоритмов.
Это можно использовать как референс-код, а если повезет там даже может оказаться нужный тебе:
https://github.com/longpractice/BoostGraphX/
https://github.com/leonardoarcari/arlib
https://github.com/herenvarno/bglex

Если же поискать по авторам той статьи по добавлению алгоритма в Boost:
>Copyright © 2000-2001 Jeremy Siek, Lie-Quan Lee, Andrew Lumsdaine
То быстро находится книга по Boost Graph за их же авторством:
The Boost Graph Library: User Guide and Reference Manual, Portable Documents
Но вот с наскоку найти там информацию по реализации нового алгоритма для графа мне не удалось, хотя предисловие и обещает что такое там будет.

Еще многие советуют попробовать делать свои дела с графами с помощью библиотеки LEMON graph:
https://lemon.cs.elte.hu/trac/lemon
http://lemon.cs.elte.hu/trac/lemon/browser/lemon/lemon
Возможно, нужный тебе алгоритм есть там?

По использованию LEMON также есть обзорная статья:
https://www.sciencedirect.com/science/article/pii/S1571066111000740
Также есть статья, покрывающая добавление алгоритмов, VF2, VF2++:
https://web.cs.elte.hu/egres/tr/egres-18-03.pdf
Которые позже стали частью библиотеки (возможно использовать как референс):
http://lemon.cs.elte.hu/trac/lemon/browser/lemon/lemon/vf2.h
http://lemon.cs.elte.hu/trac/lemon/browser/lemon/lemon/vf2pp.h

Уж не знаю, смог ли хоть чем-то помочь.
No. 25166  
>>25165
Спасибо! На самом деле, я пока этих мануалов не видел. Планов добавлять алгоритм в boost нет, я всего лишь бака-студент и он понадобился научнику в его работе.
No. 25167  
>>25166
О, тогда рад что смог помочь, заходи, если что.
No. 25168  
Не знаю какой финальный проект накатить на своё первое портфолио. Последним ковырял тестовое упражнение-приложение на flask, может для контраста попробовать собрать небольшой веб-форум с помощью django? До сих пор не решил куда хочу двигаться, лишь твёрдо понял что не во frontend.
А вы что думаете?
No. 25169  
>>25168

Так-то, по идее dasnboard делай. Все равно на практике будет и фронт и бэк, в разных сочетаниях. Беспроигрышный вариант имхо.
No. 25170  
lain 51.png - (1.37MB, 1520×1080)
25170
>>25169
Эй, мне нравится. Собрать небольше веб-приложение для вывода всяких данных по финансам и ценным бумагам. Пока буду ковырять изучу много нового и закреплю то что знаю.
Спасибо!
No. 25171  
>>25168
Если не секрет, то почему ты отказался от фронтэнда?
А так можешь попробовать сделать примитивную CRM: пользователи с разными ролями и возможностями, заявки (со статусами, историей и прочей мета-информацией), таймеры и оповещалки.
No. 25172  
>>25171
Не нравится frontend потому, что синтаксисы ощущаются скучными и какими-то очень грубыми на мой вкус. Но главная беда в том, что из-за своего перфекционизма я могу часами тупить над дизайном каждой рюшечки. Это чёрная дыра для моего внимания.
> CRM
Похоже что тут нужно ещё какую-то теорию изучить, dashboard вероятно будет попроще в этом плане.
No. 25188  
А можно в python как-то узнать, что ввод идёт из файла?
script.py < input.txt
Или что прописан вывод в файл?
script.py < input.txt > output.txt
Чтобы можно было обработать и сообщить юзеру справку.
No. 25189  
>>25188
>А можно в python как-то узнать, что ввод идёт из файла?
Насколько могу судить, совсем надежно это делается через модуль stat:
https://docs.python.org/3/library/stat.html#module-stat

>import os, sys, stat

>input_mode = os.fstat(sys.stdin.fileno()).st_mode
>if stat.S_ISFIFO(input_mode):
> print("stdin is piped")
>elif stat.S_ISREG(input_mode):
> print("stdin is redirected")
>else:
> print("stdin is terminal")

Аналогично можно поступить с stdout:

>output_mode = os.fstat(sys.stdout.fileno()).st_mode
>if stat.S_ISFIFO(output_mode):
> print("stdout is piped")
>elif stat.S_ISREG(output_mode):
> print("stdout is redirected")
>else:
print("stdout is terminal")

Написано по мотивам обнаруженного тут:
https://stackoverflow.com/a/13443424

Также можно спросить тип терминала из модуля sys:
https://docs.python.org/3/library/sys.html
>if sys.stdin.isatty():
> print("input is terminal")
>else:
> print("input is piped or redirected")

>if sys.stdout.isatty():
> print("output is terminal")
>else:
> print("output is piped or redirected")
Но есть нюансы с виндой, где в некоторых случаях оно возвращает True:
https://bugs.python.org/issue28654
No. 25190  
2009-02-09-142925.gif - (403.24KB, 320×240)
25190
Там это, “MangaDex” хакнули, стырив токен авторизации из утекшей базы: https://mangadex.org/index.html У меня слов нет... чего эти токены делают в базе? О_о
No. 25191  
Ew6r1L8U8AYvzyq.jpg - (430.52KB, 1483×2427)
25191
>>25189
Спасибо большое!
>>25190
Ждали хака!
No. 25192  
>>25191
С такой архитектурой ничего удивительного. И что значит «ждали»? Зачем вообще было в базе хранить сессионные данные, если любая система авторизации проектируется с учетом того, что базу могут тупо спереть, кто-то смуззи перепил?
No. 25195  
>>25191
Обращайся.

>>25190
>>25191
>>25192
Если вы хотите пообсуждать организацию чужой базы данных, не делайте это в нити для помощи новичкам. Пройдите в нить диспутов >>21353, или создайте отдельную.
No. 25196  
>>25195
Хотите сказать, что этим новичкам не надо знать, как проектируются системы авторизации, поскольку вы не верите, что они когда-нибудь станут программистами? А что вы сами тогда здесь делаете с такими мыслями, тешите своё ЧСВ играя в «многомудрого батю»?
No. 25197  
>>25196
Вот и написал бы гайд по "проектированию систем авторизации", чем скучным троллингом заниматься.
No. 25199  
>>25196
а где хранить токены7 В сессиях? Это же не очень безопасно, как мне кажется. Поделись опытом!
No. 25200  
>>25199
https://ru.wikipedia.org/wiki/JSON_Web_Token

>При использовании JWT - не требуется хранение дополнительных данных о выданных сессиях: все, что должен сделать сервер — это проверить подпись.
No. 25201  
>>25197
В прошлом треде ищи посты со словом JASPIC — там гора материала.

>>25199
Базу можно слить и зависит это от рукожопости/ушлости админа базы. Поэтому в базе вместо паролей открытым текстом хранят криптографические хэши от этих паролей. Сессионные данные хранят в памяти сервера. Хттп-сессия, как и любая другая — это строковый идентификатор для куска памяти на сервере, в котором находится информация в частности по авторизации и правам доступа. Ребут сервера — потеря всех сессий. Сессия также протухает за определённый период бездействия, обычно полчаса. Коммуникация между клиентом и сервером осуществляется по шифрованному протоколу. К сожалению, хттп-сессии не подходят для микросервисной архитектуры.

Токен авторизации (JWT, например) — это кусок данных (обычно права доступа), подписанный секретным ключом сервера авторизации, который отдаётся клиенту, и клиент с этим токеном ходит по другим серверам, которые верят тому, кто этот токен подписал. Имеет время жизни, после которого его надо обновлять. Смысл его введения — не дёргать сервер авторизации каждый раз, когда ресурсному серверу надо выяснить, кто этот клиент и какие у него права. Этих токенов всегда пара: многоразовый токен доступа с коротким временем жизни, в котором прописана информация о правах, и одноразовый токен обновления с долгим временем жизни; оба они привязаны к отпечатку клиента — браузера, ОС и устройства. Токен обновления всегда обновляется при обновлении токена доступа, чтобы злоумышленник не смог использовать лишь один токен обновления. Токен обновления никогда не передаётся ресурсным серверам. Ресурсные сервера должны быть способны проверять подлинность токена, секретный ключ должен время от времени обновляться, отсюда безопасно можно использовать лишь RS256 с парой приватного и публичного ключей: приватный никогда не выходит за пределы сервера авторизации, публичный рассылается ресурсным серверам. https://coderoad.ru/39239051/RS256-против-HS256-в-чем-разница

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

Ещё про токены: https://gist.github.com/zmts/802dc9c3510d79fd40f9dc38a12bccfc

Вообще, правило такое: если у вас монолит, вам не нужен этот гемморой с токенами. Следует помнить также, что нет ни одной безопасной реализации OAuth, а множество библиотек для JWT содержат логические ошибки и подвержены уязвимостям. https://cyberpolygon.com/ru/materials/security-of-json-web-tokens-jwt/
No. 25202  
20210320_013647.jpg - (134.72KB, 1206×802)
25202
>>25201
Спасибо за ответ
No. 25205  
>>25202
Было бы за что.

Что важно уяснить:
— токен доступа отозвать нельзя, а ресурсный сервер не в состоянии определить, кто скрывается за этим токеном, поэтому время его жизни делают длинной в несколько минут. Отсюда даже права пользователю меняются с лагом.
— токен обновления — это, по сути, сессия на сервере авторизации, содержащая информацию о том, кто этот токен получил; он живёт несколько месяцев в случае, если получивший его выпал из интернета. Потому и говорят, что не надо их хранить в базе; даже тот дровосек, @zmts, с ГитХаба замечает, что строит систему неправильно (но это же учебный пример, не так ли? ;)).
— RS256 на порядок медленнее, чем HS256. Однако, в любом случае надо всегда опасаться DoS-aтаки поддельными токенами, просто в первом случае их потребуется меньше. Обычно проверкой токенов и фильтрацией запросов занимается какая-нибудь легковесная прокся.

Далее:
— любой клиент на сервер всегда передаёт кучу дополнительных данных о себе, поэтому смысла в отпечатке на клиенте с точки зрения системы авторизации я не вижу — IP и User-Agent сервер и так получит.
— обновление публичного ключа — это такая отдельная геморройная задача, потому что надо как-то быстро уведомить ресурсные сервера о том, что ключ поменялся, иначе они будут работать со старым.
No. 25269  
Решил начать тыкать палкой функциональное программирование, для того чтобы как-то набить руку решил сам написать какие-то базовые функции, например substr, но не могу никак сообразить как это сделать, так что решил пойти еще проще и сделать функцию, которая будет из строки делать массив букв, но не могу даже это, может кто помочь?

str_to_arr :: String -> [String]

str_to_arr a

    | length a == 0 =

        []

    | length a == 1 =

        [a]

    | otherwise =

        str_to_arr (head a)


получилось сделать что-то такое, но я не понимаю как возвращать промежуточный результат
No. 25270  
>>25269
Совсем забыл, haskell
No. 25271  
>>25269
head a : str_to_arr (tail a)
На курсере есть курс Programing Languages в трёх частях; первая часть там про функциональное программирование на SML.
No. 25272  
>>25271
> :
Я преисполнился
No. 25274  
Безымянный.png - (129.63KB, 759×708)
25274
Дорогой автобус, ответь, как можно сверстать вот такую вот штуку: часть линии, находящаяся под кнопкой, прозрачна. Ну то есть да, очевидно, что легче просто сделать два div'а, один сверху, другой снизу. Но, может быть, есть способ просто сделать часть элемента прозрачной?
clip-path не подходит, он клипует элемент за границами обозначенной области, а мне нужно внутри.
No. 25275  
>>25274
Ну как бы тут есть два элемента (верхняя полу-линия и нижняя) — можно их как before и after как раз оформить. А-ля кнопка (большой тонкий круг, прозрачный круг, белый круг и иконка) — это элементы и все как хочешь, но у самого старшего родителя — есть before и after. И логично с позиционированием их будет.

Как вариант?
No. 25276  
>>25275
Просто такие же линии есть и в других блоках, я сделал их отдельным блоком на фоне.
No. 25277  
>>25274
не совсем понял твою проблему, можешь описать задание чуть очевиднее?
No. 25278  
>>25274
А нельзя сделать два clip-path от начала формы до начала кнопки и от конца формы до конца кнопки?
No. 25279  
>>25276
Если не тяжело, можешь загрузить то что верстаешь на jsfiddle, чтобы можно было посмотреть предметнее?
No. 25280  
>>25278
Предлагаешь поместить кнопку под линию и оттуда её клиповать?
>>25279
Ну вроде как вот
https://jsfiddle.net/Passanger410/65je3bmu/
No. 25281  
>>25274
Мое дело предложить — https://jsfiddle.net/82be6fqt/66/
No. 25282  
>>25281
Мне так лениво делать руками все эти вещи в каждом блоке. Видимо, придётся.
No. 25287  
>>25282
Ну, лениво — смени специальность. Верстка она про то, как с помощью изобретательности и чей-то матери слепить то, как дизайнер это увидел, и чтоб оно работало.
No. 25317  
Объясните мне одну вещь.
Я сделал себе простенький калькулятор для комплексных чисел для собственных нужд при помощи PyQt5 в PyCharm.
PyCharm создал локальное окружение и установил туда пакеты для PyQt5 отдельно. Но что бы запустить приложение не открывая PyCharm, я должен еще раз установить PyQt5, только уже глобально (sudo pip install pyqt5). Как я могу избежать вот такой установки пакетов дважды? Я с питоном позавчера только познакомился.
И заодно спрошу, насколько безнадежен мой код, мало ли, кто не поленится ответить? Но основной вопрос первый.
https://pastebin.com/u/EmErAJID/1/g7py25MU
No. 25318  
>>25317
Насколько я понимаю твой вопрос, тебе надо использовать одно и то же локальное окружение в обоих случаях. Т.е. или сказать пичарму пользоваться твоим окружением, например виртуальным, созданным с помощью virtualenv, или в терминале применить окружение пичарма перед запуском, с помощью того же virtualenv:
https://pythonbasics.org/virtualenv/

> To load your virtual environment type
> $ cd testproject
> $ bin/activate
No. 25319  
>>25318
Спасибо большое, помогло.
No. 25321  
>>25319
Не за что, приходи еще.
No. 25323  
>>25317
Почитай что такое self и как оно работает.
No. 25326  
>>25323
Я думал что-то вроде this в сиподобных, нет?
No. 25327  
>>25326
Слишком "что-то вроде", это не "ключевое слово" как this, лучше действительно почитай по ООП.
No. 25328  
>>25327
Ок, спасибо.
No. 25353  
Пробовали игровой движок Godot? Недавно про него узнал.
https://www.youtube.com/watch?v=XptlVErsL-o
https://youtu.be/3lm-veva15g?t=54

  • Как 2D, так и 3D
  • Лицензия MIT
  • Игры поддаются реверс-инжинирингу, конечно, но зато там похоже даже не требуется даже компилятор для экспорта: данные проекта просто сжимаются вместе со скриптами: https://docs.godotengine.org/ru/stable/getting_started/workflow/export/exporting_projects.html
  • Есть быстрый экспорт в Windows, Linux, Mac, iOS, Andoid, HTML5.
  • Для написания игр применяется Python-подобный скриптовый язык GDScript. Мотивы его создания: https://docs.godotengine.org/ru/stable/about/faq.html#what-were-the-motivations-behind-creating-gdscript Есть возможность использовать и другие языки. Например, C#.
  • Для шейдеров используется собственный переносимый язык, похожий на GLSL ES 3.0.

No. 25393  
Поправка: скрипты в Годо по-умолчанию экспортируются в виде байткода. Исходники не утекают. Можно безбоязненно пилить закрытые проекты.
https://godotengine.org/qa/681/is-gdscript-compiled-or-is-it-interpreted-at-runtime
https://github.com/godotengine/godot/issues/19790#issuecomment-400811901
No. 25395  
>>25353
Не пробовал, но и желания нет. В чем его отличительные особенности в сравнении с unreal и unity, кроме открытости?
No. 25397  
>>25395
Название другое. В честь пьесы Сэмюэля Беккета.
No. 25446  
>>25395
А как вообще возможно юнити и анрил поставить рядом?
No. 25463  
Хочу податься в программирование профессиональное, но не в курсе современных реалий вообще. Пожалуйста, скажите, что сейчас лично вас интересует среди рынка вакансий и над чем вы лично работаете. Сам не знаю, что востребовано и что люди делают.

Самому интересна работа с базами данных (в университете очень круто зашло, прям интересно, получал удовольствие от решения задач), очень нравится работать сейчас с Linux (FreeBSD, CentOS на работке сейчас, немного изучаю Debian дома). Вообще готов учить всё, что угодно так-то. Знаю чучуть (на уровне университета, конечно же) C#, C++, F#, Linux тоже чуть знаком. Корочка от универа есть, английский - не проблема, если речь о документациях.

Собственно, уже полтора года эникейщиком работаю в госучреждении, но слишком сильно хочу оттуда свалить из-за выкрутасов начальства с зарплатой и потому, что очень много свободного времени на работе.
No. 25464  
>>25463
Можете не отвечать, на самом деле, потому что решил учиться весьма интенсивно на back-end.

Я давно бродил вокруг да около, но да, буду копать сам. Как будут вопросы по делу - напишу.
No. 25465  
>>25463
Почитай, какие современные и/или популярные БД используются на данный момент. Почитай про их архитектуры и на каких языках они написаны. Все это перевари и подайся куда больше захотелось.

>>25446
А они разве должны друг другу мешать?
No. 25466  
>>25465
Насколько корректно их сравнивать? Нинасколько.
No. 25467  
>>25464
> потому что решил учиться весьма интенсивно на back-end.
Расскажи уж как именно учиться собираешься, что за бэкэнд? Поднимай то есть мертвый раздел с колен.
No. 25468  
>>25466
движки или бд?
No. 25469  
>>25463
> над чем вы лично работаете
Проект на PHP/Yii/AngularJS/MySql + лямбды в AWS на Node.js + мобильные приложения под андроид/apple - но это уже не я делаю. Начальство решило, что с PHP/AngularJS мы будем постепенно переходить на C#/React, на которых у нас все остальные проекты. На самом деле, если бы я не был таким мудаком, может мы бы никуда и не переходили... Кстати подняли версию PHP c 5.6 до 8.0 недавно.
В основном у нас сишарперы. Я тоже кодил на C#, пока не застрял на это проекте, изначально не нашем. Лучший проект у нас на C#/JsViews (лол). Всё пилим для американцев.

Я тоже однажды (когда ещё кодил на С#, и мы ещё тогда не использовали Entity) решил углубиться в базы данных. Решил, что у меня в нашем офисе будет такая фишка, знание T-SQL (это SQL под Майкрософтовский SQL Server). Прочитал толстую книжку Itzik Ben-Gan "T-SQL Querying". SQL запросы у нас были реально абсолютно дикие на проектах тех времён: всякие рекурсивные запросы с обобщёнными табличными выражениями, в которые ещё куча больших и маленьких кусочков вставляется в сишарпном коде. И действительно, используя полученые знания получилось одни запросы заставить работать гораздо быстрее, другие просто заставить работать (до этого они таймаутились намертво). Но в основом, на наших совсем не высоконагруженных проектах оптимизировать запросы оказалось печально. Ковыряться с Т-SQL можно очень-очень долго, и время так незаметно летит, а ускорение в несколько сот милисекунд всё равно никто не заметит.
No. 25490  
>>25468
Движки конечно. Сильно непохожи.
No. 25501  
>>25463
Если что-то знаешь, то, по-моему, лучше тебе сразу откликаться на вакансии. По-общаешься с работодателями. Если попадёшь куда джуниором, там всему и научат.
No. 25518  
EoGJIz6W4AMZ1DD.jpg - (30.63KB, 564×420)
25518
>>25467
https://roadmap.sh/backend - пока что пользуюсь этим сайтом. Пока что на уровне Internet. Часть этого учил в университете (и мне это тогда было понятно даже из уст достаточно пожилых преподавателей), поэтому видео от Computerphile заходят отлично как повторение и структурирование знаний. Пока что смотрел видео про DNS, затем What happens when you click a link, далее про NAT и IP.
Сегодня отдохну вечером, но так как на работке дофига свободного времени + моя непосредственная начальница сказала чётко и ясно, что я могу в свободное время хоть фрилансить, хоть играть, хоть учиться (а ещё она в отпуске на 3 недели), то я смотрю пока видео про теорию. На работу сисадмином-эникеем не забиваю, конечно же, она первичнее.

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

>>25469
Я сам сишарпил в университете, и мне ясно и просто всё давалось, но, опять же, успеваемость в универе слабо связана с реальными задачами. Спасибо за отклик, кстати.

>>25501
Чуть-чуть знаю, но мне бы хотелось сначала укрепить свои знания, чтоб не чистым листом приходить. Вопрос уверенности. Ну и сейчас я ещё полгода-год максимум проработаю по ряду причин на текущем месте, потом сразу пойду на работу (полгода на обучение, полгода на поиск работы + на текущем рабочем месте буду обучать нового сотрудника и подстрахую в мае на мероприятии крупном свою начальницу, если раньше не выпрут из-за конфликтов с дирекцией).
No. 25519  
backend.png - (870.35KB, 1196×3053)
25519
Собсна как-то так.
Что понимаю/с чем есть опыт работы/, то пометил зелёным, с чем знаком в теории или не до конца понимаю/понимаю основы, пометил жёлтым.
No. 25523  
>>25501
Согласен с этим Стивом. Желательно попасть в продуктовую компанию (где делают и сопровождают собственный продукт или продукты, а не делают на заказ) и где не меньше 10-15 программистов. В таком месте можно просто как на ракетной тяге прокачаться с абсолютного нуля до очень неплохого программиста буквально за 3 года.

Немножко обо мне. Я, кстати, сейчас сам не работаю. Вернее, работаю над своим андроид-приложением, которое вряд ли принесёт мне деньги или славу, но всё равно хочется доделать. А в недавнем прошлом работал в компании, где большой продукт на Java/Spring/PostgreSQL с веб-интерфейсом и еще андроид-приложением. Вообще, PostgreSQL - это довольно мейнстримовая БД в мире джавы. Её правда, обычно, используют не напрямую SQL-запросами, а через целый пирог обёркток, которые (в теории) позволяют заменять и СУБД (диалект SQL), и абстрагироваться от адреса базы и т.п.

Веб-приложением там занимался один человек из всей команды. Вообще, я не уверен, много ли вакансий на андроид. Почти все в команде были фуллстеками или бэкендщиками. Некоторые также часто занимались оперативными решениями проблем пользователей. Т.е. еще и как поддержка. Никому не рекомендую, но хорошая тренировка для мозга.
No. 25524  
Забыл еще упомянуть. Почему заменить СУБД можно только "в теории": продукт ведь обычно используется во многих экземплярах, даже если это веб. Для создания поддержки базы в актуальном состоянии каждого инстанса используются миграции (например Liquibase), которые местами, хоть это и нежелательно, обязательно будут написаны на чистом SQL, т.к. нужно будет сделать какую-то сложную манипуляцию, которую примитивный переносимый между СУБД язык не поддерживает.
No. 25527  
По сравнению с MySQL, у PostgreSQL есть особенности.
  • По-моему, в MySQL местами слабая типизация, которой нет в PostgreSQL. MySQL не запрещает сравнение строки с числом, а в постгресе запрос просто упадёт с ошибкой.
  • В PostgreSQL все индексы, кроме primary key нужно создавать самому, даже у foreign-key-полей.
Могу ошибаться, но по-моему там еще какие-то кавычки отличаются. Хотя какой-нибудь ANSI SQL-92 должен в большинстве случаев работать и там, и там.

В постгресе также есть собственный императивный язык pgScript. Его придумали садисты для мазохистов.
No. 25528  
>>25523
>Веб-приложением там занимался один человек

Ой, я имел ввиду андроид-приложением. Вебом там как раз занимались почти все. Веб был на ангуляре и бутстрапе. Бутстрап тоже кстати, я слышал, довольно популярен везде, а вот ангуляр многим не нравится. Говорят, это не модно и не молодёжно.
No. 25573  
1200px-ISO_C++_Logo_svg.png - (68.63KB, 1200×1349)
25573
Чио-тян, подскажи, пожалуйста, глупенькой девочке.
Компилятор C++ ведь компилит и обычный C?

И если да, то подскажите, пожалуйста, какой-нибудь компилятор под Android, который работает оффлан.

Нужно будет уехать на какое-то время, а нужно продолжать кое-что сделать и на руках будет только телефон.

Помоги, Чио!
No. 25574  
>>25573
Termux. Там clang.
https://android.stackexchange.com/questions/182130/use-gcc-compiler-in-termux

А вдруг библиотека какая понадобится?

Ну или вот закрытая адварь
https://play.google.com/store/apps/details?id=com.kvassyu.coding.c
No. 25576  
CpdHq3BXEAEFJL1.jpg - (80.74KB, 1280×720)
25576
>>25574
> Termux
А как этим пользоваться?
Это ведь не IDE?
No. 25577  
Что-то на этот Termux ничего не устанавливается.
Ни vim, ни clang, ни gcc. Ничего не работает.
No. 25578  
>>25576
Это прям "линукс на коленке"
https://play.google.com/store/apps/details?id=com.termux

Т.е. подразумевается что ты будешь поступать по-дедовски:
1. Написал код в редакторе
2. Скомпилировал и слинковал командами в терминале
3. В терминале же и запустил

Тебе надо попроще?
No. 25579  
>>25577
Маркет вот предлагает еще
https://play.google.com/store/apps/details?id=name.antonsmirnov.android.cppdroid
No. 25580  
not-working-sad.png - (263.24KB, 2160×1764)
25580
>>25578
Сложно... Я такого не умею, линуксом не пользуюсь, а весь мой опыт только в Visual Studio Code и очень небольшой.
А тут даже устанавливаться ничего не хочется почему-то.

Вроде бы компиляторы из Google Play понимают и C, и C++. На основные библиотеки не ругаются. Это обнадеживает немножечко.
No. 25581  
>>25580
apt update
Затем повторить установку, ничего сложного вроде бы нет, кстати если опыт крайне небольшой, зачем ставим vim?
No. 25582  
thank you.gif - (3.67MB, 498×392)
25582
>>25581
Что-то у меня толком не работает это всё. И скорее всего проблема даже на моей стороне, потому что у меня конченый какой-то провайдер, блокирующий всё подряд и много лишнего. А на телефоне нормально работающей прокси/VPN нету.

Но другие компиляторы, вроде, работают. Код подсвечивают. А в крайнем случае можно будет и онлайн компилятором, где-нибудь там какой-нибудь wi-fi есть.

Спасибо за помощь!
No. 25584  
>>25582
>А на телефоне нормально работающей прокси/VPN нету
Как вариант - стунеллируй ВПН в своей сети на роутере, подключись к роутеру телефоном и всё скачай что надо.
No. 25585  
kgndj48iohr41.jpg - (401.70KB, 2074×2048)
25585
Итак, откопал канал freeCodeCamp с огромным количеством обучающих и вообще объясняющих видео на тему компухтерных штук.

Сейчас смотрю про администрирование сервера на Linux (в основном работает человек на Ubuntu, но затрагивает CentOS и Debian), прямо про основы (последовательность загрузки, модули и kernel, кручение-верчение конфигурационных файлов, базовая настройка сети и network bonding, file systems и их особенности в Unix-системах, дальше не смотрел).

https://www.youtube.com/watch?v=WMy3OzvBWc0 - собсна про Linux'ы (вдруг кому интересно будет).

Параллельно решаю задачки на Codewars на C#, планирую перейти на другой язык, но пока не знаю, какой; потом пойду копать в эту строну, а сейчас видео на пять с половиной часов на тему линуксов.

Это я ( >>25519 ) к тому, что в процессе учёбы, просто завал в жизни и на работке. Не всегда могу отвечать.
No. 25588  
>>25585
> планирую перейти на другой язык, но пока не знаю, какой
Моё уважение.
No. 25617  
Случайно наткнулся на язык под названием grue groovy. Точнее, на некую лютую хрень с говорящим именем грабля (gradle), а там пошло-поехало…

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

…И как мне, в случае чего, это сделать? Вот, допустим, хочу я добавить подсветку его синтаксиса в свой любимый текстовый редактор. Вообще-то она там есть, но совершенно отвратительного качества и работает неправильно.
Может кто-нибудь предложить вменяемый регексп, который бы отличал строки вида /foo/ от операций вида foo/bar? У меня самого вырисовываются монструозные конструкции с обратным просмотром и перебором кучи вариантов того, что может и чего не может быть перед строкой. Работающие очень ненадежно, к тому же.
No. 25618  
252067.jpg - (177.86KB, 1024×768)
25618
>>25617
Caque, caque, арифметическое выражение не может начинаться со знака деления, значит это строка.
No. 25619  
>>25617
>Вместо кавычек в нем на концах строк можно юзать слеш. Но и для деления используется он же.
>И возник у меня вопрос — как, черт возьми, лексический анализатор отличает одно от другого?
Благодаря абстрактному синтаксическому дереву:
https://en.wikipedia.org/wiki/Abstract_syntax_tree
Именно по этому дереву, в порядке приоритетов и происходит парсинг / анализ конструкций языка.
Базово здесь указано что, внутри чего, и в каком порядке нужно искать.

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

>>25619
>абстрактному синтаксическому дереву
Т.е. лексический анализатор здесь в общем случае не справится, нужен синтаксический?

>дерево, с указанными приоритетами групп и отдельных блоков есть где-то в спецификации Groovy (быстро найти не смог, прости).
Вот я тоже что-то ничего подобного на нашел. И ebnf для этого языка тоже не нашел. А было бы интересно поглядеть…
No. 25621  
>>25618
>арифметическое выражение не может начинаться со знака деления, значит это строка
def a = foo

/bar/
baz

No. 25622  
>>25620
Как-то так:
Выражение ::= Арифметика | Строка | Литерал | Идентификатор) ;
Арифметика ::= (Сложение | Вычитание | Умножение | Деление | Степень | Скобки) ;
Скобки ::= '(' Арифметика ')' ;
Строка ::= ('/' Строковые_Символы '/' | Идентификатор) (Конкатенация)? ;
Конкатенация ::= ('&' Строка) ;
На каждом этапе разбора каждого токена имеется свой ограниченный набор вариантов. Разбор корректности деления строки на число в задачи синтаксического анализатора не входит — это проблема семантики.
>Т.е. лексический анализатор здесь в общем случае не справится
Лексер генерирует поток токенов из потока символов. Это не его задача — разбирать синтаксис или семантику.
No. 25623  
>>25622
З.Ы.: Если углубляться, то лексер выплюнул токен '/' в синтаксический анализатор, тот воткнулся в строку, пнул лексер, чтобы делал строковый литерал и откатился на исходную. Т.е. оно ещё и со стейтом получается, и с обратной связью. Предложите проще, если сможете.
No. 25624  
>>25623
В общем, иными словами, прикрутить корректно работающую расцветку синтаксиса для этого языка в редакторе, у которого эта расцветка описывается простыми блоками/регекспами, толком не получится.
Пичаль.
No. 25625  
Хм.
Я правильно понимаю, что выше только что был приведен пример языка, который не описывается контекстно-свободной грамматикой?
No. 25626  
>>25624
Вам надо описать все случаи, когда токен '/' не может быть знаком деления. Для оставшихся случаев определить, где заканчивается строковый литерал.

>>25625
Да, здесь один символ обозначает разные вещи в зависимости от контекста применения.
No. 25632  
Какой яп быстрый и маленький?
No. 25634  
>>25632
Напрашивается ответ настолько же очевидный, насколько и бесполезный для того, кто на полном серьёзе мог бы задать такой вопрос…
No. 25635  
>>25634
Ну мало ли есть что-то меньше или быстрее ассемблера.
No. 25636  
>>25635
Машинный код и легче и быстрее ассемблера. Начинай со схем и электротехники(в принципе по хорошему именно так стоит учиться если есть желание приобрести фундаментальные знания).
No. 25637  
>>25636
А они обязательны?
No. 25638  
>>25637
Нет конечно, но такая база однозначно лишней нигде не будет по определению.
No. 25639  
>>25638
А он сложный?
No. 25640  
Хочу напомнить.
https://xkcd.com/378/
No. 25641  
>>25632
Тебе он для чего?
No. 25642  
>>25641
Просто выучить, все равно время некуда девать.
No. 25643  
>>25642
Это твой первый язык? Если не знаешь JavaScript, можешь его выучить. Чтобы начать, вообще ничего устанавливать не надо, жмёшь на F12 в браузере, и можно кодить. Большое сообщество разработчиков, его вообще все знаю, на все вопросы, которые у тебя могут возникуть уже есть ответы. Для того что бы писать какие-то мелкие утилиты вроде достать что-то из базы, обработать, запихнуть в csv, его хватает, очень удобно.
No. 25644  
>>25643
Чуть знаю С
No. 25646  
>>25643
JS не является ни легким в изучении ни "маленьким".
No. 25647  
>>25644
Без более менее конкретной цели тяжело что-то посоветовать.
No. 25649  
>>25646
Да ладно, чего там сложного? Прототипы и замыкания?
Все остальные варианты - просто ещё один язык, а JavaScript - единственный язык веба (пока WASM не очень распространён). Для изучения ради траты времени самое то.
No. 25650  
>>25644
Сишенька муторный и медленный язык с точки зрения скорости разработки, особенно чего-то стабильного и более быстрого, но по-своему няшный в своей простоте и низкоуровневости, а в данном случае ещё и в том, что (в связке с asm и kernelspace-ом) даёт некоторое представление об устройстве вещей. Можно ближе ознакомиться с C и со связанными контекстами применения. После этого обязательно стоит после ознакомиться с высокоуровневыми языками с их библиотеками и их фичами (компонентные модели, reflections, etc.), ибо это другая половина устройства вещей.
No. 25651  
>>25647
Цели? Не знаю, может в будущем зарабатывать, может просто писать приложение для просмотра картинок или чего-то подобного.
No. 25652  
>>25649
В архитектуре языка имеются очевидные изъяны, скажем так, кроме того прототипная модель наследования далеко не самая простая для понимания. Тем не менее, если человек просит показать ему рандомный язык "чтобы выучить" то почему бы и нет, согласен. С тем же успехом можно советовать питон, паскаль, smallbasic, sql.
No. 25653  
>>25651
>приложение для просмотра картинок
Кресты сразу учи тогда.
No. 25654  
>>25653
>Не знаю, может в будущем зарабатывать, может просто писать приложение для просмотра картинок или чего-то подобного.
Мне кажется, тогда действительно стоит обратить внимание на:
  • JavaScript, как выше советовали. Easy to learn, difficult to master, сейчас с его помощью делают почти всё, включая мобильные и десктопные приложения.
  • Python. Тоже easy to learn, difficult to master. На нем не так удобно делать всё, как на JS, но это сейчас стандартный язык для работы с нейросетями и аишечками, пригодится в будущем.

No. 25656  
>>25654
Приложение для просмотра картинок на питоне писать конечно можно но наверное все таки не стоит(если конечно под просмотром не имеется в виду скачивание). Хотя если все делается из чистой любви к искусству то почему бы и нет.
No. 25657  
Получается питон учить?
No. 25658  
>>25654
> На нем не так удобно делать всё, как на JS
Какой наброс!
No. 25659  
>>25657
>Получается питон учить?
Как минимум попробовать, и посмотреть как пойдет, в смысле понравится/не понравится.
No. 25689  
metanit для ознакомления с языком нормальный или нет? Просто мне не нужно глубоких знаний, просто с концепциями ознакомится, без тонн лирики и воды, которые часто есть в книгах.
No. 25690  
>>25689
С каким языком?
No. 25691  
>>25689
https://pythontutor.ru/
No. 25692  
>>25690
C.
No. 25707  
Можете, пожалуйста, скинуть книги по кластерному анализу, где объясняется хорошо и подробно, что это такое и как это писать.
No. 25708  
>>25707
С датамайнингом всё как всегда, искать и разбираться приходится по крошкам.

>объясняется хорошо и подробно, что это такое
Есть вот книга Introduction to Datamining:
https://www-users.cse.umn.edu/~kumar001/dmbook/index.php
В частности её вводная глава по кластерингу:
https://www-users.cse.umn.edu/~kumar001/dmbook/ch7_clustering.pdf

И еще есть вот такой вот туториал (сохранился только в архиве):
https://web.archive.org/web/20121225113510/http://home.dei.polimi.it/matteucc/Clustering/tutorial_html/

>как это писать
Пока не нашел ничего лучше чем "подсмотреть у тех, кто уже написал", например вот:
https://github.com/thanSkourtan/Cluster-Analysis-Algorithms (Python)
https://github.com/alinarsln/clusters_analysis (C++)
https://github.com/annoviko/pyclustering (Python, C++)
No. 25711  
Как правильно разрабатывать циклы? Вот я понял что такое инвариант цикла, но он неочевиден и подбирать его долго. Быстрее общеизвестным способом проб и ошибок получится составить правильный алгоритм.
No. 25715  
Нужно максимально быстро изучать питон до уровня пользования openCV. По каким книгам можно это сделать?
No. 25716  
>>25715
Ох, новичок?
No. 25717  
>>25716
Да.
No. 25718  
>>25717
Так ты не книгу просишь а методику изучения целую. "Максимально быстро" с абсолютного нуля займет месяца 4 в лучшем случае, при условии ежуденевного обучения 4-6 часов, т.к. чтобы начать работать с данной технологией знания нужны начальные. Подойдет почти любая книга для начинающих.
No. 25719  
>>25715
>Нужно максимально быстро изучать питон до уровня пользования openCV
В первую очередь, если ты хочешь стать пользователем openCV, тебе нужен туториал по openCV. Например, официальный: https://docs.opencv.org/master/d9/df8/tutorial_root.html

Конечно, прежде чем разбираться со средой, необходимой для openCV, тебе надо разобраться с тем, как разворачивать типичную Python среду, с virtualenv, pip, вот этим всем, и банально уметь сделать хоть что-то на питоне. Для этого специально создали сайт по базовому вхождению в Python: https://pythonbasics.org/

Рекомендую начать с него там даже чуть-чуть по Machine Learning есть, а затем перейти непосредственно к туториалу по openCV. Я думаю это и будет максимально быстрый путь.
No. 25720  
>>25711
Мне кажется, это тот самый случай когда мы сравниваем чисто прикладное создание алгоритма с чисто аналитическим проектированием алгоритма.

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

Длинный ответ: делать методом проб и ошибок - это чисто прикладной способ. Быстрый поиск показывает что обычно и преподают в такой прикладной манере, мол, вот вам инструменты, сделайте с ними что-нибудь.

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

Как быть? Можно, конечно, написать огромную базу тестов, и оперировать статистикой, и так тоже обязательно сделают, но никто не сможет гарантировать что тестовая база покрывает все возможные ситуации, и инженеры не пропустили какие-то граничные значения параметров. Как же тогда вот прям гарантировать правильность алгоритма? Только доказав эту правильность аналитически, на уровне теории. Для этого и были разработаны подобные аналитические инструменты: они громоздкие, да, но дают уверенность, однозначность и определенность там, где это важно.

Еще этими инструментами могут воспользоваться подкованные в теории люди, не обладающие прикладными навыками, что в 2021, конечно, трудно представить.
No. 25749  
unknown_2021_10_07-18_10.png - (61.93KB, 2560×1080)
25749
Итак, в свой отпуск сделал свою вакансию, закинул и жду.
Пишет hr, мол, драсьте, вот Вас нашла, заинтересовалась. Мы пишем что-то там на C++, вот примеры проектов и т.д., ищем стажёров для обучения.

Отослали задание, достаточно простое. Сделал его, собственно, код потестировал.

Спустя две недели пишут чёткий отказ и расплывчатое про с++: "много ошибок, либо выбран неверный подход, так что код не компилится". Пишет hr, собственно, так что нет так нет. Сохраню говнокод для истории.

Я знаю, что знания (ага) у меня на уровне джуника-стажёра, как бы не секрет. Но почему код-то не компилится?

Задачка была такая: на вход подаётся строка: это[тест[ова[я]]]ст[ро]к[а]. Сделать функцию, которая возвращает следующие данные:
{
тест[ова[я]],
ова[я],
я,
ро,
а
}
То есть, надо вытащить то, что в квадратных скобках, при этом они могут иметь вложенность и т.д.
Так или иначе, пара вопросов:
1. Код компилится только у меня одного, или что?
2. Что они хотели, и как выглядит "верный" подход? Там регулярные выражения они хотели от меня увидеть, или что-то другое?

>>25585-кун
No. 25752  
>>23830
Ы!
No. 25754  
>>25749
Разумеется, никто не примет на работу человека, кидающего screenshot вместо кода.
No. 25755  
hw_cpp.txt - (960B)
25755
>>25754
>Скинь, пожалуйста, код в текстовом формате
Да, держи.
No. 25756  
>>25749

>1. Код компилится только у меня одного, или что?
Ideone компилит без всяких проблем.

Обычно когда нормальный с виду код вдруг совсем не компилится с кучей ошибок, при условии что среда настроена правильно, дело в каких-нибудь переносах строк CR/LF, один из которых компилятор вдруг символом начинает считать.

Иногда еще мешают кодировки.

>2. Что они хотели, и как выглядит "верный" подход?
Уж не знаю, что они точно хотели, но возможно - вывод результата в stdout, про который ты забыл.

Чтобы вывести, надо добавить импорт:
#include <iterator>


И потом скопировать твой вектор out в stdout внутри main():
int main()

{
    std::vector<string> out;
    string input, temp;
    std::cin >> input;
    out = extract(input);
    std::copy(out.begin(), out.end(), std::ostream_iterator<string>(std::cout, "\n"));
    return 0;
}


Тогда в выводе будет:

    Success    #stdin #stdout 0.01s 5544KB

    тест[ова[я]]
    ова[я]
    я
    ро
    а

А сейчас в стандартном выводе пусто.
На всякий случай, вот тебе ideone с этим исправлением:
https://ideone.com/twxPnj

Чтобы узнать точно что они хотели, надо задать им наводящих вопросов. Можно еще принести точный текст заданию сюда, но это менее эффективно.
No. 25757  
>>25749
Рекурсии нет, понять, что делает этот код довольно сложно. Ситуация с отсутствием парной скобки не обработана, выкинется исключение.

З.Ы.: Аферисты никогда не просчитывают последствия своих действий, надеясь, что пронесёт. Программисты тоже часто пишут код, который работает только на одном, ожидаемом, кейсе.
No. 25758  
>>25757
Если ничего, кроме ожидаемых случаев прийти не может, то отсутствие проверок на адекватность ввода более чем допустимо и даже нужно.
No. 25759  
>>25756
Спасибо. Написал им письмо с просьбой узнать, какой подход им нужен был, жду ответа.
Что касается вывода, то я строго следовал заданию: написать функцию, которая возвращает строчки.
Так или иначе, спасибо за развёрнутый ответ.

>>25757
Про эксепшон спасибо. И насчёт рекурсии тоже, кстати, думал, но почему-то знаний не хватило для того, чтобы придумать алгоритм. Подумаю на досуге как раз. Спасибо.
No. 25760  
>>25759
А тестировать вами написанное им как? За вас ручками вывод писать? Ведь поскольку сигнатура функции в задании строго не оговорена, вряд ли у них есть система, добавляющая такой вывод при тестировании автоматически. А если такая система есть, то к чему в высланном им коде main с вводом?
Точно бы не нанял. No common sense.

А так, следовало бы ещё спросить среду, в которой они это дело тестируют, и чем они это дело компилировали; если ограничения на ввод вам известны.
No. 25761  
>>25759
>Спасибо. Написал им письмо с просьбой узнать, какой подход им нужен был, жду ответа.
Я надеюсь ты им отправил и ссылку на ideone, чтобы показать что всё как бы работает.
No. 25764  
>>25758
Это справедливо тогда и только тогда, когда вы — единственный автор ввода, — и точно знаете, что делаете, т.е. ввод у вас чётко формализован. Но даже в этом случае всё утыкивается assert-ами для отладки.
No. 25768  
Хочу и довожу до вашего сведения, что на момент написания этого сообщения в РФ действует программа обучения IT-профессиям с господдержкой — 50 % стоимости обучения оплачивает государство. Обучиться могут совершеннолетние граждане, имеющие диплом, в котором написано «специальность». По окончанию обучение выдаётся диплом о профессиональной переподготовке. Подробнее на https://xn--b1agajda1bcigeoa6ahw4g.xn--p1ai/ Обучение в Сбербанке на Жабо-кодера стоит где-то 50 тыр.
No. 25798  
Наткнулся на проект на языке kotlin, заинтересовался, что это за зверь такой. Стал смотреть — на первый взгляд всё очень здорово и красиво. А потом обнаружил замечательное:

https://kotlinlang.org/docs/coding-conventions.html
>In Kotlin, semicolons are optional, and therefore line breaks are significant. The language design assumes Java-style braces, and you may encounter surprising behavior if you try to use a different formatting style.
Ну… не стану здесь высказывать свое мнение о том, что стоило бы сделать с очередными разработчиками языка, которые whitespace делают критически важной его частью (таких, к сожалению, очень много. Один питон чего стоит). В конце концов это дело вкуса, кто-то может даже считать, что это наоборот правильно. И метки комментария следует ставить только на шестой позиции перфокарты.

Но здесь мне даже стало интересно. В каких именно случаях перевод строки перед '{' приводит к проблемам?

Очевидно, что если речь идет обо всяких for/if, то результат будет плачевным. А вот если, скажем, начать с новой строки блок с телом функции или класса — то как язык на это отреагирует? (мне кажется — должен съесть. Или всё же может принять за что-то другое?) А если то же самое, но внутри выражения, которое чему-то присваивается или куда-то передаётся? (вот здесь, наверное, уже могут быть проблемы...)
No. 25799  
>>25798
Если этот проект - библиотека, то если автор подсуетится, можно будет использовать ее из джаваскрипта, например.
No. 25800  
>>25798
> А вот если, скажем
Правильный ответ на этот вопрос: лучше установить IDEA и делать, как она подсказывает и использовать автоформат. Если будут косяки, среда разработки поправит. Она еще и перефразировать может целые куски. Внимательно читаем подсказки.
У них есть бесплатная Community Edition с урезанными фичами (касается в основном поддержки всяких фреймворков и веб-серверов).
No. 25801  
>>25800
Угу. Не барское это дело — географию учить. Извозчик довезёт.
No. 25802  
>>25801
всё правильно
No. 25803  
>>25798
>В каких именно случаях перевод строки перед '{' приводит к проблемам?
Добро пожаловать в увлекательный мир синтаксических деревьев!
Собственно, ANTLR-дерево языка - это лучший способ узнать, какие конструкции допустимы, а какие заставят парсер поперхнуться.

Начинать свои исследования в контексте грамматики Kotlin лучше отсюда:
https://kotlinlang.org/docs/reference/grammar.html

Мануал проведет тебя по дереву из репозитория со спекой:
https://github.com/Kotlin/kotlin-spec/tree/release/grammar/src/main/antlr

В частности, сразу можно увидеть что переносы строк \r\n ожидаются в трёх базовых токенах:
>ShebangLine
>LineComment
>Identifier
От них и следует начинать свои поиски.

Чтобы поэкспериментировать с синтаксисом, не притаскивая к себе весь Котлин, можно воспользоваться вот этими грамматическими утилитами: https://github.com/Kotlin/grammar-tools

https://github.com/Kotlin/kotlin-spec/tree/release/grammar#artifacts обещает что jar-ники с этими утилитами доступны из TeamCity.
No. 25805  
>>25803
О, хоть один нормальный ответ. Спасибо.
А то после предыдущих "советов" я уж решил было, что дело тут совсем плохо…
No. 25806  
>>25805
Заходи если что.
No. 25857  
Возможно ли LaTeX или XeLaTex сделать греческий алфавит шрифтом Times New Roman? Меня выгрызают делать именно этим шрифтом, а я упорно не хочу запускать виндовс. Да и запустится ли он спустя столько времени?
No. 25859  
>>25857
Расскажи чуть подробнее о своей проблеме, а то вроде бы
> \usepackage{newtxtext} for text and \usepackage{newtxmath} for math
А как я понимаю, греческий алфавит тебе для math и нужен.
> There are also several older implementations available, such as \usepackage{times} for text and \usepackage{mathptmx} for math

https://tex.stackexchange.com/a/317559
https://tex.stackexchange.com/a/498751
No. 25863  
>>25859
Прошу прощения за ложную тревогу, просто я глупая собака.
Не надо читать стак, надо читать оффициальную™ документацию. Для решения моей задачи достаточно сделать
\usepackage{mathspec} %instead of fontspec
\setallmainfonts{Times New Roman}
Где линукс на каптче???
No. 25864  
>>25863
Спасибо что отписал как это делается, прости что ничем не помогли.
No. 25866  
86535037_p0.jpg - (426.89KB, 600×841)
25866
>>25864
Вас нужно обнять.
No. 25874  
Привет, Ычан! Скоро третий курс у меня, а значиь практики и т.д. Я уже успел потыкать поверхностно большинство популярных языков программирования (конкретно java, python, go, c, haskell, scheme, lisp) и понял, что интерес лежит в сторону функциональных языков. Я бы хотел расти как программист с них, коммерчески тоже, ну и собственно вопрос; Такая идея имеет право на жизнь? Делая фокус на функциональные языки можно ли найти работу студенту, если есть желание?
No. 25875  
>>25874
Дорогуша, а чем вы занимались первые два курса?
No. 25876  
>>25875

Дискретная математика, алгоритмы и типы данных поверхностно (у нас она называлась введение в специальность и использовали мы с++), остальное уже не теме программирования было.
А к чему вопрос?
No. 25877  
>>25874
Но это Автобус.
No. 25878  
>>25874
>Делая фокус на функциональные языки можно ли найти работу студенту, если есть желание?
Спрос на функциональщину существует. И на чистую тоже, хотя в массе, по ощущениям - на "гибридную". За последние лет 10 многие не функциональные языки потихоньку начали вводить в себя функциональщину на базовом уровне, к которой сверху допиливается какой-нибудь функциональный фреймворк, если хочется. Некоторые языки изначально позволяют писать и функционально, и императивно, что не мешает зафункционалить их еще больше с помощью фреймворка. Известный мне пример - Scala, которая работает на JVM, позволяет и императивщину и функциональщину, и которую сейчас сверху дофункционаливают используя какой-нибудь Typelevel stack, после чего, как можно увидеть, получается функционально по всей голове: https://github.com/slouc/typelevel-stack но что при этом важнее, достаточно широко пользуется коммерчески.

>Такая идея имеет право на жизнь?
Мейнстрим программирования сейчас двигается в сторону функциональщины, так что идея твоя очень актуальная и своевременная. Расскажи какие языки будешь пробовать.
No. 25879  
>>25878
Сейчас глаз положил на sicp, там используется scheme для исполнения примеров и задач.
Плюс, поставил себе nixos, там используется haskell-о подобный язык для организации пакетов.
Еще хочу посмотреть на elixir. Сам я в коммерческой разработке не знаю насколько оно популярно, и есть ли за ним будущее, но все же он мне показался интересным. Отказоустойчивость - отличная черта языка, которую, если так подумать, должно быть желанным результатом для любого ПО, а вот конкретную приписку к языку не у каждого увидишь
No. 25899  
94071780_p0.png - (377.91KB, 559×767)
25899
Всех с наступающим Новым Годом!

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

Всем хорошего кода в Новом Году.

P.S. Анониму немного непривычно отмечать повторно в том же треде, но что поделать.
No. 25904  
15948187321.png - (393.02KB, 636×900)
25904
Можно ли в наше заработать на парсинге сайтов? Что для этого нужно уметь?
No. 25905  
>>25904
>Можно ли в наше заработать на парсинге сайтов?
Ты имеешь в виду парсинг / скреппинг веб-ресурсов?
Если да, то этот заработок всегда актуален для веб-разработчика.
Веб-ресурсы часто требуют индивидуального подхода для выковыривания информации с себя, а кому-то всегда нужна информация вот именно с того вот непокладистого ресурса без API.

>Что для этого нужно уметь?
  • Уметь писать веб-краулеры (web crawlers) в принципе
  • Уметь писать их так, чтобы они не нарушали работу ресурса / проходили по ограничениям / не попадали под контр-меры ресурса для краулеров
  • Часто, хоть и не всегда, нужно уметь писать их на браузерном / headless-браузерном движке, чтобы во время краулинга работали все скрипты, подгрузки и прочие события. Для этого нужны JavaScript, Node.js среда исполнения и краулер фреймворк по вкусу для непосредственно хождения по ресурсам
  • Очевидно нужно уметь работать с DOM, писать регексы для непосредственно выковыривания информации
  • Если в твои задачи будет входить не только создать краулер технически, но еще и собрать саму информацию, то базовая работа с удаленным сервером, проксями и VPN. Твои парсеры будут много и часто банить, и даже пока ты учишься, со своего компьютера без прокси запускать парсер точно не стоит.
Вроде, ничего не забыл. Если что, спрашивай, уточняй.
No. 25908  
>>25905
>Для этого нужны JavaScript, Node.js
Не нужно на любом драйвере в любом другом языке.
>писать регексы
If you parse HTML with regex you are giving in to Them and their blasphemous ways which doom us all to inhuman toil for the One whose Name cannot be expressed in the Basic Multilingual Plane, he comes. То есть, для распарсинга текста самого по себе неплохо. Но может лучше XML-парсер или селекторы?
No. 25909  
>>25908
>parse HTML, селекторы
это покрывает пункт
>работать с DOM
А регексы предлагается использовать по прямому назначению, для работы с выдернутым из DOM текстом.

>Не нужно на любом драйвере в любом другом языке.
Тут вопрос только в том, насколько близко тебе надо быть к настоящему браузеру, чтобы успешно скраулить сайт. Действительно, можно выбирать по задаче.
No. 25910  
1235901769258.jpg - (79.97KB, 398×600)
25910
>>25905
Да, я имею в виду именно парсинг - вытаскивание данных. Думаю что моих умений хватит чтобы после ознакомления написать парсер(python и js худо бедно знаю, хотя как мне представляется одной только библиотеки requests или в крайнем случае самого языка python вполне достаточно для всего вообще в этой сфере). С регулярками похуже, но я в любом случае собирался их учить.
Мне интереснее сколько вообще может зарабатывать новичок в этой сфере и на что станет похожа моя жизнь ежели я полностью посвящу её на какое-то время вытаскиванию данных, другими словами как будет примерно выглядеть мой персональный ад?
Еще интересно, почему некоторые люди считают такую деятельность крысятничеством, т.е. я действительно не могу уразуметь почему распарсивать данные это плохо. Как-то так.
No. 25913  
>>25910
>Мне интереснее сколько вообще может зарабатывать новичок в этой сфере
На вскидку это заработок от нескольких сотен до пары тысяч у.е, в зависимости от количества взятой на себя работы и скорости её выполнения. Поскольку у новичка будут проблемы и с тем и с другим, то заработок его будет измеряться скорее сотнями. Работа считается не престижной, и за неё часто берутся новички, поэтому платить много обычно никто не хочет.

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

>Я действительно не могу уразуметь почему распарсивать данные это плохо
Распарсивать данные само по себе не плохо, плохим может быть последующее применение данных или реализация процесса сбора. Например, некоторые ресурсы пытается парсить одновременно куча разных сборщиков, и генерировать ощутимую нагрузку и трафик. А иногда так может сделать и один плохо написанный сборщик. Владельцы ресурса, понятное дело, такому не рады. Иногда заказчики хотят парсить данные в не очень этичных целях, например для создания сайта-паразита над настоящим сайтом, это обычно какой-нибудь интернет-магазин или касса. А иногда и похуже. В целом считается просто непрестижной работой.
No. 25914  
cirnoit.png - (20.31KB, 400×450)
25914
>>25913
Но ведь это необязательно работа на бирже, существует, как я понимаю и относительно небольшое число вакансий "в штате"? А так, конечно, спасибо за ответы, мой интерес полностью удовлетворен. Как-то так я и представляю свое будущее, в лучшем случае конечно же.
No. 25915  
>>25914
Заходи, если что.

>Как я понимаю и относительно небольшое число вакансий "в штате"
Действительно, теми же задачами можно заниматься находясь в штате. Обычно в этом случае заказчиков и биржи берет на себя твой работодатель. Будь готов, что они конечно будут пытаться тебе подыскивать задачи конкретно по краулингу, но если не получится, будут предлагать и другие околовебные задачи.
No. 25936  
boorger.zip - (3.71KB)
25936
Учу питон. Написал скачивалку для непотребств с гелбуры и данбуры.
извините
No. 25937  
Не мог бы глубокоуважаемый аноним подкинуть идею - чего бы такого сотворить? Исходя из моих возможностей, о которых можно судить на основе: >>25936
No. 25939  
>>25938
>>25936
>>25937
Посмотрел на боргер, вижу два пути:

1. Усовершенствование самого боргера, т.к. есть куда улучшать. В первую очередь можно попробовать перейти с собственного построчного парсера на SAX / DOM HTML парсер:

SAX
https://docs.python.org/3/library/html.parser.html

DOM
https://www.crummy.com/software/BeautifulSoup/bs4/doc/
https://pypi.org/project/pyquery/

Заодно хороший повод разобраться с разными типами парсеров.

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

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

2. Работа над новым проектом.

Здесь нужно знать, в какую сторону ты хочешь двигаться. Я бы предложил двигаться дальше в веб, только вместо скачивалки сделать закачивалку, например - простой анонимный файлообменник типа catbox / litterbox moe, или цитатник типа bash / nya.sh, или плеер случайных видео типа w0bm.

Но я не знаю насколько ты уверен в своих силах, и интересно ли тебе идти дальше в веб вообще.
No. 25940  
>>25939
Все веб-проекты предлагается пробовать реализовать на фреймворке Django: https://docs.djangoproject.com/en/4.0/
No. 25941  
>>25940
Почему не Flask? C джангой того-этого он еще всяко успеет.
No. 25942  
>>25941
Да, ты прав, начать лучше с Flask:
https://flask.palletsprojects.com/en/2.0.x/quickstart/
25940-кун
No. 25943  
>>25936
Предлагаю научиться пользоваться:
1. Линтером, за плавающие отступы между функциями и новые строчки в конце файла дающего по рукам.
2. Комментариями, чтобы на было магических цифр в *split.
3. Словарём, чтобы имена функций были лучше чем
foo1
,
foo2
.
4. ООП, вместо того ужаса что являет собой
PageBoorger.nextUrl()
.
5. Контекст-менеджерами (
with
).
6. API сайтов вместо парсинга хтмл.
7.
click
вместо
argparse
,
requests
вместо
urllib
.
No. 25944  
Злоключения продолжаются.

Брал небольшой перерыв в обучении из-за работы и простой зажёванности из-за неё же. Перешёл с вин 10 на Fedora 35, на ней пока стараюсь делать в консоли то, что делал на винде, но с графическим интерфейсом, чтобы действительно научиться ориентироваться лучше и быстрее.
Ориентировался на разные видео на ютубе (канал tutoriaLinux) для ознакомления с темой, затем решал задачки, которые сам себе ставил (вроде настройки firewall'а для работы с домашним пк через ssh и вообще общая настройка ssh; работа с mount, fstab; работа с ps, lsof, htop и top; netstat изучал и трогал лапками). Да, я знаю, задачки простые достаточно, но я при этом стараюсь понимать, что и зачем я делаю, запоминаю теорию и применение определённых команд (что и для чего используется и что ещё умеет).

Открыл для себя AWS (посмотрел на разные сервисы там, оценил, что для чего там есть. Зарегистрировался на AWS Training & Sertification, прохожу курс по DevOps, но там пока что теория.

Codewars пока забросил.

Как-то так. Двигаюсь медленно, но как бы у меня работа с 9 до 18, так что времени и сил правда мало.

>>25585-кун-кун
No. 25947  
> API сайтов вместо парсинга хтмл
Разве danbooru предоставляет такое апи? И к чему здесь вообще это замечание?
>requests вместо urllib
То же самое по сути.

Все остальное по делу, но стоило бы осилить разметку наверное.
No. 25948  
>>25947
https://danbooru.donmai.us/wiki_pages/help:api
No. 25949  
157894316857.png - (578.71KB, 720×720)
25949
>>25948
Не совсем тот функционал же. Да и не везде такое есть, где нужно что-то забрать. В любом случае, странно просить пользоваться API когда просят оценить парсер.
No. 25950  
>>25949
Не надо насиловать сайты автоматизацией действий пользователя, когда есть нормальный функционал, а для всех бур он есть. За такое банят.
No. 25951  
>>25950
С одного хоста сайт такого маштаба не изнасиловать.
No. 25961  
Wandering Witch 039.png - (1.91MB, 1920×1080)
25961
Стив, расскажи как обычно хранятся тексты на форумах. Вот то что я написал, это теперь какой-то файл на диске сервера, или строка в базе данных, или ещё что? И как хранят ресурсы, картинки и файлы, упаковывают как-нибудь или просто на диск складывают?
No. 25962  
>>25961
>Как обычно хранятся тексты на форумах
>Вот то что я написал, это теперь какой-то файл на диске сервера, или строка в базе данных, или ещё что?
Обычно строка в базе данных.

>Как хранят ресурсы, картинки и файлы, упаковывают как-нибудь или просто на диск складывают?
В самом примитивном случае хранят в двоичном виде в базе данных, но чаще складывают на диск, чтобы не нагружать базу. Обработка разнится от сайта к сайту и по типам ресурсов. Самая популярная обработка - пережимание картинок и видео для экономии места, добавление ватермарок, удаление из картинок и видео геотегов и прочей метадаты.
No. 25963  
>>25962
Стоит сказать, что любая файловая система на диске по сути тоже разновидность базы данных, со своими кэшами, оптимизациями, кучей доступных утилит для работы с файлами, с разными доп.фичами и пределами возможностей нагружания. Допустим, чтобы не хранить десятки тысяч файлов в одной папке, их делят на подпапки по первым буквам имени файла, и тому подобное. Разные ФС и разные БД специализируются на разных сценариях использования и могут иметь встроенные механизмы сжатия или дедупликации данных.
No. 25964  
Wandering Witch 062.png - (2.34MB, 1920×1080)
25964
>>25962
>>25963
Спасибо, всё поняла!
No. 25967  
Уже давно бамп-лимит, и наконец мы сделали новую нить >>25965
Уж не знаем насколько это надо в текущем /dev/, но закрепите её вместо этой, пожалуйста.
Следующая, наверное, теперь лет через 5? ._.