Веб-программист (Рython, удаленно)
Описание
Я — Сенченко Василий Юрьевич.
Семейное положение — женат.
Место жительства — Новочеркасск, Ростовская область.
ОБРАЗОВАНИЕ.
1.
Незаконченное высшее — специальность — теоретическая астрофизика и космология.
Место обучение — МГУ имени Ломоносова.
Годы обучения — 2003 — 2005.
2.
Незаконченное высшее — специальность — физика конденсированного состояния —
квантовые вычисления.
Место обучения — ЮРГТУ(НПИ).
Годы обучения — 2005 — 2008.
ОПЫТ РАБОТЫ.
1. 2009 — 2019 гг.
Работа ведущим аналитиком -логистом/программистом с в крупнейшем поставщике
противопожарного оборудования — ООО ОПТТЕХСНАБ(OOO ПКФ
ПОЖИМПОРТ).
2. 2019 — 2021(январь)гг.
Bug Bounty Programm in Hacker One
3. 202 1г.
Работа backend разработчиком в компании «Рободинамика».
Программирование терминалов оплаты, общей бизнес -логики, построение систем
взаимодействия множества частей робота.
4.2021 — разработка сайтов под ключ на языке Python(Django — 3.0).
В свободное от работы время.
ПРИМЕРЫ РАБОТ.
1.Сайт по этичному хакингу и пентесту.
2.Социальная сеть Matrix
3.Сайт — портфолио.
4.еще один сайт — портфолио.
5.приложение для построения рейтинга книг
5.Пример рабочего кода в проекте
utf -8 -*-
from htmlpy_core.html_page import HtmlPage
from operation_scenario import OperationScenario import logging
class PageExchange(HtmlPage):
def __init__(self, *args, **kwargs):
super(PageExchange, self).__init__(*args, **kwargs) self.operationScenario = self.getVariable('operationScen ario')
self.operationScenario.registerUpdateMoneyHandler(self.updateMoney)
self.operationScenario.registerEnableButtonsHandler(self.enableButtons)
def onButtonClick(self, button, arg):
if button == "main": self.switchTo("PageMain")
elif button == "exchange":
self.operationScenario.exchange() self.switchTo("PageMain")
def onEnter(self, prevPage, *args, **kwargs): self.operationScenario.enableReceiveMoney()
self.setVariable(to_pay = self.operationScenario.getSpendingSum())
logging.getLogger(__name__).info("Enter page")
"enter exchange page"
def onExit(self, nextPage, *args, **kwargs):
self.operationScenario.disableReceiveMoney()
logging.getLogger(__name__).info("Exit page") "exit exchange page"
def updateMoney(self, money): "Update money!", money
self.changeValueById("sum", money)
self.setElementEnabled("exchange", True) self.setElementEnabled("main", False)
def enableButtons(self, state): self.setElementEnabled("exchange", state)
if state and self.operationScenario.getMoneyInserted() == 0:
self.setElementEnabled("main", state)
ils.delay import Delay
from operation_scenario import OperationScenario
import logging
class PageInputAccessCode(HtmlPage):
def onButtonClick(self, button, arg): if button == "nextTo":
if se lf.operationScenario.validateAccessCode(self.inputValue):
'Привязать телефон к карте или создать с нуля телефонный номер, если его нет в базе данных' if self.operationScenario.modeAttachPhone:
self.operationScenario.disableAttachPhoneMode()
self.operationScenario.attachPhoneSave() if not self.operationScenario.isPhoneBinded():
self.operationScenario.createCardByTelephone()
self.operationScenario.insertCardByTelephone() self.switchTo("PageCardClose")
else:
self.switchTo("PageNotCorrectPincode")
elif button == "send_recent":
self.operationScenario.generateAccessCo deForPhone() self._resetTimerTrailsEnterPinCode()
elif button == "main":
self.operationScenario.clearTelephoneNumber() self.operationScenario.disablePageCardCloseRefuse()
self.operationScenario.disableAttachPhoneMode() self.switchTo("PageMain")
elif button == "backspace":
self.inputValue = self.inputValue[: -1] "Value", self.inputValue
self.changeValueById('input _value', self.inputValue)
else: char = button.split("_")[1]
if len(self.inputValue) > 4:
self.inputValue += "" else:
self.inputValue += char
# "Input Value", self .inputValue self.changeValueById('input_value', self.inputValue)
if len(self.inputValue) > 4:
self.setElementEnabled("nextTo", True) else:
self.setElementEnabled("nextTo", False)
def onEnter(self, prevPage, *args, **kwargs):
logging.getLogger(__name__).info("Enter page")
self.operationScenario = self.getVariable('operationScenario') self.inputValue = ''
self.setElementEnabled("nextTo", False)
self._resetTimerT railsEnterPinCode() self.counterTrails = 0
def _resetTimerTrailsEnterPinCode(self): """Включить кнопку по истечению времени"""
self.setElementEnabled("send_recent", False)
Delay.once(30, self._setEnableSendRecent) "Disable button send_recent")
def _setEnableSendRecent(self): "Enable button send_recent")
self.setElementEnabled("send_recent", True)
ОСНОВНЫЕ НАВЫКИ.
Python2 -3, django, html, css, bootstrap, php, go, bash, linux, bitbacket, git, c, comand line,
sql, docker, docker -compose, symfony, javascript, nodejs, npm, react, vue, dart, flutter.
ПОДРОБНЕЕ.
Python 2, 3 — непрыровно практика на python более 12 мес.
Django — разработано около десятка приложений раз личной сложности, как с
использованием дополгнительных технологий(React, Vue) так и полный стек Django. Html5
— само -собой это must have любого человека, связанного с веб.
Css3 — познания не такие, как у крутого дизайнера, но накручивать стили на верстку я
умею.
Bootstrap — неплохой фреймворк для облегчения жизни программисту. Но чего -то
выдающегося на нем не сделаешь.
Php — работал мало, но имею представление, чем отличется версия 6 от версии
7(пользуюсь иногда 8).
go — самый мощный и шустрый язык из всех, с которыми я имел дело. Идеальный вариант
для микросервисов и серверной части. Еще лет пять и однозначно займет первое место на
бекэнде. Писал на нем апдейтер для микроконтроллера.
Bash — имею неплохое представление о командной строке, хотя никогд а не углублялся в
ее нутро до дна.
linux(Ubuntu) — работаю на линукс(Kali and Ubuntu) третий год и грех жаловаться. Могу
загрузить и настройть дистрибутив, сконфигурировать сервер, хотя конфигурировать
сервера приходится не так часто.
Bitbacket — репоз итории стартапа, на который работал дольше всего, лежали там и, как
следствие, пришлось его освоить. Мне никогда этот сервис не нравился. Но
пользоваться умею.
Git — еще одна вещь, которую знает каждый программист. Я Не гуру commito -в и push -ей,
но то что надо, знаю неплохо.
С — писал на это фантастическом много но уже года три не сталкивался с написанием кода
на нем.
SQL>POSTGRES>MARIADB>MYSQL>SQLLITE>MONGODB — со всем этим
добром сталкивался много раз. Не скажу, что великий специалист, но имею
предст авление, как писать запросы и более -менее их оптимизировать.
Docker, docker -compose — столкнулся с необходимостью контейнеризации в этом году, так
что приходилось уже около десятка раз загонять приложения в докер, что на Django, что на
ROR, Symfony. В о бщем, имею представление.
Javascript — головная боль для все приверженцев безскобочных языков. Язык интересный и я
его вполне прилично знаю. Не спец, но кодировать умею.
ДОПОЛНИТЕЛЬНЫЕ НАВЫКИ.
Куммуникабельность, быстрая обучаемость, всегда на связи в любое время, нет аудита —
нет коммита(пока не уверен в правильности решения, комитить нечего), тестирование на
проникновение, поиск уязвимостей в веб приложениях(open VAS, OWASP ZAP, BURP
SUITE, XSStrike etc.), желание учиться чему -то новому каждый день, о тветственность.
АНГЛИЙСКИЙ ЯЗЫК.
Уровень B1.
МАТЕМАТИКА.
Курс ВУЗа.
ПОЧЕМУ Я ХОТЕЛ БЫ РАБОТАТЬ У ВАС.
Удаленная работа. Интересные задачи.
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ.
Мои хабы в гите.
Your Repositories
Your Repositories
Мой телеграм
@NeoWhitehat
Мой ящик
golanghack@gmail.com
26 октября, 2016
Евгений
Город
Самара
Возраст
60 лет (10 января 1964)
10 августа, 2016
Вячеслав
Город
Самара
Возраст
54 года (14 мая 1970)
27 июля, 2016
Андрей
Город
Самара
Возраст
65 лет (28 февраля 1959)