Pull to refresh
2
0
Елена Шишкина @miralita

User

Send message

Новичкам фондового рынка: честный разговор об акциях

Reading time17 min
Views130K
Телеграмму накатал:

«Шлите денег — отбатрачу,
Я их все прохохотал».

/В.Высоцкий/


Тот, кто впервые выходит на фондовый рынок как частный инвестор, сразу думает о двух активах: акциях и валюте. Эти инструменты кажутся простыми и прозрачными. Но если бы всё было так просто, эту статью писал бы долларовый миллионер для долларовых миллионеров. Акции — инструмент коварный и крайне непростой, он требует профессионального подхода и не прощает ошибок. Это уже далеко не те случаи, которые показывают в захватывающих фильмах про биржевиков XX века — это фондовый рынок 2020. Даже первый шаг должен быть очень серьёзным.


Источник
Читать дальше →
Total votes 57: ↑47 and ↓10+64
Comments82

Как работают реляционные базы данных (Часть 1)

Reading time14 min
Views66K

Привет, Хабр! Представляю вашему вниманию перевод статьи
"How does a relational database work".


Когда дело доходит до реляционных баз данных я не могу не думать, что чего-то не хватает. Они используются везде. Существует множество различных баз данных: от небольшого и полезного SQLite до мощной Teradata. Но есть только несколько статей, которые объясняют, как работает база данных. Вы можете искать сами по запросу "howdoesarelationaldatabasework" («как работают реляционные базы данных») чтобы увидеть, как мало результатов. Более того, эти статьи — короткие. Если же вы ищете последние модные технологии (BigData, NoSQL или JavaScript), вы найдете больше углубленных статей, объясняющих, как они работают.


Являются ли реляционные базы данных слишком старыми и слишком скучными, чтобы их можно было объяснить вне университетских курсов, исследовательских работ и книг?


image

Читать дальше →
Total votes 48: ↑31 and ↓17+29
Comments7

SQL HowTo: 1000 и один способ агрегации

Reading time5 min
Views15K
Наш СБИС, как и другие системы управления бизнесом, не обходится без формирования отчетов — каждый руководитель любит сводные цифры, особенно всякие суммы по разделам и красивые "Итого".

А чтобы эти итоги собрать, необходимо по исходным данным вычислить значение некоторой агрегатной функции: количество, сумма, среднее, минимум, максимум,… — и, как правило, не одной.


Сегодня мы рассмотрим некоторые способы, с помощью которых можно вычислить агрегаты в PostgreSQL или ускорить выполнение SQL-запроса.
Читать дальше →
Total votes 12: ↑11 and ↓1+12
Comments1

Модернизация IDA Pro. Отладчик для Sega Mega Drive (часть 2)

Reading time46 min
Views7.7K


Привет всем,


В предыдущей статье мы успешно модифицировали ядро эмулятора игр на Sega Mega Drive / Genesis, добавив в него возможность отладки. Теперь пришёл черёд написания собственно плагина-отладчика для IDA Pro, версия 7.0. Приступим.

Читать дальше →
Total votes 32: ↑31 and ↓1+30
Comments0

Модернизация IDA Pro. Отладчик для Sega Mega Drive (часть 1)

Reading time23 min
Views9.1K


Приветствую!


Товарищи реверсеры, ромхакеры: в основном эта статья будет посвящена вам. В ней я расскажу вам, как написать свой плагин-отладчик для IDA Pro. Да, уже была первая попытка начать рассказ, но, с тех пор много воды утекло, многие принципы пересмотрены. В общем, погнали!

Читать дальше →
Total votes 34: ↑33 and ↓1+32
Comments23

Golang тестирование за пределами gotour

Reading time4 min
Views20K


Никто не любит писать тесты. Конечно же я шучу, все обожают их писать! Как подскажут тимлиды и HR, на собеседованиях правильный ответ — я очень люблю и пишу тесты. Но вдруг вы любите писать тесты на другом языке. Как же начать писать покрытый тестами код на го?
Читать дальше →
Total votes 13: ↑12 and ↓1+11
Comments2

50 оттенков Go: ловушки, подводные камни и распространённые ошибки новичков

Reading time44 min
Views221K


