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

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

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

Другие тематические нити: (не стесняйтесь их поднимать)
Java: >>/dev/13949
Python: >>/dev/14767
Rust: >>/dev/16152
RenPy: >>/dev/14429

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

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

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

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

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

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

>Хочу перекатиться в бэкенд, десктоп или девопс из около-embedded
>>/dev/17045

>Хочу задачи и упражнения по алгоритмам (C, Python)
>>/dev/17105
>>/dev/17108
>>/dev/17110

>Хочу в HTML и CSS
>>/dev/17404

>Хочу вводный курс по C / C++
>>/dev/15966

>Хочу интерактивный курс по Python
>>/dev/16126

>Предложите альтернативу Python для парсеров и скриптов
>>/dev/15833

>Подскажите книги по Perl 6
>>/dev/15703

>Подскажите книгу про многопоточные сетевые приложения с POSIX API
>>/dev/17195

>Не отображаются тумбнейлы на локальной Wakaba
>>/dev/16891
No. 17443    
Файл: 150801393010.png-(530.47KB, 600×800, photo5406869797507016779.png)
17443
Ребята, читаю TCPL и это так сложно, у меня каша в голове, а я только до поинтеров дошёл.
No. 17444    
Для ссылок внутри доски /dev/ указывать необязательно.
No. 17445    
>>17443
Ты упражнения делаешь?
No. 17449    
>>17445
Да, но читаю сильно вперёд.
No. 17453    
>>17449
Сильно вперёд чего? Упражнений? Если да, то лучше так не делать, а порешать ещё упражнений до тех пор, когда всё изученное хотя бы стройно выстроится в голове. Если никак не выходит, то не переусердствуй: возможно, дальше будет этот материал понять проще.
Но главное в обучении не просто читать, а применять на практике, помни.
No. 17455    
здесь случаем нет людей, знакомых с апи этого сайта https://www.themoviedb.org/documentation/api ?
No. 17457    
>>17455
Конкретно с этим API не знаком, но выглядит достаточно прямолинейно: https://developers.themoviedb.org/3/getting-started
https://developers.themoviedb.org/3/getting-started/authentication
https://developers.themoviedb.org/3/authentication/how-do-i-generate-a-session-id

С чем у тебя возникла проблема?
No. 17458    
>>17457
здесь есть лимит по реквестам 40 на 10 секунд. но даже после минуты после превышения лимита информация по фильмам не подгружается только после перезагрузки страницы может получиться
не могу понять эту систему с лимитом
No. 17460    
>>17458
>перезагрузка страницы иногда помогает
А откуда ты тыкаешь их API? Если это браузер или фреймворк на базе безголового браузера, то ты мог попасть на кеширование AJAX-запросов. поведение похоже на твой случай
No. 17461    
>>17460
https://developers.themoviedb.org/3/getting-started/request-rate-limiting
Ну и да, официальная спека божится, что таймаут 9 секунд максимум.
No. 17462    
Файл: 150820201518.png-(522.84KB, 1366×728, 2017-10-17_03-47-28.png)
17462
>>17460
> А откуда ты тыкаешь их API?
браузер. я на сишарп вебапи сделал один метод гет, в котором использую апи того сайта
> ты мог попасть на кеширование AJAX-запросов
не понял что это значит, но я подгружаю фильмы аджаксом, да...

можешь сам сайт посмотреть, если хочешь http://movievote.azurewebsites.net/. проблема появляется, когда по страничкам переходишь
ну и еще я для каждого фильма до 3 реквестов отправляю
No. 17463    
>>17462
Я провел эксперимент - наперезагружал главную страницу несколько раз до того момента пока она стабильно перестанет подгружать информацию и одновременно с этим мониторил состояние отдаваемой информации по одному фильму:
http://movievote.azurewebsites.net/api/MovieInfo/42

>status_message "Your request count (135) is over the allowed limit of 40."
>status_message "Your request count (218) is over the allowed limit of 40."
>status_message "Your request count (187) is over the allowed limit of 40."

И так продолжалось какое-то время пока количество запросов не упало ниже лимита и информация не отдалась как нужно. Количество запросов в месседже то возрастало, то убывало.

Тебе нужно проверить, сколько запросов ты на самом деле туда отправляешь, потому что на вид выходит так, что ты сильно перекрываешь их разрешенный поток, из-за чего создается ощущение что таймаут не проходит а на самом деле ты его просто тут же выбираешь Возможно, придется реализовать программный circuit braker и устроить общение с внешним апи через него.
No. 17465    
Хранить json-строки в реляционной базе mysql - нормально или за такое сразу отрывают руки?
No. 17466    
>>17465
мне такое в прошлом треде делать предлагали, а здесь плохого не посоветуют
No. 17467    
>>17463
а можешь на сам гет метод посмотреть, пожалуйста? вот https://pastebin.com/4PPxFShB
вообще, я вебапи и парсинг джейсона плохо понимаю, может из-за этого сделал ошибку где-то
No. 17468    
>>17465
>>17466
Ну, во-первых MySQL уже даже поддерживает такой тип данных:
https://dev.mysql.com/doc/refman/5.7/en/json.html

