Ответы пользователя по тегу JavaScript
  • Как найти студенту работу на лето за границей?

    barmaley_exe
    @barmaley_exe
    Не слушайте kazmiruk, он не в теме.

    В Штатах существует J1 виза, специально предназначенная для "обмена опытом" и не являющаяся dual-intent, т.е. подразумевается, что после некоторого срока Вы США покинете и у Вас даже в мыслях нет остаться там (иначе визу могут не дать).

    Многие Все приличные IT-компании организуют стажировки для студентов, привозя их на пару месяцев летом по этой самой J1 визе. И да, они заморачиваются не только с визами, но и с жильём, перелётом и прочим. Да и платят прилично. Разумеется, желающих постажироваться в том же Гугле гораздо больше, чем они способны нанять (хотя, я уверен, за лето через них проходит не одна сотня студентов) – тут нужно хорошо себя проявить на собеседовании, да и компания может постесняться Вашего статуса младшекурсника. Тем не менее, это реально, на Хабре Мегамозге (?) есть истории успеха.

    В этом году уже поздно куда-то дёргаться, поскольку процесс оформления всего вот этого небыстрый, обычно собеседования заканчиваются где-то в феврале-марте.

    P.S. Штатами всё не ограничивается, тот же Гугл, например, возит стажёров и в Европу, и, скажем, Японию.
    Ответ написан
    Комментировать
  • Что такое private в js?

    barmaley_exe
    @barmaley_exe
    Не писал на JS несколько лет, Angular, соответственно, тоже не трогал, но пока ES6 не вышел и на дворе ECMAScript 5:

    1. Потому что _подчёркивания, __двойныеПодчёркивания и __любыеДругиеПодчёркивания__ никак не контроллируют область видимости. Но есть механизмы, позволяющие ограничить доступ видимости.

    2. Объявление модуля с помощью вызова анонимной функции. Фишка анонимной функции заключается в том, что она создаёт область видимости, где можно хранить все эти приватные переменные (методы в том числе). Любая локальная переменная будет доступна (благодаря замыканиям) любой функции, объявленной там же, а функции эти можно "экспортировать" наружу, вернув их (или объект с ними).

    3. Термина private scope никогда не слышал, в ES5 есть function scope и global scope. Вложенная функция имеет доступ к scope "родительской" функции, у всех есть доступ к global scope (своего рода функция нулевого уровня).

    Советую почитать цикл статей Дмитрия Сошникова по Тонкостям JavaScript. Статьям уже 5 лет, но они покрывают основу ECMAScript, которая ещё справедлива и по сей день. Возможно, это изменится с выходом ES6.
    Ответ написан
  • Как распознавать человека на чистом Javascript или Node.JS?

    barmaley_exe
    @barmaley_exe
    Если Вы умеете выделять области лиц на изображениях, то ваша задача сводится к классификации этих областей. Классификация — известная задача машинного обучения. А у OpenCV есть модуль для машинного обучения (если не знаете, какой выбрать, выбирайте Support Vector Machines).

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

    Собственно, пайплайн сведётся к приблизительно следующему:
    1. Находите область лица (тут используется ваш каскад Хаара)
    2. По области строите какое-либо feature-представление лица (например, HoG-дескриптор, советую поискать в сети, какие фичи люди используют для лиц).
    3. Это представлние скармливается обученному классификатору (обученому на таких же представлениях, разумеется)
    4. Классификатор выдаёт желанный ответ.

    Очень буду рад, если подскажете какие-нибудь решения на JavaScript или Node.js с OpenCV. Хотя, PHP с его OpenCV тоже подойдут
    Известный мне OpenCV является библиотекой, написанной на C++, поэтому неясно, с чего бы биндинги для Node.JS отличались от биндингов для php. Хотя ни с теми, ни с другими я не встречался, могу ошибаться.

    Если говорить о реализации, то я бы реализовал этот модуль целиком на C++, который бы скопилировал (хоть бы и как модуль Node.JS) и вызывал уже из ноды. Собственно, посмотрите туториалы OpenCV на эту тему, там что-то должно быть.

    У Google+ есть функция "находить меня на фотографиях друзей". Собственно, реализована она наверное как-то так же.
    Google и Facebook, вероятно, используют гораздо более крутые алгоритмы, чем я описал (ещё бы: ведь там работают лучшие из лучших). Например, Facebook'овый DeepFace строит 3D модели лица.
    Ответ написан
    1 комментарий
  • Вопрос во выбору ВУЗа для будущего программиста

    barmaley_exe
    @barmaley_exe
    Я разделяю мнение NiceForce в плане схемы «сперва попробовать». IT бурно развивается, ВУЗ даст лишь фундамент, всё остальное придётся осваивать самому. К тому же, имея некоторую базу (пусть и весьма посредственную), я уверен, учиться будет проще. Если Вы не собираетесь совсем уходить в программирование, то лучше заняться самообразованием (благо, всевозможные онлайн курсы и обучающие ресурсы значительно облегчают задачу).

    Если же Вы решили стать настоящим программистом, то я бы посоветовал СПбАУ. Отзывы о нём можно найти на хабре. Одним из плюсов (особенно в Вашей ситуации) является то, что предлагают они магистерскую программу. Т.е. вы потратите как минимум 2 раза меньше времени, получив весьма достойное образование. Традиционные схемы 4+-летней продолжительности мне кажутся избыточными и бесполезными в Вашем случае, поскольку дают часть общих (и посему бесполезных, вроде историй, культурологий и обж), часть весьма устарелых знаний. При некоторых ВУЗах есть «факультеты переподготовки специалистов», где, казалось бы, за те же год с небольшим расскажут всё нужное. Но про такие я ничего путного сказать не могу, «историй успеха» не слышал.

    С более детальной информацией о поступлении в АУ можно ознакомиться здесь. Обратите внимание на «Список вопросов для экзамена». Там указаны как темы, так и книги, в которых эти темы описаны. Если вдруг обнаружите, что многого не знаете — не пугайтесь, это не так страшно. Ну Вы же хотите знаний :-)
    Ответ написан
    Комментировать
  • А что для JS проще - простое условие или регэксп?

    barmaley_exe
    @barmaley_exe
    Что значит «проще»? Выполняется быстрее? Конечно же первое, т.к. регэкспы надо сначала скомпилировать, потом работать с ними… Это явно сложнее, чем просто сравнить строчки.
    А вообще, мне кажется, это какая-то экономия на спичках. Почему Вам так важна производительность этого кода?
    Ответ написан
    Комментировать
  • Sleep(delay) в javascript?

    barmaley_exe
    @barmaley_exe
    Мне конкретно нужно возвратить из функции данные, которые ещё не пришли.
    Откуда не пришли? Если используется XHR, то делайте его синхронным.
    Ответ написан
    1 комментарий
  • javascript и упаковка изображения в base64

    barmaley_exe
    @barmaley_exe
    Canvas имеет метод toDataURI, который Вам и нужен.
    Ответ написан
  • Javascript. Перенаправить событие scroll на дочерний элемент?

    barmaley_exe
    @barmaley_exe
    Попробуйте в обработчике onscroll менять scrollTop'ы окна и дива со статьей.
    Ответ написан
    Комментировать
  • JavaScript: преобразование строки в массив байт?

    barmaley_exe
    @barmaley_exe
    Посмотрите это.
    Ответ написан
    Комментировать
  • Какой посоветуете самоучитель по Javascript?

    barmaley_exe
    @barmaley_exe
    Сейчас ведётся тщательная переработка сайта, сегодня автор поделился следующей ссылочкой: learn.javascript.ru/
    Часть всё ещё на английском, но, полагаю, скоро будет переведена.
    Ответ написан
    3 комментария
  • Как сохранить HTML вместе с текущим состоянием?

    barmaley_exe
    @barmaley_exe
    В общем случае — нельзя. Сохранить состояние обработчиков событий, навешанных с помощью addEventListener, например, нельзя.

    Но если Вам нужны только данные формы, то можно их сериализовать, а потом восстановить.
    Ответ написан
  • Javascript: String.prototype.namespace.method и this

    barmaley_exe
    @barmaley_exe
    Нельзя, т.к. Ваш объект utils не будет знать о контексте (this для него что-то неопределенное).
    Но если хочется извращений, то можно
     // https://gist.github.com/947203
    (function(){
    	var _utils = { // String.prototype.utils
    			append : function(tail){
    				return this + tail;
    			}
    		},
    		utils = {}, // фронтэнд. на этот объект будут навешены геттеры.
    					// на _utils геттеры вешать нельзя т.к. тогда мы не сможем (вроде как) добраться до методов
    		self = null, // тут будет контекст
    		generateGetter = function(fnc){ // это геттер
    			return function(){ // геттер возвращает функцию
    					return function(){ // которая при вызове возвращает
    							// результат применения соответствующего метода с нужным контекстом
    							return _utils[fnc].apply(self, arguments);
    						};
    				};
    		};
    
    	for(var prop in _utils){  // смотрим все методы _utils
    		if(_utils.hasOwnProperty(prop)){
    			// и назначаем для них геттеры для нашего фронтэнд объекта
    			utils.__defineGetter__(prop, generateGetter(prop));
    		}
    	}
    
    	// Геттер на String.prototype, который вернет наш презентационный объект
    	// Когда кому-нибудь захочется обратиться к какому-нибудь методу этого объекта,
    	// обьявленному в _utils, он попадет на геттер
    	String.prototype.__defineGetter__('utils', function(){
    		self = this;
    		return utils;
    	});
    })();
    
    // Пример
    console.log('Hello'.utils.append(' World'));
    console.log('Hello'.utils.append(' World')
                       .utils.append('!'));
    (протестировано в Опере и Node.js)


    Как видно, здесь активно используются геттеры, которые работают (вроде как) во всех современных браузерах, за исключением всего семейства IE.
    Но самая большая печаль — ужасная неоптимальность этого кода. Вы только посмотрите на 3 (!!!) вложенных функции. И это я еще применил грязный хак с кешированием this в переменной self, дабы не создавать новых объектов.
    Ответ написан
    2 комментария
  • Возможно ли при помощи JavaScript (jQuery) отловить момент изменения размера какого-либо элемента?

    barmaley_exe
    @barmaley_exe
    А с чего бы высоте элемента измениться? Отслеживайте причину, а не результат.

    Как вариант, конечно, можно каждые N миллисекунд проверять, не изменилась ли высота и, если да, то вызывать функцию, но столь частый подсчет высоты может крайне негативно сказаться на производительности (reflow / repaint).
    Ответ написан
    5 комментариев
  • Как сделать плавное перемещение?

    barmaley_exe
    @barmaley_exe
    Про анимацию на JS можно почитать тут.
    Ответ написан
    1 комментарий
  • Загрузка файлов на сервер как на Gmail?

    barmaley_exe
    @barmaley_exe
    Если не трогать всякие флешы и серверные компоненты, то можно сделать на основе функционала, предлагаемого HTML5. Проблема лишь в том, что вводится он медленно и поддерживается браузерами фигово:

    1. Хром: начиная с 5-ой (?) версии добавили FormData (из XHR2). Теперь можно отсылать файлы (несмотря на то, что прочитать бинарное содержимое файла пока нельзя, во всяком случае в стабильных релизах) XHR'ом (а там, напомню, нужен multipart). В ранних версиях приходилось отправлять сырое бинарное содержимое файла, без каких-либо заголовков. Соответственно, веб-серверы не понимали, что им пришел файл, и вообще никак не обрабатывали присланную информацию (ее приходилось читать из входного потока). Есть поддержка XMLHttpRequestUpload, который позволяет мониторить прогресс загрузки.

    2. Firefox: начиная с 3.5 (?) можно читать содержимое файлов, есть специальный метод для отправки двоичных данных. Так что отсутствие FormData ничем плохим не сказывается — multipart запрос можно сформировать самому. XMLHttpRequestUpload так же поддерживается.

    3. Сафари: точка сказать не могу, но File, FormData, XMLHttpRequestUpload там реализованы (5.0 — 7533.16).

    4. Опера, ИЕ: видимо, даже не слышали о таких. Для них придется делать по-старинке — флеш / серверсайд / etc.

    Из разряда почитать:
    javascript.ru/blog/Brmaley.ee/FileAPI — материал несколько устарел*
    www.thecssninja.com/javascript/gmail-upload — материал несколько устарел*
    code.google.com/p/html5uploader/ — библиотечка для D&D, но, на мой взгляд, она тоже несколько устарела* :)
    * — имеется в виду поддержка такой штуки как FormData.
    Ответ написан
    Комментировать
  • Библиотеку javascript для мобильных платформ?

    barmaley_exe
    @barmaley_exe
    Есть еще jQueryMobile.
    Ответ написан
    Комментировать
  • Имитировать аплоад файла на сервер из JS?

    barmaley_exe
    @barmaley_exe
    Да, XHR. Формируйте multipart запрос.
    Только Вас ожидает подводный булыжник: отправлять Вам придется бинарные данные, а не все браузеры умеют отсылать их XHR'ом.
    Ответ написан
    6 комментариев