Go — простой и забавный язык. Но в нём, как и в любых других языках, есть свои подводные камни. И во многих из них сам Go не виноват. Одни — это естественное следствие прихода программистов из других языков, другие возникают из-за ложных представлений и нехватки подробностей. Если вы найдёте время и почитаете официальные спецификации, вики, почтовые рассылки, публикации в блогах и исходный код, то многие из подводных камней станут для вас очевидны. Но далеко не каждый так начинает, и это нормально. Если вы новичок в Go, статья поможет сэкономить немало часов, которые вы бы потратили на отладку кода. Мы будем рассматривать версии Go 1.5 и ниже.
Читать дальше →
Total votes 80: ↑76 and ↓4+72
Comments270

Языку программирования Go — семь лет

Reading time6 min
Views17K

Семь лет — важный возраст в жизни многих людей, символический рубеж нового этапа взросления, когда мы начинаем ходить в школу. Вроде бы семь лет — не так уж много, но всё-таки и не мало. Так что если языки программирования представить в виде людей, то сегодня мы празднуем день рождения первоклассника Go — ему исполнилось семь!

Что такое Go и чем он хорош, мы описывать не будем: кто в теме, знают и так, а остальные могут почитать в Википедии. Уже вчера мы поделились с вами полезным переводом 50 оттенков Go: ловушки, подводные камни и распространённые ошибки новичков, а сегодня передаём слово нашим разработчикам, пишущим на Go. В честь годовщины мы задали каждому из них три вопроса:

  1. Почему ты выбрал Go (плюсы/минусы)?
  2. Что ты уже написал на Go?
  3. Как лучше изучать Go, что посоветуешь начинающим?

Вот что они ответили.
Читать дальше →
Total votes 55: ↑49 and ↓6+43
Comments34

Пять способов пагинации в Postgres, от базовых до диковинных

Reading time13 min
Views84K
Вас может удивить тот факт, что пагинация, распространенная, как таковая, в веб приложениях, с легкостью может быть реализована нерационально. В этой статье мы испробуем различные способы пагинации на стороне сервера и обсудим их удобство при использовании в PostgreSQL. Статья поможет Вам понять, какая техника более уместна в Вашей ситуации, в том числе некоторые Вы, возможно, не видели прежде, а именно те, которые полагаются на физическую кластеризацию и сборщика статистики базы данных.
Читать дальше →
Total votes 29: ↑29 and ↓0+29
Comments33

Nginx и https. Получаем класс А+

Reading time4 min
Views162K
image

Недавно вспомнилось мне, что есть такой сервис — StartSsl, который совершенно бесплатно раздаёт trusted сертификаты владельцам доменов для личного использования. Да и выходные попались свободные. В общем сейчас напишу, как в nginx настроить HTTPS, чтобы при проверке в SSL Labs получить рейтинг А+ и обезопасить себя от последних багов с помощью выпиливания SSL.

Итак, приступим. Будем считать, что у вы уже зарегистрировались на StartSsl, прошли персональную проверку и получили вожделенный сертификат. Для начала опубликую итоговый конфиг, а после этого разберу его.
Читать дальше →
Total votes 61: ↑52 and ↓9+43
Comments85

300 потрясающих бесплатных сервисов

Reading time11 min
Views1.6M


Автор оригинальной статьи Ali Mese добавил ещё 100 новых бесплатных сервисов. Все 400 потрясающих сервисов доступны здесь. И еще подборку +500 инструментов от 10 марта 2017 г. смотрите здесь.



A. Бесплатные Веб-Сайты + Логотипы + Хостинг + Выставление Счета

  • HTML5 UP: Адаптивные шаблоны HTML5 и CSS3.
  • Bootswatch: Бесплатные темы для Bootstrap.
  • Templated: Коллекция 845 бесплатных шаблонов CSS и HTML5.
  • Wordpress.org | Wordpress.com: Бесплатное создание веб-сайта.
  • Strikingly.com Domain: Конструктор веб-сайтов.
  • Logaster: Онлайн генератор логотипов и элементов фирменного стиля (new).
  • Withoomph: Мгновенное создание логотипов (англ.).
  • Hipster Logo Generator: Генератор хипстерских логотипов.
  • Squarespace Free Logo: Можно скачать бесплатную версию в маленьком разрешении.
  • Invoice to me: Бесплатный генератор счета.
  • Free Invoice Generator: Альтернативный бесплатный генератор счета.
  • Slimvoice: Невероятно простой счет.

