Pull to refresh
-19
0

Software Engineer

Send message

Как я открыл и развалил сеть ночных клубов? От 6 городов к 4 млн долгов

Level of difficulty Easy
Reading time 4 min
Views 39K

С 2017 по 2018 год я открыл сеть ночных клубов SODA night club & concert hall в городах: Великий Новгород, Псков, Мурманск, Орел, Белгород и Липецк.

4 года отдавал долги и теперь можно вспомнить как это было: плюсы и минусы собственного ночного клуба.

Читать далее
Total votes 196: ↑176 and ↓20 +156
Comments 157

Пишем Python-расширение на Ассемблере (зачем?)

Reading time 34 min
Views 14K

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

Иногда, чтобы полностью разобраться с тем, как что-то устроено, нужно это сначала разобрать, а потом собрать. Уверен, многие из тех, кто это читают, в детстве часто поступали именно так. Это были дети, которые хватались за отвёртку для того, чтобы узнать, что находится внутри у чего-то такого, что им интересно. Разбирать что-то — это невероятно увлекательно, но чтобы снова собрать то, что было разобрано, нужны совсем другие навыки.

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

Эксперимент, о котором я хочу рассказать, пронизан тем же духом. Мне хотелось узнать о том, смогу ли я написать расширение для CPython на чистом ассемблере.

Зачем мне это? Дело в том, что после того, как я дописал книгу CPython Internals, разработка на ассемблере всё ещё была для меня чем-то весьма таинственным. Я начал изучать ассемблер для x86-64 по этой книге, понял какие-то базовые вещи, но не мог связать их со знакомыми мне высокоуровневыми языками.

Вот некоторые вопросы, ответы на которые мне хотелось найти:

— Почему расширения для CPython надо писать на Python или на C?
— Если C-расширения компилируются в общие библиотеки, то что такого особенного в этих библиотеках? Что позволяет загружать их из Python?
— Как воспользоваться ABI между CPython и C, чтобы суметь расширять возможности CPython, пользуясь другими языками?

Читать далее
Total votes 19: ↑18 and ↓1 +17
Comments 0

Автоматизированная сборка Delphi-приложения

Reading time 14 min
Views 22K

Я довольно часто сталкивался с тем, что разработчики на Delphi (можно сказать традиционно) компилируют свои приложения "ручками", что далеко не production-решение, а со стороны выглядит кустарщиной и "делаем на-коленке", хотя продукты бывают весьма серьёзными и продаваемыми. Вероятно, это пошло ещё с тех пор, когда для автоматизации нужно было придумывать свои батнички, которые запускали компилятор командной строки dcc32 с нужными параметрами. Некоторые даже сделали свой "Публикатор" — Delphi-expert, который делает работу сервера сборок: компилирует (правда, открытый в IDE) проект, выставляя ему взятый из какой-то БД инкрементированный номер версии, записывает некий changelog и копирует это куда-то в сетевой каталог.


Я не буду вдаваться в исторический экскурс как было раньше. Я расскажу как есть/можно сейчас, и как это использовать для повышения эффективности своей работы.


Файл проекта современной версии Delphi — это .dproj-файл (здесь и далее я буду ориентироваться на Delphi 10 Rio, но с небольшими отличиями это верно для всех более ранних версий Delphi, начиная с 2007). В нём хранятся все настройки проекта, которые обычно изменяют в IDE (меню Project - Options (Ctrl+Shift+F11)). В рамках данной статьи я сконцентрируюсь на "основных", которые понадобятся для демонстрации общих принципов: это Config — конфигурация, Platform — платформа, OutputDirectory — путь выходного файла и ConditionalDefines (директивы условной компиляции). Остальные настройки, если таковые нужно менять при сборке, я предлагаю выявить самостоятельно. Этот же .dproj-файл, если в него заглянуть обычным текстовым редактором, является ничем иным как скриптом сборки MSBuild (давайте создадим простое консольное приложение и назовём его DelphiAutomatedBuild):

Читать дальше →
Total votes 28: ↑28 and ↓0 +28
Comments 46

Переставляя кровати

Reading time 9 min
Views 40K
«Если лень работать – скажи, что надо всё поменять» © (только что придумал).

«Когда в борделе продажи падают, надо работниц менять, а не кровати переставлять» © (какой-то анекдот).

Ну всё, хватит цитат и умстований. Расскажу, как переставляли кровати на одном милом и уютном предприятии. Их прям хлебом кормить не надо было, дай только кроватки подвигать.
Читать дальше →
Total votes 68: ↑62 and ↓6 +56
Comments 23

Как из фрилансера создать работника

Reading time 8 min
Views 11K
Среди страхов малого и не очень бизнеса периодически всплывает тема попасть с аутсорсерами на трудовой договор. Все боятся трудовых инспекций, налоговых рисков и штрафов. Страхи ваши от незнаний ваших. На самом деле подставиться под работника, а не исполнителя, достаточно сложно. Если вы сами по факту не превратили свободного контрагента в рабсилу. Попробую рассказать, когда фрилансер превращается в работника, в каких случаях надо начинать бояться и где стелить соломки.

image

А что такое эти ваши трудовые отношения


Читать дальше →
Total votes 37: ↑35 and ↓2 +33
Comments 2

Эти токсичные, токсичные собеседования

Reading time 8 min
Views 104K


Всё началось, когда автор Ruby on Rails признался миру:

Total votes 205: ↑197 and ↓8 +189
Comments 734

Information

Rating
4,333-rd
Location
Минск, Минская обл., Беларусь
Date of birth
Registered
Activity

Specialization

Software Developer, Backend Developer
Lead
From 3,200 $
OOP
Git
C++
Multiple thread