LINUX.ORG.RU

Избранные сообщения mathcrosp

chmod 000 /bin/chmod

Форум — General

Сабж. Я нашел два пути - реинастал coreutils и копия бинарника из какого-либо источника. Но говорят, что есть более красивый вариант. Так ли это? Не сплю, худею, мучаюсь.

 , ,

AXVill ()

Поиск работы за границей РФ: доступ из вашей страны запрещен и другие важные вещи

Форум — Job

Как вы знаете, в РФ есть довольно странное законодательство на счет персональных данных, в котором зарубежные рекрутеры не хотят разбираться. Со стороны это выглядит так, как будто вы пошли на сайт например Red Hat или IBM, а нажать кнопку «apply» вам не дали, вывесив текст о том, что законодательство вашей cтраны не позволяет обрабатывать персданные за границей.

ВАЖНО: эту заглушку не ставит работодатель, ее ставит рекрутер потому что так ему посоветовал МакКинзи или Прайс, которые так посоветовали потому что увидели некоторый риск для рекрутера. Никаких других прчин для этого нет, если вы зайдете на ту же страницу с IP любой европейской страны или США, то ваше резюме будет принято, рассмотрено, вам будут звонить на ваш российский номер телефона.

Важно понимать, что перетащить вас из страны в страну стоит некоторого количества сил и денег. Самостоятельно этого добиться трудно, для этого есть специальные агенства, у которых есть отработанные процедуры. Из этого есть 2 важных прямых следствия и одно косвеное: искать работу стоит в больших корпорациях/стартапах с деньгами, которым не горит вас нанять и для которых затраты на перевозку не критичны. Просто составьте таблицу больших фирм, чья продукция вам нравится, сходите на их раздел «Карьера» и попроситесь на все-все вакансии, которые вам подходят. Второе следствие: естественно все эти затраты кратно вернутся работодателю за первые ваши 2 года работы, так как бизнес - деятельность по извлечению прибыли и единственная причина вас нанять и тащить через пол мира - маржинальность вашей деятельности (местный попросит больше денег и не будет так держаться за место как вы за визу). Это нормально, считайте их затраты на ваше беспроблемное перемещение своей косвенной прибылью. Самостоятельно вы все равно потратите больше, можете потерпеть неудачу не зная точно важных формальностей. Косвенное следствие: с идущими работать в большую корпорацию посольство обращается значительно мягче, чем с идущими работать в новую или мутную фирму.

Прежде чем посылать CV в большую фирму, сходите на Linkedin/Facebook, пройдитесь там по знакомым и укажите их как референсы в резюме. Вы не поверите, сколько пользователей ЛОР, например, в Бренском Red Hat или IBM и с каким удовольствием они оставят о вас отзыв своему HR. Cпойлер: это возможные премии во многих конторах, так что не стесняйтесь спрашивать и просить рекомендации.

UPDATE из 2019. Теперь по крайней мере Red Hat заставляет формально аппаиться через российское представительство посте того, как зааплаился через VPN.

Перемещено Falcon-peregrinus из job

Перемещено Klymedy из talks

 , ,

Shaman007 ()

Пьеса «Тред на ЛОРе», в одно действие.

Форум — Talks

по мотивам Ищу гуру Си программирования

Входит Вопрощающий:

Всем привет.
Есть тут свободные полгода
В которые хотел бы я программы изучать,
Даю вам это знать.
Пока что начал только Java лишь учить
По книге, впрочем, и дошёл до ООП,
Вы подскажите, это правильно, иль надобно тем книгам сгнить?
Хотел бы выбрать я ЯП и направление,
Что позволяло бы работать на фрилансе,
А также, у людей чтоб вызывалось изумление.

Входит ЛОРовец:
Двадцатник баксов в час, или забудь о нас

Входит Новенький:
You're welcome.
Давай свои контакты - отпишу.
Ведь мне не жалко помогать, один чёрт одиночество последнее недели
Так разъедает душу мне, что еле я дышу.

Входит Наркоман:
K&R расскажет, и покажет
Тебе всё милый друг,
Ну а коль что вдруг непонятно станет, то значит в голове недуг.
Ведь суть проста: конструкций мало, новых слов десятка два.
И сей язык освоишь быстро.
Хочу предупредить я, правда, что сам язык не цель твоя,
Ведь цель должна учится на ошибках.
Важнее знать не то, что как вам делать сударь,
Важнее путь тернистый, полный ям, и отроколов
Вам пройти и знать тропинку по которой надобно идти таким путем
Чтобы все ямки обойти.
И к сожаленью, или, может, к счастью, тропинку ту лишь одному тебе дано найти.
Ведь мудрый путник лишь укажет, в какую можно сторону идти.

Входит Зевака:
Внесите царя.

Входит Лавсан:
Я хоть не Царь, но знаю всё про Си, давай, спроси

Вопрощающий:
Жду контакта.

Входит Некто:
Будут вопросы - кастуй, или пиши на мыло.
И мыло можно, если что, найти в LKML и ffmpeg-develop.

Входит Царь:
О Наркоман, а почему нули,
Которые смешать с навозом в три счета,
Так много кукарекают о том, о чем не понимают ничерта?

