« first day (6 days earlier)      last day (3307 days later) » 

2:45 AM
@Athari, а как в чат или почту писать? почту че-то так и не нашел, а чат - это "start a new room with this user"?
 
 
5 hours later…
7:41 AM
@AndreyBakharev Чтобы писать на почту, нужно, чтобы пользователь явно указал почту в своём профиле. Личные сообщения не предусмотрены by design. (Вроде, у ромбов что-то есть, но я не уверен.) Чат — да, эта штука.
 
@Athari, а если здесь (в чате) пользователя нет? Например, хочу пригласить новичка с форума в чат - это как сделать? Я искал, но че-то так и не нашел
 
@AndreyBakharev Если под постом появляется длинная цепочка сообщений, то при попытке добавить комментарий выводится предложение начать чат. Кажется. Я не пользовался.
*цепочка комментариев
 
ну здесь, например: http://ru.stackoverflow.com/questions/413347/ - разве не длинная цепочка комментариев (23 коммента)?

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

такие вопросы бы в чат перенести, но че-то не захотел он общаться ) может не сообразил что на ссылку нажать надо,

было бы приглашение - было бы проще тем же новичкам
 
8:09 AM
@AndreyBakharev Поковырялся на Мете, там муть какая-то, и у меня возникли сомнения, что я правильно понимаю, как это работает.
 
 
5 hours later…
12:40 PM
Коллеги, а как удалить чат-комнату?
 
1:28 PM
Что случилось со статьёй на Хабре? Текст исчез, DevExpert забанен. Такая безответственная социальная линия хабра это уже причина для русской версии СО.
 
2:26 PM
Хабр — это не про технологии. Хабр — это про бабло. Разделение затеяно ради бабла (больше просмотров — больше бабла). Статьи выпиливают ради бабла (они же зарабатывают на компаниях, которые платят за право давать внешние ссылки на свои продукты). Эксперт, вероятно, забанен по этой причине.
 
2:42 PM
Чёрт. Опять уткнулся в кап дневной репы. Смотрю: репа капать перестала. А её там уже на 49 больше капа, оказывается. Засада.
 
3:13 PM
@andreycha Рядовые пользователи не могут удалять комнаты чата. Ненужные комнаты замораживаются и удаляются автоматически. Детали (англ.): chat.stackexchange.com/faq#retention
@Athari Приглашение в чат не работает, если у приглашённого пользователя нет 20 очков. Как это ни досадно.. См. meta.stackexchange.com/questions/97876
Т.е. их можно пригласить, а разговаривать в чате они всё равно не могут.
 
че-то чат какой-то неактивный, может поговорим о чем-нить? )

я вот, например, все время думал что не разбираюсь в ООП, а около года назад понял, что я действительно в нем не разбираюсь ) когда лекцию на степике про плюсы смотрел,

там объяснялось почему квадрат нельзя от прямоугольника наследовать, вот мозгами понимаю - плохо будет, а сердцем так и хочется унаследоваться ))

