Pull to refresh
0
0
Send message

Автоматизация тестирования Windows-приложений с использованием Winium

Reading time5 min
Views19K

С чем едят


С помощью Winium мы можем автоматизировать обычные Windows-приложения. Как правило, Winium может работать с теми элементами, которые можно отыскать в окнах стандартными Windows-средствами (как правило, эти элементы имеют tab-ордер). Средства эти поставляются в стандартных китах (скачать, например, можно тут, после установки искать их, например, здесь: C:\Program Files (x86)\Windows Kits\8.1\bin\x64). Наиболее удобными для себя я считаю inspect и uiverify, но на вкус и цвет, как говорят некоторые мои товарищи, все фломастеры разные.
Читать дальше →
Total votes 17: ↑16 and ↓1+15
Comments8

Фантастика и фентези за два с половиной года, почти сто хороших книг

Reading time22 min
Views247K
На этот пост меня подтолкнула публикация «Почему я ворую книги, бедные авторы, и как это исправить», а именно — скепсис и возражения на мой комментарий о том, что я не читаю плохие книги. Мне предложили рассказать, как я выбираю книги для чтения и что именно читаю. Ну я и повелся.
Оформить список было сравнительно просто, FBReader любезно хранил на GoogleDrive все скачанные книги с того момента, как там появилась эта услуга. Предлагаю вашему вниманию список прочитанного мной за 2,5 года из жанров фентези и фантастики.
Читать дальше →
Total votes 70: ↑66 and ↓4+62
Comments553

VPN за 60 секунд

Reading time2 min
Views68K
Если Вы предпочитаете простые и красивые решения, или Вам нравится всё, что попадает под категорию It Just Works, то эта статья для Вас. Для запуска шифрованного подключения достаточно иметь на своем компьютере SSH-клиент, установить sshuttle (об этом чуть позже) и приобрести VPS с любым тарифным планом в интересующей Вас стране. На удалённой VPS-машине в большинстве случаев абсолютно ничего настраивать не нужно (достаточно, чтобы были установлены пакеты python и сервер SSH).


Читать дальше →
Total votes 40: ↑37 and ↓3+34
Comments37

О языке С и производительности

Reading time31 min
Views64K


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

Но как можно считать себя профессионалом в каком-либо (высокоуровневом) языке, если даже не знаешь, как именно работает процессор, как он выполняет вычисления, эффективным ли способом? Сегодня автоматическое управление памятью становится главной проблемой в большинстве высокоуровневых языков, и многие программисты подходят к её решению без достаточной теоретической базы. Я уверен, что знание низкоуровневых процессов сильно помогает в разработке эффективных высокоуровневых программ.
Читать дальше →
Total votes 153: ↑141 and ↓12+129
Comments269

Мониторинг состояния своего ресурса при помощи Telegram-бота

Reading time5 min
Views39K
Привет, Хабр! Я уже давно наблюдаю за тобой, но все никак не решаюсь сделать свой первый шаг. Теперь мне показалось что я готов. Расскажу о своем опыте работы с telegram ботом — последнее время эта тема достаточно популярна на просторах сети, да и на самом Хабре я встречал уже не мало статей. Но по большей части в них рассказывается о принципах создания ботов, и нет ни слова о том, какую практическую пользу можно из этих самых ботов извлечь.
Читать дальше →
Total votes 33: ↑27 and ↓6+21
Comments12

Random User-Agent — версия вторая

Reading time9 min
Views39K

Прошло два года с того момента, как вышла первая версия этого расширения для Chromium-based браузеров (работает в Google Chrome, Yandex.Browser и т.д.), задача которого проста и понятна — скрывать настоящий User-Agent. На данный момент это расширение работает у +6.000 пользователей (что очень скромно), и несколько дней назад получил на почту письмо с просьбой его немного доработать. Оценив состояние кода, к которому два года никто не притрагивался, было решено — переписывать его с нуля. Четыре дня работы, и вуаля — встречаем свежую мажорную версию, значительно улучшенную и с новым функционалом.


image


