Pull to refresh
  • by relevance
  • by date
  • by rating

ReactOS дайджест #2

Open source *
image
  • Стартап WooS.NET ищет потенциальных инвесторов. Если вы заинтересованы в инвестировании, пожалуйста свяжитесь со мной через систему личных сообщений Хабра.
  • ReactOS под брендом WooS выиграл грант на 100 тысяч рублей во время проведения Селигера в рамках номинации «лучшая презентация проекта». Еще публикации [1],[2]
  • Проект ReactOS принимал участие в Thomas Krenn Open Source Förderung 2011, занял там 5 место и выиграл 700 евро.
  • Участие в программе Google Summer of Code плодотворно движется к практически триумфальному завершению. Почти готова поддержка тем визуального оформления. Полностью переписан и залит в транк (основная ветка разработки) сетевой стек операционной ситемы. Результаты работы по еще 4 слотам «лета кода» ожидаются в самом скором времени.
  • Alex Ionescu вернулся в команду разработчиков проекта.
  • Вышли и были переведены на русский язык выпуски новостей №86, №85, №84, и №83
  • Все самые свежие и горячие новости о наших достижениях всегда можно узнать через живой журнал, твиттер, фейсбук или вконтакте, где нас очень легко найти по словам reactos или woos


UPD. Официальный сайт коммерческого стартапа WooS.NET — www.woos.es

Пара интересных видео о проекте ReactOS-WooS
Total votes 62: ↑49 and ↓13 +36
Views 1.1K
Comments 45

Несколько подробностей о функции main

Configuring Linux *
Sandbox
Однажды заинтересовался, содержимым стека функции main процесса в linux. Провел некоторые изыскания и теперь представляю вам результат.

Варианты описания функции main:
1. int main()
2. int main(int argc, char **argv)
3. int main(int argc, char **argv, char **env)
4. int main(int argc, char **argv, char **env, ElfW(auxv_t) auxv[])
5. int main(int argc, char **argv, char **env, char **apple)

argc — число параметров
argv — нуль-терминальный массив указателей на строки параметров командной строки
env — нуль-терминальный массив указателей на строки переменных окружения. Каждая строка в формате ИМЯ=ЗНАЧЕНИЕ
auxv — массив вспомогательных значение (доступно только для PowerPC [1])
apple — путь к исполняемому файлу (в MacOS и Darwin [2])
Вспомогательный вектор — массив с различной дополнительной информацией, такой как эффективный идентификатор пользователя, признак setuid бита, размер страницы памяти и т.п.

Далее о том как получить массив вспомогательных значений для i386 и x86_64, а также об остальном содержимом «сегмента» стека.
Читать дальше →
Total votes 87: ↑82 and ↓5 +77
Views 15K
Comments 8

Tasks и Back Stack в Android

Development for Android *
Tutorial
Привет. Из названия темы вы могли заметить, что речь пойдет о том, как устроены Tasks и Back Stack в Android. Эта статья будет являться свободным переводом официального источника. Тема больше ориентирована на новичков, но я думаю, что и опытный разработчик сможет узнать что-то новое, т.к. тема специфична и не часто приходится кастомизировать поведение наших Activity.
Читать дальше →
Total votes 22: ↑18 and ↓4 +14
Views 71K
Comments 12

Lock-free структуры данных. Эволюция стека

Programming *C++ *

В предыдущих своих заметках я описал основу, на которой строятся lock-free структуры данных, и базовые алгоритмы управления временем жизни элементов lock-free структур данных. Это была прелюдия к описанию собственно lock-free контейнеров. Но далее я столкнулся с проблемой: как построить дальнейший рассказ? Просто описывать известные мне алгоритмы? Это довольно скучно: много [псевдо-]кода, обилие деталей, важных, конечно, но весьма специфических. В конце концов, это есть в опубликованных работах, на которые я даю ссылки, и в гораздо более подробном и строгом изложении. Мне же хотелось рассказать интересно об интересных вещах, показать пути развития подходов к конструированию конкурентных контейнеров.
Хорошо, — подумал я, — тогда метод изложения должен быть такой: берем какой-то тип контейнера — очередь, map, hash map, — и делаем обзор известных на сегодняшний день оригинальных алгоритмов для этого типа контейнера. С чего начать? И тут я вспомнил о самой простой структуре данных — о стеке.
Читать дальше →
Total votes 73: ↑73 and ↓0 +73
Views 38K
Comments 14

Путешествие по Стеку. Часть 1

Smart-Soft corporate blog Programming *C *
Recovery mode
Translation


