Как стать автором
Обновить
-3
0
brom_portret @brom_portret

Пользователь

Отправить сообщение

Указатели, ссылки и массивы в C и C++: точки над i

Время на прочтение10 мин
Количество просмотров617K
В этом посте я постараюсь окончательно разобрать такие тонкие понятия в C и C++, как указатели, ссылки и массивы. В частности, я отвечу на вопрос, так являются массивы C указателями или нет.

Обозначения и предположения


  • Я буду предполагать, что читатель понимает, что, например, в C++ есть ссылки, а в C — нет, поэтому я не буду постоянно напоминать, о каком именно языке (C/C++ или именно C++) я сейчас говорю, читатель поймёт это из контекста;
  • Также, я предполагаю, что читатель уже знает C и C++ на базовом уровне и знает, к примеру, синтаксис объявления ссылки. В этом посте я буду заниматься именно дотошным разбором мелочей;
  • Буду обозначать типы так, как выглядело бы объявление переменной TYPE соответствующего типа. Например, тип «массив длины 2 int'ов» я буду обозначать как int TYPE[2];
  • Я буду предполагать, что мы в основном имеем дело с обычными типами данных, такими как int TYPE, int *TYPE и т. д., для которых операции =, &, * и другие не переопределены и обозначают обычные вещи;
  • «Объект» всегда будет означать «всё, что не ссылка», а не «экземпляр класса»;
  • Везде, за исключением специально оговоренных случаев, подразумеваются C89 и C++98.


Указатели и ссылки


Указатели. Что такое указатели, я рассказывать не буду. :) Будем считать, что вы это знаете. Напомню лишь следующие вещи (все примеры кода предполагаются находящимися внутри какой-нибудь функции, например, main):

int x;
int *y = &x; // От любой переменной можно взять адрес при помощи операции взятия адреса "&". Эта операция возвращает указатель
int z = *y; // Указатель можно разыменовать при помощи операции разыменовывания "*". Это операция возвращает тот объект, на который указывает указатель

Читать дальше →
Всего голосов 70: ↑48 и ↓22+26
Комментарии73

VPN везде и всюду: IPsec без L2TP со strongSwan

Время на прочтение10 мин
Количество просмотров327K
image
достаточно сильный лебедь

Если вы когда-либо искали VPN, который будет работать на десктопах, мобильных устройствах и роутерах без установки дополнительного ПО и перепрошивки роутера, вы, вероятно, выбирали между PPTP и L2TP+IPsec. У протокола PPTP имеются проблемы с безопасностью и прохождением через брандмауеры и NAT, так что в 2015 году его уже использовать не стоит, а использование L2TP излишне, т.к. L2 VPN, по моему мнению, для обычного удаленного доступа не нужен практически никогда.

Удивительно, что в интернете не так-то просто можно найти информацию о настройке чего-то помимо L2TP+IPsec в транспортном режиме, учитывая, что это обширный стек протоколов, который можно конфигурировать буквально как душе угодно, поэтому я попытаюсь устранить такое несовершенство мира.

Небольшое введение в мир IPsec

Вообще говоря, не совсем правильно называть IPsec VPN. IPsec не предназначен для построения «виртуальных частных сетей», а создан для шифрования или защиты от подмены передаваемых по IP данных. Это специальный слой поверх IP, который, в зависимости от режима и настроек, работает по-разному. В отличие от привычного VPN, который создает новый интерфейс в системе, на который вы, как это чаще всего бывает, назначаете IP-подсеть из диапазона частных адресов (т.е. создаете новый сетевой сегмент), и через который маршрутизируется трафик в зашифрованном виде, IPsec просто шифрует трафик магическим образом между «внешними» интерфейсами сервера и клиента.
Читать дальше →
Всего голосов 50: ↑49 и ↓1+48
Комментарии166

Сад JavaScript: Объекты

Время на прочтение6 мин
Количество просмотров19K

Введение


Сад JavaScript – коллекция документации по самым странным особенностям языка JavaScript. Тут собраны советы по тому, как избежать распространённых ошибок и малозаметных багов, а также проблем с быстродействием и неправильного стиля программирования.

