[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.59923 Reply
File: 67e8f8944bb93f58364c11c646d4fc632d22989e_00.jpg
Jpg, 20.97 KB, 341×512 - Click the image to expand
edit Find source with google Find source with iqdb
67e8f8944bb93f58364c11c646d4fc632d22989e_00.jpg
В этом треде я буду описывать процесс создания моей имиджборы.
Пишу на Asp.net mvc 5.
Зачем? Чтобы улучшить свои навыки, это моя первая разработка подобного плана, потому будет много говнокода, не ругайтесь.
>> No.59925 Reply
File: Screenshot_3.jpg
Jpg, 70.60 KB, 955×516 - Click the image to expand
edit Find source with google Find source with iqdb
Screenshot_3.jpg
Из того, что уже готово:
Вывод тредов на страницу, также выводятся последние 4 поста.
Постинг.
Сегодня сделал форматирование текста по мотивам вакабы.
>> No.59926 Reply
>>59923
А ссылка на репо будет? Или программистам сюда нельзя, лол?
>> No.59927 Reply
>>59926
Да, ссылка будет, когда я доделаю все, до этого буду объяснять прямо в треде
>> No.59928 Reply
>>59927
Я как-то не вижу тогда смысла в этом треде, кроме мотивационного: "Смотрите все как я могу". И всё же, дело твоё, а начинание - похвально.
Самое главное: если держишь свой код в стороне, ты берёшь ответственность за все ошибки на этапе проектирования. Первым делом ты должен не бросаться кодить, сломя голову, а сесть и продумать структуру проекта, предусмотреть его масштабируемость, лёгкость обработки и доработки. Особенно это важно в конструкторе страницы и обработке постов - ты ведь предусмотрел меры против Racing Condition при постинге?
Если далеко уйдёшь по проекту, потом такие огрехи ну очень больно исправлять.

Пара важных вопросов. Юзаешь многопоток активно? На каком стандарте пишешь выдаваемую страничку (стардарты HTML + JS + CSS)?
>> No.59930 Reply
>>59928
> Особенно это важно в конструкторе страницы и обработке постов - ты ведь предусмотрел меры против Racing Condition при постинге?
Не совсем понимаю, что ты имеешь ввиду под Racing Condition.
> Юзаешь многопоток активно?
Нет, я больше по асинхронщине угораю.
> На каком стандарте пишешь выдаваемую страничку (стардарты HTML + JS + CSS)?
HTML5, CSS3, ES6.

Алсо, я вот все думаю, как мне сделать обработку постов, попытался вручную разбивать текст, но очень сильно ошпарился, в итоге решил прийти к проверки на серию шаблонов с помощью регулярных выражений.
>> No.59931 Reply
Наконец я доделал редактор разметки.
Работает все так:
1. Пользователь отправляет сообщение, контроллер в нем заменяет символ перехода на новую строку на тег [nwl!]
2. При выводе на страницу постов скрипт режет сообщение на строки и проверяет на наличие тегов через Contains.
3. Через регулярные выражения я получаю теги разной уровни вложенности и текст между ними.
4. Я использую полученные через регулярные выражения теги, чтобы разрезать строку на текст до и после тегов, получая список слов, передавая их в представление.
5. В представлении я проверяю строку на содержание тега и заменяю ее на HTML тег.

Таким образом я могу использовать любые теги и сколько угодно уровней вложенности, минусом может быть не самая высокая производительность из-за использования регулярки.
>> No.59932 Reply
>>59931
Алсо, можно ввести защиту от ввода [nwl!], но мне лень.
>> No.59933 Reply
File: talking_captcha.png
Png, 2.61 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
talking_captcha.png
>>59930
> Не совсем понимаю, что ты имеешь ввиду под Racing Condition.
Сам термин незнаком?
https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5_%D0%B3%D0%BE%D0%BD%D0%BA%D0%B8
Или ты про конкретно что я имею в виду? Я говорю о ситуации, когда у тебя на сервер летит большое количество постов, и ты с них пишешь данные в БД, и параллельные процессы вступают в состояние гонки - либо при попытке застолбить себе место в БД (легко обойти - на это напарываются обычно новички) или обработать информацию в ней уже позже (например, присвоение display_id - на Доброчане есть такая проблема. Видел когда-нибудь два поста с одинаковым номером? Они бывают).
> Нет, я больше по асинхронщине угораю.
- Ты любишь апельсины?
- Нет, я больше по цитрусовым угораю.
> HTML5, CSS3, ES6.
Доброе дело, хорошее дело.
Вставьте сюда стандартный сектантский совет юзать в JS let вместо var, если не знаешь разницы.
> с помощью регулярных выражений.
Ой-вей, с огнём играешь. Даже прекомпилированные регулярки могут быть офигительно медленными - слишком медленными для сервера. С другой стороны, ты не так часто будешь их дёргать. Обязательно вернись потом к этому и проведи синтетические тесты, при нужде перепиши по-людски.

>>59931
> 1. Пользователь отправляет сообщение, контроллер в нем заменяет символ перехода на новую строку на тег [nwl!]
Но зачем? Почему бы просто не искать перенос строки по его коду символа?
> 2. При выводе на страницу постов скрипт режет сообщение на строки
Убиваешь возможность мультистрочной разметки.
> и проверяет на наличие тегов через Contains.
Идея неплохая. Рекомендую попробовать разные способы уменьшения количества вызовов поиска по строке, потому что это очень дорогие функции.

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

Извиняюсь за поток сознания и путанный текст, утро раннее и условия не лучшие.
>> No.59935 Reply
>>59933
> Сам термин незнаком?
Знаком, но не встречался.
Я использую ORM Entity Framework, с контекстом данных Entity Framework я работаю через dependency injector Ninject.
Asp.Net MVC на каждый запрос создает контроллер в новом потоке, операции чтения и записи в базу данных у меня происходят асинхронно.
> легко обойти - на это напарываются обычно новички
Буду рад, если ты расскажешь, как это можно обойти.
> Убиваешь возможность мультистрочной разметки.
На Доброчане, вроде, она тоже недоступна.
>> No.59936 Reply
>>59933
Я решил поискать информацию про race condition при вставке данных и ничего не нашел.
Везде одно и тоже про редактирование данных разными пользователями.
Сегодня еще проверю, может ли такое возникнуть, попробую сделать кучу потоков, в каждом отдельный контекст, а потом получать данные и вставлять новое значение.
>> No.59937 Reply
>>59925
А как же жирный под спойлером?
>> No.59938 Reply
>>59936
Короче, потестил в 30 потоках.
Никакого race condition не происходит.
EF свободно вставил по 100 значений из каждого потока, нигде не потеряв данные.
>> No.59940 Reply
>>59937
Теперь все есть.
Немного изменил дефолтную разметку, для курсива служит двойной тег _, для зачеркивания ^.
>> No.59941 Reply
File: Screenshot_17.jpg
Jpg, 58.86 KB, 935×556
edit Find source with google Find source with iqdb
Screenshot_17.jpg
File: Screenshot_18.jpg
Jpg, 67.83 KB, 965×548
edit Find source with google Find source with iqdb
Screenshot_18.jpg

>>59940
Также допускается 4 уровня вложенности тегов.
Решил немного поработать над оптимизацией, теперь работа с текстом будет проводиться при постинге, все значения значения с разделителями будут добавляться в таблицу, а при выводе на страницу переноситься в массив и выводиться на страницу.
>> No.59942 Reply
>>59941
Также я решил реализовать систему пагинации через SQL запросы, а также разделение оп-постов и остальных тоже через sql, думаю, что лучше выполнить несколько запросов, чем получать всю таблицу и работать с ней.
>> No.59943 Reply
>>59941
А можно цвет текста запилить?
>> No.59948 Reply
>>59943
Я не знаю, как дефолтная вакаба, которой я вдохновлялся, может это делать, но добавить тегов можно, мой алгоритм расширяем.
>> No.59951 Reply
File: Screenshot_19.jpg
Jpg, 83.66 KB, 644×544 - Click the image to expand
edit Find source with google Find source with iqdb
Screenshot_19.jpg
Алсо, протестил свой алгоритм.
На моей слабенькой машине, что уже давно не тянет игры новые игры, время выполнения разнится от 0.14 до 0.30 миллисекунд.
Протестил на тексте длинной в 2558 символов и 15 тегами, время выполнения разнится от 0.30 до 0.6 миллисекунд.
Думаю, что на нормальном железе время выполнения будет в несколько раз меньше
>> No.59952 Reply
>>59951
Вчера еще заметил, что можно было написать <spoiler> и получить незакрытый тег.
Решил радикально, создал структуру с двумя полями int и string.
При внесении обычного текста в числовое поле записываю 0, при внесении тегов 1.
Это позволило сделать механизм записи легче, теперь я просто в цикле проверяю на совпадение нулю и единице и в случае единицы преобразую в html формат.
>> No.59954 Reply
Антоны, можете подсказать, как на имиджбордах работает алгоритм вывода тредов?
Все эти бампы и сообщения с сажей.
>> No.59959 Reply
File: Screenshot_45.jpg
Jpg, 79.93 KB, 1066×555 - Click the image to expand
edit Find source with google Find source with iqdb
Screenshot_45.jpg
>>59954
Реализовал как понимаю сам этот алгоритм.
Сделал все через паттерн синглтон, теперь в каждый контроллер я передаю один класс.
При отправке каждого нового поста я помещаю элемент в самое начало связанного листа, типизированного классом Thread, что состоит из двух полей - id, count, первое - это номер треда, второе - количество постов в треде.
>> No.59960 Reply
Через что можно реализовать боковую панель?
С одной стороны, лучше бы через дивы и aside, а с другой стороны смотрю я на этот ваш Доброчан, где все запилено в фрейме и выглядит так олдскульно и красиво.
>> No.59961 Reply
File: Screenshot_51.jpg
Jpg, 88.90 KB, 982×630 - Click the image to expand
edit Find source with google Find source with iqdb
Screenshot_51.jpg
Тем временем я реализовал скрипт для раскрытия картинок на странице.
>> No.59962 Reply
File: Screenshot_52.jpg
Jpg, 96.15 KB, 1318×650 - Click the image to expand
edit Find source with google Find source with iqdb
Screenshot_52.jpg
>>59961
Поправил стили для формы постинга и оптимизировал отправку постов, убрав необходимость делать лишний запрос к базе.
Теперь осталось немного доделать содержимое, страницы с ошибками
Возможность постинга нескольких картинок я добавлять наверное не буду.
>> No.59963 Reply
File: Screenshot_52.jpg
Jpg, 106.51 KB, 1103×655 - Click the image to expand
edit Find source with google Find source with iqdb
Screenshot_52.jpg
>>59962
А при нажатии на номер поста теперь появляется вот такая форма.
>> No.59970 Reply
>>59951
Алсо, проверил на другом железе с процом i5 8400, время выполнения даже на большом тексте всего 0.6 миллисекунд, что я считаю нормальным.
Разница с моим прошлым компом примерно в 10 раз.
>> No.59979 Reply
File: Безымянный.bmp
Bmp, 5838.80 KB, 1920×1038
edit Find source with google Find source with iqdb
Безымянный.bmp
File: Безымянный.png
Png, 5810.68 KB, 1920×1033
edit Find source with google Find source with iqdb
Безымянный.png
File: pagination.bmp
Bmp, 5810.68 KB, 1920×1033
edit Find source with google Find source with iqdb
pagination.bmp

>>59970
За вчера сделал:
1) Система пагинации
2) Отображение конкретного треда и переход по кнопке
3) Настроил систему маршрутизации

Теперь доделаю страницы ошибок, админпанель, немного переделаю скрипт, отвечающий за разворачивание изображения, а также реплаи на посты, вот на этом буду считать работу законченной
>> No.59986 Reply
File: D5jYD7EWkAE-945.jpg_large.jpg
Jpg, 51.42 KB, 1080×709 - Click the image to expand
edit Find source with google Find source with iqdb
D5jYD7EWkAE-945.jpg_large.jpg
Чё, потом говори, куда вкатываться, может и взлетит.


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]