Во-вторых, всё зависит от обстоятельств и того как устроен твой проект. Технически у тебя будет просто таблица ключ-документ. И я не вижу в этом ничего плохого. Плохое или хорошее можно будет увидеть, когда станет ясно как это будет использоваться.
Конечно, если тебе от базы не нужно реляционной части вообще, и просто страшно использовать NoSQL, типа MongoDB, то можно пожурить тебя за то что лень разобраться
No. 17469    
Файл: 150826317266.png-(112.86KB, 1680×680, Безымянный.png)
17469
>>17467
Если я правильно понял, то этот твой гет-метод запускается каждый раз при обращении к /api/MovieInfo/ххх. Если это так, то проблема у тебя в архитектуре, поскольку на каждое обновление главной твой сервер 9 раз дергает апи TMDB что им быстро надоедает. Информация при этом загружается относительно статичная. Кешируй ее на своем сервере, и обновляй по расписанию, а не при каждом обращении. И возможно не обязательно грузить ее сразу, раз она отображается только при нажатии.
No. 17470    
>>17468
Про поддержку знаю, я скорее имел ввиду теоретическую правильность. Принципы проектирования БД требует стремиться к атомарности данных, а json ее нарушает. Если говорить о конкретной задаче, то мне надо хранить сведения об объектах разных типов, причем у каждого типа свой набор сведений. Из альтернатив я вижу либо по таблице на каждый тип (придется писать кучу кода для добавления/изменения/удаления самих таблиц и столбцов), либо две таблицы (в одной id объектов, в другой id, имя свойства, значение). Оба подхода мне не очень нравятся.
В общем, раз в принципе json нормально использовать таким образом, сделаю и я так, спасибо.
No. 17471    
>>17470
>Если говорить о конкретной задаче, то мне надо хранить сведения об объектах разных типов, причем у каждого типа свой набор сведений.

Да, это как раз то для чего обычно хранят данные в "документах". Так что если нет реляционных кусков вообще, можешь использовать mongo, а если нужна какая-то реляционная работа, то храни это у себя под боком в MySQL.
No. 17472    
>>17467
>>17469
Не ругая сам код Если захочешь - поругаю код тоже

Я бы предложил:
1. Не спрашивать информацию сразу для трех локалей, а спрашивать только для текущей локали пользователя.

2. Как заметил >>17469 можно добавить кеширование успешных запросов на своей стороне, но тут есть много способов это делать. Можно сделать просто кэш на стороне сервера, можно сделать супер простой кеш в коде (но тебе надо как-то его инвалидировать и обновлять, плюс он будет отъедать оперативку). Можно пойти дальше и сделать как делают многие скрепперные сайты: сделать чтобы твой сайт брал информацию про фильмы из твоей БД, а уже в эту БД их складывал второй компонент - краулер/скреппер. Этот компонент может работать как периодически, так и реактивно, аккуратно опрашивая чужое API по всем их правилам и медленно, но верно, заполняя базу.

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

3. Можно реализовать circuit braker, который сразу начнет отсекать запросы по превышению лимита. И пропускать их когда пройдет таймаут.

4. Можно вместо этого написать простой rate limiter - т.е. компонент с очередью, который будет выполнять запросы из этой очереди и подсчитывать в реальном времени, с каким рейтом он обрабатывает запросы, если рейт превышен, то запрос повисит пока не пройдет таймаут. Можно разрешить ему выполнять N запросов одновременно.

Недостатки у этих методов - как только лимит выберется, будет создаваться ощущение что сайт тормозит.
No. 17473    
>>17469
> Кешируй ее на своем сервере
пока не знаю что это. мне в этом направлении смотреть https://metanit.com/sharp/mvc5/20.1.php ?

>>17472
> Если захочешь - поругаю код тоже
хочу
> 1. Не спрашивать информацию сразу для трех локалей, а спрашивать только для текущей локали пользователя.
здесь я для себя просто приоритеты расставил ua>ru>us, так как, можно сказать, это мой личный сайт для меня. попробую оставить только одну локаль для поиска, все равно она только на описание влияет и на постер иногда
> краулер/скреппер
что это такое?
> аккуратно опрашивая чужое API по всем их правилам и медленно, но верно, заполняя базу
как я понял, ты предлагаешь периодически тянуть информацию из их апи в собственную базу и обновлять периодически? если да, то так не получится ибо у меня база размером всего 32мб
> 3.
> 4.
у них вроде через апи можно запросить инфу о том, когда запросы снова станут доступны после превышения лимита