И ладно, я бы понял, если ты бы что-то мог,
Но тыж не смог, дак почему ж несмогший путник,
Который тонет в луже иль болоте,
Иль где-то на задворках недовуза, тот пыжиться кого-то направлять?
Куда ты их направишь? Ты желаешь, их повернуть развитие всё вспять?
Ведь что ты можешь,
Как кроме повторять приевшиеся шутки,
и предлагать приевшиеся книжки,
Ответь, мальчишка?
И удиви меня своим вопросом.

Вопрощающий:
Увы, нет у меня таких вопросов
(И тут же поникает носом)

Входит Эдди: (лавсану)
Ты царь?

Лавсан:
Кто такой царь?

Новенький (лавсану):
Он твой последователь.
Вон, четырьмя постами выше.
И, потише,
Сейчас начнется развлеченье.

Эдди (лавсану):
А, раз не царь ты, то ведь Си не знаешь!
К тому же, зачем еще и о Царе тут вопрошаешь?

Царь (вопрошающему):
Причем тут удивительные.
Когда хотите вы спросить что-либо, то естественно,
Что на пространные вопросы,
Не менее пространные я буду вынужден вам отвечать ответы,
Поймите ж это.

Поэтому, Царя должны вы право заинтриговать,
Чтобы смог он для себя обосновать
Полезность траты времени на ху**оса.
Вот смысл моего вопроса.
Зачем царю писать куда-то, без причины?
Не есть ли это признак вроде Эдди дурачины?

Входит Аноним:
Какое-то собранье зебр в треде.
И странно, все стихами говорят.
Похоже, что попал я в Ад.

ЗАНАВЕС.

 ,

lovesan ()

Рабочий ноутбук

Галерея — Скриншоты

Собственно, программа, которую я пилю с коллегой: отображение состояния космических аппаратов (на картинке метеоспутник - Электро-Л).

Написано на Qt и OpenSceneGraph.

О системе:

  • ноутбук Acer Aspire 5745DG
  • ArchLinux x86_64
  • awesome

Скриншот со всеми рабочими столами: ссылка.

>>> Просмотр (1366x768, 189 Kb)

 ,

unfo ()

Один из главный экспертов по C++ и автор D: Go - безнадёжно уныл и годится только в качестве клея, а Rust - страшный и пропускал «дни ног»

Форум — Talks

https://www.quora.com/Which-language-has-the-brightest-future-in-replacement-...

Ъ: В ответ на вопрос о том, какой ЯП имеет наиболее светлое будущее в качестве замены C, Go или Rust, и почему, Андрей Александреску обрисовал ситуацию следующим образом:

  • Go — фундаментально тормозной из-за косвенных вызовов функций и GC. Фактически ничего вразумительного без них написать на этом ЯП нельзя. Команда Go планирует решать проблему улучшением GC, но тут можно только пожелать им в этом бесполезном деле удачи.
  • В линии партии Go много диспропорционально крепкой и косной политики. Актуальные темы клеймятся, а любые попытки вразумительного диалога отвергаются. Политизирование технических вопросов крайне вредно в долгосрочной перспективе.
  • Go — излишне-примитивный, безнадёжно унылый и годится только в качестве клея.
  • Rust - дисгармоничная личность, которая пропускала «дни ног». Дизайн этого ЯП строится вокруг безопасного, точного управления памятью. Это очень сложная задача, которая, однако, никогда узким горлышком в программировании не являлась. Тем удивительней видеть, что решению не единственной и далеко не самой главной проблемы посвящена столь непропорционально огромная часть дизайна.
  • Синтаксис Rust'а раздражает. Он намеренно чужероден без всяких очевидных на то причин.

Из недостатков собственного ЯП он отметил низкую распространённость не смотря на номинально долгое существование, печальную историю с GC (есть RAII и ручное управление памятью, но стандартная библиотека завязана на сборщик мусора) и историческое отсутствие видения.

Перемещено tailgunner из development

 , , ,

SwiftLang ()

Чем плох Go?

Форум — Development

Отчего многие его так не любят, что с ним не так? Ну кроме того, что:

  1. Нет дженериков, укуренные решения вроде sync.Map interface{} в stdlib как следствие;
  2. Базилион способов объявить переменную;
  3. Магические функции new() и make(), которые работают только с некоторыми типами;
  4. Выбивающиеся из общего стиля ЯП iota вместо enum, <- и ->;
  5. Сильно ограниченные константы, пригодные только для базовых типов данных;
  6. Кастрированные кортежи;
  7. Бесполезность поддержки unicode в коде ввиду того, что экспортированы могут быть только элементы, начинающиеся на символ из ограниченного подмножества;
  8. Unicode code point'ы можно складывать как числа;
  9. Впиндюренные в сам ЯП, а не в библиотеку «горутины»;
  10. Невозможность форка проекта с сабпакетами (он не скомпилируется с помощью go get/go install, официальная рекоммендация - использовать sed);
  11. Сообщество, которое в каждом объективном дефекте видит глубокий смысл и большой плюс;
  12. Go 2, который не пофиксит ничего из этого, кроме дженериков.

Вроде, не критично всё это, жить можно же?

 , ,

SwiftRocks ()

В чём прикол использования go в качестве серверов (высоконагруженных)?

Форум — Talks