В предыдущих материалах мы рассмотрели размещение программы в памяти – одну из центральных концепций, касающихся выполнения программ на компьютерах. Теперь обратимся к стеку вызовов – рабочей лошадке большинства языков программирования и виртуальных машин. Нас ожидает знакомство с удивительными вещами вроде функций-замыканий, переполнений буфера и рекурсии. Однако всему свое время – в начале нужно составить базовое представление о том, как работает стек.
Читать дальше →
Total votes 47: ↑44 and ↓3 +41
Views 73K
Comments 15

Как устроены дыры в безопасности: переполнение буфера

Information Security *Website development *Programming *Compilers *C *
Translation
Прим. переводчика: Это перевод статьи Питера Брайта (Peter Bright) «How security flaws work: The buffer overflow» о том, как работает переполнение буфера и как развивались уязвимости и методы защиты.

Беря своё начало с Червя Морриса (Morris Worm) 1988 года, эта проблема поразила всех, и Linux, и Windows.



Переполнение буфера (buffer overflow) давно известно в области компьютерной безопасности. Даже первый само-распространяющийся Интернет-червь — Червь Морриса 1988 года — использовал переполнение буфера в Unix-демоне finger для распространения между машинами. Двадцать семь лет спустя, переполнение буфера остаётся источником проблем. Разработчики Windows изменили свой подход к безопасности после двух основанных на переполнении буфера эксплойтов в начале двухтысячных. А обнаруженное в мае сего года переполнение буфера в Linux драйвере (потенциально) подставляет под удар миллионы домашних и SMB маршрутизаторов.

По своей сути, переполнение буфера является невероятно простым багом, происходящим из распространённой практики. Компьютерные программы часто работают с блоками данных, читаемых с диска, из сети, или даже с клавиатуры. Для размещения этих данных, программы выделяют блоки памяти конечного размера — буферы. Переполнение буфера происходит, когда происходит запись или чтение объёма данных большего, чем вмещает буфер.

На поверхности, это выглядит как весьма глупая ошибка. В конце концов, программа знает размер буфера, а значит, должно быть несложно удостоверится, что программа никогда не попытается положить в буфер больше, чем известный размер. И вы были бы правы, рассуждая таким образом. Однако переполнения буфера продолжают происходить, а результаты часто представляют собой катастрофу для безопасности.
Читать дальше →
Total votes 48: ↑47 and ↓1 +46
Views 105K
Comments 29

Стекирование коммутаторов Cisco. Часть 1

CBS corporate blog Cisco *Network technologies *


В данной статье (будет состоять из двух частей) хотел бы кратко пройтись по основным технологиям стекирования коммутаторов Cisco. Попробуем разобраться с общей архитектурой передачи пакетов в рамках каждого типа стека, реакцией на отказы, а также с цифрами пропускной способности. В первой части мы рассмотрим технологии StackWise и StackWise Plus. Во второй части — StackWise-160, StackWise-480, FlexStack и FlexStack Plus.
Читать дальше →
Total votes 12: ↑10 and ↓2 +8
Views 70K
Comments 5

Стекирование коммутаторов Cisco. Часть 2

CBS corporate blog Cisco *Network technologies *

Всех приветствую!
В первой части данной статьи мы рассмотрели достаточно старые технологии стекирования для семейства коммутаторов Cisco 3750, а именно StackWise и StackWise Plus. Сегодня предлагаю продолжить рассмотрение остальных технологий. Напомню, у нас остались StackWise-160, StackWise-480, FlexStack и FlexStack Plus.
Читать дальше →
Total votes 9: ↑8 and ↓1 +7
Views 40K
Comments 9

Lock-free алгоритмы и реализация стека

C++ *C *Concurrent computing *
В данной статье хочу поднять несколько холиварную тему — тему безлоковых алгоритмов, а в частности реализации безлокового стека. Точнее, стек этот условно безлоковый, почему — будет ясно далее. Хочу сразу предупредить, что все примеры будут даны на языке C.

Для начала, для тех кто не очень в теме, хочу вкратце рассказать, что такое безлоковые алгоритмы, и зачем они нужны. Зачастую в многопоточных приложениях используется доступ к одним и тем же данным из нескольких потоков, как пример могу привести очередь обработки. Для того чтобы эти данные оставались консистентными (целостными) необходимы методы их защиты от одновременных несогласованных изменений. Обычно такими методами являются всевозможные локи, (спинлоки, мьютексы), которые полностью предотвращают одновременный доступ к данным, закрываясь перед доступом к данным на чтение или запись, и открываясь после того, как необходимая операция завершилась.
Читать дальше →
Total votes 20: ↑16 and ↓4 +12
Views 23K
Comments 21

