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

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

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

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

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

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

Пополняемая база знаний: http://pastebin.com/AGhLZppH
Cсылки на прошлые нити указывают сразу на архив

Другие тематические нити (не стесняйтесь их поднимать):
Java: >>/dev/13949
Python: >>/dev/14767
Сайтостроение: >>/dev/13701
Ren'Py: >>/dev/14429
Upwork: >>/dev/14444

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

Прошлая нить пока тонет тут: >>/dev/14160
285 сообщений пропущено. Показаны 50 последних сообщений Развернуть все изображения
No. 16769    
Файл: 150020582852.png-(83.58KB, 671×365, 2017-07-16-070555_671x365_scrot.png)
16769
Охайо.
Начал изучать программирование с NodeJS.
Решил сделать что-то типа своей бордочки. Вот такие результаты:

http://212.8.234.129/
Там ссылка на исходнички.
Как тебе, чио? Кстати, тут есть кто умеет в JS?
No. 16770    
Файл: 150020647816.png-(2.90MB, 1920×1080, 0GbfB2t.png)
16770
>>16768
>Стив, не дождавшись от тебя ответа я не сидел без дела и только что сам решил эту задачу.
молодца!
No. 16771    
>>16769
>Кстати, тут есть кто умеет в JS?
Есть, по крайней мере в тред по новым скриптам для ычана пришло достаточно много людей и несколько версий кода.

>Как тебе, чио?
Само по себе - ничего (внешний вид сейчас понятное дело самый простой из возможных) Ты как-то хочешь этот проект развивать, или просто думаешь побаловаться какое-то время? Если хочешь развивать - тебе надо двигаться в сторону всяких защит от вайпов, спама, и утилит для администрирования борды. Если ты хочешь побаловаться с целью вникнуть в программирование, то следущий шаг для тебя - сделать чтобы вместо переменной DB использовалась настоящая база данных (пускай это будет та же mongodb, например)
No. 16772    
>>16769
Еще ты можешь совместить приятное с полезным, и напилить на базе NodeJS онлайн ханафуду тут >>6903 но лучше стучать в жаббер s30092007@jabber.ru
No. 16773    
Файл: 15002078412.jpg-(94.38KB, 423×755, scared.jpg)
16773
>>16771
Я вот читал, что с помощью Redis можно сделай удобный longpolling. Типа форум, да. С лонгполлингом, да. Чтобы дальше прокачиваться в вебе там, все дела.

Штука та ещё сыровата, но хоть что-то, что не стыдно вынести на показ и спросить.

Я вообще на верном пути, то бишь?
No. 16774    
>>16773
Ну, redis - достаточно скорострельный кэш. И он очень неплохо подходит для хранения данных у которых нет особо сложной структуры (а у постов в один тред она врядли есть), но это key-value хранилище, поэтому многое зависит от того, как ты сам отструктурируешь данные. Проблемы у тебя возникнут когда тебе понадобится хранить данные в более сложных структурах, и возникнет необходимость доставать какие-то их фрагменты.
алсо добавь обязательно security-layer и аутентификацию https://redis.io/topics/security

По поводу лонг-поллинга / вебсоков - не уверен, что форуму это прямо нужно, потому что на форумы, исключая самые популярные, обычно постит 3.5 человека в час, и люди редко прямо находятся на странице пока не получат ответ, но почему нет? Это хороший повод освоить технологию.
No. 16801    
Оцените по шкале от одного до десяти (0 ― на раз-два, 10 ― невероятно, лучше продать душу дьяволу) сложность и вероятность получить работу кодером без профильного образования и возрасте, превышающем двадцать семь лет.
No. 16802    
>>16801
Первое - я знаю таких людей. Так что это возможно, и я бы сказал даже более чем.

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

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

Второй вопрос, как на твоё резюме будут смотреть HR. Тут будет знаменитый круг "нужен опыт, чтобы устроиться, но чтобы получить опыт, нужно устроиться". Это придётся обойти тем, чтобы устроиться на относительно низкую зарплату в любую местную контору, которая занимается IT только именно в IT-контору, а не в чей-то IT-отдел, проработать там хотя бы 6 месяцев, и с этим опытом уже начинать рассылать резюме по другим компаниям.
Обычно так люди свой старт в профессии и организовывают