Это не учебник по языку. Предполагается, что вы уже предварительно знаете язык. Для обучения языку рекомендую воспользоваться этим великолепным переводом чудесной книги "Выразительный JavaScript".
Читать дальше →
Всего голосов 34: ↑18 и ↓16+2
Комментарии22

Паттерны в AngularJS

Время на прочтение27 мин
Количество просмотров61K

Краткий обзор


Один из лучших способов изучить, что то новое, это увидеть, как в нем используются уже знакомые нам вещи. Эта статья не намерена ознакомить читателей с проектированием или шаблонами проектирования. Она предлагает базовое понимание концепций ООП, шаблонов проектирования и архитектурных шаблонов. Цель статьи описать, как различные конструкции программного обеспечения и архитектурные шаблоны используются в AngularJS и написанных на нем SPA.

Введение


Статья начинается с краткого обзора фреймворка AngularJS. Обзор объясняет основные компоненты AngularJS: directives, filters, controllers, services, scope. Во втором разделе перечислены и описаны различные конструкции и архитектурные шаблоны, которые реализованы внутри фреймворка. Шаблоны сгруппированы по компонентам AngularJS, в которых они используются. Если некоторые шаблоны используются в нескольких компонентах, это будет указано.
Последний раздел включает несколько архитектурных шаблонов, которые обычно используются в SPA построенных на AngularJS.
Читать дальше →
Всего голосов 35: ↑30 и ↓5+25
Комментарии11

Радиоэлектроника, или как я начал её постигать

Время на прочтение5 мин
Количество просмотров196K
Добрый день, уважаемое сообщество.

Меня все время удивляли люди, которые понимают в радиоэлектронике. Я всегда их считал своего рода шаманами: как можно разобраться в этом обилии элементов, дорожек и документации? Как можно только взглянуть на плату, пару раз «тыкнуть» осциллографом в только одному ему понятные места и со словами «а, понятно» взять паяльник в руки и воскресить, вроде как почившую любимую игрушку. Иначе как волшебством это не назовёшь.

Расцвет радиоэлектроники в нашей стране пришёлся на 80-е годы, когда ничего не было и все приходилось делать своими руками. С той поры прошло много лет. Сейчас у меня складывается впечатление, что вместе с поколением 70-х уходят и знания с умением. Мне не повезло: половину эпохи расцвета меня планировали родители, а вторую половину я провёл играя в кубики и прочие машинки. Когда в 12 лет я пошёл в кружок «Юный техник» — это были не самые благополучные времена, и ввиду обстоятельств через полгода пришлось с кружком «завязать», но мечта осталась.

По текущей деятельности я программист. Я осознаю, что найти ошибку в большом коде ровно тоже самое, что найти «плохой» конденсатор на плате. Сказано — сделано. Так как по натуре я люблю учиться самостоятельно — пошёл искать литературу. Попыток начать было несколько, но каждый раз при начале чтения книг я упирался в то, что не мог разобраться в базовых вещах, например, «что есть напряжение и сила тока». Запросы к великому и ужасному Гуглу также давали шаблонные ответы, скопированные из учебников. Попробовал найти место в Москве, где можно поучиться этому мастерству — поиски не закончились результатом.

Итак, добро пожаловать в кружок начинающего радиолюбителя.
Читать дальше →
Всего голосов 68: ↑54 и ↓14+40
Комментарии122

Не спешите выкидывать старые серверы, из них можно собрать быструю Ethernet-СХД за час

Время на прочтение6 мин
Количество просмотров78K


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

Железо, в целом, неплохое, просто прошлого поколения. Выкидывать, естественно, было жалко. Тогда я и предложил протестировать EMС ScaleIO. Если коротко, работает это так:



ScaleIO — это софт, который ставится на серверы поверх операционной системы. ScaleIO состоит из серверной части, клиентской части и нод управления. Дисковые ресурсы объединяются в одну виртуальную одноуровневую систему.
Читать дальше →
Всего голосов 44: ↑40 и ↓4+36
Комментарии98

Вопросы про индексы, которые вам не надо будет задавать

Время на прочтение11 мин
Количество просмотров46K


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

Для этого, я предлагаю «поднять капот» у SQL Server и окунуться в сладостный мир шестнадцатеричных дампов. Может статься, что внутри все гораздо проще, чем вам казалось.
Читать дальше →
Всего голосов 36: ↑34 и ↓2+32
Комментарии9