Есть ли стекирование в коммутаторах Cisco Nexus?

CBS corporate blog System administration *Cisco *Network technologies *

Когда речь заходит о коммутаторах Cisco Nexus, один из первых вопросов, который мне задают: поддерживается ли на них стекирование? Услышав отрицательней ответ, следует логичное «Почему?».
Читать дальше →
Total votes 16: ↑16 and ↓0 +16
Views 16K
Comments 1

Используем пространство экрана оптимально с помощью WPF Data Triggers и Stack

.NET *Desktop environments *Shells *GTD *Development for Windows *
Recovery mode
В этой статье речь пойдёт о том, как использовать WPF Data Triggers в схеме разбиения монитора Stack для того, чтобы полностью автоматически отдавать приложению всё пространство рабочего стола, когда другие приложения не запущены. Stack — это тайловый менеджер окон для Windows, использующий WPF XAML в качестве языка разметки экрана.

Поставляющаяся из коробки схема разбиения экрана для больших мониторов (см. под катом) разбивает рабочий стол на 2 главные зоны — центральную (я обычно использую её для браузеров и IDE) и боковую (туда попадают RSS Reader, мессенжеры и окна терминалов). Эта схема фиксирована. Т.е. если у вас открыт только браузер, Stack оставит пустое место слева от него. В этой статье я покажу как использовать WPF Data Triggers и Data Binding, чтобы схопывать эту область автоматически, когда она пустая.
Читать дальше
Total votes 9: ↑7 and ↓2 +5
Views 4.1K
Comments 2

Что происходит за кулисами С#: основы работы со стеком

Abnormal programming *.NET *Assembler *C# *ООP *
Предлагаю посмотреть все то, что стоит за простыми строками инициализации объектов, вызова методов и передачи параметров. Ну и, разумеется, использование этих сведений на практике — вычитывание стека вызывающего метода.

Дисклеймер


Прежде, чем приступить к повествованию, настоятельно рекомендую ознакомиться с первым постом про StructLayout, т.к. там разобран пример, который будет использоваться в этой статье.

Весь код, кроющийся за высокоуровневым, представлен для режима отладки, именно он показывают концептуальную основу. Также все изложенное рассмотрено для 32 битной платформы. JIT оптимизации — это отдельная и большая тема, которая здесь рассматриваться не будет.

Также хотелось бы предупредить, что данная статья не содержит материал, который стоит применять в реальных проектах.

Начинаем с теории


Любой код в конечном итоге становится набором машинных комманд. Наиболее понятно их представление в виде инструкций языка Ассемблера, прямо соответсвующих одной (или нескольким) машинным инструкциям.

Читать дальше →
Total votes 22: ↑22 and ↓0 +22
Views 12K
Comments 11

Ломаем фундаментальные основы C#: выделение памяти под ссылочный тип на стеке

Abnormal programming *.NET *C# *ООP *
В данной статье будут приведены основы внутреннего устройста типов, а также пример, в котором память под ссылочный тип будет выделена полностью на стеке (это потому что я full-stack программист).



Дисклеймер


Данная статья не содержит материал, который стоит применять в реальных проектах. Это просто расширение границ, в которых воспринимается язык программирования.

Прежде, чем приступить к повествованию, настоятельно рекомендую ознакомиться с первым постом про StructLayout, т.к. там разобран пример, который будет использоваться в этой статье (Впрочем, как и всегда).
Читать дальше →
Total votes 22: ↑21 and ↓1 +20
Views 17K
Comments 13

[The Old New Thing] Могу ли я использовать свой стек как угодно?

Abnormal programming *Assembler *System Programming *Development for Windows *
Translation

В Windows стек растет от больших адресов к меньшим. Иногда это определяется архитектурно, а иногда это просто принятое соглашение. Значение указателя стека (регистр процессора), является указателем на значение в верхней части стека. А значения, расположенные глубже по стеку, соответственно, находятся по большим адресам. Но что происходит с данными, которые расположены по адресам, меньшим, чем указатель стека?



Соглашения для некоторых (но не для всех) архитектур определяют красную зону, которая является областью памяти под указателем стека, но которая по-прежнему валидна для использования приложением.

Читать дальше →
Total votes 17: ↑16 and ↓1 +15
Views 4.2K
Comments 24

What happens behind the scenes C#: the basics of working with the stack