вообще, главная проблема в том, что после проклацивания по страничкам и использования этого лимита - ничего не подгружается даже через пару минут и вообще сайт начинает зависать. может я с логикой где-то напартачил, нужно смотреть
No. 17474    
Файл: 150827987726.png-(99.65KB, 1366×728, 2017-10-18_01-28-48.png)
17474
>>17469
я тоже перешел на эту вкладку с запросами и мне мало что понятно, но вот эти вызовы Page?page=1 и время ожидания меня немного напрягают. это нормально? если нет, то проблема, скорее всего, где-то в длаваскрипте, да?
No. 17475    
>>17469
>>17474
>>17473
черт, ребят, я все понял. после перехода на следующую страницу я заново инициализирую кнопки перехода по страничкам, то есть та же самая функция выполняется +1 раз после прокликивания
No. 17478    
>>17473
>Вообще, главная проблема в том, что после проклацивания по страничкам и использования этого лимита - ничего не подгружается даже через пару минут и вообще сайт начинает зависать. может я с логикой где-то напартачил, нужно смотреть

Попробуй тогда самую простую проверку. Сделай в своем коде так, чтобы если не проходил первый запрос 429 код ошибки они присылают, то не начинались все остальные. Посмотри что будет и сообщай о результатах.
No. 17479    
>>17473
Да, ты можешь сделать кеширование таким образом, тебе подойдет кеш на сервере. Однако это все равно не очень хорошо, поскольку нагрузка на апи хотя и снизится, но останется зависимой от посетителей и непредсказуемой. Правильно будет обращаться к апи по расписанию, соблюдая частоту запросов, и сохранять данные в свою БД, а из неё отдавать клиентам, как сказал >>17472.
32 МБ должно хватить надолго, тем более если тебе нужна не вся инфа, которую отдаёт апи.
No. 17490    
можно ли сделать так, чтобы мое сишарп приложение с функцией автозапуска свертывалось в трей при запуске компьютера? при этом, если запустить его через ярлык, например, то открывается сразу окно

есть ли какой-то универсальный способ или нужно делать какие-то костыльные счетчики?
No. 17491    
>>17490
В автозапуск суешь приложение с параметром.
Приложение.ехе -минмизед
, например. На старте проверяешь этот аргумент запуска. Проблема решена.

Алсо, позаботься о том, чтобы при запуске с ярлыка приложение не дублировало процесс вдобавок к автозапущенному.
No. 17492    
>>17491
спасибо, попробую
No. 17495    
существует ли плагин для браузера желательно хром, который позволял бы получить все джаваскрипт события выбранного хтмл-элемента?
No. 17496    
Расскажите о движке Ычана, пожалуйста,
вообще что-то я в последнее время чувствую какое-то нездоровое влечение к технологиям начала/серидины нулевых.
No. 17497    
>>17495
Для хрома, к сожалению не подскажу.
А для FF есть FireBug, к которому есть дополнение EventBug, которое кажется делает то, что ты хочешь.
No. 17498    
>>17496
Насколько мне известно, Ычан использует почти стандартный движок Wakaba Mark. Написан на Perl. Устроен так просто, что кажется, что его без труда можно самому написать за месяц.

Лучше всего знакомится сразу через исходный код:
https://github.com/hades/wakaba

Также некоторые проблемы с его установкой разбирались в этой нити >>16891
No. 17499    
>>17498
> движок Wakaba Mark
>Mark
Это разметка.
No. 17500    
>>17473
>> Если захочешь - поругаю код тоже
> хочу

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

Вот почему бы не вынести это в отдельный метод, куда параметрами идут RestClient и реквест?

            var json = JObject.Parse(clientUA.Execute(request).Content);
            if (json["total_results"] == null)
                return json;
            if (json["total_results"].Value<int>() > 0)
            {
                if (json["results"][0]["overview"].Value<string>() != "")
                    return json;
            }

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

2. Неправильная работа с URL. Сейчас ты клеишь урли кусочками строк, потому что тебе так было быстрее. Не надо так делать, это тоже возможное место для беды. Конечно, в сишарпе не очень удобные стандартные средства для работы с урлами: https://stackoverflow.com/a/14517976

Но зачем стандартные, если можно подключить удобные внешние?
https://github.com/EasyHttp/EasyHttp
No. 17501    
>>17499
Сорри, слово-паразит.
No. 17502    
>>17500
спасибо большое за советы, для меня это важно
> https://github.com/EasyHttp/EasyHttp
ты предлагаешь формировать урл-строку для запроса апи с помощью методов этой либы?
я просмотрел вики, но немного запутался... если тебя не затруднит, сформируй, пожалуйста, эту строку с помощью этой библиотеки:
https://api.themoviedb.org/3/search/{data.Extras}?page=1&query={data.Name}&api_key={key}
[Назад]
Удалить сообщение []
Пароль  
[Mod]