у своих спрашивал - только сишники сказали что наследоваться нельзя, т.е. остальные тоже не понимают его?
или про CI поговорить можно - все на работе внедрить никак не могу, не потому что мозгов не хватает, а потому что pm`у не могу объяснить необходимость этого,

и это при том, что у нас чуть ли не каждый первый баг после деплоя именно из-за корявого деплоя
по wp деплой тоже интересует, но для вопроса (на so) пока не созрел, т.к. плохо понимаю что там действительно нужно будет (вопрос про хранение и деплой базы)
 
3:38 PM
Никогда не выполнял тесты на что-то настолько абстрактное, как ООП. Поэтому сложно судить, насколько я в нём "разбираюсь".
Что от чего можно наследовать — тоже вопрос спорный, и надо конкретную задачу смотреть. По-моему, можно придумать и задачу, в которой наследование квадрата от прямоугольника будет удобным, и задачу, в которой это приведёт к проблемам. Второе придумать, пожалуй, проще.
Скажем, если есть изменяемые свойства с размером сторон, то наследование поломает логику свойств — они перестанут быть независимыми. А если у классов только конструктор, несколько свойств только для чтения и полная неизменяемость, то большого греха не будет, на первый взгляд.
@AndreyBakharev Там какая аргументация была-то?
 
У прямоугольника есть методы SetWidth(), SetHeight(), причем изменять их можно независимо. У квадрата же обе стороны должны быть равны, т.е. при изменении одной из сторон вторая тоже должна меняться. И тут нарушается принцип подстановки Лисков, который гласит, что наследник должен вести себя согласно объявленному интерфейсу.
Т.е.
 
в лекции я уже плохо помню, но вообще смысл какой (сишники про это говорили) - при наследовании хоть квадрата от прямоугольника, хотя в обратном направлении нарушается принцип Барборы Лесковски,

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

с квадратом и прямоугольником - если наследовать первое от второго, то при изменении ширины квадрата должна изменяться и его высота, но для прямоугольника это не так,
во, @andreycha более коротко написал )
 
Ладно, а если класс иммутабельный?
 
и принцип Лисков - это третья буква в SOLID, а если ему следовать, то всякие там ActiveRecord выкидывать надо, т.к. они нарушают принцип единственной ответственности
 
Потому что слепо следовать не нужно ничему :).
Но я лично не люблю Active Record.
@Athari в этом "классическом" примере он таковым не является. Ну а если делать иммутабельным, с заданием сторон через конструктор, то проблема уходит. Но тогда это уже другой пример и другой интерфейс у базового класса. Этот пример обычно приводится как случай наружения принципа Лисков, а не как плохой пример сам по себе.
 
3:54 PM
Как фрилансер я выявил закономерность: чем чаще заказчик произносит магическое сочетание "SOLID", тем больше в коде говна. :))
 
@Athari, ну думаю в этом случае наследоваться можно, хотя говорю - не до конца все понимаю )) хотя я хоть это понимаю, уже плюс ))

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

но тогда этот прямоугольник нельзя было бы наследовать от простого прямоугольника )
 
Вообще проще не наследовать. Наследование -- довольно жесткая форма зависимости.
@Athari это не значит, что сам по себе солид плох ).
 
насколько понимаю, одним из плюсов TDD как раз является убирание жесткой зависимости, которая хуже самого наследования
 
наследование не обязательно должно соответствовать принципу интерфейсности. как правило, но не обязательно. скажем у вас 50% методов аналогичные, хочется унаследовать чтобы просто тупо не набирать заново. ну наследуйте, только не запутайтесь, зачем вы это сделали.
 
ну так если 50% одинакового кода, то может вынести этот код в отдельный, более абстрагированный класс? в итоге получим проблему "лишней абстракции", которая решается добавлением еще одного уровня абстракции ))))
 
3:59 PM
Ну вот кстати TDD — тоже странная религия. Если язык компилируемый, то пролёт. Да и с некомпилируемым кодом боль и унижение.
Не представляю, как это вообще может работать в чистом виде.
 
ну я может и не совсем в чистом виде им пользуюсь, но довольно удобно выходит
 
@exebook во-во, только "не запутайтесь". Это плохое наследование. В таком случае лучше разделить на две сущности, а общий код вынести в третье место (да и то не факт).
 
я на некоторое время отлучусь, жена заставляет свои сериалы смотреть )))
 
@Athari в чем пролет? Временами использую TDD в наичистейшем виде, пишу на C#.
 
Всем привет!
 
4:02 PM
@AndreyBakharev Надо усложнять тогда, когда возникает необходимость усложнять. Не раньше. Исключение — если пишешь что-то жутко публичное с жёсткой обратной совместимостью. Тогда приходится думать заранее, а не рефакторить каждый раз как левая пятка пожелает.
 
Господа, тут кто-нибудь шарит в Си и сокетах?
 
@andreycha И как вы пишете тесты? Что весь код красненький и автодополнение не работает — вам не мешает? А что тесты нельзя ни собрать, ни запустить — не мешает?
@VisioN Си есть, сокеты не очень. В чём вопрос?
 
Красненький только тест. Автодополнение не мешает. Собрать тест нельзя только короткий промежуток времени -- после соответствующего изменения в кодируемом классе тест компилируется и проходит. Конечно, часто я не двигаюсь такими маленькими шажками, как советуют по классике, тупо терпения не хватает.
 
@Athari Вопрос в отправке большого тела в канал, если вся байда работает на libev.
@Athari Почему-то при отправке каких-нибудь 100Кб соединение отваливается с EAGAIN
 
4:21 PM
@VisioN в чём вопрос?
я знаю только про libuv
 
@exebook В принципе тоже самое. Пробовал там работу с сокетами? Как делал произвольную запись в fd клиента?
 
обычно делаешь мини пример, который проблему описывает и ломаешь его пока не заработает
я только знаю что он есть в node.js, а сокеты писал на чистом С
обычно траблы с сокетами на С в неправильно выставленых флагах и опциях сокета
"Operation would have caused the process to be suspended."
fcntl(sock, F_SETFL, flags | O_NONBLOCK);
 
@exebook Ну вот считай мне нужна реализация питоновской функции sendall только через write_callback
@exebook Да, соединение неблокирующее
 
а кто открыл сокет, сам ручками или libev?
и как, один send(...) с 100 килобайт?
 
@exebook Сам, у libev вроде нет утилит для сокетов, как у libevent..
@exebook Один send шлет только первый кусок
 
4:28 PM
ну если сокет неблокирующий он и должен вернуться, а дальше ждёшь селектом
 
Сначала делал это в лупе, минусуя оставшееся количество байт -- соединение рвалось на середине почему-то
 
ну дело видимо в другой стороне
 
Хотя как почему-то, понятно потому что клиент был недоступен
 
что может сломаться в отправке не пнятно
 
errno давал EAGAIN
 
4:30 PM
ну видимо вторая сторона не готова принимать, буфер переполнен и отваливается
не знаю кто у тебя клиент и кто сервер
 
Ну вот и я так подумал и переписал все на callback для libev, который как бы заменял селект тупо проверяя готов ли клиент к записи
И нихрена это не помогло
Пишу легкий сервер для веб-сокетов
 
а клиент на жаваскрипт и сокетио?
фиг знает. я обычно ставлю кучу принт/log на обоих концах запускаю и смотрю общий лог с большой кружкой чая.
 
Просто хром клиент. Но пробовал и другой клиент на жабе. Полагаешь, причина в них?
 
может вебсокет требует каких то дополнительных трюков
 
Вот фиг знает.. По идее там во фрейме заголовок кодируется немного по разному, если размер сообщения маленький-средний-большой. Но это все относится к протоколу, но не к соединению.. А оно именно и валится. Как вообще правильно будет много данных асинхронно слать? Ждать селектом пока клиент "писабельный" и дальше вгонять циклом send до нуля или как-то по другому?
 
4:40 PM
вроде же там буфер ограниченый, нужно получать подтверждение что он очищается и досылать дальше
 
avp
VisioN про Си и Сокеты киньте вопросик (желательно поподобней) с примером в ru.SO, вечерком (или уже завтра) посмотрю.
 
@exebook А как получать такое подтверждение?
@avp Вот уже большую чашку чая заварил, попробую еще поковыряться.. Если не выйдет, обязательно закину вопросец
 
ну там же есть некая receive-window как то оно может переполнится. условно если послать гигабайт, а клиент только и сделал что открыл сокет, и ничего не читает через recv() ясно что скоро конекту кердык
иначе ляжет весь комп у клиента
обычно мини протокол надо реализовать своими ручками
чего нибуть серверу говорить каждые 100 килобайт скажем
 
@exebook логично.
но в websocket протоколе ничего такого я нигде не нашел
 
можно забить на хром клиент и написать для начала клиент тоже на си, эмулирующий вебсокет
 
4:47 PM
думаю в крайнем случае, если ничего не найдется, так и придется делать
 
я правда не в курсе чем именно вебсокет отличается от обычного юникс-соекта, использую engine.io и в клиенте и в сервере
на ноде
сопрягать именно С-шный код с вебсокетами не приходилось, но и там наверное надо как то им разговаривать
это называется message-framing
или "маленький протокол для организации обмена"
 
ну так и есть
в веб-сокете есть handshake, который подтверждает соединение
а дальше тупо идут фреймы
при этом размер фрейма может быть до 4 гигов или вроде того.. и вроде даже безо всяких подтверждений посередине
 
ну если есть фрейм значит есть и заголовок с длиной
 
ну конечно
 
ну и что со стороны С обеспечивает генерацию этого фрейма?
 
4:57 PM
@exebook мой код
 
как пишут в демотиваторах, нельзя просто так взять и отправить данные через send() если от тебя ждут сгенерированый фрейм
 
да он вроде вполне сгенерированный, висит у меня в памяти и ждет усылки куда надо
 
тоже возможный источник ошибки
может длина пакета в обратной ендианости
как это по-русски
0x01020304 вместо 0x04030201
 
да, я понял
нет, не может
там генерится с проверкой
LITTLE_ENDIAN / BIG_ENDIAN
все такое
 
ну тут только MCVE что то даст
 
5:06 PM
@exebook попробую
 
5:48 PM
@NicolasChabanovsky, о ХК я вроде как узнал из виджетов для яндекса, сейчас увидел - там вопросы старые отображаются, а переделки на so будут? или виджет удалять можно?
 
 
3 hours later…
8:55 PM
@AndreyBakharev Спасибо за напоминание! Постараюсь поправить завтра.
 

« first day (6 days earlier)      last day (3307 days later) »