Восстановление удаленных данных с помощью Scalpel

Время на прочтение5 мин
Количество просмотров42K
У каждого человека в жизни возникает такая ситуация как rm -rf на той папке, где этого не следовало делать. Бекапы это хорошо, но что делать если их нет? Для Linux систем существует утилита Scalpel, которая позволяет восстановить удалённые файлы по заданным паттернам, включая применение регулярных выражений.
Читать дальше →
Всего голосов 29: ↑26 и ↓3+23
Комментарии7

Почему OpenVPN тормозит?

Время на прочтение3 мин
Количество просмотров183K
Описанная проблема присуща только ветке OpenVPN 2.3, в 2.4 размеры буферов не меняются без требования пользователя.

Время от времени, мне встречаются темы на форумах, в которых люди соединяют несколько офисов с использованием OpenVPN и получают низкую скорость, сильно ниже скорости канала. У кого-то это может быть 20 Мбит/с при канале в 100 Мбит/с с обеих сторон, а кто-то еле получает и 400 Кбит/с на 2 Мбит/с ADSL/3G и высоким пингом. Зачастую, таким людям советуют увеличить MTU на VPN-интерфейсе до чрезвычайно больших значений, вроде 48000, или же поиграться с параметром mssfix. Частично это помогает, но скорость внутри VPN все еще очень далека от канальной. Иногда все сваливают на то, что OpenVPN — userspace-решение, и это его нормальная скорость, учитывая всякие шифрования и HMAC'и. Абсурд!

Немного истории

На дворе июль 2004 года. Типичная скорость домашнего интернета в развитых странах составляет 256 Кбит/с-1 Мбит/с, в менее развитых — 56 Кбит/с. Ядро Linux 2.6.7 вышло не так давно, а 2.6.8, в котором TCP Window Scale включен по умолчанию, выйдет только через месяц. Проект OpenVPN развивается уже 3 года как, к релизу готовится версия 2.0.
Один из разработчиков добавляет код, который устанавливает буфер приема и отправки сокета по умолчанию в 64 КБ, вероятно, чтобы хоть как-то унифицировать размер буфера между платформами и не зависеть от системных настроек.
Читать дальше →
Всего голосов 90: ↑89 и ↓1+88
Комментарии61

Выразительный JavaScript: Тайная жизнь объектов

Время на прочтение19 мин
Количество просмотров81K

Содержание




Проблема объектно-ориентированных языков в том, что они тащат с собой всё своё неявное окружение. Вам нужен был банан – а вы получаете гориллу с бананом, и целые джунгли впридачу.

Джо Армстронг, в интервью Coders at Work


Термин «объект» в программировании сильно перегружен значениями. В моей профессии объекты – стиль жизни, тема священных войн и любимое заклинание, не теряющий своей магической силы.

Стороннему человеку всё это непонятно. Начнём же с краткой истории объектов как концепции в программировании.
Читать дальше →
Всего голосов 25: ↑25 и ↓0+25
Комментарии5

Web-разработка на Python глазами PHP-программиста

Время на прочтение7 мин
Количество просмотров176K

Введение



В статье хотелось бы поднять вопросы отличия использования Python для web-разработки по сравнению с оной на PHP. Надеюсь, статья не приведет к холиварам, так как она вовсе не о том, какой язык лучше или хуже, а исключительно о технических особенностях Python.
Читать дальше →
Всего голосов 77: ↑62 и ↓15+47
Комментарии95

XMonad + XMobar = ❤

Время на прочтение10 мин
Количество просмотров70K
Многие слышали про тайловые оконные менеджеры, некоторые даже слышали о XMonad. А ребята из Google даже променяли Unity/Gnome на XMonad. Что же это такое, как это настраивать и как с этим жить? Краткий workaround для любителей кастомизировать всё подряд.


Подробности
Всего голосов 42: ↑36 и ↓6+30
Комментарии94

Беспроводной звук. Часть 1. Препарируем Bluetooth

