24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
В этом треде собираются величайшие умы человечества – мастера валидации форм и специалисты по JSON-технологиям. Этот тред посвящён главному языку будущего – JavaScript. Благодаря своей гибкости используется в браузере, на серверах, в мобильных приложениях, на десктопе и практически во всех видах программирования. Удобный синтаксис позволяет легко писать на нём, а высокая производительность делает его отличным выбором для решения любых задач – от небольших магазинов до огромных highload проектов. JavaScript по праву является самым популярным в мире языком. На каждом сайте есть браузерный JavaScript, а JavaScript на сервере используется такими крупными корпорациями, как Amazon, Yahoo, HP, NASA, Walmart и многие другие.
В директории можно выполнить npx live-server . (точка в конце) и получить сервер этой директории с живой перезагрузкой на изменениях. https://www.npmjs.com/package/live-server
Теперь у тебя будет представление о программировании вообще и о вебе в частности. Тогда уже можно и Кантора навернуть или съебать в другом направлении.
>>1206208 >Реакт - это библиотека. Для рендеринга html. И больше в нем нет нихуя. >Алсо, умиляет подход к передаче данных в компоненты. Сначала много разговоров про иммутабельность, пропсы, one-way, чистые функции, и прочее. Охуенно. >А практически - что с этим всем делать? А-а-а, практически... Ну, практически - надо юзать редукс, который всё красиво сделает с чёрного хода, через недокументированные возможности.
Ну почему этот долбаный реакт взлетел, раз он особо нихуя не может?
Сука этот ебаный вебпак с его publicPath'ом каждый раз заставляет меня возиться в конце проекта с ебучими путями до ассетов. Что тут может не работать? пик 1: относительный publicPath ( для gh-pages ) пик 2: лодеры пик 3: зачем то добавляет еще раз /assets/assets/ к путям до шрифтов пик 4: стили и js нормально подгружает используя относительный publicPath
Кто мне может объяснить эту хуиту, что там написано. Этот код. http://bootstrap-4.ru/docs/4.1/components/forms/#custom-styles Что это блять? Как этим пользоваться? Если я у меня какое-то приложение и валидация в нём это одна из функций, которай должна осуществляться, по нажатию на какой-то бтн. Как мне эту ебалу переписать и нормально пользоваться?
Что делает код на пике: 0. Запускается после полной загрузки страницы. 1. Находит все формы, имеющие класс 'требует-проверки' (видимо, ставится где-то в др. месте). 2. Добавляет каждой event-listener на событие submit (отправка): ......1. Проверяет, валидна ли форма. ......2. Если нет - останавливает отправку. ......3. В любом случае - добавляет класс 'было-проверено' (видимо, используется где-то ещё).
Учи джаваскрипт. Не стесняйся заходить в гугол и искать там по кускам кода.
>>1207712 >Тогда вся эта ёбала вообще не нужна Но, если ты хочешь именно bootstrap-валидацию, и, тебя, почему-то, не устраивает валидация по submit (почему?), то тебе надо сделать так, как внутри обработчика на пике - добавлять класс 'was-validated' после вызова form.checkValidity().
Алсо, я тоже не делаю валидацию по submit - вызываю по кнопке, а потом делаю submit из js. Но, я и встроенную html-валидацию не использую, и вообще большой затейник.
Нахуя в проектах лепят es6-импорты, если они не поддерживаются в stable-версии ноды? Как это вообще работает? В ноде есть выстроенная экосистема, есть адекватное тестирование и куча библиотек. Как люди пишут любой js-код(даже на фронт) без ноды? Просто как? Сейчас хочу сделать простенький проект, который собирается в ассеты для браузера, но нужная мне библиотека принципиально не работает с commonJS модулями, видимо придется выбирать другую. Я не вижу смысла делать каждый пук в терминале через бабел ради одних импортов. В чем суть этой хуйни, кто и как ими пользуется?
Я БОЛЬШЕ НЕ МОГУ, БЛЯТЬ Пилил сайт на компе, перенёс всё на ноут и у меня ОТВАЛИЛАСЬ АВТОРИЗАЦИЯ, точнее, не работает ajax. На компе стоит ТОЧНО ТАКОЙ ЖЕ локальный сервак, файлы все ТОЧНО ТАКИЕ ЖЕ, я НИ СТРОЧКИ не поменял, но на компе всё работает, а тут нет, меня трясёт, блять, сука. Что здесь не так? НУ ЧТО?
>>1207827 да что угодно может пойти пиздой, ты вкладку network в devtools покажи после того как кликнешь на кнопку чтоб сделать запрос, и в консоли что высвечивается тоже доставь.
АХАХАХАХАХАХА АААААААААААААААААААА Всё, нахуй. Сюда написал и сразу всё решилось. Оказалось, что ебучая пыха сессию не стартовала. Но это не оменяет того факта, что НА КОМПЕ-ТО ВСЁ РАБОТАЛО. ЕБИСЬ ВСЁ КОНЁМ, ВЕРСИЯ ПЫХИ ОДНА И ТА ЖЕ, СУКА, НУ ЧТО ЭТО ТАКОЕ?!
>>1207793 Если хочешь пользоваться - WebPack + Babel.
Некоторые большие библиотеки, типа реакта, vue, jquery, lodash etc - можно отмечать как external в вебпаке, и инклудить в браузере отдельно. Это работает, если библиотека предоставляет глобальный объект - React, Vue, $, _ etc.
Раскочегаривать всю эту механику ради одних импортов - бессмысленно. Но, есть ещё лямбды, классы, jsx, промисы, async, class properties и хуева туча js-фишек, которые появятся только в будущих стандартах языка. Плюс - структурирование кода.
Без ноды - легко. Не использовать импорты вообще, и писать просто так, на глобальных объектах. Т.е. просто используешь глобальную переменную Vue, и всё. Естественно, включив загрузку соотв. скрипта в html.
>>1207837 Я знаю, как билдить ассеты, и весь es6 синтаксис, кроме импортов, доступен в текущей версии ноды. Проблема вообще в другом. Я хочу писать на ноде, тестить на ноде, и при этом не ебать себе мозги, подключая babel или --experimental-modules на любое телодвижение только из-за сраных несовместимых импортов, которые хуй знает зачем и кому сейчас нужны, раз они в ноде не поддерживаются из коробки. Собрать весь проект в ассет и отдать его браузеру - это задача на пять минут, я про нее не говорю.
>Не использовать импорты вообще, и писать просто так, на глобальных объектах. Вопрос не в том "как писать", вопрос "нахуя так писать". Без быстрых тестов, без нормальной системы модулей, без нормально прописанных зависимостей и с постоянным засиранием глобалов. Я с этой хуйни и перешел на ноду для фронтенд-проектов в первую очередь.
>>1207844 ES6 не поддерживается всеми браузерами. Те, что поддерживают - поддерживают не полностью и с багами. Нахуй он нужен вообще, если не поддерживается из коробки в стабильных версиях браузеров?
>>1207848 В браузерный код ты в любом случае переводишь все через компилятор. И есть разница между сахарком классов и перехуячиванием всей устоявшейся системы импортов. Например, с импортами я не смогу использовать NODE_PATH в своем проекте и мне придется ебаться еще больше, чтобы оставить require("shared/utils"), который удобно указывает на lib/shared/utils.js, а не переделывать его в ебучий релативный импорт.
>>1207860 >перехуячиванием всей устоявшейся системы импортов С этого и надо было начинать. У меня такой проблемы нет (т.к. или вообще без ноды, или бабель везде), посоветовать ничего не могу. Кроме как погуглить - думаю ты не один такой расстроенный, возможно люди что-то придумали уже.
Ну, и, добро пожаловать в волшебный мир веб-фронтэнда, лол.
>>1207872 Так вопрос, каким образом люди тестируют в сетапе babel/webpack без ноды? Не в браузере же и не вручную, это долбоебизм. Или волшебный мир фронтенда до сих пор не научился в адекватное автоматическое тестирование?
И опять же вопрос про es6 импорты, каким образом можно сделать адекватные не-релативные импорты без вебпак-костыля, чтобы работало в ноде? Например для CommonJS есть целая куча костылей: https://gist.github.com/branneman/8048520 Но в es6 динамические имена модулей использовать вроде как нельзя, NODE_PATH ни на что не влияет, так что почти все решения оттуда отпадают, а гугл нихуя не выдает.
>>1207906 >babel/webpack без ноды Это невозможно, и ты должен это понимать. И чем тебе бабель не угодил? Типа, вся остальная хуерга тебе норм, а бабель - это уже перебор, лол?
Вообще, такое ощущение, что ты чего-то недопонял, и ломишься в открытую дверь.
>>1208083 ну ладно, после получаса исследований максимум что мне предложили это то, что на пике ( типа опциональными поставь, но хули ж толку тогда вообще с ТС-а? ) Я в ахуе пиздец, я половину базовых классов на ТС уже написал
>>1208013 После нормальных языков это чувствуется как пиздец, когда мне нужно ставить отдельный сторонний компилятор и везде его использовать, чтобы мой нативный код просто выполнялся, причем не в каком-то ебанутом окружении браузера, где нужно поддерживать десять версий IE, и это оправдано, а в моем основном рабочем окружении(!!!). Еще сверху нахуячить пресеты для браузера, пресеты для окружения ноды, пресеты для пресетов, плагин бабела для тест-фреймворка, и это абсолютный минимум. Сейчас поигрался с бабелем в ноде и ну его нахуй, лучше возьму либу, которая поддерживает CommonJS модули.
>>1208186 Да, на все это у тебя уйдёт неделя или две, ничего сложного там нет, а потом будешь ебаться с жс, как я сейчас Ууу сука зла не хватает, бросаю, и на следующий же день возвращаюсь, ничего с собой поделать не могу, надеюсь, через месяца два изучения, я все таки накатаю свою йобу.
Ребят , помогите дауну , я только недавно начал использовать git . Не понимаю еще механику , хотя читал .
Вот я последним коммитом (а возможно двумя) испортил свой локальный репозиторий и хочу полностью заменить его веткой из гитхаба. Но моя локальная считается master и не дает это сделать . Как принудительно заменить её?
>>1206689 (OP) Анон, недавно пришлось на работе писать на js и так уж вышло, что кроме меня тут на нём никто не пишет, кода на js у нас нет, поэтому стал вопрос о закладывании какого-то фундамента из стайлгайдов, а потом и обмазывания всевозможными линтерами. Какие требования к стилю написания js-кода используются в твоей компании, есть какие-то общие, вроде pep-8 в питоне? Поделись, если можно, ссылками. Пытался гуглить, но зашился в десятках статей, каждая из которых предлагает свой подход.
Кто-нибудь из вас работал в веб-игрострое? Я имею ввиду современный веб-игрострой, где используются всякие канвасы и WebGL. Насколько сложно туда вкатиться? Какие требования? Действительно ли там требуются яйцеголовые со знанием матана (и будут ли по нему драть на собеседовании) или это просто будет плюсом? У меня есть уверенность в своих знаниях по JS (3 года хорошего опыта), но нет уверенности в своей алгоритмической подготовке, ибо не особо налегал на математику во времена учёбы в своей шараге, поэтому в голове отложились жалкие крохи и те выветрились за 4 года после окончания. И ещё, какая зарплата в этой сфере считается приемлемой?
Как на канвасе объекты двигать? пытался организовать D&P , создав событие onmousedown, а внутри его на mousemove и mouseup, но оно игнорирует внутренние события
>D&P ПНХ >внутренние события Так это не делается. Попробуй через глобальный флаг. let hold = false; onmousedown => hold = true; onmousemove => if (hold) do shit; onmouseup => hold = false;
Инструмент для линтинга это однозначно Eslint: https://eslint.org/ Он очень гибкий требует попердолиться.
Есть васянская попытка навязать для него стандартные настройки: https://standardjs.com/ Но они предлагают не использовать точку с запятой, что противоречит спеке языка, поэтому сразу идут на хуй.
Есть годный обоснованный стайлгайд от Аирбнб: https://github.com/airbnb/javascript Если запустишь в проекте npx eslint init Он среди прочего предложит тебе этот конфиг. Это будет хороший выбор для начала.
>>1208089 просто ТС говно без задачв боьшинстве случаев Откроем твой первый пик: >document.getElementById('root') as HTMLElement >as HTMLElement Сильно помогло? Без него бы руки отвалились, наверное, да?
>>1208213 Лучше заложи фундамент из нормальной архитектуры, тестовой дисциплины и настроенного окружения. Всегда охуевал с людей, которые на полном серьезе дрочат на стайл гайды. Стайл гайд - это чтобы ньюфаги не писали совсем уж срань и для каких-то специфичных особенностей языка, но если у тебя есть любой опыт разработки, то ты и так знаешь 90% того, что тебе предложит стайлгайд, потому что это просто common sense.
Особенно этим любят заниматься фронтенд-макаки почему-то. У него 0% тестового покрытия, нечитаемая реакт-залупа на 200 строк кода в файле, где логика идет вперемешку с шаблоном, а он на стайл-гайды дрочит. Один мне на полном серьезе затирал, что вот в прошлой компании у него писали как попало, а в текущей используют стайлгайд и ему сразу заебись стало. Это каких макак набирать надо и как не уметь их загонять в рамки, чтобы стиль кода на что-то влиял? Не говоря уж про то, что любая IDE с плагином тебе и так покажет основную хуйню.
На одном сайте есть скрипт вида: var a = true; if(a){ window.location = 'nahui eto suda';}
Я пробовал в tampermonkey прописать что то типа const a = false;, но это не сработало. Можно как то избавиться от этого редиректа при этом не блокируя полностью выполнение яваскрипта?
Посоны, а где почитать про геттеры и сеттеры? Желательно на нормальных примерах с дом. Я нихуя не понимаю кантора, это пиздец какой-то. Какая блять есть альтернатива кантора?
Может проблема не в Канторе? К тому моменту, когда (если вообще) тебе они понадобятся, ты уже забудешь их синтаксис. Так что пока тебе просто достаточно запомнить, что они есть.
>>1209185 ну я только месяц как учу джс и мой ментор говорит мне , что сейчас мне мой код, в моем мини приложении надо переписать с ипользованием сеттеров и геттеров и почитать про протатипное наследие. Сижу с лицом грустной жабки и вообще слабо одупляю зачем на данном этапе моего вката вот это вот всё сейчас.Я бы еще бы каких-нибудь форм бы поклепал простых.
Есть короче проект, стак nodeJS, graphQL, typescript, postgresQL, sequelize, не хочу блять милиарды раз описывать ебучие типы, с таким стаком это: GraphQL типы, TS интерфейсы, Sequelize модели Выглядит как полное говно, есть ли норм решение чтобы был один trust source?
>>1209228 >зачем на данном этапе моего вката вот это вот всё сейчас Затем, чтобы сделать трёхслойное приложение, где были бы Model, Controller и View. Как раз функции-геттеры нужны в т.н. «модели». А уже поверх неё — можно и форм поклепать простых.
Посмотрел сейчас, что такое есть React Context. И как надлежит его юзать.
Это какая-то лютая костыльная неюзабельная хуйня. Что-то как-то они перемудрили с чистотой. Напоминает стерильно-чистую бессмысленную собянинскую Москву, лол.
Вообще, реакт как-то разочаровывает по мере углубления в него. И как-то снова начинает нравться Vue, лол.
>>1209352 Используй один маппинг для объекта, а в остальное время работай с данными? То есть пришел тебе запрос с JSON-объектом, ты пропустил его через маппинг, который конвертирует все поля в нужные типы, а потом работаешь с уже конвертированным объектом, убираешь неразрешенные поля, валидируешь и т.д. Конкретно с этим стеком не работал, но обычно используют ДБ схемы для этого, там уже все типы проставлены.
подскажите, че сейчас на фрилансе актуально? 2 месяца работал в офисе, но работать с 8 до 8 (с учетом пути) 5 дней в неделю меня доебало, не моё это думаю попробовать вкатиться во фриланс, но проблема в том, что вся работа в офисе была построена на гугловском полимере и обычно он нахуй никому не нужен, поэтому я не уверен во что лучше тыкаться
>>1206689 (OP) доброго времени) я хочу сделать мультируменый чат с использованием socket.io, что бы комнаты юзеры могли создавать сами на лету и думаю что лучше подойдет в socket.io для этого namespace или room но не понимаю их различий .___. подтолкните, пожалуйста, в нужную сторону
>>1209492 Так лол, это graphql делает, там стрикт тайпы. Мне просто пиздец как не хочется описывать эти же тайпы ещё и в тайпскрипте и в схеме для постгреса.
>>1209734 >ебанутый? Сынок, ты, видимо, туповат. Поясню - типы у тебя описаны в одном месте, например, в TS. Для всей остальной хуйни можно описания типов генерировать по описаниям TS. Или TS типы генерировать ещё откуда-то. Я, например, генерирую их из Java классов, как и SQL схему.
Сап, формошлепы. Не дает покоя одна херь - вот есть родитель, есть у родителя сынка-корзинка. На сынку-корзинку вешается eventListener, срабатывает кулбэк, в нем удаляется родитель ( допустим body.removeChild(parent) ). И вот вопрос, удаляется ли сам eventListener с пездюка при этом? По идее должен, но сука как проверить. Удалять явно листенер впадлу, там именованная функция должна быть - впизду переписывать.
>>1209790 Ответа на твой вопрос нет. Ты не контролируешь среду выполнения (бровзер у клиента). Раньше они текли на ровном месте. Сейчас даже куски замыканий выбрасывать умеют. Если будут неприемлемые тормоза в конкретном браузере, дампать память и смотреть.
Почаны, почему vue.js настолько меньше весит чем реакты и ангуляры? В чём подвох? Можно использовать его в проекте не беспокоясь о том, что может всплыть какая-то хуйня?
Поддерживается: - генерация ключей RSA, ECC - цифровая подпись - проверка подписи - шифрование (с подписью или без) - дешифрование (с проверкой подписи или без) - шифрование файлов, в том числе и бинарных - закачка файлов, в том числе и бинарных.
>>1210165 >форкнул чужой проект >поменял название с PGP Key Generator на PGP Suite >Посоны, я принёс вам таскабельный PGP У нас тут Денис Попов выкатил свежий релиз Болженос 2.0
>>1210199 Я пхнул туда верификацию отдельной вкладкой, и в декрипт, сунул её тоже. Base64 для файлов добавил и функции к закачке файлов.
Что делать? Думал вы подскажете, после всяких тестов. Может, какой-нибудь Jasmine-тест прикрутить можно было бы ещё.
Но есть несколько намеченных направлений для фиксов... 1. Я не могу зашифровать сообщение на сайте https://smartninja-pgp.appspot.com используя ключи, сгенерированные здесь. А вот ключи сгенерированные там - шифруют нормально. Это указывает на несовместимость генераторов, но я нифига не пойму при компарации kbpgp. Тот человек пишет, что эта версия - SSH-адаптирована. Возможно поэтому генераторы несовместимы, но у SSH - другие ключи. Пикрил. Возможно было бы выдавать и их.
2. Когда сообщение зашифровано (публичным ключём RSA), да ещё и с подписью (другим приватным ECC), в зависимости от очерёдности, должно бы быть возможным либо дешифрование без проверки подписи, либо проверка подписи и возврат шифрованного сообщения с фингерпринтом. Ни первое, ни второе - не работает. Подозреваю подпись обоими ключами.
3. Я видел ещё, там, внутри, Diffie-Hellman'a - его можно было бы вынести - отдельной вкладкой.
>>1210353 А ты кто вообще, чё материшься и забей на него. >>1210353 Ты там не прихуел? Ещё и картинку прилепил. Ты посмотри когда форк сделан, это во-первых. Во-вторых, пикрелейтед >>1210367 Ой, ну не бампай себя.
Это JavaScript-тред? А то тут как-то тухло. Я думал во фронтенде всегда большая движуха. Хм. Объясните пожалуйста суть CORS. Вот допустим, запрещены в большинстве браузеров кроссдоменные XMLHttpRequest-ты. Чтобы его выполнить, такой запрос должен удовлетворять двум требованиям: 1. Быть простым (т.е. POST/GET + 4 заголовка) 2. Ответ сервера должен в заголовках содержать Access-Control-Allow-Origin заголовок, который как бы намекает о том, что сайт работает с междоменными запросами и всё ок.
Если первое требование не выполняется, то, я так понял, запрос не совершается вовсе, что можно обойти с использованием предзапросов.
А если второе, то запрос совершается, но при отсутствии необходимого заголовка ответа браузер не вызывает событие load.
Но прикол в том, что запрос всё равно совершается! То есть, если по данному урлу есть какая-то логека, то она отрабатывает в любом случае, просто клиент получит ошибку. В чём суть этой йоба-защиты, если она ничего не меняет и не предотвращает сами запросы?
>>1210491 А, я понял. Защищают ведь не самого хацкера лол, а клиента, который посетит хацкеркий сайт. Ибо данные, которые были получены от такого запроса до клиента так и не дойдут (браузер их парежит), поэтому они далее никоим образом обработаны быть не смогут.
>>1210508 >инкрементишь раз в секунду >js Разве что это на ноде делать, а затем - по вебсокету гнать. Нет, правильнее таймстамп переводить с свой кастомный формат, и таки да, обновлять отображение раз в секунду.
Вот отсюда первый абзац https://www.regular-expressions.info/captureall.html: When creating a regular expression that needs a capturing group to grab part of the text matched, a common mistake is to repeat the capturing group instead of capturing a repeated group. The difference is that the repeated capturing group will capture only the last iteration, while a group capturing another group that's repeated will capture all iterations. An example will make this clear.
Let's say you want to match a tag like !abc! or !123!. Only these two are possible, and you want to capture the abc or 123 to figure out which tag you got. That's easy enough: !(abc|123)! will do the trick.
Now let's say that the tag can contain multiple sequences of abc and 123, like !abc123! or !123abcabc!. The quick and easy solution is !(abc|123)+!. This regular expression will indeed match these tags. However, it no longer meets our requirement to capture the tag's label into the capturing group. When this regex matches !abc123!, the capturing group stores only 123. When it matches !123abcabc!, it only stores abc.
This is easy to understand if we look at how the regex engine applies !(abc|123)+! to !abc123!.
Например, \d+ находит числа – последовательности из 1 или более цифр:
var str = "+7(903)-123-45-67";
alert( str.match(/\d+/g) ); // 7,903,123,45,67
СООТВЕТСТВЕННО!
В примере выше 'abc123blablabla' не будет матча !(abc|123)! Но если добавить плюс, то матч будет. Но почему?! Ведь когда гайд делает !(abc|123)+! - по этой логике должна матчиться ИЛИ группа абц, повторенная 1 и более раз, ИЛИ группа 123, повторенная 1 и более раз. Ни повторений группы абц, ни повторений группы 123 здесь нет, и нет их объединения в одну группу.
Но по факту действительно матчится весь набор абц123 разом. КАК? Какого хуя! Ведь здесь нет ебаных повторений! ?
>>1210736 >по этой логике должна матчиться ИЛИ группа абц, повторенная 1 и более раз, ИЛИ группа 123, повторенная 1 и более раз Ну так оно и матчит группу, повторенную один и более раз. В строке 123abc123 группа (123|abc) повторяется три раза.
>>1211395 В ЖС только ремайндер, который иногда тоже называют модуло. Знак у результата будет как у делимого. 5 % 2 == 1 5 % -2 == 1 -5 % 2 == -1 Модуло есть в других языках. Там вроде знак от делителя.
>>1211444 У нас вебшторм, откуда без консоли большей частью манипуляций занимаются. На сколько понимаю, в вс коде тоже самое есть и ты говоришь об этом, типа меню, где выбираешь команды, и все за тебя делается. То есть норма и без заучивания команд.
RxJS с реактом не используют? Вот я там увидел полезные фичи, а потом вспомнил, что я это обходил просто используя стейт, играя с тру\фолс, чтобы предотвратить ненужные действия. То есть мне такого и нужно придерживаться, а RxJS больше для ангуляра подходит, где уже все по-другому?
И еще вопрос. Что используете из ramda? Какие мастхев методы есть и на какие стоит обратить внимание? Можно и из лодаша называть. Кроме пайпов и карринга.
>>1211444 Вообще не представляю, как и нахуя работать с гитом через UI. Разве что изменения смотреть, а так в сто раз легче и быстрее написать команду. Что там учить-то? git add, git commit -m, git commit --amend, git checkout, git merge, git pull, git reset, git push, git status - все, что тебе понадобится в 90% случаев. Половина из них говорит сама за себя
>>1211554 так-то две кнопочки в иде быстрее жать, чем скрывать иде, открывать консоль, писать три подряд команды, скрывать консоль. + без юи ты не видишь нормально кто сколько закоммитил, когда разошлись ветки, кто насрал в мердже и тд
>>1211558 Интересно, как можно работать без открытого терминала? В динамическом языке, например, хуй настроишь нормальный test-runner в IDE, легче уж в терминале команду выполнить. И напечатать команду всегда быстрее, чем мышкой кликать по залупам, выбирать, что закоммитить, что заресетить, что выкинуть и т.д. UI нужно только чтобы визуализировать изменения.
Не жава-программист и не программист вообще, но требуется запилить небольшой скрипт для браузера. Поясните, плз, как реализована вот эта ебала на пике. Не кукла, а именно форма и кнопки, которые бы появлялись при загрузке определённой страницы стороннего сайта. Это всё через изменение CSS-стилей страницы добавляется или как-то иначе?
>>1211690 А подробнее немного? Или дай ссыль на какой-нибудь страницу какого-нибудь learn.javascript.ru , где я мог бы прочесть, как именно такую форму сделать.
>>1211598 if else не говнокод, на одних тернарниках не разрулишься
циклы не очень по двум причинам, во-первых это зависимость от "внешних" переменных, типа каунтеров для for, либо условия для while, отсюда вытекает еще несколько грустных особенностей. во-вторых сейчас набирает популярность функциональный подход, а циклы - императивщина как есть.
>>1211598 С чего ты взял? Если совсем простое выражение, то можно заменить if..else на тернарный оператор, циклы обычно обернуты в функции поудобнее, например map filter reduce у массивов, но это тот же самый цикл. Без for..in ты объект не переберешь.
https://jrsinclair.com/articles/2017/javascript-but-less-iffy/ if есть, чем заменить. Но стоит стремиться к тому, чтоб код был человечным, походил на простые предложения. В таком случае if подходит лучше всего. Стоит избегать сложных условий. Если больше одного оператора или регулярка, то упаковать в функцию с понятным названием: if (isValid(email)) Чаще всего можно избавиться от else. Тогда ветвление, перегружающее мозги, станет простой последовательностью: if (cond1()) if (cond2()) Код должен читаться как предложение, без подрубания интерпретатора в голове. Если такое внезапно помогут сделать свич или тернарник — настало их время.
Циклы чаше всего нужны при работе с коллекциями. https://jrsinclair.com/articles/2017/javascript-without-loops/ Опять же, методы коллекций дадут код, более похожий на человеческие предложения: отобразить пользователей как их айдишники users.map(user => user.id) Вспоминая прошлый абзац, кто-то из пользователей админ users.some(isAdmin) Если коллекция большая, а задача нетривиальная, может потребоваться для эффективности таки использовать циклы, ветвление, байтоёбство. Ты уже догадался, нужно инкапсулировать всё это дело в функции с читаемым названием: users.reduce(comlexData, store); function complexData(store, user) {for { for { switch {} }}}
>>1211867 Если я не ошибаюсь, достаточно просто написать ИИ, который будет сводить любую партию к ничьей. В закреплённом треде попробуй спросить алгоритм.
>>1211716 Хотя нет, погоди. Ты меня наёбываешь. Хочешь сказать, что с помощью JS нельзя изменить страницу какого-либо сайта, чтобы добавить какой-нибудь элемент? Я же не на стороне сервера это делаю, а на стороне своего компьютера.
Сап, хотел написать дампер файлов с треда, чтоб локально хранить дамп треда. Первую версию написал на nodejs, в хедеры добавлял примерно те же хедеры и куки что и отправляет мой браузер даже usercode_auth, но почему то небыло доступа к gg,h,e и прочем 18+ доскам. Я на это забил. Но почему то даже при дампинге с b треда у меня половина файлов бьётся. Код вот https://pastebin.com/6P700q00 . Сделал синхронную загрузку файлов и со sleep между файлов. Но все равно блять, они бьются. че за хуйня ? Делал синхронную загрузку чтоб время было между реквестами. Ибо получается ебучий дудос (5 реквестов в сек лол) и вдруг Абу посчитает что это дуос и заблочит
>>1211863 Ну да, слава богу, что уже несколько лет можно не трогать руками кривейшие жс-прототипы, а использовать более-менее человеческий сахарок классов и забыть про эту хуйню как страшный сон.
>>1211933 Интересно, как ты собрался писать без ООП на ОО-языке? Нет, я понимаю конечно, что и на джаве можно в 100% функциональном стиле писать, но нахуя стрелять себе в ногу?
>>1211930 Так как тогда добавить блок или редактировать, например, на том же mail.ru? Как правильно называется сие действие? Мне банально нужна форма с полем для ввода текста и кнопкой.
>>1211946 Где я тебя прошу её реализовывать за себя? Ни в одном посте с самого начала это не было. Я попросил дать ссылку на урок или хотя бы ключи для поиска.
>>1211953 Я хз, что ты этим сказать хотел. Выше я уже писал, что ни разу не программист. Ты можешь нормально сказать, что гуглить, а не кичиться тем. что ты знаешь js, а кто-то нет?
>>1211962 Бля. Я сделаю скрипт, вставлю его в хром, а именно в тэмперманки. Нахуя мне его руками каждый раз вставлять? Вопрос в том, какие теги/команды/функции/хуй знает, что ещё встраивают ту же хтмл разметку или ксс из этого скрипта на страницу, на которой он запускается.
>>1212000 > Хоть как свой скрипт вставляй. Так с этим вопросом я сюда и пришёл. Сколько ни гуглил так и не нашёл, как его вставить. Везде предлагается только <script></script>. Руками, естественно не подходит.
>>1212072 Я перекатился(потенциально) в охуенный эликсир, а на жсе сделал пару простых серверов и сейчас перехуячиваю фронт для старого рельсо проекта на реакт, чтобы не было так больно работать с тем легаси-говном, что там накопилось в ассетах. Ну и сам проект перевожу на эликсир потихоньку, потому что давно нужен полный рефактор, так что хули бы и не переписать на новый стек. Надеюсь к концу года будут заметные результаты. рубист не-смузихлеб
>>1211952 >Котаны, а как перекатится в новомодный js после двух лет на ruby? С чего начать?
С понимания что нода - это однопоточный эвент-луп поверх восьмеры и libuv и весь твой код, который не из батареек, его нахуй блокирует. Потому что в батарейках, как правило, попердолились с асинхронностью за тебя.
Чтобы не блокировал - тебе нужно чтобы твой код регулярно совершал антипаттерн многопоточного программирования - то бишь ложился нахуй спать каждые n итераций - в результате чего получается что пердак будет гореть только у одного клиента, который будет полтора часа дожидаться отчета о доходах/расходах компании в разрезе временных отрезков, а не у всех остальных, из за того что бабаманя из бухгалтерии положила весь твой бэкенд нахуй.
Есть еще конечно,встроенный хластер, но он всего лишь запускает 8 отдельных экземпляров твоей аппликухи и обеспечивает свой маняраундробин-фейловер (с этой же задачей справляется гораздо лучше нужник и http на unix domain sockets), но его отличие от первого варианта в том, что таких бабмань-бухгалтерш понадобится для убивания апликухи не одна как в первом случае, а по количеству процессоров.
ES6 и ES2015 в этом плане принесли возможность использовать промисы и yield, что несколько облегчит твою жизнь, но необходимость превращать свой код в лапшу из setTimeout() по прежнему остается, как только твоя бизнес логика вырастет за пределы "склеить батарейки по Readme.md".
и не делает, потому что верх сложности проекта для них - это интернет-магазин, где самая тяжелая бизнес-логика это запросы для бд, которые в тамошних батарейках асинхронные по-умолчанию.
А описанное тобой обычно на интырпрайзной жабе пишут.
Тот случай, когда ООП обусловлено сутью библиотеки (мапинг кусков хтмл в виджеты). Хуизнес-логика один хер - это асинхронные колбеки/асинк с промисами, с которыми ооп не дружит.
>>1212218 В оригинале реакт вообще был на Standard ML написан. ООП интерфейс взяли при порте на JS чтобы народ не спугнуть, да для оптимизации под JS реалии
>>1212244>>1212277 Охуеительное у вас представление об ООП уровня восторженного ньюфага "ФП хайпят, значит ФП это охуенно а ООП - говно". Объект - это набор методов с внутренним стейтом, только и всего. Если вы раньше хуячили наследование наследования наследования и называли это "ООП", то это не проблема ООП и вы так же будете хуярить говнокод в любом функциональном языке.
На жсе писать в тру-функциональном стиле нерационально и практически невозможно. Композиция функций, лямбы, монады и т.д - это не ФП. Это его элементы, которые прекрасно уживаются с объектами и классами. Точно так же, как наследование, полиморфизм и прочие элементы ООП прекрасно применяются в функциональных языках. Хорошая программа должно использовать и то, и то.
Вот есть какая-нибудь var string='abc123'. В этой стр, допустим, можно выделить (abc)(123) // $1$2 Вот так можно захватить группы в .test, .match, .replace.
А вот как мне эти захваченные группы засторить в переменную?
Т.е. грубо говоря 1. Действие один - где-то захватываю группы (н-р var RegExp=(abc)(123) или хз 2. Действие второе вынести группу $1 или группу $2 в переменную. Чтобы потом можно было реплейсить в стр переменной, в которую засторили группу 1 или группу 2 плюс совершили действие какое-то.
Объясните мне, котаны, чтому в вашем жабоскрипте такие хуёвые числа. Бабосик считать - рви пердак, числа больше сраного квадрилиона (может пилить экономическую стратегию хочу, или там круд для банка ZOG) - используй другие библиотеки и рви пердак .add(number2) вместо оператора сложения, и так блядь весь код потому что мне большие бабосики складывать надо. Чому такая хуета, да и вжабке обычной тоже, все пиздят за интырпрайз а как бабосики считать - так рви пердак, где ж этот ваш интырпрайз?
Есть stateful компонент item-editor, в нём два text input и кнопка save. И есть список items. При нажатии на строку этого списка в item-editor передаётся выбранный item как prop. При этом value у input'ов заданы из внутреннего стейта + onChange.
И получается такая хуйня, что всё это не работает. Потому, что стейт не знает, что проп поменялся, и надо обновиться. Потому, что реакт - сюрприз - нихуя не реактивный, лол.
getDerivedStateFromProps() - не то. Делать сайд-эффект в shouldComponentUpdate() - менять там state из нового prop?
Внимание вопрос знатокам. Задает полный нубас. Юзаю я значит Math.random(); и всплыл такой вопрос - по нему совсем малая погрешность, т.е. на 1000 итераций, если брать, скажем, 0.15 как пограничное число, выдаст что-то вроде 144 тру и 856 фолс. Это Node.js, почему у него ядро такое предсказуемое? Я сейчас еще запилю хвататель стриков, посмотрю сколько подряд выхлопов дает тру/фолса, но вангую что не много, при таких=то показателях. Вопрос в догонку, есть ли другие варианты рандома?
Проблема в том, что он должен меняться при смене prop у item-editor - когда выбрали новый item. Но, нормально это можно сделать 1 раз - в конструкторе.
>>1212608 Мне не для безопасности, просто в Питоновском мате приходилось делать костыль для обрезания долгих стриков, при "шансе" в 1% могло выдать и 300 и 400 фолсов подряд. Сейчас почитаю что скинул, спасибо за внимание. Обезьяна конченная зачем ты прокси банишь на /pr/?
>>1212662 >И ты каждый раз в конструкторе ... Да неужели, лол. Естественно - на момент создания компонента редактируемый item не выбран.
За ссылку - спасибо. Это именно то, что нужно. В итоге всё, как обычно, сводится к lifting state up.
Реакт, конечно, лютая opinionated xyuta. Реально, прямо физически утомляет всё это. Одного китайца, похоже, так утомило, что он аж целый фреймворк написал, лол.
>>1212679 Да это понятно, но, проблема же не в этом. В итоге, при создании всё равно соответствующие поля в стейте будут пустые. Вопрос был - как менять state при изменении props.
В принципе, componentWillReceiveProps() - это решение. (И getDerivedStateFromProps() - нихуя не замена ему, как они пишут.) Но, они говорят - это антипаттерн, выносите состояние (и обработку его изменений) выше.
Алсо, умиляет, что тот блог-пост всего 10 дней назад написан.
На самом деле - этот пример (и тот, что в блог-посте) - это самая мякотка Реакта, которая показывает всю глубину ебанизма. Снова вспоминаются всякие афоризмы на тему pure = poor, лол.
>>1212694 Итем лист и item-editor обернуты в родительский компонент. Когда ты жмешь на итем в списке, родительский компонент апдейтит свой стейт {selectedItem: item} и соотвественно ре-рендерит все дочерние компоненты, включая item-editor, куда передает item={selectedItem}. editor инициализируется заново с новыми props и проставляет себе новый state, соотвественно перерендеривая все дочерние инпуты с нужными тебе значениями. В чем проблема, что я упускаю?
>>1212699 Item-editor не создаётся заново при этом. Конструктор не вызывается. Стейт не меняется.
Надо использовать componentWillReceiveProps(newProps). Или выносить стейт и onChange в род. компонент, а item-editor делать функцией, как в примере в том посте по ссылке.
C getDerivedStateFromProps() у меня (вчера) не получилось, надо попозже ещё попробовать, возможно, я чего-то недопонял.
Чтобы было понятно, зачем я со всем этим ебусь - я хочу понять, чего оно вообще стоит, в целом, прежде чем всерьёз в это ввязываться.
Потому, что Vue мне кажется в разы более практичным. И кроме удовольствия других эмоций не вызывает. Но, у React мне нравится инструментальная поддержка, и вообще то, что это чистый JS.
Но, если за эти ништяки надо заплатить слишком дорого - то пусть оно идёт на хуй. Потому, что для Vue инструментальная поддержка тоже неплоха (для single file components), а бойлерплейта там в разы меньше. И куча дополнительных ништяков. И можно даже писать в react-стиле на JSX (но неинтересно и не нужно, в большинстве случаев).
>>1212713 >Потому, что Vue мне кажется в разы более практичным. Вьютух становится всё изобретательней. Уже целую многоходовочку с лифт-стейтом разыграл, как по нотам.
>>1212713 Все, я разобрался. Да, думал, что конструктор вызывается при каждом рендере, потому что с реактом работаю недавно, но в принципе проблема понятна - ты пытаешься менять один и тот же логический стейт(значения инпутов) из двух разных мест, вот реакт и выебывается, потому что локальный стейт должен меняться только изнутри объекта, а не откуда попало.
>>1212738 > Вьютух Ты имеешь в виду некоего хуя, который по весне форсил тут Vue? Я не он, лол.
>как по нотам По хуётам. Просто у меня стиль работы такой - докапываться до самой мякотки. И я, похоже, её нашёл. Всегда есть какая-то одна проблема, которая тянет за собой остальные.
Костыль в виде getDerivedStateFromProps() - это и есть попытка это исправить. Надо с этим разобраться, пока не понял, будет ли с этого толк.
Что касается практичности, Vue - охуенно практичная вещь. И весьма сбалансированная. И значительно менее opinionated, чем реакт. Пока реактоблядки разбираются где паттерн, где антипаттерн и хуярят тонны бойлерплейта - на Vue просто пишут компактный работающий код.
Тут главное, чтобы в будущем они не понаделали какой-нибудь хуйни, в попытке улучшить хорошее.
А реакт имеет то преимущество, что ломать там просто нечего, лол.
>>1212848 >Костыль в виде getDerivedStateFromProps() Это не костыль, это возможность для реализации edge-cases. Твой случай решается по-другому, выше ссылка уже была. Конкретно объясни, что в этом решении тебе не нравится и зачем ты хочешь менять стейт и снаружи компонента, и внутри, когда можно его вынести в одно место и сразу видеть, все случаи, как и из-за чего он может измениться, а не гадать по кофейной гуще с дебагером.
>>1212875 >что в этом решении тебе не нравится и зачем ты хочешь менять стейт и снаружи компонента, и внутри
Речь идёт о низкоуровневом, "техническом" стейте - необходимом для функционирования controlled input. И мне бы хотелось, чтобы он был инкапсулирован там, где он используется. И я не хочу его менять, я хочу его за-менять, полностью. А мне предлагают всё это говно тащить на самый верх, ибо иначе (через componentWillReceiveProps()) - "антипаттерн".
И тут мы приходим к интересному выводу. Дело в том, что Реакт - это библиотека (не фреймворк). И делает она только view. Больше там нет нихуя.
И совершенно _любой_ (встроенный) стейт в Реакте - технический, низкоуровневый. Предназначенный исключительно для функционирования внутренней механики view. И делать на нём какую-либо бизнес-логику совершенно неправильно.
Но, большинство людей этого не понимает, и пытаются. Отсюда и все эти тучи разъяснений и поучений в интернетах, как надо и как не надо юзать Реакт.
Короче, смысл в том, что в чистом виде Реакт _вообще_ не пригоден к использованию. К нему _обязательно_ , сразу же. надо наворачивать что-то для поддержки бизнес-логики. Редукс, МобИкс, event bus, что угодно.
И это-то мне и не нравится. Хотя, этот недостаток, по сути - ни что иное, как продолжение достоинств.
Короче, как я уже тут писал - слишком низкоуровнево и слишком затратно.
>>1212931 >Речь идёт о низкоуровневом, "техническом" стейте - необходимом для функционирования controlled input. У инпута единственный стейт - это его значение. То, что ты можешь его менять через onChange, не значит, что он технический. Просто браузер предоставляет тебе функционал для детекта ввода от юзера, который реализован через эвент. Если ты хочешь детектить другие эвенты(клик по списку итемов) и изменять значения инпута соотвественно, то тебе нужно каким-то образом связать инпут еще и с тем эвентом. Реакт считает, что все эвенты, которые влияют на стейт компонента, должны объявляться и триггериться в одном месте. Для этого и нужно lifting state up, чтобы обернуть связанные между собой компоненты и объявить эти эвенты. Я по UI не эксперт, так как работаю в основном с серверной частью, но по-моему это вполне здравая идея.
>Дело в том, что Реакт - это библиотека (не фреймворк). И делает она только view. Больше там нет нихуя. Это должно было стать понятно сразу после прочтения доков. Из-за этого он мне и понравился, но понятное дело, что если ты начинаешь в любых вьюхах(не только реактовских) хуячить что-то кроме презентативной логики "взять то, поставить туда", то рано или поздно останешься с кучей неподдерживаемой хуйни. Об этом знает любой, кто работал с каким-то популярным MVC фреймворком.
>>1213136 MVC в современном понимании - это полная хуйня, которая не работает, как только твое приложени становится чуть сложнее палки. Ну нельзя всю логику запихнуть в модели/контролеры/вьюхи и не остаться с кучей говнокода, который не принадлежит ни к чему
На самом деле, то, что я пытался делать с Реактом - это как раз таки попытка сделать классическое "клиентское" MVC. Там, как раз, бизнес-логика вперемешку со техническим стейтом. Взять, хотя-бы, Java Swing. Вот тут эта проблема хорошо описана: https://habr.com/company/tuturu/blog/321820/
А Реакт для MVC не годится. Т.е. можно, но некрасиво получается. Да и незачем, лол.
Конкретная же описанная проблема решается через ресет стейта под новый item в componentWillReceiveProps(). Всё работает просто замечательно.
Ребята, кто с джава работает и сам из Новосибирска отпишитесь, нужно написать бота для лайв ставок как расширение хрома, пример бота рабочего есть, исходный код можно посмотреть
Почему хроманя с последней версии неправильно конвертирует строку в дату? Какой еще часовой пояс +03:06, они там совсем ебанулись в своем гугле? В лисе все нормально.
Ребята, кто с джава работает и сам из Новосибирска отпишитесь, нужно написать бота для лайв ставок как расширение хрома, пример бота рабочего есть, исходный код можно посмотреть
>>1213402 Понятно. Тебе надо self = this. Это руками, везде, где this может быть неправильным.
Напр. тебе из метода объекта надо вызвать колбек, и внутри колбека обратиться к объекту. Тогда в методе перед вызовом колбека пишешь const self = this. А потом уже в колбеке self.someProp ...
Также, можно привязывать колбек к this объекта. Точнее, создавать новый колбек, привязаный к нужному this: this.boundCallback = someCallback.bind(this); В реакте так делают - в конструкторе класса.
Анон, я совсем даун. Объясните как работает обработка ошибок в callback-функциях в контексте резервации первого аргумента для ошибок. Вот на примере это не могу понять нихуя https://stackoverflow.com/a/19739899
>>1213495 Да просто надо писать по книге «Vuex Concepts» (Daniel Schmitz & Daniel Pedrinha Georgii), а не скрещивать бульдога с носорогом. Получится тот же React/Redux, но более быстрый, за счёт отсутствия VirtualDOM. Вот она: https://bit-ly/2K5Yw6p
>>1213502 Из браузера - никак, js не имеет доступа к файлам системы. Можешь искать API борды, скорее всего там есть такая возможность, сможешь на ноде скрипт написать.
>learn.javascript.ru - Самый главный русскоязычный сайт по JavaScript. Других таких подробных уроков не найти. Начинать строго с него. Пиздец, ну и говнина этот кантор, нихуя толком не объясняется и вообще какая-то ебанина.
Сейчас читаю одну книжку (на английском) про жс, и охуеваю с того, как я жил раньше и не знал основ.
>>1213640 Ну а хули делать, вкатывальщики обычно английский знают на уровне бе ме, а потом уже подтягивают хотя бы до чтения технической литературы. Им кантор самое то.
>>1213501 >Vue >но более быстрый, за счёт отсутствия VirtualDOM. >отсутствия VirtualDOM Ты, я смотрю, просто эксперт. В пионерлагерь-то чего не поехал? Или прямо оттуда двачуешь
>>1213495 >намешивает ангуляр с реактом Ты, вообще, понимаешь, что такое ангуляр? Видел его? Сходи, посмотри, лол.
>без своего видения или идеи Там есть охуенная идея. Весьма необычная для фронтенда в наши дни.
Она в том, чтобы не заставлять людей натягивать сову на глобус и и потом дрочить вприсядку, как в реакте и ангуляре. А дать им возможность плодотворно работать в том стиле, который они предпочитают.
И там компоненты - это именно компоненты, в том смысле, в каком их понимает нормальный человек, а не просто кусочки хуйни, как в реакте.
>>1213640 дай угадаю: ты долго ковырял Кантора, потом бросил, начал читать книжку, все стало усваиваться лучше и ты сразу такой: бляя) кантор хуйня какаято непонятная, книга лучше оказывается) Расскрою секрет - если бы ты сначала ковырял книгу, а потом начал Кантора, тебе бы второй ресурс показался понятнее, потому-что ты уже пришел туда с какими-то знаниями, и начал просто их раскладывать по полочкам и систематизировать. Просто, я часто смотрю видосики на ютубе, и там всегда находится какой-нибудь восторженный долбоёб который напишет: спасибо автор!! я уже на трёх разных ресурсах учил <<хуйнянейм>> и только у тебя я понял, потому-что ты лучший!!!!. Нет бля, он не лучший, просто тебе долбоёбу нужно четыре раза объяснить всё с разных сторон, чтобы ты понял.
А вообще, я считаю именно книги хорошим способом упорядочить знания, а для первых шагов лучше использовать метод теория+практика в одинаковых дозах, а Кантор для этого подходит лучше
>>1213761 По-моему браузер вообще не позволяет жсу хоть как-то менять значение файл инпутов. Можно разве что самому составить кастомную формдату, куда и включить эти файлы, после чего запостить.
>>1213716 >>1213756 Что-то меня тоже от кантора поблёвывать тянет малоть. Какой раз пробую читать и как-то не идет. Попробую Eloquent JavaScript, уже не первый раз её вижу.
>>1213790 Изучал веб-стек php, js, html, css (ну и периферию в виде протоколов, бд, етк) руководствуясь лишь спеками и справочниками. С нуля. До этого не знал ничего вообще.
>>1213794 Из книг считаю вообще напрасной тратой времени читать что-то по конкретным языкам. Читать можно лишь что-то монументальное по алгоритмам, по операционкам, архитектуре, сетям, или философское, по типу Раскина или Макконела, если любопытно. А языки изучать по книжкам, это это от лени какой-то.
>>1213780 позволяет только сбросить значение пустой строкой. а что измениться если заменить форму? то есть в ней же тоже будет инпутфайл, которому нельзя задать значение програмно.
>>1213925 да не я думал меня сольют, начали задавать вопросы аля как происходит процесс рендеренга страницы чем прототипная парадигма отличиается от ОО и я чет поплыл. Что даже для меня удивительно т.к. большинство ответов на большинство вопросов я знал. Сидел мямлил что-то невнятное.
>>1214415 Не сильно он тех. терминами перегружен? Со словарём осилить можно? А кто попробовал Выразительный Javascript и охуел и от абстракций и афоризмов разных.
>>1214462 Актуальная. Тут тебе сразу про стелочки расскажут, про let, про const. В русиче дай бог отдельно есть, если есть вообще инфа конкретно от него про всё это.
Хуёво - это не "что", это "как". Информации куча, да. И она достоверная. Но, в качестве учебника с нуля, для человека, не умеющего программировать - хуёво. А его именно в таком качестве и пытаются использовать.
Чтобы было понятно о чём я - посмотри серию книг "Grokking ..." или тот же "Head First ...". Или совершенно охуенную митовскую "Once Upon an Algorithm".
>>1214481 >const Никогда кстати не использовал эту залупу, и не могу представить юзкейс, где она бы решала какую-то проблему, а печатать на два символа больше - идите нахуй. Особенно умиляет, что во всех гайдах теперь пишут const hui = require("penis"). В жс-манямире серьезно есть макаки, которые переписывают внешние переменные внутри функции?
>>1214514 не понял что ты хочешь? Ты хочешь что бы вместо стандартного сабмита был аякс? Тогда просто отмени стандартное действие браузера - event.preventDefault()
>>1214550 Чувак на видео говорит, как я описал выше, что это функция. Но нигде в интернетах я не нашёл подтверждения, вот я и запутался - прав он или нет?
>>1214557 Функция это инкапсулированная часть кода. + в контекст инкапсулированного кода никак не вписывается. Конкретно в жс, + это оператор, а какой любой другой оператор он возвращает значение. По итогу выполнения инструкции да, похоже на функцию. Семантически нет, это не функция.
>>1214568 >Даже видео называет Операторы, а не функции. Смог всё-таки перевести название через гугл транслейт, молодец. Жаль только, что содержимое не осилил.
1) Сделать сайт. Стиль и содержание не важно. 2) Разместить на всех страницах меню для перехода по страницам с использованием javascript XMLHttpRequest. переход по страницам без перезагрузки) 3) Для реализации не использовать сторонние js плагины, только нативный js.
Так это первый сайт в моей жизни очень туплю. Результат 15ти часов мозговых усилий работает так:
Со стартовой страницы localhosta переход действительно выполняется без обновления странички. Однако затем наступает крах. Т.е. перешёл с main на, скажем, 1 - всё ок. А уже обратно - нет. Впрочем, если затем перейти, допустим, с 2 на 3, то код тоже не сработает, но зато сработает ОБРАТНО. Короче, я запутался совсем.
КТО ПОМОЖЕТ РАЗОБРАТЬСЯ - СКИНУ 100 РУБЛЕЙ НА ТЕЛЕФОН
>>1214513 >const >не могу представить юзкейс, где она бы решала какую-то проблему Есть такая вещь, как стиль. В смысле - хороший. Или его отсутствие, вот, как в твоём случае.
Всем привет! Уже год пишу на java. Могу в android. Знаю spring и другие мелкие библеотеки. Ближе к делу. Перед тем как начать изучать яву, я прошел коротенький бесплатный курс по javascript на geekbrains, мне он тогда не очень зашел кстати почему он мне не понравился я так и не понял, но сейчас загорелся желанием писать и на js тоже. Как мне следует начать его учить? В программирование в целом я уже могу, поэтому Марейн Хавербек - "Выразительный JavaScript" мне наверное не подойдет? Если так, то сможет ли Дэвид Фленеган - "JavaScript: Подробное руководство" научить меня, как новичка в js его синтаксису и особенностям? Может быть есть какие-либо годные видео курсы при изучении java читал книгу и паралельно смотрел нужные видео туториалы . Какие книги читали вы, в самом начале изучения?
Аноны, объясните глупому: почему при оборачивании вызова в функцию контекст не теряется и берется по замыканию? Разве обычный вызов не так же работает, т.е. сначала переменная ищется внутри, а потом - снаружи? С меня как обычно.
>>1214716 Ну блин. Привыкай. У нас тут коллбеки, замыкания, контексты. Можем явно указывать, что является this... Я сам с джавы пересел на джваскрипт, некоторые моменты показались очень странными.
>>1214724 Крч смотри. Ты передал функцию, в которой есть обращение к контексту (this). Ты передал саму функцию, отдельно от объекта user, потому что user.sayHi не более, чем переменная.
>>1214716 Отличный пример того, что этот ваш кантор - полное говно в качестве учебника.
Если ты о первом блоке кода в подразделе, о том, где написано "Теперь код работает, так как user достаётся из замыкания." - то смысла в нём нет вообще никакого, поэтому искать его бесполезно.
>>1214726 >Если ты о первом блоке кода в подразделе, о том, где написано "Теперь код работает, так как user достаётся из замыкания." - то смысла в нём нет вообще никакого, поэтому искать его бесполезно. Два чаю. Я всегда говорил, что этот ваш кантор говнище полное.
>>1214732 >>1214726 Именно это я и имел в виду. А что тогда человеческое есть из учебников (не сраные курсы)? >>1214725 Ок, поебал пример этот туда-сюда. Работает же нормально, если тупо написать setTimeout(user.sayHi(), 1000);. Зачем ебля с врапперами?
>>1214733 В setTimeout нужно передавать функцию, которая выполнится через время во втором аргументе. Если передавать в setTimeout функцию(), то функция выполняется сразу, а setTimeout будет пытаться выполнить уже результат выполнения функции через указанное время.
>>1214767 Соре, вылетело из головы. Про других не скажу, но у нас: react, react native, koa, mongoDB, sockets.io, doker, ansible, drone CI. >>1214769 маняпроекции
>>1214787 Особых проблем нет, как обычный реакт, различий минимум. У нас апликуха чисто под андройд, и я иногда предлагал ПМу некоторые нативные вещи писать самому (хорошо знаю джава), но он отказывается, говорит, проще найти готовые решения, и пока все находили.
Я на самом деле много вещей из стека пропустил, их так и не упомнишь. Redux, postcss... много чего используем.
>>1214733 На самом деле, им можно пользоваться как учебником, но, при условии, что ты не воспринимаешь его как истину в последней инстанции.
Непонятно что-то - загугли. Думай сам, короче. В любых учебниках и книгах всегда есть ошибки или неудачные примеры. Поэтому, всегда надо сравнивать в сомнительных случаях.
В данном случае, проблема в том, что он, желая проиллюстрировать идею замыканий, карринга и прочего, привёл совершенно негодный пример. Даже анти-пример. И даже ньюфагу, вроде тебя, это понятно.
Если интересно, что ещё бывает из учебных материалов - читни этот тред за последние пару дней, хотя-бы. Ну и шапку, конечно.
>>1214935 Вот ветка в которой только мои изменения, перенес функционал чата (личный кабинет) с jquery на реакт(не весь еще) и верстку (готовую) по компонентам разбросал
>>1214930 >16лвл >>1214939 >16лет >>1214948 >мне 16 Да мы поняли, что ты свое скудоумие возрастом оправдываешь. У меня в компании в год +500 к зп, пока не будет 3000, такие дела. Так что через 1.5 годика буду нормальным кодером в твоем манямирке.
>>1214719 Кантор тоже не может в карринг. Потому, что то, что он называет каррингом, на самом деле называется partial application. А карринг - это немножко другое.
>>1214961 >Кантор тоже не может в карринг. Та как так? Он же кумир молодежи. Идол вкатывальщиков. Учился в самом МГУ, защитил кандидатскую диссертацию. Неужели правда не может? Неужели? Неужели правда? Я не верю! Слышите! Не верю!
3 главных принципа костыльно-ориентированного программирования, а именно инкостыляция, костылирование и поликостылизм, полностью поддерживаются Javascript.
>>1215149 Вот только я знаю ответ, а ты нет. И кто из нас после этого дебил? Люблю спрашивать на собесах этот вопрос, и всякие вкатывальщики начинают бубнеть под нос что-то несуразное - ведь они учились по кантору и кокодемии, где их учили формочки шлепать, а как устроен язык они не знают.
Нужно расширение для jq ищущие ближайший подходящий элемент, не .parent(), .children(), .closest(). А именно ближайший подходящий, поебать на удаление, пусть он хоть на другом краю DOMа лежит, чет загуглить не получается, я хз как такую годноту не заделали, а самому писать влом.
Не могу загуглить вопрос, не получается сформулировать просто. Нужна помощь.
Скажем есть строка, пускай будет 'Hello, World'. Есть еще одна строка, пускай будет 'Hello, Wo'. Каким образом мне найти оставшуюся часть второй строки до первой? То есть rld?
>>1215396 >О регулярках не слышал? Слышал конечно. Но изучить как-то руки не доходили. Охуенная оказывается вещь, строку блядь менять можно как хочешь. на хую прямо вертеть!
На самом деле, они делают всё это из-за сервер-сайд рендеринга и прочих оптимизаций, имеющих значение для сайтов типа фейсбука, с десятками миллионов посетителей.
Типа - да, надо дрочить вприсядку, но зато ...
А на простого васю из мухосранска им глубоко поебать.
Можно ли в реакте мап в мапе вызвать для рендера, например, строки таблицы и ячеек? { rows.map((row) => ( <TableRow key={row.id}> { row.map((cell) => ( <TableCell>{cell}</TableCell> )) } </TableRow> )) } Так делаю, но выдает row.map is not a function.
>>1215768 Stateless компонент - это функция. Может ли быть функция в функции? Конечно, может. Вот прямо только что такую написал, и именно в функциональном компоненте, лол.
>>1215744 Тэги JSX - это вызовы функций, возвращающие значения. Аттрибуты = параметры. Исходя из этого и определяется, что можно, что нельзя.
>>1215782 Вот тебе, кстати, пример (хотя, немного на другую тему):
const add = a => b => c => a + b + c;
Это функция - функция - функция. В middleware к редуксу такие вещи можно увидеть, например. В данном случае - это каррированая функция сложения трёх аргументов.
Вызывается так: const result = add(1)(2)(3);
Или так: const add1 = add(1); const add1and2 = add1(2); const result = add1and2(3);
Т.е. можно получать промежуточные специализированные варианты. Напоминает наследование в ООП.
>>1215787 Он же не про это. Он в своих функциональных-компонентах хочет просто обьявлять функции-помощники. Он не собирается их возвращать. Он хочет их использовать просто как использует методы в классах-компонентах Я сам правда не знаю принято ли так делать, или лучше функции обьявлять не в самом компоненте, а вне его.
>>1215794 Я же написал - это пример немного на другую тему. А перед этим ответил ему, что да, так делают. И это не говнокод.
Объявлять ли функцию отдельно, если она специализированная для этого компонента - дело вкуса. Если она большая, то да, это имеет смысл.
Смысл того, что я хотел сказать, в том, что функция в JS - это ровно такой же объект, как число или массив. Ты же используешь числа в функциях? Ну и вот.
Нормальный стиль, лучше не бывает, на самом деле, ты просто не привык, лол. Ты пытаешься в голове что-то наворачивать поверх этих стрелок, в то время, как их надо просто читать буквально.
Парин, я умираю, я не могу, как заставить говно работать с нескольики вебсокетами? Пилю парашу webgl С# и не могу сука сделать номральное взаимодействие с вебсокетами. Ну с одним заработало, а с нескольими хуй, я скачал jslib, но что там внутри не могу понять. Почему-то SocketCreate возвращает всегда ноль, и происходит какая-то поебата, не могу номрально разделить. В общем может кто поможет или ссылчоек на готовыйе примеры накидает. Пиздец.
>>1215817 Это просто дерьмовый упрощенный пример прямиком из статеек "ФП в жисе это круто мне так сказали но на функциональных языках я не писал", вот он и нечитабелен. >>1215787 Это называется композиция и в ООП она прекрасно применяется.
Подскажите, где я обосрался? Есть веб-приложение на чистом реакте, в нем - корневой компонент, как полагаться - es6 class. У этого класса есть метод, componentWillMount, где я открываю вебсокет. JSON с сервера обновляет стейт, что позволяет отображать данные в реальном времени, а JSON с клиента обновляет определенные данные на сервере. Всё работает, но только на десктопе. В мобильном браузере - не работает ws. При том что поддержка ws у него есть. react-websocket не подходит, т.к. нужна двухсторонняя передача данных, а у него нет метода send, AJAX параллельно сокету выглядит костыльно.
приветствую господ программистов!! подскажите плиз ньюфагу - как перемножить два больших числа так, что бы в результате не было что то типа такого 1.7588313343976082e+21 а было бы само число его ведь можно как-то преобразовать, правильно? но как??
Сука почему моча такой уебищный фреймворк для тестов. Пиздец просто! Почему вместо вот этого [CODE] describe('GET /user', function() { it('respond with json', function(done) { request(app) .get('/user') .set('Accept', 'application/json') .expect('Content-Type', /json/) .expect(200, done); }); }); [/CODE]
не сделать json в котором описать все тесты, типо:
где foobar это конструкция вида [CODE] { "request": "localhost:8080/api/login", "data": { "login" : "foo" "password":"bar" }, "headers": {...}, "positivecase": {...}, "negativecase": {...} } [/CODE]
Скорее всего проебусь с разметкой, но суть вы поняли. Может в треде есть дохуя опытные автотестеры чтобы пояснить мне нубу, почему моча такая какая она есть?
>>1216300 Да вот уже рука порывается, но ради своего проекта не хочется еще и движок для тестов писать 3 дня. Легче уже руками протестить, написав тест дизайн. Но бля... Че за черт эта моча?
>>1216284 Мока лишь среда тестирования, она условно говоря проходит по файлам, ищет тесты среди них и запускает, а за синтаксис обычно отвечают всякие там Chai(или supertester судя по тому что ты скинул)
>>1216306 Т.е отдельно автотесты я написать не могу? Только в код интегрировать? А минифицировать потом файлы для прода можно будет? Просто ну пиздец если еще и тесты в коде будут, то получится гигант просто.
>>1216313 Не зря я отдельную ветку завел... Ну пиздец теперь... А где есть документация этого чуда? Просто на их сайте нет. Да и туториалы всяких васянов читать себе дороже
>>1216319 Да я то знаю, я говорю за большинство, просто у меня в детстве была чашка с принтом "mocha". Пока английским не занялся в плотную, думал что это чашка для мочи
https://ideone.com/fynakg Как оно работает, может кто-нибудь тугому объяснить? Вот мы задаем значение num для функции, а как и откуда потом появляется acc, как на 7 строчке оно работает если не вводили никаких acc? С рекурсией все было намного понятнее.
>>1216384 acc - это параметр внутренней функции iter. Сначала iter вызывается с параметром 2. А потом - рекурсивно, с уточнённым параметром. Пока не будет достигнуто одно из условий выхода из рекурсии (if'ы).
Имя переменной acc - подразумевает аккумулятор (в рекурсивных функциях).
num берётся из внешней функции.
Тебе надо разобраться с замыканиями (closure) и рекурсией.
>>1216393 acc - это параметр внутренней функции iter, а для чего ему параметр 2? https://jsfiddle.net/q6v79gnu/8/ Вот меняю параметр и ничего не меняется, почему так, зачем он? в бесплотных на хеслете говорят что итеративное решение
>>1216393 Например, надо найти наименьший делитель для числа 5. Это будет само число 5, естественно.
Тогда будет такая цепочка вызовов: iter(2){iter(3){iter(4){iter(5)}}}
Слово return я убрал, оно подразумевается. Т.е. iter(2) вернёт результат _позже_ всех, когда все внутренние вызовы вернут результаты в обратном порядке. Т.е., число 5 будет передано по цепочке вызовов наверх.
>>1216396 2 - это то, с чего начинают искать ответ. Это не параметр, а значение параметра. Можешь хоть с 100 начинать, только вот, что ты найдёшь таким образом?
Нет. Это рекурсия - функция вызывает сама себя с новым значением параметра. Другой вопрос, что рекурсия тут простейшая, и её можно просто заменить на цикл.
>>1216478 Что тебя смущает? То, что значение переменным присваивается при создании объекта, или то, что b хранит значение переменной, а не ссылку на a?
>>1216487 >>1216495 Дело тут совсем не в том, ссылка это или нет. А в том, что _выражение_ вычисляется один раз в конструкторе, при создании данного объекта.
Хочешь, чтобы оно каждый раз вычислялось - так и вычисляй каждый раз - в геттере или в методе.
Короче, пойми разницу между значением и выражением, и т.п.
Алсо, ноутбук для серьёзного кодинга - это не очень хорошая идея. Мобильный проц он такой мобильный, лол. Или ты думаешь на нормальном процессоре полкило меди просто так висит?
Не надо смотреть на хипстеров в кофешопах, это просто картинки. А суровая реальность - сурова.
>>1216511 Посмотрел у себя. На десктопе i7 3770K + 16 Gb + SSD Samsung 850 Pro 256 Gb.
Запущеа идея, в ней открыт большой java проект. И запущена виртуальная машина VmWare с сервером. Памяти израсходовано 5.1 Gb. Всё работает быстро и хорошо.
JavaScript побольше отожрал бы, конечно. Но не думаю, что намного.
Кто-нибудь знает, как правильно деплоить приложения с помощью PM2?
Под правильно я подразумеваю, что установка зависимостей и конпеляция должны происходить на билд-сервере. То, что есть в документации PM2 — это какой-то пиздец: git clone, npm install, grunt dist выполняется на целевом сервере.
Очевидное решение — копировать билд-артефакт с помощью rsync и вызывать "pm2 reload" через ssh, но вроде как PM2 уже предоставляет средства удаленного деплоя, так что странно им не воспользоваться, если он настраивается как надо.
сильно начинающий вопрос Привет анон! подскажи пожалуйста по нескольким вопросам. Есть JS динамически генепирующий кучу контента типа статей Есть директория к кучей изображений и текстов . Я к сожалению пока пишу только на JS и то новичок , поэтому не придумал ничего лучше чем забирать тексты из JSON ajax запросом и для каждой картинки прописывать URL и высоту- ширину . В общем кошмар .
Задача "сгенерировать HTML считывая картинки и тексты из файлов" вообще решается только на JS с jquery ? Если нет скорее всего нет какой самый простой бекенд для этого нужен. Может джанго или rails
Аноны, че-то я туплю, как мне нормально сделать, чтобы в компоненте реакта одно поле стейста подсчитывало длину массива в другом поле? И нужно, чтобы она пересчитывалась каждый раз при обновлении массива. С меня как обычно.
Писал я, короче, маленькую йобу и дописался до того, что мне нужно из одного компонента поменять значение стейта другого. Естественно, все без редакса. Есть какой-то костыль для такого?
>>1216656 Если они логически не связаны или общий родитель слишком далеко, то создай простенький стейт контейнер сам, это не сложно. Необязательно глобальный.
Кто то там говорил, что я неудачник. Тот кто говорил - засунь себе свой поганый язык в анус, неудачник. У меня всё ништяк. Продолжаю саморазвитие, обретаю новые вещи. Успех, удача со мной всегда !!! Строю новые планы на будущее. (А ты продолжай мечтать об фирме своей в москве, о том как ты будешь там директором. Не надейся, мудак деревенский))))
Только что закончил читать первую часть кантора. хочется попрактиковаться и написать что-нибудь длиннее 100 строк. Где можно стырить практические задания без знания ДОМа?
Ребят, у меня задача сделать логаут, когда юзер нихуя не делает. Я почему-то думал, что это должно быть что-то сложное, а в итоге написал задачу за час.
Подскажите, есть ли реализации лучше и почему моя может быть говном?
Можно как-нибудь сделать так, чтобы функция byExtension возвращала значение resolve из промиса?
Написал промисификацию readBook через асинхронный createReadStream. И вот теперь не знаю, как сделать ее синхронным. А это один из кусочков условия по расширению, и переписывать все из-за промиса не хочется.
[code] let byExtension = function (filePath) { var ext = path.extname(filePath); if (ext === '.json') { return JSON.parse(fs.readFileSync(filePath)); } else { return readBook(filePath).then(function (value) { return value }); }; };
Вопрос по DOM: как получить xpath от одного элемента до другого. Например, от инпута до связанного с ним через for лейбла? Чтобы на выходе получить что-то вроде ./../../div/huina/malafia/label
>>1217235 По-хорошему разлогинивать надо на сервере. Разлогин по таймауту - это так-то для безопасности придумано, а в твоем случае если кто-то таки угонит сессию, то он совершенно точно позаботится над тем, чтобы твой клиентский код по разлогину не сработает. Ну и >mousemove >scroll ты хоть debounce на это дело повесь.
>>1217339 >debounce От маузмува лисенеры же все равно будут лисенить, запросов будет столько же, и одно присвоение переменной дела не сделает, разве нет?
Учусь погромировать на freecodecamp, дошел до легких алгоритмов, все довольно быстро решил, а с этой тупяк, помогите(только не решайте за меня, дайте наводку)
Условие задачи: Return the lowest index at which a value (second argument) should be inserted into an array (first argument) once it has been sorted. The returned value should be a number.
For example, getIndexToIns([1,2,3,4], 1.5) should return 1 because it is greater than 1 (index 0), but less than 2 (index 1).
Likewise, getIndexToIns([20,3,5], 19) should return 2 because once the array has been sorted it will look like [3,5,20] and 19 is less than 20 (index 2) and greater than 5 (index 1).
Как отсортировать массив - я узнал сразу - для этого уже есть встроенный метод sort. Но как сравнить элементы и найти приближенное число? Чёт не пойму.
>>1206861 Для маленьких проектов подходит тот "фреймворк", у которого больше комьюнити. Вкатываясь в новый проект на реакте, в первую очередь ты получаешь готовые свистелки-пердерлки с гита на все случае в жизни, а на Vue тебе придется стать инжинером велосипедостроителем
Анон , Я вот только поставил Node , начал изучать , подскажи какой самый простой способ работать с изображениями? Нужно все парсить все изображения из определенной директории , собирая их url , размеры и тд . В целом просто нужно выводить изображения из папки в DOM
НЕ КОПИРУЙ КОД ПРЯМО В ТРЕД!
Для программирования на ХТМЛ https://codepen.io/pen/
Для программирования на алёртах https://jsfiddle.net/
Для фреймворков библиотек https://codesandbox.io/
Для живой странички из коробки https://repl.it/languages/web_project
Для Ноды с пакетами и консолькой https://repl.it/languages/nodejs
В этом треде собираются величайшие умы человечества – мастера валидации форм и специалисты по JSON-технологиям. Этот тред посвящён главному языку будущего – JavaScript. Благодаря своей гибкости используется в браузере, на серверах, в мобильных приложениях, на десктопе и практически во всех видах программирования. Удобный синтаксис позволяет легко писать на нём, а высокая производительность делает его отличным выбором для решения любых задач – от небольших магазинов до огромных highload проектов. JavaScript по праву является самым популярным в мире языком. На каждом сайте есть браузерный JavaScript, а JavaScript на сервере используется такими крупными корпорациями, как Amazon, Yahoo, HP, NASA, Walmart и многие другие.
Часто задаваемые вопросы: https://github.com/vladimir37/js-thread/blob/master/Wiki/faq.md
Список материалов для изучения: https://github.com/vladimir37/js-thread/blob/master/Wiki/learn.md
Список инструментов и направления JS-разработки: https://github.com/vladimir37/js-thread/blob/master/Wiki/tools.md
Конфа /pr/ в Slack: https://slack-2chpr.herokuapp.com/