# Понедельник 79 твитов
Доброе утро, коллеги! Меня зовут Илья, сам я из Харькова. Более 10 лет учу людей JavaScript везде: в ВУЗах, на курсах и мастер-классах
6:48Также у меня собственная аутсорсинговая компания из 20 человек специализирующаяся только на JS во всех ее проявлениях.
6:49Эту неделю мы будем разговаривать о королях и капусте: как вырастить сеньйора из джуна, о переходе из программиста во владельцы компании
6:50Немного поговорим о IoT и месте Javascript'а в нем и о том как не потерять веру в людей управляя ими
6:50Сегодня я бы хотел поговорить об IT-образовании во всех его проявлениях. Если у вас есть вопросы - задавайте.
6:52Сам же начну с холивара: ВУЗ для "крутого" JS-разработчика - бесполезная трата времени, необходимость или полезный бонус?
6:53@jsunderhood зависит от вуза. Если не отстойник какой-нибудь, можно извлечь много пользы. Я через преподов нашел первую работу.6:57
@jsunderhood Неважно, главное желание, а знания можно получить где угодно, тем более сейчас.6:58
Я чу-чуть повременю со своим мнением, но за последние 12 лет (5 лет ВУЗа + 4 года аспирантура + 3 года с тех пор) я менял его четыре раза :)
7:01@jsunderhood пока не попадались работодатели, которым было бы не всё равно на отсутствие высшего образования. а вот страны – попадались […]7:02
Ах да, в желании начать дискуссию забыл указать персональный твиттер: @xanf_ua . Раньше писал редко, сейчас потихоньку приучаю себя к Тви
7:05@jsunderhood ВУЗ может помочь определиться, в каком направлении развиваться молодому жаждущему знаний уму, остальное - дело саморазвития7:17
Мой ВУЗ дал мне охренительно много для развития. Но со второго курса я ходил процентов на 10 занятий
7:21Раньше я верил в IT курсы. Но когда увидел СКОЛЬКО людей платят на моих курсах $200 в месяц и НИЧЕГО не делают - я испытал легкий шок
7:27@jsunderhood запускаю курс "как закончить IT курсы". стоимость курса до конца Пасхи составит всего $99.95.7:34
Мнение #1. Курсы в форме первого образования - зло. Скиллы "педалить на ангулярчике" а не Computer Science подрывают фундамент для роста
7:59@jsunderhood я тебе картинку принёс pic.twitter.com/KKrfSmAun18:12
Мнение #2 Я не верю в способность большинства 17летних самостоятельно учиться и отделять зёрна от плевел. В этом основная задача ВУЗа
8:13@jsunderhood жаль осознание этого пришло не сразу, теперь приходиться перестраивать свое мышление8:25
Дополнение к мнению #1. Переучивать людей после курсов сильно сложнее чем учить правильно. Это как из верстальщика делать фронтенда. Сложно8:28
@jsunderhood для меня как HR курсы больше минус в резюмешке чем плюс8:41
Пользуясь случаем попиарю @DaryaChu - превосходную HR, главную виновницу того, что у меня собственная компания. Но об этом завтра
8:42И да - совать курсы в резюме - отстой. Показывать проект, который вы сделали благодаря навыкам с курсов - круто и полезно
8:42@jsunderhood лучше расскажите, как выбирать первый проект и тривиальные задачи. То, как и где учиться итак каждый второй рассказывает. :)8:47
По просьбе @SheVasya как выбирать первый проект: мое мнение - то что интересно и может быть сделано за неделю. Иначе завязнете навсегда
8:48Еще у меня есть простой тест, который не проходят 85% выпускников "курсов": реализовать waterfall и parallelLimit из github.com/caolan/async
8:50У начинающих в JS две проблемы: асинхронность и рекурсия. В области waterfall и parallelLimit они встречаются :)
8:51Опять же для @SheVasya про рутину в IT. Рутины катастрофически много и даже у меня в любовно отобранном коллективе далеко не все ее умеют
8:52@jsunderhood о, к слову! Можете порекомендовать placement tests, которые помогали бы оценивать свой уровень, если самоучка?8:56
@jsunderhood @SheVasya для людей разных уровней (как сейчас там тестовые задания). Исключительно для пиара себя любимого и проверки уровня
8:57Мнение #3. Я считаю что гуманитарная фигня в ВУЗе (аля философия) крайне важна - иначе "кругозор" программиста вырождается в "точку зрения"
9:00@jsunderhood @dshster @DaryaChu на тех же MOOC курсах одна из "скрытых ценностей" это discussing forum - общение с преподами и студентами9:05
По поводу MOOC: у меня негативный опыт peer review. Я тратил 3 часа поясняя другому студенту ПОЧЕМУ я сделал так и какие проблемы решал
9:06@gorancheg @jsunderhood @dshster ну т.е. гребем бабло и плевать на качество, потому что лохи все равно идут (но это мое субьективное)9:06
@coincidewith Второкласника можно легко и непринужденно научить брать производные (проверено!). Но он не сможет делать ничего другого.9:10
Тут в одной из веток упомянули "грейд". Расскажите мне чем сеньйор по вашему отличается от миддла (в JS конечно же)
9:17Кстати, все ждут что я буду пиарить свои курсы. Конечно буду! kottans.org - лучшее что может быть. И мы хотим чтоб было везде
10:02По поводу котанов - это наверное самый сложный вызов для меня. Придумать blueprint чтоб модель курса можно было воспроизвести в любом городе
10:05Ищем докладчиков на kharkivJS митап в 20 числах мая, кто хочет поучаствовать - пишите в личку, или на @Blackrabbit9910:36
Обещанное мое мнение. Пункт 0: предварительные предположения.
Мы говорим о ХОРОШЕМ вузе, где преподаватели способны хоть чему-то научить
1. ВУЗ хорош для изучения ФУНДАМЕНТАЛЬНОЙ базы: дискретка, теорвер, основы аналитической геометрии, вышка. Все это я применяю в реальности
11:352. В ВУЗе можно получить опыт олимпиадного программирования -это феноменально ускоряет ваш кодинг на любом языке из-за особенностей мышления
11:353. Если ходить в ВУЗ только ради пар - лучше устроиться младшим падаваном старшего джуниора
11:364. Гуманитарная часть дает вам кругозор и развивает софтскилы - а это то, чего многоим не хватает
11:365. IT-курсы не заменят фундаментального образования. Если вас обещают сделать программистом за 2 месяца - БЕГИТЕ ГЛУПЦЫ!
11:376. IT-курсы могут быть полезны для быстрого освоения технологии (получения НАВЫКА а не ЗНАНИЙ). При условии КАЧЕСТВЕННОГО ментора
11:387. Курсы из пункта 6 не могут быть дешевыми - т.к. преподавателем должен быть крутой программист, а они стоят дорого
11:38и последнее: 8. Продвинутые курсы должны быть частью коммьюнити! Все становимся котанами! @kottans_org
11:39На этой мажорной пиар-ноте я удаляюсь на обеденный перерыв и поработать :)
11:39А пока я обедаю - если кто-то где-то проходил курсы по JS и вам понравилось - накидайте ссылок. Egghead не предлагать :)
11:40Курсы НА БАЗЕ универа хороши и взлетают (в харькове так многие делают). В отрыве - не выйдет. Это как два крыла у птицы :)
11:46@jsunderhood первые 2 курса необходимы. 3-й уже со скрипом, дальше в основном бесполезно :)12:50
@jsunderhood а то с моим КПИ дела не очень выглядят — инициативные молодые преподы все в итоге сваливают с большим разочарованием :(13:12
@SilentImp @jsunderhood рейтинг усредняет. Напр. если я успешен в том что меня увлекает и забиваю болт на малоинтересное, рейтинг не репрез.13:23
Возвращаемся к активному твиттингу. И продолжаем тему образования. Прежде всего я бы хотел попросить Вас ответить на один простой вопрос :)
14:40Вам надо реализовать алгоритм Дейкстры. Вы:14:41
И еще один вопрос, и перейдем к дискуссии
14:51Вам надо реализовать сортировку массива. Какую сложность будет иметь алгоритм, написанный вами без гугла?14:51
Так вот. Вопрос ко всем кроме @mourner :) - как часто вы применяете "классические" алгоритмы в реальной жизни?
15:05Я считаю что любой уважающий себя разработчик должен уметь как минимум опознать NP-полную задачу. А то прийдется ее решать :)
15:32Все эти алгоритмы на графах, сортировки и прочее - бесполезны, но полезны тем что мозги в порядок приводят. И с этим у моих студентов беда
15:32А вот динамическое программирование, жадные алгоритмы и рекурсия - must have для каждого. Где-то сразу после замыканий (:
15:33Немного моей бурной молодости: web.archive.org/web/2007022212…
15:44Алгоритмы - самый трудноусваиваемый модуль в моем 7месячном курсе для начинающих. И это печально. Мы ж не карусельки верстаем, господа
15:51@jsunderhood Это чистый пиар курсов или может будет какая-то конкретика, что почитать, советы и т.д.?15:58
Мне просто интересно мнение аудитории, прежде чем пользуясь "рупором" высказывать свое.
15:58К своему стыду, алгоритмы я учил по одной единственной книжке и её же до конца не осилил. Кормен "Алгоритмы, построение и анализ"
15:59Способность написать "базовый" алгоритм по инструкции (с гуглом) для меня является определяющим фактором что человек дорос до "джуниора"
16:01К сожалению из 30 моих студентов только 2е написали красно-черное дерево (это домашнее задание на неопределенно длинный срок)
16:02И это провал мой как педагога - я не знаю как научить людей просто реализовывать написанное :)
16:02@jsunderhood спрашиваешь при найме про алгоритмы, про поиски решения задачи, и насколько важно фронтенду понимание алгоритмов, и почему?16:08
Тем не менее я все еще считаю что в долгосрочной перспективе качать надо харизму, интеллект и удачу, тьфу... инглиш, алгоритмы и кругозор
16:09@jsunderhood нечего стыдится, я ни одной книжки по алгоритмам тоже не читал для github.com/mourner/projec… :) только гугл и кучу papers16:11
@jsunderhood вообще есть мнение что фронтенд в большинстве своем не про алгоритмы16:13
Про фронтенд "не про алгоритмы". Возьмем любимый всеми Ангуляр. Второй. Как на нем можно эффективно писать без хорошего понимания FRP?
16:24CSP using async/await: github.com/dvlsg/async-csp16:30cool. was wondering when someone was going to do this.
Кстати, вот задание моего авторства, решение которого для меня говорит о том что человека надо брать на работу- jsraccoon.ru/exercise-inter…
16:34На сегодня буду потихоньку закругляться. Завтра поговорим о том как я докатился до такой жизни: из JS-программиста в собственника
18:24@jsunderhood жадные кастомеры, парное программирование пока не дедлайн и конверсия - вот где школа жизни, а то алгоритмы всякие учить...19:08
# Вторник 116 твитов
Всем хорошего дня! Сегодня поговорим о том, как меня, человека обожающего писать код, занесло во владельцы компании и что из этого вышло
7:22Сейчас у меня большой созвон с заказчиком, поэтому пока задавайте свои вопросы - где-то через час начну активно твитить и отвечать
7:23@jsunderhood Как Вы создавали корпоративную культуру? Что из этого вышло?7:48
@jsunderhood Расскажите, кто-нибудь, почему, как говорил мой преподаватель, матроиды очень-очень важны в программировании?8:55
@jsunderhood я может пропустил, что за компания, чем занимается? продактплейсмент в студию!9:00
Своя компания - способ максимально быстро избавиться от розовых очков в отношении программистов и сильно ослабить свою веру в людей
9:11Компании три года, я ее основал когда уходил из аутсорсинговой компании "в никуда" из-за несогласии с политикой руководства.
9:11Команда ребят с которыми я работал и которые каждый был (и есть) очень крутой - ушли вместе со мной
9:12Я мечтал создать компанию без фигни :) Без таймтрекинга, без проектов "в стол", кодинга ради часов и пинания на рабочем месте
9:17По прошествии трех лет вынужден признать что из всего этого удалось только "без проектов в стол"
9:18Оказалось, что даже у крутых ребят которые я люблю не хватает самосознания и самодисциплины.
9:19Отсутствие какой-либо отчетности приводит к тому что люди в чем-то ковыряются не напрягаясь а потом перед дедлайном КРОВЬ КИШКИ ВСЕ В ОГНЕ!
9:19И еще - здесь и далее - мой личный опыт и мои косяки. Your mileage may vary
9:20Просьбы быть в офисе с 11 до 5 (остальное время работать можно когда-угодно) - люди систематически опаздывают к 11. К 11, Карл!
9:22А еще поверьте - главное в компании - sales. У наc sales нет, поэтому мы "влачим жалкое существование". Серьезно.
9:29С другой стороны если вы хотите максимизировать прибыль - будьте готовы писать не "что-то интересненькое" а очередной екоммерс - там хорошо
9:30Зато бытие владельцем компании - идеальное лекарство от лени.
9:38Осознание того, что сейчас ты ленишься, а завтра в глаза скажешь 10 людям, которые тебе доверяют что денег нет - меня дико мотивирует
9:38Кстати, если кому интересно - открыть свою компанию в EU стоит менее EUR800, при этом ставка налога пока не выводите прибыль - 0%
9:41@jsunderhood человек просто опаздывает, а к 11 или 9 или 15 это несущественная деталь)9:42
Я смотрю тема опозданий горяча. Давайте послушаем мнение большинства
9:51Как вы относитесь к фиксированному верхнему времени прихода в офис?9:51
Мнение: я не представляю как организовать работу лид+ подчиненные, если лид работает с 4 дня до 3 ночи, а подчиненные с 8 до 5 - ибо дети.
9:53Мне кажется что полностью свободное время прихода и ухода работает только в командах где все middle+ и выше
9:54@jsunderhood ставишь задачи и сроки,контролируешь результат.Нет результат-ищешь другого исполнителя.Никаких сантиментов и соплей10:04
Вот @de_gis поднял тему найма и прочее. Очень сложно без сантиментов и соплей если каждый сотрудник выращен тобой лично.
10:05А еще (личное выращивание сотрудников) позволяет платить им ниже рынка иногда раза в 2. В течении длительного времени. Потому что верность
10:05Те кто ехидно трет руки от предыдущего твита - я каждый день расстраиваюсь что не имею возможности платить ребятам как в EPAM к примеру
10:06@jsunderhood и такой весь из себя расстроенный кладу разницу в карман10:11
Тут вот пошли ехидства, по поводу "кладу разницу в карман" :) У меня доход от компании за прошлый год - чуть менее 40000USD.
10:12Не все продуктивны, но вполне себе. Три часа - хочешь из дома работай, хочешь из офиса
10:13@jsunderhood не, я несомненно люблю алгоритмы сортировки :) Плюс 2-point quicksort не сильно сложнее обычного, а insertion совсем простой.10:37
Спрашивают про поиск заказов: только сарафанное радио. Люди дают нам работу, потому что мы хорошо работу делаем
10:37Я не умею продавать на Upwork, писать холодные письма в LinkedIn и прочее. Я JS разработчик, и компания вышла такая же
10:38Кстати, о распорядке дня. Расскажите, какое время кодинга для вас самое продуктивное? Я глубокая сова, но сейчас - с 8 до 11 утра.
10:46@mistadikay @deepsweet @jsunderhood это пиздец, извините
Я бы ретвит но не сторонник обсценной лексики :) Так что вот вам ссылка:
@mistadikay @deepsweet @jsunderhood это пиздец, извините
11:00
@jsunderhood Интересен другой вопрос. Сколько часов в день в среднем (разброс не больше пары часов) люди (программисты) работают.11:12
Кстати давайте еще один холивар: помидорки vs поток? что работает у вас лучше?
11:13Творчество vs на результат. Победителя выбираешь ты! Как вы делаете дело? (на работе, не для себя - это важно)11:22
@jsunderhood поток, при этом месенджеры мне не мешают, а вот люди очень11:26
Я кстати сейчас утром работаю потоком (и на выходных), а так по помидоркам. Причина - много важных отвлекающих задач
12:06И да - самый важный навык наверное для абсолютно всех - ДЕЛЕГИРУЙТЕ! Вот эта философия "Хочешь сделать хорошо - сделай сам" - убивает вас
12:06Делегирование напрямую связано с доверием к сотрудникам. Если вы не делегируете - вы считает их некомпетентными - зачем вы тогда их держите?
12:16Не делегируя задачи, в которых вы сомневаетесь - вы не даете людям расти. И да, будьте готовы - косяки и фейлы в любом случае грести вам
12:16Про опыт работы по помидоркам. У меня очень много отвлекающих факторов: люди с вопросами, студенты, заказчики. Помидорки - способ менеджить
12:17i keep wanting to start researching/working on my own language design. but i worry that'll make me less effective at teaching JS.12:18
А еще помидорки удобно, когда все в комнате работают по ним. Все по команде встали и пошли пить чай :)
12:26Продолжаем нагло пользоваться вселенским разумом как источником информации. Самое главное качество программиста "рок-звезды" для Вас?
12:33@jsunderhood обычно с теми кого считают рок-звездами тяжело в коммерческие проекты(:12:38
Мое мнение: самое главное качество программиста - доводить любое дело до конца. Уж слишком многие любят челленджи и забивают на рутины
12:43А самое печальное в программисте: нежелание брать ответственность за результат (виноват Вася, фреймворк, язык, бог)
12:47Тут принцип такой: взялся за задачу, сцепи зубы и делай. Не забывая уведомлять об изменениях в сроках, проблемах и т.д.
12:52А то знавал я отличного фрилансера, который делал все ПРЕВОСХОДНО но за 10 минут до дедлайна сдавал. Ох потрепал он мне нервы
12:53@neonick @deepsweet @ruGreLI @jsunderhood а в оставшиеся 80% времени - другие 80% планов на день14:36
От @DaryaChu:
спроси, спроси важны для разработчикf софт скилы.
ну спроси
Надеюсь пояcнять что такое софт-скилы не надо?
@jsunderhood как быть с взаимозависимыми задачами, если кто-то факапит14:40
@webholt @jsunderhood это *слишком* челлендж :)14:43
Кстати ключ к большой продуктивности - иметь пачку активностей на день. У меня это код, проверка ДЗ, менеджмент, поиск заказов, самообучение
14:45Когда ты переключаешься между тасками не так тяжело страдать как 14 часов написания кода подряд
А еще у меня более 50% сотрудников - девушки. Потому что парни гениальны и талантливы, а девочки дают стабильный результат
14:48И кстати софт-скиллы способны спасти проект там, где техскиллы бессильны
14:49@jsunderhood Кстати, вот тебе вопрос-тема: как расслабляетесь? Чего вообще по корп. культуре?14:56
@jsunderhood @twenty Почему бы хотя б половину помидорок не делегировать?)14:57
Success story про soft-skills: будучи тимлидом решил поработать сам ночью. Команда решила поработать со мной. В итоге спасли важный проект
15:21А вообще как владелец маленькой компании я сплю и вижу тот день, когда я высплюсь :)
15:55@mourner @jsunderhood тут из КПИ хорошую статью про философию советуют :)16:05
@jsunderhood16:12Senior developer reaching the deadline pic.twitter.com/dKOPbWcryE
@DaryaChu @jsunderhood попутно вопрос возник, как отличить мудака от немудака на собеседовании?16:24
@jsunderhood @DaryaChu для аутсорса и мудаки могут подойти. Продукт мудаки вероятнее всего погубят.16:36
А воообще у меня есть два скриншота, которые описывают всю жизнь JS-разработчика. Первый - с сайта jsunderhood :) pic.twitter.com/1idokm457m
16:47Второй скриншот про жизнь JS-разработчика с внутренней страницы приема оплат за мои курсы pic.twitter.com/Ua1F5dzmnz
16:50@jsunderhood мало сна - это жертва за интересную жизнь.16:52
Иногда техдолг приходится выплачивать, а иногда - выплакивать.17:23
Похоже холивар "NPM - обитель зла" подходит к концу. Ну или это начало конца :)
blog.npmjs.org/post/141905368…
@jsunderhood Да давно пора, а то раскудахтались все любители насрать на js, даже на медузе написали %)17:39
@jsunderhood у них правда кроме этого скандала куча проблем. Например глючный и невыносимо медленный NPM 3 :(17:58
@freiksenet_ru @jsunderhood у нас в Mapbox с ним постоянные траблы :( ну и npm install в среднем занимает в 5 раз больше времени18:16
Сегодня вышла вяленькая дискуссия, но я надеюсь что вам было хотя бы познавательно. Завтра мы поговорим о JS не в вебе.
18:39Я расскажу про свой опыт JS в IoT и что я вообще думаю о высокороувневых языках в "штуках" (я еще с Python встроенным работал)
18:40Также расскажу, как я использовал "React Native" до того как он вообще появился
18:41И немного пострадаю на тему своего опыта разработки Windows 10 десктопных приложений на React (не Native) + WebPack без typescript :)
18:41Также некоторые мысли пошли далеко за пределы тви, чувствую пора заводит medium для лонгридов
18:43Поскольку на этой неделе добровольца в @jsunderhood не нашлось, с вами буду разговаривать опять я, @xanf_ua pic.twitter.com/g2iecIFgkf
8:01Эта неделя у меня в планах была посвящена созданию контента, поэтому твитов будет в два раза меньше, но - надеюсь -в два раза содержательнее
8:02В планах на неделю презентация для @fdconf, две статьи на @Medium и статья про redux-saga для тех, кто не грокает функциональщину :)
8:02А пока, немного оффтопа. Где-то тут были фанаты Метеора? Вот так вчера закончилась моя попытка запуска на Windows10 pic.twitter.com/C93X8heK2T
8:03Учитывая что метеор базируется на ноде 0.10 (и нет, это нельзя изменить) - я ощущаю себя археологом, ведущим раскопки :)
8:04А для затравочки расскажу про продуктивность. Только не в духе модных нынче статей, а о небольших штуках, которые помогают мне в жизни
8:06В основе моей ежедневной жизни три приложения - Clockwork Tomato, Focus@Will и Mindroid
8:08Clockwork Tomato - считает помидорки, через Tasker сделана интеграция с простеньким вебом где я для себя меряю статистику
8:08Mindroid - помогает уснуть. У меня есть дурная привычка в кровати начинать ДУМАТЬ. Помогает остановить внутренний диалог
8:08Пробовал вместо Mindroid медитации (метод Сильва, ОШО) - эффект тоже есть, но меньше
8:09ну и Focus@Will - превосходный сайт и ужасное приложение под Андроид. Превосходная музыка для работы
8:09В Focus@Will оплатил Lifetime subscription и еще ни разу об этом не пожалел. Такое редко у меня бывает - я люблю "передумывать"
8:10А расскажите про интересные-полезные приложения у Вас? (конечно от Скайпа и гуглокалендаря мы никуда не денемся)
8:10@jsunderhood coffetivity, rescuetime8:19
Тут @safinalexey упомянул RescueTime. У меня все эти "фокусилки" максимум вызывают чувство вины по итогам отчетов и не работают. А у вас?
8:20Хочу сказать спасибо - я не ожидал что статью на медиуме так тепло примут. Отдельное спасибо @cssunderhood за включение её в дайджест :)
8:21@jsunderhood аналогично. Помидорки, трелло и todoist мой выбор.8:22
Выбор ToDo-листа - вечная проблема меня и моих коллег. Долго сидел на DoIt.im, потом пробовал Todoist, сейчас остановился на Wunderlist
8:23@jsunderhood я туду лист на день веду на бумаге: отлик, апи - всё прекрасно8:33
А еще последнее время очень раздражает Slack. И это иррационально - сознательных аргументов почему - нет
8:35Как приучить себя к ToDo листам: устать от чувства вины от того что что-то забыл, прогуглить про "активную прокрастинацию" и узнать себя
8:40@jsunderhood Evernote. Реально хорошая вещь. Хотя написан отвратительно8:58
@jsunderhood У меня все про мак )8:58
Paw, Sequel Pro, Phoenix. А вообще @thechangelog
@jsunderhood dash, Alfred, Things без них себе работу не представляю9:44
@jsunderhood Не очень понимаю, чем gitter или discord хуже слака.9:53
Размышления о методах убийства помогает в рефакторинге файла на 1300 строк
11:47meteor 1.3 глазами новичка:
Ситуация следующая: если хочешь использовать SCSS, то scss не жуется webpack - как следствие missing images.
meteor 1.3 глазами новичка: хочешь использовать CSS Modules: ок, но файлы будут иметь расширение не CSS - один процессор на расширение можно
14:27meteor 1.3: css файлы и в dev и в production билд попадают два раза: один раз через import, второй раз "магией". Ищу как отключить...
14:31Meteor 1.3: ПРОСТО СМИРИТЕСЬ!
14:52Ага. The .css files ... are automatically added to the page stylesheet. Make sure your file is named .import.css ... Кому немного магии?
14:55@iamstarkov @jsunderhood Он прекрасен во всем, кроме документации, а у метеора вон своя магия15:21
@jsunderhood обожэ, человек юзающий focus@will, который не я!18:34
# Среда 77 твитов
К нашему обсужденияю про то кто такой сеньйор
dou.ua/lenta/articles…
Сегодня днем поговорим для начала об IoT с JS. Как вам сама идея "обычного" языка для "штук"? Взлетит не взлетит?
8:02Пока собираем мнения, а я убежал стэндапить команды :)
8:03@jsunderhood Раз у тесселя появилась вторая версия значит уже взлетел!9:05
@jsunderhood сейчас много IoT кода пишется на JS, как минимум на этапе прототипирования9:06
@jsunderhood Я думаю, отличная идея. Базовый JavaScript знают едва ли не все,9:06
@jsunderhood всё збс, только как бы не взлетело что-то реальное на воздух из-за этого9:10
Я игрался с первым tessel.io много. Крутая идея. Но 1) использование любого npm-модуля это русская рулетка
9:16Т.к. везде используется "подмножество" JS, более того - много модулей очень плохо написаны по performance, что не заметно на большом PC
9:18Пора вводить на npm новый бейдж "IOT-ready" или "написано с любовью к перформансу". Больше беджей богу беджей!
9:19В итоге у нас вроде как JS, а в реальности надо думу думать чтобы оно работало
9:21@jsunderhood Почему не взять человеческий C и не начать выжимать все соки из железки?9:35
@jsunderhood Я не понимаю, как без указателей можно хоть какие-то структуры данных осознать. Даже банально познать мутабельность объектов.9:43
Вбросим сюда все-таки :)
Дарья работает в IoT-стартапе, не просто так :)9:49@xanf_ua я не рискну писать в том твите, но сорри расбери это не IoT(: и js не решение созданное для этого
@iamstarkov @jsunderhood Потому что пока ты избавляешься от зла во всём мире, я продолжу использовать мутабельные объекты.9:55
@xanf_ua (: я понимаю, что элементная база развивается и не надо экономить такт, но скорость, энергопотребление, место в конце концов!9:56
@webholt @iamstarkov @jsunderhood ну это же глупости. Пока в Виларибо ищут, какая падла изменила объект, в Вилабажо уже пьют пиво10:05
И ради всего святого - не считайте игры с Arduino/BeagleBoard настоящим IoT. Это так, баловство :)
10:08@jsunderhood @webholt Вот Rust мне пока и правда нравится как "человеческий" + "безопасный" + "все соки" в одном. Хотя и есть свои грабли.
Мне кстати Rust тоже очень импонирует
@jsunderhood @webholt Вот Rust мне пока и правда нравится как "человеческий" + "безопасный" + "все соки" в одном. Хотя и есть свои грабли.
10:10
Еще я игрался на Rasberry Pi 2 с github.com/Samsung/iotjs . Очень понравился движок - на удивление приятен в запуске10:19
Как ни странно в github.com/Samsung/iotjs я сильно верю - имею инсайдерскую информацию что пока в нем самсунг сильно заинтересован10:19
У меня кстати tessel на даче управляет поливом. С этим справляется на ура. А вот попытка мониторить реал-тайм данные с насоса провалилась
10:23Возникают ВНЕЗАПНЫЕ затыки, потери данных и прочие привычные прелести при работе с реальным hardware. Причем на стороне тессела
10:23Мое пока-что мнение о IoT в JS: Prototype fast, prototype only, throw away
10:27Ну т.е. лампочкой моргать мы могЁм, а вот какой-то стабильный продакшн где поток данных N раз в секунду а не минуту - готовьтесь к сюрпризам
10:28“Ask HN: Do we regret forcing designers to learn to code?” - 2017.10:32
Давайте немного отойдем от темы IoT. Кто-нибудь (кроме меня) писал на JS Windows 8/10 Apps?
11:52Меня заставили писать для Windows 10 UAP(Universal Application Platform). Я приятно удивлен производительностью решения. Это вам не PhoneGap
12:15В моей жизни было две больших ошибки. Это ExtJS/Sencha Touch и PhoneGap
12:16Месяца 3 назад к списку своих ошибок я бы добавил первый ангуляр :)
12:24@igor_shubovych @jsunderhood тормоз же адский.12:30
У Microsoft очень приятные API для доступа к нативным функциям (промисы везде, привет Node.JS)
12:32C другой стороны, без async await код выглядит then-then-then-then-then. Асинхронное все! И да, WinJS очень сильно отдает C#
12:32@jsunderhood Инструменты диктуют код, ужас какой)13:03
@jsunderhood я пока не могу принять асинк/авейт13:21
then.then.then мне кажется очень клевым пайпом трансформаций
Немного не в тему - я тут домашние задания проверяю :) Задание с базового курса выполненное школьницей - jsbin.com/lopibe/edit?js…
13:22@jsunderhood pipePromise спасёт от череды .then13:23
Похоже JSBin слегка прилег. У меня ссылка отображается с 3-4 перезагрузки (Output где результат виден)
13:26Кстати по поводу React. Еще задолго до появления React Native мы писали проект на React где все отрисовывалось в примитивы в облаке
13:45И отдавалось видеостримом. Т.е. у клиента была тупая приставка к телевизору которая пробрасывала эвенты на сервер а весь рендер был в облаке
13:45Мне это напоминает времена которые наверное мы все не застали: мейнфреймы и терминалы
13:46Is there any "standard" way to "share" Redux state shape? Interested to discuss my app's state shape and get ideas from others as well.
Кстати мне тоже интересно :)
Is there any "standard" way to "share" Redux state shape? Interested to discuss my app's state shape and get ideas from others as well.
14:00
I published an article yesterday on how decorators work according to the latest ES proposal14:03
➡️ ponyfoo.com/articles/javas…
Оу. Внезапно осознал что на мое дежурство в @jsunderhood приходится 1 апреля :/
14:03Просто обычный день в Visual Studio :) pic.twitter.com/MJ6DxYea2G
14:10Released new @FrontendMasters course "Rethinking Async JS":14:27frontendmasters.com/courses/rethin…
And my "Functional-Lite JS":
Я - ярый линуксоид (Arch Linux, если интересно). Но Windows 10 вполне юзабельна
14:31@jsunderhood почему не macosx?14:34
Хотя поддержка мультимониторных конфигураций в Windows 10 по-умолчанию близка к катасрофе
14:41Меня тут спрашивают про опенсорс проекты. У меня их нет. Раньше я очень переживал по этому поводу и ощущал себя ущербным
14:46Потом один умный человек рассказ мне про википедию, где есть эльфы и гномы ru.wikipedia.org/wiki/%D0%92%D0…
ru.wikipedia.org/wiki/%D0%92%D0…
Так вот в опенсорсе я типичный гном: есть какие-то багфиксы, мне нравится популяризировать идеи но ничего масштабного своего - увы и ах нет
14:47Опенсорс - это не только код, а еще и сообщество. Думайте о том, чтобы Ваши действия делали сообщество лучше. Правда, @kottans_org @mourner?
14:57@jsunderhood @kottans_org @mourner крайне важно помогать новичкам, которые хотят присоединиться к сообществу и тоже приносить ему пользу.15:00
Больше всего бесило в Windows 10 что по Win+Enter открывался Narrator, а не терминал :)
15:17@jsunderhood я недавно по этому поводу статью писал :) medium.com/@agafonkin/agr…15:33
Кстати внезапно мне очень не хватает поддержки уровней нажима пера в JavaScript :)
16:00Seeing the ink/touch demo of windows 10 at #build2016 I feel like a rookie the way I use mine. Stuck in my interaction ways.16:03
Одним глазом смотрю #build2016 . Лет 5 назад не поверил бы что я говорю: мне нравится куда идет Microsoft
16:05BASH COMING TO WINDOWS! HOLY SHIT #Build2016
Yay! Извините меня :)
BASH COMING TO WINDOWS! HOLY SHIT #Build2016
16:15
Вобщем будем на сегодня заканчивать - пойду смотрить #build2016 - там много интересного
16:18Завтра будет "самый сок" - я расскажу очень детально свое видение как учить людей JS, зачем это делать и каких ошибок следовало избегать
16:18Я впервые систематизирую этот материал и выкладываю его в таком виде. Так что специально для @jsunderhood. Stay tuned!
16:19@subzey @jsunderhood :-) Хорош! Пускать вайн на винде это особый изврат.17:33
@jsunderhood внезапно после этого твита просидел целый день с focus@will в наушниках10:07
Пишу статьи для медиума. Сегодня будет апдейт
10:24Хочется сформировать миссию своих курсов "вести их так, чтобы не попасть на ebanoe.it ". Но не поймут, провинция-с :)
10:24телеграм головного мозга. Не хочу его открывать именно из-за того, что им тычут в рот из всех углов10:35
@esergeev @jsunderhood вы не умеете их учить. 👻11:21@jsunderhood нужно признать, что студенты на курсах, тоже бывают сильно разные. Некоторым так и хочется сказать "Не твое это!".
@SilentImp @jsunderhood @taujavarob @esergeev А кто-нибудь менторством занимался? Расскажите про опыт, по какой причине подвязались?13:09
Кстати, важный вопрос. Какой шрифт используете для разработки? Я долгое время сидел на PragmataPro, сейчас всерьез думаю о покупке Operator
15:01Так жаль что у @dan_abramov нет звука на трансляции. А как вы относитесь к подобным сеансам лайв-кодинга
15:04Потыкал в Fira Code - не приглянулся он мне, зато обновил свою PragmataPro до версии с лигатурами. Пробую лигатуры "в реальности"
16:04Какой-то сегодня неправильный день. Работоспособность просто отрицательная у меня :(
17:11не мой вариант. Отрицательная трудоспособность = отрицательная прибыль
17:20# Четверг 44 твита
@iamstarkov @jsunderhood @7rulnik @ymatuhin потому что Эллиот - это главный дилер качественного корма для js-троллей.7:57
Доброе утро, коллеги. А расскажите как у вас с около-JS эзотерикой? Elm, Om, ClosureScript, еще что-то?
8:01@jsunderhood @roman01la точно может что-нибудь рассказать
"8:04Запустил ресурс о ClojureScript clojurescript.ru 🎉 Ссылки, справочник по языку и онлайн REPL. pic.twitter.com/MosV2bg12T
И во что из всего этого вы верите в продакшне, а не для расширения сознания?
8:15@jsunderhood В продакшене я верю только в здравый смысл и костыли.8:16
Мне нравится Elm, но я считаю, что лучший dsl для html - это html. привет jsx!
8:30то что всегда внушало отвращение - jade и coffeescript
8:45а еще я ретроград и мне дискомфортна современная тенденция не ставить точек с запятой. видел такое, к примеру, у @dan_abramov
8:50Прошу прощения за тишину сегодня с моей стороны - внезапные задачи не-программистского толка
12:02Тему про преподавание раскроем завтра - хочется детально с Вами пообщаться
12:03А пока вот вопрос опять к вам: изучение КАКОГО другого языка программирования вы считаете самым полезным для JS-разработчика?
12:04@jsunderhood устал от дебага ClojureScript в рантайме из-за динамической типизации (как и в JS). Теперь делаю ставку на Elm!12:04
@jsunderhood Я на этот счет мнения не имею ) github.com/reactjs/redux/…12:06
@jsunderhood jsx форсит к использованию logical expressions для ветвления, что очень плохо сказывается на читабельности12:06
In case you missed it you can Ask Me Anything 👯 github.com/gaearon/ama12:48
by @reklatsmasters: rust. научит строгой типизации и бережливому отношению к ресурсам. Я не тыкал ультра-много в Rust, но как это?
12:51В моей картине мира учит бережливому отношению к ресурсам C, valgrind, еще valgrind, тонны valgrind - ах вот же эта утечка!
12:51Только что выдал лекцию подчиненным про то, что они охренели - сами просили курсы английского и теперь сами же не делают ДЗ и не ходят
14:26Вот и дожили до того момента, когда мне заявили: что там сложного вообще на бэкенде по сравнению с фронтом
15:01Миниатюра о современном состоянии дел в аутсорс фронтенд мире: вы можете иметь четырехзначную ЗП в USD, но не уметь написать синглтон
16:37@jsunderhood та що там складного - компайлери писати!16:38
О, кстати, тви. Есть у кого реальный опыт использования senecajs.org ? Как впечатления?
16:47А мне тут надо написать конвертор "подмножество XSLT --> JS функция которая делает то же самое", XPath использовать можно
18:59Раз никто не тыкал, расскажу свое впечатление от senecajs.org
20:30Seneca позволяет красиво писать микросервисы и не задумываться о транспортном слое
20:30Seneca позволяет строить что-то "микросервисное" с самого начала без тонны бойлерплейта
20:31Seneca безнадежно отстала от жизни и построена на коллбэках (кам он, уже 2016 год!)
20:32@jsunderhood берёшь из базы - отдаёшь JSON. Что сложного-то, кавычки в JSON'е расставить?21:07
Current status: morning is used to fuck the sleep off 😵7:34
Доброе утро, господа! Давайте поговорим о том, как снизить порог вхождения допустим в React, RxJS и ему подобным для гм... большинства
7:59Речь о том, что я вижу проблему у многих в понимании "концепций" и "философии". Тот же React - кучка lifecycle-методов + философия
8:13Т.е. самое сложное найти компромисс между "тиранией" AngularJS и бесконечной свободой React
8:13Кто сказал Ember? :)
8:13@jsunderhood но ведь сам по себе React очень простой. Это его экосистема доставляет людям сложности8:20
Я перефразирую вопрос. Из моего знакомства с Python - у них удалось построить экосистему, которая "makes you fall into the pit of success"
8:20Когда я смотрю на современные JS-экосистемы мне вспоминается Perl, с которого я начинал, со своим "There is more than one way to do it"
8:21Суть WebAssembly - не замена JS. Об этом говорят и сами разработчики WA, но почему-то девелоперы их не особо желают слушать.
Вокруг меня куча хомячков радуется WebAssembly: "ура, писать веб на нормальном ЯП". "
@RReverser давно верно сказал
Суть WebAssembly - не замена JS. Об этом говорят и сами разработчики WA, но почему-то девелоперы их не особо желают слушать.
9:24
@jsunderhood в том, что весь говнокод на Реакте одинаков, а в мире Ангуляра безгранично его разнообразие.13:12
Люблю бесстрашных людей. Складываем пользовательский инпут в строке, которую отправляем потом в child_process.spawn
14:48Все счастливые проекты счастливы одинаково. Все несчастные проекты несчастны по-разному
16:53Гм. Тупой вопрос вселенскому разуму: а есть в ноде возможность получить вывод "stat -f" ? (-f - информация о файловой системе)
17:02Привет! Меня зовут Метеор и я в 2016 году работаю на node 0.10.x, поэтому болт тебе, а не fs.access pic.twitter.com/eEylqi4DGT
19:19Pssss… Do you wanna to maintain something? medium.com/@a8h333/pssss-…20:24
Кстати, про количество помидорок в день. За сегодня (и это не самый напряженный день) pic.twitter.com/AmVvoFBHJT
20:44# Пятница 20 твитов
Добрый день! Как ваше 1 апреля? Мое началось с форк-бомбы на продакшн сервере (из-за бага, не веселья ради)
11:08@Chudesnov @jsunderhood каждый второй считает, что он ниибацца синьор и дорос. А промисы ниасилил.11:08
Тут в чате упомянули deepstream.io . Кто реально юзал?11:11
Порой мне кажется что разработчики на JS которые плохо себя вели в аду будут писать XSD-схемы и WSDL-контракты
11:34@jsunderhood у меня есть вопрос, не по теме) вот есть у яндекса webvisor, но есть ли аналог, который можно к себе на сервера установить?12:46
Извините за наглость, но помойму Meteor - худшая js-экосистема на данный момент
13:08goodbye <article>, <header>, <nav>, <h1-6>, <p>, etc.13:21After lengthy discussions we have today decided to remove a number of unsuccessful elements in HTML, e.g., <article> html.spec.whatwg.org/multipage/sema…
студент. собеседование. заявил что досконально знает C++. не смог ответить про unique_ptt/shared_ptr. Хочет $900 со старта. Таких много
14:21В метеоре 1.3 можно "нормально" работать с NPM. Я джва года этого ждал!
15:45Одно из удобств трансформера - нацепил экран на руль, клавиатуру на коленях - и можно поработать, ожидая кого-то за рулем
15:52@jsunderhood только теперь метеор не нужен :)15:52
Хочу новых впечатлений :)
Попробовать что-ли flow :)
Попробовал перейти на @fbnuclide - его хвалил @mourner - очень не хватает возможности манипуляций с файлами в дереве проекта
5:00Зато очень нравится идея @fbnuclide с working sets - подмножествами файлов для работы - облегчает фокусировку
5:01А расскажите про последнюю художественную книжку, которую читали. И как оно вам?
5:21Front end JavaScript debugging: what's your primary strategy?
А мы тут с Вами про высокие материи говорим:
Front end JavaScript debugging: what's your primary strategy?
5:29
@jsunderhood две книжки Брандона Сандерсона из серии Stormlight Archives, офигенное фентези — погрузился с головой7:17
Meteor 1.3 Migration Guide. Давайте вычтем meteor из angular или мы отлично умеем в JS
guide.meteor.com/1.3-migration.… pic.twitter.com/ia2FvN6aek
@jsunderhood В обще интересно же. Чем assertion в моке делаете, интегрируете ли в CI, coverage инструменты используете?10:33
@jsunderhood @Alex509 К сожалению, мы - аутсорс, а там плохо приживаются даже просто тесты
10:33# Суббота 10 твитов
Сегодня твитов от меня почти не будет: готовлю обещанные материалы для Вас. А еще дедлайн
10:49Хуже дедлайна в пятницу может быть только ВНЕЗАПНЫЙ релиз в субботу
10:49Бэкэнд обнаружил что их система валится если в имени футболиста есть кавычка. "Чертовы ирландцы!"
11:02@jsunderhood ясно. Просто на выходные надо уплывать … далеко! 👻 от лодки. 😊12:31
@dshster Потому что разработчик работает над проектом не один. Даже если сейчас других разработчиков нет. @jsunderhood @cssunderhood12:33
Йоу! На следующей неделе @jsunderhood неожиданно свободен — кто хочет провести её? :D14:26
@Rukomoynikov @shuvalov_anton @jsunderhood vote for @getify 👍🏻16:20
React Virtualized by @brian_d_vaughn is amazing. Highly recommended. bvaughn.github.io/react-virtuali…21:41
Сегодня твитить буду мало - в Харькове марафон. Правда я не бегаю (хотя раньше бегал полумарафон) - это крайне познавательный опыт
6:45Провожу занятие у базового курса. Решаем одно из сложнейших для новичков заданий - после знакомства с Promise написать Promise.all самим
7:21# Воскресенье 21 твит
Доброго выходного, коллеги! Пока я дописываю свои материалы, предлагаю выходную тему - расскажите о гаджетах, которыми вы гордитесь.
13:22Начну с себя: недавно приобрел aftershokz.com/products/bluez… - наушники с костной передачей звука. Скепсис сменился восторгом буквально сразу же
13:23@jsunderhood Неожиданно, лучшая покупка из всех за последние полгода xiaomi.ua/mi-power-strip/ 😺13:28
@jsunderhood theeyetribe.com для проведения окулографических тестов.13:33
@jsunderhood @dshster @AfterShokz к тому, что вашу маму и тут и там показывают (что слышно собеседника). Но для опенспейса не подойдут
13:58Второй гаджет который далеко не сразу стал моим любимым - мой Vaio Z Canvas. Возможность нарисовать что-то "на экране" пером а не пальцем =>
14:10=> неоценима в преподавании, особенно когда часть аудитории в онлайне - попытка снимать доской камеру выходит откровенно-говоря так себе
14:11Потихоньку делаю обещанное людям за неделю (внезапно занимает больше времени чем планировалось).
15:19Первая часть про развитие FrontEnd разработчика - medium.com/@xanf/frontend…
Продолжать стоит?
15:19Сейчас доделываю список литературы для чтения со своими комментариями. Оказалось систематизировать все что я читал за последние 3 года долго
16:15webpack today. Wish me luck 😬16:49
When I read "NPM"—it reminds me of the days I would be irked by articles writing "Jquery". I think it gives away the knowledge of the system18:21
Немного оффтопа. Хром сделал превьюшку сайта для пустой страницы, пока я его дебажил :) Не думал что такое возможно pic.twitter.com/qnUFGzm5eg
18:23@jsunderhood «Что делать в универе, если ты не в Стэндфорде?» – смотреть Стэнфордские курсы на курсере!19:42
Господа, моя неделя в @jsunderhood подходит к концу. Надеюсь вам было приятно меня почитать.
19:49К сожалению я не успел выложить обещанные материалы по преподаванию - я это обязательно сделаю у себя в твиттере
19:49Сейчас дописываю на Медиуме статью "Как учить людей JS: Часть 1. Общая теория". Выйдет завтра - хочу наделать красивых картинок
20:54В среду выложу продолжение цикла про хороший-плохой-злой frontend. А список рекомендованной литературы еще в процессе формирования
20:55Большое спасибо за такую длительную возможность. Харьков в эту неделю вел и @cssunderhood и @jsunderhood
Учитесь и учите.
# Ссылки
github.com
- https://github.com/caolan/async
- https://github.com/mourner/projects#algorithms
- https://github.com/dvlsg/async-csp
- https://github.com/Samsung/iotjs
- https://github.com/reactjs/redux/issues/1509#issuecomment-195354091
- https://github.com/gaearon/ama
other
- http://smartme.university/
- http://smartjs.academy/
- http://javascript.ninja/
- https://gist.github.com/xanf/cf5d8be12137fadbc4ef
- https://gist.github.com/xanf/a2d3e9c826ce12ada001
- https://gist.github.com/xanf/6ac4646ba2f6d781099b
- https://goo.gl/G2PxZl
- https://www.youtube.com/channel/UCW9pyonagDWGMCy7V_Kro6g?view_as=subscriber
- https://www.youtube.com/watch?v=4yfCyqlvKEA
- http://kottans.org/
- https://www.codeeval.com/
- http://web.archive.org/web/20070222123519/http://acm.uva.es/problemset/usersnew.php?user=39179
- http://jsraccoon.ru/exercise-intersection
- http://spinoza.in/kolonki/pochemu-tvoj-universitetskij-kurs-filosofii-otstoj.html
- http://blog.npmjs.org/post/141905368000/changes-to-npms-unpublish-policy
- http://dou.ua/lenta/articles/seniority/
- http://tessel.io/
- https://jsbin.com/lopibe/edit?js,output
- https://ponyfoo.com/articles/javascript-decorators-proposal
- https://frontendmasters.com/courses/rethinking-async-js/
- https://frontendmasters.com/courses/functional-js-lite/
- https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%92%D0%B8%D0%BA%D0%B8%D1%8D%D0%BB%D1%8C%D1%84
- https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%92%D0%B8%D0%BA%D0%B8%D0%B3%D0%BD%D0%BE%D0%BC
- https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BD%D0%B4%D1%80%D0%BE%D0%BC_%D1%81%D0%B0%D0%BC%D0%BE%D0%B7%D0%B2%D0%B0%D0%BD%D1%86%D0%B0
- https://medium.com/@agafonkin/agree-with-all-the-points-thanks-for-sharing-this-22742cf4fb2
- https://medium.com/@xanf/frontend-dev-%D1%85%D0%BE%D1%80%D0%BE%D1%88%D0%B8%D0%B9-%D0%BF%D0%BB%D0%BE%D1%85%D0%BE%D0%B9-%D0%B7%D0%BB%D0%BE%D0%B9-%D1%87%D0%B0%D1%81%D1%82%D1%8C-1-%D1%85%D0%BE%D1%80%D0%BE%D1%88%D0%B8%D0%B9-%D0%BF%D1%83%D1%82%D1%8C-865b640d5d18#.5ue8juhu9
- https://medium.com/@a8h333/pssss-do-you-wanna-to-maintain-something-131cfadff640#.fqr83onjz
- http://us.vaio.com/vaio-z-canvas
- http://senecajs.org/
- https://deepstream.io/
- http://jambler.co/howto/
- https://msdn.microsoft.com/en-us/library/jj591569.aspx
- http://yelouafi.github.io/redux-saga/
- https://bvaughn.github.io/react-virtualized/
- http://aftershokz.com/products/bluez-2
- http://www.xiaomi.ua/mi-power-strip/
- https://theeyetribe.com/
- http://ebanoe.it/
- http://guide.meteor.com/1.3-migration.html