Время на прочтение20 мин
Количество просмотров317K
Иногда, бывает, натыкаешься на какой-то баг впервые, списываешь все на обстоятельства и забываешь о нем. Затем он повторяется снова и снова, вынуждая тебя приступить к поиску проблем и, по возможности, их устранению. И вот когда ты обнаруживаешь себя в глубокой ночи за анализом дампом/дебагом/чтением_мануалов, то становится понятно, дело на полпути бросать уже нельзя и дело принципа — довести его до конца.

Такая история со мной приключилась в момент обзора с коллегой r3s потребительской беспроводной Bluetooth-акустики Klipsch KMC 3. Я столкнулся с ситуацией, когда «беспроводной» аудиопоток начинал безбожно прерываться, стоило лишь мне расположить источник звука у себя за спиной. Пищи для размышлений мне подкинула другая Bluetooth-аудиосистема, которая в тех же условиях вела себя куда лучше. Такая простая проблема выродилась в нырок с головой во внутренности протокола Bluetooth и детали передачи аудио с его помощью.

Под катом первой части цикла статей мы в легкой и непринужденной форме познакомимся с основными протоколами стека Bluetooth, покопаемся в дампе соединения источника и приемника звука, разберемся в причинах конфликта Bluetooth и Wi-Fi и обнаружим корень моей проблемы — прерывающегося звука.
Читать дальше →
Всего голосов 113: ↑112 и ↓1+111
Комментарии38

Моментальная фотография сегодня или умрет ли Polaroid?

Время на прочтение4 мин
Количество просмотров71K
Все помнят из детства чудные квадратные фотографии, сделанные на Polaroid 600. Иногда в новостях проскакивает название этой фирмы. Жив ли «полароид»? Существует ли сегодня моментальная фотография? Добро пожаловать под кат.

image
Читать дальше →
Всего голосов 63: ↑51 и ↓12+39
Комментарии70

IBM System/360 — История о провале, не оказавшимся таковым

Время на прочтение4 мин
Количество просмотров39K
Я продолжаю мой цикл статей про IBM System/360 (первая часть о системе «в целом», вторая часть про архитектуру). Не затронутыми осталось несколько интересных тем, и первая из них — это операционные системы System/360, особенно исторический аспект их развития.

До начала 60-х годов, «мощные» и «бюджетные» решения IBM были несовместимы. Перенос программ был затруднен, а порою и совсем невозможен. Это обуславливалось многими причинами, начиная с разницы в операционных системах, и заканчивая различиями периферии. То, что сейчас кажется само собой очевидным — совместимость различных программных и аппаратных компонентов, тогда было совсем не обязательным. Именно в ходе разработки System/360 инженеры компании решили, что такой подход сильно удорожает разработку и дальнейшее сопровождение, и решили стандартизировать новую систему, упростив портирование программ и сопровождение ЭВМ.

Изначально планировалось поставлять компьютеры System/360 с новой операционной системой с пакетной обработкой заданий. Проще говоря, каждая программа, которую надо запустить, описывается в виде «пакета» — самой программы и набора входных данных. Эти пакеты обрабатываются последовательно в зависимости от приоритета и наличия ресурсов. Такой подход позволял уменьшить человеческое участие в планировании работы мейнфрейма и оптимизировать его загрузку, снижая таким образом накладные расходы. Операционная система должна была называться OS/360.

Разработчики этой ОС поставили перед собой невероятно амбициозные задачи, которые не решались до этого. Данная операционная система должна была обеспечить поддержку «многопрограммности». С медленной периферией исполнение только одной программы за раз приводило к частым простоям, когда система ждала каких-то данных с внешнего устройства. Поэтому использовался подход, схожий с современным асинхронным программированием. В память загружалось несколько программ и первая из них запускалась на выполнение. При необходимости долгого ожидания, контекст текущей программы сохранялся, и управление передавалось следующей, которая могла работать, пока первая ждала данные. Операционная система в этом случае должна была держать все под постоянным контролем, защищая загруженные программы от сбоев других программ, и контролируя доступ к ресурсам. Все это усложнялось отсутствием концепции виртуальной памяти. Операционная система должна была работать на всех моделях линейки, поэтому конфигурации разнились от 16 КБ ОЗУ и до 1 МБ, а скорость работы — от нескольких тысяч операций в секунду, до полумиллиона. Так же операционная система должна была удовлетворять потребности всех программ, начиная со сложных математических расчётов, почти не использовавших внешние накопители, и заканчивая простыми аналогами СУБД, которые полностью строились на операциях ввода-вывода.