Я прочитал статью " Создатель Node.js: «Для серверов я не могу представить другой язык кроме Go» " ( https://habrahabr.ru/post/337098/ ), и у меня создалось ощущение, что чувак умом тронулся. Go - хипстерский язык, на который вообще нет никаких стандартов (в отличии от XEP явы), на котором пишут обычно просто мелкие сервисы и утилиты.

Каким образом на go можно писать нормальные сервера, если:
1. это развивающийся язык => никакого энтерпрайза
2. либы отвратительного качества (и количества) => никакого энтерпрайза
3. go изначально проталкивался одним человеком, который упоролся, а гугл выделил ему ресурсы на создание языка.
4. зачем, если есть java для бизнес-логики?
5. зачем, если есть nodejs для вебни? Причём не знаю, почему автор гонит на производительность, на том же хабре была статья, где на nodejs делали http/https-балансер (прокси с ssl-терминацией и оркестрацией виртуалок в облаке, запуская и останавливая их в зависимости от нагрузки).
6. зачем, если есть rust для быстроты и низкого уровня?
7. зачем, если есть python для админских скриптов с кууууучей либ?

Также язык:
1. Не асинхронен.
2. Не предназначен для энтерпрайза.
3. Бинарный (но при этом нельзя использовать для системного программирования, как rust).
4. Неудобный перехват эксепшенов.
5. Плохо документирован.
6. Нету каких-то киллер-фитч, типа (как в той же nodejs) простая организация очереди, тредов (причём нормальных, а не green), позволяя быстро делать многотредовые прилоежния). Или специализация на определенных задачах (например, как php и nodejs на вебне).

В чём соль? Очередной хипстерский хайп или я, как обычно, не догоняю за современной модой, предпочитая классические решения (типа J2EE на IBM i)?

No trolling.

Перемещено beastie из development

 , , ,

ktulhu6662 ()

На Rust запилили Coroutine, Go можно выкидывать?

Форум — Development

Мониторю гитхаб тренды по расту, вот такое поделие обнаружилось https://github.com/zonyitoo/coio-rs С растом слабо знаком, особо не разбирался, но как я понимаю «Work-stealing coroutine scheduling» тоже самое как и в goroutine?

 ,

foror ()

Сравнение Rust и C++ на примере трассировщика путей

Форум — Development

Тут как-то была тема про то, что хочется нормальное сравнение C++ и Rust. Вот эта серия статей, как мне кажется, вполне себе кандидат:

На днях вышла последняя часть, и я ее зачем-то перевел, пока читал. Выложу тут, чего пропадать. Ошибок и неточностей много, но мне очень лениво, извиняюсь. Вооот:

Разработка трассироващика путей на Rust`е, часть 7: Заключение

Чтобы изучить Rust, я портировал свой спекртальный трассировщик путей Luculentus на язык Rust. Результат я выложил на Github. В процессе я также немного обновил Luculentus, переведя его на более современный C++. Детали вы можете прочитать в прошлых постах. В этом же посте я хочу подвести итоги и сравнить результаты.

Картинка

Для начала, пример вывода трассировщика путей! Захардкоженная сцена выглядит вот так:

http://ruudvanasseldonk.com/images/robigo-luculenta.png

Если вам интересно что-то в ней изменить, то смотрите set_up_scene в app.rs.

Начало работы с Rust

В настоящий момент, вы можете установить компилятор Rust`а и Cargo за пару минут, даже в Windows. Да и заставить их работать было намного проще, чем, например, Scala и sbt.

Сообщество Rust`а показалось мне очень дружелюбным. Когда я не знал что делать, мне очень помогали IRC канал и /r/rust. Члены основной команды разработки языка есть и там и там, так что часто советы были весьма профессиональными.

На сегодняшний день Rust все еще быстро меняется. Во время процесса портирования порядочное количество функций были объявлены устаревшими или переименованы и даже синтаксис немного изменился. Некоторые люди описывают сегодняшний Rust как совершенно другой язык, сильно отличающийся от того, что было год назад, но я не использовал язык настолько долго, что бы почувствовать это. Все изменения в языке делают его лучше и более последовательным и я уверен, что Rust 1.0 будет отличным языком.

Владение

Если бы мне надо было описать Rust одним словом, это было бы «владение». Для меня, это то, что отличает Rust от остальных языков. В большинстве языков владение неявно и это приводит к нескольким типам ошибок. Когда в Си функция возвращает указатель, кто ответственен за освобождение памяти? Вы можете ответить на этот вопрос без подглядывания в документацию? И даже если вы знаете ответ, то все равно легко забыть освободить память или освободить ее дважды.

Проблема относится не только к указателям, она касается все ресурсов. Может показаться, что сборка мусора это отличное решение, но она работает только для памяти. Тогда вам нужен другой способ для освобождения ресурсов (вроде файловых дескрипторов) и все проблемы возвращаются. Например, сборщик мусора в C# спасает от ошибок «использования после освобождения» (use after free), но ничего не спасает вас от ошибок «использования после удаления» (use after dispose). Разве ObjectDisposedException намного лучше сегфолта? Из-за явного времени жизни и системы владения в Rust нет этих типов ошибок.

прим. ozkriff: поскольку я с C# знаком мало, то пришлось загуглить про этот ObjectDisposedException. Вот пример кода:

using System;
using System.IO;

public class ObjectDisposedExceptionTest 
{
   public static void Main()
   {     
      MemoryStream ms = new MemoryStream(16);
      ms.Close();
      try 
      {
         ms.ReadByte();
      }
      catch (ObjectDisposedException e) 
      {
         Console.WriteLine("Caught: {0}", e.Message);
      }
   }
}

Статическая система типов предотвращает ошибки типизации во время выполнения программы, которые часто встречаются в динамически типизированных языках, но она требует дополнительных усилий, что бы программа собралась. Система владения в Rust`е предотвращает ошибки некорректного управления ресурсами, но она требует еще большего внимания, чем статическая типизация. Строгость подхода к владению иногда усложняет написание корректного кода, но если компилятор отказывается собирать ваш код, то в нем часто есть настоящая проблема, которая прошла бы незамеченной в языках с неявным владением. Rust заставляет вам учитывать владение и это приводит к лучшему дизайну ваших программ.