Вердикт по шкале: 6 многое зависит от настойчивости и силы воли, т.к. придётся искать и пробовать, пробовать и искать, готовиться к собеседованиям, проходить их успешно, етц
No. 16803    
>>16802
Спасибо.
No. 16808    
>>15681
Почему нет треда про кресты?
No. 16809    
>>16808
Ну, вообще сишники здесь присутствовали, как минимум какое-то время, но отдельную нить решили не создавать.
No. 16811    
>>15697
>пик
Судя по цвету каски, просто рабочий.
No. 16812    
Нужно распарсить текстовый файл. Питон.
Имеются строки вида
Pin line_A_bottom_rx[0](n)    num AF16    type 1    width 1
, из которых нужно вытащить
line_A_bottom_rx[0](n)
и
AF16
. Теперь вопрос: как использовать захватывающие группы в питоне? То есть, строка скармливается регулярке и на выходе получается 2 строки. Как это делается?
Интересует не само регулярное выражение, а именно при помощи каких функций это реализуется в питоне (знаю только вариант с проверкой типа "соответствует/не соответствует регулярному выражению, но здесь нужно именно вытащить нужные строки в случае соответствия).
No. 16813    
>>16812
Всё, разобрался сам. findall выдаёт на выходе массив с содержимым захватывающих групп.
Вот никогда не подумал бы, что мне придётся изучать это дерьмо. Только нормального софта нет и получается быстрее освоить основы питона чем вручную вытаскивать данные из файла. Печально всё это.
No. 16814    
>>16813
> Только нормального софта нет
Под *nix для твоей задачи подошёл бы cut, под Windows для той же цели есть команда for.
No. 16815    
>>16813
>Только нормального софта нет
Если нужно просто распарсить текст с разделителями (а потом, видимо, сохранить его в каком-то другом формате), то тебе прекрасно поможет обычный табличный процессор. Excel, да-да. Все делается максимально наглядно и без написания кода.
No. 16816    
Хочу запилить полуавтоматическую считалку личного бюджета. Почему не воспользоваться готовым решением? Потому что могу. Кто-то уже делал подобное? Можете поделиться подводными камнями?

Поднял оракл, потому что PL/SQL мне всех родней и дистрибутивы под рукой. Сейчас имеются три таблички: баланс, расходы, доходы, обвешанные триггерами автоматизирующими списание средств с баланса и простенький пакет для работы с этими таблицами. Баланс держу как карта/наличка на дату, расходы/доходы как дата, сумма, тип (нал/безнал) и комментарий для аналитики.

В планах:
  • через недели две собрать аналитику по расходам, ввести типзацию вроде еда/проезд/бытовуха/вкусности
  • запилить прогноз баланса, основывающийся на среднем расходе в день за последний месяц, исключающий крупные покупки
  • очень отдаленный план: написать внешнее АПИ на каком-нибудь делфи, например

No. 16817    
>>16816
>Поднял оракл, потому что PL/SQL мне всех родней и дистрибутивы под рукой.
Представил себе SPARC Enterprise 4000 с соляркой и ODB и индус-триальный код на джаве.
No. 16818    
>>16816
>какие подводные камни
Первый - излишний перегруз логики приложения на базу данных часто именно так учат делать, но это не очень хорошо, потому что ты по факту женишься на своей базе данных, сложнее управлять кодом, сложнее апдейтить, етц В твоем случае, как я понял, ты вообще пилишь чуть ли не всё приложение на БД через процедурки и триггеры.

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

Третий - слишком формализованный ввод данных. Тут уже проблема с тем, что тебе все свои расходы надо самому же каждый раз и вбивать, ты не можешь просто отсканировать чек, и уж тем более тебе не придёт уведомление от платёжной системы. Это всё людям делать лень и быстро надоедает. Тут неплохо бы научить твою штуку хотя бы парсить и заносить в базу отчеты от платёжных систем / интернет-банка, которые ты бы мог для начала просто выгружать сам в нужное место, а твоя система их бы подхватывала. В принципе если система научится делать так, это частично компенсирует непортабельность Можно также нафантазировать, что у тебя прикручен SMS-банкинг к телефону, ты напишешь мобильный клиент, которого можно натравить на парсинг этих SMS от интернет банкинга, с занесением сначала в базу мобильного клиента, а потом с синхронизацией этого добра с основной при подключении к компутеру, например.

>API на Delphi
Расскажи хоть, что ты от этого апи хочешь. Потому что мне кажется, что устаревший делфи может быть не лучшим выбором нет, я не буду тебе жаву советовать, не переживай
No. 16819    
>>16818
> сложнее управлять кодом, сложнее апдейтить
Не совсем понял тебя, если честно. У меня неплохой опыт работы с разными серьезными и крупными биллнгами, так что не думаю, что возникнут особые проблемы с реализацией какой-либо логики на стороне БД, тем более что мне не надо учитывать бухгалтерские периоды или защищаться от обмана.

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

> Третий - слишком формализованный ввод данных.
Тут я иду на компромисс, например, поход в магазин заношу просто как "Продукты", не заморачиваясь каждой покупкой в отдельности, а если учесть что я вообще редко ем дома, то следить за таким не особо сложно. Вообще была идея граббить csv с распечаткой транзакций с сайта банка и парсить их с занесением в БД, но потом я прикинул, что делаю одну-две покупки в день и понял, что оно того не стоит.

От апишки хочу просто внешний интерфейс ввода данных, чтобы вместо того, чтобы делать
exec bill.add_purchase(317.2,'Сласти к чаю',1);
просто вызвать визард.
No. 16820    
>>16819
Ок, я понял тебя, ты инженер БД, поэтому в первую очередь с ней и работаешь.

> Вообще была идея граббить csv с распечаткой транзакций с сайта банка и парсить их с занесением в БД, но потом я прикинул, что делаю одну-две покупки в день и понял, что оно того не стоит.
Почему бы не сделать? Мелкие удобства это ж в софте приятнее всего. Может оно у тебя эволюционирует в продукт в итоге.

Ну а так, я тебе основные камни назвал, а уж индивидуальная применимость - то такое.
No. 16843    
>>16816
Репортинг ин. Наткнулся на подводный камень: транзакции в иностранной валюте, пришлось на калькуляторе(sic!) высчитывать дельту и заносить ее.
No. 16844    
>>16843
Сейчас понял насколько это было глупо, запилил процедуру для занесения дохода/расхода, основываясь на балансах переданных в нее. Вариант, конечно, костыльный, но пока пойдет; у меня операции с другими валютами это обычно ежемесячные более-менее крупные разовые переводы.
No. 17000    
Файл: 150254403059.gif-(494.76KB, 500×281, tumblr_lwj93mx72z1r2vcn2o1_r1_500.gif)
17000
Аноним провёл выездную помощь по совмещению ImageMagick, IIS и Вакабы в >>16891

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

Раздел медленный, так что пусть даты постов не пугают вас, аноним ждет ваших вопросов и кодерских находок.
No. 17037    
Файл: 150298646320.png-(21.96KB, 464×280, Merry_Go_Round_0057.png)
17037
Как выбирать язык?
Перекатываюсь с няшной.
No. 17038    
>>17037
В первую очередь по сфере применения. Что из этого ты хочешь пилить: http://410chan.org/dev/arch/res/14160.html#14354

Во вторую очередь - относительно того на чем ты пилил раньше. На чем ты пилил раньше?
No. 17040    
https://pastebin.com/3VB4m39K
На отправке сообщения с файлом кидает ошибку "Can't set headers after they are sent"
Вроде бы я разобрался, мол, ошибка в res.redirect('/section1');, который ставит хедер, поэтому если я что-то уже отправил, то новые поля уже нельзя добавлять. Но как тогда всё это чинить?
No. 17041    
>>17038
>В первую очередь по сфере применения.
Допустим, 1, 3, 7. Впрочем, интересно также писать игры для тамагочи.
Раз есть такой крутой список по сферам деятельности, почему нет списка по инструментам этих сфер?
>На чем ты пилил раньше?
На Си, около-embedded.
No. 17043    
>>17040
Насколько я могу судить по коду, суть проблемы у тебя в следующем:
  • Ты асинхронно заливаешь файл
  • Пока файл асинхронно заливается, ты идешь дальше по коду и отправляешь редирект
  • Когда файл залился, он хочет написать что-то в респонс, а респонс уже отправлен
Чтобы такого не происходило, тебе надо дождаться, чтобы файл загрузился, а потом уже по результатам писать хедеры и отправлять редирект. Обычно это делается через Promise: https://learn.javascript.ru/promise

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

Т.е. базово что-то типа
>postMyFile(req.files.sampleFile).then(result => //код который у тебя ниже отправки, reject => //код внутри обработчика ошибки отправки файла)

Еще можно взять готовую реализацию где уже есть поддержка отправки файлов: https://github.com/request/request-promise#post-like-html-forms-do
No. 17044    
>>17043
То есть нужно условие - если файл залился, то слать редирект?
No. 17045    
>>17041
>1
>Веб-приложения, back-end
Если не оглядываться на то, что ты писал раньше на Си, то бэкенд веб-приложений сейчас в основном пишется или на Python, или вообще на жаваскрипте, посредством соответствующей оснастки, например NodeJS.

В питоне порог вхождения считается очень низким, и скорее всего у тебя не будет проблем. Тем не менее, если ты хочешь что-то поближе к си и плюсам, с жесткой типизацией, или вообще со строгим ООП, то начинай с си-подобных Java пока еще популярный или С# по ощущениям, в последнее время не очень популярный Используя близкие к твоему языки ты поймешь суть написания back-end приложений, после чего сможешь перекатиться на другие, по желанию.

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

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

>7
>Скрипты
Тут есть зависимость от целевой платформы. Но в целом, самые популярные языки для скриптов сейчас:
Вообще для скриптов сейчас используются многие языки с виртуальной машиной.

Надеюсь, смог немного прояснить ситуацию.
No. 17046    
>>17044
Базово да. Но учти, узнать залился файл или нет ты можешь только внутри коллбэка:
>function(err) { ... }
Про который ты совершенно не знаешь, когда он вызовется, потому что не знаешь когда там пройдет реквест. Это я всё к тому что обычным ифом где-то снаружи ты это не решишь
No. 17047    
Файл: 150314604132.png-(32.47KB, 1600×900, scr.png)
17047
Вопрос к гуру handlebars и bootstrap:
1) Как правильно записать в handlebars условие типа:
{{#if varName = true}}
Что-то выводит
{{/if}}
Пытался делать способом выше - не работает
2) Как в bootstrap сделать <blockquote></blockquote> на одной строке c <img>, а то они у меня на разных строках с картинкой оказываются
No. 17048    
>>17047
>Как в bootstrap сделать <blockquote></blockquote> на одной строке c <img>, а то они у меня на разных строках с картинкой оказываются

Наверное самым современным способом для тебя будет использовать флексбоксы: https://getbootstrap.com/docs/4.0/utilities/flex/ хотя вообще можно просто дать классы d-inline и тому и второму, и добавить класс align-top картинке чтобы текст выравнивался по центру Пример флексбоксов: https://jsfiddle.net/12scanue/
No. 17049    
>>17047
http://handlebarsjs.com/builtin_helpers.html
>{{#if author}}
> <h1>{{firstName}} {{lastName}}</h1>
>{{/if}}
У тебя вроде бы то же самое:
>{{#if varName = true}}
Но мне кажется, ты хотел поставить ==, а поставил одинарное =, из-за чего у тебя теперь в ифе присвоение вместо сравнения. Т.е. по идее тебе надо поправить сравнение, или убрать его вообще, и будет тебе счастье.
No. 17053    
ычан, чому мой линq запрос не работает?

Model.Gallery.OrderByDescending(x => x.Picture.Last().id).Take(3)


нужно отобразить 3 галереи, в которые последними добавлялись картинки

> Ошибка сервера в приложении '/'.
>
> LINQ to Entities does not recognize the method '_3dsGallery.DataLayer.DataBase.Picture Last[Picture](System.Collections.Generic.IEnumerable
1[_3dsGallery.DataLayer.DataBase.Picture])' method, and this method cannot be translated into a store expression.


> Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода. 

> Сведения об исключении: System.NotSupportedException: LINQ to Entities does not recognize the method '_3dsGallery.DataLayer.DataBase.Picture Last[Picture](System.Collections.Generic.IEnumerable
1[_3dsGallery.DataLayer.DataBase.Picture])' method, and this method cannot be translated into a store expression.
No. 17054    
>>17053
> Model.Gallery.OrderByDescending(x => x.Picture.Last().id).Take(3)
Ты не можешь сделать Last() к сущностям базы, когда ты УЖЕ идёшь по сущностям.

> x.Picture.Last().id
Всю эту штуку вынеси выше, чтоб она выполнилась до OrderByDescending
No. 17055    
>>17054
я не знаю как это сделать!
напиши мне пожалуйста пожалуйста пожалуйста
No. 17056    
>>17055
Окей, скажи конкретно, что ты хочешь сделать с этой бедно базой данных.
No. 17057    
>>17056
мне нужно получить 3 галереи, в которые последними добавлялись картинки
No. 17058    
>>17056
вместо даты добавления картинок я смотрю на айди
No. 17059    
>>17057
>>17058
> var galIds = Model.Picture.OrderByDescending(x => x.id).Select(x => x.Gallery.id).Distinct().Take(3).ToList();
Ну, вот, как-то так.
И вот ты получил 3 idшника галерей.

> .ToList();
И вот это важно. Это значит, что запрос выполнятся и у тебя в galIds будут только id галерей, а не запрос в процессе.
No. 17060    
>>17059
чет оно берет не то что я ожидаю

http://3dsgallery.azurewebsites.net/
здесь есть такое:
<div class="gallery-data row">

@{

var galIds = Model.Picture.OrderByDescending(x => x.id).Select(x => x.Gallery.id).Distinct().Take(gallery_count).ToList();

}

@foreach (var item in galIds)

{

Html.RenderAction("GetElement", "Gallery", new { id = item });

}

</div>


но я не вижу галерею с рисунками, котороя должна быть третьей
No. 17061    
>>17060
Сколько айтемов у тебя в galIds?
Какое значение gallery_count?

> Html.RenderAction("GetElement", "Gallery", new { id = item });
Что вот эта залупа делает?
No. 17062    
>>17061
> Сколько айтемов у тебя в galIds?
3
> Какое значение gallery_count?
3
> Что вот эта залупа делает?
просто выводит хтмл элемент 1 галереи переданного айди
No. 17064    
>>17062
Давай посмотрим, какие у тебя там айдишники галерей лежат:

<div>ITEMS: @galIds</div>
<div>
@foreach (var item in galIds)
{
<p>ITEM: @item</p>
}
</div>

Напиши, что оно выводит, и если там внутри действительно три айдишника галерей, скажи, есть ли они действительно в базе.
No. 17067    
>>17064
добавил
No. 17068    
>>17067
>ITEMS: System.Collections.Generic.List`1[System.Int16]
>ITEM: 1
>ITEM: 2
>ITEM: 10

Вот я захожу на страницу. Вижу этот список, и вижу три галереи вверху со ссылками:

><a href="/Gallery/1" class="col">...</a>
><a href="/Gallery/2" class="col">...</a>
><a href="/Gallery/10" class="col">...</a>

Т.е. айдишники соответствуют. Тайтлы галерей:
>Всiлякi фотки
>Обрані скріншоти
>Поïздка в Карпати

Это разве не то что тебе нужно? Ты не видишь какую-то из них в своём браузере?
No. 17069    
>>17068
я хочу отобразить галереи, которые последними обновлялись, т.е. добавлялись картинки.
я последнюю картинку добавил в галерею с рисунками, а ее нет вообще, а должна быть первой
No. 17070    
>>17069
Давай дебажить дальше.

Сделай
> Model.Picture.OrderByDescending(x => x.id);
Так мы получим id последних 10 картинок. Наверху, среди них есть тот id действительно последних картинок?

> Model.Picture.OrderByDescending(x => x.id).Select(x => x.Gallery.id)
Теперь посмотрим на список галерей. Там есть необходимые?

> Model.Picture.OrderByDescending(x => x.id).Select(x => x.Gallery.id).Distinct()
Distinct правильно отработал?
[Назад] [Вся нить] [Первые 100 сообщений] [Последние 50 сообщений]

Удалить сообщение []
Пароль  
[Mod]