Как видите, планы были амбициозными, но поджимало время. Аппаратная часть была готова поступить в продажу, конкуренты атаковали сегменты рынка, в которых IBM была наиболее уязвима, а стабильная и надежная версия OS/360 никак не рождалась.
Читать дальше →
Всего голосов 46: ↑42 и ↓4+38
Комментарии9

Логика мышления. Часть 12. Следы памяти

Время на прочтение14 мин
Количество просмотров47K


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

Энграммой называют те изменения, что происходят с мозгом в момент запоминания. Другими словами, энграмма – это след памяти. Вполне естественно, что понимание природы энграмм воспринимается всеми исследователями как ключевая задача в изучении природы мышления.

В чем сложность этой задачи? Если взять обычную книгу или внешний компьютерный накопитель, то и то и другое можно назвать памятью. И то и другое хранит информацию. Но мало хранить. Чтобы информация стала полезной, надо уметь ее считывать и знать, как ей оперировать. И тут оказывается, что сама форма хранения информации тесно связана с принципами ее обработки. Одно во многом определяет другое.
Читать дальше →
Всего голосов 49: ↑42 и ↓7+35
Комментарии26

О Nutanix, Web-Scale, конвергентных платформах и смене парадигм построения IT инфраструктур

Время на прочтение7 мин
Количество просмотров21K
Возможно, вы уже слышали достаточно новый для рынка не_онлайн проектов термин — Web-Scale IT, который по мнению Gartner в 2017 году займет не менее 50% рынка корпоративного IT.

В этом году — это один из основных модных терминов.

Ситуация на корпоративных рынках сейчас активно напоминает фразу про подростковый секс — все говорят что имели (= умеют), но реально — дела обстоят невесело.

Буквально каждый вендор рассказывает про BigData, конвергентные решения, перспективы и прочее.

Мы в свою очередь смеем надеяться, что у нас с этим реально все весьма неплохо, но тут всегда виднее со стороны и ваше мнение может не совпадать с нашим.

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

image

Читать дальше →
Всего голосов 29: ↑20 и ↓9+11
Комментарии82

Как защитить свой сервер от уязвимости POODLE SSLv3

Время на прочтение4 мин
Количество просмотров28K

Вводная информация


14 октября 2014 года в протоколе шифрования SSL версии 3 была выявлена уязвимость. Эта уязвимость, названная POODLE (Padding Oracle On Downgraded Legacy Encryption), позволяет злоумышленнику читать информацию, зашифрованную этой версией протокола, используя атаку man-in-the-middle.
Также SSLv3 является очень старой версией протокола, но тем не менее многие приложения поддерживают его и используют SSLv3 в случаях, когда недоступны другие более новые и лучшие варианты шифрования. Что важно, злоумышленник может нарочно требовать использования только SSLv3 на обоих сторонах соединения.
Уязвимости POODLE подвержены любые сервисы или клиенты, которые могут соединяться, используя SSLv3.
Более подробная информация по этой уязвимости опубликована здесь CVE-2014-3566.


Читать дальше →
Всего голосов 31: ↑30 и ↓1+29
Комментарии12

Всё, что вы хотели знать об областях видимости в JavaScript (но боялись спросить)

Время на прочтение8 мин
Количество просмотров82K
У JS есть несколько концепций, связанных с областью видимости (scope), которые не всегда ясны начинающим разработчикам (и иногда даже опытным). Эта статья посвящена тем, кто стремится погрузиться в пучину областей видимости JS, услышав такие слова, как область видимости, замыкание, “this”, область имён, область видимости функции, глобальные переменные, лексическая область видимости, приватные и публичные области… Надеюсь, по прочтению материала вы сможете ответить на следующие вопросы:

— что такое область видимости?
— что есть глобальная/локальная ОВ?
— что есть пространство имён и чем оно отличается от ОВ?
— что обозначает ключевое слово this, и как оно относится с ОВ?
— что такое функциональная и лексическая ОВ?
— что такое замыкание?
— как мне всё это понять и сотворить?
Читать дальше →
Всего голосов 57: ↑47 и ↓10+37
Комментарии38

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург и область, Россия
Зарегистрирован
Активность