Обновление Luculentus

Сами по себе достоинства явного владения не уникальны для Rust`а. Такой же код можно написать на современном C++, который очень сильно отличается от С++ до-2011. Когда я писал Luculentus, C++11 поддерживался только частично. Я использовал много простых указателей, которые сегодня уже не нужны. Я заменил большинство простых указателей в Luculentus на shared_ptr или unique_ptr, а массивы на векторы. Как следствие, все ручные деструкторы пропали. (Раньше их было шесть). Раньше было 11 операторов удаления, теперь их нет. Все управление памятью стало автоматическим. Это сделало код не только короче, но и снизило вероятность появления ошибок.

Портирование трассировщика путей на Rust улучшило его дизайн. Если ваше управление ресурсами некорректно, то код не скомпилируется. В C++ вы можете, например, взять адрес элемента вектора и, когда вектор уничтожится, указатель на элемент станет некорректным. Но код скомпилируется. Rust не позволяет таких «срезов» и это открыло мне глаза на то, о чем я не думал до этого. Теперь, даже работая с другими языками, я думаю, что если эта конструкция не скомпилировалась бы в Rust`е, то надо поискать путь получше.

Но все же, обновление демонстрирует, что возможно писать относительно безопасный код и на С++. Вы получаете безопасность и автоматическое управление памятью практически без накладных расходов. Единственной проблемой является то, что вы должны очень настойчиво стремиться к этому. Вы можете использовать unique_ptr, но так же можете и простой указатель. Все опасные инструменты «старого» С++ все еще доступны и вы можете смешивать их с новым С++. Конечно, есть определенная ценность в возможности собирать старый код (Бьерн называет это достоинством), но я бы предпочел не смешивать неявно эти две парадигмы и не поддерживать старые ошибочные решения. Требуется некоторое время, что бы разучиться использовать new и delete, но даже тогда старые API останутся с нами на очень долгое время.

Новое начало

Хорошим моментом в Rust является то, что он может начать все практически с чистого листа и учиться на ошибках старых языков. C++11 немного лучше своего предшественника, но он только добавляет новое и обязан поддерживать обратную совместимость. Одна из вещей, на которой это хорошо видно - синтаксис. В Rust, типы идут после имени и возвращаемый функцией тип идет после списка аргументов, что очень разумно. Синтаксис анонимных функций в Rust короток и в нем меньше повторения. Но я так и не могу привыкнуть к египетским скобкам, они до сих пор выглядят как-то не так.

Другим моментов, в котором Rust сделал правильный выбор, является мутабельность. В Rust`е все по-умолчанию неизменяемо, когда как в C++ наоборот. В коде Luculentus 535 раз появляется «const» (на момент написания). В Robigo Luculenta всего 97 «mut». Конечно, в C++ больше дублирования, но это все равно показывает, что неизменяемость по-умолчанию - лучше. Так же, компилятор Rust выдает предупреждение о переменных, которым не нужно быть изменяемыми, это тоже хорошо.

Несмотря на то, что синтаксис является делом вкуса, есть и измеряемые величины. Если я сравню количество непробельных символов в коде, то у С++ будет примерно 109 тысяч символов (не считая файлы, которые я не портировал на Rust), а у Rust - 74 тысячи. Почти на треть меньше.

C++ славится своими информативными и понятными сообщениями об ошибках, когда что-то идет не так в шаблонном коде. Ошибки в Rust`е, в основном, намного более понятны, но некоторые тоже могут напугать:

error: binary operation `/` cannot be applied to type `core::iter::Map<'_,f32,f32,core::iter::Map<'_,&[f32],f32,core::slice::Chunks<'_,f32>>>`

Производительность

Я добавил базовые счетчики производительности в Luculentus и Robigo Luculenta. Они считают количество завершившихся задач трассировки (trace tasks) в секунду. Вот результаты:

Компилятор              платформа           производительность

GCC 4.9.1*              Arch Linux x64      0.35 ± 0.04
GCC 4.9.1               Arch Linux x64      0.33 ± 0.06
rustc 0.12 2014-09-25   Arch Linux x64      0.32 ± 0.01
Clang 3.5.0             Arch Linux x64      0.30 ± 0.05
msvc 110                Windows 7 x64       0.23 ± 0.03
msvc 110*               Windows 7 x64       0.23 ± 0.02
rustc 0.12 2014-09-23   Windows 7 x64       0.23 ± 0.01

