Ычан: [d | b / bro / hr / l / m / mi / mu / o / ph / r / s / sci / tran / tu / tv / x | es / vg | au / tr | a / aa / c / fi / jp / rm / tan / to / vn / vo]
[Назад] [Вся нить] [Первые 100 сообщений] [Последние 50 сообщений]
Ответ в нить [Последние 50 сообщений]
Имя
Animapcha image [@] [?]
Тема   ( ответ в 23830)
Сообщение flower
Файл 
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаются файлы типов 7Z, BZ, BZ2, GIF, GZ, JPG, MO, MP3, MP4, OGG, OGV, PDF, PNG, PSD, RAR, SVG, SWF, TXT, WEBM, WEBP, XCF, ZIP размером до 5000 кБ.
  • Ныне 3587 unique user posts. Посмотреть каталог
  • Максимальное количество бампов нити: 500
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

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

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

Прошлая нить пока тонет тут: >>/dev/21641
315 сообщений пропущено. Показаны 50 последних сообщений Развернуть все изображения
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
Если вы хотите пообсуждать организацию чужой базы данных, не делайте это в нити для помощи новичкам. Пройдите в нить диспутов >>/dev/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
Ну, лениво — смени специальность. Верстка она про то, как с помощью изобретательности и чей-то матери слепить то, как дизайнер это увидел, и чтоб оно работало.
Удалить сообщение []
Пароль  
[Mod]