.NET *Assembler *C# *
Translation
I propose to look at the internals that are behind the simple lines of initializing of the objects, calling methods, and passing parameters. And, of course, we will use this information in practice — we will subtract the stack of the calling method.

Disclaimer


Before proceeding with the story, I strongly recommend you to read the first post about StructLayout, there is an example that will be used in this article.

All code behind the high-level one is presented for the debug mode, because it shows the conceptual basis. JIT optimization is a separate big topic that will not be covered here.

I would also like to warn that this article does not contain material that should be used in real projects.

First — theory


Any code eventually becomes a set of machine commands. Most understandable is their representation in the form of Assembly language instructions that directly correspond to one (or several) machine instructions.

Read more →
Total votes 11: ↑10 and ↓1 +9
Views 5.6K
Comments 0

Breaking down the fundamentals of C #: allocating memory for a reference type on the stack

.NET *C# *
Translation
This article will show you the basics of types internals, as of course an example in which the memory for the reference type will be allocated completely on the stack (this is because I am a full-stack programmer).



Disclaimer


This article does not contain material that should be used in real projects. It is simply an extension of the boundaries in which a programming language is perceived.

Before proceeding with the story, I strongly recommend you to read the first post about StructLayout, because there is an example that will be used in this article (However, as always).
Read more →
Total votes 7: ↑6 and ↓1 +5
Views 5.2K
Comments 0

Протокольно ориентированное программирование. Часть 1

Swift *

Давайте подробнее изучим тему протокольно ориентированного программирования. Для удобства разделили материал на три части.


Данный материал является комментированным переводом презентации WWDC 2016. Вопреки частому мнению о том, что вещи "под капотом" должны там и оставаться, иногда крайне полезно разобраться, что же там происходит. Это поможет использовать предмет правильно и по назначению.

Читать дальше →
Total votes 14: ↑14 and ↓0 +14
Views 9K
Comments 8

Go: Должен ли я использовать указатель вместо копии моей структуры?

Programming *Go *
Translation
image
Иллюстрация, созданная для «A Journey With Go», из оригинального гофера, созданного Рене Френч.

С точки зрения производительности систематическое использование указателей вместо копирования самой структуры для совместного использования структур многим Go разработчикам представляется наилучшим вариантом. Для того чтобы понять влияние использования указателя вместо копии структуры мы рассмотрим два варианта использования.
Читать дальше →
Total votes 32: ↑23 and ↓9 +14
Views 12K
Comments 27

Языковая механика стеков и указателей

Programming *Go *
Translation

Прелюдия


Это первая из четырех статей в серии, которая даст представление о механике и дизайне указателей, стеков, куч, escape analysis и семантики значения/указателя в Go. Этот пост посвящен стекам и указателям.

Оглавление цикла статей:

  1. Language Mechanics On Stacks And Pointers
  2. Language Mechanics On Escape Analysis (перевод)
  3. Language Mechanics On Memory Profiling (перевод)
  4. Design Philosophy On Data And Semantics

Вступление


Не буду лукавить — указатели трудны в понимании. При неправильном использовании указатели могут вызвать неприятные ошибки и даже проблемы с производительностью. Это особенно верно при написании конкурентных или многопоточных программ. Неудивительно, что многие языки пытаются скрыть указатели от программистов. Однако, если вы пишете на Go, вы не сможете избежать указателей. Без четкого понимания указателей вам будет сложно писать чистый, простой и эффективный код.
Читать дальше →
Total votes 8: ↑7 and ↓1 +6
Views 4.8K
Comments 7

Языковая механика escape analysis

Programming *Go *
Translation

Прелюдия


Это вторая из четырех статей в серии, которая даст представление о механике и дизайне указателей, стеков, куч, escape analysis и семантики значения/указателя в Go. Этот пост посвящен кучам и escape analysis.

Оглавление цикла статей:

  1. Language Mechanics On Stacks And Pointers (перевод)
  2. Language Mechanics On Escape Analysis
  3. Language Mechanics On Memory Profiling (перевод)
  4. Design Philosophy On Data And Semantics

Вступление


В первом посте из этой серии я рассказал основы механики указателя на примере, в котором значение распределяется по стеку между горутинами. Я не показывал вам, что происходит, когда вы разделяете значение в стеке. Чтобы понять это, вам нужно узнать о другой области памяти, где могут находиться значения: о «куче». С этим знанием вы можете начать изучать «escape analysis».
Читать дальше →
Total votes 7: ↑6 and ↓1 +5
Views 4.4K
Comments 1
1