Везде выставлены самые высокие уровни оптимизации. Компиляторы со звездочкой использовали PGO (Profile-guided optimization - оптимизация, управляемая профилированием https://ru.wikipedia.org/wiki/Profile-guided_optimization). Единственный вывод, который я могу сделать из этого, что вам, наверное, не стоит использовать Windows для сильно нагружающих процессор приложений.

Во второй статье из этой серии я отметил, что код на Rust`е собирается очень быстро, но тогда было не много кода. Сейчас время сборки вот такое (в секундах):

Компилятор             Время

rustc 0.12 2014-09-26  7.31 ± 0.05
Clang 3.5.0            13.39 ± 0.03
GCC 4.9.1              17.3 ± 0.5
msvc 110               20.4 ± 0.3

Сборка теперь не так быстра, но все равно быстрее С++.

Заключение

Изучать Rust было интересно. Мне понравился язык и портирование привело к нескольким озарениям, которые могут улучшить и оригинальный код. Владение часто неявно в других языках, что увеличивает чувствительность кода к человеческим ошибкам. Rust делает владение явным, убирая возможность допущения подобных ошибок. Все безопасно по умолчанию. Все это сдвигает Rust намного ближе к краю «стабильность» на спектре, чем к краю «быстрая разработка». Я не написал на Rust`е достаточно кода, что бы быть на 100% уверенным, но пока что достоинства Rust`а перевешивали его недостатки. Если бы я выбирал между C++ и Rust`ом для своего следующего проекта, то выбрал бы Rust.

Ну как, это тянет на «нормальное» сравнение? По-моему, в любом случае интересно почитать.

 ,

ozkriff ()

Царю про 10к в надежде перевести дискуссию в конструктив

Форум — Development

Я не думаю, что кого-то можно впечатлить принципиальной возможностью запустить 10к потоков для обслуживания клиентов. Когда говорят про встанет раком, имеют в виду неоправданную потерю производительности.

Если ты готов померять реальный перформанс, пиши, я налабаю на еполле аналоги твоих тестовых серверов, чтобы не ты один тратил своё время. Меня например больше в всего в контексте этого спора интересует, как поведёт себя сервер с 10к потоков например на 4 ядрах против еполльного на одном таком же ядре, в вариантах без локов и с.

Результаты исследования можешь запостить на ЛОРе и восстановить честь среди пятизвездочных 😝

Начало дискуссии где-то рядом в удаленных по инициативе какого-то наркомана.

PS скорее всего я отвечу не раньше ночи или следующего утра.

 ,

staseg ()

Стоит ли ехать в *опу только потому, что Эуропа?

Форум — Talks

Есть job offer в тёплую Европейскую страну.

  • По ангельски никто в стране не говорит. Хотя на сайтах обещают, что язык учится очень быстро.
  • Оплата труда. Их gross равен тому, что я в своём зажопинске получаю net. При том, что цены у них в 1.5-4 раза выше и ещё придётся снимать жильё (компенсируется это или нет, ответить чётко не смогли).
  • Компания не в Греции, но большинство сотрудников - греки (как-то это характеризует компанию?).
  • Собеседующий говорит с кошмарным акцентом, ушам пришлось секунд 30 привыкать.
  • Собеседование вести пришлось самому, о чём говорить HR точно не знал. Повезло, что я заготовил план интервью (вдохновлённый собеседованиями в Гугл) и список вопросов. Хотя от минутного зависа рекрутера в середине это не спасло: я уже всё что они хотели рассказал, всё что надо спросил, код они оценили по участию в open-source. И рекрутер думал о том, зачем он нужен.

Вопрос. Стоит ли? Из преимуществ: они оформляют рабочую визу, оплачивают relocation, Эуропа, столица. Всё.

Нужна такая полуиммиграция или сразу нормальные варианты подбирать? Год назад был оффер из US, который не принял. Несколько месяцев назад получил оффер на remote позицию в Австралийской компании, но потом они пропали и с тех пор ничего от них не слышно. Больше офферов от забугорных компаний не поступало.

 , , , ,

dazdraperma ()

После многих лет проганья на C++ я узнал, что C массивы работают не совсем так, как я думал

Форум — Development

Я всегда думал, что в C массивы, определенные как-то так int array[13] = {0}; это на самом деле то же самое, что int*, то есть память выделяется на стеке, и где-то там есть локальная переменная array, указывающая на кусок памяти под 13 интов. И я думал, что единственная разница между массивом и указателем это то, что для массива переопределен оператор sizeof, и соответственно компилятор статически знает его размер.

Сегодня я учился работать в gdb, рассматривал там всякие значения и адреса переменных, и тут конфуз у меня случился. Есть переменная fptr ptrs[3] = { NULL, get_wisdom, put_wisdom };, остановился я в gdb на брейкпоинте, и пишу

(gdb) print ptrs
$12 = {0, 0x804857e <get_wisdom>, 0x8048627 <put_wisdom>}

И думаю: «хмм, странно, почему этот gdb по умолчанию печатает массив/указатель как массив? Пробую print /a ptrs - не получается. Ну ладно, думаю я, видимо в gdb так переопределен принт для массивов, определенных как массивы, и /a почему-то не работает, ну да и хрен с ним.

Пробую затем

(gdb) print &ptrs
$13 = (fptr (*)[3]) 0x804a0d4

и думаю: „ага, почему-то чтобы мне получить значение указателя ptrs, надо написать & - странно плохо сделали тупо, а теперь я хочу получить адрес собственно переменной ptrs, а не ее значение:

(gdb) print &&ptrs
A syntax error in expression, near `&&ptrs'.

А оно не работает. Ну тут я начинаю понимать, что что-то здесь нечисто, и возможно я неправильно понимаю C-шные массивы. Иду и создаю на тест программу:

#include <stdio.h>

int main() {
    int array[5] = {0};
    printf("array = %p\n", array);
    printf("&array = %p\n", &array);
};

запускаю ее, а оно выдает

array = 0xbffff530
&array = 0xbffff530

Мамочки, думаю я, так что же, когда в Си объявляешь массив как массив, то он на самом деле не указатель, там нет никакой переменной в памяти, хранящей этот адрес, а есть лишь кусок памяти под 13 или сколько там элементов на стеке, и компилятор статически знает его адрес и при индексации прибавляет к нему сдвиг? И соответственно можно получить лишь адрес этого куска памяти, и этот адрес нигде как переменная не хранится. И соответственно переприсвоить массиву указатель на что-то другое нельзя.

array = calloc(6, sizeof(int));
//a.c: In function ‘main’:
//a.c:7: warning: incompatible implicit declaration of built-in function ‘calloc’
//a.c:7: error: incompatible types in assignment

или

printf("&&array = %p\n", &&array);
// какая-то там ошибка про label'ы, видимо && в C для гоуту используется? не знаю

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

А вообще мне непонятно, нафиг они так сделали? По-моему если бы были только указатели, без массивов, то было бы проще и удобнее. Ну конечно какая-нибудь там конструкция типа sizeof пускай работает, чтобы можно было статически размер их получать.

 

hlebushek ()

Латвия: история успеха

Форум — Talks

Привет, лоровцы. Меня попросили поделиться историей успеха, вот делюсь.

В январе этого года мы переехали в Латвию. Насовсем или нет - ответа на этот вопрос у меня нет, время покажет. Пока нравится. Первые несколько дней вообще было ощущение «вау, как круто, я приехал куда надо». Потом постепенно протрезвел и пришло понимание, что есть как плюсы, так и минусы в сравнении с Эрафией. В любом случае плюсы достаточно важные, работа достаточно интересная и полезная для резюме, поэтому назад не хочется.

Работу я искал довольно долго. По грубым оценкам - полтора года. Как окончил магистратуру, решил, что в аспирантуру не пойду (слишком сложно). Но это не были поиски 24/7 в течение полутора лет. Совмещая с постоянной работой и периодическими отпусками (с зарубежными поездками) я кидал резюме во все сайты/почтовые адреса, где хоть немного находил что-то интересное. Процентов 90 резюме или не читались, или отправлялись в шрёдер (наверное). Из оставшихся 10 - приглашали на собеседование, чаще всего удалённое, один раз приглашали приехать). И не было особых предпочтений, куда направить трактор. Латвия как-то случайно сюда попала.

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

По приезду оформили голубую карту. Процесс переезда был довольно долгим. С бюрократией немного помогали местные HR - говорили, с какими бумагами и куда идти.

Первый долгий квест - справка о судимостях (или их отсутствии). Нет, процедура очень простая - всего лишь навсего с паспортом придти, написать заявление, потом получить. Даже бесплатно, пошлину не надо платить. Нюанс в том, что ждать то ли 35, то ли 37 дней. И хоть ты тресни, быстрее не сделают.

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

Потом надо было ехать в посольство в Москву. Минус день, включая дорогу туда и обратно, все документы сданы, осталось ждать ответа. Ответ приходит по электронной почте (письмо на латышском, перевода нет, гуглотранслейт не работает, так как отсканированный pdf, а не текст, только если вручную переводить). Девочка из HR подсказала, что ответ положительный. После него поехали в Латвию. Вообще для въезда нужна шенгенская виза - нам повезло, у нас обоих с супругой она уже была.

После въезда где-то через 4 дня сделали голубую карту, на пятый пошёл на работу. Раньше нельзя было - не пускали. Законы ценят и соблюдают.

Плюсы: + На русском говорят почти везде. Где не говорят, поймут на английском. Кстати, если выпендриться и поздороваться с кем-то на лытышском, разговор продолжится именно на нём, что сильно усложнит понимание :) так что лучше так не делать, а сразу говорить на русском.

+ Латышский язык не выглядит чем-то сложным. Только мотивация учить его куда-то пропала после въезда в страну. А вообще надо. Субъективно он мне кажется проще немецкого или даже английского для русскоговорящего.

+ Стоимость жизни хоть и выше, чем в России, сравнивая даже с Москвой (и весьма ощутимо), но вполне разумная. Есть с чем сравнить (с той же Германией и Австрией).

+ Нет толп людей, толкучки, длинных очередей, пробок. Все бумаги в местном аналоге УФМС приняли очень быстро, без предварительной записи в тот же день.

+ Очень чистый воздух. И вообще очень чисто и аккуратно.

+ Город маленький, можно и нужно ходить пешком. Я так вообще поселился в 10 минутах ходьбы от места работы.

Минусы: - Медицина платная и грабительская. Причём по ходу платная она даже для местных, просто все покупают страховку (может, государство оплачивает часть?). Компания предоставляет страховку, но только после испытательного срока, а 3 месяца жить без страховки предлагает - круто. Даже не было рекомендации купить самому. Даже ни разу не заболев нужно было пройти некоторых врачей + сделать флюру - отняло > 100€, всё возместила компания, но цены дикие же. Про качество медицины пока судить не могу, надеюсь, и не придётся.

- Банки тоже грабят своих клиентов. Каждый чих стоит денег. Причём, я так понял, это касается всех банков, не только самых крупных - рыночная ситуация такая. Зато надёжнее, чем в Эрафии. Наверное? Проценты по депозитам несерьёзные - есть подозрение, что скоро их и вовсе сделают отрицательными.

- Связь тоже дорогая, что мобильная, что интернет. Но вроде качество хорошее. 4G вот тут есть (хотя мой телефон всё равно в него не умеет).

- Хоть на русском поймут, камнями кидать не будут, без латышского всё же тяжко. Надписи все на латышском, на улицах, на домах, на объявлениях, на ценниках в магазинах. Уметь читать по-латышски полезнее и важнее, чем говорить.

Линукс тут при том, что работаю под ним, в нём scala+sbt+maven+idea+git и куча всего.

Пока всё, что в голову пришло - вы спрашивайте, если что. Может на что-то сразу не смогу ответить, но смогу потом, когда дольше поживу и узнаю.

 , , , ,

BattleCoder ()

Какой язык относительно легче изучается: японский или корейский?

Форум — Talks

Хорошо владею 2 славянскими языками, а также английским, базовым испанским латинской Америки и совсем начальным кхмерским.

Есть желание и возможность изучить японский или корейский язык, кто пробовал оба или в процессе изучения, какой из этих языков (+ письмо, это важно для письменного общения) относительно легче поддается изучению?

Чье письмо читаемее? Какой легче для слуха? Какой язык в целом проще?

 , ,

redhat ()

Немного о Чили...

Форум — Talks

Уже пара лоровцев (cast kostett, val-amart) меня попросили ответить на вопросы о жизни в Чили, потому решил открыть эту тему. Если модераторам покажется, что это - жуткий офф-топ (мне и самому кажется, надо признаться) - снесите тему, если можно, без резанья скора. Но, ИМХО, если есть интересующиеся - почему б и нет; тем более, кому-то информация может показаться полезной. А в толксах и не такой офф-топ гоняют.

Начну с линукса, ибо тематика форума обязывает.
Одна из вещей, которые тут приятно удивили, это количество линукса. Практически во всех банках - линух; в большинстве магазинов у продавцов-консультантов - линух; на студенческих десктопах или линух, или мак. Линуха больше, а вот винды не видел вообще. Народ приучен к тому, что «стандартный формат документа» - это odf, а не .doc 2003-го офиса.
Google захватил мозг всем. Увидеть человека, который сёрфит интернет чем-то кроме хрома, почти нереально. Гуглодоксы тоже пользуются огромной популярностью. Не могу сказать, что мне это нравится, но вот как-то так.
Как-то слышал мнение, что в Чили трудно захватить, скажем, 20% рынка - либо у тебя 0%, либо 100%. Это - шутка, но в ней есть доля правды. Про браузеры я уже написал, но это - не только о них. В РФ борятся между собой несколько соцсетей, в Чили многие вообще не знают, что есть что-то кроме фейсбука. Его используют для всего - от обсуждения котиков до важных переговоров. Остальные соцсети если используются, то сугубо с одной целью. ЛинкедИН - это сайт вакансий; ВК - это для чилийцев «música pirateada». Один знакомый на полном серьёзе был сильно удивлён, что в ВК можно добавлять кого-то в друзья...
Смартфоны у всех. Во-первых, очень часто они сильно мало стоят засчёт контракта; во-вторых, тут могут ходить в старой одежде, и при этом светить новеньким айфоном. Однажды видел iPhone 5 у бомжа. У настоящего бомжа, живущего на улице. Вот как-то так. При этом, смарты - чуть ли ни единственная сфера, где есть какой-то паритет: тут много и айфона, и андроида, и винфона; и даже файрфокс-ос уже видел несколько раз.

Это будет пост для начала; спрашивайте, что интересно - расскажу. Вцелом, можно зайти в луркмор и почитать статью «Канада» - если б я писал про Чили, то просто б скопировал большую часть текста...

 , ,

stav_artefakt ()

Another XMonad desktop 2560 x 1440

Галерея — Скриншоты

// ↑ выполняя технические требования относительно размера изображения, вырезал воркспейс с браузером ↑ //
// всё изображение целиком полностью → https://zfh.so/hell/e1c684f84330a8fc58793b649d7b59271293766f.png //

*** ВВЕДЕНИЕ ***

Всем привет
!

Минувшим летом я участвовал в Gentoo Screenshot Contest 2012[0], но к сожалению
не попал даже в пятёрку призёров. Меня попросили запостить тот же самый скриншот
на лор, хотя, честно говоря, трудно представить кому всё это может быть
интересно.

*** ОКРУЖЕНИЕ ***

В качестве window-manager'а используется xmonad. Все нарекания к иксмонаду
сводятся к недостатку желаний - трудно придумать, что он в данный момент не
умеет делать.

Трэем служит минималистичная утилита trayer, никаких нареканий пока не
было. В трее висит скайпик, nm-applet и davmail[1].

В качестве бара используется xmobar-usable, доделанный[2] из xmobar добрым
человеком до умения сжирать Haskell-код в виде конфига, а не просто набор сухого
бездушного текста.

Концепцию воркспейсов можно сформулировать следующим образом: один стол - одна
задача. Конечно иногда сталкиваюсь со случаями «много столов - одна задача» и
даже «один стол - много задач», но это действительно редкость.

Кроме того, нахожу крайне полезным иксмонадный скратчпад[3] - удобно иметь
многотабный урхвт-блокнотик, который можно получить из любого воркспейса за
O(1). Особенно это удобно, когда вдруг приходит идея новой песни и нужно
срочно куда-то её записать.

Скриншот сделан с использованием иксмонадного модуля xmonad-screenshot[4], с помощью
которого можно описывать любые предикаты для набора ворксейсов и навешивать их
на нужные хоткеи.

Насчёт ШГ - единожды попробовав терпинус отказаться от него уже невозможно.
Большая часть конфигов обитает на гитхабе[5].


*** ВОРКСПЕЙС ♫ ***
http://zfh.so/hell/fb42566d2a68ee938f4b872cbaa5e0565a3892d1.png

Справа loh и lohd, слева ncmpcpp.
Loh[6] - небольшой мульплеерный ласт.фм скробблер, разнесённый на сервер и
клиент. Никак не доходят руки доделать его полностью ⇒ он одновременно и
используется и дебажится :[

*** ВОРКСПЕЙС τ ***
http://zfh.so/hell/95ab55b8acd55411ac01a74ec5f6e9c143dbda66.png

Ирсси и тандербёрд.
Ирсси открыт в тмуксовой сессии на впске. Именно поэтому можно наблюдать
странный вызов в xmonad.hs:

jws_irssi = urxvt ++ " -title jεωs -e ssh jws -t 'export LANG=en_US.UTF-8; tmux attach-session -t irssi'"

Скрипты в ирсси:
$> ls ~/.irssi/scripts/autorun/
adv_windowlist.pl hilightwin.pl nickcolor.pl nicklist.pl splitlong.pl usercount.pl

*** ВОРКСПЕЙС Λ ***
http://zfh.so/hell/30c0ad9eea534450d007b9f9831cb19d3f0f5847.png
Браузер firefox + pentadactyl с плагином buftabs[7], который полностью
аналогичный одноимённого плагиму к виму - отображения набора буферов (табов) с
их номерами. :b даёт быструю навигацию по табам. Цветовая схема в пентадактиле
pemees[8].


*** ВОРКСПЕЙС 4 ***
http://zfh.so/hell/3161e9a817a265e8d7bc2ecb35c0eb5cfb92a59e.png

gvim, urxvt с tabbedex - ничего интересного

*** ВОРКСПЕЙС 5 ***
http://zfh.so/hell/52de4d1f72b004432b6e5d44470611b449cd8f0e.png

gvim с исходником статьи, оформляемой в latex'е. Рядом открыт apvlv[9] (если кто
не знает, это такой легковесный бестолковый пдф-ридер с вимоподобным управлением).


*** ВОРКСПЕЙС 6 ***
http://zfh.so/hell/381c7fd47605a999e0d02836cb47f6d9969245a2.png

Цветастые выхлопы haskell-updater'а и eix-sync'а. Ничего интересного.

*** ВОРКСПЕЙС 7 ***
http://zfh.so/hell/e21626e54c7ffe95e9e2712fad650e2027f682e9.png

gvim и две инстанции tig'а.
Tig[10], если кто не знает, это такой быстрый удобный восхитительный гит-клиент
с TUI на ncurses.

В виме открыты два решения проблемы автоматизированной установки своего набора
конфига из github://dotfiles на рабочую машину. У многих, знаете ли, есть
install.hs или ещё пуще install.sh, но планета постепенно переезжает на
Biegunka'вские скрипты. Биегунка[11], если кто не знает, это такой фреймворк для
работы с гиторепами и всякими конфигами с возможностью подтирания за собой.

*** ВОРКСПЕЙС 8 ***
http://zfh.so/hell/01a259b068566ad0f3e04e04bc08cec8ba922a9d.png

Какой-то стыдный баш, открытые маны, поверх всего иксмонадовский scratchpad, о
котором уже говорилось.

*** ВОРКСПЕЙС 9 ***
http://zfh.so/hell/f746db2169da991b12ffeca8d84b996aed8ed95b.png

gvim, evince с открым djvu-файлом, ничего интересного.

*** ВОРКСПЕЙС 10 ***
http://zfh.so/hell/3969fe45cd5eff7b7c466f6000be172dacc24f18.png

На конкурсе зачем-то требовалось прикрепить это к скриншотику:

> emerge --info | head -n1
Portage 2.1.11.10 (default/linux/amd64/10.0, gcc-4.5.3, glibc-2.15-r2, 3.5.0-gentoo x86_64)

----
В следующих выпусках:
- почему trayer неок, а stalonetrayer ок?
- кто сломал xmobar?
- вимоподобное управление в ирсси
- чем плох apvlv и чем хороша zathura

----
[0]: http://sc.gentooligans.com/image/dmalikov/2012/08/28/dmalikovs-xmonad-contrib...
[1]: http://davmail.sourceforge.net/
[2]: https://github.com/dmalikov/xmobar-usable
[3]: http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Util-Scratchpad.html
[4]: https://github.com/supki/xmonad-screenshot
[5]: https://github.com/dmalikov/dotfiles
[6]: https://github.com/dmalikov/loh
[7]: https://github.com/dmalikov/dotfiles/blob/master/buftabs.js
[8]: https://github.com/dmalikov/dotfiles/blob/master/pemees.penta
[9]: http://naihe2010.github.com/apvlv/
[10]: http://gitready.com/advanced/2009/07/31/tig-the-ncurses-front-end-to-git.html
[11]: https://github.com/biegunka

>>> Просмотр (2560x1440, 91 Kb)

 ,

dmitry_malikov ()