Читать дальше →
Total votes 341: ↑325 and ↓16+309
Comments107

Office 2013 привязывается к одному компьютеру навсегда

Reading time2 min
Views296K
Несмотря на то, что для большинства программ мы можем пролистывать пользовательские соглашения без особых последствий, есть смысл прочитать условия, которые ставит Microsoft для розничных копий Office 2013, перед тем, как потратить на него от 100 до 500 долларов, т.к. по сравнению с предыдущими версиями в них изменились две ключевых части.

Если вы приобрели розничную редакцию Office 2010, EULA (end-user license agreement, лицензионное соглашение конечного пользователя) разрешает вам устанавливать его одновременно на два компьютера (настольный и ноутбук). При этом, если вы заменяете один из них, то лицензия переносится на новый.
Для Office 2013 не разрешено ни то, ни другое...
Total votes 182: ↑171 and ↓11+160
Comments318

12 способов не накосячить со вспышкой

Reading time8 min
Views354K
После трёх лет работы со студийным светом я думал, что знаю про накамерную вспышку если не всё, то очень много. Три недели назад я попал в гости к одному особо опытному стробисту, который рассказал и показал столько, что я сразу понял, что надо садиться и делать перепись грабель, а потом тестить, тестить и ещё раз тестить.

Ниже — достаточно известные вещи, которые, однако, вызывали facepalm у тех, кто был вместе со мной или же у меня. В списке грабель вы с некоторой вероятностью можете найти что-нибудь новое. Если хотя бы она фича использования вспышки окажется для вас полезной, то мою задачу можно считать выполненной.
Читать дальше →
Total votes 228: ↑223 and ↓5+218
Comments73

Типичные ошибки при защите сайтов от CSRF-атак

Reading time5 min
Views84K


В настоящее время в сфере обеспечения безопасности веб-сайтов и приложений возникла очень интересная ситуация: с одной стороны, некоторые разработчики уделяют особое внимание безопасности, с другой, они напрочь забывают о некоторых видах атак и не считают ошибки, позволяющие выполнить данные атаки, уязвимостями. Например, к такой категории можно отнести CSRF (Сross Site Request Forgery). Эта атака позволяет производить различные действия на уязвимом сайте от имени авторизованного пользователя. Если вы не слышали о таком, то я рекомендую прочитать соответствующую статью в Википедии, чтобы иметь общее представление об этом виде атак. Основная часть статьи предназначена тем, кто обеспокоен правильной защитой своих сайтов от CSRF.
Читать дальше →
Total votes 49: ↑40 and ↓9+31
Comments93

Документация Mojolicious: Потерянные Главы

Reading time10 min
Views7K
Это продолжение серии статей о веб-фреймворке для Perl — Mojolicious: первая часть.

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

Асинхронность: синхронизируем с помощью Mojo::IOLoop::Delay


Mojo::IOLoop::Delay предоставляет механизм, обеспечивающий для асинхронно выполняющихся callback-ов:

  • описание последовательно выполняющихся операций без «лапши» callback-ов
  • передачу результатов из callback-а(ов) текущего шага на следующий
  • общие данные для callback-ов, объединённых в одну задачу
  • синхронизацию групп callback-ов
  • перехват и обработку исключений в callback-ах

Используемые термины:

  • (асинхронная) операция — обычно это вызов асинхронной функции вроде  таймера или выкачивания url, которой необходимо передать callback
  • шаг — callback, который анализирует данные полученные с предыдущего  шага (если это не первый шаг), и запускает одну или несколько новых  операций, либо возвращает финальный результат (если это последний шаг)
  • задача — список шагов, которые должны выполняться последовательно  (т.е. следующий шаг вызывается только после того, как все операции  запущенные на предыдущем шаге завершаются)

Альтернатива Promises

Это альтернативный подход к проблеме, обычно решаемой с помощью Promise/Deferred или Future. Вот приблизительное сравнение со спецификацией Promises/A+
Читать дальше →
Total votes 20: ↑19 and ↓1+18
Comments20

