Веб-программист (Р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)
9 августа, 2016
Елена
Город
Самара
Возраст
53 года ( 2 июня 1972)
9 августа, 2016
Алексей
Город
Самара
Возраст
65 лет (21 декабря 1960)