Это копия, сохраненная 24 февраля 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
НЕ КОПИРУЙ КОД ПРЯМО В ТРЕД!
Для программирования на ХТМЛ https://codepen.io/pen/
Для Ноды с консолькой https://repl.it/languages/nodejs
Для фреймворков https://codesandbox.io/
Залить, задеплоить страничку, сервер, контейнер https://zeit.co/now
Аноны, хочу получить советов мудрых, высераю пару предложений и код на скриншоте, а получаю смехуёчки. Как быть?
Если рассчитываешь получить дельный ответ, формулируй правильно вопрос:
У меня есть проблема\задача (А) %текст-ошибки или задача%. Я пытался решить ее так %кусок-кода-опционально% (Б), у меня не вышло %текст-ошибки%. Я погуглил, почитал документацию и попробовал сделать так %кусок-кода-%(В), но получаю ошибку (Г).
Сделай песочницу по ссылкам выше для ясности и удобства. Если никогда самостоятельно найдёшь решение — поделись в треде, мы за тебя переживаем.
Спасибо вам за все ответы на мои тупы вопросики.
Какой у тебя бэкграунд? Насколько знаешь ванилу, что по либам/фреймам/пет проектам?
В общем случае learn.javascript от корки до корки + гугл "вопросы javascript собеседования" (вместо JS может быть React, SQL и тд, в зависимости от позиции).
В целом вопросы на собесах обычно очень типовые, могут посадить код писать на бумажке или на компе. Если это твой первый собес, у меня для тебя не самые хорошие новости, но шансы есть всегда.
Ну тогда в общем-то всё, как я и написал выше. Если вакансия фронта, то в разной степени соотношения будут спрашивать ванилу, вёрстку и что-то из того, что используется на проекте, может быть и "общее" вроде React/Redux/Saga. Могут что-то про вебпак и бабель. Смотри на ютубе видосы про собесы на JS. Ну и самое главное: собес - это совсем не то же самое, когда сидишь дома уютно перед своим компом. Нервы будут, и не факт, что ты идеально будешь выдавать даже то, что на самом деле знаешь.
слева направо: Намджун, Чонгук, Чингачгук, Гойко Митич
Люблю вас❤❤❤
Консоль то ты где открывал? На сайте codepen? Если да, то неудивительно почему результат такой.
Спасибо анончик
Не, я с пустой странички запускал
1) ты, надеюсь, в курсе, что у тебя функция и её исполнение тут вообще лишние.
2) это особенности работы консоли, тк лог ничего не возвращает
Все, хочу процессы построения страницы понять и все, что происходит у браузеров под капотом. DOM, CSSOM, как хтмлька рендерится, вот это всё. Мудаки из гугла понаписали кучу гайдов на эту тему на основу старой девтулзы, затем изменили её до неузнаваемости и забили хуй. Хотелось бы найти что-то вроде гугловских гайдов с web fundamentials, но с современной девтулзой.
Прочитай старую, а об изменениях из пачноутов узнаешь. По сути поменялся только интерфейс.
Ну и с такими вопросами тебе не в js надо, хром не на нём написан, а на плюсах.
Вот настоящая проблема:
1. есть говно мамонта в виде хуево написанного приложения на angular 1.6.
2. Поверхностные знания в angular и js в целом
Цель: вкрутить модный typescript и продолжение разработки этого приложения без адских мук.
Мои мысли. Первым шагом прикручу сборку через webpack, чтобы можно было подключить babeljs к обработке кода.
Какие подводные? Был у кого-то подобный опыт?
Как typescript и babel связаны? Тайпскрипт имеет свой собственный компилятор. Это будет либо awesome-typescript-loader либо ts-loader. Они делают тоже самое, что и babel. Для поддержки типов древнего ангуляра ставишь npm пакет @types/angular
Дальше ты сам в этом приключение. Тебя ждут темные земли, куда мой народ больше не ходит. Там было пролито много нашей крови и слез. Теперь наш путь ведет нас в Валинор. Я могу лишь пожелать вам, смертным, силы и терпения.
hasLayout, presto, windows safari - all those moments will be lost in time like tears in rain.
hasLayout это и есть про ie6-7.
Это свойство в свое время было даже выпилено из официальной документации МС что бы скрыть весь тот пиздец, который творился в их коде. И сейчас упоминания о нем можно найти только в архивах мамонта. По версии МС такого скрытого свойства никогда не существовало.
Методом обратной разработки и анализа была составлена следующая картина: когда стали выходить новые стандарты индусам была дана задача в кратчайшие сроки написать новый парсер вместо того говна, что тянулось еще со времен мозаика. Однако, судя по всему, все сроки были проебаны, потому они нашли очень кардинальное решение - они втулили в шестого ослика сразу два парсера - старый и новый, который не успели дописать к срокам. свойство же hasLayout определяло, какой из движков будет отрисовывать элемент на странице. Естественно, что это все на практике вылилось в лютейший пиздец и фикс багов ие6 мог занимать по времени столько же, сколько изначальное написание верстки/скриптов. А все потому, что явно его задать было невозможно, никакой документации по нему не было. Потому все определялось методом проб и ошибок и фиксилось откровенными хаками.
className - свойство dom узлов. Остальные элементы у тебя там это реактовские компоненты, они просто принимают пропс className и ничего с ним не делают, так как ты для этого никакой логики не написал.
спасибо огромное. Удивительно, но я думал, что className зарезервированное слово и прописать этот атрибут компоненте равносильно, что прописать его обертке этой компоненты
PS
Какой вариант лучше использовать 1ый и 2ой пикрелейтед , или 3ий или есть более верный вариант?
> var
> function
Если ты не зеленый, то забудь про эту хуйню и пиши как нормальный человек на ES6.
Это пример из книги Фримена
Нахуя ты это делаешь? Просто пиши ебучие классы строкой, между className={s.container} и className="container" нет абсолютно никакой разницы, только лишняя ебля в первом случае.
return
0
Интерпретируется как:
return;
0;
Если ты отказываешься от ; , то автоматически соглашаешься ебать себе мозг звучиванием всех случаев автоматической расстановки ;
призываю в тред опытного помидора @ юзаю Promise.all(stats); как на пикрелейте, сейчас в директории находится овер 20к файлов, т.е. если я правильно понимаю, для этих 20к файлов создаётся 20к промисов?
сомневаюсь что это норм подход, так как через время там будет 40-50к файлов, это не сломает Promise.all? У Promise.all есть вообще какой-то лимит на кол-во промисов?
я сейчас только про js
// консоль выдаст ошибку "Uncaught TypeError: 1 is not a function":
const huj = 1
(() => {
})()
// всё ок:
const huj = 1;
(() => {
})()
Ещё такое есть
const op = 'pidor'
['h', 'u', 'i'].forEach(gavno => console.log(gavno))
Но я ни разу в жизни не использовал ничего из этих примеров
Никто так специально писать, конечно, не будет, но поведение немного неожиданное. Если опечатаешься и не заметишь, то пиздец.
Линтер поправит или варнинг в консоли
Можно просто кодблок ебануть лол
const hui = 1
{}
(() => {
console.log('чё бля')
})()
// чё бля
Я бы очень сильно охуел, еслиб такое увидел в коде
The key to understanding design patterns such as IIFE is to realize that prior to ES6, JavaScript only featured function scope (thus lacking block scope), passing values by reference inside closures.[8] This is no longer the case, as the ES6 version of JavaScript implements block scoping using the new let and const keywords.
Нах?
чому ужос, обычный код @ представь такое на коллбэках, вот это будет ужос
У тебя stats массив объектов, а не промисов, никакой promise.all использовать не нужно, просто возвращай stats.
какой ты умный)
>т.е. если я правильно понимаю, для этих 20к файлов создаётся 20к промисов?
Да.
>там будет 40-50к файлов, это не сломает Promise.all?
Нет.
>У Promise.all есть вообще какой-то лимит на кол-во промисов?
Лимит там как и у любого массива - на сколько памяти хватит.
> Promise.all is the best way to aggregate a group of promises to a single promise. This is one of the ways of achieving concurrency in JavaScript.
>achieving concurrency in JavaScript
>concurrency
хм, меня смущает, что эти 20к промисов обрабатываются параллельно, а там сервер, который в это время должен раздавать контент @ если там потом будет овер 50к параллельных тредов, то вангую сервер может покрашится
Тогда проблема явно не в Promise.all, а в том, что ты за каким-то хуем даешь пользователю сервера возможность читать 50к файлов прямо с диска в каждом запросе, вместо того чтобы закешировать их или использовать БД как нормальный человек.
если сделать как ты предлагаешь, то console.log(stats) покажет пикрелейт, там нужно юзать promise.all
Ты путаешь concurrency и parallelism. Всё это в ноде делается под капотом и ограничено количествами ядер процессора, т. е. нода не будет создавать 50к параллельных тредов, а будет поочередно их выполнять в n потоках где n это количество ядер процессора.
я пользуюсь css module, есть какой-то их особый стиль записи или просто не надо ими пользоваться?
https://blog.risingstack.com/node-hero-async-programming-in-node-js/
>Also, as we have already learned in the first chapter, Node.js is single-threaded - from a developer's point of view. It means that you don't have to deal with threads and synchronizing them, Node.jsabstracts this complexity away.
Понял, чепуш? С точки зрения разработчика, который пишет код, она однопоточная, потому что у тебя нет инструментов для управления этими потоками.
И вот для закрепления:
https://itnext.io/multi-threading-and-multi-process-in-node-js-ffa5bb5cde98
>Node.js is a single threaded language which in background uses multiple threads to execute asynchronous code.
Я тебя не оскорблял. Как нода может создавать n потоков, если количество потоков ограничено процессором ?
>потому что у тебя нет инструментов для управления этими потоками
Так то есть. С версии 10.5.0 появились воркеры.
>Учи английский
двачую, после прочтения оригинальной статьи на энгельском, глянул релейт для фана https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Promise
с-Водка, что за бредятина, кек такое в присутствии иностранцев лучше не говорить вслух
Тут мои догадки и никак эти слова не подкрепленны. Весь тред пишет про потоки. Я лично не знаю, что там творится в ноде и как это оптимизируется, но я уверен, что если у тебя есть возможность раздробить файлы и упорядочить их (на основании зависимостей) , то запускай хоть 10 нод. Нода это ближайший язык к клиенту и он предполагает, что если ты делаешь софт, то чтобы клиенту хватало ресурсов на свои перделки и это все при том что нода достаточно прожорливый язык.
щас сделаем ассемблерную вставочку хуе мое и плов готов
Также как и в любом коде, который использует многопоточность - проверяешь сколько у процессора ядер и в зависимости от этого запускаешь n потоков. И количество потоков не ограничено процессором, но безопаснее всего использовать столько, сколько у процессора ядер, для того чтобы избежать оверхеда который сведёт на нет все плюсы многопоточности. В нормальных ЯП ты можешь и 1000 потоков создать на одноядерном процессоре, вот только получишь от этого уменьшение производительности, а не прирост.
Раз это делается под капотом, значит выбран самый оптимальный вариант, т. е. у тебя не будет создано больше потоков, чем есть ядер на процессоре который запускает ноду.
там сервер раздаёт сайт, и каждый час чистит файлы @ в момент чистки файлов может не хватить потоков на две эти задачи, ферштейн?
я что то сомневаюсь, что в ноде есть такой механизм, который расставляет приоритеты для потоков, типо какие потоки нужно оставить для раздачи сайта с запросами в бд и рендером шаблонов, и какие для других нужд, типо скрипта для чистки каталога с файлами
Тебе просто нужно почитать про многопоточность и асинхронность. Нет смысла пытаться объяснить тебе это на пальцах в двух постах, ты продолжаешь срать своими представлениями, основанными на фантазиях из манямирка.
Как ты определил проблему, если не имеешь ни малейшего представления о многопоточности и асинхронности? А также о том, как это реализовано в инструменте который ты используешь. Вот и выходит, что не проблему ты описал, а догадки своего манямирка.
>если не имеешь ни малейшего представления о многопоточности и асинхронности
я читнул этого Анона >>63856 и тут https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop
>эвент луп нельзя блокировать
А надо?
Надо глупой мартышке боевую гранату давать, потому, что ей игрушечная не нравится?
>А надо?
В мире розовых пони не надо. На практике легко прострелить себе ногу херово написанным колбеком/await и огрести блокировку.
>Если ты отказываешься от ; , то автоматически соглашаешься ебать себе мозг звучиванием всех случаев автоматической расстановки ;
Возможно, лет 10 назад. Но сейчас ты уже в здравом уме не сможешь написать так, чтобы что-то сломать. Твой пример - в 99 случаях сверх редкая опечатка, чем кто-то в здравом уме такое решит написать. Я уверен, что некоторые олдовые мидлы могут даже не подозревать, что можно так написать.
Ну а вот это
const huj = 1;
(() => {
})() тень прошлого. Самовызывающиеся функции описывают в книжках, курсах, но увидеть их можно лишь в очень старом коде. И это причина, почему их до сих пор описывают в книгах. Но никто ими уже не пользуется. + Тебя даже в этом треде за это обоссут.
Govno is that you?
Мне не нравится идея передачи стилей как пропсов. Каждый компонент должен сам отвечать за свою стилизацию. А внесение стилей на уровне тем должно реализовываться отдельно - класс на body, темы material ui или темы styled component, whatever. Но ни в коем случае не передавать стили между компонентами - это рушит принцип атомарности и автономности. Любой твой компонент должен с минимальными изменениями быть переставлен на новый проект, если таковое потребуется.
Бля, возможно ты прав, но я с этой хуйни не могу слезть как с наркоты. Привычка выработанная годами. памагите.
Вот этот прав. IIFE всегда было чисто костылем. В современных реалиях в них нет никакого смысла.
Хотя там есть такая хуита, что код в IIFE будет выполнен до всплытия (hoist). Но мне сложно представить, когда это может быть полезным, учитывая, что общая тенденция развития JS идет в сторону отказ от использования "преимуществ" всплытия (let, const, arrow functions).
Просто берёшь и без задней перестаёшь их ставить, 2-3 дня и привыкнешь, всего-то делов.
Да, ты прав. Я не подумал об этом >Любой твой компонент должен с минимальными изменениями быть переставлен на новый проект, если таковое потребуется.
Но я все же уточню про >Каждый компонент должен сам отвечать за свою стилизацию
Если у нас есть грид и мы хотим объяснить компонентам, как они должны располагаться. Мы должны их положение прописывать обертке внутри этого компонента ( return( <div className="...">...<div>)) или мы все же имеем право обернуть компоненту в <div> на том уровне где создается грид и там все описать?
Я это уточняю, потому что как-то выглядит некрасиво, когда в одном ксс ты определяешь как гриды себя ведут, а в других ксс определяешь их классы. Я так понимаю оно все при сборке превратится в один css , но возможно это сложнее читать/исправлять
PS
>>внутри этого компонента
внутри каждого компонента (которые являются дочерними элементами грид компоненты)
Ну можешь тогда использовать именованные ячейки гриды и передавать в компоненты это имя. Наверно это приемлемо.
https://developer.mozilla.org/ru/docs/Web/CSS/CSS_Grid_Layout/Грид-области
>легко прострелить себе ногу херово написанным колбеком
Значит надо всякой мартышке давать больше возможностей прострелить себе ногу, но с уже нормально написанными колбэками и испорченным грязными ручонками эвент лупом?
По-моему от розовых поней пишешь именно ты.
Антон поясни как это работает пожалуйста.
В исходниках реакта из файла импортится по умолчанию только сам объект реакт, там нету отдельного именованного экспорта Component.
Это Бабель так делает, что я могу вытаскивать свойства объекта, как будто бы они тоже экспортятся?
>Это Бабель
Мне кажется это вебпак. Собери свой проект в дев режиме и посмотри, во что превращаются все импорты\экспорты
Модули в функции, возвращающие объекты. Импорты в использование специальной функции, которая соответственно вернет ранее возвращенный объект из специального словаря. Так что ты просто деконструктишь объект а может и нет, я хуй знает
>Это Бабель так делает, что я могу вытаскивать свойства объекта, как будто бы они тоже экспортятся?
Так работает module.exports. А если точнее, то это костыль для совместимости es6-импортов с commonjs экспортами, добро пожаловать в мир костыльного жопаскрипта.
Поведение описанное стандартом EcmaScripts modules.
export default Huita
export additionalHuita
export huitaHelper
import Huita, { additionalHuita, huitaHelper }
Huita - дефолтный экспорт либы
{...} - опциональные экспорты либы
Сам реакт, впрочем, по моему упакован не в esm, а в commonJS или AMD, так что компиляцию из них в esm тебе будет делать либо бебел, либо typescript лоадер. Но любой другой модуль так же имеет понятие дефолтного экспорта и опциональных экспортов.
В исхолниках реакта анон выше кинул скрин.
Есть только
export default React
И больше ничего из файла не экспортится
Там нету
export { Component }
>>64568
>>64582
В общем глянул что там в npm react. там сразу два пакета - для comonJS и UMD (если есть UMD, зачем тогда commonJS?).
CommonJS имеет одну точку выхода, опциональные экспорты походу действительно просто как поля к нему прицепляются. Бебел походу все поля объекта экспорта транспилит в опциональные экспорты ESM (ебать дикость).
Короче, 2020 год, а у нас основные либы до сих пор упакованы в формат мамонта.
Странно, почему там и UMD и CMJ, потому-что UMD это какбе универсальная обертка и для CMJ и для AMD.
Вот нормальное пояснение.
https://dev.to/exacs/node-js-12-supports-es-modules-do-you-know-the-difference-between-commonjs-and-es2015-modules-hg9
В commonJS реально module.exports это дефолтный экспорт, а все его поля становятся опциональными экспортами. А за всеми трансформациями между форматами пакетов стоит ваш сборщик.
1. commonJS - древняя залупа
2. AMD - еще одна древняя залупа
3. UMD - древняя залупа, которая попыталась примерить все другие древние залупы (а если запустить в чистом окружение браузера, то оно вообще весь пакет высрет в глобал window)
4. ESM - ответ на крик "так жить нельзя". Большинство разработчиков перешли на него (когда ты пишешь import/export - ты используешь ESM). Но 90% либ все еще упаковано в древние залупы и что бы их подключать в свой новенький проект на ESM тебе необходимы транспилеры.
Так и живем.
Анон, если будешь делать свою либу - пакуй в ESM и в UMD. Это покроет все юзкейсы, даже прямо в браузер можно будет грузить без каких либо сборщиков.
Почему в официальных доках они сами используют такой костыльный импорт, а не делают просто так
import react from ‘react’
const {Component } = react
Они совсем конченые там? Хотя бы объяснили что у них нету экспорта Component по умолчанию.
>Анон, если будешь делать свою либу - пакуй в ESM и в UMD
Ага, и сделать свою либу неимпортируемой по умолчанию в окружение ноды без бабеля. Охуенный совет. Главный дистрибутив для уважающей себя либы делается в cjs, а все остальное говно только бонусом.
Ты упоротый? UMD поддерживает commonJS.
А во вторых - пошел ты нахуй, потому-что node 12+ официально поддерживает ESM.
>node 12+ официально поддерживает ESM.
По умолчанию не поддерживает, это нужно указывать отдельно через type module. Ну и осталось дождаться, пока все перейдут на 12 ноду, оставив остальные версии позади, и пока не сделают type module дефолтным, так что лет через пять приходи с охуительными советами.
Не важно. CommonJS агрегатор все равно сожрет UMD пакет как если бы он был commonJS.
Древние пакетные менеджеры создают отдельный скоуп, в котором создают объект аля module. После этого они запускают в нем нужный файл. Этот файл должен записать в объект module поле export. В AMD примерно такой же принцип.
UMD же просто делает проверку на то, какие объекты присутствуют в исполняемом скоупе. Если он находит module - он срет в него. если он находит define - он срет в него. Если он не находит ни того, ни того - он срет в глобал.
Вот начал UMD пакета, к слову:
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global = global || self, global.huita= factory());
}(this, (function () { 'use strict';
....
Каждый пакетный менеджер в итоге получит то, что он ожидает получить.
Это говно по сути нужно только для поддержки AMD и браузеров, а браузерные импорты это смешно, никто слава богу ими в здравом уме не пользуется и пользоваться не будет. Если ты пишешь js-либу, то в 99% случаев цель у тебя только одна - это окружения ноды, поэтому выбор идет между cjs и ESM дистрибутивом, из которых очевидно выбирается cjs.
>из которых очевидно выбирается cjs.
Ничего одно не выбирается. Обычно там 2 или даже 3 формата пакетов заливают в npm. Тот же реакт устанавливается в cjs и в umd версиях. Но обычно сейчас либы идут с esm и cjs/umd.
Это если кому интересно, почему node_modules так много весит. Момент, когда cjs/amd/umd окончательно умрут будет моментом, когда папки node_modules уменьшаться в два раза. Потому, анон, всеми силами приближай победу ESM.
>Тот же реакт устанавливается в cjs и в umd версиях
Какая из этих версий у реакта по умолчанию используется, не подскажешь?
Хочешь сказать, что один из пакетов просто по фану туда заливают, что бы npm пакет в два раза больше весил?
Это делается для того, что бы любой цугундер-сборщик или окружение само решало, что оно хочет получить и тащило соответствующий пакет.
JS урезанный, никто с него не рекомендует начинать. Начинать надо с языков со строгой статической типизацией и полноценными классами.
Многие уродские вещи в JS вызваны тем, что его изначально делали как язык рисования снежинок на страничках девочек 13 лет, а потом ВНЕЗАПНО его стали использовать как коммерческий язык для написания от серверов до десктопных приложений. В него стали лихорадочно и быстро втуливать все недостающие вещи под новые задачи, при этом куча старого говна по прежнему отказывается умирать.
На самом деле самый болезненный период уже пройдет. Это было где-то в 13-16х годах. Сейчас более-менее все стало устаканиваться. Тот же стандартизированный ESM заменит собой нестандартные пакеты в ближайшие пару лет.
>>64709
This.
Его засовывают туда потому, что реакт - популярная библиотека и им не сложно добавить одну строчку в свой компайлер, чтобы угодить 1% пользователей. "В два раза больше весит" это смешной аргумент, если либа у тебя на сервере/компьютере, то этот лишний мегабайт не имеет никакого значения в 2020 году, а если в готовом билде, то лишнего мегабайта просто нет. А суть агрумента в том, что по умолчанию они(и абсолютно любая либа, какую найдешь) предоставляют cjs модуль, а не umd, хотя казалось бы по твоим заверениям, umd - это тот же cjs, только с бонусами на самом деле нет.
нет
Сам JS очень простой язык с минимумом синтаксиса, а сложность обычно заключается в том, чтобы разобраться со всеми костылями, которые его окружают, уровня прикрученной сбоку модульной системы в самом жсе модули добавили только совсем недавно, бабеля, плагинов для бабеля, вебпака и прочей хуйни.
> никто с него не рекомендует начинать
Всё же рекомендуют, потому что он якобы простой, и чтобы новичок не испугался. Так думают многие и пишут свои топ-5-языков-для-новичков с JS на первом месте. Хотя сам я так не считаю.
>>64714
> стали лихорадочно и быстро втуливать все недостающие вещи
И из-за этого язык выглядит очень неоднородно, потому что его делало дохуя народу с разными взглядами на то, как нужно делать языки.
> самый болезненный период уже пройдет
Это хорошо. А то я заебался натыкаться на статьи, написанные год назад, но уже неактуальные.
>>64743
Классический браузерный JS действительно прост, даже пресловутые преобразования типов логичные, хоть и не очевидные. Но вот постоянно меняющаяся экосистема ноды очень огорчает.
clunkCounter будет увеличиваться при thunk и clank, а должен только при clunk.
Написал скрипт и решил вынести часть функций в отдельные файлы. Когда вынес делаю стандартный импорт, то ловлю такую ошибку: Cannot use import statement outside a module.
Гугл посоветовал поставить бабель, но они ничем не помог. Как фиксить?
at script.js:4
Абсолютно не могу понять в чём ошибка, аноны, спасите. скорее всего ошибка очень глупая, у меня из-за этого очень полыхает на самого себя
Фримен Э. Изучаем программирование на Java Script
Блять, вот я так изнал. Помнил, что где-то к селекторам точка не нужна, вот и не писал
Спасибо большое
В конце главы есть решения, даун
Без проблем
от 100 игроков наебнеться
Надо начинать с того, что тебе близко, чем ты собираешься заниматься, и яп, который лучше подходит для твоих задач. Вот эти мантры "надо обязательно начинать с..." - бред.
Это не мантры, это рациональный подход.
могу делать красивые и функциональные сайтики на python+flask. пришло время начать работать с javascript. что мне прочитать, что быстро начать работать с этим языком. хочу использовать в основном на фронтенде, хочется сделать пару сайтиков на ноде+экспрессе, чтобы можно было написать в резюме что я с ними работал. могу спойно читать и слушать на английском. по джеэс огромная куча ресурсов и я не знаю, где начать.
https://javascript.info
https://developer.mozilla.org/en-US/docs/Web/JavaScript
потом учишь реакт и редакс
https://reactjs.org/docs/getting-started.html
https://redux.js.org/introduction/getting-started
Можешь смело после этого писать в резюме fullstack.
благодарю
Только не вздумай кому-нибудь это показывать.
И бросай эту некрофилию, выучи ес5/6 и садись за фреймворк. То что ты делаешь щас в js, это не стоит твоего внимания.
популярная связка django+react+postgress, редакс опционально в зависимости от твоего проекта. И если ты все же прекрутишь sql к проекту, а в стэйте будет хранится что-то кроме закрытое окно или прочитанное сообщение, то ебало знатно скорчат
Анон, что это за мода такая ублюдочная?!!
Заходишь на сайт, там, на пол окна вылазит предупреждение о том, что тебе закинут куки. И закрыть его нельзя, блядь, только принять можно... Как блочить подобную хуйню?
берешь и блокируешь конкретный элемент adblock
С подключением.
В ЕС приняли закон, который обязывает все сайты, где юзаются куки, говорить об этом. Как бороться? Установить специальные расширения. /s/ тебе в помощь.
>а в стэйте будет хранится что-то кроме закрытое окно или прочитанное сообщение, то ебало знатно скорчат
А где тогда хранить данные, полученные с запросов?
А зачем их хранить? Cразу в dom подгружай, там пусть и хранится.
>Как бороться?
Надо по рукам давать быдлокодерам, рисующим эти медленные баннеры,
лезущие на пол экрана меееедлееееенннннннооооо медленно, блядь.
Нельзя что-ли как-то ненавязчиво предупредить внизу и всё?
И да, а что если юзер не хочет принимать куки? Хоть бы кнопку цепляли, не хочу печеньку, хочу пироженку.
>>данные
Ты должен четко представлять, что есть данные. Фронтенд залупа - не данные, а булевые значения. API запрос возвращает данные. Затем ты вспоминаешь, что существуют ограничения API запросов. Банально у яндекс карт - определенный пул в месяц, у API фильмов не более 30 запросов в минуту. Некоторые API по дефолту платные. Ты вот так подносишь палец к подбородку и думаешь, а может мне это куда-то складировать и потом вместо того чтобы в очередной раз делать API запрос, я буду обращаться к своей постоянно пополняемой базе. Таким образом, со временем API запросы начинают заменяться на чистые SQL запросы.
Ну а вдруг информация в фильме изменится, а у меня так и будет висеть старая константная информация из моей базы. Повешу-ка я кнопку на сайте - устарела информация и ограничу на 1 запрос в сутки.
Если у тебя в стэйте хранятся хоть какие-то данные, то ты пожрал гавна. Фронт должен рисовать картинку на основании данных, но он не должен их генерировать. Поэтому не надо путать фронт-енд задания с реальной практикой.
Подскажите, что помимо дефолта HTML/CSS/JS может понадобится, без чего моя цель неосуществима?
По детству учил HTML, CSS.
На данный момент учусь в университете на CS и понимаю, какая же срань - фронтенд. И как меня заебала чертова верстка.
Теперь и не знаю, то ли в Spring/.NET перемещаться, то ли вообще в мобилки уйти.
>Таким образом, со временем API запросы начинают заменяться на чистые SQL запросы.
Что за хуйню я сейчас прочитал
Какие чистые sql запросы, ты просто заменяешь внешнее апи на запросы к апи своего сервера. Как это вообще соотносится со стейтом реката?
> Надо по рукам давать быдлокодерам, рисующим эти медленные баннеры,
лезущие на пол экрана меееедлееееенннннннооооо медленно, блядь.
Там не то что давать по рукам надо, их отрубать нужно нахуй. Перегрузят свои сайы скриптами, а затем делают такие вот медленные анимации, чтобы тормоза меньше людей замечало. Туда же "У нас есть мобильное приложение", "Включите уведомления", "Подпишитесь на рассылку", "Зарегистрируйтесь, чтобы увидеть больше информации". Пидоры.
> Нельзя что-ли как-то ненавязчиво предупредить внизу и всё?
Можно, конечно. Тут уже мода на долбоебизм сказывается, мешающая так делать.
> И да, а что если юзер не хочет принимать куки? Хоть бы кнопку цепляли, не хочу печеньку, хочу пироженку.
Закон предлагает предупреждать об использовании кук, но не спрашивать, согласен ли пользователь. Тупо, да.
Это не быдлокодеры, это манагеры с десигнерами и с кабанчиком в тз написали что все это должно быть и в максимально сжатые сраки сроки.
Это ты бесполезное говно. А ; может предотвратить множество ошибок по невнимательности.
Я стилусом https://addons.mozilla.org/ru/firefox/addon/styl-us/?src=search режу, как говорится - раз и навсегда.
Вот блядь, из-за таких лентяев и приходится свой няшный старый браузер менять,
на какое-то говно китайское, без исходника, переполняющее буфер от одной gif-ки,
и ложащее винду с синим экраном после засирания файла подкачки,
на говно, вроде того же 360 Extreme Explorer для Windows XP,
зато поддерживающее УДОБНЫЙ ДЛЯ БЫДЛОКОДИНГА ES6,
без поддержки которого, блядь, двач не открывается.
Сидит, блядь, мудель, придумал сам себе что
>" ';' - говно"
и ещё и носит, заражает других былдокодеров-шкальнеков.
А потом даже дрыном им в головы не забить, что надо поставить ёбанную ";"
в какой-нибудь
>for (Выражение; Выражение; Выражение ) Оператор
чтобы throw-exceptions в консоли не срали, и скрипт не останавливали.
На, просвещайся: https://habr.com/ru/post/111563/
Вот уж воистину люди готовы защищать самую иррациональную бесполезную хуйню только из-за привычки. И их даже не ебет, что есть миллион языков в сто раз более приятных по синтаксису, чем жопаскрипт, где каким-то образом обходятся без сраной точки с запятой, и каким-то магическим образом избегают ошибок, все равно будут копротивляться за свое бесполезное говно до последнего.
Дурачок, в жс точка с запятой не обязательна. Я тебе больше с позиции крестоеба говорю. Взять тот же питон: тебе не приходится СТРАДАТЬ и ставить точку с запятой, но приходится ловить ошибки интерпретатора если у тебя чуть отступ съехал. Да и это естественная идея - отделять отдельные команды чем-нибудь. Так и компиляторам/интерпретаторам проще, и читаемость кода повышается. Ты же точки, чтобы разделить предложения, ставишь?
Манагеры и дезигнеры не пишут код и не могут нести никакой ответственности за его качество. Если ты написал забагованное говно, то это всегда только твоя вина и ничья другая. Кукареки "мне дали мало времени" - это смешно, потому что в итоге всегда выясняется, что либо
а) быдлокодер сам поставил себе такой дедлайн
б) быдлокодеру не хватило яйчишек сказать менеджеру, что времени не хватит и что нужно урезать требуемый функционал/продлевать дедлайн, если хотите уложиться в срок, вместо этого он просто покивал головкой и убежал в свой закуток подальше от социальных взаимодействий
У менеджера нет никакой возможности оценить сложность требуемого кода, нет возможности оценить время написания кода, и т.д, все эти оценки лежат только на тебе и доносить их до менеджера должен ты, а не наоборот. Взрослей и принимай ответственность
Братюнь, ты это, работать не пробовал? Сроки он менеджеру будет ставить, охуеть вообще.
Любой менеджер идет к программистам за сроками для написания кода, сам он не квалифицирован и физически не может их проставить. Он может проставить примерные сроки для проекта в целом, сроки для выхода на рынок и т.д, но вопрос "сколько займет написать такую хуйню" всегда задается только программистам, никому другому он задаваться не может в принципе. И если в ответ на твои "три недели" он отвечает "а может за две? у нас проект горит", а ты начинаешь мяться и в итоге соглашаешься ПОПРОБОВАТЬ сделать за две недели и делаешь забагованное дерьмо, то никакой вины менеджера тут нет.
Хуя ты жирный.
> сам он не квалифицирован и физически не может их проставить
Это реально так на говно галерах? Я рад, что там не работал. На большинстве проектов где я работал, сроки выставлял либо техдир, либо ПМ который обладает тех. навыками на уровне оценки сложности.
Зачем нужны ПМы, совсем ничего не понимающие в погромирование? Я искренне сочувствую людям, которым приходится с такими работать.
>ПМ который обладает тех. навыками на уровне оценки сложности.
Единственный способ обладать такими навыками - это писать код в этот конкретный проект на постоянной основе.
Или набирать ПМов на IT-проекты с образование в CS как делают нормальные компании.
Ты не понимаешь, что тебе говорят? Единственные люди, которые могут обладать хоть сколько-то актуальным знанием о том, как долго займет добавление определенного функционала в проект - это программисты, пишущие код в этот конкретный проект. Никакое образование, никакой опыт "в целом" тебе этого знания не даст и дать не может.
Я тупой, объясните что тут происходит?
>есть миллион языков в сто раз более приятных по синтаксису, чем жопаскрипт
Хотя бы пять назовешь?
Сверхразум, ты? За всё это отвратное поведение, которое ты описываешь, ответственны менеджеры, дизайнеры, продакты и прочие писари тз. Разрабы просто реализуют то, что им говорят.
Я бы сначала доки почитал, попутно делая тестовую хуйню по ходу разделов из доков. А потом уже делал бы что-то.
А потом увольняют тебя, а не программиста. Потому-что найти говно ПМа без профильного образования в CS проще, чем найти нового сеньора-помидора. Про закладывание дополнительного времени для безопасности ты слышал, кстати? Или на отечественных галерах только ковбой-кодинг?
Следует иметь а виду, что JS в первую очередь язык с си-подобным синтаксисом, а не с удобным. Со всеми вытекающими.
А ведь изначально Эйхор хотел запилить что-то в духе упрощенного Scheme. Если бы не java, обмазывались бы сейчас скобочками и чистым ФП.
Эххх бля
Заебали эту хуйню нести. Если речь про обычный ФП-язык, который используется на практике(кложа, эрланг, эликсир), то нихуя сложного и инопланетного там нет, специфические фичи осваиваются за неделю.
https://www.youtube.com/watch?v=nyd2_NHpyek
> нихуя сложного
Если это действительно было так, это всё по популярности было на уровне сабжа или джавы. Но нет. Потому что никто не может осилить.
>key принимает уникальное значение с сервера.
А в консоле тебе ведают об обратном. Есть вероятность, что это реакт пиздит, но, скорее всего, это ты где-то в глаза ебешься. Отдебаж что ты в ключи вставляешь, скорее всего у тебя где-то они повторяются или какой-то элемент без ключа идет.
Разбил на модули, делаю все экспорты, а когда всё запускаю, то ловлю ошибку Cannot use import statement outside a module.
Что не так?
Присмотрелся к комбинации из native script + svetle.
Какие подводные камни? Что мне нужно будет выучить и в какой последовательности?
С жс знаком постольку-поскольку, раньше для моих нужд плюсов с питоном хватало.
>svetle
В чем прекол этого модного и молодежного реймворка? Сколько раз встречал его описание, так и не понял нахуя он нужен
Мне он понравился тем, что толком не понимая жс и прочих плясок вокруг ноды нпм гульпов хуюльпов всяких сасс я туда-сюда понимаю как эта хуета работает.
Чисто порогом вхождения, короче. Ну и листинги короче чем то, что я увидел на реакте и ангуляра, а мне много писать лень, после питона-то с
>импорт вунндервафыекомбайне
>вундерваффекомбайне.ду()
Очередная ловушка про "очень просто и не надо знать js". Angular, react, vue - в свое время про них всех говорили так же.
Так как вышел не так давно, так что люди будут спотыкаться об не обкатанные подводные камни. Будут сталкиваться с ограниченностью экосистемы, буду велосипедить. Через год-два оно все равно разрастется по апи до реакта/вуэ или даже до ангуляра разжиреет.
Та какие велосипеды, я хочу круд для склада и амоцрм написать чтобы видеть что мои кладовщики когда отгружают
Я это и на кажется калькуляторе или упаковке из-под пива мог бы написать, но поскольку делать мне один хуй нечего решил вот хуйней пострадать
Не надо svetle, лучше уж react native возьми. Это очень молодой фреймворк, на каком-нибудь реакте уже миллион таких приложений написали и решили все проблемы у вкатывальщиков. Банально база знаний для других фреймворков больше
Лучше бери Flutter, он сейчас лучше всех. Как запасные решения React Native и Ionic.
В реакте с create react app тоже никаких плясок.
>MeshCommander is the ultimate open source Intel® AMT management console. In an effort to make Intel® AMT easier, support many platforms and over the Internet usages, MeshCommander is entirely built in JavaScript. You can now manage your Intel® AMT computers from within a browser or as a standalone tool.
>MeshCommander is entirely built in JavaScript.
Двачую. Белые люди пишут мобильные приложения под гейос на свифте, а под ведро на котлине. Посоветовал флаттер как меньшее из зол.
Ты такую лютую хуергу написал что это просто пиздец даже. Ты не то что в айти никогда не работал, а похоже что не работал вообще нигде и никогда.
>Это реально так на говно галерах?
Нет, это только в его маняфантазиях и в студяих на три человека в чьей-то квартире.
>На большинстве проектов где я работал, сроки выставлял либо техдир, либо ПМ который обладает тех. навыками на уровне оценки сложности.
Так оно и в большинстве случаев и есть. То просто залетный кукаретик.
Не работал с раектом, но проблема в VScode как я понял. И даже твоего вопроса не понял. Давай скринами
Какую же ты хуйню написал.
Во-первых, оценить весь скоуп сразу может только господь бог нахуй. Человек же, каким бы неибаца спецом он не был, при таких оценках имеет все шансы ошибиться на 300%.
Пиздец, им дали аджайл, интерации, грумминг, скрам покер и другие средства гибкой разработки, нет не хочу, хочу чтоб какой-то хуй сам наверху все порешал и спустил команде, которая в эту, взятую из чьего-то мутного опыта цифру по памяти, должна попадать. Это при том что >70% всех подводных камней, противоречивых требований, недостающей информации и прочей хуиты выявляется только на стадии разработки.
Понятно, что в некоторых конторах, типа НАСА или Боинг, всякие гибкие методики не годятся, и нужен классический вотерфол, но там блять задача будет пол года проходить 7 кругов аналитиков, архитекторов и прочих уебков , пока дойдёт до разработки, а не типа один авторитетный хуй бздонул и все, отдали в работу. То что ты описал - это самая тупорылая, уебищная, бессистемная хуита уровня »Рога и Копыта» и надеюсь те редкие раковники, что до сих пор так работают, вымрут нахуй, а их дебильный менеджмент весь отправится работать в макдак.
Аж трясёт нахуй.
В прошлой конторе, из которой я недавно съебал, один такой дохуя менеджер с 10 летним стажем разработчика единолично дал оценку клиенту на весь проект и обосрался в 2.5 раза, что потом сам признал. Но ему то что, признал и дальше и поздовал пердеть в кресле, а пацаны месяцами овертаймили чтоб попасть в дедлайн, потом половина перегорела и уволилась нахуй
Да, дело не в реакте. Когда я пишу импорт файлов .module.css, то VSCode их игнорирует наличие в папке. Обычно он подсказывает в виде всплывающего окошка.
.module.css это legacy стиль написания css для реакта.
>2020
>../../../../
Стыдно должно быть.
https://github.com/tleunen/babel-plugin-module-resolver
Тоже работает. Вдвойне благодарю
спасибо, я это тоже учту
Не ебу, что это за язык, но на JS можно написать интерпретатор, который хоть C++ схавает. Вопрос лишь в огромном оверхеде на парсинг.
Знаю основы html и css, плюс немного жабаскрипт + jquery. Сделал один сайт-презентацию.
На какую зп я смогу рассчитывать на фрилансе или в офисе?
анон 24 лвл
В какой момент промис становится асинхронным? Если создаю промис и его сразу же резолвлю, то он выполняется в общем порядке. Получается, что промис это тот же коллбэк только с более удобным синтаксисом?
Он в любом случае будет выполняться асинхронно, потому что компилятор не может определить, как скоро твой промис изменит своё состояние. Поэтому их нужно использовать только там, где ты либо выполняешь какую-то долгую работу на стороне своего кода, либо когда обращаешься к стороннему ресурсу (сетевые запросы, жесткий диск).
Объект промиса создастся синхронно.
Функция которую ты в него передал выполнится синхронно.
then/await у него пойдёт асинхронно, даже если коллбэки ты дёрнешь синхронно.
Не отвечай ему, спорить с буквоедами бесполезно. Они считают себя самыми правыми.
И? Любой язык нужно компилировать в байт-код, разница лишь в том, сделаешь ли ты это заранее или "на лету".
https://ru.wikipedia.org/wiki/Интерпретатор
Интерпретатор (англ. interpreter ıntə:'prıtə[1], от лат. interpretator - толкователь[2]) — программа (разновидность транслятора), выполняющая интерпретацию[3].
Интерпретация — построчный анализ, обработка и выполнение исходного кода программы или запроса (в отличие от компиляции, где весь текст программы, перед запуском, анализируется и транслируется в машинный или байт-код, без её выполнения) [4][5][6].
Что ты мне то это суешь? Или тебе так легче запоминается? В случае с JS как раз идёт интерпретация, а не компиляция. При этом для того чтобы выполнить исходный код, в любом случае нужно скомпилировать его в байт-код. Интерпретация это совокупность операций, одной из которых является компиляция.
Если жс был интерпритатором, то бы скрипт частично выполнялся при наличии синтаксических ошибок, т.к построчно или по одной инструкции. Но жс код превращается в AST, а затем в байткод. Интерпритаторов практически не осталось. Bash например
Добавлю.Промышленные компиляторы поддерживают несколько языков и стандартов, поэтому поэтому в них компиляция имеет промежуточную фазу похожую на байткод
JIT компиляция это развитие интерпретации. Поэтому если ты говоришь о JS, то и то и другое будет верным, даже не смотря на редкость использования. Не понятно только зачем нужно было разводить этот срач на ровном месте.
В определении на Википедии можно написать что угодно, хоть "интерпретатор - это программа, написанная тем, кто ебётся в жопу". На английском википедии вот не сказано, что исполнение обязательно должно быть построчным:
https://en.wikipedia.org/wiki/Interpreter_(computing)
Так что хуйня вся эта терминология с определениями. Пока не примут соответствующий RFC, пусть компилятор хоть микроволновкой называют, менее правыми они не будут.
Причем здесь жит? У тебя сейчас везде байткод даже в cpu так как нужна обратная совместимость
При том, что это метод компиляции JS-кода.
Специально использовал слово "компиляция", потому что это к любому языку относится, но нет, жопаскрипт макака настолько тупая, что даже не знает об этом и думает, что его жопаскрипт приводится в действие какой-то магией, лол.
Так это ты тупая обезьянка, которая все свела к дихотомии: интерпретируемый - значит как древний тормозной бейсик, компилируемый - это как быстрый C. Говорил бы по нормальному: высокоуровневый или нет, кросплатформенный или нет.
Здесь почти все фронтендеры-вкатывальщики, так что это мало кому интересно. Попробуй создать, может и взлетит.
У кого значит? У тебя и таких же долбоебов как ты? Java, С# тоже компилируемые языки, но не такие же быстрые как C, потому что используют JIT-компиляцию.
>Говорил бы по нормальному: высокоуровневый или нет, кросплатформенный или нет.
>код компилируется высокоуровнивается
хмм, это какой-то особоый язык жопаскрипт-макак?
Есть такая функция: const multiple = (x,y,z) => x y z
Мы можем вызвать её обычным способом: multiple(1,2,3) // 6
Мы можем создать каррирующую версию функции выше:
const multiple = x => y => z => x y z
multiple(1)(2)(3) // 6
Задача такая: написать функцию curry, которая может каррировать любую функцию, принимаемую на вход.
const curriedMultiple = curry(multiple);
curriedMultiple(1)(2)(3); // 6
функция может принимать аргументы для передачи в каррирующую функцию:
const curriedMultiple = curry(multiple, 1, 2);
curriedMultiple(3); //6
Вы можете передать более чем 1 аргумент в каждую каррирующую функцию:
const curriedMultiple = curry(multiple);
curriedMultiple(1, 2)(3); //6
Или можете не передавать аргументы вовсе:
const curriedMultiple = curry(multiple);
curriedMultiple(1)()()()()(2)(3); //6
const curriedMultiple = curry(multiple);
curry(curriedMultiple)(1)(2)(3); //6
curry(curry(curry(curriedMultiple)(1)))(2)(3); //6
Функция каррирования не сохраняет внутренний стейт:
const curriedMultiple = curry(multiple)(1);
curriedMultiple(2)(3); //6
curriedMultiple(2)(4); //7
Избыточные аргументы должны быть проигнорированы:
const curriedMultiple = curry(multiple);
curry(curriedMultiple)(1)(2)(3, 4, 5); //6
И ещё кое-что: не используйте, пожалуйста, функции call, apply и bind.
Есть такая функция: const multiple = (x,y,z) => x y z
Мы можем вызвать её обычным способом: multiple(1,2,3) // 6
Мы можем создать каррирующую версию функции выше:
const multiple = x => y => z => x y z
multiple(1)(2)(3) // 6
Задача такая: написать функцию curry, которая может каррировать любую функцию, принимаемую на вход.
const curriedMultiple = curry(multiple);
curriedMultiple(1)(2)(3); // 6
функция может принимать аргументы для передачи в каррирующую функцию:
const curriedMultiple = curry(multiple, 1, 2);
curriedMultiple(3); //6
Вы можете передать более чем 1 аргумент в каждую каррирующую функцию:
const curriedMultiple = curry(multiple);
curriedMultiple(1, 2)(3); //6
Или можете не передавать аргументы вовсе:
const curriedMultiple = curry(multiple);
curriedMultiple(1)()()()()(2)(3); //6
const curriedMultiple = curry(multiple);
curry(curriedMultiple)(1)(2)(3); //6
curry(curry(curry(curriedMultiple)(1)))(2)(3); //6
Функция каррирования не сохраняет внутренний стейт:
const curriedMultiple = curry(multiple)(1);
curriedMultiple(2)(3); //6
curriedMultiple(2)(4); //7
Избыточные аргументы должны быть проигнорированы:
const curriedMultiple = curry(multiple);
curry(curriedMultiple)(1)(2)(3, 4, 5); //6
И ещё кое-что: не используйте, пожалуйста, функции call, apply и bind.
Описанных мною условий достаточно, я всё внятно написал.
Задачку можно решить в https://jsfiddle.net/ или аналогичной ей песочнице.
Я же тебе решение писал для multiply, ты даже спасибо не сказал. Всё еще не понял как такое решать и опять приполз?
Меня уже взяли. Эту задачку я уже решал, она показалась мне интересной и я её решил показать вам. Она элементарна, каждый ждун должен уметь решать подобного рода задачи.
Ещё могу написать задачку про бесконечно каррирующую функцию или про рекурсивную функцию Nat, но вы решите сначала эту.
Я в этот тред раз в год захожу. Давай, решай, а не болтай языком, ждун.
Раньше ещё сидел в МВП, но тот тред заполонили мальчики, косящие под девочек.
Пруфай договором с sup /b/
Я думал создать отдельно backend тред, но говноеды, которые бэкенд пишут на ноде, там будут не нужны
>элементарная задача для ждунов
>реализовать на хуй никому не нужный шаблон, который ты хуй когда применишь на практике ещё и без привязки контекста
Рофланебало, это получается сейчас фронтенд-джуну нужно идеально знать ванильный жс, реакт, редакс, advanced верстку, да ещё и разбираться в мертвых шаблонах типа каррировния, которые если и используют, то уже с готовыми пресетами в либах. Орунах, это же сеньор-помидор, только без опыта.
Это действительно решается просто, рекурсивно возвращаешь вызов функции с args и длинной args в качестве параметров, но на хуй это не нужно знать джуну. Я бы понял, если б такую хуйню спрашивали у тырпрайз-макак, от которых требуют 2.5 технологии, да ещё КАКИХ. Мне в последнее время кажется, что аучиться правильное конфигурировать вебпак под конкретный проект сложнее, чем выучить спринг или осознать ооп
Существуют еще какието ЯП которые развиваются кроме ЖС?
Может на старом говне мамонта джаве писать?
Может на пиздоне у которого свой особый путь и вечная судьба быть на вторых ролях?
Может на го, который не пришей пизде рукав так и не стал язык-классикой с прочным фундаментом?
Может на пхп битриксе?
Может на руби который сдох?
>старом говне мамонта
К жсу идеально подходит
> у которого свой особый путь и вечная судьба быть на вторых ролях?
Тоже идеально подходит к жсу, особый говнопуть и вечная судьба быть прокладкой для браузера
>который не пришей пизде рукав так и не стал язык-классикой с прочным фундаментом?
Ну ты понял.
Только отличительная черта жс - браузеры у него в заложниках
>это получается сейчас фронтенд-джуну нужно идеально знать ванильный жс, реакт, редакс, advanced верстку,
Я всё это знал, когда был джуном. Ну, только вёрстка хромала, а в остальном на тот момент пару мувичёрчеров было, переписывал их на реакт/ангуляр со всем соопутствующим зоопарком типа редакс и саги для реакта/IoC(DI) + RxJS для ангуляра
>а ещё и разбираться в мертвых шаблонах типа каррировния, которые если и используют, то уже с готовыми пресетами в либах.
В ФП языках это используется повсеместно. Я вообще сторонник того, что лучший способ обучения - это реализация того, что тебе непонятно самому и что ты сообственно изучаешь. Вот тогда тебе более практичная задача https://www.codewars.com/kata/advanced-events/train/javascript - требуется написать свой ивент с подпиской/отпиской и emit'ом.
>Это действительно решается просто, рекурсивно возвращаешь вызов функции с args и длинной args в качестве параметров
Ну, в принципе верно. Вот эта задача на codewars - попробуй её решить там.
https://www.codewars.com/kata/yack-yet-another-currying-kata/train/javascript
Я считаю что это не то что много, а просто дохуя, ибо 90% джунов готовы работать бесплатно ради опыта. 30ка это зарплата крепкого мидла в Казани например, хз что у тебя за мухосрань такая где столько кассиры получают
>Я считаю что это не то что много, а просто дохуя, ибо 90% джунов готовы работать бесплатно ради опыта.
Очень толсто.
>90% джунов готовы работать бесплатно ради опыта
Не видел такого нигде - все минимум 30к требуют. А те, кто меньше - то лучше этих вообще не брать. Такого понапишут, что потом сам вздёрнешься.
Невозможно стать хорошим специалистом, не имея уважения к своему делу - работая бесплатно. Этот факт давно уже все знают, кроме тебя.
>А те, кто меньше - то лучше этих вообще не брать. Такого понапишут, что потом сам вздёрнешься.
>Невозможно стать хорошим специалистом, не имея уважения к своему делу - работая бесплатно
Причём тут уважение?
Я ж написал вроде - без этого хорошим специалистом не стать.
У меня хорошее профильное образование, учусь последний год, но со сферой так и не могу определиться, т.к. плохо понимаю, чем занимаются джуны-мидлы-сеньоры в разных областях it.
Просто интересно, много ли сейчас интересных задач есть на фронте для людей, которые любят в логику, программирование, но не очень любят иметь дело с чем-то уж очень рутинным?
И если не фронт, то куда лучше двигаться с такими хотелками?
>И если не фронт, то куда лучше двигаться с такими хотелками?
В бэк. Фронт это всегда история про интерфейсы, количество вёрстки сильно зависит от проекта, его стадии и задачи. Обычно работаешь уже с какой-нибудь либой, в которой уже есть все нужные тебе компоненты и вся вёрстка сводиться к чему-нибудь типо - col-6 col-sm-4
Спасибо!
>К жсу идеально подходит
Да жс старый и кривой, только вот всякие майкрософты и прочие гиганты башляют в него бабосики и создают всякие тайпсрипты и кучу всяких удобоваримых улучшалок, чего не делается ни с одним другим языком.
>особый говнопуть
Если кто-то шагает впереди всех, то это не особый говнопуть, это путь первопроходца, за которым все пытаются дотянуться.
>Ну ты понял.
Нет не понял.
К слову сказать пхп, не стоит спорить, весьма популярный язык с кучей фреймворков и цмс. Разрабы пыхи перед выходом 7.4 так и написали что у них не так дохуя бабосов как например у жс, поэтому вынуждены отставать. Что гвоорить про другие, менее популярные языки
>В бэк.
Там тоже порой верстать приходится. Как минимум вёрстку знать и применять надо уметь.
Ну и помимо самого программирования всякого говна тоже навалом, вплоть до админского.
>>66963
>у них не так дохуя бабосов как например у жс
Такие вещи много бабосов не требуют. Просто пхп это серверсайд, а там всё аккуратнее делать надо, иначе у тебя не то что вёрстка поедет, а сам сервер ляжет. Поэтому и медленнее вводят новшества.
Обычно я делал это через отступы и я знаю как это сделать через гриды
Однако, я не знаю как это сделать через обычный CSS или флекс бокс.
У меня есть контейнер от грида (синего цвета), есть h2 заголовок, который ml 15% и есть линки. Я хочу, чтобы ширина h2 соответствовала размеру содержимого, а вся остаточная ширина (- ml 15% и - ширина h2) являлась шириной для линков. Другими словами, хочу получить всю возможную ширину для красного контейнера.
PS
Вот что получается, если задать width: 100% контейнеру с линками.
Вот это пикрелейтед 1, остальные - копии 2 пикрелейтед.
У JS равно самое длинное.
спасибо, пойду читать
Да. Сначала сравниваются типы, и если они разные, то false. Если одинаковые, то уже сравниваются значения.
>Такие вещи много бабосов не требуют. Просто пхп это серверсайд, а там всё аккуратнее делать надо, иначе у тебя не то что вёрстка поедет, а сам сервер ляжет. Поэтому и медленнее вводят новшества.
Я тебе говорю что это разраб пхп сказал, а ты ему говоришь что он не прав. Ну хз
> пхп это серверсайд, а там всё аккуратнее делать надо
Пхп - это последний язык для бека, про который так можно сказать. Обновляешь такой версию пхп - и у тебя в лучшем случае сайт заработает с варнингами, что такие-то функции устарели, а в худшем вообще не заработает, потому что их удалили нахуй.
В nodejs-скрипте ставлю пакет с помощью кода:
childProcess.execSync('npm i '+module)
И тут же подключаю его с помощью require, но ловлю ошибку, что пакет не найден, хотя пакет ставится в node_modules и при следующем запуске скрипта пакет нормально подключается. почему так?
уже не надо
Кто дедушку разбудил?
>Если кто-то шагает впереди всех
Ебанутый, дядя? Куда жопоскрипт шагает и что там придумали такого, чего в программировании не было 50 лет назад? Если ты лично свою первую монаду увидел именно в жопаскрипте, то это не значит, что он куда-то там шагает.
Как же хочется написать еще один муисерчер, крад или лаповую тудушечбку...
любой js фрэймворк и jQ это чистый js.
В гугле куча плагинов написанных на jQ. Берешь один из них и переписываешь на legacy. Но я посоветовал забить. Если у тебя там в потрфолио несколько готовых проектов и предлагают какую-то дичь. То такое. На твоем месте я бы вообще панель саундклауда или ютуба прикрутил бы с видосом пошел нахуй пидарас. А вообще кидай тз, может ты в дебри уходишь
>чего в программировании не было 50 лет назад?
Например не было ЯП на котором можно писать все.
Например у той же джавы нет ни одной IDE единственное платное говно от идеи не в счет.
Тайпскрипта не было нигде. Не было постоянно подерживаемых линтеров всяких, а не хуйни необновляемой. Не было бабилей способных транспайлить скрипт в ранние версии. Не было ни одного языка который был бы говняным по своей структуре, но изза этого все начали считать не его структуру говняной, а говняным MVC и ООП в целом. И т.д. можно бесконечно продолжать. ЖС - единственный ЯП. Все остальное дохлое или мертворожденное говно мамонта. И если изобретут новый язык то это будет продолжение ЖС, а не чтото новое
Скидывай сюда, интересно
https://www.w3schools.com/tags/ref_av_dom.asp
Если посмотреть что делают методы, всякие пропертисы и эвенты, то там есть примеры их использования и объяснение что они делают.
Алсо, подумай о паттернах. Там где есть интерфейс с кнопками, там почти наверняка есть паттерн Команда, чтобы не хардкодить код в кнопке. Вот пример:
https://www.youtube.com/watch?v=GQzfF5EMD7o
Чтобы подключить jquery достаточно только одного файла - jquery-3.4.1.min.js, а jquery-3.4.1.js можно выкинуть нахуй?
Выкатывайся
> Может на старом говне мамонта джаве писать
Лол, то, что Джава старая, не делает её плохим языком. Да и к тому же ни у одного языка и близко нет настолько развитой экосистемы. На ноде самый популярный фреймворк для бэка сейчас NestJS, вот только с тем же Спрингом он и близко не стоит по количеству всяких плюшек, которые сильно упрощают жизнь (хотя он и усиленно пытается косплеить Спринг).
>то, что Джава старая, не делает её плохим языком
Делает.
А спринг - говно для индусов, с совершенно ебанутым взглядом на веб, который был устаревшим ещё в день релиза этого говна.
>express/koa
Ты на этом дерьме вообще пробовал что-то писать? Это не современные фреймворки, а низкоуровневый скелет, на который нужно накидывать кучу либ и собственного кода, чтобы он стал хоть немного юзабельным. Единственное, что там можно написать - это хеллоуворлды, даже простейшую рест-залупу заебешься пилить и выйдет лютое неподдерживаемое говнище в итоге.
Хуя даун
Я бы не назвал это фреймворками полноценными. Скорее библиотеки/микрофеймворки.
Толсто :)
>то, что Джава старая, не делает её плохим языком
Делает, у неё даже логотип какое-то душное говно из мобилок нулевых
Тогда и ЖС тоже говно.
Java:
>First appearedMay 23, 1995; 24 years ago
Javascript:
>First appearedDecember 4, 1995; 24 years ago
Не очень понимаю, чем тебе не нравится хх - крупнейший сайт же.
Ну можешь еще career.habr.com посмотреть, там только разработка.
Сбрось нормальное описание тестового
Вы рофлите всем тредом? Я когда устраивался на бэк ждуном за 30к, я все это что описал анон знал + имел опыт работы с vue. Но у меня блять рука не поднялась сказать что я могу во фронт.
Ахуеть как збс что мне приходится конкурировать с вами
>Я когда устраивался на бэк ждуном за 30к
Анон ты на ноде вкатывался в бек ? что по стеку посоветуешь ? я так понимаю, это базы данных, какой нибудь нод фрейворк и пет в виде чата ?
Нет. Вкатывался на пхп лол. Но сейчас перекатываюсь на ноду
>это разраб пхп сказал
Какой именно и где? Пока что слышно только как бабка на лавочке сплетничает.
>ты ему говоришь что он не прав
Ты у нас за разрабов ПХП что ли? Я тебе говорю.
>>67158
>последний язык для бека, про который так можно сказать
>Обновляешь такой версию пхп - и у тебя в лучшем случае сайт заработает с варнингами
Зачем ты на 0 поделил в одном посте?
Заявил, что в ПХП не важно предварительное тестирование функционала вновой версии, и тут же что от кривого обновления у тебя бекенд может упасть. Что ты доказать хотел этим?
1.html
- устройство страницы
- тэги
- свойства
- dom
- bom
- event's
2.css
- основы или как тут написать, хуй знает
- блочная вёртска(когда div'ами всё делаешь)
- адаптивная вёрстка
- отзывчивая вёрстка
- медиа-запросы
- flexbox
- cssgrid
- scss/sass препроцессор
3. javascript
- Основы естественно, и всякие тонкости типа контекста, замыканий, this'a и всяких bind/call/aplly, асинхронные функции, промисы, прототипное наследование, fetch и xmlhttprequest запросы.
- ES6 со всеми приколами, шаблонные строки, стрелочные функции, генераторы, оператор ...spread
4. react
- основные концепты по официальной документации: virtual-dom, классовые и функциональные компоненты, стейтлес и стейтфул компоненты, состояния и пропсы, контекст, жизненный цикл компонентов, jsx(лол)
- из продвинутой документации: композиция, propTypes, хуки, компоненты высшего порядка
5. redux
- концепция флюкс
- концепция редакса
- react-redux как библиотека для связи, хули ей
и кроме этого знаю всякую мелочь, типа использования гита в проекте, использование вебпака для сборки проекта с нуля, всякие по мелочи библиотеки, которые в документах реакта и редакса попадались, типа react-router и redux-thunk или redux-saga. Вопрос вот в чём, что мне быстро добирать в стек с учётом того, что у меня месяц-полтора на подготовку к собесу и, надеюсь, своей первой РАБоте
4.
1.html
- устройство страницы
- тэги
- свойства
- dom
- bom
- event's
2.css
- основы или как тут написать, хуй знает
- блочная вёртска(когда div'ами всё делаешь)
- адаптивная вёрстка
- отзывчивая вёрстка
- медиа-запросы
- flexbox
- cssgrid
- scss/sass препроцессор
3. javascript
- Основы естественно, и всякие тонкости типа контекста, замыканий, this'a и всяких bind/call/aplly, асинхронные функции, промисы, прототипное наследование, fetch и xmlhttprequest запросы.
- ES6 со всеми приколами, шаблонные строки, стрелочные функции, генераторы, оператор ...spread
4. react
- основные концепты по официальной документации: virtual-dom, классовые и функциональные компоненты, стейтлес и стейтфул компоненты, состояния и пропсы, контекст, жизненный цикл компонентов, jsx(лол)
- из продвинутой документации: композиция, propTypes, хуки, компоненты высшего порядка
5. redux
- концепция флюкс
- концепция редакса
- react-redux как библиотека для связи, хули ей
и кроме этого знаю всякую мелочь, типа использования гита в проекте, использование вебпака для сборки проекта с нуля, всякие по мелочи библиотеки, которые в документах реакта и редакса попадались, типа react-router и redux-thunk или redux-saga. Вопрос вот в чём, что мне быстро добирать в стек с учётом того, что у меня месяц-полтора на подготовку к собесу и, надеюсь, своей первой РАБоте
4.
Уже щас можешь пиздовать
Показывай гитхаб и профиль на литкоде
чем
>адаптивная вёрстка
отличается от
>отзывчивая вёрстка
и >меда-запросы
Нахуй ты указываешь вот это все, просто пиши html/css/js, React/redux
>месяц-полтора на подготовку к собесу
Завтра устраиваться иди, какие полтора месяца подготовки
> Заявил, что в ПХП не важно предварительное тестирование функционала вновой версии
Это другой анон был.
Пора уже ввести здесь регистрацию с привязкой номера, чтобы такой путаницы не было.
у меня есть элемент, на котором висят два обработчика и при определённом действии я удаляю этот элемент. Нужно ли мне как-то дополнительно удалять эти обработчики или достаточно просто удалить элемент?
Утечка памяти может быть в старых браузерах.
https://stackoverflow.com/questions/6033821/do-i-need-to-remove-event-listeners-before-removing-elements
Как сделать чтобы запретить открывать ссылку в новой вкладке (не спрашивайте меня зачем) ? т.е человек может перейти по ссылке только напрямую щелкнув по ней левой кнопкой мыши.
У меня пока самая банальная идея это запретить правый щелчок, но наверняка есть возможность открывать пустую вкладку, когда щелкается правая мышка и выбирается "Открыть в новой вкладке"
отзывчивая, это когда шаблон условно "резиновый", сжимается и растягивается, без проёбов.
адаптивный, это когда есть несколько макетов, под основные разрешения экранов, условные >1280px, 600px и 480px
По крайней мере я это так понял, может и не прав, я самоучка
Ещё запретить клик колёсиком, Ctrl+клик и хуеву тучу других способов, зависящих ещё и от браузера.
Ты ведь понимаешь, что это обходится на раз-два?
Хотя я придумал, как сделать подобное, но это довольно костыльно и я не уверен, что это будет работать.
На самой странице, переход по которой должен быть только из твоей доменной области - добавить такой код
if(document.referrer !== location.origin) {
window.close()
}
Но энивей страницу можно будет выкачать
Никак.
Сделай ссылку не ссылкой, а кодом (e.onclick = () => location.href = ''). За это тебя обоссут половина пользователей, поисковые алгоритмы, все слегка альтернативные браузеры (нет, я не про файрфокс), всякая аналитика и тот кто будет после тебя иметь дело с кодом, но большинство пользователей не догадается как открыть не кликом.
>Это другой анон был.
Что, один пост 2 разных анона писали?
>>67158
Там написано в первом предложении, что ПХП это последний язык для бека, в котором нужно аккуратно обновления вводить. А во втором, что от кривых обновлений как минимум варнинги сыпятся, а то и хуже.
Предложения противоречат друг-другу. Подозреваю, что у кого-то проблемы с логикой а это беда для программиста.
Вообще подозреваю, что разрабы ПХП уже наломали дров и набили шишек с этими своими обновлениями и теперь не торопятся с новыми фичами. А некоторые уже думаю решать проблему радикально и пилить язык P+ или как-то так где будет выпилено всё легаси и костыли, но будет куча новых фич.
Правда пока одни разговоры идут.
А, вот ты о чём, я криво выразился. Имелось в виду, что пхп сделан через жопу, поэтому слово "аккуратнее" к нему неприменимо. "Аккуратнее" было бы взять что-нибудь другое.
Впрочем, хз, что там с ним сейчас, но я до сих пор натыкаюсь на сайтики, где на самом верху два-три варнинга. Хотя бы выключали их, что ли.
Список ничего не говорит, к сожалению. В принципе всё по делу, но вопрос, на каком уровне ты всё это реально знаешь, без домашнего компа, без бумажки и закладок в браузере.
>что пхп сделан через жопу
>натыкаюсь на сайтики
Так я и на ЖС говна понаписать могу. Теперь и его через жопу сделанным назовёшь?
В общем понятно с тобой всё.
На пхп как ни напиши, будет пиздец.
А если у меня в обработчике будет висеть removeEvent браузеру от этого плохо не станет?
Не знаю. Проверь.
Сколько в целом веб изучаешь?
Хотя если все рили хорошо знаешь, то стек нормальный, можешь хоть завтра пиздошить как выше писали
>Список ничего не говорит, к сожалению.
Двачую. В список обычно всё подряд запихивают.
Говорит только опыт работы и портфолио.
Он в ответ на запрос всегда присылает общее кол-во результатов и инфу о первых десяти фильмах. Как получить информацию о следующих десяти?
я не уверен что прямо все нюансы помню наизусть, но в любом случае уверено ориентируюсь, и даже если у меня вылетит правильное название какого-то метода, то мне не составит труда за пару минут с любой машины найти справку в официальных документах
а что я могу сделать для портфолио, как джун без коммерческого опыта? Какие-то не продакшн проекты, на которых я тренировался? Или лучше сделать парочку вылизанных во всех аспектах, на случай кодревью
Проекты есть? Сколько?
Списком этим подтереться можешь - будут смотреть твой код на твоих проектах. И если у тебя там копипаста одна с туториалов, то ты фактически ничего не знаешь.
Есть параметр page же. Указываешь номер страницы и всё.
Ну да, это правильно.
Лол, ты даже не понял сравнения? Тот индус португалец бомбит от переписывания костылей обёрнутых в костыли для придания хоть какого-то единообразия коду. Сейчас в одном проекте на ноде намешаны синхронщина, промисы, асинки/авэйты и говногод с глобальными переменными без use strict.
Кто ж ноду без тайпскрипта в 2к20 использует? Конечно говно выйдет - на ванилле-то. JS не для бекенда писан изначально.
Те, кто пишут бек. Без нормального ООП у тебя всё что выше тупого эхо-бота для телеги незамедлительно начнёт превращаться в лапшу со сливками поноса.
Вот сделал я пару записей, условно
database().ref('/users/').push({
uid: 1,
name: 'Vasya'
});
database().ref('/users/').push({
uid: 2,
name: 'Sanya'
});
И у меня в бд теперь есть объекты о двух условных пользователях, Васе и Сане, но они лежат по адресу /users/[рандомно-сгенерированая-хуйня-от-firebase]/{uid, name}
А как мне апдейтить дату теперь, или удалять, для пользователя с uid = 1? Как вот эту рандомную хуйню добавить в ref() при обращении? Я понимаю только как найти объект, типа:
database().ref('/users'/).on('child_added', snapshot => {
snapshot.val().uid === 1 ? alert(true) : alert(false)
});
А как мне для этого объекта поменять поле имя, например? Нихуя не понимаю
Вот очередной чувак, который копировал сниппеты даже не пытаясь заглянуть в документацию. Точно как пэхапэшники, над которыми раньше смеялись.
Точно. Копипастят только пхпшники, а другие ведь не могут - у них технической возможности нет. Всё руками переписывают, даже с других сайтов.
сегодняшние жаваскриптеры суть - вчерашние пхпшники, лалка
Все так делают. Не надо пытаться уличить джаваскриптеров в латентной пхпшности.
Что в ZOZO брать в качестве веб-сервера на ноде, express, meteor, koa или ещё что-то прямо сейчас набирающее популярность? Пишу небольшое приложение для read/write в эластик (аля поисковик).
Все
>На практике легко прострелить себе ногу херово написанным колбеком/await и огрести блокировк
Маня, у тебя один поток, твоя блокировка с "херово написанным коллбэком" будет заметна сразу после первого запуска скрипта.
Чего сложного в написании рест апи на экспрессе?
Уважаемый, когда нам потребуется мнение макак, которые не писали больше 10 строк кода, мы вас спросим.
Очередной маня-тралль с детской попыткой подъебать и развести срач.
Наверное ты себя очень умным считаешь.
При чем тогда тайпскрипт и "нормальное ООП"? ООП на основе классов есть давно и в нативном жс.
Ты бы википедию хотя бы почитал перед тем как что-то доказывать. Ты даже не понимаешь о чём идёт речь.
Зачем? Гугл и так всё нашёл.
Либо ты борщехлёб, либо макака?
На фронте не интересны вёртска и войны фреймворков, на бэке не интересны бд, ресты-хуесты – всё рутина.
В идеале хочу наверное заниматься ванилой на острие стандартов, хоть в TC39 пошёл бы заседать. Скорее всего ищу где нужно писать фреймворки-библиотеки-инструменты – нравится вертеть AST и разбираться в работе интерпретатора.
Каким вообще компаниям и сферам такое может понабится?
жужл
>Каким вообще компаниям и сферам такое может понабится?
Универститетам
>хоть в TC39 пошёл бы заседать
Там все работают на дядю или по конференциям есздиют и еблом торгуют.
https://www.typescriptlang.org/play/?target=7#code/MYewdgzgLgBAZmGBeGAKAbgQwDYFcCmAXDNAE4CWYA5jAD4lQXUDaAugDQwgAOU54EYmUpU2ASmQA+GAG8AsACgYymKEixyEALK5sfbtnzIYAQVKlMATwB0msxcsYcBMYsUquvfpGtwQpAFFMYAALVB4+cClZdw8VAHp4mEBWEEBBEEBuEEAOEBhAJhBAHhA0wCEQQD4QGE0dPXIDI0B+EGLAFhBUwsAGEBzMwsAZEFNzK1sIeysnPHwxThKYYsAJEEzARhBALhBswF4QZJgZwGEQeuTCmGzC1Jg6wE4QAsLOQHEQccLMmpgsYYYmUVZYuJhEmDziwDYQRdKsmFSm3SzU65xKM0A0iAwQACIM0ZsUWulSmdktDkoB2EAOqOSBUWizWgDkQMraXT6QwvOJqaDEgDK+EMwCg+AAJsZyqSquSlK84gB+GAAQgFdwIvkozKG0TuyCQKAi3lc3J5KmIIqMsrlXnAAG4KQBfRV6oA
Есть одна карусель, при наведении на элемент карусели (mouseover), должен показаться следующий слайд.
Сейчас мой код имеет вид:
$('#slide').on('mouseover', function() {
....myslider.trigger('next.owl.carousel');
})
Но при таком подходе при наведении на один слайд начинается очень быстрая прокрутка всех слайдов. Как установить задержку для отработки события после триггера? Чтобы навел мышь на слайд, сработало событие, а следующее срабатывание было возможно только через 3 секунды. (Дабы избавиться от быстрой прокрутки всех слайдов при наведении на один)
Попробуй обработчик события mouseover в ф-ю throttle обернуть. В лодаше можешь взять эту ф-ю или npm пакетом скачать.
Какой же ты тупой. Выйти и зайди заново в класс и расскажи заново без историй про википедию. Завтра придешь с родителями.
Сделай вращалку карусели и напиши в ней логику срабатывания вращения.
Например https://jsfiddle.net/z63epjwy/7/
Если будешь наводить на ЛОЛ, то у тебе к КЕК будет добавляться строка, но не чаще чем раз в 5 секунд.
Думаю идею ты понил.
Веди себя прилично, увидят что ничего не знаешь, так хоть вменяемым и обучаемым себя покажешь.
https://www.typescriptlang.org/play/?target=7&ssl=1&ssc=1&pln=26&pc=2#code/PTAEnwQQBEEDhBB4QRWEEqS9AMIIbhBqHYQVgxEGtKAC4CeADgKagDmArgIYBOAJgDSiBcIIHwggQiBeSBpEECcIO0AiIKg49ogcRB4gQRAO0doH4QLoCYQPpEDyIPB6hAvCCopa-cNABBRo3okAdAEsAzpeskAsACgQoQKgggZhAuUDlYATl0UDVQPlh2aT5QLn0grg5IVEBJEFRdCK4sWC5ANhBTeCjoZQEg0HoAOxJQAB8q2oBtAF1QQBYQQJqSNs8AYwB7asciUH7aUcGAWwBJZysbUABeUAAKegAuJrrGnraASm36UCcdtpWAPgtFuycXGw2DzwHh0dAAM2qV9YA3egANrQKNtRox7NVqA1QGCIdQ2uxBmQiPY3qCiODIYcrqAAN6eUCE8ZvMZOACytABKLIAKoqwedwWrjW-yBFGeHgJRKRKLetg+g0YAFF6P0ABZrHmo77La74jxExWgbzyTARBByeLkynU2mgVQdTWoNTQHiAGRAbq4HEzHqzgQd2PEuIAJEGggEYQRQGEpuwDCIB1soQeHJ9VwhAgeLF4lJlKA7VRYVjWlylcqwPkioE1XJ-egjGbI1w3RU0m7eBhArIUFh9Yh4Ah9PofYA5EFOjgpVPsNIoLwVKdToEAuCDwdBmrBaFS8LiwH2gOKBAAqAGUvaB09lVPotObZ07DKA4PBshwJFx4ABaJ08fQu+D6aAlDigQCyINEfcmld5YKg5HJoGofbYoCACgg6BaF6ATPvEyiQFwmqBAARoMgy0jUgGAEggUQSNAgCiIEE6A+tIqBaLhjYZvuciqCOWDqHmUS2Potjvoq3ikJQNAMCw7DcJoZhyCkaSZNkai5OmxSlOUgGAIQghaamot7XuwDLWgyoA+gU8BMUS3haGooG6HIYGsVQdBMGwBiBKJgSGMo0ByLRcjCUI6zBIB0EHpAByMb2KYgJphLeGhmihhEqAwKg+h6Gs+glFwsj6Ba2H8C60BCAcoCACgEnDflI27KLW9aNi2kQJvC7SVvA1b0I4mx+f2LKAsCVSODCGJwoc-IQsw9UAjirIrMsqxSsMHJ9qmtUBZ04XXrAnD8bo014QRWSgPh0jOiU0GwfEagCFgAhqLRSn3LcWUFB0ZhpFgrDjWA6iINh8AdKu0B3l+I6mEIXmjUMIyko4i4ULS-REBQzA-BMUxzDaJDdfatWKgA-KAACEyNxh11RdX1sqxoC-WDci0ojaNRLbHG+OgEN1QANzvgAvhydNAA
Вроде все объяснил.
не TS-бог, могу и ошибаться
Еще можно самому явно приводить аля (value as string[]).find
Но лучше делать через гарды как у >>68078 куна.
Я не уверен на счет ручных приведений как допустимой практики. В обычной тернарке это может быть более оправданным, чем написание тайпгарда, но вообще ручные приведения потенциально опасны и можно таким образом успешно обмануть и компилятор и себя.
http://www.typescriptlang.org/play/index.html?target=99#code/GYVwdgxgLglg9mABMMAKAbgQwDYgKYBciAzlAE4xgDmiAPieZVQNoC6ANInAA6wLFFSFamwCUiAN4AoRLMQy5EflERg4ZALY4YALzwATAGo58iALyIAgmTKYAngDoYxa7bsYTecQH5EWXHiIRMz++KxSCrI8fGDEDsDqAKKYEAAWqNHwSGYAfJKRcrJKsSrOAMp42HjQBuaq6lrYugbGAfGU+h7Y5nn+5mYWmQiiBQC+I6NAA
Ребенок, не позорься, еще годик в ридонли посиди и вопросы позадавай, потом может быть сможешь высказывать мнение, имеющее хоть какую-то ценность.
Это говорит человек, который предлагает вместо реата учить вью\ангуляр, потому что реакт это БИБЛИОТЕКА
Ну какбэ этот анон прав, это библиотеки, а не фреймворки, у тебя из штанов странно пахнет.
Пиздец, этот тред по своей тупости пробил дно. Казалось бы, куда уж дальше, ан нет, можно вбросить тупой срач о терминологии, оказывается.
Шизик, ты опять с голосами в голове говоришь? Где там хоть слово про ангуляры с вью?
Нельзя позволять, чтобы в лучшем треде программача говорили глупости. Будем сраться до последнего, пока за шизиком не придут санитары.
Очень аморфно, на самом деле.
Вообще:
Фреймворк - нечто фундаментальное, на основе чего ты выстраиваешь все решение. Фреймворк выставляет рамки и диктует направления.
Библиотека - нечто прикладное, что ты можешь легко подключить или заменить. Библиотека делает только свою задачу и не навязывает тебе никаких других решений.
Но по этому определению реакт можно отнести и к фреймворку. Но с другой стороны, реакт не имеет встроенного роутора, стора и подобных решений, которые есть в том же ангуляре.
Ангуляр же своими разработчиками вообще позиционируется как платформа для разработки, подразумевая, что они за тебя вообще постарались решить практически все и тебе осталось там только писать хелоу ворлды (на самом деле нет).
>>68231
Вообще не парься. Определение фреймворк-библиотека-платформа это что-то из разряда вопросов философии/политоты. Очень часто что-то называют фреймворком, библиотекой или платформой из скорее маркетинговых соображений, нежели из за реальной скрупулезной номенклатуры.
Тот же реакт можно и фреймворк считать, но его авторы позиционируют его как библиотеку настаивая на том, что он очень базовый сам по себе и ничего тебе не диктует. На самом деле вокруг реакта есть четко оформленная экосистема и в итоге выбор реакта создаст тебе столько же рамок и задаст направления, как если бы ты выбрал ангуляр (хотя и значительно меньше, но все же).
>Определение фреймворк-библиотека-платформа это что-то из разряда вопросов философии/политоты
Только в манямирке неполовозрелых фронтендеров.
У взрослых дядь библиотека — это набор функций, фреймворк — это набор функций (см. libcurl) + использующих их функций, а также паттернов написания кода с использованием этих функций (см. Rails). Вот платформа, да, не имеет ничего общего с точной терминологией.
Почему Реакт не фреймворк тогда? Он диктует тебе набор последующих решений своей экосистемы и он диктует тебе flux архитектуру от который ты вынужден потом строить все свое приложение.
Браузер ничего не перерисовывает, на странице ничего не меняется, новых фреймов нет.
Игры часто физику или мир просчитывают в том же ивевентлупе что графику. И вообще там другой фпс считается, игра тоже может оптимизировать себя и ничего не считать, но видеокарта всё-равно будет ебашить.
Хуй знает, я редукс вообще нахуй выпилил из приложения, оставил только аполло - так заебись стало.
Да потому что хуйня это всё. У лингвистов есть аналогичныф срач "Язык vs диалект". Много петушни, мало толку.
Называй так, как называют авторы, не ошибёшься. Но факт знания, что это именно библиотека, а не фреймворк, в ходе разработки не пригодится точно.
А как мне понять, что у меня хуевый фпс? Вроде как фпс должен быть не ниже 60, но в реальности у меня почти постоянно фпс ниже 60, но ничего не лагает при этом.
Срач хоть и петушиный, но у меня не один раз на собесах спрашивали, что такое реакт, ожидая, что я скажу, что это фреймворк, чтобы потом обоссать меня с ног до головы. Но анон не дурак.
И что, костыль с графкуель работает быстрее редакса?
ФПС чего? Очевидно ты ничего не рисуешь.
Дроч на фпс это не про веб если ты не на канвасе рисуешь что-то.
> Типизация и ООП никак не связаны.
Труъ-ооп, по заветам Кея, как раз таки должно реализовываться в языках с динамической типизацией. Все эти ваши джавошарпы настолько же далеки от ООП, насколько далеко от ФП реакт.
Дебилам просто протолкнули очередную модную хуетень под соусом чего-то большего, чем просто очередной уровень абстракции, а они и рады. Схавали за обе щеки, так сказать.
>Труъ-ооп, по заветам Кея, как раз таки должно реализовываться в языках с динамической типизацией.
руби?
а ок, я так понимаю, имеет смысл только фпс анимаций замерять
Библиотека не диктует тебе, как нужно организовывать бизнес логику, она просто дает набор функций для реализации какой-либо задачи. В реактоприложении ты можешь легко вынести 90% любой логики компонента(10% - это дроч со стейтом, но и его хуками теперь можно изолировать кое-как) в любой удобный формат и использовать реакт только для того чтобы писать шаблон в dom, что и есть та самая единственная задача, которую реакт помогает решить как библиотека.
Но при этом ООП они реализуют как по определению. Ты наверное вообще охуеешь, если узнаешь, что ФП и ООП друг друга никоим образом не исключают и обе парадигмы можно использовать вместе.
Отправляешь своим клиентам html файлы по почте?
ну так захуярь из кода, который ты не хочешь показывать, внешний апи и дёргай его из кода, на который тебе похуй.
ну да,со скалой работал
Если у человека есть прямой доступ к сурс-коду и желание разобраться, что этот код делает, то он разберется не то что в индусском говне, а даже в бинарнике. Так что не советуй хуйню ньюфагам, единственный способ "спрятать" код от клиента - это вынести этот код на сервер, больше никаких.
Хотел найти инфу про хуки в js - не нашел. Куда искать? Что почитать на эту тему?
>что ФП и ООП друг друга никоим образом не исключают и обе парадигмы можно использовать вместе.
Там перехватывать можно события браузера? Это же вроде просто набор команд для управления вводом клавомыши. А мне надо еще и печеньки ловить, которые в случайном месте появляются.
856x884, 0:13
Я б тебе не перезвонил
OpenJS Foundation, в которую объединились JS Foundation и Node.js Foundation. Потом на бумаге все решения заверяют в Ecma International как часть стандарта ECMAScript.
Вот тут можно публичные обсуждения и стадии разных предложений посмотреть.
https://github.com/tc39
Тоже не тру. Внезапно, ближе всего к тому самому смоллтоку именно жс. А долбоебы типа вот этого, >>67788, боготворящие убогую концепцию классошлепства вместо программирования, являются настоящими макаками.
Я, кстати, конкретно охуел, когда узнал, что макаками называют формошлепов. Нет, блять, макаки -- ООП-дебилы, которым по кайфу пихать свое убогое говно абсолютно везде и всегда. Они не знакомы с понятиями функтора и сигнатуры - на хуй нужна матеша, если можно обмазаться наследованием и анальными ограничениями строгой типизации. На хуй нужен хот реплейсмент, если можно просто наебашить побольше кода?
Но ещё больше я охуел, когда узнал, что эти макаки противопоставляют ОПП и ФП. Серьезно? Хотя, чего ожидать от выпускников мещанских университетов, которые дальше своей родной галеры никогда не высовывались. Это ж надо, рассуждать о парадигмах, которыми ты ни разу в жизни не воспользовался.
Предлагаю заклеймить ооп-выродков раком айти и ссаными макаками, гнобить и унижать их при каждом удобном случае.
async function sleep(ms) {
return new Promise(res=>setTimeout(res, ms));
}
for (let i = 0; i != 100; i++)
{
await sleep(5);
document.getElementById("bigCookie").click();
}
Страуструп угнал этот термин и его ООП в коммерческой разработке стало более популярным. Объективная реальность.
Неадекват это любой, кто не понимает такое положение дел и петушится про то, что НАСТОЯЩЕЕ ООП ЭТО ТОЛЬКО ПРО КЛАССЫ/ПРОТОТИПЫ по заветам Страуструпа или ТОЛЬКО ПРО АКТОРЫ ПО ЗАВЕТАМ Кея.
Определение ООП это одна из тупейших спец-олимпиад в мире погромирования. За такое пора уже в биореактор отправлять.
Потому-что в ~2016 все начали неистово умолять писателей жс фреймворков и новых фич в языке немного астанавиться и они реально немного астанавились.
Вот тут можешь оценить масштаб нытья того периода.
https://habr.com/ru/post/312022/
>я дурачок и не могу выделить единственную уникальную фичу ООП парадигмы, а значит это спецолимпиада
Держи в курсе.
>Потому-что в ~2016 все начали неистово умолять писателей жс фреймворков и новых фич в языке немного астанавиться и они реально немного астанавились.
Нихуя они не остановились. Кто хочет - тот пишет. А ты не обязан изучать каждый пук твоего любомого разработчика.
> Страуструп угнал этот термин и его ООП в коммерческой разработке стало более популярным. Объективная реальность.
> Неадекват это любой, кто не понимает такое положение дел и петушится про то, что НАСТОЯЩЕЕ ООП ЭТО ТОЛЬКО ПРО КЛАССЫ/ПРОТОТИПЫ по заветам Страуструпа или ТОЛЬКО ПРО АКТОРЫ ПО ЗАВЕТАМ Кея.
Миллионы мух не могут ошибаться? То, что сейчас называют ООП, стало популярно лишь из-за общего уровня снижения математической подготовки разработчиков, которых нужно загонять в строгие рамки, дабы избежать тонн говнокода. Это объективно плохо.
Благо современные инструменты стараются делать, как минимум, мультипарадигменными.
Да. Если брать всю экосистему жс, то там фич будет больше, чем во всех перечисленных тобой языках вместе взятых. И их экосистемах.
Речь идет о том, что человек который доебывается до сраусиного определения ООП слегка долбоеб, потому-что так уже случилось и ничего с этим поделать нельзя. Ты реально на работе тоже будешь доебываться колег из за того, что под ООП в переписке будут подразумивать страусинное ООП?
По определению страусинного ООП - да.
В JS ООП как в языке Self, в котором взяли за основу страусинное, но потом слегка свернули в сторону.
>так уж случилось
Если завтра так уж случиться и у тебя появится геморрой, ты не пойдешь в больницу?
>>68405
Если ты про ООП а-ля «наебашим классов, обмажемся полиморфизмом и будем НАСЛЕДОВАТЬ» - да, инструменты для такой разработки в жс менее мощные, чем в джавошарпах.
>>68411
> те написать что то может сложнее,чем на жаве?
> полкчается нода с жс-галимое прототипирование?
Почитай тред. Я только что объяснял, почему то, что ты подразумеваешь под ООП - хуетень.
Не совсем. Потому-что классы в жс это сахарная обертка над прототипами. Под капотом там все равно остается прототипное наследование.
костыль для костыля
Осторожнее, ты на двачах. Сейчас еще реальные ценители говна прибегут и засрут весь тред срачем о том, какой формы должно быть настоящее говно.
> А ваще в жс всё объект, даже функция, даже аллах. Объектно-ориентирование некуда.
Ещё один человек, который не понимает, что функции первого - не признак страуструпского говна, а наоборот.
Ну ведь это удобно
Нет никакого примут.
Да и никакого 2020 тоже нет, это условное спекулятивное обозначение.
Те фичи который сейчас называют es2020 (glolbalThis, ??) уже формально часть стандарта, но не высечены пером, это вот-вот в январе должно случиться.
Если в феврале что-нибудь ещё приедет в стейдж 4 это тоже будет называться es2020.
>Неверная мантра. Это не просто "сахарная обёртка". Есть довольно существенные отличия "класса" от обычных прототипов.
Поясняй давай, что имел в виду. Классы в JS - сахар, обычные объекты, строго говоря, классов в привычном понимании относительно других языков в JS вообще нет.
>Поясняй давай, что имел в виду. Классы в JS - сахар, обычные объекты
Понятие "класс" и ему соответсвующие термины в контексте JS действительно ввелись ради упрощения освоения языка другим программистам, придешдших с классовых ООП языков. Но я имел ввиду не это. Например, функцию можно сразу как бы заранее использовать, перед тем, как реализовать и благодаря механизму "поднятия" интерпретатор JS не выбросит никакой ошибки, в отличии от класса: https://jsfiddle.net/3Lzgoh1y/
Ещё одно известное мне отличие - в классах нельзя объявлять методы с помощью стрелочной функции(без бабеля). Ну и вообще классы имееют иную структуру для AST.
>строго говоря, классов в привычном понимании относительно других языков в JS вообще нет.
Ну типа да, но вместо классов есть прототипы. Вообще, JS выбрал протипы из-за своей недальновидности - раньше и браузеры были медленее и непредсказуемые, а реализация поведения через прототипы была намного проще.
незнаю у меня все нормально работает
>я сначала загружаю с базы данных, потом перебираю то что получил, и ещё раз обращаюсь к конкретной записи для удаления.
Так это у тебя простое поведение. В самой документации саг же сказано, что он необходим для сложной асинхронной логики и для обработки сайд-эффектов.
Для элементарных действий вроде выгрузки каких-то данных с АПИ можешь прямо в компоненте всё это делать. Если что-то посложнее и ты чувствуешь, что это может где-то переиспользоваться - лучше вынести в сагу.
У меня есть спан, на который я навешиваю два обработчика https://jsfiddle.net/ofvjkb1L/
Первый срабатывает только один раз, после этого одиночные клики он не распознаёт.
а как-же "Action-функции обязательно должны быть чистыми"? Разве не для любой асинхронищины используют мидлвары?
я обращаюсь к firebase realtime database нативными функциями из пакета firebase внутри обычной функции-обработчика, которая висит на компоненте.
Мой диссонанс в том, что это работает. Читая документацию я чётко усвоил что любой асинхронный код надо выносить в мидлвары, и теперь я не понимаю нихуя
Должны, но я говорил не про редакс, а про реакт. Это редакс по дефолту не поддерживает асинк флоу и поэтому используют миддлвары. Я например для каких-нибудь статичных страниц могу вытянуть данные прямо в хуке useEffect и ничего страшного у меня не происходит. Если поведение чуть-более сложнее, чем просто взять, отфильтровать и засетить в стейт - тогда использую сагу.
>Мой диссонанс в том, что это работает. Читая документацию я чётко усвоил что любой асинхронный код надо выносить в мидлвары, и теперь я не понимаю нихуя
А почему это не должно работать? Реакт !== Редакс. В реакте можно делать асинхронные вещи. И сайд эффекты иметь можно.
>>68598
> Аноним 09/01/20 Чтв 21:09:15 №1568598 530
я, кажется, понял, почему я долбаёб. Получается я могу оставить всё как есть. Будет один мидлвар, который загружает к хранилище массив этих заметок при монтировании странички. А удаление и редактирование записей будет без вынесения в экшены и связей с редаксом, просто кодом на компоненте. Благодарю
Да мне тогда придётся весь проект запихивать
Вот укороченная версия
https://jsfiddle.net/r3c8xsu9/1/
При первом клике на спан вылетает алерт, но последующие клики он не ловит.
У тебя первый обработчик всегда будет перекрывать второй. Вешать на один элемент и click и dblclick - очень плохо.
Да
Да 07
Зависит от алгоритмов браузера.
Скорее всего будет пересчёт, не будет перекомпоновки и перерисовки.
Существуют даже хаки связанные с обращением к свойствам элементам, что бы тригернуть пересчет их рендера.
Вот такая вот хуйня void elem.offsetWidth; (вместо offsetWidth любое другое подобное свойство может быть) может заставить браузер пересчитать состояние анимации на элементе. Я таким образом чинил баг в какой-то из версий хрома (с анимациями там что-то постоянно ломают, так как последний год они принялись очень активно такие вещи оптимизировать в плане производительности, но как бекфайр - в некоторых очень сложных конструкциях анимации начинали сильно глючить).
Но вообще, я думаю, что это не покрыто какими-то стандартами (пруф ми вронг, если кто прошарен) и нет никаких гарантий, что такое поведение будет постоянным на протяжение будущих обновлений.
Нет, если используешь редакс, выноси всю асихронную логику в него. Хз как саги, я это делал через thunk
Вкатился на реакт без опыта на мидл вакансию на 70к за 2 месяца, дефицит кадров пиздец. До этого год фрилансил на битриксе
Ну иди поработай пхп погромистом. Набей опыта, а потом укатывайся в удаленку - там вообще пофиг в какой мухосрани ты живешь, лишь бы интернет был.
Но вообще можешь повисеть в поисках удаленки на реакт на джуна. К концу января должен рынок активизироваться. Проблема удаленки только в том, что туда чаще ищут опытных девов. Но в теории и джуна могут куда-то взять. Ищи везде, где только можно, включая канал в телеге.
И сделай какой-то свой сайт, где бы ты выкладывал какие-то крутые штуки, которые ты накодил - это кайнд оф заменитель опыта работы.
Томск, хотя недавно видел в обсуждении на хабре, что в Томске завышены зп в ИТ в силу конкуренции
Портфолио нет, доделываю потихоньку мувисерчер. В анкете есть даже мое фото + пишу сопроводительные письма. Поясните, что делаю не так на основании вашего опыта.
> И сделай какой-то свой сайт
На похапе?
Щас максимум могу на питоне и жсе хуету какую-нибудь сварганить.
Без фреймворков естественно слишком сложна
Думаю мб nodejs попробовать
А что такое? Без них вообще никак? Я просто для обучения принципиально ничего не хочу использовать. хз насколько правильный такой подход
Исходя из моего опыта, по всем интересным резюме рекрутерша пишет первой.
Комитет же не имеет четких дат
Завышенные они во всей индустрии.
Джунов в Томске жопой жуй и каждый год новые из универов выпадают, а сеньоров нет, все съёбывают. Работы для сеньоров тоже почти нет впрочем.
Я захотел разобраться с вэб-сокетами. В node есть нативный модуль net.Socket. Который есть "интерфейс", и который обеспечивает взаимодействие между разными компами по TCP/IP. Что в общем понятно.
Но вот вэб-сокет, это уже протокол поверх все того же TCP/IP. После обмена GET запросами клиент и сервер устанавливают соединение по TCP/IP - как реализовано это соединение?
вэб-сокет это протокол которые реализует в конечном итоге сокеты? Как это работает ?
Я хочу на node запилить что то на сокетах нативно, без сторонних фреймворков. Что бы разобраться.
п.с.
Я пролистал каталоги репозитория soket.io - и не нашел там никакого стороннего кода на c++. Значит этот фреймворк использует нативные возможности ноды и в частности модуля net.Socket
Зачем? Оставайся в жопе.
>>69165
При всем дефиците, мидлом за 2 месяца стать нельзя. То есть твоя должность вполне может так называться, но скиллы у тебя будут джуна в лучшем случае.
>>69182
Они посмотрели. Может, позовут. Зачем это как-то ещё расценивать? Отказы обычно лепят либо сразу, либо отклик улетает в архив вместе с вакансией. Телефон твой в резюме есть? Вотсап/телега работают?
Сделай нормальный гитхаб, хотя бы с пет-проектами, лучше, если стек будет совпадать с тем, на что откликаешься. Сопровод некоторым важен, но чаще значения не имеет. Откликайся сильно больше, чем делаешь сейчас, через силу.
>Доплачивать нужно будет за воз
Ну вообще-то платные стажировки это довольно распространённая практика.
>>Телефон твой в резюме есть?
Есть
>>Вотсап/телега работают?
Есть
>>Сделай нормальный гитхаб
Вот делаю мувисерчер потихоньку. Очень хотелось бы сделать с бэком и sql. Но я смотрю на это все и понимаю, что возможно оно того не стоит + лучше наверное 2 проекта сделать, чем 1 фуллстак. + если в JS более менее уверен, то в многих CSS вещах не уверен, это и дополнительно заставляет задуматься о надобности этого бэка.
Закономерно мне сказали, что напишут на следующей неделе, сообщат зп и тд, лол.
Ну, с первого раза, наверное, мало у кого получается, так что я хоть и расстроен, но не прям чтобы сильно. Ну и меня это очень сильно бустануло - после тестового я всего за 3 вечера написал простенький мувисерчер и тудушку. В общем, хочу поблагодарить анонов, которые помогали мне - вы крутые!
Код как бы подчеркивает деградацию колеров. Им дали Promise, дали Async - но коллбеки все равно хуячат.
бамп вопросу
fn - алиас, а остальное из тайпскрипта
>что за `fn:`?
Имя параметра, за которым следует тип
>что за `= empty`?
Значение по умолчанию.
>что за `:Promise<void>`?
Тип возвращаемого значения.
И да, не пользоваться typescript в 2020 = сидеть на обочине
Вот поэтому там дохуя вакансий для джунов. Хотя наверное в силу вышки требования пожестче, чем там, где такой конкуренции нет.
Сеньерам не то что в Томске, им в рашке делать нехуй.
>При всем дефиците, мидлом за 2 месяца стать нельзя. То есть твоя должность вполне может так называться, но скиллы у тебя будут джуна в лучшем случае.
>
Речь про трудоустройство, а не скилы.
Я до работы редакс не трогал, с бойлерплейтом разобрался за день, больше вопросов нет. Посмотри у буры ролик по редаксу и все поймешь. Там нихуя сложного
это тайпскрипт
И как ни странно нихуя мне не дало. Час уже сижу в доке ковыряюсь. Так и не нашел пока ответа - в Socket.io именно TCP уровень реализован на сокетах.
Как я понимаю варианта два - либо с помощью нодовских net.Socket, либо где то среди зависимостей есть пакет с бинарником на C++, на котором написана своя реализация протокола вэб-сокет. Но в этом я сомневаюсь.
Поддерживается практически всеми популярными библиотеками и предотвращает кучу интеграционных ошибок между модулями.
Также как и через XMLHttpRequest
Ничего лучше чем поднять стэйт на верх и передавать функцию через пропсы, которая будет добавлять в стэйт фильмы, я не придумал. Но все бы ничего, но это выглядит крайнего убого (скорей всего именно в моем случае). Взгляните пикрелейтед. Получается что у меня есть компонента MainRoute, которая вообще отвечает просто за роуты и в ней внезапно начинает появляться какой-то favouriteBar. Я уверен, что ни один разработчик этого не ожидает и это какой-то гавнокод.
>Аноны, пишу мувисерчер на реакте с легаси классами.
Почему не хуки?
А вообще - раздели компоненты на компоненты-контейнеры, которые содержут логику и компоненты представления, которые эту логику рендерят.
>>что за `= empty`?
>Значение по умолчанию.
Но в JS нет примитива empty, это переменная что ли?
>>что за `:Promise<void>`?
>Тип возвращаемого значения.
Promise, допустим, тип а <void> после него что такое?
Это Typescript, долбоебина тупорылая.
попробуй это: https://davidwalsh.name/websocket
>Socket.IO simplifies the WebSocket API and unifies the APIs of its fallback transports
>Let's take a look at the HTML5 WebSocket API: its use on the client side, server side, and an outstanding wrapper API called Socket.IO
как я понял, Socket.IO обёртка вокруг WebSocket API
>>обёртка вокруг WebSocket API
Да, но у nodejs нет нативной поддержки вэб-сокетов. Только "классические" TCP сокеты.
Вот и гадаю я как реализованы вэб-сокеты в nodejs. На основе родного модуля ноды net.Socket. Или как то еще.
Надежду написать свою, самую примитивную реализацию вэб-сокета на нативной ноде я пока потерял.
Почему ты называешь классы легаси? Они еще не депрекейтнуты. Это редакс потихоньку сползает в легаси, если уж на то пошло.
>я отлично понимаю, что подключение redux решило бы все мои проблемы
Ну так разберись как он работает и сделай так же.
>Слабо документируемое овверейтед говно и не нужно.
Отсталый. Всё там нормально описано. Просто ты отсталый и не разобрался в них. А там ещё асинк рендер подвозят, который многие давно долго ждали - ты тоже скажешь, что "гамно, ни нужна, я сказал!!1"?
>Слабо документируемое овверейтед говно и не нужно.
Ват? Там прекрасная документация. Так и скажи что не разобрался.
Охуенно. А как? Можешь пример привести, ну или погуглить за меня, потому что я нихуя не нашел.
Нет
Описать сложно, но тебе нужно капать в сторону расширения браузера. Браузеру можно предоставить доступ к чтению файловой системе(как и к адресной поисковой строке) и поставить хук на тот момент, когда файл открывается
Спасибо, попробую.
почему гавнокод, я не нарушаю идеи setState. Функция возвращает абсолютно новый стэйт, не мутируя старый.
Ну кстати ты прав. Открывает кто-то метод добавления фильма в избранное и читает:
Создадим функцию "создать новый объект", которая принимает "предыдущее состояние" и "новый объект".
Шта? Чё за новый объект? Чё за старое состояние?
Нипанятна. Ниясна. Нипанятна (с) Гоблин.
я согласен, что имена подобранны не верно, но с точки зрения типов, нет никаких ошибок. json - это объект, новый объект который нужно добавить в стэйт. setState ожидает новый стэйт, не мутированный, а абсолютно новый объект
Ага, при этом newObj какого-то хуя отдаёт свой id, по которому потом добавляет себя в хуй знает куда. И метод названный createNewObj, почему-то возвращает newState. Просто полнейший пиздец, даже сложно понять, насколько тупоголовым нужно быть чтобы этого не видеть. Про Object.assign вместо спред оператора вообще молчу, особенно смешно это смотрится, когда в следующей строчке видишь деструктуризацию.
Я думаю потому что метод console.log не ждет когда твой объект выведется в консоль, а сразу возвращает управление и начинает выполняться return. А так как ты в него передал ссылку на объект, то пока консоль возьмёт объект по этой ссылке ты уже его вернешь и там будет твоё новое состояние. Чисто моё предположение. Если бы это был PHP можно было бы вкорячить после console.log нечто вроде sleep и посмотреть на реакцию.
Попробуй вывести не this.state, а JSON.stringify(this.state)
Бесмыслено в консоль смотреть после того, как все уже отработает - там будет последнее состояние объекта в рантайме, а не то, что было в точке вызова. Добавь точку прерывания и смотри.
...
console.log(this.state)
debugger
return newState
}
Я не за компом сейчас.
Разницу между вышеперечисленным я знаю, но с той проблемой, как ОПа на моей памяти не сталкивался и object.assign тут ни причём, потоком управления реакта он никак не может управлять.
У ОПА скорее всего в том, что он вызывает функцию на месте. а не передаёт её в качестве коллбэка.
Скорее всего проблема в том*
Можешь прочитать про разницу между шалоу и дип копией
https://stackoverflow.com/questions/184710/what-is-the-difference-between-a-deep-copy-and-a-shallow-copy
Бля, вот уж кого-кого, а меня учить жиэсу не стоит, побольше вас знаю, уж поверьте, тут у него в другом проблема, я выше написал
PS спасибо за ответы!
Да блять, у тебя всё равно неправильно, ты вызываешь функцию на месте, эта функция совершенно лишняя, почему бы не сделать так
addFavouriteFilm({id) {
this.setState(state => ({favouriteFilm: id }))
}
?
addFavouriteFilm({id) {
this.setState(state => ({...state, favouite: ....state.favourite, favouriteFilm: id }))
}
ещё раз пофиксил)
>>70407
>>70408
Потому что ты, макак, даже не смог понять структуру его стейта.
favourite отображает id на дескрипрор фильма, а твой говнокод вообще дексриптор не содержит и favourite не модифицирует.
Как таких дебилов земля носит? Выучил, что в setState можно передавать updater вместо объекта, и срет этим во все посты.
Да мне не особо нужно было понимать его структуру, у него там говнокод лютый, >favouriteFilm(json), даже сигнатура хуже некуда, нейминг никудышный
>Выучил, что в setState можно передавать updater вместо объекта, и срет этим во все посты.
Мань, я знаю про иммутабельность лучше, чем ты, уж поверь. Я уверен, что ты даже не знаешь, как просто можно обновить значение d в такой структуре данных, без мутации самого объекта
const obj = {
a: {
b: {
c: {
d: 4
}
}
}
}
так что закрой еблет)
>Мань, я знаю про иммутабельность лучше, чем ты, уж поверь.
Но ты же три раза подряд обосрался и так и не решил исходную задачу. Что с того, что ты про стрелочные функции и spread syntax знаешь? Наука в руках обезьяны бессильна.
>а ведь setstate работает асинхронно и в этом был весь косяк
Ты такой тупой, что прямо смешно.
https://reactjs.org/docs/react-component.html#setstate
> You may optionally pass an object as the first argument to setState() instead of a function:
setState(stateChange[, callback])
This performs a shallow merge of stateChange into the new state, e.g., to adjust a shopping cart item quantity:
...
send@0.17.1
debug@2.6.9
ms@2.0.0
ms@2.1.1
Ставлю я, значит, пакет. У этого пакета в зависимостях пакет ms версии 2.1.2, а также пакет send версии 0.17.1. У пакета send в зависимостях пакет ms версии 2.1.1, а также пакет debug версии 2.6.9. У пакета debug в зависимостях пакет ms версии 2.0.0.
Что же делает этот незаменимый пакет ms, ТРИ разные версии которого я только что себе скачал? Наберите воздуха в грудь. Он переводит записанное строкой время в миллисекунды.
Какие же жаваскриптеры дегенераты.
> Какие же жаваскриптеры дегенераты.
Пришел байтоеб, который не может не изобрести пару колес до обеда
ms('2 days') // 172800000
ms('1d') // 86400000
ms('10h') // 36000000
ms('2.5 hrs') // 9000000
ms('2h') // 7200000
ms('1m') // 60000
ms('5s') // 5000
ms('1y') // 31557600000
ms('100') // 100
ms('-3 days') // -259200000
ms('-1h') // -3600000
ms('-200') // -200
this.setState(state => ({...state, favourite: {...state.favourite, id}}))
Доволен? Мне больше не о чем с тобой разговаривать, ты не знаешь базовых вещей даже. На мой вопрос ты так и не ответил, только язвишь всё. Язви дальше, оставайся токсичным дальше.
Ты же в четвертый раз обосрался.
Что будет в state.favourite[id]? Где, блять, дескриптор фильма?
(вот такой вод код-ревью для джуна-тормоза)
Прости, дорогой, я энтерпрайзогосподин.
У нас собственный репо в котором у каждого пакета единственная тру-версия.
Я знаю про это
но это может приводить к неожиданным поведениям, как у опа
про батчинг обновлений в реакте ты ничего не слышал, конечно же
Пятый обсрамс, потерял favourite.
... eще пару-тройку итераций, и мы таки дойдем до
this.setState({ favourite: { ...this.state.favourite, [json.id]: json }})
>но это может приводить к неожиданным поведениям, как у опа
оп тупо модифицировал свойство-объект после shallow-copy состояния. Изменения, естественно, мгновенно отражаются и в "оригинале", и в "копии"
А если бы ты не был быдломакакой, ты бы прочитал доку на setState
> This form of setState() is also asynchronous, and multiple calls during the same cycle may be batched together.
и понял, что setState(object) точно такой же асинхронный, как и setState(updater)
Но ты же будешь упорствовать.
Ну видишь, я как-то глазами даже не заметил, что в этом json'е находится структура самого объекта, я думал, что его уже перезаписывать нужно, типа ОП не знал, как правильно структуру в айдишник запихнуть.
Энивей ты клоун, только токсишь, если ты в этот раз, в этот час оказался более внимательным, чем я - то я тебя сердечно поздравляю)
Вот он вызывает функцию createNewObj и передает в неё по ссылке состояние и аргумент json
В функции он создает новоеСостояние и копирует в него староеСостояние, но это копия шалоу, то есть если у нас в состоянии есть какой-то атрибут x, который указывает на объект, то есть указывает на ссылку на объект, то скопируется ссылка, не объект по ссылке
Пруф:
$ node
> let a = {a1: 3};
> let b = {b1: a};
> console.log(b);
{ b1: { a1: 3 } }
> let c = Object.assign({}, b);
> console.log(c);
{ b1: { a1: 3 } }
> b.b1.a1 = 4;
> console.log(c);
{ b1: { a1: 4 } }
Потом он берёт id из аргумента json
И кладет в новоеСостояние.избранное.id аргумент json, то есть кладет туда ссылку на аргумент json
Но ведь он сделал шалоу копию, то есть у него что новоеСостояние.избранное, что староеСостояние.избранное - это один и тот же объект и когда он пишет новоеСостояние.избранное.id = аргумент json то он меняет (или добавляет) атрибут и в новоеСостояние и в староеСостояние.
Верно?
Если верно, то как ему надо поступить?
Вот он вызывает функцию createNewObj и передает в неё по ссылке состояние и аргумент json
В функции он создает новоеСостояние и копирует в него староеСостояние, но это копия шалоу, то есть если у нас в состоянии есть какой-то атрибут x, который указывает на объект, то есть указывает на ссылку на объект, то скопируется ссылка, не объект по ссылке
Пруф:
$ node
> let a = {a1: 3};
> let b = {b1: a};
> console.log(b);
{ b1: { a1: 3 } }
> let c = Object.assign({}, b);
> console.log(c);
{ b1: { a1: 3 } }
> b.b1.a1 = 4;
> console.log(c);
{ b1: { a1: 4 } }
Потом он берёт id из аргумента json
И кладет в новоеСостояние.избранное.id аргумент json, то есть кладет туда ссылку на аргумент json
Но ведь он сделал шалоу копию, то есть у него что новоеСостояние.избранное, что староеСостояние.избранное - это один и тот же объект и когда он пишет новоеСостояние.избранное.id = аргумент json то он меняет (или добавляет) атрибут и в новоеСостояние и в староеСостояние.
Верно?
Если верно, то как ему надо поступить?
Но он гарантирует ожидаемое поведение стейта, вариант с коллбэком предпочительнее, ибо каждый сетСтейт выполнится корректно
я бы посмотрел, как ты таким вариантом обновляешь корзину у юзера и в итоге он покупает 100500 товаров за неебическую сумму как за 10 товаров, т.к срабатывал батчинг
https://stackoverflow.com/questions/48209452/when-to-use-functional-setstate
Верно.
Варианты:
1. использовать тот факт, что setState делает shallow merge, и явно скопировать (только те) вложенные свойства которые перезаписываются (favourite)
ОП запостил, кстати, рабочий вариант >>70396
- та же идея, что и в >>70438, просто НЕИЗЯЩНО
2. Если обновлений много в разных местах и на разных уровнях, можно написать пачку spread operators типа -
{...state, favourites: { ...state.favoriles, [json.id]: json }}
только это потом поддерживать на больших стейтах будет очень больно.
3. или воспользоваться умной библиотекой для иммутабельности assocPath(["favourites", json.id], json, oldState).
Если хочется, чтобы все тормозило, то можно deep copy делать.
есть такой вариант @ https://dzone.com/articles/everything-you-need-to-know-about-socketio
>To establish the connection, and to exchange data between client and server, Socket.IO uses Engine.IO. This is a lower-level implementation used under the hood. Engine.IO is used for the server implementation and Engine.IO-client is used for the client.
> Engine.IO
https://github.com/socketio/engine.io
favorites {
1 => объект1,
2 => объект2,
...
}
Чё ему по сути надо сделать?
Ему нужно поменять favorites так, чтобы это был бы как бы новый favorites, не затрагивая старый
Для этого ему надо скопировать favorites, при этом скопируется его структура, но все объекты (объект1, объект2) скопируются по ссылке, а не по значению
Затем ему надо просто отправить в setState новый пустой объект, у которого единственным атрибутом будет новый favorites
let newFavorites = Object.assign({}, this.state.favorites);
if (json.id in newFavorites) return {}; // уже есть в избранном
newFavorites[id] = json;
return { favorites: newFavorites };
Так что ли? Ну типа он свой вопрос решил не через Object.assign({}, this.state.favorites), а через {...this.state.favorites} хер знает что эффективнее и в чем разница.
Дубина, проблема опа не в этом.
И уж хранение корзины в локальном стейте компонента вместо стора - это пиздец.
(Да и в целом setState вместо управления состоянием - это 90% шансов на пиздец)
Успел за час погуглить про хелперные функции, а если бы не я - так бы и страдал бы дальше spreadhell'ами.
>(Да и в целом setState вместо управления состоянием - это 90% шансов на пиздец)
setState это вообще архаизм, нормальные люди хуки юзают.
>Дубина, проблема опа не в этом.
Одна из проблем.. Скорее всего человек не знает про коллбэки, его функция вызывается на месте, пускай и возвращает объект(надеюсь ты знаешь, что функции в жс - это объекты первого класса.) Это может привести к ОЧЕНЬ неожиданным результатам.
Это да, это точно. Надо рассказать про коллбеки, про хуки, пять раз подряд обосраться в примерах и так и не ответить на изначальный вопрос.
Так ты, дубина, тоже какой невнимательный, оказывается.
Я спрашивал, знаешь ли ты способы эффективно изменить глубоко вложенное свойство объекта без мутации. Оператор "..."(spread) не панацея, т.к глубоко вложенные свойства менять с ним жутко неудобно. Как вариант - это решается иммутабельными библиотеками, типа immutable.js или же хелперными функциями, типа immer(ты привел assocPath, это тоже как вариант, с рамдой я особо не работал зато достаточно повозился с rxjs
Можно и свою рекурсивную реализацию для этого написать, делается это не сложно.
>Так ты, дубина, тоже какой невнимательный, оказывается
Дубина, я эту твою ветку просто прогнорировал, как бесполезную.
Что толку беседовать о сложных вещах с человеком, который в трёх строчках кода опа заблудился.
Ок, смотри ты не обосрись, когда я попрошу на маркерной доске у тебя написать реализацию AVL дерева)
В ФП иммутабельность повсеместно используется)
Прости дорогой, я понимаю, что ты сейчас протянешь разговор в дебри подробностей, чтобы забыть о том, как ты обосрался на тривиальном примере.
Не делай этого. Это анонимная доска. Уходи, переживи это унижение и возвращайся завтра - все будет хорошо. Не надо самого себя закапывать все глубже и глубже. Теория без опыта мертва, и ты это только что показал
Randa точно сложнее, чем ms с isArray, а от них уже зарево стоит.
А уж оператор if так вообще с бородой
Хех, ну, как говорится вчужом глазу соломину видеть, в своём — бревна не замечать. Пошёл-ка ты нахуй, токсичный мудак. Пытался быть вежливым с тобой, но ты неисправимая мразь.
Ахаха, да я могу любой код написать - если ты в трёх строчках запутался, то уж реализацию дерева точно не поймешь.
Для дошколят, которые умножение не знают, квадратные уравнения сложные.
Для макак, не могущих в доки на setState, обсуждение иммутабельности будет сложным, потому что базовые когнитивные способности отсутствуют.
Ты не вежливым пытался быть, а тупо поддеть. Ключевое слово - тупо.
Так получай говна за шиворот.
Недостаточно смузи :(
я тоже изучаю реакт, я читал про коллбэки, но я не совсем понимаю >>его функция вызывается на месте.
А где она должа вызываться, видимо я не совсем хорошо освоил эту тему. Или напиши код, как оно должно быть.
В голос. Хотя чего удивляться, если у жопоскриптеров однострочные библиотеки - самые популярные.
>этот энтерпрайз господин, который вынужден разгребать дерьмо из других репозиториев, для того чтобы везде была одна версия
В голос.
Он долбоеб и накручивает дерьмо на вал, вместо того чтобы каждому объекту дать булевое свойство isFavourite и уже работать с ним, а не плодить копии объектов.
Ты что-то имеешь против гугловой монорепы?
> плодить копии объектов
Ты серьезно думаешь, что
favourites[film.id] = film
создаст копию объекта?
Я думаю дело тут не в копировании, которого конечно нет.
А в том что, например, чтобы отобразить в интерфейсе звездочку у избранного фильма. Ему нужен обработчик из родительского компонента, который имеет инфу о юзере. Типа я рендерю компонент отображения фильма и мне надо решить показывать div с картинкой звезочкой или нет. А как? Надо проверить нет ли моего id у юзера в ищбранном. Получается зависимость.
Или это норм?
Еще вчера выяснили что Object.assign создает копии не объектов, а структуры объектов. Ты осторожней выражайся :3 А то щас тебя растерзает иммутабельщик
А потом весь это бордель масштабируется на много коллекций (избранное, хочу посмотреть, рекомендации и прочее) и модель фильма засирается 1001 флагом? Спасибо, Шахерезада, такие сказки нам не нужны.
Да похуй мне, что вы там макаки выяснили. У тебя в сам метод новый объект передаётся, новый или старый в который копируются собственные свойства другого объекта. В методе выше именно создаётся новый объект Object.assign({} - вот в этом месте.
Дубина, дескриптор фильма никогда не попадает в object.assign, только объект состояния.
Да я уже понял, что нет смысла разговаривать с жопаскрипт макакой, для которой работа с памятью это что-то магическое, что само собой происходит и о чём можно не беспокоиться.
Слушай, ты, прыщ на жопе мироздания... ты ведь захотел сохранить хорошую мину при плохой игре, правда? Или правда не понимаешь, что объект состояния должен пересоздаваться при каждом обновлении чтобы кишочки React и всякие shouldUpdate нормально работали, а вот объекты, на которые он ссылается - нет?
Я понимаю, что пытаюсь разговаривать с макакой, которая прочитала документацию к реакту, думает, что всё поняла и теперь возомнила себя сеньором с 20-ти летним опытом, который пилит свой мувисёрчер, лол.
No U
По-моему он с этим не спорит и вообще не про это говорит.
Смотри.
Анон >>70543 пишет:
> а не плодить копии объектов
то есть он либо думает, что тот код создает копию фильма, либо он просто не правильно выразился
Другой анон >>70555 уточнил у него:
> Ты серьезно думаешь, что favourites[film.id] = film создаст копию объекта?
На что анон >>70560 отвечает:
> Object.assign создаст
то есть говорит, что не этот код (favourites[film.id] = film) создаст новый объект фильма, а Object.assign
Чувствуется что после этого Другой анон уже начинает закипать, потому что новый-то объект он создаст, но не фильма
А я такой пишу >>70565
> Object.assign создает копии не объектов, а структуры объектов
Но это не так, поэтому иммутабельщику стало ещё хуже и
он уже начинает орать >>70572
> Да похуй мне, что вы там макаки выяснили. В методе выше именно создаётся новый объект Object.assign({} - вот в этом месте
И тут ты такой выходишь >>70577
> Дубина, дескриптор фильма никогда не попадает в object.assign, только объект состояния
Иммутабельщик уже совсем ахуевает >>70581 и пишет
> Какой нахуй дескриптор фильма, ты можешь на человеческом разговаривать, макака, я тебя не понимают.
По-моему он с этим не спорит и вообще не про это говорит.
Смотри.
Анон >>70543 пишет:
> а не плодить копии объектов
то есть он либо думает, что тот код создает копию фильма, либо он просто не правильно выразился
Другой анон >>70555 уточнил у него:
> Ты серьезно думаешь, что favourites[film.id] = film создаст копию объекта?
На что анон >>70560 отвечает:
> Object.assign создаст
то есть говорит, что не этот код (favourites[film.id] = film) создаст новый объект фильма, а Object.assign
Чувствуется что после этого Другой анон уже начинает закипать, потому что новый-то объект он создаст, но не фильма
А я такой пишу >>70565
> Object.assign создает копии не объектов, а структуры объектов
Но это не так, поэтому иммутабельщику стало ещё хуже и
он уже начинает орать >>70572
> Да похуй мне, что вы там макаки выяснили. В методе выше именно создаётся новый объект Object.assign({} - вот в этом месте
И тут ты такой выходишь >>70577
> Дубина, дескриптор фильма никогда не попадает в object.assign, только объект состояния
Иммутабельщик уже совсем ахуевает >>70581 и пишет
> Какой нахуй дескриптор фильма, ты можешь на человеческом разговаривать, макака, я тебя не понимают.
>По-моему он с этим не спорит и вообще не про это говорит
Да тут целая мыльная опера, и хрен поймешь, за красных он, или за белых.
В коде выше по телу вообще копий обьектов не создавалось, кроме самого объекта стейта. Я не знаю, с чего у него приступ байтоебства.
И кто такой иммутабельщик?
При чём здесь твой фильм, хуесосина тупорылая. У тебя в метод Object.assign передаётся объект, который в этом же месте и создаётся, замени {} на new Object() чтобы тебе понятней было. Если ты 200 раз вызовешь метод, то у тебя создастся 200 таких объектов в куче.
О великий прыщ-на-жопе, просвети же нас, как без создания нового объекта создавать новое состояние для Реакта.
inb4: хуячить изменения напрямую в стейт - до такого еще тред не докатился.
Да я с этим не спорю.
Просто изначально анон писал о фильме. А потом всё скатилось в выяснение того, что же делает Object.assign, но что он делает ты и раньше уже объяснял.
>> inb4: хуячить изменения напрямую в стейт - до такого еще тред не докатился.
> хуячить изменения напрямую в стейт
Деграданты. Кругом одни деграданты.
Бля, браток, иди во вью тред
Сап, как дела в фронтенде продакшене с версткой?
Насколько много вам приходится верстать, отрываясь от функциональщины и штамповки редюсеров?
Я вайтишник, делаю заказ для манки-бизнеса, и пиздос как от верстки трясёт, мозг вытекает от монотонности
>Насколько много вам приходится верстать, отрываясь от функциональщины и штамповки редюсеров?
Очень часто.
>пиздос как от верстки трясёт, мозг вытекает от монотонности
Потому что ты не умеешь верстать и вёрстка часто приносит когнитивные диссонансы, т.к. интуитивно не всегда работает так, как задумывалось. Как научишься - "трясьти" не будет.
>Потому что ты не умеешь верстать и вёрстка часто приносит когнитивные диссонансы, т.к. интуитивно не всегда работает так, как задумывалось. Как научишься - "трясьти" не будет.
И как же научиться? Тупа хуячишь интуитивно, спотыкаясь на ошибки и правя их?
Ну не совсём. Если чисто интуитивно - ничего не усвоишь и постоянно будешь натыкаться на одни и те же грабли. Вёрстка - не такая уж и тривиальщина, как многие думают, иначе бы никто от неё не "трясся". Хуярь с умом. Вот ты знаешь например, как по дефолту работает расчета ширины и высоты элемента? Умеешь переопределять это поведение?
>Хуярь с умом.
Хз, курсы что ли пройти какие
>Вот ты знаешь например, как по дефолту работает расчета ширины и высоты элемента? Умеешь переопределять это поведение?
Только знаю, что на 100% расстягивается и всё
Ахуенно давать советы, когда сам им не следуешь, но я всё же дам, вдруг я долбоеб не следую, а ты последуешь.
Не просто нужно курсы проходить, а нужно всё время их проходить, чтобы всё время учиться чем-то новому, иначе ты как специалист сначала отстанешь от жизни, а потом будешь никому не нужным, как я. Мне вот больше нравилось играть в вов, вместо того чтобы изучать новое по профессии. А хули? И так ведь платят. Ну да, седня платят, а завтра? А через год?
Да, но когда-нибудь перестанут и что тогда? И будет как в басне Крылова про муравья и стрекозу.
Он нам нахой не нужен, тред ваш.
что конкретно? этот инфобизнесмен еще хуже чем хтмл академи
никакой структурированности, одни ролики вы стиле "как сверстать шаблон за 1000500 долларов в наносекунду"
мож он и гений, но обуччающего контента у него нихуя нет. Одни "мотивационные" ролики.
Сколько тут не спрашивал, тут все срутся на тему реакта.
А меж тем в большинстве вакансий препроцессоры цсс3 хтмл5 идут первой строчкой и в первую очередь
Так как же поднять эти скиллы?
Гайдлайн хороший есть?
собесы
>А меж тем в большинстве вакансий препроцессоры цсс3 хтмл5 идут первой строчкой и в первую очередь
>Так как же поднять эти скиллы?
Cейм, верстал всякую хуету, но по макету не вывожу сильно, расхождения, про пиксель перфект ваще молчу.
Реквестирую гайды, как можно улучшить верстку
Функция Y возвращает результат функции которая принимает в аргумент саму себя. Результат этой внутренней функции будет результат вызова функции аргумента f которая принимает фукнцию которая возвращает вызов первой функции которая принимает сама себя.
Вообщем это функция которая принимает функцию, и в этой функции можно вызвать функцию аргумент чтобы вызывать эту фнукцию еще раз. Получается рекурсивный вызов функции аргумента.
Получаешь таки урл сначала, а потом по нему создаешь изображение. Хз как там правильно. Точно можно получить сорс через canvas, возможно как-то можно получить и без него.
попробуй html2canvas
Комбинация ООП и системы типов и синтаксиса в яве просто фантастически уебищна. Учить ООП надо, но практики явы тащить не надо.
Что ты подразумеваешь под учить ООП? Ты в любом случае на жс будешь затрагивать элементы ООП даже не задумываясь над этим.
Если очень сильно постараться, ты можешь все написать функционально или процедурно. Но это надо очень сильно постараться и знать довольно много теории.
Ёп вашу мать, перешёл по ссылке в оп пике, обосрался, у меня наушники сняты были, пол офиса бы ахуело
Пишу по фану бота в дискорде. Прикрутил напоминалку через setTimeout(), всё было заебись.
Но решил я сделоть ещё и забывалку, чтобы можно было отменить задачу.
Прикрутил глобал переменную, которой присваиваю setTimeout(), чтобы иметь возможность отменить через clearTimeout(timer) из другой функции.
Ну и ясное дело, чем всё закончилось - теперь у бота только одна ячейка памяти под напоминалку, которую может стереть любой юзер.
Как сделоть так, чтобы для каждого юзера была своя напоминалка? Я вот щас думаю как такое запилить, и нихуя в голову не идет.
Бот на node.js + diiscord.js, мб у кого был опыт/подскажет чё.
кажется мне надо заебурить массив из парных элементов, один из которых - ник, а вторая - напоминалка
короче заебенил я let timer = {},
получаю ник и ебошу в timer[author] = setTimeout()
Теперь у меня персональные напоминалки, что кру
К примеру с помощью модуля http.request(options[, callback]) или
http.get(url[, options][, callback]).
Тоесть я получаю из этих методов объект типа stream, который потоком льет мне разные данные.
И текст, и бинарные данные(картинки и прочее). Где почитать - а как парсить этот поток? как определить тип данны? Как определить допустим начало и конец бинарного файла в потоке?
Прошу инфы и сурс по этому вопросу.
> Что ты подразумеваешь под учить ООП?
Паттерны, в первую очередь
>Ты в любом случае на жс будешь затрагивать элементы ООП даже не задумываясь над этим.
Например? Прототипы это понятно, но что ещё? Классы в реакте далеко не ООП, энивей.
> Если очень сильно постараться, ты можешь все написать функционально или процедурно. Но это надо очень сильно постараться и знать довольно много теории.
Просто я не представляю, как в реакте можно использовать ООП, особенно если ты пишешь на хуках.
Концепция объектов в рамках ООП теории появилась. Это его элемент. Без объектов сейчас разве-что что-то низкоуровневое на С пишут.
Это не так. И даже если бы это было так, то все равно использовать объекты в коде != использовать ООП. Объект -- просто структура данных, ООП -- парадигма.
Разницы особой не будет, потому что это Node.js. Для теоретических основ тебе нужно что-то более низкоуровневое, например, C++ или, на крайний случай, C#.
Но сheerio когда сдирает данные с другого сайта - получает солянку из текста и бинарников всяких.
Эта солянка льется на сервер потоком - как то же этот поток парсится, сheerio понимает что - это картинка, это текст, это ну допустим гифка. Определяет MIME типы как то и прочее - прочее.
Вот эту тему хотелось бы для себя развернуть.
Тебе с ответом от сервера приходит заголовок Content-Type с указанием типа данных. Также и с типом кодировки, например, content-encoding: gzip И со всем другим тоже самое. Для этого и придумали протоколы, чтобы не нужно было гадать что и откуда ты принимаешь, и как с этими данными работать.
Есть у кого-нибудь пример open source PWA приложения, чтобы нормально работало на десктопе, андроиде и ебать его в рот IOS?
Хорошие примеры PWA без исходников подойдут тожe - нужно хотябы оценить, что оно на данный момент умеет.
Планирую набросать кое-какой сервис, для начала, чтобы прощупать спрос и получить фидбек - поэтому нецелесообразно разрабатывать под нэйтив.
Двач, помоги вкатиться в JS
Дошел до методов массивов на learn.javascript.ru ( https://learn.javascript.ru/array-methods ) и Я НЕ ПОНИМАЮ find и findIndex.
Как работает этот пример?
let users = [
{id: 1, name: "Вася"},
{id: 2, name: "Петя"},
{id: 3, name: "Маша"}
];
let user = users.find(item => item.id == 1); // Что это за стрелочка???
alert(user.name); // Вася
Ну хоть скажите, что это за стрелочка let user = users.find(item => item.id == 1);
return
Тогда уж так
const condition = (item) => {
return item.id === 1;
};
let user = users.find(condition);
Лучше сравнивать строго, т.е. с учетом типа, не огребешь в ошибках приведения типов
Долбоебы замедляют свою жопаскрипт парашу при любой возможности, вот почему.
Не будет, потому что ты везде написал parseInt и parseFloat
Это как завести и прогреть какой-нибудь ВАЗ, после чего засечь время и замерить за сколько она до 100 км/ч разгонится, а потом сравнивать это время с разгоном до 100 км феррари, при этом запуская таймер до того как она из гаража выедет.
чего еще придумаешь?
Охуительные истории.
>сайт номер 1 для поиска работы
>не может определить Javascript как запрос относящийся к программированию
Вся суть IT индустрии. Ну ничего, зато аджайл практики внедряем, проводим митинги, тимбилдинги и прочую хуету.
Ок.
О чём тут в поддержку писать? Кем-то разве было заявлено, что подсказки в поиске выдаются соответственно вакансиям? Нет, они выдаются просто дополняя введённый запрос популярными словами.
Бабуль, ты чего тут забыла? Тех. поддержка и разработчики это не одни и тоже. Тех. поддержке похуй на разрабов, а разрабам на тех. поддержку, никто и пальцем не пошевелит ради того чтобы исправить такую "мелочь".
>кем-то разве было заявлено
Да, было. Автодополнение подразумевает дополнение релевантной информацией, а не случайной.
А они то не знают
> это не одни и тоже
Конечно нет. "Клиенты" обращаются к техподдержке, а техподдержка уже обращается к разрабам. Напрямую написать разрабам никто не даст. Вообще, разрабы - это следующая линия поддержки
> Тех. поддержке похуй на разрабов, а разрабам на тех. поддержку
Если это какой-нибудь ООО Вектор, то да. Но не здесь.
А что сео? Гугл тоже не на месте сидит и тоже научился запускать скрипты, а не тупо бегать по статической странице в поиске кейвродов.
SSR, от части, да, нужен для того, чтобы покравать seo (генерация html на стороне сервера), но и так же у SSR есть куда других полезных свойств, о которых многие почему-то умалчивают.
Самый простой и примитивный пример - это first-meaningful-paint, т.е. клиенту не нужно самому в браузере "рендерить / раскрывать" html, т.к. он уже полностью отдался с backend'a => отображение первых элементов будет на порядки быстрее, нежели чем в only client mode.
Динамическая подгрузка бандлов и куча всяких других плюшек, о которых я даже и не буду упоминать.
Ииииии т.д.
chunk files*
Да нихуя не доделываю до конца, пара незаконченных, но они почти готовы. Обычно когда нужно что-то сделать, например ajax, я начинаю зарываться в тему целиком, хотя все давно через axios сделано порой строчек кода, но меня не отпускает, пока я не исследую все до конца. В каждой теме нахожу отсылки к другим, и начинаю дрочить их, забывая о проектах.
забей на ванильный жс, сделай какой нибудь мувисерчер\туду на реакте и иди работать
>накомый пару лет назад устроился на работу после курса юдеми
Вот это самая главная ошибка вкатывальщиков - смотрят на прошлы опыт своих друзей. Ключевое слово в твоей фразе "пару лет назад". Да, пару лет назад какого-нибудь паршивого курса было достаточно, сейчас от тебя нужны не только идеальные знания ванильного JS, но еще и React + Redux, а также MongoDB.
А что ты хочешь? Я сделал туду, написал резюме и пошел работать, мне не понять желание анонов выучить все кишки языка и вкатываться по полтора года
анончики, поясните как лучше и вообще как можно сделать. Каждые 5 секунд с api мне приходят данные. Мне нужно посчитать разницу между предыдущим числом, которое пришло 5 секунд назад, и тем, которое пришло сейчас. Как это сделать? Есть мысли, что тут как-то надо использовать замыкания, но пока хз как. Реакт если что!
>Как сделоть так, чтобы для каждого юзера была своя напоминалка? Я вот щас думаю как такое запилить, и нихуя в голову не идет.
>
Храни переменную в localStorage
Монго-то нахуя?
Съеби на тостер, а лучше вскройся
Хз, тебе виднее, у меня с 70к зп началась
Лучше, чем вкатываться несколько лет
Ебать я прозрел
и нужно ли оно так сильно?
смотрю курсы академии, а там больше части вода про доступность, нарезку фотографий в фотошопе резиновая хуиновая верстка, или может все же туду проекта на реакте будет достаточно?
без задней мысли
Как можно не знать верстку, это же супер легко. Те кто пишут на JS обязательно должны знать как работает верстка. ОБЯЗАТЕЛЬНО СУКА.
> это же супер легко
вот и посоветуй как прокачать скилл верстки.
я не говорю что я совсем ее не знаю, но иногда выбешивают блочные модели и картинки просто пиздец.
> Pixel perfect
> Одни свойства наследуется, другие почему-то нет. Хуй знает.
> Из-за одного пикселя всё поехало
> Сука, почему не работает width
> На мобилках текст отображается по одному слову в строке
Ну да, легко.
>Pixel perfect
Легко.
>Одни свойства наследуется, другие почему-то нет. Хуй знает.
Осознай каскад.
>Из-за одного пикселя всё поехало
Осознай box-sizing, влияние внешних и внутренних отступов
>Сука, почему не работает width
Потому что прочитай спеку, ты высоту то задал?
>На мобилках текст отображается по одному слову в строке
Осознай адаптивную/отзывчивую вёрстку
Легко в том плане, что это легко осознать, т.к. это интуитивно понятно, если начать разбираться.
Ну да, привык и ты привыкнешь. И чем больше в твоих действиях будет осознанности - тем быстрее привыкнешь и ты.
>>73702
Вообще не нужно, если не пишешь под юй, не придумывай.
Нахрен прогеру в 20м верстка, если давно для повышения специализации придумали всякие фреймворки с онлайн конструкторами?
Все затухает, потому что это вопрос такой же примитивный, как и "как нормально вытирать жопу" - так же, как и нормально что угодно другое, трахаясь с ней версткой изо дня в день часами, желательно на вечнотекущих проектах.
нихуя не интуитивно. Спеку читать слишком дохуя страниц.
охуиллионы страниц. Из-за ебаной верстки, которая должна быть простой поидее. Но она сложная
Ну значит для тебя всё будет сложное. Займись более простым делом, уступи дорогу более смышлённым ребятам.
Уже все попробовал и программно посылаю клавишу f, и посылаю все возможным айдишника от movie_player до player-container реквест на Фулл скрин. Но ютуб упорно не хочет этого делать
Что за хуйня? Почему он не хочет разворачиваться. Что это дерьмо вообще означает?
>В запросе полноэкранного режима было отказано, так как Element.requestFullscreen() не был вызван изнутри короткоживущего обработчика события, сгенерированного пользователем.
Хех, ебать ты лошпек) Как там в 2018? Думал, что реакт выучил и всё? Хуй там плавал, надо ещё выучить редукс, контекст, аполло, рекомпоуз, саги, санки для сайд-эффектов, хелмет, дропзоун, спринг, дауншифт, фаербейс. Это уже не говоря о классике типа иммер, имьютбл и рамда.
>рекомпоуз
Алло, как там в 2020?) это же уже полтора года как неактуально. Сейчас бы хуки не знать, в 2к20 то, ну ты и отсталый конечно...
В общем мне в голову пришла такая мысль, что функция на пик2 должна перезаписать переменную "а" собственной самой функцией, и в таком случае код бы сломался, т.к. в аргументе функции по моей ебанутой логике будет сама функция, и такой код зациклится и выдаст ошибку или типа того.
Но код работает, и нет никаких ошибок.
Почему "a = someFunction ( a );" продолжает держать значение "2" когда я вроде бы как перезаписал эту переменную функцией?
Я какой-то хуйни нагородил у себя в голове, и теперь не могу от этой мысли отвязаться, спаси анончик.
Ебанутый нахуй тебе это надо?
Лучшее бы ноду поставил и начал пилить свой первый мувисерчер.
А так только время зря потеряешь.
В строчке со стрелкой ты не переписал "a", а просто присвоил ей результат функции "someFunction". Что собственно хотел, то и получил
Если хочешь
>Перезаписать переменную "а" собственной самой функцией
То убери скобки в конце "someFunction"
async/await не завезли?
зачем городить сложные асинхронные флоу? может быть это проблемы архитектуры приложения?
>async/await не завезли?
Завезли, но в сагах много полезной обвязки и они более мощные. Например, их можно стопнуть, в отличие от промисов.
>зачем городить сложные асинхронные флоу? может быть это проблемы архитектуры приложения?
Ну блять, бизнес-логика сложная. Не все же пишут круды с двумя запросами на приложение.
>их можно стопнуть, в отличие от промисов
сомнительно async тоже можно стопнуть, но ладно
>бизнес-логика сложная
декомпозиция?
Видел. Я их у себя на проектах использую, когда саги пишу. В ФП языках это вообще повсеместно используется. Она даёт ленивость. Генератор это же по-сути корутина.
Что? Это частный случай корутин же.
Js для меня намного проще
Вот в ЖС есть Область видимости, лексическое окружение, скоуп, [[Scope]], внешние лексическое окружение. Можно сказать, что:
Область видимости = Лексическое окружение = Scope,
[[Scope]] - просто свойство объекта, которое хранит информацию о лексическом окружении и ссылается на глобальное лексическое окружение
Двачую, у самого такая-же проблема. Я так понял, нужно накатывать вебпак, чтобы он потом все эти модули вместе собрал.
Ну нигде ничего об этом не говориться, абсолютно. Они просто пишут export/import и всё работает.
>>74207
>>74223
Встретились два одиночества.
1) Нативно импорты/Экспорты работают только если подключить входной скрипт указав type="module"
2) Свои поделия надо не из файловой системы открывать, а поднимать серверочек для них, хотя бы php -S localhost:80, о чём он тебе и пишет - протокол file:// не даёт делать кросс-доменные запросы, потому что ДОМЕНА И НЕТ НИКАКОГО.
>Ну нигде ничего об этом не говориться
Это само собой разумеется в 2020 году. Может, тебе ещё объяснять как ИДЕ поставить или как компьютер включать?
Спасибо, что объяснил.
>не из файловой системы открывать, а поднимать серверочек для них
CORS то флагами можно обойти, но там потом ещё много говна, например для модулей в ответе должен быть корректный mime тип. Подозреваю что твой однострочник на php не будет с этим заморачиваться тоже.
В вебшторме есть встроенный сервачок или можно что-то типа http-server из npm взять
>Подозреваю что твой однострочник на php не будет с этим заморачиваться тоже
Сложно проверить?
curl -i localhost:8080/test.js
HTTP/1.1 200 OK
Host: localhost:8080
Connection: close
Content-Type: application/javascript
Щас бы флаги на целый браузер вешать ради того, чтобы обойти то, что не нужно обходить. Зачем специально стараться, чтобы сделать не по-человечески?
>однострочник на php не будет с этим заморачиваться тоже.
Всё будет работать как надо, никаких маймов не нужно
похоже на то, что у тебя отключен вывод в консоль, в правом уголке есть панелечка, там Лог, вот кликни на него чтобы завелось.
А что сам посоветуешь лучше? Вебпак или бабел? Я слышал вроде что вебпак, это что-то более свежее.
Они нужны совсем для разного
Сос мыслом
Двач, как полюционировать эволюционировать с чувачка, пишущего код с первого пика, в чувачка, пишущего код со второго?
>Прочитать про методы массивов да стать
Почитал на learn.javascript.ru и написал первый пик по первой задачке, а в ответах был второй пик. Я глупый?
Вряд ли это к глупости имеет отношение. Просто два разных подхода. Первый быстрее, но читается хуёво, второй медленее и понятнее, хотя и мутки мутные есть с тернаркой, мельтешит.
Хочешь реально тупым себя почувстсовать? Сходи на codewars и после того как решишь очередную задачу - посмотри на чужие решения из разряда most clever, вот там у тебя самооценка-то и упадёт
Зочем?
Это палка о двух концах. Я так на коудворс задачки решал, а потом кукухой поехал и начал ЛЮБЫЕ решения пытаться уместить в одну строчку с помощью кучей методов, мапов/редьюсов с абсолютно жуткими колбеками етц.
Не делай так.
Проблема первого пика не в том, что он не использует методы массива, а в хуевом именовании переменных. (если закрыть глаза на лишнее arr[key].length)
Замени arr на words и key на index — сразу станет понятно.
Объективно лучше тот, который соответствует кодстайлу, принятому на конкретном проекте.
Тебе во время отказа скажут, что добавили тебя в базу, и если им понадобится твоя кандидатура, то они тебе дадут знать. Если ты через месяц опять долбиться к ним будешь, то тебя просто в чс кинут как неадеквата.
> что добавили тебя в базу, и если им понадобится твоя кандидатура, то они тебе дадут знать.
А они как-то мониторить будут, как я развиваюсь разве?
Зависит от конторы. Если после собеса тебе говорят, что перезвонят через неделю -- забей хуй, контора говно. Если получил фитбек, узнай, можно ли попробовать ещё раз в идеале, тебе это скажут сами.
мимо устроился в датку с третьего раза
кому ты сдался, мониторить тебя)
если ты не прошел собес - получай недостающие знания и иди опять на собесы
Мы все сейчас наблюдаем как ты их получаешь. Если бы тебе не хватало знаний, которые можно получить за месяц, то тебя бы взяли на исптытательный, но нет, тебе указали на дверь, значит за месяц эти знания не получаются.
3 года опыта в чистом си. так уж и вышло - попытался в си++ провалилась, да и не нужно стало Игрался много с чем. Тесты на ноду кстати проходил - выходит в районе 50-70, не ниже. Сегодня прочитал про React на хабре - вроде начал понимать синтаксис и предназначение, но не уверен что этого хватит до собеседования. Вообще в принципе не знаю как быть увереным в том, что знаний достаточно. В самой ноде ничего сложного нет, если сравнить одно "многоуровневые и константные указатели и идеей разницы между константными указателями и указателями на константу" - в свое время у меня мозги взрывались. Но с понятием асинхронности после чистого си мне таки пришлось попотеть, да.
Зачем раст? Конкретно в моем мухосранске вакансии есть только по плюсам, из которого мне только векторы и классы известны. Но на ноду хоть отбавляй хуева туча.
Ну с твоим опытом плюсы тебе легче выучить будет, в долгосрочной перспективе это более перспективно, кмк.
Работать на плюсах будет сложнее в разы и ответственности больше, но в основном ЗП мало отличается от ЗП в веб-разработке, но опять же - лично там, где я планирую работать. Но я слышал, что в ДС та же история. Остается только в других странах искать.
А, так ты простой путь ищешь. Ну тогда ты зашёл туда, куда нужно.
Ну у тебя глуповатый вопрос, это же всё субъективно и зависит от многих факторов. Изучить реакт не сложно, в нем нет ничего сложного.
Если ты после трёх лет C, не осилил С++, значит React ты точно не осилишь, потому что это сразу ООП и функциональщина, а C это процедурная хуйня для дегенератов.
>Если ты после трёх лет C, не осилил С++
ООП-то я осилил. Но знаешь, если понаблюдаешь за холиваром С++ программистов, ты начинаешь понимать, что ООП - это лишь мелкая часть того, что надо знать С++ кодеру, ну и еще понимаешь, что нихуя не знаешь, а попытка узнать больше - будет стоить нескольку лет, и нет гарантий, что ЗП будет выше от ЗП обычной макаки.
Датаарт
Надо не за холиварами наблюдать, а язык учить. Как ты свои 3 года C описать можешь? 1.5 года писал пет-проект уровня тудулиста, остальные 1.5 наблюдал за холиварами?
Потому что какой-то ты слабенький для трёхлетнего сишника. Если у тебя асинхронность вызвала сложности, то значит ты не использовал многопоточность. Почему?
>. Если у тебя асинхронность вызвала сложности, то значит ты не использовал многопоточность. Почему?
Потому что не было идей для софта, которая нуждалась бы многопоточности. Я в основном писал модификации для видеоигр, где все строится на хуках и патчах, ну и еще всяких ботов. Лишь однажды правда мне пришлось еще один поток завести в точке входа дллки, но это мелочь на уровне использования _beginthread - все остальное на хуках и патчах и обмазыванию асмой.
>Потому что какой-то ты слабенький для трёхлетнего сишника
Как определяешь? По личному опыту после освоения указателей и подводных работой с памятью вся сложность сишки в том, что приходится дохуя писать и ебаться опять же с той памятью, и отлаживать по сотню раз в час. Никакой корреляции с плюсами уже давно нет. Плюсы это другой мир, и максимум что ты возьмешь с сишки для удобного изучения плюсов - это синтаксис, и то плюсы уже превращаются в какое-то смешанное говно.
>остальные 1.5 наблюдал за холиварами?
Одного раза хватило в телеграм чатике по плюсам. Потом понял, что делать мне там нехуй. Тут даже не за холиварами наблюдать надо, а просто вчитаться в то, что они обсуждают.
>Потом понял, что делать мне там нехуй.
Лол, тогда тебе к яваскрипту даже близко подходить не стоит.
Ну смотри. С++ это тот же JS, только там ты всё видишь и контролируешь, он логичен, а в JS половину ты не видишь, половина делается за тебя, при этом он в некоторых местах максимально не логичен и большую часть времени тебе нужно будет работать с объектами, которые ты не осилил.
Это как с основ кидаться сразу к чему-то более высокому, понятно, что если ты основы не осилил, то JS тебя только запутает.
Тогда уж C#
дайте ссылку или как найти подскажите
Первый пик - задачка с learn.javascript.ru
Второй - мое решение
Третий - решение из ответов
Чему автор учебника выбрал такое решение, а не как у меня?
В чем мое решение хуже?
С твоим решением вроде как проблем нет, просто с точки зрения теста ты все упростил. Итерацию пропустил, поиск значения пропустил. Если понимаешь пример из ответов, то проблем нет. Он просто сделан более самостоятельнее, что ли.
И мне кажется пример с циклом какой-то грязный, при каждой итерации объявляется переменная, это по определению грязно - по крайней мере в СИ точно было бы. Зачем, если можно определить переменную перед ентрипонтом цикла, и затем просто переустанавливать значение на нужное?
У автора понятно расписанное решение, которое может понять даже начинающий, а у тебя душня только ради того, чтобы всё в одну строчку спихнуть.
Разве безопасно идти по массиву и одновременно менять его? На сколько я знаю в пхп за такое убивают. Я не прав?
Прав, за такое везде убивают.
Нет, это задача из главы, где он и объясняется
https://learn.javascript.ru/array-methods
>>74750
Ну так в главе же map() проходится, вот я его и использовал
А что не так? Какие подводные?
Сорта вкусов.
Я б
const newArray = arr.filter((item) => !(item >= a && item <= b)); arr.splice(0, arr.length, ...newArray);
Разе map не очевиднее?
Сразу понятно, что дальше будет выполняться что-то для каждого элемента массива, а как цикл работает, нужно думать, а потом еще думать, что в этом цикле делается
forEach ещё ладно бы, но map точно только запутывает.
>Я б
>const newArray = arr.filter((item) => !(item >= a && item <= b)); arr.splice(0, arr.length, ...newArray);
Спасибо, анончик, я даже о таком не подумал.
А чему нежелательно идти по массиву и одновременно его менять?
Большая вероятность нарваться на ошибки, особенно когда одни элементы логически зависят от других. Сами элементы в массиве изменять нормально, но не массив.
Мысли у всех разные, а задача тривиальна и решения могут быть какие угодно.
Хоть так можно
const f = (arr, a,b) => {
arr.forEach((item, index) => !(item >= a && item <= b) && arr.splice(index, 1))
}
Это не я, я мимокрок.
Потому что у тебя одностроковая хуйня, а не решение. При этом всё это делается еще проще:
function filterRangeInPlace(arr, a, b) {
return arr.filter(value => value > a && value < b);
}
>inPlace
Жопой читаешь? Это не изменит исходный массив и вернет новый массив, а такого поведения быть не должно + у тебя даже сама задача решена не верно
В основном из-за внезапных подводных камней для алгоритма:
Во-первых, можно поменять элементы которые впереди и твой алгоритм охуеет когда дойдёт до них или внезапно для себя вылетит за пределы массива. Здесь тот случай, но тем не менее.
А при итерации по индексам индекс придётся корректировать если наоборот удаляются элементы позади, i-- например в белом куске кода.
Ещё компиляторам/интерпретаторам от такого хуёво, наверняка многие оптимизации идут по пизде.
Это изменит область памяти на которую указывает переменная arr, но не содержимое этой памяти.
В моем случае почему-то ничего не меняется
>Это изменит область памяти на которую указывает переменная arr, но не содержимое этой памяти.
Почему не оставить это сборщику мусора?
>>74886
Потому что массив передаётся в функцию по ссылке, а не по значению. Т. е. у тебя внутри массива arr это ссылка на массив, если ты будешь работать с этой ссылкой, т. е. вызывать методы arr, т. е. изменишь тот массив на который ссылается твоя переменная arr, в случае с присваиванием, ты своей переменной, в которой была ссылка, присваиваешь массив. Очевидно, что это никак не влияет на массив на который была ссылка в этой переменной.
Достаточно в общих чертах их понимать. Реализовывать с нуля вряд ли понадобится, всё типовое уже давно написано за нас.
Охуенное ООП без наследований в 99% процентов случаев
Функциональщина в чем заключается?
Реакт охуенно простой, вебпак и бабел дольше учиться настраивать, чем с ним разбираться
Да
Спасибо
Обязательно
- Верстка (css3 + html5),
-JS (ES5 + ES6) + базово проглядеть JQuery,
- React|Vue|Angular (любой один на выбор).
- Redux \ Mobx
- Git
- Photoshop \ Sketch \ Figma базово - надергать картинки, читать размеры и т.п.
Желательно
- Уметь читать/немножко писать PHP
- Английский уровня чтения доков
- Немножко UX
- NodeJS
- консольные команды уровня ls \ cd \ rm -rf
Полный гайд туть (шапку читай, остальное не читай, проблюешься).
https://2ch.hk/wrk/res/1810392.html#1823504 (М)
Da
>Использует map? который сделан для изменения каждого члена массива, тупо для удаления по условию
>Чему автор учебника выбрал такое решение, а не как у меня?
>В чем мое решение хуже?
Ну так то можно и ложкой гвозди забивать, а так как минимум читабельностью хуже.
Оборачиваешь всю свою портянку двумя фигурными скобками и пользователь отсосет, при попытке что то вызвать
Обфускация, если что
При желании что угодно можно расковырять. Бороться с этим довольно бессмысленно.
Спасибо
Копирую его портянку. Меняю в редакторе. Блокирую загрузку этого скрипта на странице. Обновляю страницу. Вставляю отредактированную портянку.
>>75176
Можно только осложнить, но это защитит только от школьников и бабушек. Если нужно что-то скрыть и запретить использовать, то это выносят на сторону сервера.
Я слышал, ты сайты взламываешь? Сможешь взломать вк тёлки одной побратски
Как скопировать скрипт со страницы?
Мне кажется ты просто разпиздяй и нытик. Могу конечно ошибаться
Буль-буль
Да, в JS всё нормально, если рассматривать его как браузерный язык. Как язык, который позволяет за малое количество действий, получить результат. Но именно это и делает его сложным для освоения тем, кто до этого не разобрался в основах. У тебя большая часть делается за кулисами, от этого тебе может казаться что-либо не логичным, но вот если бы ты знал, что там делается за кулисами, то у тебя бы не возникало вопросов. И те, кто работал с С++, например, знают что происходит за кулисами, потому что в C++ ты это делаешь вручную и представляешь что и как работает.
>>JS всё нормально, если рассматривать его как браузерный язык
Да ты что? А я думал он одну нишу с Фортраном делит.
Дальше пурга. Шли кулисы через кулисы.
>> делает его сложным для освоения тем
Осваивать нужно не язык, а программирование.
Я про это и говорю. С JS-ом ты программирования не освоишь, нужно что-то более низкоуровневое.
Ты так это написал, как будто программирование - это про написание кода
Какой бред) в js есть все те понятия, какие есть в любом языке. Ну и понятное дело, что увлеченный человек не будет себя ограничивать одним языком
Конечно. Передача по значению и ссылке тоже есть в js?))))0)) Может быть многопоточность в js есть?))) Может быть в нём есть явное приведение типов?))) Может быть в нём есть полноценные классы и структуры?))))
>Передача по значению и ссылке тоже есть в js?))))0))
Вообще-то да.
>Может быть многопоточность в js есть?)))
https://nodejs.org/api/worker_threads.html
https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API
>Может быть в нём есть явное приведение типов?)))
https://www.typescriptlang.org
>Может быть в нём есть полноценные классы и структуры?))))
define «полноценные»
Что вообще значит «за кулисами»? У языка есть спека и он работает так, как в ней написано.
На сколько я понимаю "явное приведение типа данных", это не просто маня мантра, и "так разрабатывать удобнее!!11".
В большей мере это позволяет компилятору лучше оптимизировать код. Но это лучше знает тот тип выше, который на C пишет
>передача по значению и ссылке
Есть конечно же. Объекты по ссылке, примитивы и функции по значению
>Многопоточность
Есть. Сервис воркеры.
>Приведение типов
TS, bucklescript, reasonml, flow к твоим услугам
>структуры данных, классы
Есть, есть. Любую структуру ты можешь написать сам, в случае чего, тебя ничто не ограничивает. Так что твои кукареки необоснованные.
>Вообще-то да.
Показывай мне аналог пикрила.
Почитай чем поток отличается от процесса.
И? Зачем ты ссылку даёшь на другой язык программирования?
>define «полноценные»
Поддержка несколько конструкторов, хотя бы.
>Любую структуру ты можешь написать сам
Проиграл с жопаскрипт макаки, которая не знает чем структура отличается от класса.
Т
Р
Е
Д
Рекурсия никуда не записывается. Когда выполнение кода доходит до
numbers =
То начинается рекурсивный вызов функции до получения результата, т. е. пока endNum - startNum не будет равно 0.
Как только результат получен, стэк вызовов начинает схлопываться, т. е. последний вызов вернёт [1]
Далее выполнение кода продолжается, т. е. код, получивший [1], пойдёт дальше:
numbers.push(endNum)
endNum в предпоследнем вызове функции равен 2
В итоге ты получаешь массив [1, 2] и возвращаешь его в предыдущий код, который находится на стадии numbers =
И так по цепочке, пока самый первый вызов не получит массив [1, 2, 3, 4] и не добавит в него первоначальный endNum, т. е. 5
Понял, спасибо тебе
Так же мне не раз в треде писали, что я либо не знаком/ не пользуюсь call-back. Я не раз читал что есть call-back функции, но видимо я не ловлю какую-то важную суть. Можете придумать какое-нибудь тривиальное задание для меня, чтобы я сам себя проверил на знание call-back.
Нет, это как раз таки про удобнее. Строгая типизация нужна в первую очередь для отлова ошибок ещё на уровне написания кода а не в рантайме или при компиляции.
Современные компиляторы/интерпретаторы – чёрная магия, им уже похер что оптимизировать.
И что тебя ограничивает?
Ты напрасно ищешь лёгкий путь, его нет. Если бы можно было без долгих объяснений, все бы этим занимались.
https://www.youtube.com/watch?v=u5HAYVHsasc
хотя, может быть оверкилл... Есть нужно просто нарисовать шейдер, то какой-нибудь shader-doodle
https://www.npmjs.com/package/shader-doodle
Под эту задачу не нужно никаких фрейворков. Там же нет сцены и всего один квад. Голый webgl и много шейдерного кода.
Shadertoy ок для быстрого старта.
Апи канваса что 2д что 3д низкоуровневое и тупое, такое же как все остальные апи для рисования.
Сложность тут только в собственно программирование алгоритма анимации.
Если ты этот шар взял из какого-нибудь туториала по плюсам или шейдерам, с него и начинай, потом портируешь на канвас но нахуя тогда уже?.
Нужно же знать эти 50 строк, а зачем их знать, если можно взять готовый фреймворк? Я пробовал, получилось. Сложно, не нужно.
такой же шар ты не нарисуешь, если не найдёшь автора, и он не отдаст тебе код. Можешь нарисовать "что-то типа", если с нуля потратишь несколько десятков часов. Для простого смертного это очень сложно, нужна тригонометрия и знание glsl.
1280x720, 0:01
Незачем же.
Какой-нибудь красивый эффект который дизайнер захотел на фоне проще в видео записать.
1280x720, 0:14
...правда, шейдеры жрут видекарту, которая есть не у всех... сложно всё, короче.
903x903, 0:10
webm — в любом треде хорошо
Создай искуственный интеллект который будет делать заебись по описанию, и сможешь приобрести популярность у предпринимателей.
Я же сказал не сложно. И тем более разве на жаба скрипте можно написать искусственный интеллект?
Так до тебя все простое уже написали, для всего есть несколько версий, уже нового ничего придумать нельзя.
До чего техника дошла...
Причём это не касается хтмл/цсс - там сниппеты работают исправно.
funstion test{
var a;
var b;
var c = a + b;
////// тут что-то, что остановит выполнение пока страницы не загрузится
alert (c);
}
Спасибо
Нет в моем синкпаде видеокарты
debugger;
Бампирую вопрос. Уже перерыл все что можно все равно не пашет. Что сука характерно если себе на страницу заебенить ютубплеер, то с ним можешь делать что душе угодно, но вот с плеерами на ютубе тебе делать ничего не дают. Что за хуйня?
Ну же аноны, неужели никто здесь из вас не писал расширения для браузеров? Не верю. Учить жс и не писать расширения это же пиздец тупо.
>>76161
Тебе же руским языком браузер написал:
>В запросе полноэкранного режима было отказано, так как Element.requestFullscreen() не был вызван изнутри короткоживущего обработчика события, сгенерированного пользователем.
Не пустят тебя в полный экран без клика пользователем на кнопку.
И слава богу.
onLoad
Да сука, что же они за мудаки то такие. Какого хуя я не могу автоматизировать некоторые простые вещи. Ублюдки, блять. Реально без ручного нажатия никак?
Ну короче я наконец разобрался, оказывается это даже не вина ютуба. Просто сам ебучий FullScreen API сделан так что:
>По соображениям безопасности полноэкранный режим может быть запущен только из обработчика событий (то есть инициируется пользователем);
То есть я изи могу сделать кнопку которая вызывает фуллскрин, но автоматически его запускать ни ни. ЕБаный стыд, как же я горю.
Идет какая-то дикая (пол-секунды) задержка от микрофона, хотя цепочка там проще некуда:
navigator.getUserMedia({audio:true}, micCB);
function micCB(_in){
var mic = audioContext.createMediaStreamSource(_in);
var sp = audioContext.createScriptProcessor(256, 1, 1);
mic.connect(sp);
}
Хочешь, чтобы каждый сраный второй сайт пытался автоматом свою охуенно важную рекламу тебе в фулскрин запихнуть?
Посмотри на муделей, которым про Notifications API рассказали - 2019 год прошел под знаком "Нет, не хочу оповещений. И здесь тоже. И здесь. Заткнитесь нахуй"
Напоминаю, что эти оповещения так заебали пользователей, что все браузеры будут отключать их нахуй по умолчанию.
Ну вообще так то у расширений вроде как побольше прав чем у кода с сайтов. Хотелось бы что ими можно было фулскринить. ДА и тем более там большими буквами всегда пишется что выход из фулскрина ESC, так что ничего страшного бы не случилось.
Ну не, ничто не переплюнет "Мы что-то слышали про закон о cookies который пытались принять в одной стране на которую наш сайт даже не ориентирован, но нам надо заставить нажать вас на кнопочку потому что так делают все."
А?
"Зарегистрируйтесь, чтобы увидеть больше". Охуенно, что это обходится так же элементарно, как и запреты на копирование.
Каво?
{isLoading ? <div>Loading</div> : <UserPage>...</UserPage>}
Он сам внедряет этот прелодер и чекает, что данные зафетчены и потом уже рендерит компонент?
Судя по этой статье https://reactjs.org/docs/concurrent-mode-suspense.html#approach-3-render-as-you-fetch-using-suspense
Нет, неправильно ты понял.
>Он сам внедряет этот прелодер и чекает, что данные зафетчены и потом уже рендерит компонент?
Нет. Да и как ты себе такое представляешь?
>Нет. Да и как ты себе такое представляешь?
Я предполагал, что новый Suspense из ветки experimental, проверяет переменные в которые сохраняются данные из промисов (например запрос к API), если промисы выполнены, то рендерит компонент, а если нет, что показывает то, что указанно в fallback
Там в примере есть комментарий
// Try to read user info, although it might not have loaded yet
и в рендере нет никаких проверок на то, что данные загружены
Бамп. Серьёзная проблема, что делать? Скажите на что ориентируется вскод, когда решает, какое автодополнение показывать и показывать ли.
Настало то самое время
У меня один раз получилось так, что у меня их было два - 64 и 32х бит. Переустанавливался один из них, но запускался другой. Долго прифигивал в этом всем, пока не обнаружил это. Понятия не имею, как так могло получиться. Я ставил его один раз и потом просто обновлял время от времени.
>нажать ctrl+space
Подскажите, а в маке какая комбинация для этого? Command+space открывает спотлайт поиск
Спасибо за инфу, надеюсь меня теперь тоже не обоссут
а чем тебе не нравятся hoistащиеся functionы? Сфига ли всего на жирных стрелках писать??
Вот и выучи
перекат https://2ch.hk/pr/res/1577313.html (М)
перекат https://2ch.hk/pr/res/1577313.html (М)
перекат https://2ch.hk/pr/res/1577313.html (М)
перекат https://2ch.hk/pr/res/1577313.html (М)
перекат https://2ch.hk/pr/res/1577313.html (М)
перекат https://2ch.hk/pr/res/1577313.html (М)
перекат https://2ch.hk/pr/res/1577313.html (М)
перекат https://2ch.hk/pr/res/1577313.html (М)
перекат https://2ch.hk/pr/res/1577313.html (М)
перекат https://2ch.hk/pr/res/1577313.html (М)
Это копия, сохраненная 24 февраля 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.