Документация Mojolicious: Потерянные Главы

Reading time16 min
Views15K
Update: статья обновлена для соответствия Mojolicious 6.0.

Mojolicious — восхитительный современный веб-фреймворк для Perl. Из недостатков я могу назвать только два: политика в отношении обратной совместимости и документация.

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

Содержание


  1. Недостатки
  2. Роутинг: внутреннее устройство
  3. Роутинг: настройка
  4. Параметры HTTP-запроса
  5. Парсинг
  6. Tips & Tricks
    1. Поддержка неблокирующих приложений в режиме CGI
    2. Как работает Mojo::UserAgent при тестировании своего приложения
    3. ojo и Mojolicious::Lite
    4. Переменные окружения


Другие статьи в этой серии



Недостатки


В официальном FAQ написано: "… we will always deprecate a feature before removing or changing it in incompatible ways between major releases … as long as you are not using anything marked experimental, untested or undocumented, you can always count on backwards compatibility …". Для начала, вторая фраза противоречит первой. Далее, вот цитата из Guides::Contributing «Features may only be changed in a major release or after being deprecated for at least 3 months.». Честно говоря, 3 месяца это и так смешной срок когда речь идёт об обратной совместимости, но похоже что даже этот срок соблюдается не всегда (поддержку «X-Forwarded-HTTPS» сделали deprecated два месяца назад, а удалили месяц назад — да, это был «major release» поэтому формально правила не нарушены, но общее отношение к обратной совместимости вполне показательно). Как много разработчиков обновляет фреймворк чаще чем раз в 3 месяца, да ещё и при этом тщательно вычитывает Changes или логи своего приложения на предмет deprecated-предупреждений? При этом, в течении последнего года было deprecated примерно 20 функций/фич. На практике, конечно, всё не так плохо, как это звучит — что-то ломается не так уж часто (лично меня за последний год коснулась только замена $app->secret() на $app->secrets()). Но факт остаётся фактом — обратную совместимость ломают, ломают часто, причём без по-настоящему веских причин: например, в случае с secret() абсолютно ничего не мешало добавить в код
sub secret { shift->secrets([shift]) }
либо просто добавить поддержку дополнительных параметров в secret() вместо добавления новой функции secrets() реализовав нужную фичу вообще не ломая совместимость.

Что касается документации, то многие считают её отличной, даже одним из серьёзных достоинств Mojolicious, но никак не недостатком. Проблема с документацией в том, что она вся сосредоточена на примерах. Это реально круто, когда ты начинаешь изучать фреймворк. Это экономит кучу времени, когда тебе нужно сделать фичу и ты быстро гуглишь пример аналогичной фичи в официальных guides. Но как только ты выходишь за рамки стандартных задач и возникает необходимость понять, как что-то устроено идеологически или архитектурно, какие конкретно параметры может принимать эта функция и что конкретно она может возвращать в разных ситуациях — выясняется, что для многих модулей Mojolicious такая документация отсутствует в принципе. И не потому, что эта информация относится к «недокументированным возможностям» — почти всё это мельком упоминается здесь и там в разных примерах, а значит считается «документированным». Нередко есть несколько способов получить доступ к определённым данным (параметры запроса, тело ответа, etc.) но не описано чем они друг от друга отличаются и в каких ситуациях правильнее пользоваться какими способами. И последнее — алфавитный порядок функций в доке, серьёзно?! Нет, я понимаю, все люди разные и кому-то наверняка это удобно, но многим всё-таки на порядок проще воспринимать документацию в которой функции сгруппированы по задачам. (Хотя в коде, особенно при чтении его через браузер, где не так удобно пользоваться поиском как в Vim, алфавитный порядок функций неожиданно оказался довольно удобным — кроме new/DESTROY/AUTOLOAD — их всё-таки лучше размещать в начале.) В результате, чтобы разобраться приходится вычитывать код (некоторые предпочитают вместо этого смотреть тесты!), что не так просто — во-первых он не является эталоном читабельности: автор любит использовать фишки перла, которые позволяют писать код компактно (и нередко такой код быстрее работает), но читабельность это ухудшает; во-вторых активное использование и наследования и обмена событиями между объектами усложняет понимание того, что и как происходит внутри 104 классов, из которых состоит Mojolicious-5.