Под катом будут некоторые мысли как по поводу чуть-более анонимного веб-серфинга, так и настройке браузера Google Chrome, и почему это расширение может быть полезно. Чуть-чуть опытные анонимусы не найдут в посте для себя чего-либо интересного, поэтому как для них, так и для самых нетерпеливых, традиционно — исходники на GitHub и расширение в Google Webstore.

Читать дальше →
Total votes 38: ↑36 and ↓2+34
Comments19

Автоматическое тестирование Parallels Cloud Server

Reading time5 min
Views6.7K
Я хочу рассказать как тестируется один из продуктов компании Parallels Inc., в которой я работаю,
— Parallels Cloud Server. Думаю некоторым хабрачитателям этот продукт уже знаком по статьям Parallels рассекретила Cloud Server, FastVPS: Как мы меняли платформы виртуализации и Собери сам: как мы сделали хранилище Amazon-style для небольших хостеров. Если нет, то рекомендую статьи выше к прочтению.

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

Если у меня получилось вас заинтересовать — добро пожаловать под кат.
Читать дальше →
Total votes 10: ↑8 and ↓2+6
Comments1

SMS-коды авторизации Telegram продолжают перехватывать

Reading time2 min
Views131K
Примерно три месяца назад Павел Дуров предупредил пользователей, что авторизация по SMS в мессенджере Telegram скомпрометирована. «Судя по всему, спецслужбы РФ решили начать давить на операторов связи, чтобы те стали осуществлять перехват авторизационного SMS-кода. Обычно такое встречается только в рамках людоедских, не заботящихся о своей репутации режимах — средняя Азия, иногда Ближний Восток. Но внезапно случилось в России (если, конечно, отсечь коррупцию внутри МТС)», — сказал Павел Дуров и пообещал сделать рассылку для всех пользователей с советом включить двухфакторную авторизацию, так как операторы связи РФ как верификатор ненадёжны.

К сожалению, даже двухфакторная авторизация не является панацеей. Вчера один из пользователей Telegram Сергей Пархоменко подробно описал, как злоумышленникам удалось уничтожить его аккаунт, на котором была включена двухфакторная аутентификация.
Читать дальше →
Total votes 28: ↑26 and ↓2+24
Comments115

Собеседование на программиста в Amazon

Reading time7 min
Views127K

Представляю вашему вниманию перевод своей статьи Amazon software engineer interview, изначально опубликованной на английском на sobit.me.


Amazon - We Pioneer


Не так давно со мной связался технический рекрутер из Amazon. Компания организовывала трехдневное онсайт собеседование по найму программистов в их берлинский офис.


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


Если я не упомянул чего-то важного в статье, спрашивайте в комментариях. Постараюсь ответить максимально подробно.

Читать дальше →
Total votes 71: ↑62 and ↓9+53
Comments258

Автоматизируем проверку кода или еще немного о pre-commit hook'ах

Reading time11 min
Views29K
Думаю, нет нужды рассказывать хабрапользователю что такое Git / GitHub, pre-commit и как наносить ему hook справа. Перейдем сразу к делу.

В сети много примеров хуков, большинство из них на shell'ах, но ни один автор не уделил внимание одному важному моменту — хук приходится таскать из проекта в проект. На первый взгляд — ничего страшного. Но вдруг появляется необходимость внести изменения в хук, который уже живет в 20 проектах… Или внезапно нужно переносить разработку с Windows на Linux, а хук на PowerShell'е… Что делать? ??????? PROFIT

«Лучше так: 8 пирогов и одна свечка!»


Примеры, конечно, сильно утрированы, но с их помощью выявлены неудобства, которых хотелось бы избежать. Хочется, чтобы хук не требовалось таскать по всем проектам, не приходилось часто «допиливать», но чтобы при этом он умел:
  • выполнять проверку отправляемого в репозиторий кода на валидность (например: соответствие требованиям PEP8, наличие документации итд);
  • выполнять комплексную проверку проекта (юнит-тесты итд);
  • прерывать операцию commit'а в случае обнаружения ошибок и отображать подробный журнал для разбора полетов.

И выглядел приблизительно так:
python pre-commit.py --check pep8.py --test tests.py

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

FizzBuzz на TensorFlow

Reading time4 min
Views53K

интервьюер: Приветствую, хотите кофе или что-нибудь еще? Нужен перерыв?


я: Нет, кажется я уже выпил достаточно кофе!


интервьюер: Отлично, отлично. Как вы относитесь к написанию кода на доске?


я: Я только так код и пишу!


интервьюер: ...


я: Это была шутка.


интервьюер: OK, итак, вам знакома задача "fizz buzz"?


я: ...


интервьюер: Это было да или нет?


я: Это что-то вроде "Не могу поверить, что вы меня об этом спрашиваете."


интервьюер: OK, значит, нужно напечатать числа от 1 до 100, только если число делится нацело на 3, напечатать слово "fizz", если на 5 — "buzz", а если делится на 15, то — "fizzbuzz".


я: Я знаю эту задачу.


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


я: ...


интервьюер: Вот маркер и губка.


я: [задумался на пару минут]


интервьюер: Вам нужна помощь, чтобы начать?


я: Нет, нет, все в порядке. Итак, начнем с пары стандартных импортов:


import numpy as np
import tensorflow as tf

интервьюер: Эм, вы же правильно поняли проблему в fizzbuzz, верно?


я: Так точно. Давайте обсудим модели. Я думаю тут подойдет простой многослойный перцептрон с одним скрытым слоем.

Читать дальше →
Total votes 132: ↑123 and ↓9+114
Comments140

Пишем замену find(1) на golang под Linux

Reading time4 min
Views15K
Для одной внутренней утилиты мне понадобилось написать сканирование изменений в директории, по аналогии с утилитой find, и я столкнулся с неожиданной вещью: стандартный Open()+Readdir()+Close() в go очень медленным по сравнению с тем, как работает linux'овая утилита find. На картинке можно видеть strace этой утилиты. Можно видеть, что она делает какие-то очень странные системные вызовы, и в этих системных вызовах мы и попытаемся разобраться и написать аналог find на go, который будет работать только под Linux, но зато со сравнимой скоростью.

Читать дальше →
Total votes 26: ↑23 and ↓3+20
Comments25

Yet another инструкция по получению ssl-сертификата Let's Encrypt

Reading time3 min
Views31K
Тема получения сертификата Let's Encrypt уже подымалась на хабре (см. тут), да и в сети можно найти много рецептов разного качества.

Читал я и ужасался: одни пишут, что то нужно nginx или apache остановить («на пару минуточек всего»), другие предлагают файлы подкладывать в папку веб-сервера (в соседней ssh-сессии), третьи — о том, как важно соблюсти правильный Content-type для файлов проверки домена…

Давайте попробуем обойтись без всего этого: чтобы не было мучительно больно ни на стадии установки, ни очередном продлении — даже если придётся обновлять сразу много доменов. Собственно, вот и вся цель моей небольшой заметки: это не пошаговый степ-бай-степ, не длинная теоретическая статья о том, как функционирует Let's Encrypt — просто описывается правильный на мой взгляд подход, который будет правилен для конфигурации любой сложности.

Вся суть в двух словах: пусть Let's Encrypt запустит веб-сервер на 9999 порту, а мы допишем конфиг nginx, чтобы он пробросил запрос на этот бекенд. Кому интересны детали — прошу под кат
Читать дальше →
Total votes 31: ↑27 and ↓4+23
Comments15

Linux в кармане — на службе у фотографа

Reading time6 min
Views50K
Так получилось, что фотография, это мой основной профессиональный вид деятельности, а программирование — хобби, которое иногда позволяет размять мозг. Кроме непосредственно разминки для мозга, программирование помогает и в работе. Например, писал полезные штуки, такие как это или это, или это.

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

Это рассказ, о том, как мне удалось сделать для себя инструмент, который с минимальным моим участием и минимальным дополнительным весом в рюкзаке, помогает сделать красивые слайдшоу. И конечно же рассказ о python, ffmpeg и linux на android.
Читать дальше →
Total votes 72: ↑69 and ↓3+66
Comments75

Стандарты симметричного шифрования стран СНГ на Python

Reading time4 min
Views22K
image
Первые недели нового года самое подходящее время для того, чтобы уютно устроившись у окошка, вспомнить что же нам принес год ушедший.
А принес он нам два новых стандарта шифрования. Российский стандарт ГОСТ Р 34.12-2015 (блочный шифр Кузнечик). И украинский ДСТУ 7624:2014 (блочный шифр Калина). Холодными, зимними вечерами нельзя упускать такой удачный повод покодить. Под катом краткое описание алгоритмов и их реализация на Python. А чтобы новым шифрам было веселее, разбавим их общество белорусским СТБ 34.101.31-2007.
Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments3

Решение головоломки Галакуб на Питоне

Reading time9 min
Views31K
На новый год купил племяннику головоломку Галакуб. Задача собрать из разных деталей куб размером 4х4х4. Суммарный объём деталей, как раз, 4х4х4. Прежде, чем дарить надо было собрать головоломку. Красивое симметричное решение нашлось достаточно быстро. Но стало интересно единственное это решение или нет. Интуиция подсказывала, что единственное, но хотелось проверить.


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

Код получился на удивление красивый и понятный. Его удобно объяснять. Может быть, текст будет полезен, например, изучающим Питон.
Читать дальше →
Total votes 51: ↑47 and ↓4+43
Comments31

Миром движет язык С

Reading time10 min
Views58K


Недавно мы опубликовали перевод статьи, в которой приводились аргументы в пользу изучения языков семейства С. Этот пост вызвал немало споров, в том числе была высказана точка зрения, что языки семейства С сходят со сцены; их востребованность хоть и велика, но снижается. Возможно, это и так. Но всё же язык С по-прежнему остаётся одним из наиболее распространённых.
Читать дальше →
Total votes 103: ↑86 and ↓17+69
Comments69

Организация памяти процесса

Reading time8 min
Views140K
image
Управление памятью – центральный аспект в работе операционных систем. Он оказывает основополагающее влияние на сферу программирования и системного администрирования. В нескольких последующих постах я коснусь вопросов, связанных с работой памяти. Упор будет сделан на практические аспекты, однако и детали внутреннего устройства игнорировать не будем. Рассматриваемые концепции являются достаточно общими, но проиллюстрированы в основном на примере Linux и Windows, выполняющихся на x86-32 компьютере. Первый пост описывает организацию памяти пользовательских процессов.
Читать дальше →
Total votes 28: ↑25 and ↓3+22
Comments12

Анатомия программы в памяти

Reading time6 min
Views86K
Управление памятью – одна из главных задач ОС. Она критична как для программирования, так и для системного администрирования. Я постараюсь объяснить, как ОС работает с памятью. Концепции будут общего характера, а примеры я возьму из Linux и Windows на 32-bit x86. Сначала я опишу, как программы располагаются в памяти.

Каждый процесс в многозадачной ОС работает в своей «песочнице» в памяти. Это виртуальное адресное пространство, которое в 32-битном режиме представляет собою 4Гб блок адресов. Эти виртуальные адреса ставятся в соответствие (mapping) физической памяти таблицами страниц, которые поддерживает ядро ОС. У каждого процесса есть свой набор таблиц. Но если мы начинаем использовать виртуальную адресацию, приходится использовать её для всех программ, работающих на компьютере – включая и само ядро. Поэтому часть пространства виртуальных адресов необходимо резервировать под ядро.

image

Это не значит, что ядро использует так много физической памяти – просто у него в распоряжении находится часть адресного пространства, которое можно поставить в соответствие необходимому количеству физической памяти. Пространство памяти для ядра отмечено в таблицах страниц как эксклюзивно используемое привилегированным кодом, поэтому если какая-то программа пытается получить в него доступ, случается page fault. В Linux пространство памяти для ядра присутствует постоянно, и ставит в соответствие одну и ту же часть физической памяти у всех процессов. Код ядра и данные всегда имеют адреса, и готовы обрабатывать прерывания и системные вызовы в любой момент. Для пользовательских программ, напротив, соответствие виртуальных адресов реальной памяти меняется, когда происходит переключение процессов:
Читать дальше →
Total votes 62: ↑61 and ↓1+60
Comments24

Information

Rating
Does not participate
Registered
Activity