Linux быстро развивается и становиться все популярнее, особенно в связи с тем, что сокращается использование Windows, а также множество программистов работают над продвижением Linux, создавая новые программы для настольных компьютеров, которые будут эквивалентны или даже лучше приложений в Windows и Mac OS X.
Большое количество дистрибутивов пытаются сделать Linux более легким для новых пользователей, которые раньше использовали Linux или Mac OS X. Это еще лучше способствует продвижению Linux в массы.
Для Linux есть множество языков программирования, и более того, каждый год появляются новые. Но не все их используют программисты, ведь для того, чтобы создать надежное, гибкое, эффективное и расширяемое, а главное, безопасное приложение, нужно подобрать правильный язык.
В этой статье мы рассмотрим самые популярные языки программирования для Linux. Рассмотрим те, на которых разработана эта операционная система и те, которые используются для создания приложений. На самом деле список не отсортирован по степени важности, все используемые здесь языки хороши. Все они кроссплатформенные, и вы можете написать на них программу для любой из доступных операционных систем.
Я не преувеличу, если скажу, что этот язык был создан для этой операционной системы. Это уже старый язык. Он создавался в семидесятых годах инженером из Bell Labs Денисом Ритчи специально для написания ядра Unix. Дело в том, что в те времена программы и операционные системы писались на ассемблере и нужно было для каждой архитектуры писать программу отдельно, потому что наборы инструкций отличались. Разработчикам Unix нужен был высокоуровневый язык программирования, на котором они смогли бы написать Unix один раз и собирать его для всех платформ. Таким языком стал Си.
Ядро Linux, основано на Unix, а поэтому тоже написано на Си, также на Си реализованы все модули ядра, драйверы, а также огромное количество системного программного обеспечения. Если вы задавались вопросом, на чем написан Linux то теперь знаете ответ. На Си разработаны множество утилит из набора GNU, X сервер, набор библиотек для работы с графикой GTK и многое другое, некоторые оконные менеджеры. Но для написания новых программ Си используется все реже, ему на замену пришла его объективно ориентированная модификация С++.
Это усовершенствованная версия Cи, появился он ненамного позже си. В 1980 году Бьёрн Страуструп работал над своим исследованием и ему не хватало стандартных возможностей Си, поэтому он придумал к нему пару улучшений. Неожиданно этот язык стал популярен среди его коллег и он уже не мог сам следить за его развитием.
Теперь это один из самых популярных языков программирования. Здесь доступно как объективно ориентированное, так и процедурные стили программирования. Правда, он все же очень сложен для новичков, как и Си. Здесь нужна очень высокая точность при управлении памятью.
На C++ написано много программного обеспечения в Linux, это те же самые утилиты GNU, много пользовательских программ, графические окружения, браузеры. На C++ написан графический фреймворк Qt, который сейчас используется для окружения рабочего стола KDE и большого количества кроссплатформенных программ. Qt — одновременно коммерческий и некоммерческий проект. Если вы разрабатываете свободное ПО, то можете использовать Qt бесплатно, нет — нужно платить за лицензию. Qt намного проще для начинающих чем чистый Си или С++.
Это мощный и полностью объективно-ориентированный, кроссплатформенный язык программирования в котором есть широкие возможности для создания как приложений для рабочего стола, так и сетевых и веб-приложений.
Изначально Java был разработан в девяностых годах компанией Sun Microsystems для встраиваемых устройств с низкой вычислительной мощностью. Для мобильных телефонов, микроконтроллеров и другого оборудования. Его цель была поднять кроссплатформенность на новый уровень. Программа пишется на java, преобразуется в байт код, которой Java машина может выполнять вообще на любом оборудовании независимо от архитектуры и возможностей. Затем Java начал использоваться для создания веб-апплетов в браузерах, а потому же начали создаваться настольные приложения.
Java — один из лучших языков программирования, особенно если вы собираетесь разрабатывать приложения, которые будут работать везде. Java очень выгодна в плане переносимости, вы можете без изменений выполнять программу в Windows или Linux также она более безопасна, ведь программа выполняется в виртуальной машине и мы можем контролировать все ее действия. Но недостатком есть большое потребление памяти и низкая производительность по сравнению с Си.
На Java пишется не так много программ, но среди них есть и известные, это такие среды разработки, как Netbeans, Eclipse, InteljIDE. Некоторые производители оборудования выпускают утилиты для управления своим оборудованием на Java, чтобы они могли одинаково хорошо работать в Linux. На Java написано много простых игр, а также она вовсю используется в операционной системе Android.
Python — это интерпретируемый язык высокого уровня общего назначения. Он разработан человеком по имени Гвидо Ван Россум в начале восьмидесятых годов, он работал над языком в свободное время, и ставил цель создать язык для обучения программированию.
Основная идея Python — простота, максимальная скорость разработки, минимум ошибок, минимум неопределенности. Сам синтаксис языка способствует тому чтобы вы писали правильно и не допускали ошибок. Это мгновенно сделало Python одним из самых популярных языков. Было разработано множество библиотек для работы с системными компонентами, реализаций алгоритмов и наборов API для работы с сетевыми сервисами. Сейчас на Python можно написать как веб-сайт, так и полноценное Qt приложение, доказательство первому — множество сайтов, в том числе Яндекс, а второму популярный видеоредактор OpenShot.
К тому же на Python написано бесчисленное количество системных скриптов и утилит для управления Linux. Это утилита apt для установки программного обеспечения в Ubuntu, пакетный менеджер Emerge в Gentoo и еще огромное количество небольших скриптов. Причина тому простота языка. Программист тратит на программу несколько часов, а она отлично работает несколько лет.
JavaScript — это в первую очередь язык программирования для создания динамических веб-страниц, разработанный специально для этой цели в середине девяностых Бренданом Эйхом в компании Netscape. До недавнего времени JavaScript так и использовался для генерации динамических веб-страниц на стороне клиента и в веб-приложениях. Но затем появился проект Node.js, позволяющий разрабатывать серверные программы на JavaScript. Совсем недавно компания GitHub создала фреймворк Electron, на базе Node.js, с помощью которого теперь JavaScript может использоваться для создания десктопных приложений.
Electron позволяет использовать технологии HTML, CSS, JavaScript для создания прекрасных программ для рабочего стола. Эта платформа активно поддерживается командой GitHub и сообществом.
Хотя платформа вышла совсем недавно, на ней уже написано до сотни приложений, среди самых известных можно отметить редакторы сходного кода Atom и LightTable, а также приложение для управления сайтом WordPress, и новое приложение для чата RocketCaht. Кроме того, JavaScript используется для разработки программ рабочего стола на платформе Chromium, таких программ намного больше, тот же редактор Brackets, такие полезные утилиты, как Google Keep, Pocket, Wunderlist и другие программы из магазина Chrome.
Команды терминала Linux позволяют не только выполнять повседневные операции в интерактивном режиме, но это также полноценный язык программирования с поддержкой самых простых управляющих конструкций. Наиболее распространенная оболочка Bash (Bourne Again Shell) Больше всего скриптов написаны именно на ее синтаксисе, но есть и другие, например, тот же fish, sh, zsh, dash и т д.
Синтаксис управляющих конструкций Bash немного сложный для понимания, но на нем написано много системных скриптов, это в первую очередь все скрипты инициализации демонов в SysVinit, скрипты для обслуживания серверов, резервного копирования, запуска программ и т д. У каждого администратора есть несколько скриптов, написанных на Bash.
Это далеко не все языки программирования linux, которые используются для создания программ в Linux, очень часто для создания скриптов в последнее время начал использоваться Ruby, уже выходит из моды Perl также применяются такие более специфические языки программирования как Go, R, Vala и другие. Для своих нужд я использую Python и php, а вы пишите программы для Linux? На каких языках программирования? Напишите в комментариях!
Разработчики RTLinux пошли по тому пути, который предусматривает запуск из наноядра реального времени ядра Linux как задачи с наименьшим приоритетом. В RTLinux все прерывания обрабатываются ядром реального времени, которое включает собственный планировщик задач, обработчик прерываний и библиотечный код. В случае отсутствия обработчика реального времени для какого-то прерывания, оно передаётся в Linux. Фактически Linux является простаивающей (idle) задачей ОСРВ, запускаемой только в том случае, если никакая задача не исполняется в реальном времени. При этом на Linux-задачу накладываются некоторые ограничения, которые, впрочем, прозрачны для программиста.
Ключ к реализации данной системы — эмулирующий систему управления прерываниями драйвер, к которому обращается Linux при попытке блокировать прерывания. В этом случае драйвер перехватывает запрос, сохраняет его и возвращает управление Linux.
Все аппаратные прерывания перехватываются ядром ОСРВ. Когда происходит прерывание, ядро RTLinux решает, что делать. Если это прерывание должно быть обработано обработчиком реального времени, то ядро вызывает соответствующий обработчик. В противном случае или если обработчик реального времени говорит, что хочет разделять это прерывание с Linux, обработчику присваивается состояние ожидания (pending). Если Linux потребовал разрешить прерывания, то прерывания, которые находятся в состоянии ожидания, эмулируются.
Ядро RTLinux спроектировано таким образом, что ядро реального времени никогда не нуждается в ожидании освобождения ресурса, занятого Linux-процессом.
Ключевой принцип построения RTLinux — как можно больше использовать Linux и как можно меньше RTLinux. Действительно, Linux заботится об инициализации системы и устройств, а также о динамическом выделении ресурсов. На RTLinux ложится только планирование задач реального времени и обработка прерываний. Процессы реального времени реализованы в виде загружаемых модулей Linux для простоты запуска в контексте ядра, сохранения модульности и расширяемости системы.
Приложение реального времени с RTLinux, как правило, состоит из двух независимых частей: процесса, исполняемого ядром RTLinux, и обыкновенного Linux-приложения.
Такой модульный подход к написанию приложений присущ многим расширениям реального времени для многоцелевых систем, где задача реального времени работает независимо от ОС. Разработчики уже приняли схему, по которой критичные ко времени реакции задачи программируются с помощью API-интерфейсов, предусмотренных расширением реального времени, а все функции сервиса и интерфейса с пользователем возлагается на мощь операционной системы. При использовании данного подхода, программисту нужно изучить только API-интерфейс обработчика событий реального времени.
Разработчики RTLinux пошли по тому пути, который предусматривает запуск из наноядра реального времени ядра Linux как задачи с наименьшим приоритетом. В RTLinux все прерывания обрабатываются ядром реального времени, которое включает собственный планировщик задач, обработчик прерываний и библиотечный код. В случае отсутствия обработчика реального времени для какого-то прерывания оно передаётся в Linux. Фактически Linux является простаивающей (idle) задачей ОСРВ, запускаемой только в том случае, если никакая задача не исполняется в реальном времени. При этом на Linux-задачу накладываются некоторые ограничения, которые, впрочем, прозрачны для программиста.
Ключ к реализации данной системы — эмулирующий систему управления прерываниями драйвер, к которому обращается Linux при попытке блокировать прерывания. В этом случае драйвер перехватывает запрос, сохраняет его и возвращает управление Linux.
Все аппаратные прерывания перехватываются ядром ОСРВ. Когда происходит прерывание, ядро RTLinux решает, что делать. Если это прерывание должно быть обработано обработчиком реального времени, то ядро вызывает соответствующий обработчик. В противном случае или если обработчик реального времени говорит, что хочет разделять это прерывание с Linux, обработчику присваивается состояние ожидания (pending). Если Linux потребовал разрешить прерывания, то прерывания, которые находятся в состоянии ожидания, эмулируются.
Ядро RTLinux спроектировано таким образом, что ядро реального времени никогда не нуждается в ожидании освобождения ресурса, занятого Linux-процессом.
Ключевой принцип построения RTLinux — как можно больше использовать Linux и как можно меньше RTLinux. Действительно — Linux заботится об инициализации системы и устройств, а также о динамическом выделении ресурсов. На RTLinux ложится только планирование задач реального времени и обработка прерываний. Процессы реального времени реализованы в виде загружаемых модулей Linux для простоты запуска в контексте ядра, сохранения модульности и расширяемости системы.
Приложение реального времени с RTLinux, как правило, состоит из двух независимых частей: процесса, исполняемого ядром RTLinux, и обыкновенного Linux-приложения.
Такой модульный подход к написанию приложений присущ многим расширениям реального времени для многоцелевых систем, где задача реального времени работает независимо от ОС. Разработчики уже приняли схему, по которой критичные ко времени реакции задачи программируются с помощью API-интерфейсов, предусмотренных расширением реального времени, а все функции сервиса и интерфейса с пользователем возлагается на мощь операционной системы. При использовании данного подхода программисту нужно изучить только API-интерфейс обработчика событий реального времени.
Разработчики RTLinux пошли по тому пути, который предусматривает запуск из наноядра реального времени ядра Linux как задачи с наименьшим приоритетом. В RTLinux все прерывания обрабатываются ядром реального времени, которое включает собственный планировщик задач, обработчик прерываний и библиотечный код. В случае отсутствия обработчика реального времени для какого-то прерывания оно передаётся в Linux. Фактически Linux является простаивающей (idle) задачей ОСРВ, запускаемой только в том случае, если никакая задача не исполняется в реальном времени. При этом на Linux-задачу накладываются некоторые ограничения, которые, впрочем, прозрачны для программиста.
Ключ к реализации данной системы — эмулирующий систему управления прерываниями драйвер, к которому обращается Linux при попытке блокировать прерывания. В этом случае драйвер перехватывает запрос, сохраняет его и возвращает управление Linux.
Все аппаратные прерывания перехватываются ядром ОСРВ. Когда происходит прерывание, ядро RTLinux решает, что делать. Если это прерывание должно быть обработано обработчиком реального времени, то ядро вызывает соответствующий обработчик. В противном случае или если обработчик реального времени говорит, что хочет разделять это прерывание с Linux, обработчику присваивается состояние ожидания (pending). Если Linux потребовал разрешить прерывания, то прерывания, которые находятся в состоянии ожидания, эмулируются.
Ядро RTLinux спроектировано таким образом, что ядро реального времени никогда не нуждается в ожидании освобождения ресурса, занятого Linux-процессом.
Ключевой принцип построения RTLinux — как можно больше использовать Linux и как можно меньше RTLinux. Действительно — Linux заботится об инициализации системы и устройств, а также о динамическом выделении ресурсов. На RTLinux ложится только планирование задач реального времени и обработка прерываний. Процессы реального времени реализованы в виде загружаемых модулей Linux для простоты запуска в контексте ядра, сохранения модульности и расширяемости системы.
Приложение реального времени с RTLinux, как правило, состоит из двух независимых частей: процесса, исполняемого ядром RTLinux, и обыкновенного Linux-приложения.
Такой модульный подход к написанию приложений присущ многим расширениям реального времени для многоцелевых систем, где задача реального времени работает независимо от ОС. Разработчики уже приняли схему, по которой критичные ко времени реакции задачи программируются с помощью API-интерфейсов, предусмотренных расширением реального времени, а все функции сервиса и интерфейса с пользователем возлагается на мощь операционной системы. При использовании данного подхода программисту нужно изучить только API-интерфейс обработчика событий реального времени.
Эта страница в последний раз была отредактирована 2 мая 2020 в 18:49.
Разработчики RTLinux пошли по тому пути, который предусматривает запуск из наноядра реального времени ядра Linux как задачи с наименьшим приоритетом. В RTLinux все прерывания обрабатываются ядром реального времени, которое включает собственный планировщик задач, обработчик прерываний и библиотечный код. В случае отсутствия обработчика реального времени для какого-то прерывания оно передаётся в Linux. Фактически Linux является простаивающей (idle) задачей ОСРВ, запускаемой только в том случае, если никакая задача не исполняется в реальном времени. При этом на Linux-задачу накладываются некоторые ограничения, которые, впрочем, прозрачны для программиста.
Ключ к реализации данной системы — эмулирующий систему управления прерываниями драйвер, к которому обращается Linux при попытке блокировать прерывания. В этом случае драйвер перехватывает запрос, сохраняет его и возвращает управление Linux.
Все аппаратные прерывания перехватываются ядром ОСРВ. Когда происходит прерывание, ядро RTLinux решает, что делать. Если это прерывание должно быть обработано обработчиком реального времени, то ядро вызывает соответствующий обработчик. В противном случае или если обработчик реального времени говорит, что хочет разделять это прерывание с Linux, обработчику присваивается состояние ожидания (pending). Если Linux потребовал разрешить прерывания, то прерывания, которые находятся в состоянии ожидания, эмулируются.
Ядро RTLinux спроектировано таким образом, что ядро реального времени никогда не нуждается в ожидании освобождения ресурса, занятого Linux-процессом.
Ключевой принцип построения RTLinux — как можно больше использовать Linux и как можно меньше RTLinux. Действительно — Linux заботится об инициализации системы и устройств, а также о динамическом выделении ресурсов. На RTLinux ложится только планирование задач реального времени и обработка прерываний. Процессы реального времени реализованы в виде загружаемых модулей Linux для простоты запуска в контексте ядра, сохранения модульности и расширяемости системы.
Приложение реального времени с RTLinux, как правило, состоит из двух независимых частей: процесса, исполняемого ядром RTLinux, и обыкновенного Linux-приложения.
Такой модульный подход к написанию приложений присущ многим расширениям реального времени для многоцелевых систем, где задача реального времени работает независимо от ОС. Разработчики уже приняли схему, по которой критичные ко времени реакции задачи программируются с помощью API-интерфейсов, предусмотренных расширением реального времени, а все функции сервиса и интерфейса с пользователем возлагается на мощь операционной системы. При использовании данного подхода программисту нужно изучить только API-интерфейс обработчика событий реального времени.
Разработчики RTLinux пошли по тому пути, который предусматривает запуск из наноядра реального времени ядра Linux как задачи с наименьшим приоритетом. В RTLinux все прерывания обрабатываются ядром реального времени, которое включает собственный планировщик задач, обработчик прерываний и библиотечный код. В случае отсутствия обработчика реального времени для какого-то прерывания оно передаётся в Linux. Фактически Linux является простаивающей (idle) задачей ОСРВ, запускаемой только в том случае, если никакая задача не исполняется в реальном времени. При этом на Linux-задачу накладываются некоторые ограничения, которые, впрочем, прозрачны для программиста.
Ключ к реализации данной системы — эмулирующий систему управления прерываниями драйвер, к которому обращается Linux при попытке блокировать прерывания. В этом случае драйвер перехватывает запрос, сохраняет его и возвращает управление Linux.
Все аппаратные прерывания перехватываются ядром ОСРВ. Когда происходит прерывание, ядро RTLinux решает, что делать. Если это прерывание должно быть обработано обработчиком реального времени, то ядро вызывает соответствующий обработчик. В противном случае или если обработчик реального времени говорит, что хочет разделять это прерывание с Linux, обработчику присваивается состояние ожидания (pending). Если Linux потребовал разрешить прерывания, то прерывания, которые находятся в состоянии ожидания, эмулируются.
Ядро RTLinux спроектировано таким образом, что ядро реального времени никогда не нуждается в ожидании освобождения ресурса, занятого Linux-процессом.
Ключевой принцип построения RTLinux — как можно больше использовать Linux и как можно меньше RTLinux. Действительно — Linux заботится об инициализации системы и устройств, а также о динамическом выделении ресурсов. На RTLinux ложится только планирование задач реального времени и обработка прерываний. Процессы реального времени реализованы в виде загружаемых модулей Linux для простоты запуска в контексте ядра, сохранения модульности и расширяемости системы.
Приложение реального времени с RTLinux, как правило, состоит из двух независимых частей: процесса, исполняемого ядром RTLinux, и обыкновенного Linux-приложения.
Такой модульный подход к написанию приложений присущ многим расширениям реального времени для многоцелевых систем, где задача реального времени работает независимо от ОС. Разработчики уже приняли схему, по которой критичные ко времени реакции задачи программируются с помощью API-интерфейсов, предусмотренных расширением реального времени, а все функции сервиса и интерфейса с пользователем возлагается на мощь операционной системы. При использовании данного подхода программисту нужно изучить только API-интерфейс обработчика событий реального времени.
Linux. Глубокое понимание работы системы. Часть 1 — трассировка библиотечных и системных вызовов. — KAZARIN OnLine
UPD: Запись перенесена из старого блога, опубликована в 2015 году.
Предисловие
Системному администратору зачастую очень важно понимать как устроена система, как настроить/отладить те ли иные вещи и как искать ошибки в работе. Если устройству и настройке можно достаточно легко научиться из различных руководств и справочных страниц, где написано что система сделана вот так вот, а настраивается она вот этими кнопочками и командами, то вот с отладкой и поиском проблем зачастую возникают проблемы. Для многих, к сожалению, система представляет собой черный ящик, с входом и выходом и магией внутри. Я покажу как немного пролить свет на эту темноту внутри ящика.
Он будет развернут у меня на виртуальной машине в VirtualBox, с использованием снапшотов. Это нужно для того, чтобы смело экспериментировать и не бояться поломать свою систему.
Поехали…
Представим что нам просто выдали сервер с предустановленой ОС. Мы знаем лишь то, что «под капотом» стоит некий Linux. Необходимо провести разведку
uname -r
uname -a
мы узнаем версию ядра ОС и полную краткую информацию — версия ядра, то, что это ядро PAE (позволяет на 32 битной архитектуре видеть более 4 гб памяти. Видим что это Ubuntu ( в основе)
Выясним что же это за дистрибутив
lsb_release -a
LSB — Linux Standart Base. Он показывет нам что это дистрибутив Elenemtary OS, релиз 0.2 с кодовым именем Luna.
Этой информации достаточно для того чтобы начать поиск документации и описания различных знаний, специфичных для этой системы ( например управление через GUI, хорошие практики настройки и эксплуатации и пр).
Однако, узнав что это по сути, один из стандартных Linux дистрибутивов мы можем смело сказать, что в составе уже есть минимально-необходимый комплект инструментов для отладки ( универсальный для всех Linux систем, за исключением каких-нибудь очень специфичных). Продолжим знакомство теперь уже с ними:
Трассировщики и доп. утилиты
Для того чтобы наблюдать за программой которая обращается к ядру ос, ее библиотекам, системным вызовам, ресурсам и пр нам понадобятся трассировщики.
Покажу Вам парочку стандартных инструмнетов:
1. strace или System trace — простой трассировщик системных вызовов.
2. ltrace — library tracer — трассировщик библиотек. Строит трассы вызова системных библиотек в ходе запуска программы.
3. file — позволяет заглядывать внутрь указанного файла и сигнатурным способом строит предположения о том, что же это за файл. В unix системах у файлов нет суфикса- расширения. Поэтому работа ведется по внутреннему содержимому, хотя ни одна файловая система не содержит никаких признаков.
Поэтому эта утилита очень полезна нам в работе, позволяя так или иначе заглядывать внутрь файла и узнавать, что же он из себя представляет.
4. which — команда, позволяющая узнать где находится исполняемый файл той или иной программы.
Обычно мы вводим команду в командном интерпретаторе и получаем ответ, не задумываясь- а это была встроенная команда или сторонняя программа, запуск которой был вызван вводом команды. А ведь то, что в одном дистрибутиве является встроенной командой оболочки, в другом может повлечь вызов программы. А место вызова программы может быть переопределено (в том числе и злоумышленником) и вместо простого вызова sudo, Вы запустите стороннюю утилиту, которая сохранит и отправит Ваш пароль кому-нибудь еще. which позволяет узнать где лежит та или иная программа.
5. «type -a» — команда, позволяющая узнать, чем для нас является та или иная команда- встроенной командой интерпретатора или вызовом внешней программы.
В зависимости от ее вывода, мы можем понять- что чем является. То, что лежит в:
- /bin — является неотъемлемыми системными компонентами, исполняемыми бинарными файлами, либо
- /usr/bin — прикладными, которые можно изъять из операционной системы без потери ее функциональности
либо является встроенной командой.
Теперь, раз мы уже так много знаем и умеем, давайте разберемся в самих файлах и программах чуть глубже- спросим у утилиты file про нее же саму и посмотрим, что она нам скажет?
нам скажут что это:
- исполняемый файл (ищем в выводе команды слово «… executable …»)
- нам скажут что он формата ELF — т.е. это не jpeg, не mpeg — т.е. не картинка, не видео (явно),
- это 32 битный, исполняемый код («… 32 bit LSB executable…»), который упакован в формат ELF (executable and linking format)
- версия формата ( «…Intel 80386, version 1 …»)
- динамически слинкован с библиотеками ( «… dynamicly linked…» )
- использует разделяемые библиотеки
- создан дли ядра Linux, начиная с версии 2.6.24
- и некоторая контрольная сумма исполняемого файла («…[sha1]=…»)
- и что из него удалена отладочная информация (stripped), которая могла бы быть использована отладчиком.
Отладчик необходим, если мы не можем понять, что происходит внутри программы а исходных текстов у нас нет. Или есть, но мы подозреваем, что компилятор произвел некорректную оптимизацию, внеся ошибки в результирующий бинарный код, хотя в тексте программы ошибок не было.
Но это приведет нас к выводу, что нам необходимы исходные тексты, умение их читать и компилировать. Либо если у нас проприетарное ПО, поработав отладчиком мы сможем найти сбойное место и отправить информацию производителю, чтобы они выпустили патч.
Продолжим исследование программы file
6. ldd — просмотрщик зависимостей запускаемой программы от различных разделяемых библиотек. Например, библиотеки от которых зависит программа file, т.е. кирпичики, которые начинают цепляться один за другой при запуске основной программы, т.е. программа file запускаться и работать вообще не сможет
- linux-gate.so.1 — библиотека системных вызовов ядра ОС
- libmagic.so.1 — ее собственная библиотека, содержащая сигнатуры для определения типов исследуемых файлов.
- libc.so.6 — библиотека языка С нужна ей, т.к. будучи написанной на С она использует ее функции для банального открытия файлов
- libz.so.1 — нужна для работы с сжатыми файлами (архивами)
- /lib/ld-linux.so.2 — библиотека линковщик- умеет/позволяет «прицеплять» другие библиотеки. Это и есть часть того Loader-а или загрузчика, который строит окружение программы-процесса, помещая в память необходимые компоненты. Саму ОС мало интересует от чего зависит программа- она просто выделяет память, создает контекст процесса и передает управление этой библиотеке, которая и делает за нее грязную работу.
После этого встает вопрос- а как же библиотека загружает другие библиотеки если ее тоже кто-то должен загрузить и загрузить ее библиотеки?
Вспомним, что библиотеки это тоже файлы-программы. Между ними нет никакой разницы кроме одного маленького исключения. Посмотрим его ( тут я переключусь на свою локальную консоль, ибо так будет удобней):
Посмотрим, что из себя представляет наша «магическая» библиотека — оказывается это символическая ссылка на библиотеку определенной версии в системе. Тогда мы даем команду file с ключом -L — сходи по ссылке и выясни таки, что там валяется.
Он показывает нам, что это тоже бинарный файл, формата ELF и т.д. и т.п. Только в отличие от программы ( смотрим пример для самой программы file), библиотека является не executable объектом, а shared object (выделил на скриншоте). Что это означает? — Запустить программу можно, а вот библиотеку — нет. В ней нет точки входа/старта. И если мы посмотрим остальные библиотеки, увидим такую же картину.
И у всех у них в свою очередь тоже есть зависимости, потому что между программой и библиотекой от которой она зависит, нет почти никакой разницы. Посмотрим ldd для библиотеки С — она в свою очередь зависит от другой библиотеки, а вот у нее уже уже нет никаких зависимостей, т.к. она статически слинкована — т.е. все что необходимо для нее, уже входит в ее состав. Т.е. она не зависит ни от каких других библиотек и может быть использована напрямую.
Вот вам ответ как она загружается- она не зависит от других библиотек и загружается сама сразу. Один ньюанс — раз команда file говорит что /lib/ld-linux.so.2 динамически слинкована, а ldd говорит что статически, значит кто-то из них врет. Скорее всего врет file, т.к. она строит предположения на основе сигнатур, а ldd четко проверяет зависимости.
Кстати, существуют и просто программы, которые статически слинкованы. Например это сам командный интерпретатор — он не имеет зависимостей при запуске, на тот случай, если все сломалось и нам надо загрузиться в ограниченном режиме и починить систему. К тому же, вам должно быть известно, что когда запускается система, она использует сценарии, написанные на языке командного интерпретатора. При установке, администратор мог вынести некоторые каталоги на отдельные разделы, которые не могут быть подмонтированы в самом начале. А это значит, что если сценарий использует программы и библиотеки, расположенные на этих разделах, он не сможет их запустить.
Либо более простая ситуация- произошло что-то плохое с диском, что повлияло на блок, в котором располагалось часть кода библиотеки. В следствии чего она не смогла быть корректно запущена. Посмотрим на наш командный интерпретатор
И увидим что он так же имеет зависимости. Но как же так? Ведь мы не сможем без переинсталяции починить систему в случае такого краха. Нет, сможем. Потому что в каталоге /bin лежит версия интерпретатора sh, статически скомпилированная. Она называется static-sh. На самом деле это символическая ссылка на другой инструмент — busybox — эдакий швейцарский нож. В нем реализовано много других программ, необходимых для починки ОС.
Мы видим, что он не от чего не зависит — вот он наш минимальный инструмент, который всегда запустится.
Пример использования 1. окружение
Теперь давайте попробуем применить полученные знания на практике. Мы уже начали исследовать саму программу file — с ней и продолжим. Итак, вспомним вновь основные приемы- смотрим что это, где лежит и от чего зависит
Теперь немного поработаем ей- попробуем определить типы различных файлов
Как это работает- они либо смотрит, чем является файл на файловой системе, либо заглядывает внутрь и пытается выяснить тип файла сигнатурным способом.
Мы уже видели, что она зависит от библиотеки libmagic. Логично было бы убедиться в том, что она использует этот сигнатурный способ на практике, а не основываясь на моих словах. Сделать мы это можем путем предположения, что именно эта библиотека и отвечает за анализ сигнатур ( ведь остальные являются стандартными системными библиотеками, а эта как то выделяется). Аналогичным способом мы могли бы выяснить что Libz отвечает за работу с архивами. Как нам это сделать?
Еще в самом начале мы выяснили, что у нас система основана на ubuntu, а значит, поковырявшись в справочной информации мы узнаем что это ветка развития Debian а значит использует его менеджер пакетов dpkg ( как раз та самая дистрибутив-специфичная информация).
Так давайте спросим- из какого пакета была инсталлирована та или иная библиотека.
$ dpkg -S /usr/lib/i386-linux-gnu/libmagic.so.1
Он скажет что она была инсталирована из пакета libmagic1 для платформы intel 386. Спросим теперь что это за зверь?
dpkg -s libmagic1
Он нам ответить что это библиотека ( читаем описание на агл), может быть использована для классификации файлов с использованием специального теста «магических чисел» + дается ссылка на страницу проекта.
Все становится более-менее понятно. И видим что программа file не может жить без библиотеки, а значит пакет с программой зависит от пакета с библиотекой. Вот вам живая иллюстрация зависимостей програмного обеспечения.
Что мы видим? что в этом пакете не только библиотека но еще и пара файлов ( и их контрольные суммы):
Conffiles:
/etc/magic 272913026300e7ae9b5e2d51f138e674
/etc/magic.mime 272913026300e7ae9b5e2d51f138e674
Хотя если это не очевидно, то мы можем запросить список файлов, входящих в пакет.
dpkg -L libmagic1
Тут сама библиотека, каталоги, отладочная информация и справочные руководства man! ( Страница 5: /usr/share/man/man5/magic.5.gz) — значит мы можем почитать описание этой библиотеки:
man 5 magic
Тут мы можем подробно почитать о том что это и зачем нужно. Из чего он состоит и как утилита file его использует. Но нам же интересно и на сам файл с сигнатурами посмотреть?
file -L /usr/share/misc/magic.mgc
Сама утилита файл подтверждает полученную ранее информацию- да, это файл, содержащий те самые магические числа.
А мы можем его посмотреть? Попробуем, воспользовавшись утилитой less для просмотра текстовых файлов
К сожалению, она нам говорит что не уверена что он текстовый и даже если мы прикажем его просмотреть- не сможет это сделать. А может утилита cat нам поможет? Нет, увы- она замусорит нам консоль.
То есть очевидно что там все же не совсем текстовое содержимое, а скорее сигнатуры и их описание. Отлично- вот как много мы уже выяснили, зная лишь про одну утилиту file и исследуя ее окружение.
Теперь, давайте попробуем посмотреть то, что она делает и как она это делает.
Пример использования 2. Трассировка
Итак, посмотрим за поведением утилиты file во время ее работы, для этого используем упомянутые выше утилиты strace и ltrace и построим трассы вызовов.
strace file /usr/bin/file
Получим большой-большой вывод. Ознакомимся с ним — что мы видим:
- выполняется системный вызов execve, запускающий программу «/usr/bin/file», с аргументом «/usr/bin/file»
- системный вызов access, котоый узнает- если ли такой файл ( искомый программой)
- системный вызов open — попытка открыть найденный файл
- и т.д.
Вв конечном итоге это превращается в попытку открыть библиотеки от которых зависит программа и считать их содержимое.
Т.е. мы уже видим типичный запуск любой программы ( а если видите в первый раз- запоминайте) — поиск и открытие всех библиотек и др составных частей рабочей программы, т.е. формирование среды ее работы.
Далее, программа открывает свой конфигурационный файл и файл, который как мы предполагали, содержит сигнатуры
А дальше она пытается открыть и обработать тот файл, который мы попросили проанализировать:
Разбирает список аргументов
открывает файл
читает его заголовок
находит в заголовке какие-то только ей понятные искомые структуры данных
Далее, считав что нужно, она его анализирует (это мы к сожалению не увидим, т.к. обработка происходит внутри программы без использования системных вызовов) и в конце концов выдает результат:
Дополнительные детали работы программы можно увидеть, построив трассу вызова библиотек — например, какие библиотечные функции использует наша программа:
ltrace file /usr/bin/file
- Устанавливает текущие настройки локали
- Ищет первое вхождение символа / в строку аргументов, чтобы установить точку отсчета пути
- дальше, загрузив библиотеку magic, с помощью вызовов open и load загружает информацию из сигнатурного файла и с помощью своих функций начинает обработку
- найдя необходимую информацию в файле сигнатур и проанализировав обрабатываемый файл, она вызовом magic_file «выковыривает» описание и вызовом puts выдает нам на экран результат
Итого, путем всех этих препарирований, мы четко для себя выяснили схему работы программы:
- загрузиться в память и загрузить все библиотеки
- получить список аргументов и разобрать его
- найти анализируемый файл
- открыть и прочитать свои magic файлы
- обратиться к своей библиотеке
- проанализировать информацию
- напечатать результат
А мы все увидели это с помощью трассировщиков.
Работа со справочной информацией
Но откуда нам знать что делают те или иные функции? Очень просто- почитать встроенную справку. Например мы видели функцию putc, почитаем справку про нее:
man 3 putc
Откуда я узнал, что нужно открыть именно 3 раздел руководства? прочитал справку о справке — man man, где описана структура справочного руководства.
Но если мы попробуем найти хоть какую-то информацию о наших магических функциях, нас ждет разочарование:
Почему так произошло? Да очень просто- установив пакет с библиотекой, мы установили минимально необходимый для запуска программы набор компонентов, оставив в стороне набор компонентов разработчика, такой как заголовочные файлы и страницы справочного руководства. Их так же можно доустановить из пакетов так же, как мы ставим все прочее программное обеспечение.
Попробуем провести поиск. Мы знаем что это функция входит в «магическую» библиотеку. Последовательно проследим от каких библиотек зависит запускаемая нами утилита file (ведь в ее трассировке мы увидели этот библиотечный вызов), в каком пакете содержится эта библиотека, есть ли для нее версия для разработчиков и т.д.
Среди списка рекомендуемых пакетов в описании увы нет ничего похожего ( например одноименные библиотеки с суфиксами doc или dev), поэтому проведем поиск по имени пакета среди доступных:
Отлично, мы нашли нужный пакет и убедились в том что это он, прочтя описание. Установим и поковыряемся в нем. Установка производится командой
sudo aptitude install libmagic-dev
Отлично, у нас появилась документация разработчика- посмотрим раздел 3 справочного руководства по библиотеке libmagic и мы найдем там описание нужной функции:
На этом первая часть работы с инструментарием закончена, продолжение будет в следующей статье.
П.С. Данная статья ( и последующие аналогичные) подготовлена на основе конспекта лекций Кетова Дмитрия Владимировича. От себя я добавил редактуру, несколько измененный стиль изложения, свои правки и комментарии.
Что такое рабочий язык? (с иллюстрациями)
Рабочий язык, также известный как процедурный язык, — это язык, который используется в компании, государстве, обществе или любой другой организации или органе в качестве основного средства общения. Установление рабочего языка необходимо в организациях, состоящих из членов с разным языковым образованием, чтобы гарантировать, что все владеют рабочим языком и не допускают ошибок в общении.
Английский — основной язык делового мира.
Яркие примеры необходимости установления рабочих языков исходят от международных организаций, таких как ООН, Всемирная торговая организация и Европейский союз. Каждый из них состоит из множества национальностей, у каждой из которых есть свой родной и официальный языки. Основная причина установления рабочих языков в этих случаях — экономия, поскольку перевод всех речей, документов, решений и меморандумов на любой язык будет непомерно дорогостоящим, не говоря уже о трудоемкости и непрактичности.Однако выбор приемлемого языка часто вызывает споры, поскольку носители этих языков имеют преимущество.
Некоторые американцы гаитянского происхождения говорят на языке пидженов, который смешивает английский и креольский.
Английский и французский являются наиболее распространенными рабочими языками для многих международных организаций, а испанский и немецкий занимают третье и четвертое места. Однако рабочий язык зависит от региона и типа организации. Например, Сообщество развития юга Африки перечисляет четыре: английский, французский, африкаанс и португальский.Организация Объединенных Наций перечисляет арабский, китайский, испанский и русский, а также английский и французский языки. Это означает, что эти языки используются на собраниях, и представители могут говорить на любом из этих языков. Если они не знакомы с этими языками, то предоставляется устный перевод, но только на один из шести рабочих языков. Синхронный перевод шестерки предоставляется автоматически.
Еще один синоним рабочего языка — «лингва франка» с небольшой разницей в том, что лингва франка может относиться или не применяться к официальному языку, но относится к систематическому использованию третьего языка для обеспечения возможности общения между носителями, не имеющими общего языка. родной язык.Английский, пожалуй, самый очевидный язык, используемый во многих областях, но это также может быть пиджин или креольский язык, стандартизированный для длительного использования. Происхождение lingua francas восходит к Средневековью, когда общий язык был необходим для общения между торговыми партнерами и строителями империй. Первый использованный язык представлял собой смесь французского, итальянского, испанского, греческого и арабского языков и использовался торговцами в портах Средиземноморья.
.
10 крутых вакансий для людей, знающих иностранный язык
Сколько стоит второй язык?
Или, скорее, сколько вы можете заработать, изучая дополнительный язык?
Вы когда-нибудь спрашивали себя об этом?
Ну, в каком-то смысле вы уже знаете ответ: Зависит от .
Язык поможет вам настолько далеко, насколько это возможно.
Тем не менее, изучение любого языка действительно может открыть ваши карьерные возможности.
В этом посте мы рассмотрим несколько замечательных вакансий, которые становятся доступными для тех, кто говорит на другом языке.
Поступая так, мы надеемся побудить всех начать изучать языки и расширить возможности для работы.
Хотите работать из дома? Сохранить гибкий график? Окажите положительное влияние? Быть частью вдохновляющего сообщества, основанного на сотрудничестве?
Нажмите здесь, чтобы присоединиться к нашей команде!
1. Учитель, частный репетитор или онлайн-репетитор
Если вы говорите на другом языке, первое, что нужно учитывать с точки зрения повышения полезности, — это возможность преподавать этот язык другим. У вас есть три основных варианта: классный преподаватель , частный репетитор и онлайн-репетитор .
Классный учитель
Как учителю, независимо от школы или организации, к которой вы присоединитесь, вам, вероятно, понадобится как минимум степень по языку, который вы хотите преподавать, плюс сертификаты — доказательство того, что вы готовы и квалифицирован для работы.
Выберите маршрут обучения, если вам нравится идея взаимодействия со студентами и вы чувствуете себя как дома в классе. Если вам нравятся стабильность и формальность занятий, то вам действительно понравится оставаться в школе, отмечая пункты в своих планах уроков.
Нет ничего лучше, чем наставничество изучающих язык и осознание того, что вы делаете положительный вклад в их жизнь и в их жизнь.
Но реальность такова, что многие свободно говорящие не имеют необходимых навыков, хотя они вполне могут преподавать язык другим. Поэтому для тех людей, которые хотят попробовать себя в обучении, второй и третий варианты — работа в качестве частных или онлайн-репетиторов — могут быть подходящим вариантом.
Частный репетитор
Частный репетитор похож на классного учителя, но он / она часто работает индивидуально и лицом к лицу.Сеансы часто проходят после уроков или работы и могут быть задействованы в лечебных или дополнительных целях.
Поскольку вы, вероятно, будете работать на этой должности как фрилансер, у вас будет полный контроль над уроками и методами, которые вы используете. Это одна из самых привлекательных сторон частного репетиторства.
Однако есть один недостаток: фрилансер должен заниматься маркетинговой стороной своей работы. Вы должны выставить себя напоказ, чтобы вас заметили и узнали. Вы можете попробовать разместить свои услуги на таких сайтах, как Craigslist, Monster, eBay Ads или Oodle.
Разумный способ привлечь клиентов — это регистрация в Wyzant.
Этот сайт предлагает ваш профиль широкому кругу студентов, изучающих иностранные языки, которые ищут репетиторов в вашем районе. Процесс адаптации прост и довольно быстр: ответьте на несколько вопросов о себе и своем соответствующем языковом опыте, а затем пройдите очень стандартную анкету, рассчитанную по времени, чтобы проверить свои навыки.
Вы получите одобрение очень быстро и получите доступ к доске объявлений Wyzant, где вы сможете просмотреть десятки потенциальных клиентов репетиторства в любой день.Конечно, количество потенциальных клиентов будет зависеть от спроса в вашем районе.
Онлайн-репетитор
Многие выбирают третий путь, онлайн-репетиторство, потому что им нравится гибкость, которую оно дает. Если вам нравится идея работать в любое время и в любом месте, станьте онлайн-репетитором.
Главное преимущество заключается в том, что, поскольку все это делается в Интернете, это открывает двери для гораздо более широкого рынка. Вы больше не ограничены ни временем, ни географией.
Verbling — это, несомненно, лучшее место, чтобы начать поиск репетиторской работы в Интернете.
У вас огромная база пользователей, и если вы сможете преподавать менее распространенный язык, то вы найдете еще больше учеников, направляющихся к вам.
Он также упрощает весь процесс онлайн-обучения, оптимизируя ваш онлайн-класс, так что вам не нужен Skype или другое стороннее программное обеспечение — вы можете настроить свой график обучения, рекламировать свои навыки, общаться со студентами и проводить занятия прямо на этом сайт.
Учетная запись FluentU может предоставить вам соответствующие видеоматериалы и вдохновение для ваших уроков, а также поможет вам быть в курсе культурных тенденций и рекомендаций или изучать другие языки, если вы все еще хотите расширить свой набор навыков. .
FluentU берет реальные видео — например, трейлеры к фильмам, музыкальные клипы, новости и вдохновляющие выступления — и превращает их в индивидуальные языковые уроки, что делает его идеальным для изучения любого языка для реальных приложений, обсуждаемых в этом посте.
2. Переводчик
Если вы занимаетесь языковым делом, но не учитесь языку других, вы, вероятно, будете выполнять своего рода «мостик». Это означает, что вы способствуете общению между сторонами в ситуации, например, когда двум главам государства, не знающим языков друг друга, необходимо поговорить друг с другом.
Вы соединяете их языки так, чтобы, прежде чем они пришли к соглашению, они сначала пришли к пониманию того, что говорит другой.
Переводчиков чаще всего можно увидеть во время публичных мероприятий (конкурсов «Мисс Вселенная», UFC, церкви), где многие люди, которые могут не понимать языка говорящего, очень заинтересованы в том, что он / она говорит.
Но переводчиков не всегда на виду. Они также работают на небольших площадках, таких как корты. В ООН их часто даже не увидишь, потому что они заперты в кабинке поблизости.Но тем не менее они способствуют процессу. Это они говорят через наушники, голоса в головах делегатов.
Независимо от платформы или размера толпы, работа по-прежнему преследует одну и ту же цель: точное соединение двух языков. Это может быть одна из самых сложных и увлекательных языковых вакансий.
Нет ничего лучше, чем спешить на место и без промедления преобразовать язык, который вы слышали миллисекунду назад, в целевой язык.Вот тут чистая магия.
3. Переводчик
Если работа рядом с «Мисс Вселенная» не для вас, то, возможно, вам больше по душе письменная форма языка. Часто работу по переводу можно выполнить в уединении вашего кабинета или там, где открывается столик Starbucks.
Перевод — это процесс отображения фрагмента текста, понятного целевой аудитории. Переводчики обычно переводят со второго языка на свой родной язык. Например, Пьер, носитель французского языка, который также свободно говорит по-английски, был бы идеальным человеком для перевода с английского на французский.
В отличие от переводчиков, которые иногда находятся в центре внимания, переводчики часто работают за кулисами, терпеливо переводя слова, мысли и намерения на другой язык.
Возможно, вы этого не знаете, но некоторые из лучших литературных произведений, которые вы читали на английском языке, на самом деле являются переводами оригинала. Примеры: «Илиада» и «Одиссея» (написано Гомером по-гречески), «Три мушкетера» (написано Дюма по-французски) и «Анна Каренина» (написано Толстым по-русски).
Это означает, что некоторые слова, которые мы уважаем в английском языке, на самом деле были написаны (часто неизвестными) переводчиками, а не по имени, написанному на лицевой стороне книги.
Переводчики играют решающую роль в нашем обществе и бывают разных типов. Помимо литературных переводчиков , у вас есть специализированных переводчиков , которые работают в разных сферах.
Юридические переводчики , например, переводят тексты в области права.Сюда входят договоры, протоколы, указы, решения, показания и даже протоколы судебных заседаний.
Медицинские переводчики работают, чтобы сделать диагнозы врачей, планы лечения, информацию для пациентов и фармакологические инструкции понятными на другом языке. Они также работают над переводом инструкций по эксплуатации медицинского оборудования, чтобы пациенты могли безопасно и эффективно использовать указанное оборудование.
Короче говоря, каждый раз, когда возникает языковой барьер, переводчики работают над тем, чтобы письменный текст был понятным для любого количества читателей.Это означает, что работа литературным переводчиком — не единственный выход.
Я не говорю, что вам следует засидеться в своей комнате и начать перевод следующего классика или целого учебника. Вероятно, это откус больше, чем ты можешь прожевать. Начните с перевода простых и коротких документов, таких как письма, записки, речи и т. Д. Развивайте свои навыки. А затем, когда вы думаете, что у вас все хорошо, создайте их еще.
Вот хорошая книга, если хочешь заняться переводом.
4. Детский писатель
Написание детской литературы — хороший способ начать писать, особенно если язык, который вы используете, не является вашим родным.Это не заставляет вас конкурировать с носителями языка с хорошими связями и хорошо зарекомендовавшими себя, как в некоторых других областях.
Но даже больше, чем более легкая письменная нагрузка — что дает вам больше времени для фактического обдумывания сюжета и других областей, в которых вы стоите на равных с носителями языка — некоторые части детской литературы в значительной степени являются неиспользованными рынками, с множеством точек входа для двуязычных .
Кооперативный детский книжный центр отслеживал расовое разнообразие в освещении детей с 1985 года и обнаружил, что поле очень «белое».Как по авторству, так и по содержанию детские писатели преимущественно белые.
Другими словами, в основном белые писатели пишут о белых персонажах. Это оставило довольно большую дыру в освещении детей, когда речь идет о меньшинствах и цветных людях, но это область, которую могут идеально заполнить двуязычные.
В Америке, например, есть огромное латиноамериканское население, которому автор может угодить. (То же самое и с американцами азиатского происхождения.) Вы могли бы написать двуязычную детскую книгу, в которой одна и та же история рассказывается на двух языках, что сделает ее более доступной для определенных сообществ меньшинств.
Вы можете разговаривать с детьми из числа меньшинств, отражать их опыт и создавать персонажей и ситуации, к которым они могут относиться. Это родство было бы труднее найти авторам, работающим только на английском языке.
(Расовое разнообразие — важная тема, которую необходимо развивать в американской литературе, тем более что, согласно отчету Бюро переписи населения США за 2012 год, большинство детей в возрасте до одного года были расовыми меньшинствами.)
Из других новостей, исследование 6000 детских книг опубликованные между 1900 и 2000 годами, обнаружили гендерный дисбаланс в содержании этих книг.Самцы животных в 2,5 раза чаще играли центральных персонажей детских сказок, чем их коллеги.
Этот гендерный дисбаланс дает начинающему писателю более благодатную почву, чтобы найти свою нишу, и, опять же, это дает двуязычным писателям или писателям, работающим на втором языке, шанс прорваться на развивающийся рынок.
Наконец, детскому освещению еще предстоит многое сделать для изучения многих аспектов человечности. Помимо расовых, гендерных и культурных проблем, ему еще предстоит эффективно решить некоторые социальные проблемы, такие как наличие двух матерей в семье или проблема инвалидности, в широком масштабе.Итак, двуязычный писатель может решить эти проблемы и найти значимую работу.
Знание другого языка — это не просто знание другого набора ярлыков для одних и тех же вещей или приписывание другого набора звуков одним и тем же понятиям. Другой язык — это, по сути, другой взгляд на мир, другой набор очков для определенного опыта.
Эта гибкость мышления, эта гибкость в познании помогает решать неортодоксальные темы, подобные приведенным выше, и это именно то, что двуязычный автор может предложить.
5. Блогер, спикер и продавец
Лучшим примером того, кто построил карьеру таким образом, является Бенни Льюис, парень, стоящий за сайтом Fluent за 3 месяца. Он ирландский полиглот, языковой хакер и путешественник, который проповедует ценность ошибок при изучении нового языка.
Он выступает на конференциях TED и имеет знаменитую книгу: «Свободное владение языком за 3 месяца: как любой человек в любом возрасте может научиться говорить на любом языке из любой точки мира».
Я не говорю, что вы должны вести блог точно так же, как он, но вы можете открыть себя, когда дело доходит до изучения вашего собственного языка: писать и делиться реальным опытом, даже о ваших уязвимостях.Бенни так же хорошо говорит об изучении новых языков, как и он, потому что это его дни.
Он также делится фотографиями из своих путешествий. Теперь, если вы съеживаетесь при виде собственной фотографии на Facebook, вам будет труднее стать «человеком» в блогосфере. Поскольку ваши читатели не только хотят знать, что за сообщениями стоит реальный человек — с изъянами, изъянами и прочим, — они хотят знать, о чем вы на самом деле пишете.
Так что отвечайте на как можно больше комментариев.Подружитесь со своими читателями. Общайтесь с ними на личном уровне. Это ключ. Да, это требует времени, но главное.
Бенни также пишет обзоры продуктов (книг, программ, веб-сайтов, программного обеспечения), которые он пробовал на пути к тому, чтобы стать полиглотом. Он делится тем, что работает, или, скорее, что сработало для него, и доверяет читателям найти то, что им нравится.
У вас может быть другой опыт, чем у него. (Что ж, у вас определенно будет другой опыт.) Это хорошо.Поделитесь этим со своей аудиторией.
Но, что наиболее важно, ваш блог должен отвечать определенным языковым потребностям или он должен иметь определенный угол зрения, а не просто быть общим хранилищем ваших тирадов.
Например, если вы знаете испанский и любите готовить, вы можете завести блог под названием « Моя испанская кухня », где вы не только подадите рецепты, но и включите в них уроки изучения языка. Особая точка зрения Бенни заключается в том, что он может научить вас бегло говорить за три месяца, что является довольно захватывающим призывом к действию.
Части «спикер» и «продавец» действительно появляются после того, как у вас появится значительное количество подписчиков для вашего блога. Вот почему вы должны быть искренними в своих сообщениях и делиться тем, чем вы действительно являетесь. Это заставляет ваших читателей чувствовать, что они знают вас всегда. Это заставляет их хотеть встретиться с вами лично. Поэтому, когда вы объявляете о своем появлении, они придут толпами и сделают это целый день.
Если вы не совсем готовы к созданию собственного блога и бренда, но хотите использовать свои знания иностранного языка, FluentU может предоставить вам отличную возможность .
Мы нанимаем оплачиваемых фрилансеров для работы над всем: от написания сообщений в блогах (например, той, которую вы сейчас читаете) до создания и озвучивания контента YouTube для изучающих язык (идеально подходит для опытных репетиторов и учителей).
Сообщество FluentU состоит из людей со всего мира с разными языковыми знаниями и навыками. Присоединение к нашей команде даст вам возможность поддерживать полностью гибкий график работы в спокойной, благоприятной и совместной среде.
Посетите страницу «Вакансии на FluentU», чтобы узнать, на какие должности мы в настоящее время нанимаем.
6. YouTuber или Podcaster
Вы когда-нибудь задумывались о создании собственного телешоу или радиопостановки по изучению языка?
Благодаря современным технологиям вы можете — за считанные минуты! Обойдите все крупные медиа-конгломераты, перейдите на YouTube и создайте свой собственный канал. (Или, в случае с подкастами, скачайте бесплатное программное обеспечение для записи Audacity.)
Итак, у вас есть собственный канал YouTube для размещения всех этих замечательных видео.Что теперь?
Первое, что вам нужно сделать, чтобы сформировать свой контент, — это изучить ландшафт и узнать, что делают другие ютуберы.
Потому что вот что: вам не нужно полностью изобретать велосипед. Вам просто нужен собственный аромат. Посмотрите, что работает для других, а затем добавьте свою индивидуальность в свои собственные обучающие видео. Если ты смешной, будь забавным. Если серьезно, говорите серьезно (но интересно).
Вот несколько каналов для изучения языков на YouTube, которые помогут вам начать:
Обратите внимание, как эти учителя языка не тратят зря время своих зрителей.В их видео есть реальный, действенный материал, а не чушь. То же самое и с подкастами. Они должны быть достаточно информативными, чтобы стоить времени слушателей.
Если вам нравится анонимность радио и вы хотели бы поделиться некоторыми уроками языка, подкасты могут быть для вас. Если YouTube посвящен видео, то все подкасты содержат около аудио .
В отличие от видеоуроков, подкасты позволяют слушателям работать в многозадачном режиме, поэтому вы можете проводить уроки, пока люди делают что-то еще — например, едут на работу, ждут в очереди или наслаждаются свежим напитком.
Но проблемы YouTube и подкастов одинаковы. Вы должны продавать себя своей аудитории. Вам нужно знать, кто они и где проводят время в Интернете. И есть некоторые конкретные вещи, которые вам нужно сделать, чтобы расширить свою аудиторию: Вот несколько идей YouTube и идеи подкастинга, которые помогут вам начать работу.
7. Гид
Представьте, что вы турист на чужбине. Вы не говорите на языке и не знаете своего пути. Дом кажется вчерашним сном.Разве вы не почувствовали бы огромного облегчения, если бы кто-то, говорящий на вашем языке, взял вас и объяснил, что означают надписи на этих статуях?
На самом деле, разве вы не хотите платить человеку, который может сделать это за вас? Разве ваш отпуск не стал бы более значимым, если бы кто-нибудь объяснил вам контекст, историю или обоснование того, на что вы смотрите или мест, которые вы посещаете? Разве это не сняло бы столько стресса, если бы каждый раз, когда вы хотели сходить в ванную, вам не приходилось тратить 15 минут на поиски человека с «правильным поведением», чтобы спросить, где он?
С этой точки зрения легко понять, почему многие туристы выбирают международные турпакеты, организованные их соотечественниками, а не в целевой стране.
Экскурсовод, который может преодолеть языковой и культурный разрыв для туристов, является основным товаром. В мире, который стал меньше за счет современных транспортных средств и технологий, где путешествия стали нормой, гид, говорящий на языке своих клиентов, будет самым востребованным.
Согласно euromonitor.com, туристическая индустрия будет демонстрировать рекордные высокие темпы роста в период с 2014 по 2019 год, при этом Китай лидирует в области выездного туризма.
Китайцы идут!
И они берут с собой фотоаппараты.
8. Офицер связи
Офицер связи координирует деятельность двух сторон.
Допустим, две компании решили работать вместе над большим проектом. Каждый из них отправлял офицера по связи, который обсуждал со своим коллегой такие вопросы, как обмен информацией, планирование, управление ожиданиями и т. Д.
Короче говоря, офицеры связи — это лицо и сила сторон, которые они представляют. Точно так же позиция требует построения отношений. Офицеры связи — это клей, который скрепляет две разные стороны.
В стремительно глобализирующемся и интернационализирующемся обществе мы ожидаем большего количества совместных действий со стороны крупных корпораций, которые могут отличаться не только в культурном, но и в языковом отношении. Существует связующая функция, которую должны выполнить люди, которые могут эффективно облегчить общение между этими объектами.
Работа офицера по связи выходит за рамки работы устного или письменного переводчика, потому что для поддержания связи требуется более активная роль во всем процессе.
Если координация и общение — ваши сильные стороны, попробуйте эту работу.Вы познакомитесь с множеством разных людей и организаций, которые неизбежно обогатят ваш взгляд на мир. Короче, вы выиграете.
9. (Полевой) Исследователь
Большая часть человеческих знаний, особенно прошлых времен, не записана на английском языке. Например, китайская, арабская и индуистская цивилизации сделали открытия и идеи, которые все еще ждут, чтобы их обнаружил остальной мир.
Людей, работающих над некоторыми древними текстами, недостаточно, и их открытие было мучительно медленным.Мы не можем возложить эту огромную задачу на плечи нескольких исследователей National Geographic!
Итак, если вы хотите раскрыть знания о прошлом, тогда используйте этот дополнительный язык в качестве исследователя. Вы внесете вклад, который неизмеримо продвинет человеческие знания.
Как насчет полевых исследований? Как двуязычный может найти хорошее применение там дополнительному языку?
Я говорю здесь не только о том, чтобы отправиться в пустыню и провести раскопки или работать на древних памятниках.Полевые исследования также затрагивают вопросы, которые имеют непосредственное отношение к нам сегодня.
Маркетинговые исследования и экологические исследования являются примерами. Допустим, цель проекта — выяснить, как развитие местности повлияло на состояние окружающей среды. Вам нужно поговорить об этом с людьми, а также посмотреть на состояние воды и образцов почвы.
Большая часть исследований на самом деле связана с людьми и непосредственно задает уместные вопросы, причем качество исследования часто зависит от качества данных, полученных в таких интервью.
И дело в том, что если вы хотите, чтобы люди открылись, ослабили бдительность и больше делились своими истинными чувствами по какой-либо проблеме, вам следует послать кого-то, кто может говорить на их родном языке. Здесь на помощь приходит двуязычный спикер. Вы соединяете язык людей, работающих в этой области, и язык записи (язык, на котором будет написано исследование).
Если вы хотите познакомиться с интересными людьми и быть в курсе текущих проблем, почему бы вам не попробовать полевые исследования?
10.Менеджер по локализации продуктов
Знаете ли вы, что у McDonald’s, крупнейшего в мире продавца гамбургеров, нет даже Биг Мак в своем меню в Индии? Вместо этого у них есть Махараджа Мак, вариант без говядины. Это связано с тем, что в Индии уважают коров, и компания не хочет оскорблять религиозные убеждения людей, которым они служат.
Это может быть неочевидно, но даже такая строго стандартизированная компания, как McDonald’s, специализирует свою продукцию в зависимости от местоположения. Например, в Израиле был McShawarma, а в Японии — Mega Teriyaki Mac.
Менеджер по локализации необходим для правильного развертывания этих продуктов, включая исследования и разработку продуктов, маркировку и маркетинг. Двуязычный человек, который не только говорит на этом языке, но и хорошо понимает чувства людей в конкретной стране, может отлично справиться с этой работой.
Менеджеры по локализации продуктов следят за тем, чтобы добрые намерения компании были правильно переведены, чтобы все это не выглядело излишне покровительственным и не имело неприятных последствий.
Итак, мы собрали 10 рабочих мест, доступных для людей, владеющих вторым языком.
Если вы говорите только по-английски, почему бы вам не начать изучать новый язык сегодня?
Загрузить: Это сообщение в блоге доступно в виде удобного и портативного PDF-файла, который вы можете
можно взять куда угодно. Щелкните здесь, чтобы получить копию. (Загрузить)
И еще кое-что…
Если вам нравится идея изучения языка для будущей карьеры, мы здесь, чтобы помочь вам начать.
FluentU идеально подходит для того, чтобы погрузиться в совершенно новый язык или отточить язык, который вы выучили, до некоторого уровня беглости.
С FluentU вы изучаете настоящие языки — так же, как на них говорят местные жители. На FluentU есть множество видеороликов, включая трейлеры к фильмам, забавные рекламные ролики и веб-сериалы, как вы можете увидеть здесь:
Экран просмотра приложений FluentU.
На FluentU есть интерактивные подписи, которые позволяют нажать на любое слово, чтобы увидеть изображение, определение, аудио и полезные примеры. Теперь контент на родном языке доступен с интерактивными транскриптами.
Ничего не уловил? Вернись и послушай еще раз.Пропустил слово? Наведите указатель мыши на субтитры или нажмите на них, чтобы мгновенно просмотреть определения.
Интерактивные стенограммы FluentU
Вы можете выучить весь словарный запас из любого видео с помощью «режима викторины» FluentU. Проведите пальцем влево или вправо, чтобы просмотреть другие примеры слова, которое вы изучаете.
На FluentU есть тесты для каждого видео
А FluentU всегда отслеживает словарный запас, который вы изучаете. Он использует этот словарь, чтобы дать вам 100% персонализированный опыт, рекомендуя видео и примеры.
Загрузить: Этот пост в блоге доступен в виде удобного портативного PDF-файла.
можно взять куда угодно. Щелкните здесь, чтобы получить копию. (Загрузить)
Если вам понравился этот пост, что-то подсказывает мне, что вам понравится FluentU, лучший способ изучать языки с помощью реальных видео.
Зарегистрируйтесь бесплатно!
.