С проблемой обратной совместимости мы мало что можем сделать (хотя, наверное, можно сделать плагин к Mojolicious, который будет её эмулировать по мере возможности). Зато вторую проблему решить не сложно — недостающую документацию можно написать самостоятельно. По мере изучения Mojolicious я планирую описывать некоторые вещи, которые, по-хорошему, должны быть в официальной документации, отсюда и название этой статьи.
Читать дальше →
Total votes 26: ↑23 and ↓3+20
Comments7

OpenSCG’s HA failover solution “PGHA”. Решение Master-Slave для PostgreSQL 9.3

Reading time5 min
Views5.8K
Ниже будет описан опыт настройки отказоустойчивой системы Master-Slave с использованием собственных ресурсов PostgresSQL — Asynchronous Replication + pgBouncer + PGHA — в формате вольного перевода с комментариями одного поста и руководства по установке.

pgHA

pgHA — программа, написанная на Perl, код которой представлен в файле failoverd.pl, который и является основой инструмента. Использует в своей работе pgbouncer и собственную репликацию PostgresSQL; мониторит ведущую бд и в случае ее недоступности открывает вспомогательную бд на запись, останавливая репликацию. По крайней мере с версии 9.3 устанавливается вместе с PostgresSQL, скачать можно здесь. Процесс установки описан в файле README, который лежит в ./9.3/pgha/doc/.

Читать дальше →
Total votes 4: ↑4 and ↓0+4
Comments2

Пути более эффективного использования PostgreSQL

Reading time5 min
Views59K
Прочитав статью Базы данных в онлайн играх и особенно комменты к ней, я в очередной расстроился от мысли, что многие разработчики меняют БД в своём проекте, пытаясь этой сменой решить свои проблемы, не исчерпав, однако, всех возможностей, предоставляемой заменяемой БД. Я принимаю участие в работе над проектом, БД которого характеризуется:
  • Количеством транзакций порядка 5'000 — 10'000 в секунду
  • Объемом примерно в 100ГБ (который бодро растёт)
  • Примерно равным количеством операций на чтение/запись
  • Преимущественно мелкими транзакциями

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

Я опишу некоторые проблемы, с которыми мы сталкиваемся, и применённые решения. Если кто-то сочтёт это полезным — ради Бога. Если кто-то поправит — я буду только рад обнаружить уязвимость в используемых подходах и увеличить эффективность работы БД. Описанное может быть применено без вмешательства в логику приложения, исключительно путём модификации схемы БД.
Читать дальше →
Total votes 44: ↑40 and ↓4+36
Comments55

Lock-free структуры данных. Внутри. RCU

Reading time13 min
Views36K

В этой статье я продолжу знакомить хабрасообщество с техниками, обеспечивающими написание lock-free контейнеров, попутно рекламируя (надеюсь, не слишком навязчиво) свою библиотеку libcds.

Речь пойдет об ещё одной технике безопасного освобождения памяти для lock-free контейнеров — RCU. Эта техника существенно отличается от рассмотренных ранее алгоритмов a la Hazard Pointer.

Read – Copy Update (RCU) – техника синхронизации, предназначенная для «почти read-only», то есть редко изменяемых, структур данных. Типичными примерами такой структуры являются map и set – в них большинство операций является поиском, то есть чтением данных. Считается, что для типичного map'а более 90% вызываемых операций — это поиск по ключу, поэтому важно, чтобы операция поиска была наиболее быстрой; синхронизация поиска в принципе не нужна — читатели при отсутствии писателей могут работать параллельно. RCU обеспечивает наименьшие накладные расходы как раз для read-операций.

Откуда взялось название Read – Copy Update? Первоначально идея была очень проста: есть некоторая редко изменяемая структура данных. Если нам требуется изменить её, то мы делаем её копию и производим изменение — добавление или удаление данных — именно в копии. При этом параллельные читатели работают с первоначальной, не измененной структурой. В некоторый безопасный момент времени, когда нет читателей, мы можем подменить структуру данных на измененную копию. В результате все последующие читатели будут видеть изменения, произведенные писателем.

Читать дальше →
Total votes 47: ↑44 and ↓3+41
Comments19

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity