Это копия, сохраненная 1 декабря 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Этот тред посвящён главному языку будущего - JavaScript. Благодаря своей гибкости используется в браузере, на серверах, в мобильных приложениях, на десктопе и практически во всех видах программирования. Удобный синтаксис позволяет легко писать на нём, а высокая производительность делает его отличным выбором для решения любых задач - от небольших магазинов до огромных highload проектов. JavaScript по праву является самым популярным в мире языком. На каждом сайте есть браузерный JavaScript, а JavaScript на сервере используется такими крупными корпорациями, как Amazon, Yahoo, HP, NASA, Walmart и многие другие.
Часто задаваемые вопросы:
https://github.com/vladimir37/js-thread/blob/master/Wiki/faq.md
Список материалов для изучения:
https://github.com/vladimir37/js-thread/blob/master/Wiki/learn.md
Список инструментов и направления JS-разработки:
https://github.com/vladimir37/js-thread/blob/master/Wiki/tools.md
Инструмент для визуализации и экспериментов со связями между объектами в JavaScript:
http://www.objectplayground.com/
Конфа /pr/ в Slack:
https://slack-2chpr.herokuapp.com/
JS-конфа в телеграме:
https://telegram.me/jsthread
НЕ КОПИРУЙ КОД ПРЯМО В ТРЕД!
Воспользуйтесь https://jsfiddle.net/ для браузерного кода и https://ideone.com/ для серверного кода.
В html подключаю draw3.js и в body-script вызываю функцию init(). В draw3.js только эта функция. Сам файл test.png - белый квадрат хуевича. Консоль лог выдает то 0, 0, 0, 0 то 255, 255, 255, 255. Вот F5 жму, рефрешу страничку и то нолики, то 255. Шозанахуй?
Скрипт запускаю на домене.
Сценарячую! Почему мы даём какому-то экспорту привилегии? Надо, чтоб было несколько дефолтов и рандомом решалось, какой импортировать. Равные возможности, яй!
Есть map, внутри него еще map. Между мапами нужно использовать функцию OnClick. В результате происходит срабатываний столько сколько позиций в первом мапе. Как сделать?
И еще, как Акардеону внутри Акардеона задать функцию при открытии?
В data попадает Uint8ClampedArray
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray
>The contents are initialized to 0. Once established, you can reference elements
Может это как-то влияет?
Попробуй логать после таймаута. Если влияет, то там точно будут только 255.
Телепатическими силами заставил страницу не перезагружаться. Ты получишь ответ.
Проиграл с жсеров. Мало того, что на говне пишут, так её и мочу какую-то изучают.
https://jsfiddle.net/n5k0p0zu/3/
Почему то не жрет этот див блок
<div id="window">
<img class="close" onclick="show('none')" src="http://sergey-oganesyan.ru/wp-content/uploads/2014/01/close.png">
<img style="margin: 20px 0 0 50px;" src="">
</div>
Будто там какая то ошибка
нахуй ты нужен тогда здесь вниманиеблядь голимая? мут репорт
>через this внутри хендлера?
Да спасибо, а как мне отрендерить пропущенную сквозь функцию инфу по нажатию кнопки?
>>1083036
>Как ты через map биндишь евенты? Код показывай
Ну я уже впринципе починил. Там залупа выходила, что когда я рендерю свои 5 внутренние складки он триггерят каждый раз блядский ивент.
пик потерял.
Ебать ты заморочился. Делаешь обычный массив с телом змеи, каждый шаг делаешь аншифт и поп, если сожрал ягодку поп не делаешь.
зачем тогда он нужен, в чем прикол писать js и html одном файле в 2к17?
@
let proposals_before = Object.keys(proposals).length;
@
ВТОРАЯ СТРОЧКА КОДА
@
if(proposals_before == 0)
@
ПИКРИЛЕЙТЕД
Шо это за хуета?
Все наоборот, реакт охуенная штука, а редух мутная. Помню я в 2005-м делал один огромный объект-помойку и писал туда всю хуйню, а потом из него же доставал где кому что надо, суть та же.
Суть в том, что ты не пишешь HTML, это чистый JS. Просто объектная презентация вью в более интуитивной HTML форме
Значит пишешь в контору, где хочешь работать, и спрашиваешь, какие обезьянки у них в почёте. Если грят, что React-обезьянки - значит, становишься React-обезьянкой. Не надо учить всё подряд просто для того, чтобы пройти любое собеседование на изичах. Учи что-то конкретное. То, что нравится. А если контора хочет, чтобы ты знал и Vue,
и Lodash, и React и Angular и умел со всем этим работать -
шли нахуй, ибо ничего хорошего ты там не напишешь. У нормальных контор должен быть 1 любимый фреймворк на бэкенде и 2, максимум 3 - на фронте. И то, под каждый фреймворк зачастую нанимают по одному специалисту,
а не одного на все 3. Исключение - желание сэкономить на тебе бабло. Но начать можешь с Реакта. Он сейчас наиболее востребован.
Читаю вакансии по ноде и вижу такое вот требование:
— Mongo DB (глубже, чем использование mongoose)
Что имеется ввиду?
Очевидно, что требуются знания, позволяющие самостоятельно написать коннектор к БД, а не работа через имеющуюся обёртку.
Так есть же гиттер, почему именно ирка?
ну почему сразу тупой? я же сказал,что я не понимаю нечего в js я даже про JavaScript Sandbox ничего не знал. Написал код в консоли браузера. Получилось. у тебя плохой день был или что? почему вы все тут такие злые
Потому, что если ты учишься программированию, то должен знать, что для любого языка есть "песочница", в которой быстро можно что-то накидать. Чтобы попробовать C#, не обязательно ставить Visual Studio. Мы не злые
Так получилось,что я обходил всегда js стороной и изучал другие языки. Увидел,что на одном из it курсов,чтобы на него приняли нужно решить такую задачку. Мне стало интересно и я решил разобраться,т.к я понял,что идет работа с массивами,но полностью понять как работает код мне не удалось из-за незнания js опять же.Просто решил узнать
вот теперь благодаря вам я знаю,за что очень благодарен
Братишка, раз уж ты знаток. Подсоби и мне. Вроде всё правильно делаю, но на страничке не рендерится список. Что делаю не так?
я не хотел записываться, я просто решил узнать ответ. Понимаю частично,что в коде делается,а полностью понять не смог. Стало интересно. И если честно,то двач я сразу отодвинул на последний план,т.к. уже знал,что меня там могут встретить с такими вопросами слишком великодушно.
Тебя "великодушно" встретят везде, где бы ты не задал вопрос на подобие "вот я листик сфоткал, сделайте за меня". Задавай конкретные вопросы - что непонятно, чего ты ждёшь от кода, что предполагает твой алгоритм, а что получается вместо, etc.
вот о чем я и говорил. я тебе на столько интерес,что ты за мной по тредам скачешь?
лол угу. в общем, в новой вкладке нажми в хроме ф12, перейди в "консоль", перепиши туда свой код и посмотри как он работает, и потом снова спроси, если что-то не понятно
Въезжать в логику твоего приложения по рандомным кускам кода это такое себе удовольствие. Втыкай консол.лог на каждом шагу и смотри на каком шаге приходит не то что надо. Что пришло от сервера, что ты записал в стейт, что попало в компонент, и так далее. Если ты не понимаешь о чем речь зачем взялся за фреймворк не понимая основ.
Хорошо. Мне нужно вывести элемент по нажатию кнопки, но нихуя не происходит. Всё работает всё мапится. Нет только рендера. Не ебу почему.
как ты блядь читать и писать научился с такими мозгами вот что действительно загадка
Мы на личности переходим и мне надо съязвить что ты такой выебистый только в школе пока на тебя не поссат альфачи или мы всё таки останемся цивилизованными людьми и вернёмся к обсуждению проблемы при том что весь код, который нужен чтобы понять что происходит я предоставил?
Запрашиваешь, Получаешь ответ, мапишь, вытаскиваешь что тебе нужно, рендеришь. Привязываешь рендер к кнопке. Последняя часть не работает. Я спрашиваю хули не работает. Что сложного блять посмотреть и ответить если ты ебаный эксперт местный.
Что конкретно ты не понимаешь и тебе нужно узнать? Есть функция, я хочу чтобы она выполнялась по клику кнопки и выводила мне список. Она не выводит список.
>Она не выводит список.
Она хотя бы вызывается? handleClick этот, вызывается? search_by_author вызывается? Я не ебу, как там чё в реакте, но кажется мне, что функция с первого пика ретёрнит titleList вникуда (нахуй он на отступ меньше остального? Я сначала вообще подумал, что вне коллбэка/промиса), а нажатие по кнопке пытается отрендерить то, что возвращает search_by_author, то есть нихуя.
Да. Всё вызывается. Console.log показывает что repsonse пришел и всё внутри есть. Нет только рендера.
>что функция с первого пика ретёрнит titleList вникуда
Вот я тоже не ебу. Может быть я как-то не правильно в jsx вызвал эту функцию.
>(нахуй он на отступ меньше остального? Я сначала вообще подумал, что вне коллбэка/промиса)
Как я понял отступы не особо там влияют. Что без return что с return нихуя не рендерит.
Если я убираю return titleList. Он мне пишет что я его нигде не использую. Собственно в моём понимании я должен вернуть titleList и отрендерить его в html.
То что функция работает показывает Author, который возвращается не пустым.
>Вот я тоже не ебу.
Ну так иди доки с примерами почитай, наверняка же это ультрапопулярное действие.
В стейт кто будет этот titleList пихать, а?
https://jsfiddle.net/zbhn1w6u/2/ Вот, блин, две секунды в бинге (в бинге, мать твою, даже не в гугле!) + абсолютное незнание react'а — готово.
>Как я понял отступы не особо там влияют.
Не влияют, как и эти уебанские скобочки у return'а, только зачем?
Ебать это конечно не читабельная запись кода, но да дело действительно в setState.
Теперь render() триггерится два раза, возникает вопрос это похуй или надо как-то чинить?
>Теперь render() триггерится два раза
Ты не очень умный, да? render вызывается при каждом изменении state'а. Прочитай хоть это. что ли — https://reactjs.org/docs/hello-world.html
>>1083515
Шёл бы ты на ванильных js и html'е писать.
Типикал жс пограмист.
Проблема не во вкатышах, а в ёбаных вакансиях, где фреймворк-нейм и зарплатка рядом стоят. А вкатыш типа поступает рационально, идёт по короткому пути.
Тут был программист на Реакте, который массив не мог отсортировать.
блядь это совсем надо быть ебанутым, чтобы в нашествии полоумных шизиков с дебильными вопросами в тред объяснять вакансиями. иди на хуй просто чмо ебаное и друзей своих дебилов уноси
У тебя не может быть запросов в рендере. Рендер — это просто проекция существующего стейта на вью. Разгребай лапшу. Рендер должен быть чистой предсказуемой функцией.
Вот пример https://jsfiddle.net/qpamhts9/
Что лучше, хранить ссылку на объект DOM в замыкании, либо хранить id объекта DOM в замыкании, и потом искать его по document.getElementById?
Предполагаю, в первом случае я ем память, во втором - процессор.
Не знал об этом и сейчас не вижу такой функции. Ткни пальцем пожалуйста. Обожаю допиливать куклоскрипт
Надеюсь сдесь можно задавать вопросы новичкам
Почему второе условие всегда не работает вне зависимости от выбора
Знаю этот паттерн и использую. Но вот так написан конкретно этот кусок, и у меня нет времени его переписать, только выбрать одно из двух.
Это типа шутка такая, да? Если не шутка, перепечатай код ещё раз, без копипаста, а потом убей себя за такой стиль письма.
Тебе несказанно повезло, я нашел для тебя приватную версию куклоскрипта семилетней давности.
doSecure(), doUnsecure(). Разбирайся.
http://rgho.st/6mMcSgPBt
Просто скажи что не так, потому что я не понимаю где я написал не то
Или хотя бы что гуглить
Спасибо, нефти тебе.
Сказал же, перепечатай заново строку "if(frm1.vib[0].cheсked){".
А затем можно сравнить
"cheсked".charCodeAt(0) и
"cheсked".charCodeAt(3)
Оба по идее должны указыват на букву "c", однако код у них, почему-то, разный. Догадаешься, почему?
есть альтернативы create react app?
go to definition по реактовским компонентам возможен в какой-нибудь ide?
Что именно тебе нужно сделать?
Двачик, нашёл вакансию, но в ней есть такое требование Web sockets Circular JS. В гуле вообще не нашёл никакого Circular, может быть кто-то знает что это?
Погугли socketio circular, мож что полезного извлечешь, у них объект насквозь в циркулярке.
ХЗ что конкретно твой потенциальный работодатель имел в виду.
Это смешно, спасибо хоть что настроение поднял.
Есть например:
{
"id": 1,
"title": "Test",
"content": {
"body": "sdfsdf"
"image": "http://example.com"
}
}
Но при поиске может найти хуйню где нет body, а я вытаскиваю именно его. Очевидно что получаю undefine. Как мне просто проигнорировать, если в нём нет body?
Поделишься заданием? Конечно нет. Ну хотя бы расскажи в двух словах, что нужно было выполнить?
поделюсь офк
https://jsfiddle.net/45tjrvnm
1. надо сделать шобы переменная status работала
2. реализовать таймер который в конце будет вызывать колбек onFinish и передавать туда {$endTime:new Date()}
3. сделать так шобы это работало без тормозов при большом кол-ве таймеров на странице
есть еще по второму ангулару на сеньера из другой конторы
его я тоже сделал и прошел. кидать?
шобы вы понимали это такие задание которые вам в начале дают и после их выполнения еще интервью с hr + техническое интервью со спецом
> есть еще по второму ангулару на сеньера из другой конторы
> его я тоже сделал и прошел. кидать?
Конечно, няша. Спасибо.
пустяки. это кем надо быть чтобы зажать показать такую вещь хз
пикрелейтед делал на ангулар 2
Эйчар, небось, 25-летняя ТП с гуманитарным псевдообразованием?
Интересно, с каким уровнем квалификации можно писать в резюме "эйчары идут нахуй" таким образом, чтобы данная запись не повлияла на возможность трудоустройства?
>>1084350
там немного не так.
там response, в response -> message, в message items, а в items body, где body это список.
Поэтому когда у меня items, а там нет body. Меня шлёт нахуй map.
Потому что я пытаюсь достать body через:
this.setState({items: response.message.items})
const messages = this.state.items
const ItemList = messages.map((item, index) => { item.body.map((item2, index) => { console.log(item2) })})
И вот в этой конструкции мне нужно сделать проверку чтобы пропустить элемент и перейти к другому, если нет body внутри items.
Если можете предложить проще конструкцию чтобы пройти сквозь список и пройти по списку внутри списка, то я во внимании.
Грубо говоря у меня N array'ев а внутри каждого еще array. И мне нужна проверка на случай если внутри array нет array.
Ебаный рот... Это даже звучит по еблански.
Тащ майор, забирайте клиента
Не вникал особо в твой эпос, но Rx определённо решает проблемы подобного рода.
Интересно, если я сделаю приложуху, которая после сдачи кала, оригинала паспорта и норм ГТО позволит такую крутую и инновационную вещь, как... наберите воздуха... готовы?.. обмениваться сообщениями в Интернете в 2017, я смогу Пашку переплюнуть по унижению говноедов?
<div>
<Collapsible trigger={item.title} key={index} lazyRender={true}>
something
</Collapsible>
</div>)
);
Есть ли какой-то способ получить массив из map?
Вот не типо взять массив и проитерировать его, а именно просто массив.
array = message.map((item, index) => return item) ?
Я не очень понимаю как, иначе бы не спрашивал.
array : message.map((item, index)) ?
map же нужно всегда функцию передавать. Какую функцию я ему должен передать?
Собственно массив:
array = message
Копирование:
array = message.slice()
array = message.map(x => x)
Исходный массив в мапящей функции
message.map((item, index, message) => ...)
Меня шлёт нахуй с undefined items.info
а если мне например нужно items.info в map использовать?
например items.info.map((inf, index) => { something})
но при этом он пустой.
Чувак, ты мой герой. Спасибо тебе.
Бля, сделал всё как ты написал. Ошибки не выдает, но не рендерит почему-то. Хотя передают не undefined. Тестовую рендерит, а нужную - нет.
Всё починил. Проебался с return.
>он же программировать не умеет абсолютно
Умею, но не на реакте и не на js. Я понимаю что я должен сделать с логической точки зрения, но я не ебу как на скрипте это написать. Поэтому и спрашиваю тут.
блядь не отвечай мне хуесос ебаный мне похуй твои галимые отмазки. хватит срать в тред уебище
Проксификацию запили, например
Задача – написать функцию factorial(n), которая возвращает факториал числа n!, используя рекурсивный вызов.
Напишите функцию fib(n), которая возвращает n-е число Фибоначчи.
Анчоус, помоги.
Как запилить такой самодостаточный компонент на реакте? (Ну или просто хтмл)
У меня содержимое таблицы постоянно проваливается под днище и скроллится или вообще все или ничего
JS, сэр. Впрочем, не очень понятно, первое или второе тебя смущает, но вот тут все правила неявной конверсии при сравнениях http://es5.github.io/#x11.9.3
1. true == "1", применяем правило 6
2. 1 == "1", применяем правило 4
3. 1 == 1
Готово.
Сдела то же самое с первый, на третьем шаге будет 1 == NaN, что, очевидно, false.
Так прочитай определение факторила на вики, дурилка, его второкласник (или когда там умножение проходят?) поймёт.
иди на хуй ну
Точно так же: википедия, число фибоначчи. Там ещё проще, вообще только сложение нужно, поэтому даже первоклашка справится!
есть разные
Проганы, есть задача.
1. Есть такой сайт BrainwalletX на JS.
2. Есть ссылка на закачку его в zip: https://github.com/brainwalletX/brainwalletX.github.io/archive/master.zip
3. Есть index.html, который можно открыть во вкладке браузера, после розархивации.
4. Есть много монет, выпадающих из списка.
5. Эти монеты и их параметры - перечислены в index.html в списке <ul class="dropdown-menu dropdown-menu-two-column">
6. Когда выбираешь монету, скрипт brainwallet.js вгружает эти параметры на данных монеты, выбранной из списка,
и на основе данных, содержащихся в качестве параметров в этом списке.
7. Так же само работает и Sign с Verify.
8. Но на вкладке Сhains независимо от выбранной монеты, Armory и Electrum генерируют адреса биткоина.
Т. е. Armory и Electrum не подхватывают данные, содержащиеся в списке.
Какая функция это делает в файле brainwallet.js - не пойму,
по всей видимости это функция function crChange().
Короче, надо переписать всё это чтоб загружались данные из списка и добавить внутри кода ещё одно поле RANDOM SEED.
Пусть это будет строка с 256-битным значением, которые может указать в виде hex-строки любой пользователь.
И sercet exponent является изначальное значение hash(passphase), но с дополнительным XOR на эту строку.
Как всё это сделать?
Цимес даже не в этом. Я такую задачку видел в одной комп. игре на тему кодинга. В итре где нет ни одной строчки кода, а все алгоритмы изображены в виде конвейера и кубиков со всякими операторами, методами, функциями и т.д.
Ну и что что не мог? Все равно же смешно.
Если ты школьник <8 класса, то ещё простительно. Если старше, то уже как-то несолидно не смочь решить такую задачу, имея безграничное количество туториалов, подсказок и примеров.
Более того, что на самом деле плохо (ну не понял формулу там или не совсем понимаешь, как работает та или иная штука, мало ли, это фигня), так это то, что ты даже сформулировать проблему толком не можешь. "Не получается! Не могу! Не понимаю!", прям как блондинка. Что именно не получается? два числа сложить или умножить? Понять, как вызвать функцию изнутри её самой же? Как отановиться? Что? А ведь если бы ты смог это сформулировать, то даже сюда писать не пришлось бы, потому что первой строкой в гугле решилась бы твоя проблема.
там функция function crChange() внутри brainwallet.js
вызывается вот так:
$('#crCurrency ul li a').on('click', crChange);
а эта строка входит в функцию
$(document).ready( function() {
...
});
и всё это внутри функции
(function($){
...
})(jQuery);
т. е. в brainwallet.js эти параметры передаются через JQuery, а в armory.js - голый JS.
Как передать туда эти параметры - понять не могу.
>>1084329
только что закончилось собеседование
было две задачки на кодинг
https://codepen.io/brackets-arrows/collab/VrZYwZ/ тут пофиксить undefined
https://codepen.io/brackets-arrows/collab/rmqZQq/ реализовать функцию
вопросы по фреймворкам ангулару(инжектейбл, зоны, скоуп, перформанс, как реализовано отслеживание изменений и т.д.)
вопросы по event loop-у(куда же без него) и setTimeout
ну и еще куча всего. почти час говорили
я на ивент лупе взмок и вообще взмок
полтора года не работал. я кое-что очевидное позаебыл, а тут ивент луп хех
блин дал случайно ссылку с решением
вот нормальная
https://codepen.io/brackets-arrows/collab/VrZYwZ/
>>1085059
В решенный вариант не подсматривал, но чет не понял, первая задача решалась так просто, в одном из шагов не возвращался промис? Точно это исходное задание? Ничего ж допиливать не пришлось.
Вторая задач была в Codewars.
Так тебя на позицию мидла взяли? Фронтендером будешь, на энгьюлэ пилить прожекты? Если не секрет, назови вилку зарплат, на которую ты претендовал. Ну и расскажи, о чем еще болтали с тимлидом плес.
var ololo = new Date( (текущий timestamp) x 1000 );
ololo.getHours() - выводит часы, с учётом системных часов (переводит в мой часовой пояс). Так и должно быть?
Как функцию принимающую (err, data)-коллбек переделать в промис?
вопрос про перевод в часовой пояс
Очевидно, нужно создать промис (new Promise()) и внутри него выполнить изначальную функцию, а внутри коллбека резолвить/реджектить.
https://repl.it/N65M/1 https://stackoverflow.com/questions/22519784/how-do-i-convert-an-existing-callback-api-to-promises
делаю что-то типа ТУ-ДУ приложения с базой данных на firebase
есть компонент View, который загружает эту базу данных, кидает в стейт компонента и рендерит в список
как лучше сделать, оставить так и просто рендерить <View /> в главном файле или сохранять базу в главный файл, а потом через props кидать в компонент View? ну, типа, рендерить вот так: <View huy={pizda} />
>в одном из шагов не возвращался промис
да
>Так тебя на позицию мидла взяли
еще неизвестно
>Фронтендером будешь, на энгьюлэ пилить прожекты
хз что ето "Фронтендером". проекты у них на ангуларе и реакте. верстать не надо
я 2к$ хочу
я же передаю его в виде содержимого инпута как ${query}
Плюс к этому хочу результаты поиска проверять по двум query, но api позволяет только AND, но не OR.
>Помоги с тупняком. нужно запрос сделать, но он выглядит как query=song+year
я же передаю его в виде содержимого инпута как ${query}
Эту хуйню пофиксил. Как две query сделать через OR, если api не позволяет. Делать через url(query1) || url(query2) мне кажется не даст нужного результата.
Починил. Просто я ебло.
А почему у тебя фетч сразу на onChange привязан?
Не спутывай так сильно вью и логику, фильтруй.
Кто-нибудь из программистов может подсказать,
как здесь сделать нажатой кнопку compressed
в зависимости от параметра gen_compressed (true или fasle)???
Вижу класс .addClass('active') но он не работает!
Может ещё что-то прописать надо?
a и b в внутри сортирующей функции — строки "abcN". У них нет никакого total_duration'а.
Что бек енд? В шапке-то фронт
Во-первых, везде пишут об этом, во-вторых, работы почти что нет, особенно если сравнивать с прошлым годом. Сейчас все, кто вкатываются во фронт, всё равно будут обречены на вкатывание в другие области. Я бы советовал вкатиться в мобильную разработку, если уж на то пошло. Ну, или же изучать нейронные сети и всё, что с этим связано. Только не говори мне, что фронт не умирает и в ближайшем будущем будут рабочие места
Сортируешь ключи, duration обрезается до сортировки
я работал удаленно на одну контору, а потом неожиданно в важный момент ливнул. перекрыл все контакты, ну типично.
через полтора года на меня накатило как-то ночью, что я так хуево с хорошими людьми поступил. сел и написал им письмо с извинениями. мол, я на самом деле наркоман, не смог побороть зависимость, скатился в говно. стыдно пиздец.
они утром пишут, типа а работать-то ты можешь? давай к нам обратно.
после этого захожу на двач и читаю твою хуйню и еще много такой же хуйни от других даунов. это каким образом фронт умирает, если там такая нехватка специалистов, что они кидал-нариков обратно на работу готовы взять? ссу+сру тебе в рот
Понял, базиба.
>вкатиться в мобильную разработку
которая массово перекатывается с приложений в натягивание фронт-морд на реакт нативе. нисе
cv -> тестовое задание -> интервью с hr -> тех. интервью -> интервью с менеджером (я тут)-> тех. интервью со специалистом клиента -> интервью с клиентом -> интервью с директором
в параметре data у меня на фронт приходит {title: "тест", text: "тест", name: "васян", email: "", image: null}
я пишу вот так, сам блок выполняется проверял через console.log(data)
success: function (data) {
$("#post").html(data);
},
но на странице нихуя не появляется. ЧЯДНТ?
Сам разрулил, короче.
Там надо обозвать лейблы другими именами
и присвоить им классы так:
$('#gen_comp [name=comp]').addClass('btn btn-default active'); //активная кнопка
$('#gen_comp [name=uncomp]').addClass('btn btn-default'); //не активная кнопка
Иначе, класс присваивается input'у - это видно в исходном коде в Chrome.
Скоро в /cc запощу исправленный brainwalletX.
Не. нихуя.
Что, неужели всем так лень помочь, это же строка кода наверняка.
Вот есть дохуя коментов, в в диве с айди post через форму асинхронно создается новый комент и возвращается в виде как я писал, как мне его добавить к уже существующим?
Ребзя, посоветуйте как лучше всего реализовать мультиязнычность на сайте с Node.js? Как это правильно называется? И мб есть уже какой-то готовый пакет хороший?
Я не понимаю, что гуглить, жс вообще не знаю, еле нагуглил как сделать так, чтобы форма отправлялась асинхронно и результат приходил нормальный, а дальше хз как.
>>1085875
Уже больше похоже, теперь у меня в хтмле
{"title":"тест","text":"ee","name":"васян","email":"","image":null
С этим уже можно работать, это не из-за того оно так выглядит, что я в апи обрабатываю это, то есть у меня же уже json приходит?
Имеется ввиду, чтобы когда у человека стоит английский язык в браузере, то оно отдавало страницу на английском, а когда русский - то русском.
Ну так ты пытаешься вставить целый обьект, оппробуй:
$('body').append(JSON.stringify(data.title))
или
$('body').append(data.title);
ты же не пробовал даже документацию открыть уебок блядь по функции которую используешь
просто иди на хуй
Нет, это не JSON, а JavaScript-объект. Ты не сможешь запарсить его с помощью JSON.parse(data). А вот то, что получается в результате JSON.stringify(data) - уже JSON.
рак это ты ебаный дебил и подобные тебе дауны которые срут в тред своими даунскими вопросами. и дебилы кто вам помогает. сука пиздец уебаны лень документацию просто открыть блядь прочитать что функция делает как работает, какие параметры принимает, что делает
надо со своим тупорылым вопросом обязательно насрать блядь в тред "ну я же не знаю не понимаю пок пок пок". хуесосы говножоры и те кто такую хуйню спрашивают и те кто тебе отвечают поощряя это говно
уебаны
найс полыхнуло)
найс комунити, пидорашка дикая
У тебя бы столько же времени заняло пояснить и кинуть парой ссылок в него, о которых ты говоришь. Откуда ты знаешь, какой там у него бекграунд? Уебан.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language
Но как пользователь скажу тебе, что лучше так не делай, бесить эта штука юзеров будет. Оставь старые добрые /ru, /es и т.д.
>>1085893
Люто двачую.
>>1085883
>Я не понимаю, что гуглить
Потому что ты либо тупой, либо нет желания даже пытаться что-то гуглить. Вот ты пробовал? Вряд ли, "я не знаю, что гуглить", и всё. Да хоть что-то погугли, блядь, перелопать примеры этого jquery post'а, уж хоть кто-то, да пробовал отображать приходящий с сервера json на странице. И ведь там абсолютно плевать, post это, get или вообще из консольки ты переменную отобразить хочешь. Ты не понимая вообще ничего пытаешься что-то сделать, не желая хоть немного прочитать про то, что используешь. Нет, по сниппетам со стака можно много чего сделать, но не когда ты тупой, и пытаешься в js-объект вставить как html.
У меня уже давно появилась теория, почему в тредах почти никогда не бывает действительно сложных вопросов, только общие вопросы/советы по фреймворкам и вот такое вот примитивное дерьмо. Потому что те, кто пишут что-то сложное, могут погуглить и подумать сами, особенно когда начнут писать сюда вопрос, додумывать уточнения, предполагать допольнительные вопросы, продумывать на них ответы и вуаля, сам себе решил проблему, удалив неотправленное сообщение. Ну либо-таки запостит пару очень специфичных нишевых вопросов, никто не ответит и всё, больше не будет писать, так как смысла мало.
Неопытные, но-таки разумные (типа >>1084980), всё же постят, но спустя короткое время сами решат, потому что они, сюрприз-сюрприз, не ждут сидят ответа на вопрос, в отличие от некоторых.
1-3: Как надо
4: Как я понял из видео что работает хуета с таймаутами.
Делаю задания из шапки, в консоли все выводит правильно, но решалка выдает пикрил. Я же задаю начальные значения, что не так?
А, лол, пофиксил, передав start=0, step=1 в параметры
Ты можешь либо:
1. В лупе пройтись по всем элементам, увеличивая время таймера для каждого следующего элемента https://codepen.io/anon/pen/WXQBNw
2. После каждого элемента проверять, есть ли ещё элементы для отображения и запускать новый таймер. https://codepen.io/anon/pen/OOyGeL
Анимация делается setInterval'ом со временем равным 1/fps.
>>1086074
http://lmgtfy.com/?q=javascript+необязательные+аргументы+начальное+значение+по-умолчанию первая же ссылка. И никакие начальные значение ты не задаёшь, ты start/stepValue на следующей же строчке переназначаешь.
О, круто, спасибо!
Бамп вопросу.
все верно расписал
Когда вывожу текст, вместе с текстом выводятся запятые.
???
А если name[и] заменить на литерал строки, чтобы одно и то же 7 раз вывелось, будут ли "запятые"? Они больше на точки похожи, по-моему.
name[0] - H
name[1] - .
name[2] - L
name[3] - i
name[4] - .
Я неправильно массив заполнил?
надо чтобы name[0] = h ; name[1] = Li
JS, сэр. Выбери другое имя переменной.
Сложно гуглить такое общее слово, к тому же это только в браузерах сделано, так что знающие, подкиньте ссылочек на эту хрень (в частности, нахуя оно нужно такое), и как она умудряется работать вообще, пожалуйста.
>name.toSource()
>// "(new String(""))"
Там какие-то проксификаторы, что ли?
Поменял имя, помогло, спс
А вообще, чего я туплю, просто атрибут window'а с геттером и сеттером.
https://developer.mozilla.org/en-US/docs/Web/API/Window/name
>Don't set the value to something unstring since its get method will call the toString method.
Интересно, конечно, что toString вызывает геттер, а не сеттер.
Так вышло что устроился работать react макакой, всё пиздец легко, уже второй год работаю. И вдруг так почитал про xss атаки, про всю эту хуйню с глубинным устройством dom, js и всего такого и чёт пиздец интересно стало как всё это устроено на глубоком уровне.
Собственно вопрос, есть ли какие-нибудь хорошие источники по такой теме? Не всмысле xss а устройства всего. Может быть даже история развития.
Эх были бы учебники истории, только про веб.
>Эх были бы учебники истории, только про веб.
Обычно в книжках пишут, как что-то работало раньше, чтобы при встречи с старым кодом не обосраться
кого ее
А почему будет бесить? По-моему весьма удобно, когда англоязычный юзер заходя на сайт сразу попадает на английскую версию. В чём лично для тебя проявляется неудобство?
а, зависимость. на хуй знает. сложно это очень. сложнее чем проходить собеседовании накуренным. собеседование то я прошел, а вот курить не могу перестать.
Американец и русский получают одинаковую ссылку. Американец говорит: "Хорошая статья". Русский говорит: "Устаревшая хуйня и половина не переведена", и выкидывает американца за борт.
Консистентненько всё должно быть, без сюрпризов.
другой анон
Одна ссылка должна вести на один и тот же документ (по крайней мере, в один и тот же момент времени).
Я в принципе не очень люблю когда, за меня слишком много решают, как мне будет лучше, ведь обычно наши мнение расходятся.
Развёрнуто дополню >>1086629:
>В чём лично для тебя проявляется неудобство?
В том, что я не могу быть уверен, что мне подсунули именно то, что я просил. Есть перевод? Замечательно, добавьте ссылочку.
>когда англоязычный юзер заходя на сайт сразу попадает на английскую версию.
А я вот русскоязычный юзер, но попадаю на китайскую версию, потому что из компьютерного клуба тут зашёл. Стим так делает, например. И вот нахуя оно мне надо такое?
Да и на русские сайты мне бы хотелось в оригинале заходить (система на английском), и при этом на английские — тоже.
Гугл вот когда-то в своих ветках обсуждений переводил все посты на русский мне зачем-то, заставляя иногда задумываться, что за дауны так коряво пишут.
Представь, что википедия показывала бы страницу только на твоём языке, откатываясь на ангилйский (или следующий другой по цепочке) лишь при отсутствии статьи на этом языке. Ужас же был бы.
Короче, если в двух словах: подобная "интернационализация" не даёт выбора и сбивает с толку, потому как обычно эти горедизайнеры забывают и о кнопке принудительной смены языка. Да и не знаешь, перевод это или вообще язык версию сайта отдельная команда ведёт и статьи примерно похожи, но написаны каждая с нуля, просто на ту же тему и примерно с теми же источниками.
Есть поддомен, есть топ-левел домен — пользуйтесь!
И да, с event.stopImmediatePropagation() закрывается сначала первый, потом второй, а нужно сначала второй, потом первый.
Sup, есть jquery скрипт:
$(document).ready(function() {
$('#data_v-gwert').change(function(){
if($(this).val() <= "5000"){
$("#block1_5000").css ("display", "block");
$("#block2_5000").css ("display", "block");
$("#block3_5000").css ("display", "block");
$("#block4_5000").css ("display", "block");
}
else {
$("#block1_5000").css ("display", "none");
$("#block2_5000").css ("display", "none");
$("#block3_5000").css ("display", "none");
$("#block4_5000").css ("display", "none");
}
});
});
и элементы таблицы, которые я хочу скрыть/открыть
<td id="block1_5000" style="display: none;">тест</td>
Это всё делается в зависимости от числа, которое ввёл в инпут с ид data_v-gwert
Но оно не работает:С
Ошибок валидатор не выдал.
ЧЯДНТ?
Sup, есть jquery скрипт:
$(document).ready(function() {
$('#data_v-gwert').change(function(){
if($(this).val() <= "5000"){
$("#block1_5000").css ("display", "block");
$("#block2_5000").css ("display", "block");
$("#block3_5000").css ("display", "block");
$("#block4_5000").css ("display", "block");
}
else {
$("#block1_5000").css ("display", "none");
$("#block2_5000").css ("display", "none");
$("#block3_5000").css ("display", "none");
$("#block4_5000").css ("display", "none");
}
});
});
и элементы таблицы, которые я хочу скрыть/открыть
<td id="block1_5000" style="display: none;">тест</td>
Это всё делается в зависимости от числа, которое ввёл в инпут с ид data_v-gwert
Но оно не работает:С
Ошибок валидатор не выдал.
ЧЯДНТ?
что?
Спасибо, но не пойдет, я либу компонентов пилю, они из коробки должны уже этот функционал уметь. Я распетлял через вешание лиснеров на сами попапы и фокус их во время willUpdate.
$(document).ready(function() {
$('#data_v-gwert').on('input',function(){
if($(this).val() <= 5000){
$("#block1_5000").css ("display", "block");
$("#block2_5000").css ("display", "block");
$("#block3_5000").css ("display", "block");
$("#block4_5000").css ("display", "block");
}
else {
$("#block1_5000").css ("display", "none");
$("#block2_5000").css ("display", "none");
$("#block3_5000").css ("display", "none");
$("#block4_5000").css ("display", "none");
}
});
});
да если интересно кому, частично задачу решил,
но проблема в том, что он работает только при вводе в инпут, а у меня значение этого инпута берется сложением двух других в динамической таблице :С
Я правильно понимаю что в других языках вместо хуйнинейм.js надо пердолиться и самому писать все велики либо же хуйнянейм зашита в стандартную либу?
Ну, анон, ничего страшного, и не из таких тормозов кодеров выращивали при должном упорстве.
П.С.: Сам когда-то не понимал в упор как быстрая сортировка работает. Вертел ее туда-сюда неделю с разными массивами, пока не разобрался во всех мелочах.
Можно использовать какой-нибудь tcomb. Ругаться будет рантайм.
Можно использовать typescript или jsdoc комменты с типами, ругаться будет IDE
>Perfect shuffle
норм, а что это за алгоритм? в википедии конкретно об этом алгоритме ничего нет
можно сделать прототип переменной, и смотреть что туда пишут, примерно так https://stackoverflow.com/questions/15857682/javascript-what-are-some-guidelines-on-how-to-define-new-data-types
Так в статье же подробно рассказывается, что за алгоритм. С картинками, графиками, гифками и исходниками на JS.
Алгоритм перемешивает элементы в массиве. Он тупо пиздец простой: делим массив на две части и в новом массиве чередуем элементы из первой части и из второй.
Элементы в массив: 1, 2, 3, 4, 5, 6, 7, 8
Разделили на две части: 1, 2, 3, 4 и 5, 6, 7, 8
Чередуем: 5, 1, 6, 2, 7, 3, 8, 4
Ну и там весь прикол в том, что если так "перемешивать" массив - через несколько итераций все элементы возвращаются в исходной положение:
1, 2, 3, 4, 5, 6, 7, 8
5, 1, 6, 2, 7, 3, 8, 4
7, 5, 3, 1, 8, 6, 4, 2
8, 7, 6, 5, 4, 3, 2, 1 <- в обратном порядке
4, 8, 3, 7, 2, 6, 1, 5
2, 4, 6, 8, 1, 3, 5, 7
1, 2, 3, 4, 5, 6, 7, 8 <- вернулись в исходное состояние
Спасибо!
Данные приходят на клиент и хранятся в переменной в виде JavaScript-объекта. Далее, слева у меня есть различные чекбоксы, слайдеры и пр., которое я могу крутить и регулировать параметры необходимых мне данных. Я создал новый JS-объект:
let filters = {};
Каждый раз, когда я кручу какой-то ползунок или нажимаю какой-то чекбокс, этот объект пополняется правилами. Если я отрегулировал ползунок ценника, то появятся два элемента с ключами "price_min": n и "price_max": n.
Теперь, как мне выбрать все элементы из JS-объекта, где значение ключа price => "price_min" && price <= "price_max"? Я бы мог, конечно, написать такое ручками и определить это через if else, но у меня таких ползунков дохуя. Писать по if else на каждый случай жизни - заебусь, да и мусорного кода дохуя получится.
Может, сталкивался кто с таким? Подскажите хотя бы, как эту тему правильно гуглить, пушо запрос how to filter object in json упорно тычет меня носом в Array.prototype.filter и парочку тупых вопросов на StackOverflow.
>Неопытные, но-таки разумные (типа >>1084980), всё же постят, но спустя короткое время сами решат, потому что они, сюрприз-сюрприз, не ждут сидят ответа на вопрос, в отличие от некоторых.
Уже решил.
>>1085848
>Скоро в /cc запощу исправленный brainwalletX.
>>1085875
Зацените: http://rgho.st/8hlwbSy98
1. Unzip в папку.
2. index.html -> на вкладку браузера.
Может чё ещё подправить надо? А?
evil не evil, но иногда удобно же.
Очевидный for in цикл по свойствам объекта с копированием в новый object.assign, который целиком отсылаешь
filter.price_min = данные => данные.filter(one => one > число)
filter.price_max = данные => данные.filter(one => one < число)
отфильтрованное = Object.values(filters).reduce((данные, фильтр)=>{
return фильтр(данные)
}, данные)
Как-то так примерно.
Рендер товаров организуй по правилам.
const filtered = data;
if (filters.checkbox) {
filtered = filtered.filter(item => item.rule);
}
render(filtered)
То есть если фильтры пустые - отрендерится дата, если нет, то отфильтрованные.
А почему бы не хранить "отображаемые" товары в виде массива, который и будешь фильтровать тем самым filter'ом? Вроде бы, так обычно это всё и делается, да и судя по описанию проблемы, JS-объект тебе только мешает.
var obj = {
array: [1, 2, 3, 4, 5],
currentItem: obj.array[2]
}
Чтобы один ключ объекта ссылался на другой ключ объекта. Или никак и только
var obj = {
array: [1, 2, 3, 4, 5]
}
obj.currentItem = obj.array[2]
?
https://stackoverflow.com/questions/4616202/self-references-in-object-literal-declarations
Можно вот при первом вызове геттера/сеттера удалять их и оставлят обычное поле. https://repl.it/Nlav
Однако, не забудь, что obj.array[2] в данном случае у тебя не ссылка, а копия, потому что элемент примитивный.
Какие сложные слова, я до такого еще не дошёл. Надо разобраться, спасибо. Правильно ли я понимаю, что ты это
>Однако, не забудь, что obj.array[2] в данном случае у тебя не ссылка, а копия, потому что элемент примитивный.
к тому, что obj.currentItem = 100500; не изменит array[2] на 100500? Если да, то это я понимаю. Суть задачи вообще какая: есть объект, который содержит элемент, значение которого - массив имён файлов. И один элемент этого массива нужно вынести в отдельный ключ объекта. Писать каждый раз array[2], когда нужно обратиться к этому конкретному файлу не хочу, потому что вдруг добавится в начало массива еще один элемент и array[2] будет иметь не то значение, куда нужно. Поэтому решил вынести это в отдельный ключ объекта, чтобы если что - нужно было заменить всего одну строку. То есть менять я ничего не собираюсь, по хорошему там вообще не var, а const скорее.
Может ли жс в сокеты?
Че гуглить, а то нашел только сокет ио какой-то но там нода-хуеда.
Сабж вот в чем.
У меня есть приложуха на одном компе, а мне нужно чтоб !БРАУЗЕР! отослал запрос с помощью жса к этой приложухе.
Приложуха не постоянно в аптайме.
есть идеи/альтернативы?
> Че гуглить, а то нашел только сокет ио какой-то но там нода-хуеда.
Лонг поллинг юзай и не выябывайся, чать тебе не реалтайм аппу писать.
так там фреймворк состоит из двух частей, фронт и бек. И это просто обертка вокруг нативной реализации и там и там. По идее неважно как бек их у себя делает, в браузер оно все приходит более менее одинаково (заголовки разве что может будут другие).
опровергай, или иди в хуй.
Так ты куда сокеты впихнуть хочешь? Если в браузер, то тут только WebSocket есть. Соответственно, и бэк должен их поддерживать.
Из бэкграунда - курс по Питону на Степик. Эта книга/язык и вправду такие сложные, или я безнадежен?
Встраивается видео через iframe.
Сам фронтендщик, хочу вкатиться в бэк-енд, и чтобы дополнительно прокачать навыки асинхронной ебли выбрал Node.JS.
Беда в том,что одного чтения документации мне точно не хватит, так как я еле-еле представляю для чего нужны сессии и чем вообще вы бэкендеры занимаетесь. Так что, желательно, нужен прямо для чайников ман, где дядя все покажет и расскажет на живых примерах.
Это для тестов/опционально. Но я тоже первое время проигрывал. мимо не пишу тесты
Ты еще про styled компоненты не слышал.
Там возвращаемся к PHP истокам, ВСЕ включая стили в одном файле.
XHR к бекенду приложухи?
Сокеты вроде для того чтобы слушать события, не? А респонс/реквест это всегда были XHR/Fetch
Читай функциональное против императивного
Оказалось гораздо лучше иметь сортировку по фичам и компонентам, чем разбросанную по кучам папок логику controllers/views/... или javascripts/html/css
Как потом отлаживать в дев-консоли вашу парашу, с автогенерируемыми именами классов я вас спрашиваю?
За счет декомпозиции никакой сложности
Ты бы еще на египетском написал
бамп.
Вот вам исходники, можете проверить, усе анонимно.
Пишу в свободное время, хочу приблизить к функционала двоща.
меня моча забанил в прошлый раз за то, что я отдельный тред создал и ссылку прямую, не хочу, чтобы опять побанили
там какая-то свалка на фоне и написано в коде "You need to enable JavaScript to run this app."
хотя JavaScript у меня включён для этой страницы и в браузере в общем.
Наверно поэтому и забанили. Лол.
А зачем папка целая router для одного роута? Зачем такие решил размазывать код роутинга по всему приложению? Или это особенность rr4?
>>Или это особенность rr4?
this
Раньше на 3 версии все роуты там были, сейчас, перед переносом его на семантик-юай, решил все депенденси обновить, включая реакт, роутинг и тд
Тебе нужны курсы не по языкам, а по основам программирования. Очень много зависит от практики. Теория без практики почти не усваивается. В голове просто каша образовывается. Нужно много практиковаться.
Вот есть 2 бесплатных курса с практикой в браузере, под ними есть еще дополнительная практика.
https://goo.gl/GLwHHL
https://goo.gl/LbfzdX
Если что-то не получается там же можно задавать вопросы. Полазь по сайту, посмотри, там есть всё что нужно.
Крутая программа обучения https://goo.gl/keMtwT стоит всего 24$ (~1500 руб.) в месяц, первые курсы бесплатные, практика прямо в браузере, помощь менторов, и много других плюшек. По ассинхронности там несколько курсов в программе.
render не возвращает html. Он возвращает объектное представление дерева.
bump. Могу немного заплатить за решение.
Не очень просто понимаю работает js и обращается ли он к серверу или к сайту как к уже загруженным данным.
Суть: сайт периодически рефрешится, скрипт быстро перекрашивает нужный текст. Ну а сайт банит за большое кол-во запросов.
Код - https://jsfiddle.net/r6xzrozd/
Понял, спасибо.
При сортировке текста в js используется https://ru.wikipedia.org/wiki/Лексикографический_порядок
Иными словами, ты хочешь отсортировать свой массив так, чтобы он имел порядок не [1, 2, 3, 150, 151, 152], а [150, 151, 152, 1, 2, 3]. Подумой, как бы ты смог получить такой массив с числами из перемешанного, а потом уже на строки это переложи.
С помощью этой штуки можно ли в браузере делать мышкой выделение текста в pdf документе и сделать проверку например выделил слово и автоматически произошла проверка, есть ли данное слово в базе?? Нужно для того, чтобы можно было отдавать перевод данного слова на другой язык и запускать audio file с произношением
Здравствуй, Алёша. Меня зовут Серёжа.
Как ты мог бы заметить, текст там рендерится в обычный хтмл с кучей div'ов. Проверять, выделен ли на странице текст, можно так: https://stackoverflow.com/questions/3731328/on-text-highlight-event
> Как ты мог бы заметить, текст там рендерится в обычный хтмл с кучей div'ов.
Не изучал эту технологию подробно, но разве там пдфка рендерится не в 2D canvas?
Блин, да открой ты пример по ссылке на онлайн демо из гитахаба и посмотри инспектором на html. Я вот именно это и сделал, например, перед ответом тебе/ему.
Текст в канвас это, по-моему, немного извращенство (но тут могу ошибаться).
https://plnkr.co/edit/W3rvSiVTc9JlSXM0VEu8?p=preview
Хуй знает как не двойным циклом. Я использую методы массивов для перебора всех значений + стрелки вроде бы смотрится более менее.
https://plnkr.co/edit/clsEI1LjnzrihtbLr7rO?p=preview
Так же, как и по одномерному — map, forEach, find, reduce и т.д.
Зафлаттенить и далее классическим перебором в лямбде.
Что-нибудь из лодаш-фп подойдёт, наверное.
flatMap + map
Ну так что, помощь нужна или как?
Ты просто через apt устанавливаешь? Там не догоняют наш стремительный фатигнутый мир.
Надо через скриптик накатывать:
https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
>>1088815
https://repl.it/OABN
Поставил убунту месяц назад и сам недавно через это прошел, пришлось немного повозиться чтобы установить последний, хотя это довольно просто. Тем не менее, вот что я тебе скажут, добрый мой совет, ставь винду, в линуксе в реальности надо чаще ебаться со всякой хуйней, ни фига он не удобней для вебдева, все это сказки.
Быстро же ты сдался. Сдашься один раз, будешь сдаваться всегда. Пока ты встретил небольшую трудность и сдался, что будет когда трудность будет сложнее?!
Не винда это гавно для макак, и нода тоже гавно, раз не ставится на православную Убунты с пол пинка. Буду дальше заниматься Питоном, там такой херни нет
нихуя не понимаю этих замыканий и их смысл.
проще ебаного кормана почитать и порешать задачки на алгоритмы чем понять эту злоебучую, мудренную залупень.
5 источников прочел - не могу понять, господи какое же убожество, мудрено так нахуя делать, суки ебучие, ненавижу, ненавижу блядей, шизофреническая хуета эти ваши замыкания, господи нахуя так уебишно делать, сука просто убожество, фу нахуй, фу бльдь, блюю нахуй.
Я да пробовал ставить вот этим баш скриптон, все равно в итоге версия 4.0 устанавливается
https://gist.github.com/kolosek/b166b4ba2ddcc293d06bfc9f4cdd1689
Что за левый скрипт? Если ты не смог скопировать строку и вставить в терминал, то у тебя будут большие проблемы в будущем. Правильный скрипт здесь https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions
https://github.com/nodesource/distributions#debinstall
Или скачай архивом, распакуй куда нужно, это простой рабочий способ. Инструкция https://github.com/nodejs/help/wiki/Installation
Еще можно поставить из PPA репозитория, это один из лучших способов, обновления будут автоматические, поменять версию будет не сложно. https://www.digitalocean.com/community/tutorials/node-js-ubuntu-14-04-ru
Может ты ставишь из стандартных репозиториев убунты, там всегда старые версии. Такую команду не прописывал? apt install nodejs или apt-get install nodejs
Что мудреного в том, что в функции можно использовать не только аргументы, но и переменные вне ее тела? Как вообще без этого можно что-то на JS написать?
Никто из дистровых репов не ставит.
концепция scope не только в замыканиях js используется. если ты не можешь осилить их, значит ты в принципе плохой программист.
точнее, я хотел сказать, заткнись и учи молча, животное ебаное, либо иди подметай хуйло
У каждой функции есть объект scope, в который записываются локальные переменные. Если локальной переменной с таким именем нет в scope этой функции, то функция берет объект scope высшей функции из call stack'а и пытается найти перменную с таким именем там, и так далее до глобального scope'а.
реализация кстати ебанутая
что ты блять поришь, долбоеб?
объект scope для конкретной функции создается в момент вызова этой функции. будет 10 вызовов этой функции - будет создано 10 разный скоупов.
вложенность достигается стеком.
для каждого вызова какой либо функции, текущий стек копируется, в него добавляется scope текущего вызова функции. в теле этой функции текущим стеком будет являться копия предыдущего текущего стека + scope текущего вызова.
короче вот написал хуйню, если даже так будет непонятно, то ливайте из профессии https://pastebin.com/r8NPPyz3
>>1089478
а как блять вообще this относится к замыканиям? ты что ебанутый?
у this есть наследование прототипов, которое работает по принципу скоупов, но речь то идет про замыкания так что ты долбоеб.
так же, в контексте нет упоминания о чисто функциональных приложениях, речь о понимании функционального подхода, так что ты соснул в двойне. никто не говорит писать чисто так, или чисто вот так. но знать это надо, потому что некоторые вещи делаются так, а некоторые вот так.
но вообще я делал такую хуйню может тебе понравится http://jsbin.com/rebazi/8/edit?js,output
Сколько хочешь. This же для разработчиков библиотек-структур данных. В своем коде this нужен только если ООП головного мозга накрыл полностью.
ты че, бездарность, ебальник открываешь? давай бля выкатывай свой бездарный говнокод
я третий год пишу под ios, до сих пор шарю в js лучшебольше чем обитатели этой сральни
обиженная чмоха, иди учи основы и не выебывайся, а не бомби на рандом господина
Знаешь, хотел сначала ответить даже пасту накатал, но потом решил что ну нахуй. Ты буйный какой-то.
>но вообще я делал такую хуйню может тебе понравится http://jsbin.com/rebazi/8/edit?js,output
>var
>push
>unshift
>pop
>миллионы мутаций
>еще что-то пиздит про функциональный подход
там нет this, дабумтссс
>>1089525
я называю вещи своими именами. вы ждете что я вас хвалить буду, за то что вы порете хуйню и в развитии стоите на месте?
когда я делал хуйню и мне говорили что я делаю хуйню, я был благодарен тем людям. а щас блять куда не плюнь везде дебилы, вам же даже объяснять часто бесполезно
Откуда в JS приватные методы и типы лопух.
Что за говно ты сюда принес. Очередное говно которое из JSа компилирует в JS?
1. приватные поля реализуются через переменные коструктора
2. дегенерат, это swift и я пишу под ios. ты читать научись.
>я называю вещи своими именами
Ты самоутверждаешься за счет незнакомых людей. И провоцируешь их на агрессию к себе. Вон один уже со Свифта бугуртит, кек.
>вы ждете что я вас хвалить буду
Я от тебя ничего не жду, я вообще тебя не знаю. Вряд тут кто-то ожидает похвалы от рандомного НЕБОЖИТЕЛЯ.
>когда я делал хуйню и мне говорили что я делаю хуйню, я был благодарен тем людям
Вот сейчас ты делаешь хуйню — скатываешь тред в токсичное говно. От таких людей для комьюнити больше вреда, чем пользы, даже если они хорошо программируют и дают советы по делы.
даже будучи ios-пидором, я шарю в жс лучше тебя
>>1089534
самоутверждаюсь ебана бля ага да.
я два года назад высрал это чудо вечер, просто у меня што то щелкнуло и я захотел эту поеботу сделать и сделал. http://jsbin.com/wakuru/2/edit?js
мне блять не нужно самоутверждение, я себя объективно оцениваю. я просто зашел напомнить долбоебам что ихнее место на параше
>ихнее
Правильно "иховое".
Ты такой агрессивный из-за своей подавляемой гомосексуальности, элитный маковод?
ладна давай высирай че ты там хотел высрать, обижать не буду чесна-причесна
ЖСыны, что надо чтоб зашифровать и расшифровать алгоритмом AES файл в браузере -
при помощи другого ключевого файла, как в openssl?
Я вижу всякие библиотеки AES на JS, но они только с паролем работают.
ты любой файл можешь представить в виде строки. а любой пароль это строка. соответственно, используя библиотеку АЕС ты можешь использовать любой файл как пароль, если конечно там нет ограничения на количество символов
Ну вот в обычном openssl,
по команде openssl enc -help
видно следующее:
-kfile passphrase is the first line of the file argument
Это значит, что из ключевого файла берётся первая строка.
Что с ней дальше происходит - понятия не имею, может хеш какой-нибудь от неё берётся в качестве ключа,
или сама она в виде пароля представляется.
В общем, надо в форму вгрузить два файла - один файл открытый, например музыка, другой файл -
ключевой, и это бинарник, содержащий 32 байта (256 бит) - ну потому что 256 бит AES.
Шифровать хочу алгоритмом aes-256-cbc без -salt,
чтобы побитово сравнить с файлом закриптованным с помощью openssl,
но как я уже понял, если не указывать параметр -salt в коммандной строке openssl - всё-равно он его посолит.
Но мне интересна сама реализация.
Ведь если я буду читать файл в байтовый массив, и оперировать уже блоками по 256-бит,
то что я нагорожу в своём быдлокоде будет не очень быстрым, и может ещё и буфер переполнить,
и быть может заюзать какой-нибудь curl, и забросить сам openssl в виде exe-шников в папку с html, где форма эта?
>aes-256-cbc
>если не указывать параметр -salt в коммандной строке openssl - всё-равно он его посолит
Page 2 - Method #2, the UNIX Command Line
https://www.macobserver.com/tmo/article/how-to-strongly-encrypt-a-file-for-free-in-os-x
зашифрованный файл начинается с Salted_ и даже если не указать параметр -salt,
всё-равно два зашифрованных файла - отличаются.
Можно ли вообще закинуть exe-шник openssl в какую-нибудь папку,
и вызывать его из JS, ну чтобы зашировать с его помощью файл, и вернуть его в виде ссылки?
Можно ли представить файл как поток данных, а потом зашифровать поток через openssl,
и вернуть зашифрованный поток, ну чтобы вообще не сохранять файлы там, где хостится JS c этим openssl?
Не нашёл способа подключить CryptoJS к HTML-файлу, даже вот это не работает:
http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js
Есть у кого AES на JS в ZIP'e?
Я решил проблему метод SetCount перенес в контролер и добавил в каждый метод on('click') $scope.$apply();.
>Вот сейчас ты делаешь хуйню — скатываешь тред в токсичное говно.
Подожди, то есть ты считаешь что лучше пусть в треде будем много няшных долбоёбов безруких чем токсичные, но неплохие специалисты?
Бля, тебе лечиться надо. У нас тут нет демократии, кто прав тот прав, а не кого больше тот прав.
Ну отлавливай там всякие события плеера, например. https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Media_events
Не нашёл AES encryption и decryption файлов на JS. В ZIP-e - тем более.
Нашёл вот такое: http://aes.online-domain-tools.com/ но оно не сохраняется, блядь.
Перерыл пол рунета, но не нашёл ничего более годного чем это https://etherhack.co.uk/symmetric/aes/aes.html
Просто hex в hex шифрует и расшифровывает. Но цифертекст тут каждый раз разный, что говорит о смене вектора инициализации.
Но как вытащить оттуда JS - ума не приложу.
Попробовал зашифровать hex-строку через CryptoJS, в итоге получил шифртекст намного большей длины:
message: 59678556102144ae95741ca84617a920cff93ca9fd11c46979cc1944422aca5a
cipherData: 3Vrz6Mlpsp2KbackEjZFGhg0AH1ruMHBhteuKxFxoRUim49t31AkNkZn5Od3ho1onRAdTvsxovsbUtH+Rs3GcrUkbhm55RajcBfDxx/AxoQ=
cipherHex: dd5af3e8c969b29d8a6da7241236451a1834007d6bb8c1c186d7ae2b1171a115229b8f6ddf5024364667e4e777868d689d101d4efb31a2fb1b52d1fe46cdc672b5246e19b9e516a37017c3c71fc0c684
data: 59678556102144ae95741ca84617a920cff93ca9fd11c46979cc1944422aca5a
data1 59678556102144ae95741ca84617a920cff93ca9fd11c46979cc1944422aca5a === message 59678556102144ae95741ca84617a920cff93ca9fd11c46979cc1944422aca5a
Я знаю, что AES - алгоритм блочного шифрования, и он имеет свой размер блока.
Если я ввожу 256-бит в виде HEX'a, то наверняка я должен был бы получить 256-бит шифротекста.
Такая длиная строка цифертекста говорит об избыточных вычислениях, и большом енкрипт-файле в перспективе.
Там используется wordarray, и чтоб получить hex из base64 мне пришлось переводить его в строку.
hex = cipherData.toString();
hex = CryptoJS.enc.Base64.parse(hex);
document.write("cipherHex: "+hex+"<br>");
Ну и как читать файл в hex, а уж тем более в base64 - в душе не ебу.
Не нашёл AES encryption и decryption файлов на JS. В ZIP-e - тем более.
Нашёл вот такое: http://aes.online-domain-tools.com/ но оно не сохраняется, блядь.
Перерыл пол рунета, но не нашёл ничего более годного чем это https://etherhack.co.uk/symmetric/aes/aes.html
Просто hex в hex шифрует и расшифровывает. Но цифертекст тут каждый раз разный, что говорит о смене вектора инициализации.
Но как вытащить оттуда JS - ума не приложу.
Попробовал зашифровать hex-строку через CryptoJS, в итоге получил шифртекст намного большей длины:
message: 59678556102144ae95741ca84617a920cff93ca9fd11c46979cc1944422aca5a
cipherData: 3Vrz6Mlpsp2KbackEjZFGhg0AH1ruMHBhteuKxFxoRUim49t31AkNkZn5Od3ho1onRAdTvsxovsbUtH+Rs3GcrUkbhm55RajcBfDxx/AxoQ=
cipherHex: dd5af3e8c969b29d8a6da7241236451a1834007d6bb8c1c186d7ae2b1171a115229b8f6ddf5024364667e4e777868d689d101d4efb31a2fb1b52d1fe46cdc672b5246e19b9e516a37017c3c71fc0c684
data: 59678556102144ae95741ca84617a920cff93ca9fd11c46979cc1944422aca5a
data1 59678556102144ae95741ca84617a920cff93ca9fd11c46979cc1944422aca5a === message 59678556102144ae95741ca84617a920cff93ca9fd11c46979cc1944422aca5a
Я знаю, что AES - алгоритм блочного шифрования, и он имеет свой размер блока.
Если я ввожу 256-бит в виде HEX'a, то наверняка я должен был бы получить 256-бит шифротекста.
Такая длиная строка цифертекста говорит об избыточных вычислениях, и большом енкрипт-файле в перспективе.
Там используется wordarray, и чтоб получить hex из base64 мне пришлось переводить его в строку.
hex = cipherData.toString();
hex = CryptoJS.enc.Base64.parse(hex);
document.write("cipherHex: "+hex+"<br>");
Ну и как читать файл в hex, а уж тем более в base64 - в душе не ебу.
Зачем ты мне предлагаешь выбор из двух хуевых крайностей? Демократию еще приплел откуда-то.
Я считаю, что хорошему специалисту не обязательно быть полным мудаком и называть всех вокруг дебилами. Это приносит больше вреда, чем пользы. И действительно крутым ребятам (Абрамов, Ситник и т.д.) их скиллы почему-то не мешают вести себя нормально.
var name = array[5];
Если учесть, что array может оказаться пустым или вообще null? Тернарный оператор юзать? Типа (array != null && array[5]) ? name = array[5] : undefined; или что-то вроде?
>>1089758
Шо ни у кого нет AES для файлов на JS что-ли, блядь?
Мне его что кривыми руками с отрозшими ногтями, тыкая пальцами в кнопки - самому быдлокодить?
Нашёл вот это: https://infotechinc.github.io/symmetric-encryption-in-browser/
но здесь надо какое-то непонятное WebCryptography API.
Его что в браузер надо ставить? Можно ли его в виде JS-файлов подключить?
const name = (array || [])[5];
var array = [0, 1, 2, 3, 4, 5];
Array.isArray(array) && array.length > 5 && array[5] || undefined
все остальные животные и написали хуйню
Сам ты животное. И код твой говно.
По пунктам:
0) твой код плохо читается
1) undefined никто не присваивает, это вроде как канон. Присваивают null
2) Если array[5] не определен, то сработает второе условие, присвоится undefined. С-но, твой код избыточен. То же самое про проверку на длину. Она не нужна.
3) Самое главное. Он содержит баги. Если у тебя 0 в array 5, то сработает undefined. Руки отрывать за это.
Все тот же джун, работаю второй месяц
Читал Кантора. Читал про реакт Стоянова и еще по мелочи немного. Еще осилил курс Programming languages от Дэна Гроссмана, но там не совсем про js, а скорее общие принципы. Читал SICP, но страниц сто прочел и отложил пока. Позже вернусь.
Сейчас тимлид хвалит меня за дотошность и ругает за хуевые архитектурные решения. В большинстве случаев он оказывается прав, и аргументированно показывает, что я сделал хуйню. Что бы почитать такого, чтобы перестать быть макакой, а стать нормальным программистом-архитектором, способным спроектировать и реализовать сложную структуру?
Долго работу искал? Вышка по специальности или просто вкатился?
> 1) undefined никто не присваивает, это вроде как канон. Присваивают null
мне похуй. я просто показываю возможность установки дефолтного значения.
> 2) Если array[5] не определен, то сработает второе условие, присвоится undefined. С-но, твой код избыточен. То же самое про проверку на длину. Она не нужна.
она нужна, потому что вместо undefined я должен вернуть дефолтное значение.
>3) Самое главное. Он содержит баги. Если у тебя 0 в array 5, то сработает undefined. Руки отрывать за это.
это не баг, а тест на дегенератов. с одной стороны ты заметил недостаток, с другой ты не понял, что этот недостаток легко фикситься.
>0) твой код плохо читается
че блять. перепиши мой код на if else, и подумай еще раз. a && b сложно для него ну пиздец.
вот блять специально для тебя правлю код
var array = [0, 1, 2, 3, 4, 5];
var defaultValue = 1;
[defaultValue, array[5]][Array.isArray(array) && array.length > 5 && isFinite(array[5]) | 0];
Тред не читал
let name = array[5] ? : array[5] : 'Anonymous'
Но вообще это какой-то хуевый код, когда приходится тащить именно пятый элемент и непонятно есть он нет.
Еще можно использовать деструктуризацию, типа
let [birthdate, first_name = 'Anon'] = array
Если у тебя идет имя вторым элементом, например. Анон - дефолтное если его нет. Так по хипстеркси.
вот написал вариант для школьников, которым СЛОЖНО, РУКИ ОБЛОМАТЬ, ну короче которые еще не созрели для нормального кода:
var unwrap = (optional, defaultValue) => optional !== undefined && optional !== null ? optional : defaultValue;
var array = [1, 2, 3, 4, 5];
unwrap(array[5], "пусто");
>это не баг, а тест на дегенератов.
Именно, вот мы тебя и выявили.
>>1089977
И снова ты свой тест провалил! Вся заварушка началась как раз из-за того, что array может быть не определён и попытка его индексировать вызвала бы ошибку, а ты вот прямо array[5] и хуяришь в функцию. Какой уже смысл там что-то проверять-то.
Ты, кстати, не из тайпскрипта или чего подобного вылез? Нахуя, блядь, проверять, что это Array и что у него есть длина и она больше 5? Ничего этого в условиях не было, можешь у него вообще там обычный объект с цифровым ключом, который он случайно array'ем назвал.
Внезпно кстати, у всех строк есть прототип String, у которого есть метод length, так что строка может быть с длиной и больше пяти. Парам па пам, вью!
Строка.
Под капотом интерпретатор попытается преобразовать массив к числу методом valueOf, но так как у массива он возвращает сам массив, а не примитив, то интерпретатор обратится к toString, соответственно произойдет конкатенация числа и строкового представления массива.
https://stackoverflow.com/questions/47222568/can-i-use-hoc-to-wrap-component-with-graphql-and-redux
а че я тогда тока што в консоле сложил, и строка сконкатенировалась с последним значением в массиве?
Примеры есть, и немало.
>>1090067
Что значит "с последним значением"? У тебя отдельно приводится к строке число, отдельно массив, затем они конкатенируются. Например, массив [1,2,3] сначала приведется к строке "1,2,3". Затем к этой строке приклеивается приведенное к строке число, например "5" и получается "1,2,3" + "5" // "1,2,35"
Все правильно.
Вопрос повторяется из треда в тред. Ребята, вот исчерпывающий алгоритм.
Желающим вкатиться джуном, имея нестандартные статы (седой олдфаг, синдром Аспергера, маргинальная биография, проживание в глубокой мухосрани и все прочее в таком же духе), нужно сделать так:
1) Два-три месяца вложиться по максимуму.
2) Нанять ментора, который поможет подтянуть пробелы в знаниях и найти работу. Сайтов, предлагающих подобные услуги, довольно много.
Принцип касается не только js, и даже не только программирования. Он универсален.
Хотите мнение? Вы задумали в принципе далеко не самую умную затею. На моих глазах около десятка парней в возрасте за 30, как и Вы, пытались начать все с нуля, освоить программирование, получить хорошую работу с хорошей ЗП и в перспективе уехать за рубеж. Знаете скольким это удалось? Никому! Основная причина - очень высокий порог вхождения при низкой усвояемости нового материала после 30-и, попросту говоря - не осилили. Даже если и осилите, дальше что? Все двери перед Вами распахнутся? Да не тут-то было! Сегодня типлиды кругом 25-30 лет, 30+ уже ПМ. Дядя, ты куда прешь?!(с) Даже многие программисты с хорошим бэкграундом, которые уехали за рубеж после 30-и в итоге там переучивались в водителей погрузчиков, т.к. по специальности устроиться не смогли.
Возможно Вы уникум и у Вас все получится, буду за Вас искренне рад, но статистика вещь упрямая.
В таком возрасте если и начинать все с нуля, то нужно выбирать не инструмент а направление деятельности в котором хотите развиваться, изучать предметную область, затем уже и об инструментах можно подумать, точнее они сами к Вам придут.
Но если у Вас идея фикс, то что могу посоветовать... да ничего не могу посоветовать, т.к. особых предпочтений Вы так и не высказали и с предметной областью как понимаю не определились. Из всех перечисленных технологий, можно только с уверенностью сказать что Java и через 10 и через 20 лет будет на плаву, т.к. это в первую очередь крупный ентерпрайз, там все относительно статично. Но не завоете ли Вы волком через полгода клепая в эклипсе очередной 100500-й класс?
Среди этих 30 летних были молодые и шутливые, слушающие яниксов, стригущиеся в барбершопах и вот это все. Или это все было прям совсем мужичье которому уже нихуя в жизни не интересно?
Какая разница-то?.. Количество ключевых слов в том же JS давно вышло за все мыслимые пределы (а в вакансиях требуют ещё и серверные языки, при этом з/п часто как за один), и как огромный снежный ком — растёт и растёт.
Мне кажется у меня в 17 мозг был более закостенелый, чем в 27. Я тогда не мог даже понять как циклы работают, ни как мир устроен.
Полез в код страницы - там адский нечитаемый пиздец. Проебался хуй знает знает сколько времени, пытаясь найти где у этого говна начала, а где конец, пока не убедился что вся внутренная логика через хуй проссышь какую жопу завернута в замыкания, и до скоупа в котором она живет мне тупо не добраться. Хуй с ним, прокликаю по кнопочкам, да захуярю что нужно в value нужных инпутов... Да вот только этот реакт работает со своим виртуальным домом, на то что реально нарисовано на странице он хуй ложил. Ладно, захуюрю ему чейдж эвентов... на которые ему тоже совершенно похуй - эвенты в нём тоже свои. Пришлось дрочиться подбирая такой порядок эвентов и ввода данных при котором он воспринимал это как реальный ввод. Для textarea, например, вышло фокус\установка значения\инпут\блюр. Строго, блядь, в этом порядке. Шаг в сторону - и нихуя уже не сработает. Для других инпутов уже другой, блядь, порядок эвентов. И закончилось всё это тем что последнему особо злоебучему импуту пришлось даже кейкоды засылать. Что, к слову, нихуя не кросбраузерно, и рабочее решение нашлось далеко не сразу.
В итоге на юзерскрипт из какой-то сраной сотни срочек ушла вся ёбаная ночь, до сих пор еще задница не остыла.
И это при этом что я далеко не жс-хейтер, скорей наоборт - постоянно его использую, и считаю отличным языком. Но, блядь, не в вебе. Там ад израиль.
Это паста? Мы говорим немного о разном. С тем, что мозги после 30 работают хуже, никто не спорит. Пик интеллектуальной формы человека -- 22 года. Мнение основано на наблюдениях за взлетом топ-шахматистов.
Понятно, что если начал в 30, то Кармаком ты вряд ли станешь. Но не так уж и сложно стать середнякаом, зарабатывать пару тысяч грина в месяц и жить на каких-нибудь теплых островах Тихого океана. И эта жизнь будет гораздо счастливее жизни большинства людей.
Мой совет был направлен в сторону тех людей, у кого с мозгами все хорошо, но которым отказывают в работе по формальным критериям.
> многие программисты с хорошим бэкграундом, которые уехали за рубеж после 30-и в итоге там переучивались в водителей погрузчиков
Что это вообще за хуйня? Программист с хорошим бэкграундом может работать удаленно.
Конечно можно. Все зависит от тебя. Почитай https://joisadler.me/posts/ чувак пока не устроился, но очень сильно прокачался. Другие уже устроились на работу, но блогов не ведут.
Занимаются по этим курсам https://goo.gl/keMtwT
Дибилы блядь! Нахуя уезжать? Работай удаленно, получай в баксах и плати свои 13%.
> плати свои 13%
Зачем? До пенсии все равно не доживешь. А если и доживешь выгоднее эти 13% положить на валютный депозит или в битки.
Иначе атата и здоровым точно не доживешь.
И что? Работает же. Люди успешно обучаются и устраиваются на работу.
>плати свои 13%
Это только на доходы 13%. А еще пенсионный взнос, страховой, и еще всякие другие. Выходит около 50%.
Нахуя уезжать -- давай не будем это здесь обсуждать, хорошо? Чтобы избежать оффтопика и потенциальных срачей на темы, не имеющие отношения к программированию.
Важно иметь достаточную профессиональную квалификацию, для того чтобы был выбор, уехать или оставаться. И очень плохо, когда такого выбора нет.
1) Кому нужно, мы все уже здесь.
2) Лучший путь обучения - самообразование + практика.
Ни одного раза какой-либо старый/молодой долбаеб мне не объяснил лучше, чем написано в книге или документации.
>>1090066
Вкатился в 27, уже год работаю JS/HTML/PHP/NGINX/APACHE/VMware макакой. Потихоньку жалею и учу Python, чтобы свалить из этого ада с легаси говном на PHP5.2, где все перемешанно, где переменные именуют одной буквой. Лучше бы я вагоны разгружал, чесслово. Но у меня бекграунд был математический, прошлая профа - исследователь в НИИ. Из программирования, в школе BASIC (GOTO пацан, дада). В универе решал всем неосиляторам лабы по дискретке на паскале, стеки/очереди/кучи там. всякие. Так что я тот еще мамкин умница. На все обучение HTML/CSS/JS/PHP ушло 2 месяца.
а если вместе с бекграундом?
Нужно не по времени ориентироваться, а по достигнутым результатам.
Кто-нибудь может написать нечто подобное для файлов >>1089833
но без Web Cryptography API, или же подключить его в виде JS-файлов,
наверняка оно есть в JS.
Только я вижу там в исходном коде используется AES-128, а надо AES-256-CBC,
чтобы размер блока и длина ключа была 256 бит.
Нашёл PDF-ку какую-то там внизу листинг кода JS: https://www.theseus.fi/bitstream/handle/10024/92960/Web_Cryptography_API_Luoma-aho.pdf
Не пойму, это расширение к браузеру или его можно в JS-файл запхнуть и подключить как скрипт?
Ты листал pdf и не удосужился понять о чем он?
Это какой то модуль, для сервера, или хз. Код есть на гитхаб https://github.com/webcryptoapiex/secretnote
Скрипт из пдф https://github.com/webcryptoapiex/secretnote/blob/master/public/js/modules/utils.js
Обычный код. Краткая форма этого:
if(parent.app){
var app = parent.app
} else {
parent.app = {};
var app = parent.app;
}
Короче, после всего этого - в голову приходит то, что проще всего было бы как-то подключать обычный exe-шник:
запустив для шифрования его при помощи ссылки в html
например командой "openssl enc -aes-256-cbc -salt -in secret.txt -out secret.enc -k password",
и после выполнения шифрования на сервере - просто выдать ссылку на файл:
как вот тут вот, когда файл шифруется: >>1089833 (там ссылка появляется).
Но тогда, эта хрень не будет пахать в линупсах, маках, юнихах и андройдах всяких, если она вообще будет пахать.
Как это сделать - непонятно, там вроде-бы надо прописывать полные пути, а относительные не канают,
а хочется портабельную шифровалку файлов в браузере 256-битным ключём (32 байта),
ну чтоб носить её можно было от браузера к браузеру - в виде zip-архива с js-файлами и html-страницей,
подключающей их, ну и чтобы расшифровывать можно было этой шнягой.
Можно поставить ограничение на размер шифруемого-дешифруемого файла,
потому что я вижу там base64 юзается во многих всяких CryptoJS, где AES есть,
как тут например, когда в hex переводится файл: http://tomeko.net/online_tools/file_to_hex.php?lang=en
но лучше было бы представить читаемый файл в виде потока,
и шифровать уже поток неограниченной битности, просто зациклив шифрование последовательно-подающихся блоков инфы
а вот уже выходные данные - писать в файлы неограниченного размера,
не обязательно сохраняя в на сервере, а отдавая, например его - по мере закачки исходного файла.
Ну и конечно же не обязательно чтобы был сервер - ещё лучше чтобы можно было из папки открыть html,
вгрузить туда зашифрованный файл, ввести пароль, получить с него ключ,
и по мере загрузки, скачивать расшифрованный файл.
Не нашёл ничего подобного в Инете, поэтому я и тут.
Ты хочешь написать шифровальщик без сервера? Его взломают через секунду. Как ты собрался подключать экзэшник?
>Ты хочешь написать шифровальщик без сервера?
Взломать шифровальщик всё-равно что взломать алгоритм шифрования.
Более того, если нет сервера, то и передавать на сервер ничего не надо, а значит и перехватить нифига нельзя.
Как подключать? Ну я не знаю, вот так как-то что-ли:
https://stackoverflow.com/questions/4252913/open-an-exe-file-through-a-link-in-a-html-file
Хотя, конечно лучше было бы юзать какие-то JS-крипторы, представляя файл как поток данных.
Есть же видео-трансляции зашифрованные, в том же скайпе, например.
Там файлы не юзаются - там видеопотоки.
Я бы посмотрел в сторону меги, как там реализовано. У них же вроде шифрование идёт на стороне браузера.
Собсно да - уточнил в википедии.
>Mega шифрует весь контент прямо в браузере с помощью алгоритма AES
>шифрование происходит на стороне клиента при помощи javascript
Ну вот и сходи посмотри на их код.
>Ну вот и сходи посмотри на их код.
Так они тебе его и показали. Там скорее всего обфусцировано все до полной нечитабельности.
>Так они тебе его и показали.
Браузерный жабаскрипт. Берешь и читаешь, даже спрашивать не надо.
Я думаю что он и должен быть не сильно обфусцирован - это же их киллер фича, то что кто угодно омжет убедится в надёжности шифрования. А с обфусцированным кодом теряется весь смысл.
>Я бы посмотрел в сторону меги, как там реализовано.
>Ну вот и сходи посмотри на их код.
Там неведомое творится в коде. Во-первых нельзя глянуть - правый клик не работает.
Во-вторых регистрация надо, в третьих дофига скриптов всяких подключено.
>>1090417
>Mega шифрует весь контент прямо в браузере с помощью алгоритма A
AES'ы бывают разные. AES-128-CTR, например.
Мне же надо AES-256-CBC, как в openssl.
Единственное что нашёл, рабочее в браузере - так это вот: https://gist.github.com/rootsher/c0377faeb89cae491358
А вот проверка дешифрования - в посте (первый ответ):
http://www.itgo.me/a/6204436090760439940/decrypting-aes-256-cbc-salted-ciphertext-with-javascript
Только там надо содержимое зашифрованного файла преобразовать в base64-строку для дешифрования.
Как же юзать всё это добро?
1. С гитхаба (ссылка выше) - копируется код, сохраняется в СryptoJS.js
2. Создаётся некий файл index.html рядом, а внутри помещается код:
<script src="Crypto.JS"></script>
<script>
var dec = CryptoJS.AES.decrypt("U2FsdGVkX1/oA4O+uXXBXAjAenRJwpUV4UqQp4aYCpk=", "password");
var plaintext = CryptoJS.enc.Latin1.stringify(dec);
document.write(plaintext); //Message
</script>
3. Открыв его в браузере - можно видеть исходный Message.
4. Ну а дальше уже это всё портабельно, и можно это всё таскать на какой-нибудь флешке, например.
Можно ещё вот так делать:
var cipherData = CryptoJS.AES.encrypt(word_array, key, { iv: iv }); //где key и iv - 16-ти байтные значения ключа и вектора инициализации.
Но здесь уже размер блока я вижу 128 байт. Если длину ключа увеличить до 256 бит - размер блока всё-равно 128 бит.
К тому же шифровать можно только строки в base64, и текст.
Выше - дешифрование идёт паролем, и это - посоленный файл (Salted_).
Нахрена мне это всё вообще? А хочу использовать для шифрования и дешифрования ключевой файл с 256-битным ключём,
который можно указать в случае использования openssl параметром -kfile
Это уж точно не пароль, и не всегда его данные могут быть представлены в виде символов,
хотя если набрать в консоли "openssl enc -help" видно что первая строка ключевого файла используется - именно как пароль.
>Я бы посмотрел в сторону меги, как там реализовано.
>Ну вот и сходи посмотри на их код.
Там неведомое творится в коде. Во-первых нельзя глянуть - правый клик не работает.
Во-вторых регистрация надо, в третьих дофига скриптов всяких подключено.
>>1090417
>Mega шифрует весь контент прямо в браузере с помощью алгоритма A
AES'ы бывают разные. AES-128-CTR, например.
Мне же надо AES-256-CBC, как в openssl.
Единственное что нашёл, рабочее в браузере - так это вот: https://gist.github.com/rootsher/c0377faeb89cae491358
А вот проверка дешифрования - в посте (первый ответ):
http://www.itgo.me/a/6204436090760439940/decrypting-aes-256-cbc-salted-ciphertext-with-javascript
Только там надо содержимое зашифрованного файла преобразовать в base64-строку для дешифрования.
Как же юзать всё это добро?
1. С гитхаба (ссылка выше) - копируется код, сохраняется в СryptoJS.js
2. Создаётся некий файл index.html рядом, а внутри помещается код:
<script src="Crypto.JS"></script>
<script>
var dec = CryptoJS.AES.decrypt("U2FsdGVkX1/oA4O+uXXBXAjAenRJwpUV4UqQp4aYCpk=", "password");
var plaintext = CryptoJS.enc.Latin1.stringify(dec);
document.write(plaintext); //Message
</script>
3. Открыв его в браузере - можно видеть исходный Message.
4. Ну а дальше уже это всё портабельно, и можно это всё таскать на какой-нибудь флешке, например.
Можно ещё вот так делать:
var cipherData = CryptoJS.AES.encrypt(word_array, key, { iv: iv }); //где key и iv - 16-ти байтные значения ключа и вектора инициализации.
Но здесь уже размер блока я вижу 128 байт. Если длину ключа увеличить до 256 бит - размер блока всё-равно 128 бит.
К тому же шифровать можно только строки в base64, и текст.
Выше - дешифрование идёт паролем, и это - посоленный файл (Salted_).
Нахрена мне это всё вообще? А хочу использовать для шифрования и дешифрования ключевой файл с 256-битным ключём,
который можно указать в случае использования openssl параметром -kfile
Это уж точно не пароль, и не всегда его данные могут быть представлены в виде символов,
хотя если набрать в консоли "openssl enc -help" видно что первая строка ключевого файла используется - именно как пароль.
>Во-первых нельзя глянуть - правый клик не работает
Ясно всё с тобой.
Какой тебе нахуй шифрование? Винраром шифруй.
>Браузерный жабаскрипт. Берешь и читаешь, даже спрашивать не надо.
>>1090441
>Там неведомое творится в коде. Во-первых нельзя глянуть - правый клик не работает.
>Во-вторых регистрация надо, в третьих дофига скриптов всяких подключено.
Что и требовалось доказать. Хлеб свой они никому не отдадут без боя.
Да не нужна там никакая регистрация. Файлы с меги и без регистрации скачиваются. И, разумеется, они при этом расшифровываются.
Я не могу? У вот тут отлично документированный сорец, даже, блядь, с комментариями.
В то время как у тебя правый клик не работает. Ни и о чем тут дальше говорить можно?
Да блядь, что вы мне эти коды ебучие в браузерах тычите, я не спец нихуя их ещё инклюдить надо правильно.
Ещё дали бы мануал описания самого стандарта AES, чтобы самому исходник на его основе писать...
Я же хочу всё и сразу - а именно поточное шифрование на лету
четырёх-терабайтного бекапа жесткого диска, а не какие-то пиздюрки по 1 МБайт,
да ещё и на JS, и ещё и в браузере - ну чтобы вы все вообще охуели.
>>1090441
Кстати, это:
>1. С гитхаба (https://gist.github.com/rootsher/c0377faeb89cae491358) - копируется код, сохраняется в СryptoJS.js
>2. Создаётся некий файл index.html рядом, а внутри помещается код:
><script src="Crypto.JS"></script>
не работает, проверил. У меня немного другой Crypto.JS и он нормально инклюдится.
Вот, собственно и js и index.html http://rgho.st/8WvsljSjJ Но тут только строки в base64 енкрипт и декрипт.
>Винраром шифруй.
>WinRAR uses AES-256 in CTR
Дай командную строку что-ли, для aes-256-CBC у винрара,
да ещё и чтобы можно было ключ и вектор инициализации в виде бит пихнуть туда.
Ну и конечно же портабельность у винрара не ахти.
>>1090453
Говоришь так, как будто с меги мне качается encrypted file, а потом расшифровывается у меня же браузером.
>>1090460
Этот сорец и те функции что там - вообще ну ни прям ни о чём мне не говорят.
Непонятно что туда заходит, буфер или поток, или байты, или массив бля.
Вывести же нельзя это и пощупать, так сказать...
Да блядь, что вы мне эти коды ебучие в браузерах тычите, я не спец нихуя их ещё инклюдить надо правильно.
Ещё дали бы мануал описания самого стандарта AES, чтобы самому исходник на его основе писать...
Я же хочу всё и сразу - а именно поточное шифрование на лету
четырёх-терабайтного бекапа жесткого диска, а не какие-то пиздюрки по 1 МБайт,
да ещё и на JS, и ещё и в браузере - ну чтобы вы все вообще охуели.
>>1090441
Кстати, это:
>1. С гитхаба (https://gist.github.com/rootsher/c0377faeb89cae491358) - копируется код, сохраняется в СryptoJS.js
>2. Создаётся некий файл index.html рядом, а внутри помещается код:
><script src="Crypto.JS"></script>
не работает, проверил. У меня немного другой Crypto.JS и он нормально инклюдится.
Вот, собственно и js и index.html http://rgho.st/8WvsljSjJ Но тут только строки в base64 енкрипт и декрипт.
>Винраром шифруй.
>WinRAR uses AES-256 in CTR
Дай командную строку что-ли, для aes-256-CBC у винрара,
да ещё и чтобы можно было ключ и вектор инициализации в виде бит пихнуть туда.
Ну и конечно же портабельность у винрара не ахти.
>>1090453
Говоришь так, как будто с меги мне качается encrypted file, а потом расшифровывается у меня же браузером.
>>1090460
Этот сорец и те функции что там - вообще ну ни прям ни о чём мне не говорят.
Непонятно что туда заходит, буфер или поток, или байты, или массив бля.
Вывести же нельзя это и пощупать, так сказать...
Вчера всю ночь рыл интернет, наткнулся на очередной CryptoJS-master,
там внутри какой-то bower.json, батники, и ни одного index.html.
Ещё видел .coffee файлы - и ни один JS в папке lib не инклюдится.
Пишет require undefined.
>Говоришь так, как будто с меги мне качается encrypted file, а потом расшифровывается у меня же браузером.
Ты не поверишь...
Не я писал про правый клик. Мой посыл в том, что вместо болтовни взял бы и сделал.
Любой каприз за ваши деньги. Пиши чёткое ТЗ - получишь ценник. Или по твоему я должен подорваться, и из доброты душевной тебе что-то пилить начать?
>Ты не поверишь...
Там Web Cryptography API случайно не надо?
Потому что на компе у меня открывает ссылку вот это и шифрует нормально в браузере >>1089833
но оно ж не портабельное нифига, раз там надо Web Cryptography API.
На ноуте не открывается, и я так подозреваю, что если вытащить с меги скрипты эти с АЭС,
они тоже не будут работать на голом JS. Где-нибудь в коде, за может закрасться какое-нибудь:
// Check that web crypto is even available
if (!window.crypto || !window.crypto.subtle) {
alert("Your current browser does not support the Web Cryptography API! This page will not work.");
return;
}
Если уж за деньги, то проще их направить куда-то в сторону "AES 256 Hardware Encryption".
Пикрелейтед. Но я ж вам хочу мозги поебать чуток, быдлокодингом.
Портабельность такой железяки - самое то, но эта железяка портабельная до поры до времени - т. е.
пока она не накроется медным тазом.
А вот исходник можно на торренты залить и сделать всеобщим достоянием, если не стандартом.
Лучше, конечно. В качестве бюджетного решния можно даже взять обычную флешку, и засунуть на неё gpg с парой батников.
Но и у нас найдутся занятия получше, чем пилить законченные решения для какого-то мимохуя закатившегося поебать нам мозг.
Здесь тебе могут подсказать в какую сторону самому копать(например ткнуть в сорец меги). Но никто ничего для тебя делать не будет, уж точно не за сотни нихуя.
>взять обычную флешку, и засунуть на неё gpg с парой батников
И обычный openssl тоже бы сошёл.
Ладно, вали.
Тащем-та я хотел запхнуть aes-256 в этот brainwallet >>1087382
Ну, чтоб шифровать файлы всякие sha-256 хешем от приватного ключа - в качестве ключа шифрования,
и чтоб можно было, введя пароль - скачать ключевой файл с 32-мя байтами внутри,
имея в дальнейшем возможность использовать его для шифрования-дешифрования файлов,
с помощью openssl, указав его параметром -kfile
А то ну что ж это такое - криптовалюты есть, а криптования инфы нет, только цифровая подпись по ECDSA.
Я где-то ещё слышал есть ECC, но там инфу точками на эллиптической кривой представляют,
а они в два раза больше исходного сообщения, так как имеют две коррдинаты.
await
Сейчас бы на дваче с анонами попиздеть. Себя посамовнушать. Классика.
>>1090295
Два месяца. Чисто основы PHP/HTML/CSS/JS. Без препроцессоров, фреймворков, серверов, гитов, ES6 и прочей хуйни которая пришла уже на работе. Из бекграунда была только дискретка в вузе лабы на паскале и сданые кандидатские минимумы по английскому.
Не умеешь ты себя продавать. Твое поведение отталкивает. Нанимать тебя никто не будет.
С чем?
Для простоты понимания принято располагать функции по убыванию абстракции. Но как быть, если такие функции ветвятся?
const F = () => A() + B()
const A = () => a1() + a2()
const a1 = () => aa1() + aa2()
const aa1() = () => ()
const aa2() = () => ()
const a2 = () => ()
const B = () => b1() + b2()
const b1 = () => ()
const b2 = () => ()
Или лучше группировать по уровням абстракции?
F, A, B, a1, a2, b1, b2, aa1, aa2
Как понятней по мнению анона?
Очевидно, что если каждую ветку вынести в какой-нибудь модуль, то проблемы не будет.
Обосрался с const, там TDZ будет. Представьте как function declaration.
Зарплаты программистам резко подешевели. Выкатывайтесь быстрее, иначе хуй куда устроитесь, ща будет наплыв бывших программистов на всякие стройки и заводы.
АКЦИИ КРУПНЕЙШИХ IT КОМПАНИЙ СТРЕМИТЕЛЬНО ПАДАЮТ, НЕ ВЕРИТЕ ПОСМОТРИТЕ САМИ
В очередной раз набигает школотун, попутавший причину со следствием.
При чём здесь акции в Америке и занятость в роиссе?
Ахтунг алярма, ага. Дави конкурентов в зародыше.
@
5 часов решал задачу уровня HARD, вьебал там рекурсию
Первый кейс выполняется! Замечательно, отправляешь свой код
@
Abort Called, FAQ говорит что у тебя обучение по ресурсам.
@
...
Не больно то и хотелось.
?Пидоры*
Не надо нифига уже. Я сам нашёл вот это:
https://tutorialzine.com/2013/11/javascript-file-encrypter
Скачал, работает. Но там кнопок дофига и интерфейс меняется, надо делать пару телодвижений.
Работает без Web Cryptography API, правда там используется HTML5 FileReader API
Зашифрованный файл содержит в себе base64 начинается с "U2FsdGVkX1" и это "Salted__"
в обычном тексте, так что думаю не проблема будет записать в него исходный код без base64.
Ну и расшифровать его с помощью openssl тоже думаю можно будет,
ведь файл шифруется паролем. К тому же, поскольку 32 байта в первой строке ключевого файла,
openssl использует как пароль, я думаю его можно просто вот так взять, спарсить и указать в виде пароля.
Но дело в том, что код зашифрованных файлов отличается, поскольку они salted,
криптор его солит как-бы, каждый раз с новой солью, а хотелось бы указать ключ и вектор в виде байт,
и сформировать его из ключа, например ключ - сами байты, вектор инициализации - хеш их.
В общем, буду перепиливать, если конечно - не заебёт, и впадло не станет.
Вижу там тоже лимит на 1 мегабайт, и если попытаться вгрузить файл побольше - вылазит окно.
Там прямо так и пишется, что браузер может зависнуть, потому что шифрование идёт прямо в браузере.
С использованием FileReader API в виде объекта: var reader = new FileReader();
Там в статье, написано вот что:
The way around this would be to use the File System API and to write the actual binary data there, but it is supported only in Chrome for now.
Но у меня и в мазиле это работает.
В общем, зашифровал паролем password
файл sercret.txt с текстом "secret секрет"
- получил на выходе файл secret.txt.encrypted с текстом
U2FsdGVkX189UYsc7z4Ps2FPDSiOGW30MmD4afrLq9CI52QeQMbejwR/hh6PSFye4vxyLu2vsG1hyZy43OOvLQLxVMs0BZuNu5ka8mFJuOA=
Решил избавится от base64...
Прописал в файле script.js вместо этого:
a.attr('href', 'data:application/octet-stream,' + encrypted);
вот это:
a.attr('href', 'data:application/octet-stream;base64,' + encrypted);
После повторного шифрования того же sercret.txt
получил другой secret.txt.encrypted с тектом "Salted__ҐL-хwжЇ®дтnћ$U>Пr#1tЭnІїТhнИU‹f"
Затем решил декриптнуть его но уже с помощью openssl:
>openssl enc -d -aes-256-cbc -in secret.txt.encrypted > secret.txt -k password
В итоге, получил на выходе файл secret.txt
с текстом: "data:text/plain;base64,c2VjcmV0INGB0LXQutGA0LXRgg=="
Скопировал из него вот эту вот хуйню: "c2VjcmV0INGB0LXQutGA0LXRgg=="
и понёс её сюда: http://www.motobit.com/util/base64-decoder-encoder.asp
не забыв ткнуть radio там - в decode и вижу "secret Ñекрет"...
Этот криптор два раза в base кодирует бинарную инфу, поэтоу и избыточность тут нехилая.
Такие дела...
Вижу там тоже лимит на 1 мегабайт, и если попытаться вгрузить файл побольше - вылазит окно.
Там прямо так и пишется, что браузер может зависнуть, потому что шифрование идёт прямо в браузере.
С использованием FileReader API в виде объекта: var reader = new FileReader();
Там в статье, написано вот что:
The way around this would be to use the File System API and to write the actual binary data there, but it is supported only in Chrome for now.
Но у меня и в мазиле это работает.
В общем, зашифровал паролем password
файл sercret.txt с текстом "secret секрет"
- получил на выходе файл secret.txt.encrypted с текстом
U2FsdGVkX189UYsc7z4Ps2FPDSiOGW30MmD4afrLq9CI52QeQMbejwR/hh6PSFye4vxyLu2vsG1hyZy43OOvLQLxVMs0BZuNu5ka8mFJuOA=
Решил избавится от base64...
Прописал в файле script.js вместо этого:
a.attr('href', 'data:application/octet-stream,' + encrypted);
вот это:
a.attr('href', 'data:application/octet-stream;base64,' + encrypted);
После повторного шифрования того же sercret.txt
получил другой secret.txt.encrypted с тектом "Salted__ҐL-хwжЇ®дтnћ$U>Пr#1tЭnІїТhнИU‹f"
Затем решил декриптнуть его но уже с помощью openssl:
>openssl enc -d -aes-256-cbc -in secret.txt.encrypted > secret.txt -k password
В итоге, получил на выходе файл secret.txt
с текстом: "data:text/plain;base64,c2VjcmV0INGB0LXQutGA0LXRgg=="
Скопировал из него вот эту вот хуйню: "c2VjcmV0INGB0LXQutGA0LXRgg=="
и понёс её сюда: http://www.motobit.com/util/base64-decoder-encoder.asp
не забыв ткнуть radio там - в decode и вижу "secret Ñекрет"...
Этот криптор два раза в base кодирует бинарную инфу, поэтоу и избыточность тут нехилая.
Такие дела...
>Скопировал из него вот эту вот хуйню: "c2VjcmV0INGB0LXQutGA0LXRgg=="
>и понёс её сюда: http://www.motobit.com/util/base64-decoder-encoder.asp
>не забыв ткнуть radio там - в decode и вижу "secret Ñекрет"...
Да, там секрет - вот тут видно кириллицу: http://secundomer.ru/index.php?r=base64/encode
будем учить C
на самом деле ничего, топовые конторы сделают на нем какую нибудь йобу, а макаки как писали на жквери так и будут дальше писать
вангую на аде, так как она ок для интернета вещей сегодня читал про этот язык в западных новостях
всё будет норм, расслабься. у жс будет API для работы с wasm http://webassembly.org/docs/js/
Будем использовать сверхпроизводительные Rust модули
Короче, просто скачал этот криптор, запхнул в папку с брайнваллетом, и подключил его фреймом.
Смотрите что получилось: http://rgho.st/7vlks4Rgh
Операции по работе с DOMом все равно через JS врапперы будут осуществляться.
С++ стоило бы знать уже сегодня, для понимания работы движков, модулей Ноды, ВебГЛ, ВебВР и прочего. И сколько процентов знают-могут?
Байтоёб лает, караван ПХП-ЖиКвери идёт.
Вот, например, один и тот же код.
==========
<div id="test">Hello</div>
<script>
console.log(document.getElementById("test"));
</script>
==========
и
==========
<script>
console.log(document.getElementById("test"));
</script>
<div id="test">Hello</div>
==========
Первый работает нормально, второй отдаёт null. В принципе это логично, потому что во втором случае скрипт срабатывает до "добавления в DOM узла #test" (не уверен, что правильно формулирую). Но при этом если второй обернуть в DOMContentLoaded, то всё будет ок, что, в принципе, тоже довольно логично.
Так что делать в этой ситуации? Если я обращаюсь к какому-либо элементу на странице, то мне обязательно нужно оборачивать это в DOMContentLoaded чтобы случайно не обратиться к тому узлу, которого в DOM еще нет? А с хера ли его не будет, если с другой стороны, зачем мне подключать скрипт НЕ в конце страницы, а в начале? Или всё равно стоит предусмотреть? Или не стоит? А еще какие-то async есть, с ними, по идее, без оборачивания в DOMContentLoaded всё будет совсем плохо?
Короче, билять, если я обращаюсь к элементу вёрстки, который в вёрстке, а не динамически скриптами генерируется, мне оборачивать обращение в DOMContentLoaded или нет?
Если ты делаешь какой-то утилитарный скрипт, которым будут пользоваться ширнармассы, то тебе стоит предусмотреть вообще всё. Даже точку с запятой в начале файла. Вряд ли это твой случай.
Если скрипт специфичный для твоей странички, тогда не трать времени на такие заморочки. Подключай всё в конце Боди.
Скоро это кончится и мы будем префетчить асинхронные модули по ХТТП2, вот тогда и заморочишься.
(Да, ng способен и сам заниматься роутингом и отображать через ng-view шаблоны, но я хочу именно через ноду с его экспрессом.)
перекат >>1091285 (OP)
перекат >>1091285 (OP)
перекат >>1091285 (OP)
перекат >>1091285 (OP)
Это копия, сохраненная 1 декабря 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.