Глядя сегодня в адресную книгу своего телефона на Андроиде, я понял, что мне неудобно смотреть на список моих контактов, отсортированный по порядку символов в UTF.
Borodean @Borodean
Пользователь
Практические рекомендации по выбору паролей по результатам взлома antichat.ru
4 min
24KКак вы уже слышали Брайан Кребс недавно проводил аудит паролей, полученных после взлома antichat.ru (сама база была получена где-то год назад и уже не актуальна!). Честно говоря, не очень понимаю чем занимались его видеокарты 18 дней, победив только 44% паролей. Мне на довольно скромном железе удалось подобрать 77% паролей за 8 часов. Исходя из таких несколько пугающих цифр, особенно для сайта тематически связанного с информационной безопасностью, у меня есть несколько рекомендаций о том какие пароли никогда не следует использовать, дабы они не были подобраны за пару минут.
+120
Видеоглазок с минимум затрат
4 min
132KДобрый день, хабрапользователи.
Я привык с детства смотреть в глазок перед тем, как отрыть дверь в квартиру кому-либо.
Но после переезда так вышло, что в глазок не видно того, кто к тебе в гости просится.
Другими словами надо сделать что-то, что позволит не выходя из квартиры видеть, что же там у лифта происходит.
Примерно вот так:
Сказано — сделано!
+186
Фотографии без фокуса
1 min
28KНе секрет, что сейчас, чтобы сделать фото на обычной, так скажем, «мыльнице», нужно немного нажать кнопку, после этого объектив сфокусируется на объекте и потом, когда мы уже видим чёткое изображение в видоискателе (или на экране), нажать кнопку до конца и сделать фото. В принципе, всё просто и понятно.
Но компания Lytro решила изменить этот процесс. Они заявляют, что произведут революцию в мире фотографии. С помощью их фотокамер можно делать фото, не фокусируя камеру на объекте. А настроить резкость можно уже в пост-обработке. Честно, когда я первый раз увидел это, мне казалось, что я сплю.
Но компания Lytro решила изменить этот процесс. Они заявляют, что произведут революцию в мире фотографии. С помощью их фотокамер можно делать фото, не фокусируя камеру на объекте. А настроить резкость можно уже в пост-обработке. Честно, когда я первый раз увидел это, мне казалось, что я сплю.
+113
jQuery.waterfall. Небольшая полезняшка
2 min
7.2KВ текущем проекте возникла необходимость выполнить последовательную серию ajax запросов и, по завершении — что-то сделать со всеми их результатами.
Довольно типовая задача, паттерн ее решения обычно называют waterfall (водопад). Реализации этого паттерна есть для node.js, хотя некоторые работают и в браузере — async.
Но включать целый модуль ради одного метода не хотелось. Copy/paste тоже не стал делать, но по соображениям скорее эстетическим. В async в метод передается функция обратного вызова, у нас же везде используется jQuery.Deferred. Разницы, конечно, никакой, но «ломать» стиль проекта мое «чувство прекрасного» мне не позволило :)
В результате написал небольшую утилитку по аналогии с jQuery.when
Довольно типовая задача, паттерн ее решения обычно называют waterfall (водопад). Реализации этого паттерна есть для node.js, хотя некоторые работают и в браузере — async.
Но включать целый модуль ради одного метода не хотелось. Copy/paste тоже не стал делать, но по соображениям скорее эстетическим. В async в метод передается функция обратного вызова, у нас же везде используется jQuery.Deferred. Разницы, конечно, никакой, но «ломать» стиль проекта мое «чувство прекрасного» мне не позволило :)
В результате написал небольшую утилитку по аналогии с jQuery.when
+53
Сага о том, как мы писали консоль
8 min
21K Если посадить тысячу мартышек за тысячу пишущих машинок, то за тысячу лет они напишут эмулятор терминала. — вместо эпиграфа.
Извините фальстарт, это не я, это андроидный смартбук.
Когда мы только запускали облако, первой проблемой было «как нам получить консоль». Штатный механизм XCP поразумевает, что консоль рисуется с помощью VNCTerm, а желающий её увидеть должен сначала пойти в XenAPI, получить там session-id консоли, пойти на порт консоли, передать session-id, получить RFB, завёрнутый в HTTP, развернуть HTTP, вынуть RFB (он же VNC), отдать её локальному рендереру VNC (VNC-клиенту или java-апплету с тем же функционалом). При этом консоль закрывалась (сессия рвалась) при каждой перезагрузке виртуальной машины. Она рвалась даже при миграции виртуальной машины. Другими словами, это была технология, которая подразумевала «глянул одним глазком, починил ssh/iptables и забыл». Неудобно, медленно, сложно. Выкатывать такое в продакт совсем не хотелось.
И я залез в дебри serial-howto, console-howto и ещё несколько ужасных документов, рассказывающих о том, как правильно нужно конфигуриовать прерывания на ISA плате у мультикарт, а так же специфику настройки linux-2.2 для работы с оными. Параллельно изучалось устройство консоли в зене (внимательный читатель мог даже заметить, когда именно я более-менее разобрался в этом вопросе — я писал на хабре краткий обзор того, что происходит с консолью).
После этого пришла мысль: нужно писать своё, потому что готового чужого хорошего нет.
Сначала мы хотели взять хотя бы готовые компоненты и сделать из них своё. Я помню до сих пор ту замечательную схему, в которой мы планировали сохранять в БД вывод anyterm'а, делать двойное туннелирование последовательного порта с использованием UDP… Выглядело это, мягко скажем, неприглядно.
Потом пришла в голову мысль выпилить anyterm. Для этого нужно было посмотреть, как работают терминалки. Это было очень забавно и поучительно (желающие могут изучить исходный текст PuTTY). Главной проблемой в этом изучении было то, что они много рисуют на экран. Прямо в процессе обработки ввода. Отделить специфику DC от, собственно, того, что является консолью, было сложно.
Через некоторое время мы пришли к идее «нам нужен свой эмулятор терминала».
Задача казалась относительно простой, пока мы не прикоснулись к бездне, именуемой «escape-коды и типы терминалов...».
Итак, в начале была пишущая машинка. В какой-то момент возникло желание совместить телеграф с пишущей машинкой. Так возник телетайп
Разумеется, инженерам, создававшим телетайп, не было никакого резона делать все с нуля. Они просто приделали коды к каждой клавише пишущей машинки. После некоторых боёв в стиле MS VS Netscape, был создан стандартhtml5 на коды для оных машинок, то бишь телетайпов. Если мне память не изменяет, то это ASCII, где предусмотрены все комбинации клавиш, характерные для американской пишущей машинки. Включая код BELL, который, кстати, должен вовсе не делать BEEP, а делать «дзыньк», ибо у пишущих машинок был именно колокольчик, а не спикер.
Извините фальстарт, это не я, это андроидный смартбук.
Когда мы только запускали облако, первой проблемой было «как нам получить консоль». Штатный механизм XCP поразумевает, что консоль рисуется с помощью VNCTerm, а желающий её увидеть должен сначала пойти в XenAPI, получить там session-id консоли, пойти на порт консоли, передать session-id, получить RFB, завёрнутый в HTTP, развернуть HTTP, вынуть RFB (он же VNC), отдать её локальному рендереру VNC (VNC-клиенту или java-апплету с тем же функционалом). При этом консоль закрывалась (сессия рвалась) при каждой перезагрузке виртуальной машины. Она рвалась даже при миграции виртуальной машины. Другими словами, это была технология, которая подразумевала «глянул одним глазком, починил ssh/iptables и забыл». Неудобно, медленно, сложно. Выкатывать такое в продакт совсем не хотелось.
И я залез в дебри serial-howto, console-howto и ещё несколько ужасных документов, рассказывающих о том, как правильно нужно конфигуриовать прерывания на ISA плате у мультикарт, а так же специфику настройки linux-2.2 для работы с оными. Параллельно изучалось устройство консоли в зене (внимательный читатель мог даже заметить, когда именно я более-менее разобрался в этом вопросе — я писал на хабре краткий обзор того, что происходит с консолью).
После этого пришла мысль: нужно писать своё, потому что готового чужого хорошего нет.
Сначала мы хотели взять хотя бы готовые компоненты и сделать из них своё. Я помню до сих пор ту замечательную схему, в которой мы планировали сохранять в БД вывод anyterm'а, делать двойное туннелирование последовательного порта с использованием UDP… Выглядело это, мягко скажем, неприглядно.
Потом пришла в голову мысль выпилить anyterm. Для этого нужно было посмотреть, как работают терминалки. Это было очень забавно и поучительно (желающие могут изучить исходный текст PuTTY). Главной проблемой в этом изучении было то, что они много рисуют на экран. Прямо в процессе обработки ввода. Отделить специфику DC от, собственно, того, что является консолью, было сложно.
Через некоторое время мы пришли к идее «нам нужен свой эмулятор терминала».
Задача казалась относительно простой, пока мы не прикоснулись к бездне, именуемой «escape-коды и типы терминалов...».
Пишущие машинки
Итак, в начале была пишущая машинка. В какой-то момент возникло желание совместить телеграф с пишущей машинкой. Так возник телетайп
Разумеется, инженерам, создававшим телетайп, не было никакого резона делать все с нуля. Они просто приделали коды к каждой клавише пишущей машинки. После некоторых боёв в стиле MS VS Netscape, был создан стандарт
+119
В который раз про IE6, фанатизм, end-юзеров и клиентоориентированность рынка веб-разработки
2 min
4.7KМы помогаем с хостингом клиенту, которому какие-то умельцы из далекого маленького города сделали сайт.
Помню по небольшому опыту общения (ставили на хост) что ребята все время ерепенились и лезли на конфликт. В итоге клиент насмерть разругался с ними.
Косяков правда было немало. Например, все вводимые в форму заявки персональные данные аккуратно складировались в текстовички в папку tmp с именами файлов по фамилиям людей кириллицей. Очевидно, чтобы было проще разобраться. Google, конечно, разобрался. Конец немного предсказуем. Скандал даже до нас дошел, мы же аккаунт хостинга сделали.
Одной из притч во языцех было неаккуратное отображение сайта в IE6. Ругались долго. Чем кончилось я не знаю. Точнее не знал.
Помню по небольшому опыту общения (ставили на хост) что ребята все время ерепенились и лезли на конфликт. В итоге клиент насмерть разругался с ними.
Косяков правда было немало. Например, все вводимые в форму заявки персональные данные аккуратно складировались в текстовички в папку tmp с именами файлов по фамилиям людей кириллицей. Очевидно, чтобы было проще разобраться. Google, конечно, разобрался. Конец немного предсказуем. Скандал даже до нас дошел, мы же аккаунт хостинга сделали.
Одной из притч во языцех было неаккуратное отображение сайта в IE6. Ругались долго. Чем кончилось я не знаю. Точнее не знал.
+69
Типографика на Вебе
3 min
5.4KTranslation
Типографика на Вебе прошла длинный путь с тех пор как Тим Бёрнерс-Ли нажал на рубильник в 1991-ом году. Давным-давно, во времена IE 1.0, выражение «хорошая типографика на Вебе» было, скорее, оксюмороном (сочетанием противоположных по значению слов). Многое успело измениться. У нас есть не только браузеры, которые умеют показывать картинки (ах!); у нас есть возможность оживлять наши веб-страницы, используя великолепную типографику.
+57
Поговорим о margin, он же маргин( часть 1-я )
4 min
59KВидя, когда новички верстая страницу за страницей, допускают кучу ошибок, делая отступы маргин и до конца не понимая, как этот самый маргин на самом деле работает, я решил написать данную статью.
Начинающим верстальщикам она точно будет полезна, а вот профессионалам — сомневаюсь, так как человек занимающийся не первый год версткой уже обязан «вызубрить» наизусть все особенности данного свойства.
В этой части статьи я напишу о вертикальном маргине. О горизонтальном поговорим в следующей части.
Начинающим верстальщикам она точно будет полезна, а вот профессионалам — сомневаюсь, так как человек занимающийся не первый год версткой уже обязан «вызубрить» наизусть все особенности данного свойства.
В этой части статьи я напишу о вертикальном маргине. О горизонтальном поговорим в следующей части.
+115
Опытные мелочи Windows-админа
3 min
172KВсегда имел желание написать цикл постов, где был бы понемногу изложены разные интересные мелочи и задачи, которые приходилось решать в повседневной рутине системного администратора.
Возможно, кое-что из описанного будет полезно другим сисадминам.
Сразу оговорюсь, что в качестве исходных данных имею Windows среду и домен Active Directory, причем ОС преимущественно WindowsXP — Server2003. Ну и обслуживаемые компании были в основном некрупными (от 30 до 500 пользователей).
Начнем, пожалуй, c часто встречаемой задачи определения кто из пользователей за каким компьютером работает.
Возможно, кое-что из описанного будет полезно другим сисадминам.
Сразу оговорюсь, что в качестве исходных данных имею Windows среду и домен Active Directory, причем ОС преимущественно WindowsXP — Server2003. Ну и обслуживаемые компании были в основном некрупными (от 30 до 500 пользователей).
Начнем, пожалуй, c часто встречаемой задачи определения кто из пользователей за каким компьютером работает.
+85
Типовые ошибки на собственных сайтах веб-студий
8 min
68KПривет, Хабр! Я продолжаю цикл статей по теме маркетинга и продаж в веб-студиях / интерактивных агентствах. В этом материале я хочу поговорить о собственных сайтах студий и типовых ошибках, которые очень часто совершают их владельцы.
Этот дайджест основан на моем приличном опыте мониторинга и анализа сайтов на рынке веб-разработок (исследования конкурентов в ADV, мониторинг и анализ участников «Тэглайн», проведение заказных аудитов для студий и пр.).
Я попытался систематизировать основные «ляпы» и упущения по нескольким основным категориям, на которых и остановлюсь подробнее:
Этот дайджест основан на моем приличном опыте мониторинга и анализа сайтов на рынке веб-разработок (исследования конкурентов в ADV, мониторинг и анализ участников «Тэглайн», проведение заказных аудитов для студий и пр.).
Я попытался систематизировать основные «ляпы» и упущения по нескольким основным категориям, на которых и остановлюсь подробнее:
- Ошибки позиционирования;
- Ошибки расстановки приоритетов;
- Неправильная презентация компании и услуг;
- Неправильная презентация портфолио и кейсов;
- Ошибки в коммуникации с заказчиком;
+127
Обращение Anonymous к блоку НАТО
4 min
8KTranslation
В качестве ответа на отчёт НАТО об угрозе «хактивизма» группировка Anonymous опубликовала открытое письмо (сайт сейчас под DDoS-атакой, так что см. кэш Google). Публикуем перевод этого документа.
Приветствуем вас, члены НАТО. Мы — Anonymous.
В своей недавней публикации вы представили Anonymous как угрозу «государству и народу». Вы также заявили, что секретность якобы является «неизбежным злом» и что прозрачность — не всегда правильный способ развития.
Anonymous хотели бы напомнить, что государство и народ, в отличие от так называемых «демократических» организаций, отличаются друг от друга и часто имеют противоположные цели и желания. Позиция Anonymous заключается в том, что когда возникает конфликт между интересами государства и интересами народа, то воля народа должна иметь больший приоритет.
Приветствуем вас, члены НАТО. Мы — Anonymous.
В своей недавней публикации вы представили Anonymous как угрозу «государству и народу». Вы также заявили, что секретность якобы является «неизбежным злом» и что прозрачность — не всегда правильный способ развития.
Anonymous хотели бы напомнить, что государство и народ, в отличие от так называемых «демократических» организаций, отличаются друг от друга и часто имеют противоположные цели и желания. Позиция Anonymous заключается в том, что когда возникает конфликт между интересами государства и интересами народа, то воля народа должна иметь больший приоритет.
+299
Lightcycle demo using WebGL (part 0)
17 min
4.2KВступление
Мне нравится осваивать новые технологии, делая то, чем раньше вообще не занимался. А еще мне нравится TRON. Оба фильма, кстати. Помню, еще до того, как я их посмотрел, в студенческие дремучие времена, я играл в Armagetron и фанател от гонок на светоциклах. После просмотра TRON: Legacy мне внезапно захотелось сделать свой Tron с гридом и изоморфами. Недолго думая, я запустил любимую Visual Studio Express и задумался — а чем это мое творение будет отличаться от свалки клонов «Трона»? Студия плавно закрылась, а мой энтузиазм несколько поутих. Ровно до того момента, как мне на глаза попалась какая-то статья о WebGL. Глаза снова загорелись, а руки сами потянулись к редактору. В голову как-то не приходила мысль, что последний раз я на JavaScript делал обработчик нажатия кнопки на зачет по какому-то предмету.
Итак, сегодня в программе:
- Низкоуровневое программирование WebGL.
- Рендеринг простого трехмерного объекта.
- Подробные комментарии процесса разработки.
- Много букв и код на JavaScript.
- Бесплатная выпивка и приятная музыка.
Статья предназначена для тех, кому просто нечего делать и хочется почитать про то, как другие тратят свое время за компьютером вместо прогулок под теплым летним солнцем.
+77
Переменные в Фотошопе или как импортировать внешние PSD-файлы влёгкую
5 min
20KTranslation
Во время работы над крупными проектами с множеством макетов и видов объекта даже минимальное изменение в повторяющемся компоненте может потребовать времени. Проход по множеству макетов и подстройка цвета или начертания у подобного повторяющегося элемента может стать изнуряющим делом. Конечно же, если у вас есть подмастерье, выполняющий всю грязную работу за вас, то вы, определённо, везунчик, но что же делать нам, фрилансерам?
Неужели нам остаётся лишь сносить эту му́ку? Что ж, теперь нет! Недавно я обнаружил подход, который позволит дизайнерам распрощаться с открытием 23 PSD-файлов только ради смены цвета элемента в шапке. Вместо этого мы можем поступать разумно, как наши коллеги, разработчики, и импортировать внешние файлы при помощи кое-чего с названием «Variables (Переменные)».
Сие позволит поместить многократно используемый компонент в отдельный файл и просто импортировать его во все макеты. Теперь, когда нам понадобится внести изменение, мы будем просто вносить его в одном месте.
Неужели нам остаётся лишь сносить эту му́ку? Что ж, теперь нет! Недавно я обнаружил подход, который позволит дизайнерам распрощаться с открытием 23 PSD-файлов только ради смены цвета элемента в шапке. Вместо этого мы можем поступать разумно, как наши коллеги, разработчики, и импортировать внешние файлы при помощи кое-чего с названием «Variables (Переменные)».
Сие позволит поместить многократно используемый компонент в отдельный файл и просто импортировать его во все макеты. Теперь, когда нам понадобится внести изменение, мы будем просто вносить его в одном месте.
+68
CGI-программирование на ассемблере?!? – Легко!
11 min
13KСтатья гуляет в интернете уже довольно давно, но, как автор думаю имею право на ее перепост здесь. Многое (если не все) написаное здесь устарело, и может показаться бесполезным с первого взгляда, однако пройдя этот путь, спустя 6 лет могу сказать, это не оказалось лишним. Итак.
В этой статье я хочу рассказать о CGI интерфейсе вообще, его реализации для windows и использовании при написании CGI-программ языка ассемблер в частности. В рамки этой статьи не входит полное описание CGI, так-как в Интернете материала по этому вопросу просто море и пересказывать все это здесь я просто не вижу смысла.
В этой статье я хочу рассказать о CGI интерфейсе вообще, его реализации для windows и использовании при написании CGI-программ языка ассемблер в частности. В рамки этой статьи не входит полное описание CGI, так-как в Интернете материала по этому вопросу просто море и пересказывать все это здесь я просто не вижу смысла.
+35
Что почитать на выходных? Рекомендуем, выпуск №9
3 min
1.4KЭто подборка статей на тему веб-разработки на платформе .NET (и не только). За день перед выходными я предлагаю набор интересных ссылок, которые стоит посетить в свободные минуты на выходных, чтобы узнать что-то новое и интересное.
Вы можете следить за циклом этих советов по следующей ссылке.
Тема номера:
Вы можете следить за циклом этих советов по следующей ссылке.
Тема номера:
- XNA RPG — изучение XNA на примере построения RPG-игры (руководство из 26 частей) (link);
- Российская система управления контентом Atilekt.CMS доступна через Web Platform Installer (link);
- Список событий в GLOBAL.ASAX (link);
- Проект для ASP.NET- Git Web Access (link);
- ASP.NET MVC 3 для начинающих: добавляем ввод даты с помощью jQueryUI и NuGet (link);
- Руководство по Orchard, часть 1 — запуск блога (link);
- Руководство по Orchard, часть 2 (link);
- Custom Role Provider. Часть 1 (link);
- Настройка шаблонов T4 MvcScaffolding (link);
- Управление сессиями NHibernate в приложениях ASP.NET MVC (link);
- patterns & practices- Project Silk Drop 7 (link);
- Исопльзование Entity Framework Fluent API и Code First в ASP.NET MVC (link);
- Работа с CSS 3 в Expression Web (link)
- Мнение о том, когда использовать Canvas и SVG (link);
- Новые полезные JavaScript CSS решения 2011 года. 16 свежих плагинов для веб-разработчика (link);
- Результаты тестирования скорости JS в браузерах (link);
- IE9 Compat Inspector — инструмент анализа сайта на проблемы с JavaScript (link);
- Фрактал на JavaScript с помощью HTML5 (link);
- 14 браузерных javascript — игр, использующих HTML5 (link);
- Расширение ваших jQuery-приложений с Amplify.js (link);
- Useful jQuery Plugins — April 2011 (link);
- Взрывной логотип с помощью CSS3 и MooTools или jQuery (link);
+14
Особенности зарубежной типографики
5 min
18KНесколько месяцев назад я столкнулся с задачей верстки буклета на французском языке. Оказалось, что в рунете тема зарубежной типографики представлена крайне скупо, поэтому необходимую информацию пришлось находить и переводить самостоятельно.
В данной статье я хотел бы рассказать о наиболее примечательных, на мой взгляд, европейских типографических традициях, их сходствах и различиях.
В данной статье я хотел бы рассказать о наиболее примечательных, на мой взгляд, европейских типографических традициях, их сходствах и различиях.
+103
Принципы дизайна страниц оплаты для интернет-магазинов
14 min
22KTutorial
Translation
Представляю вашему вниманию перевод статьи под названием "Fundamental Guidelines Of E-Commerce Checkout Design" от Christian Holst. Перевели в компании UXDepot специально для пользователей Хабрахабра с одобрением издания Smashing Magazine.
Грустная статистика систем электронной коммерции — согласно последним исследованиям, по крайней мере 59,8% потенциальных покупателей покидают сайт на этапе оформления заказа и его оплаты (у разных исследований разные показатели — от 59,8% у MarketingSherpa до 83% у SeeWhy).
Основной вопрос заключается в том, почему пользователи так часто и массово покидают свою корзину, не закончив оформление заказа? Причина заключена в какой-то фундаментальной ошибке дизайнеров, создающих интернет-магазины? А быть может есть какие-то формальные правила, которые усложняют жизнь простым пользователям и мешают им покупать продукты? Существует ли какая-то возможность улучшить ситуацию и повысить конверсию электронных магазинов?
+162
Кроссбраузерные аксессоры в JavaScript
4 min
6.9KВ своём фреймворке AtomJS я активно использую аксессоры — геттеры и сеттеры:
Foo = atom.Class({
get bar () {
return this._bar;
},
set bar (bar) {
this._bar = bar;
}
});
Я уже описывал теорию, но в топике я расскажу о том, как заставить их работать во всех современных браузерах, а именно — как разрулить ситацию с тем, что Internet Explorer 9 ничего не знает о
__defineSetter__
и подобных методах.+43
Что почитать, чтобы повысить свой уровень JavaScript
3 min
98KTranslation
От переводчика: Я думаю многие читали статью Rey Bango — What to Read to Get Up to Speed in JavaScript, но до хабра обсуждение так и не докатилось. Предлагаю закрыть этот пробел и поговорить о хороших книгах, блогах, тренингах и конференциях, посвященных в первую очередь клиентскому JavaScript и клиентской веб-разработке. Чтобы не копипастить оформляю статью в виде перевода.
Сейчас в рассылке JSMentors JavaScript идет обсуждение книг, который стоит прочитать, чтобы улучшить свои знания. Там было много позитивных отзывов и предложений. Я хочу показать вам те книги и интернет-ресурсы, который я считаю важными и которые помогут вам в обучении. На этой странице я перечислил большое количество источников, разделенных по уровням.
Учтите, что некоторый ресурсы могут принадлежать нескольким уровням и охватывают широкие аспекты языка. Если вы считаете, что я что-то упустил, пожалуйста, дополните меня в комментариях.
Не заставляю вас читать все книги, которые предложены ниже. Эти книги я читал на протяжении многих лет и почерпнул в каждой много полезного. Я их распределяю по категориям, чтобы вам было проще работать с ними. Выберите книги, которые подходят вам.
Сейчас в рассылке JSMentors JavaScript идет обсуждение книг, который стоит прочитать, чтобы улучшить свои знания. Там было много позитивных отзывов и предложений. Я хочу показать вам те книги и интернет-ресурсы, который я считаю важными и которые помогут вам в обучении. На этой странице я перечислил большое количество источников, разделенных по уровням.
Учтите, что некоторый ресурсы могут принадлежать нескольким уровням и охватывают широкие аспекты языка. Если вы считаете, что я что-то упустил, пожалуйста, дополните меня в комментариях.
Не заставляю вас читать все книги, которые предложены ниже. Эти книги я читал на протяжении многих лет и почерпнул в каждой много полезного. Я их распределяю по категориям, чтобы вам было проще работать с ними. Выберите книги, которые подходят вам.
+157
Information
- Rating
- Does not participate
- Location
- Украина
- Date of birth
- Registered
- Activity