diff options
author | Sergey Nazaryev <sergey@nazaryev.ru> | 2020-07-20 01:42:09 +0300 |
---|---|---|
committer | Sergey Nazaryev <sergey@nazaryev.ru> | 2020-07-20 01:42:09 +0300 |
commit | 9637e97f1cfb0abcb243215c01bc745e4fc6c5ca (patch) | |
tree | fca8f2402d0ca5fa049abac7c6e6cf77f946b846 | |
parent | 585a141866bafe5dbb41208abf8f24b91e7e1154 (diff) | |
download | portfolio-master.zip portfolio-master.tar.gz portfolio-master.tar.bz2 |
53 files changed, 1258 insertions, 267 deletions
@@ -18,4 +18,5 @@ gem "jekyll", "3.3.0" # If you have any plugins, put them here! group :jekyll_plugins do gem "jekyll-feed", "~> 0.6" + gem "jekyll-redirect-from" end diff --git a/Gemfile.lock b/Gemfile.lock index 4dcc886..ce7298b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,10 +1,10 @@ GEM remote: https://rubygems.org/ specs: - addressable (2.5.0) - public_suffix (~> 2.0, >= 2.0.2) + addressable (2.5.2) + public_suffix (>= 2.0.2, < 4.0) colorator (1.1.0) - ffi (1.9.14) + ffi (1.9.18) forwardable-extended (2.6.0) jekyll (3.3.0) addressable (~> 2.4) @@ -19,25 +19,31 @@ GEM safe_yaml (~> 1.0) jekyll-feed (0.8.0) jekyll (~> 3.3) - jekyll-sass-converter (1.4.0) + jekyll-redirect-from (0.13.0) + jekyll (~> 3.3) + jekyll-sass-converter (1.5.1) sass (~> 3.4) - jekyll-watch (1.5.0) - listen (~> 3.0, < 3.1) - kramdown (1.12.0) + jekyll-watch (1.5.1) + listen (~> 3.0) + kramdown (1.16.2) liquid (3.0.6) listen (3.0.8) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) mercenary (0.3.6) - pathutil (0.14.0) + pathutil (0.16.1) forwardable-extended (~> 2.6) - public_suffix (2.0.4) - rb-fsevent (0.9.8) - rb-inotify (0.9.7) - ffi (>= 0.5.0) + public_suffix (3.0.1) + rb-fsevent (0.10.2) + rb-inotify (0.9.10) + ffi (>= 0.5.0, < 2) rouge (1.11.1) safe_yaml (1.0.4) - sass (3.4.22) + sass (3.5.5) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) PLATFORMS ruby @@ -45,9 +51,10 @@ PLATFORMS DEPENDENCIES jekyll (= 3.3.0) jekyll-feed (~> 0.6) + jekyll-redirect-from RUBY VERSION - ruby 2.1.5p273 + ruby 2.6.2p47 BUNDLED WITH - 1.13.6 + 1.17.2 @@ -1,14 +1,59 @@ -zar's homepage -============== +# nazaryev-blog -Site based on Jekyll with my blog and portfolio +Welcome to your new Jekyll theme! In this directory, you'll find the files you +need to be able to package up your theme into a gem. Put your layouts in +`_layouts`, your includes in `_includes` and your sass in `_sass`. To +experiment with this code, add some sample content and run `bundle exec jekyll +serve` – this directory is setup just like a Jekyll site! -## Building +TODO: Delete this and the text above, and describe your gem -For building just type in shell: +## Installation -```bash -$ jekyll build -``` +Add this line to your Jekyll site's Gemfile: + +```ruby gem "nazaryev-blog" ``` + +And add this line to your Jekyll site's `_config.yml`: + +```yaml theme: nazaryev-blog ``` + +And then execute: + + $ bundle + +Or install it yourself as: + + $ gem install nazaryev-blog + +## Usage + +TODO: Write usage instructions here. Describe your available layouts, includes, +and/or sass. + +## Contributing + +Bug reports and pull requests are welcome on GitHub at +https://github.com/[USERNAME]/hello. This project is intended to be a safe, +welcoming space for collaboration, and contributors are expected to adhere to +the [Contributor Covenant](http://contributor-covenant.org) code of conduct. + +## Development + +To set up your environment to develop this theme, run `bundle install`. + +You theme is setup just like a normal Jelyll site! To test your theme, run +`bundle exec jekyll serve` and open your browser at `http://localhost:4000`. +This starts a Jekyll server using your theme. Add pages, documents, data, etc. +like normal to test your theme's contents. As you make modifications to your +theme and to your content, your site will regenerate and you should see the +changes in the browser after a refresh, just like normal. + +When your theme is released, only the files in `_layouts`, `_includes`, and +`_sass` tracked with Git will be released. + +## License + +The theme is available as open source under the terms of the [MIT +License](http://opensource.org/licenses/MIT). -Static HTML pages will be generated in `_site` directory. diff --git a/_config.yml b/_config.yml index 807badd..e2aaa32 100644 --- a/_config.yml +++ b/_config.yml @@ -1,15 +1,17 @@ name: Сергей Назарьев -position: Software Developer -location: Saint Petersburg +position: Инженер Linux (embedded) +location: Санкт-Петербург +age: 22 года email: sergey@nazaryev.ru +telegram: picokun description: Сергей Назарьев. Разработчик всяких IT-штук. Санкт-Петербург. markdown: kramdown links: - - title: "CV" - url: "http://forge.nazaryev.ru/CV.pdf" + - title: "Резюме" + url: "http://nazaryev.ru/resume.pdf" - - title: "File Archive" + - title: "Файлопомойка" url: "http://files.nazaryev.ru/" exclude: @@ -30,9 +32,6 @@ sites: - title: "Газовик" url: "http://gazovik.ru" - - title: "Кинотеатр Пионер" - url: "http://pioner-kino.ru" - - title: "Океан-тур" url: "http://okean-tur.ru" @@ -41,7 +40,7 @@ products: url: http://cp.mobiumapps.com screenshot: assets/products/mobium.png icon: assets/products/mobium_icon.png - tags: [ ASP.NET, Вёрстка ] + tags: [ asp.net, вёрстка ] description: > Некоторое время по работе поддерживал панель для клиентов сервиса по созданию кроссплатформенных приложений. В @@ -52,7 +51,7 @@ products: url: http://galaxy-rpg.ru screenshot: assets/products/gy.png icon: assets/products/gy_icon.png - tags: [ MODx, PHP ] + tags: [ modx, php ] description: > По старой дружбе с клиентом выступил в этом проекте в роли менеджера и программиста: тесно взаимодействовал с клиентом, @@ -62,7 +61,7 @@ products: url: unknown screenshot: assets/products/exhosting.png icon: assets/products/exhosting_icon.png - tags: [ PHP, Linux ] + tags: [ php, linux ] description: > Ныне уже несуществующий игровой хостинг. Для него была сделана удобная и простая панель для управления игровыми @@ -73,7 +72,7 @@ products: url: https://play.google.com/store/apps/details?id=ru.copypaste screenshot: assets/products/kopipasta.png icon: assets/products/kopipasta_icon.png - tags: [ Android, Java ] + tags: [ android, java ] description: > Читалка сайта Kopipasta.ru с кэшированием и системой избранного. Проба пера. @@ -82,7 +81,7 @@ products: url: unknown screenshot: assets/products/lovesushi.png icon: assets/products/lovesushi_icon.png - tags: [ Android, Java ] + tags: [ android, java ] description: > Меню для суши-бара Love Суши (г. Саратов). Используется вместо традиционного бумажного меню. @@ -91,7 +90,7 @@ products: url: http://cpt-yurcom.ru screenshot: assets/products/yurcom.png icon: assets/products/yurcom_icon.png - tags: [ PHP, MODx ] + tags: [ php, modx ] description: > Портал юристов, сделанный под эгидой Nopreset (топовой web-студии г. Саратова). Реализован back-end под управлением @@ -102,7 +101,7 @@ products: url: unknown screenshot: assets/products/emuteam.png icon: assets/products/emuteam_icon.png - tags: [ Вёрстка, Дизайн ] + tags: [ вёрстка, дизайн ] description: > Сайт «стримеров» — игроков, показывающих игровой процесс в прямом эфире. Я был их посетителем, когда ещё их сайт был diff --git a/_includes/nav.html b/_includes/nav.html index 12789b4..08ac5a4 100644 --- a/_includes/nav.html +++ b/_includes/nav.html @@ -4,26 +4,35 @@ <a href="/" class="title-link">{{ site.name }}</a> </div> <div class="contacts__info"> - <span class="contacts__position">{{ site.position }}, <span id="age">20</span> at {{ site.location }}</span> + <div class="contacts__position">{{ site.position }},</div> + <span id="age">{{ site.age }}</span> @ {{ site.location }} </div> </div> - <menu class="menu"> - <ul class="menu-horizontal"> + <menu class="menu-container"> + <ul class="menu"> {% for my_page in site.pages %} {% if my_page.title %} - <li class="menu-horizontal__item"> + <li class="menu__item"> <a href="{{ my_page.url | relative_url }}">{{ my_page.title | escape }}</a> </li> {% endif %} {% endfor %} {% for link in site.links %} {% if link.title %} - <li class="menu-horizontal__item"> + <li class="menu__item"> <a href="{{ link.url }}">{{ link.title | escape }}</a> </li> {% endif %} {% endfor %} </ul> </menu> + + <div class="email"> + <b>Почта</b> + <a href="mailto:{{ site.email }}">{{ site.email }}</a> + <br> + <b>Telegram</b> + <a href="https://t.me/{{ site.telegram }}">@{{ site.telegram }}</a> + </div> </nav> diff --git a/_layouts/default.html b/_layouts/default.html index fb2c1d9..1988d5a 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -4,19 +4,28 @@ <meta charset="utf-8" /> <title>{% if page.title %}{{ page.title | escape }} ≡ {% endif %}{{ site.name }}</title> - <meta name="description" content="{{ description }}" /> + <meta name="description" content="{{ page.description }}" /> <link rel="stylesheet" href="{{ "/assets/style.css" | relative_url }}"> + <link rel="stylesheet" href="{{ "/assets/syntax.css" | relative_url }}"> <link href="{{ "/assets/favicon.ico" | relative_url }}" rel="shortcut icon" type="image/x-icon" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> + <div class="wrapper"> <div class="page"> {% include nav.html %} {{ content }} </div> - <div class="clear"></div> - <script type="text/javascript" src={{ "/assets/age.js" | relative_url }}></script> + <footer> + <iframe src="//nazaryev.ru/assets/game/game.html" id="game" class="game"></iframe> + <script> + document.querySelector("#game").onload = function() { + this.contentWindow.focus(); + } + </script> + </footer> + </div> </body> </html> diff --git a/_layouts/projects.html b/_layouts/projects.html index 909cb93..353aa82 100644 --- a/_layouts/projects.html +++ b/_layouts/projects.html @@ -1,72 +1,87 @@ ---- -layout: default ---- +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> -<main> - <div class="products"> - <div class="products-inner"> - {% for product in site.products %} - <section class="products__item"> - <div class="product-photo"> - <img src="{{ screenshot }}" /> - <div class="product-tags"> - {% for tag in product.tags %} - <span class="product-tag">{{ tag }}</span> - {% endfor %} - </div> - </div> - <div class="product-info"> - <div class="product-header"> - <img class="product-icon" src="{{ product.icon }}" /> - <span class="product-title">{{ product.title }}</span> - </div> - <div class="product-description">{{ product.description }}</div> - <div class="product-link"> - {% if product.url == "unknown" %} - <a target="_blank" class="product-link-passive">Недоступно</a> - {% else %} - <a href="{{ product.url }}" target="_blank" class="product-link-active">Перейти на сайт</a> - {% endif %} + <title>{% if page.title %}{{ page.title | escape }} ≡ {% endif %}{{ site.name }}</title> + <meta name="description" content="{{ page.description }}" /> + + <link rel="stylesheet" href="{{ "/assets/style.css" | relative_url }}"> + <link rel="stylesheet" href="{{ "/assets/syntax.css" | relative_url }}"> + <link href="{{ "/assets/favicon.ico" | relative_url }}" rel="shortcut icon" type="image/x-icon" /> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + </head> + <body> + <div class="wrapper"> + <div class="page"> + {% include nav.html %} + <main> + <div class="products"> + <div class="products-inner"> + {% for product in site.products %} + <section class="products__item"> + <div class="product-info"> + <div class="product-header"> + <img class="product-icon" src="{{ product.icon }}" /> + <span class="product-title">{{ product.title }}</span> + </div> + <div class="product-description">{{ product.description }}</div> + <div class="product-link"> + {% if product.url == "unknown" %} + <a target="_blank" class="product-link-passive">Недоступно</a> + {% else %} + <a href="{{ product.url }}" target="_blank" class="product-link-active">Перейти на сайт</a> + {% endif %} + </div> + <div class="product-tags"> + {% for tag in product.tags %} + <span class="product-tag">{{ tag }}</span> + {% endfor %} + </div> + <div class="clear"></div> + </div> + </section> + {% endfor %} </div> </div> - </section> - {% endfor %} - <div class="clear"></div> + <div class="clear"></div> + </main> </div> - </div> - <div class="clear"></div> -</main> -<footer> - <div class="information"> - <div class="additional"> - <h2> - А также… - </h2> - <ul class="left"> - <li>несколько сервисов: - <ul> - {% for service in site.services %} - <li><a class="product-link-active" target="_blank" href="{{ service.url }}">{{ service.title }}</a></li> - {% endfor %} + <footer style="padding-top: 0px;"> + <div class="information"> + <div class="additional"> + <h2> + А также… + </h2> + <ul class="left"> + <li>несколько сервисов: + <ul> + {% for service in site.services %} + <li><a class="product-link-active" target="_blank" href="{{ service.url }}">{{ service.title }}</a></li> + {% endfor %} + </ul> + </li> </ul> - </li> - </ul> - <ul class="right"> - <li>множество мелких и/или неопубликованных сайтов: - <ul> - {% for item in site.sites %} - <li><a class="product-link-active" target="_blank" href="{{ item.url }}">{{ item.title }}</a></li> - {% endfor %} + <ul class="right"> + <li>множество мелких и/или неопубликованных сайтов: + <ul> + {% for item in site.sites %} + <li><a class="product-link-active" target="_blank" href="{{ item.url }}">{{ item.title }}</a></li> + {% endfor %} + </ul> + </li> </ul> - </li> - </ul> - <div class="clear"></div> + <div class="clear"></div> + </div> + </div> + <iframe src="//nazaryev.ru/assets/game/game.html" id="game" class="game"></iframe> + <script> + document.querySelector("#game").onload = function() { + this.contentWindow.focus(); + } + </script> + </footer> </div> - </div> - <iframe src="http://game.nazaryev.ru/game.html" id="game" class="game"></iframe> - <script> - document.querySelector("#game").onload = function() { - this.contentWindow.focus(); - } - </script> -</footer> + </body> +</html> diff --git a/_posts/.2018-11-17-multiplayer-games.md.swp b/_posts/.2018-11-17-multiplayer-games.md.swp Binary files differnew file mode 100644 index 0000000..a4b7b47 --- /dev/null +++ b/_posts/.2018-11-17-multiplayer-games.md.swp diff --git a/_posts/2016-05-20-good-designs.md b/_posts/2016-05-20-good-designs.md index 668eac1..e379d71 100644 --- a/_posts/2016-05-20-good-designs.md +++ b/_posts/2016-05-20-good-designs.md @@ -7,22 +7,18 @@ description: "Лучшие сайты с точки зрения UI/UX, из т Отсортированы в порядке убывания радости глаза 1. [<s>Веб-студия Eastwood</s>](http://eastwoodlab.ru), [архив](http://web.archive.org/web/20160404215426/http://eastwoodlab.ru/) - 2. [Monica Dinculescu](http://meowni.ca) - 3. [Хостинг Jino.ru](http://jino.ru) - 4. [Healtchecks.io](https://healthchecks.io/) - 5. [Хартия 97](http://charter97.org) - 6. [Блог Сергея Короля](http://sergeykorol.ru/blog) - 7. [Kenneth Reitz](http://www.kennethreitz.org/) - 8. [Сайт блогера Варламова](http://varlamov.ru) - 9. [Лаборатория Олега Бунина](http://ontico.ru) - 10. [Барахолка Deal.by](http://deal.by) - 11. [Компания Сайтсофт](http://www.sitesoft.ru) - 12. [Chaos Computing](https://www.christian-gmeiner.info/) - 13. [Студия Morizo](http://morizo.ru) - -Сайты-сборники хороших сайтов ------------------------------ - -1. [Советы по UX/UI](http://goodui.org/ ) -2. [Награды в Web](http://www.awwwards.com/ ) -3. [Хорошие одностраничники](https://onepagelove.com/ ) + 2. [Студия MobileUp](http://mobileup.ru/services) + 3. [Major Hayden](https://major.io/) + 4. [Monica Dinculescu](http://meowni.ca) + 5. [Redhead Electronics](http://rh-electronics.ru/) + 6. [Хостинг Jino.ru](http://jino.ru) + 7. [Healtchecks.io](https://healthchecks.io/) + 8. [Хартия 97](http://charter97.org) + 9. [Блог Сергея Короля](http://sergeykorol.ru/blog) + 10. [Kenneth Reitz](http://www.kennethreitz.org/) + 11. [Сайт блогера Варламова](http://varlamov.ru) + 12. [Лаборатория Олега Бунина](http://ontico.ru) + 13. [Барахолка Deal.by](http://deal.by) + 14. [Компания Сайтсофт](http://www.sitesoft.ru) + 15. [Chaos Computing](https://www.christian-gmeiner.info/) + 16. [Студия Morizo](http://morizo.ru) diff --git a/_posts/2016-11-11-linux-spb.md b/_posts/2016-11-11-linux-spb.md index 3c16311..2ac2fdc 100644 --- a/_posts/2016-11-11-linux-spb.md +++ b/_posts/2016-11-11-linux-spb.md @@ -4,6 +4,38 @@ title: "/Линуксовые/ компании в СПб" description: "Список компаний, которые используют FOSS в своих проектах" --- +### Компании + +#### Избранное + + * [НТЦ Метротек](http://ntc.metrotek.ru) — разработка тестеров-анализаторов Ethernet-сетей на C, ARM и Debian + * [НТЦ Протей](http://protei-st.ru) — разработка оборудования для телекоммуникации, DPI, телефония, военное оборудование + * [OKTET Labs](http://oktetlabs.ru) — аутсорсинговая компания разработки ПО под Linux + * ~~[AltEll](http://www.altell.ru)~~, теперь [Нума Технологии](https://numatech.ru/) — пишут свой защищённый BIOS, есть форк vyatta (ALTELL Trust) + * [Syntacore](http://www.syntacore.com) — high-quality, open and efficient RISC-V architecture + * [Quantenna](http://www.quantenna.com) — свои wi-fi-чипы? + * [Emlid](https://emlid.com) — разработка профессиональной электроники (высокоточный GPS-приемник) + * [Mentor Graphics](https://www.mentor.com) — ... + * [Cogent Embedded](https://www.cogentembedded.com) — ... + * [Automated Intelligence Systems](http://aintsys.com/) — ... + * [FINOM](https://finom.io/) — ... + * [Энергопромавтоматизация](http://www.epsa-spb.ru/) — ... + * [Адакта](http://adakta.ru) — ... + * [Woodenshark](https://www.woodenshark.com) — ... + * [Kraftway](https://www.kraftway.ru) — ... + +#### Остальные + + * [Auriga](http://hr.auriga.ru/vacancies/spb/1513/) + * [Orbi](https://orbiprime.com/) + * [Ready for Sky](https://readyforsky.com/ru/) + * [Everynet](https://everynet.com) + * [ПКБ РИО](http://www.pkb-rio.com) + * [Институт Сетевых Технологий](http://int.spb.ru) — защищённые коммуникации для военных + * [RADIOFID](http://radiofid.ru) + * [RAIDIX](http://raidix.ru) + * [Dr.Web](http://www.drweb.ru/) + * [НТЦ-СевенТест](http://seventest.ru) * [НПК Пеленгатор](http://www.npk-pelengator.ru/) * [Фертоинг](http://www.fertoing.ru/) * [Морские Навигационные Системы](http://www.mnsspb.ru/) @@ -14,16 +46,13 @@ description: "Список компаний, которые используют * [Componentality](https://componentality.com/en/) * [НПП ЦРТС](http://www.npp-crts.ru/) * [НИИ РА](http://niir.ru) - * [НТЦ-Метротек](http://metrotek.spb.ru) - * [НТЦ-Протей](http://protei-st.ru) * [Радуга](http://raduga.spb.ru) - * [RAIDIX](http://raidix.ru) - * [Адакта](http://adakta.ru) * [Валента](http://valenta.spb.ru) * [SEMRush](http://semrush.com) - * [Mobium](http://mobiumapps.com) - * [Oktet labs](http://oktetlabs.ru) + * [Радиофид](http://radiofid.ru) * Симметрон + * [Synopsys](http://synopsys.com) + * [PERCo](https://www.perco.ru/products) * [Элтех](http://eltech.com/) * [АО НПП АМЭ](nppame.ru) * [Lanit Tercom](http://www.lanit-tercom.ru/) @@ -32,16 +61,12 @@ description: "Список компаний, которые используют * [ООО "Фирма НИТА"](http://nita.ru/) * [Tbricks / Itiviti](http://itiviti.com) * [TuneIT](http://tune-it.ru) - * [Dr.Web](http://www.drweb.ru/) - * [НТЦ-СевенТест](http://seventest.ru) - * [ОАО "Технологии радиоконтроля"](http://www.stc-spb.ru/) + * [Специальный Технологический Центр (СТЦ)](http://www.stc-spb.ru) * [ООО "Специальные технологии"](http://www.sp-te.ru/en/) * [Embria](http://embria.ru) * [Biovoid Robotics](http://biovoid.ru) - * [Altell](http://www.altell.ru) * [ИнфоТеКС](https://www.infotecs.ru) * [Калькулейт](http://www.calculate.ru/) - * [Энергопромавтоматизация](http://www.epsa-spb.ru/) * [ООО СпецМедТехника](http://spmt.ru) * [Octavian](http://www.octavianonline.com/) * [АО ОКЕНИТ](http://okenit.ru/) @@ -49,7 +74,6 @@ description: "Список компаний, которые используют * [Prointech](http://www.prointech.ru/en) * [Конфидент](http://www.confident.ru/) * [ЦНИИ РТК](http://www.rtc.ru/ru) - * [Syntacore](http://www.syntacore.com) * [АО Радар ММС](http://www.radar-mms.com) * [ДОЛОМАНТ](http://www.dolomant.ru/) * [Wrike](https://www.wrike.com/ru/company) @@ -57,4 +81,28 @@ description: "Список компаний, которые используют * [СуперТел](http://www.supertel.ru/) * [РУТОЛЛ](http://www.rutoll.ru/) * [АКВАМАРИН](http://www.aquamarin.ru/) - * Дом.ру + * [YADRO](http://yadro.com/) + * [General R&D](http://genrnd.ru) — аутсорс железок, выходцы из НТЦ Метротек + +### Прикольные вакансии системных программистов под Linux (2017) + + * [Digital Security. Системный программист С под Linux (Embedded)](https://www.linux.org.ru/forum/job/13771667) + * [AltEll. Инженер-программист (разработка BIOS)](https://hh.ru/vacancy/23106369) + * [AltEll. Системный программист Linux в направление виртуализации](https://hh.ru/vacancy/23296564) + * [AltEll. Системный программист Linux в сетевое направление](https://hh.ru/vacancy/23106402) + * [НТЦ Метротек. Системный программист Linux](https://hh.ru/vacancy/23427761) + * [НТЦ Метротек. Системный программист Linux (Junior)](https://hh.ru/vacancy/23427754) + * [Dr. Web. UNIX Release engineer](https://hh.ru/vacancy/22922753) + * [i-FREE. Embedded (Linux) Developer](https://hh.ru/vacancy/22722237) + * [Calculate Linux. Системный программист (Python)](https://hh.ru/vacancy/23307379) + * [OKTETLabs. Стажировка для студентов](https://vk.com/topic-171_27713820) + * [IT-доминанта. Senior Software Developer (C/embedded)](https://hh.ru/vacancy/23208275) + * [ЗАО Институт телекоммуникаций. Инженер-программист (С/asm)](https://hh.ru/vacancy/23203449) + * [Quantenna Communications. Senior Embedded SW Developer](https://hh.ru/vacancy/22560853) + * [ГК РТЛ Сервис. Ведущий программист/инженер-разработчик встроенного ПО](https://hh.ru/vacancy/22648325) + * [Доломант. Инженер-программист](https://hh.ru/vacancy/8396328) + * [Базальт. Программист-мэйнтейнер](https://lists.altlinux.org/pipermail/devel/2017-February/202393.html) + * [Automated Intelligence Systems. Системный программист Linux (C, Verilog)](https://moikrug.ru/vacancies/1000034848) + * [Программист Embedded Linux, Москва](http://forum.vingrad.ru/forum/topic-392508/anchor-entry2675774/0.html) + * [YADRO. Embedded Linux (C/C++, Python), Москва](https://www.linux.org.ru/forum/job/13481691) + * [Tempesta/Natsys. Linux Kernel Developer](https://www.linux.org.ru/forum/job/13467315) diff --git a/_posts/2016-11-17-zaurus-c700.md b/_posts/2016-11-17-zaurus-c700.md new file mode 100644 index 0000000..d0a5c4a --- /dev/null +++ b/_posts/2016-11-17-zaurus-c700.md @@ -0,0 +1,48 @@ +--- +layout: post +title: "Sharp Zaurus C700" +description: "Процесс портирования современного ПО на старенький Sharp Zaurus" +--- + +Как-то с детства я полюбил маленькие переносные устройства. И так как +в моё детство КПК были недоступны, то приходилось довольствоваться +моддингом мобильных телефонов и смартфонов, переделывая их в некое +подобие их больших братьев-пекарень. + +И пока я менял анимации и меню с иконками из Windows в своём Siemens +CX75, в Японии начали выходить устройства серии Sharp Zaurus. В 2003 +году появился Sharp Zaurus SL-C700: + +![Sharp Zaurus SL-C700](http://www.mobile-review.com/pda/review/image/sharp/zaurus-c700/open.jpg) + +Это ARM'овая железка с процессором pxa250, из коробки на ней Linux +2.4.28, busybox и японская версия Qtopia (очень легковесная среда +рабочего стола на старом Qt). Японское ПО не устроило пользователей, +и товарищи локализовали и допилили стоковую прошивку, назвав итоговое +поделие [Cacko ROM](http://my-zaurus.narod.ru/cacko.html) ([зеркало](https://katastrophos.net/zaurus/)). + +А вот ребята из OpenEmbedded пошли дальше: они написали что-то +похожее на современные bootloader'ы и позволили загружаться не только +с внутренного ограниченного NAND'а, но и с SD-карты. Называется он +[kexecboot](https://github.com/kexecboot/kexecboot/wiki). Замечу, что +разработка ПО для Zaurus форсировало проект OpenEmbedded, который +стал основой Yocto Project -- одного из самых популярных продуктов для +сборки дистрибутивов Linux для embedded-устройств. + +Чуть позже товарищ Omegamoon успешно портировал [Ubuntu +8.04](http://www.omegamoon.com/blog/static.php?page=ZaurusUbuntu) с +оболочкой LXDE, фактически задав вектор на создание и портирование +десктопных дистрибутивов Linux'а с X11, тысячи их: Debian, Angstrom, +OpenZaurus, Arch Linux ARM. Даже OpenBSD портировали под Zaurus. + +Проблема только в том, что все эти дистрибутивы (как и железка, +собственно, за 13 лет) уже давно протухли. А вот что интересно, так +это то, что ребята из OpenEmbedded до сих пор поддерживают сборку +ядра под все вышедшие субноутбуки серии Sharp Zaurus. Слой можно +найти на сайте openembedded: +[meta-handheld](https://layers.openembedded.org/layerindex/branch/master/layer/meta-handheld/). +На момент написания заметки доступно ядро Linux 4.4. + +И так как моя половая ориентация не позволяет использовать Yocto, то +я начал всё собирать под buildroot'ом, в том число перенеся патчи для +ядра из репозитория OpenEmbedded. diff --git a/_posts/2016-11-21-jjb-folders.md b/_posts/2016-11-21-jjb-folders.md new file mode 100644 index 0000000..221721e --- /dev/null +++ b/_posts/2016-11-21-jjb-folders.md @@ -0,0 +1,23 @@ +--- +layout: post +title: "Поддержка папок в Jenkins Job Builder" +description: "Как привязать job к определённой папке?" +--- + +Для того, чтобы в [Jenkins Job Builder (jjb)](http://docs.openstack.org/infra/jenkins-job-builder/) +создать и обновлять job в определённой папке, достаточно прописать в +названии job'а полный путь а-ля: + +```yaml +- job: + name: "developer/zar/buildroot" +``` + +Таким образом job с названием `buildroot` попадёт в директорию +`developer/zar`. + +**Важно**: на данный момент `jjb` не умеет +самостоятельно создавать директории: поддержку этой фичи внедряют уже +несколько лет, а проследить за прогрессом можно в официальном +Gerrit'е создателей `jjb` [вот +тут](https://review.openstack.org/#/c/134307/). diff --git a/_posts/2017-03-17-job-sites.md b/_posts/2017-03-17-job-sites.md new file mode 100644 index 0000000..7740e26 --- /dev/null +++ b/_posts/2017-03-17-job-sites.md @@ -0,0 +1,68 @@ +--- +layout: post +title: "Места, где искать работу IT-шнику" +description: "Ссылки на биржи труда для IT-шника" +--- + +## Специализированные сайты + + - [Careers StackOverflow](http://careers.stackoverflow.com/) + - [HeadHunter](http://hh.ru) + - [SuperJob](http://superjob.ru) + - [Мой круг](http://moikrug.ru) + - [LinkedIn](https://linkedin.com) + - [Indeed](http://ru.indeed.com/?r=us) + - [Джинн](https://djinni.co/) + - [Вакансии Intel'а](http://jobs.intel.com/ListJobs/All) + - [ITMozg](http://itmozg.ru) + - [Monster.com](http://monster.com) + - [jobs.dou.ua](http://jobs.dou.ua) + +## Форумы + + - [SQL.ru](http://www.sql.ru/forum/job-offers) + - [CyberForum](http://www.cyberforum.ru/job-offer/) + - [RSDN](http://rsdn.org/forum/job.offers/) + - [linux.org.ru](http://www.linux.org.ru/forum/job/) + - [Vingrad](http://forum.vingrad.ru/forum/job-for-programmers.html) + - [Клуб программистов](http://programmersforum.ru/forumdisplay.php?s=d7d39461668fbf1f2e516a47ee56186f&f=30) + +## Мало вакансий + + - [SearchEngines](http://searchengines.guru/forumdisplay.php?f=62&order=desc&page=2) + - [Job.ru](http://job.ru) + - [trud.com](http://www.trud.com/) + - [careerist.ru](http://careerist.ru/) + - [joblab.ru](http://joblab.ru/) + - [ya-ob.ru](http://ya-ob.ru/) + - [Зарплата](http://www.zarplata.ru/) + - [Rabota.ru](http://rabota.ru) + - [Developing.ru](http://forum.developing.ru/forumdisplay.php/16-%D0%92%D0%B0%D0%BA%D0%B0%D0%BD%D1%81%D0%B8%D0%B8-%D0%B8-%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D1%8B-%D0%B4%D0%BB%D1%8F-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%BE%D0%B2?s=60713553cfcb49aeca2e82bfe8a91a5a) + - http://geekbrains.ru/probations + - https://codeby.net/forum/forums/predlozhenija-raboty.24/ + - http://php.ru/forum/viewforum.php?f=3&sid=1a14c60665b9644aed8f3db557870cfd + - http://forum.codeguru.ru/index.php?PHPSESSID=13d09mcir5f4qovvimcce8f5u3&board=10002.0 + - http://webmasters.ru/forum/f42/ + - http://domenforum.net/forumdisplay.php?f=88 + - http://forum.sysman.ru/index.php?s=7e4288ed460eda76d9b7803cb35c5a9d&showforum=96 + - http://phpforum.su/index.php?s=276293a912bea5cf15a5a4d7f6d9b240&showforum=18 + - http://coding.in.ua/viewforum.php?f=29 + - http://javatalks.ru/branches/20 + - https://sysadmins.ws/viewforum.php?f=75&sid=ed33959d932c3d2b1b4b2d9360395274 + - http://sysadmins.me/forum/49/ + - http://sysadmins.ru/forum7.html + - http://phpforum.su/index.php?showforum=18 + - http://forumphp.ru/?board=38.0 + - http://forum.ishodniki.ru/index.php/board,34.0.html?PHPSESSID=ef50d6c6e111ebf13bf0973ec93be077 + - http://code-forum.net/forumdisplay.php?f=15&s=58638219d09f21532ac16d7e67bbff0c + - http://primat.org/forum/34 + - http://forum.3dnews.ru/forumdisplay.php?f=66 + - http://unity3d.ru/distribution/viewforum.php?f=109 + - http://forum.ixbt.com/?id=101 + - http://forums.overclockers.ru/viewforum.php?f=135&sid=441bbb182d66d54e3b9ded583507bd05 + - http://sysadmin.mail.ru/pforum/viewforum.php?f=41&sid=ad750d6ae544ab0948191aa234675fc4 + - http://unix-forum.ru/forum15.html + - http://forum.sys-admin.kz/index.php?PHPSESSID=0645a8cde9439d910855bee3bdfa51aa&board=56.0 + - http://systalk.ru/viewforum.php?f=125&sid=b6101c21fa5773f48927f986597af3ae + - http://www.thg.ru/forum/forumdisplay.php?f=62 + - http://4pda.ru/forum/index.php?showforum=478 diff --git a/_posts/2017-07-03-ultrabooks.md b/_posts/2017-07-03-ultrabooks.md new file mode 100644 index 0000000..d73a8e0 --- /dev/null +++ b/_posts/2017-07-03-ultrabooks.md @@ -0,0 +1,14 @@ +--- +layout: post +title: "Ох уж эти ультрабуки" +description: "Попытка оценить рынок ультрабуков на момент 2017 года" +--- + +- Asus ZenBook UX31E +- Asus ZenBook UX31A +- Asus ZenBook UX32x — 1.5 кг, дискретная видеокарта, разъём для оперативки, Core i7 +- Asus Zenbook UX305 — 1.2 кг +- Xiaomi Notebook Air 12.5 (2016) +- Xiaomi Notebook Air 12.5 (2017) +- Xiaomi Notebook Air 13.3 +- MacBook Air 11 — 1.2 кг, макбук, маленький и миленький, монолитный корпус, старое железо, оверпрайс diff --git a/_posts/2018-10-15-busybox-ulyanovsk.md b/_posts/2018-10-15-busybox-ulyanovsk.md new file mode 100644 index 0000000..dd7d17a --- /dev/null +++ b/_posts/2018-10-15-busybox-ulyanovsk.md @@ -0,0 +1,41 @@ +--- +layout: post +title: "СРОЧНО! busybox родом из Ульяновска" +description: "О том, кто написал busybox" +--- + +Что-то я тут заковырялся в коде busybox'а, смотрю копирайт вот тут: +https://git.busybox.net/busybox/tree/miscutils/crond.c + +> * Vladimir Oleynik <dzo@simtreas.ru> (C) 2002 + +Ну и у меня привычка изучать, что за конторы контрибьютят в опенсорс; +мало ли у них какие вакансии интересные висят. + +Открываю: [simtreas.ru](http://simtreas.ru) — Управления Федерального +казначейства по Ульяновской области + +Ну, мало ли с 2002 года забрали другой домен. Иду в +[http://web.archive.org/web/20020408102201/http://simtreas.ru:80/contacts.htm](http://web.archive.org/web/20020408102201/http://simtreas.ru:80/contacts.htm) + +> Сетевой администратор. Олейник Владимир Николаевич +> Сайт: http://www.simtreas.ru/~dzo + +Ы. + +P.S. Вот так выглядит количество коммитов в busybox, сделанных с +разных почтовых доменов: + +``` + ... + 178 redhat.com +>>> 187 simtreas.ru + 213 lineo.com + 379 debian.org + 596 gentoo.org + 802 landley.net + 962 ihug.co.nz + 1105 gmail.com + 2521 codepoet.org + 7598 googlemail.com +``` diff --git a/_posts/2018-11-17-multiplayer-games.md b/_posts/2018-11-17-multiplayer-games.md new file mode 100644 index 0000000..7c8ca61 --- /dev/null +++ b/_posts/2018-11-17-multiplayer-games.md @@ -0,0 +1,33 @@ +--- +layout: post +title: "List of all multiplayer games" +description: "Full list of all multiplayer games" +--- + +## Co-operative games + + - [Nuclear Throne Together (PC)][NTT] + - [The Binding of Isaac: True Co-op (PC)][Isaac] + - [Tetris Party Deluxe (Wii)][TetrisWii] + - [Portal 2 (PC)][Portal2] (в том числе community-карты) + - [Cuphead (PC)][Cuphead] + - [Trine 1/2/3 (PC)][Trine] + - [Castle Crashers (PC)][CastleCrashers] + - [Alien Swarm (PC)][AlienSwarm] + - [Diablo 2 (PC)][Diablo2] + - [Battle City (NES)][BattleCity] + - [Chip & Dale 1/2 (NES)][ChipDale] + - [Goof Troop (NES)][GoofTroop] + +[NTT]: https://yellowafterlife.itch.io/nuclear-throne-together +[Isaac]: https://steamcommunity.com/sharedfiles/filedetails/?id=1230784774 +[TetrisWii]: https://www.youtube.com/watch?v=HIsk7JJZwQs +[Portal2]: https://store.steampowered.com/app/620/Portal_2/ +[GoofTroop]: https://en.wikipedia.org/wiki/Goof_Troop_(video_game) +[Cuphead]: https://store.steampowered.com/app/268910/Cuphead/ +[Trine]: https://en.wikipedia.org/wiki/Trine_(video_game) +[CastleCrashers]: https://store.steampowered.com/app/204360/Castle_Crashers/ +[AlienSwarm]: https://store.steampowered.com/app/630/Alien_Swarm/ +[Diablo2]: https://en.wikipedia.org/wiki/Diablo_II +[BattleCity]: https://en.wikipedia.org/wiki/Battle_City_(video_game) +[ChipDale]: https://en.wikipedia.org/wiki/Chip_%27n_Dale_Rescue_Rangers_(video_game) diff --git a/articles.md b/articles.md deleted file mode 100644 index c431bda..0000000 --- a/articles.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: articles -title: Articles ---- - -Статьи -====== diff --git a/assets/Graphik-Bold-Cy-Web.woff b/assets/Graphik-Bold-Cy-Web.woff Binary files differnew file mode 100644 index 0000000..7c09144 --- /dev/null +++ b/assets/Graphik-Bold-Cy-Web.woff diff --git a/assets/Graphik-Regular-Cy-Web.woff b/assets/Graphik-Regular-Cy-Web.woff Binary files differnew file mode 100644 index 0000000..ba9ebb0 --- /dev/null +++ b/assets/Graphik-Regular-Cy-Web.woff diff --git a/assets/candara.ttf b/assets/candara.ttf Binary files differdeleted file mode 100644 index 9c91b71..0000000 --- a/assets/candara.ttf +++ /dev/null diff --git a/assets/game/android.png b/assets/game/android.png Binary files differnew file mode 100644 index 0000000..24cc3c0 --- /dev/null +++ b/assets/game/android.png diff --git a/assets/game/battletoads.gif b/assets/game/battletoads.gif Binary files differnew file mode 100644 index 0000000..1de3bdd --- /dev/null +++ b/assets/game/battletoads.gif diff --git a/assets/game/belmont.png b/assets/game/belmont.png Binary files differnew file mode 100644 index 0000000..afa5412 --- /dev/null +++ b/assets/game/belmont.png diff --git a/assets/game/billrizer.png b/assets/game/billrizer.png Binary files differnew file mode 100644 index 0000000..1f5afea --- /dev/null +++ b/assets/game/billrizer.png diff --git a/assets/game/cache.png b/assets/game/cache.png Binary files differnew file mode 100644 index 0000000..7c52232 --- /dev/null +++ b/assets/game/cache.png diff --git a/assets/game/chipndale.png b/assets/game/chipndale.png Binary files differnew file mode 100644 index 0000000..4deec72 --- /dev/null +++ b/assets/game/chipndale.png diff --git a/assets/game/game.html b/assets/game/game.html new file mode 100644 index 0000000..757f102 --- /dev/null +++ b/assets/game/game.html @@ -0,0 +1,473 @@ +<html>
+ <head>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
+ <script>
+ $(document).ready(function() {
+ var clientId = null;
+ var clientSocket = null;
+
+ var WIDTH_STEP= 6; // Ширина шага
+
+ // Класс игрока
+ function Player(name, x, character) {
+ this.character = character;
+ this.action = 'standingRight';
+ this.name = name;
+ this.remove = false;
+ this.widthStep = WIDTH_STEP; // Ширина шага
+
+ this.x = x;
+ this.newX = 0;
+
+ this.animation = 0;
+
+ this.standLeft = function(x) {
+ this.action = 'standingLeft';
+ this.animation = 0;
+ this.widthStep = WIDTH_STEP;
+ }
+
+ this.standRight = function(x) {
+ this.action = 'standingRight';
+ this.animation = 0;
+ this.widthStep = WIDTH_STEP;
+ }
+
+ this.move = function(x) {
+ this.newX = x;
+ this.animation = 0;
+
+ if(this.x > x)
+ this.action = 'movingLeft';
+ else if(this.x < x)
+ this.action = 'movingRight';
+ }
+ }
+
+ // Экземпляры игроков
+ var players = {};
+
+ // Экземпляры объектов
+ var entities = [];
+
+ // Параметры поля
+ var battlefield = {};
+
+ // Параметры показываемоего участка
+ var show = {}
+
+ // Константы
+ var me = "ME"; // Идентификатор, по которому находим себя
+ var heightFloor = 330; // Высота пола
+ var heightNickname = 20; // Расстояние между игроком и его ником
+ var fps = 20; // Количество отрисовываний в секунду
+
+ function Entity(x, object) {
+ this.object = object;
+ this.x = x;
+ }
+
+ var background_with_entities_loaded = false;
+ var background_with_entities = new Image();
+
+ var objects = {
+ "forest": {resource: new Image(), url: "objects/forest.png",height:57,width:106},
+ "lamp": {resource: new Image(), url: "objects/lamp.png",height:83,width:50},
+ "shop-blue": {resource: new Image(), url: "objects/shop-blue.png",height:97,width:150},
+ "shop-red": {resource: new Image(), url: "objects/shop-red.png",height:97,width:150},
+ "shop-violet": {resource: new Image(), url: "objects/shop-violet.png",height:97,width:150},
+ "sign-blue": {resource: new Image(), url: "objects/sign-blue.png",height:23,width:23},
+ "tall-green": {resource: new Image(), url: "objects/tall-green.png",height:170,width:129},
+ "tall-red": {resource: new Image(), url: "objects/tall-red.png",height:170,width:129},
+ "tall-violet": {resource: new Image(), url: "objects/tall-violet.png",height:170,width:129},
+ "trash": {resource: new Image(), url: "objects/trash.png",height:16,width:17},
+ "wide-gray": {resource: new Image(), url: "objects/wide-gray.png",height:123,width:121},
+ "wide-green": {resource: new Image(), url: "objects/wide-green.png",height:123,width:121},
+ "wide-violet": {resource: new Image(), url: "objects/wide-violet.png",height:123,width:121}
+ };
+
+ // Описание шкурок
+ var characters = {
+ i : {
+ resource : new Image(),
+ url : "ios.png",
+ height : 55,
+ width : 37,
+ animations : {
+ standingLeft : [[0+37*8,0]],
+ standingRight : [[0+37*9,0]],
+ movingLeft : [[0+37*0,0],[0+37*1,0],[0+37*2,0],[0+37*3,0],[0+37*4,0],[0+37*5,0],[0+37*6,0],[0+37*7,0]],
+ movingRight : [[0+37*10,0],[0+37*11,0],[0+37*12,0],[0+37*13,0],[0+37*14,0],[0+37*15,0],[0+37*16,0],[0+37*17,0]],
+ }
+ },
+ android : {
+ resource : new Image(),
+ url : "android.png",
+ height : 55,
+ width : 37,
+ animations : {
+ standingLeft : [[0+37*8,0]],
+ standingRight : [[0+37*9,0]],
+ movingLeft : [[0+37*0,0],[0+37*1,0],[0+37*2,0],[0+37*3,0],[0+37*4,0],[0+37*5,0],[0+37*6,0],[0+37*7,0]],
+ movingRight : [[0+37*10,0],[0+37*11,0],[0+37*12,0],[0+37*13,0],[0+37*14,0],[0+37*15,0],[0+37*16,0],[0+37*17,0]],
+ }
+ },
+ stollman : {
+ resource : new Image(),
+ url : "stollman.png",
+ height : 55,
+ width : 37,
+ animations : {
+ standingLeft : [[0+37*8,0]],
+ standingRight : [[0+37*9,0]],
+ movingLeft : [[0+37*0,0],[0+37*1,0],[0+37*2,0],[0+37*3,0],[0+37*4,0],[0+37*5,0],[0+37*6,0],[0+37*7,0]],
+ movingRight : [[0+37*10,0],[0+37*11,0],[0+37*12,0],[0+37*13,0],[0+37*14,0],[0+37*15,0],[0+37*16,0],[0+37*17,0]],
+ }
+ },
+ };
+
+ // Случайное число от min до max
+ function rand(min, max) {
+ return Math.floor(Math.random() * (max - min + 1)) + min;
+ }
+
+ function init() {
+ var width = 3392;
+ var height = 339;
+ battlefield["canvas"] = document.createElement('canvas');
+ battlefield["context"] = battlefield["canvas"].getContext('2d');
+ battlefield["width"] = width;
+ battlefield["height"] = height;
+ show["canvas"] = document.getElementById("show");
+ show["context"] = show["canvas"].getContext('2d');
+ }
+ init();
+
+ // Выполняется, когда всё загружено
+ function ready() {
+ if(background_loaded && object_loaded == object_names.length && !background_with_entities_loaded)
+ makeBackground();
+ else if(background_with_entities_loaded && character_loaded == character_names.length && background_loaded && object_loaded == object_names.length) {
+ players[me] = new Player("me",
+ rand(30, battlefield["width"]-30),
+ character_names[rand(0,character_names.length-1)]
+ ); // создаём своего персонажа
+
+ $("#character").val(players[me].character);
+
+ //sync(); // запускаем сервис синхронизации
+ moving(); // запускаем сервис движения
+ draw(); // запускаем сервис отрисовывания
+ }
+ }
+ /*
+ // Сервис синхронизации
+ function sync() {
+ if(clientSocket == null) {
+ clientSocket = new WebSocket("ws://nazaryev.ru:8080/");
+ clientSocket.onmessage = function(event) {
+ var data = JSON.parse(event.data);
+ console.log(data);
+ if(clientId == null) {
+ clientId = data.id;
+ return;
+ }
+
+ $.each(players, function(id, player) {
+ players[id].remove = true;
+ });
+
+ players[me].remove = false;
+ $.each(data, function(id, player) {
+ if(id != clientId)
+ if(players[id] === undefined) {
+ players[id] = new Player(player['name'], parseInt(player['x']), player['character'])
+ } else {
+ players[id].move(player['x']);
+ players[id].name = player['name'];
+ players[id].character = player['character'];
+ players[id].remove = false;
+ }
+ });
+
+ $.each(players, function(id, player) {
+ if(players[id].remove) delete players[id];
+ });
+ clientSocket.send(JSON.stringify({id: clientId, x: players[me].x, name: players[me].name, character: players[me].character}));
+ };
+ }
+ */
+ /*$.getJSON("game.php?x=" + players[me].x + "&name=" + players[me].name + "&character=" + players[me].character, function(data) {
+
+ $.each(players, function(id, player) {
+ players[id].remove = true;
+ });
+
+ players[me].remove = false;
+ $.each(data, function(id, player) {
+ if(id != clientId) {
+ if(typeof players[id] == 'undefined') {
+ players[id] = new Player(player['name'], parseInt(player['x']), player['character'])
+ } else {
+ players[id].move(player['x']);
+ players[id].name = player['name'];
+ players[id].character = player['character'];
+ players[id].remove = false;
+ }
+ }
+ });
+
+ $.each(players, function(id, player) {
+ if(players[id].remove) delete players[id];
+ });
+
+ setTimeout (sync, 10000)
+ });
+ }
+ */
+ // Сервис движения
+ function moving() {
+ for(var key in players) {
+ var currentPlayer = players[key];
+ if(currentPlayer.action == 'movingRight' || currentPlayer.action == 'movingLeft') {
+ if(currentPlayer.action == 'movingRight' && currentPlayer.x < currentPlayer.newX) {
+ currentPlayer.widthStep += 0.1;
+ currentPlayer.x += currentPlayer.widthStep;
+ }
+ else if(currentPlayer.action == 'movingLeft' && currentPlayer.x > currentPlayer.newX) {
+ currentPlayer.widthStep += 0.1;
+ currentPlayer.x -= currentPlayer.widthStep;
+ }
+ else if(currentPlayer.action == 'movingLeft')
+ currentPlayer.standLeft();
+ else if(currentPlayer.action == 'movingRight')
+ currentPlayer.standRight();
+
+ animation(currentPlayer);
+ }
+ }
+
+ setTimeout (moving, 50)
+ }
+
+ // Обновление анимации персонажа при каком-либо действии
+ function animation(currentPlayer) {
+ if(currentPlayer.animation+1 < characters[currentPlayer.character]["animations"][currentPlayer.action].length) currentPlayer.animation++;
+ else if(currentPlayer.animation+1 >= characters[currentPlayer.character]["animations"][currentPlayer.action].length) currentPlayer.animation = 0;
+ }
+
+ function makeBackground() {
+ clear();
+
+ var parts = 35;
+ var offset = battlefield["width"] / parts;
+
+ for(var i = 1; i <= 300; i++) {
+ var object = object_names[rand(0, object_names.length-1)];
+ var x = rand((i-1)*offset, i*offset);
+ entities.push(new Entity(x, object));
+ }
+
+ battlefield["context"].drawImage(background, 0, 0);
+
+ for(var key in entities) {
+ var currentEntity = entities[key];
+ battlefield["context"].drawImage(
+ objects[currentEntity.object]["resource"],
+ 0,
+ 0,
+ objects[currentEntity.object]["width"],
+ objects[currentEntity.object]["height"],
+ currentEntity.x,
+ heightFloor - objects[currentEntity.object]["height"],
+ objects[currentEntity.object]["width"],
+ objects[currentEntity.object]["height"]
+ );
+
+ }
+
+ background_with_entities.src = battlefield["canvas"].toDataURL();
+ background_with_entities.onload = function() {
+ background_with_entities_loaded = true;
+ ready();
+ }
+ }
+
+ function clear() {
+ battlefield["canvas"].width = battlefield["width"];
+ battlefield["canvas"].height = battlefield["height"];
+ }
+
+ // Сервис отрисовывания кадров
+ function draw() {
+ // Очищаем холст всего поля
+ battlefield["canvas"].width = battlefield["width"];
+ battlefield["canvas"].height = battlefield["height"];
+
+ // Рисуем фон
+ battlefield["context"].drawImage(background_with_entities, 0, 0);
+
+ // Рисуем игроков и их ники
+ for(var key in players) {
+ var currentPlayer = players[key];
+ battlefield["context"].shadowColor = "rgba(0,0,0,0)";
+ battlefield["context"].drawImage(
+ characters[currentPlayer.character]["resource"],
+ characters[currentPlayer.character]["animations"][currentPlayer.action][currentPlayer.animation][0],
+ characters[currentPlayer.character]["animations"][currentPlayer.action][currentPlayer.animation][1],
+ characters[currentPlayer.character]["width"],
+ characters[currentPlayer.character]["height"],
+ currentPlayer.x,
+ heightFloor - characters[currentPlayer.character]["height"],
+ characters[currentPlayer.character]["width"],
+ characters[currentPlayer.character]["height"]
+ );
+
+ battlefield["context"].font = "bold 12px Arial";
+
+ battlefield["context"].shadowColor = "#000";
+ battlefield["context"].shadowOffsetX = 1;
+ battlefield["context"].shadowOffsetY = 1;
+ battlefield["context"].shadowBlur = 2;
+
+ battlefield["context"].fillStyle = "#fff";
+ battlefield["context"].textAlign = 'center';
+
+ battlefield["context"].fillText(currentPlayer.name, currentPlayer.x + (characters[currentPlayer.character]["width"]/2), heightFloor-heightNickname-characters[currentPlayer.character]["height"]);
+ }
+
+ // Очищаем холст видимого участка
+ show["canvas"].width = document.body.clientWidth; // рисуем по ширине экрана
+ show["canvas"].height = battlefield["height"]; // по высоте поля
+
+ // Определяем видимый участок и отрисовываем его
+ var m = Math.min((players[me].x+show["canvas"].width/2) - show["canvas"].width, battlefield["width"]-show["canvas"].width);
+ show["context"].drawImage(
+ battlefield["canvas"],
+ ((m < 0) ? 0 : m), 0,
+ show["canvas"].width,
+ show["canvas"].height,
+ 0, 0,
+ show["canvas"].width,
+ show["canvas"].height
+ );
+ setTimeout (draw, 1000 / fps)
+ }
+
+ // Количество шкурок
+ var character_names = [];
+ for (var name in characters) character_names[character_names.length] = name;
+
+ // Количество объектов
+ var object_names = [];
+ for (var name in objects) object_names[object_names.length] = name;
+
+ // Загрузка шкурок
+ var character_loaded = 0;
+ for(var key in characters) {
+ characters[key]["resource"].src = characters[key]["url"];
+ characters[key]["resource"].onload = function() {
+ character_loaded++;
+ ready();
+ }
+ }
+
+ var object_loaded = 0;
+ for(var key in objects) {
+ objects[key]["resource"].src = objects[key]["url"];
+ objects[key]["resource"].onload = function() {
+ object_loaded++;
+ ready();
+ }
+ }
+
+ // Загрузка фона
+ var background_loaded = false; // Загрузился ли фон?
+ var background = new Image();
+ background.src = 'world.png';
+ background.onload = function() {
+ background_loaded = true;
+ ready();
+ }
+
+ // Изменение ника
+ $("#nickname").change(function() {
+ if($(this).val().length > 0) players[me].name = $(this).val();
+ });
+
+ // Изменение шкурки
+ $("#character").change(function() {
+ players[me].character = $(this).val();
+ });
+
+ // Запрещаем писать пробелы
+ $("#nickname").keydown(function(e) {
+ if (e.keyCode == 32) return false;
+ });
+
+ // Обрабатываем отжатие клавиши
+ $(document).keyup(function(e){
+ if (e.keyCode == 37) {
+ players[me].standLeft();
+ return false;
+ } else if(e.keyCode == 39) {
+ players[me].standRight();
+ return false;
+ }
+
+ });
+
+ // Обрабатываем нажатие клавиши
+ $(document).keydown(function(e) {
+ if (e.keyCode == 37) {
+ if(players[me].action != 'movingRight' && players[me].action != 'movingLeft') players[me].move(-Infinity);
+ return false;
+ } else if(e.keyCode == 39) {
+ if(players[me].action != 'movingRight' && players[me].action != 'movingLeft') players[me].move(Infinity);
+ return false;
+ }
+ });
+ });
+ </script>
+
+ <style>
+ html, body {
+ padding: 0;
+ margin: 0;
+ height:100%;
+ overflow-y: hidden;
+ }
+ .container {
+ min-height: 100%;
+ height: auto !important;
+ height: 100%;
+ }
+
+ #footer {
+ background: url(world.png);
+ width: 100%;
+ height: 339px;
+ }
+
+ canvas {
+ width: 100%;
+ height: 339px;
+ }
+ </style>
+ </head>
+ <body>
+ <div id="container">
+ <div id="footer">
+ <canvas id='show'></canvas>
+ <div style="position: relative; margin-left: 5px;bottom: 25px;">
+ <input maxlength=20 type="text" id="nickname" value="me" style="height: 15px; font-size: 10px;"/>
+ <select id="character" style="height: 15px; font-size: 10px;">
+ <option value="i">iMan</option>
+ <option value="android">Android</option>
+ <option value="stollman">Stollman</option>
+ </select>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/assets/game/higgins.png b/assets/game/higgins.png Binary files differnew file mode 100644 index 0000000..7cb1fc0 --- /dev/null +++ b/assets/game/higgins.png diff --git a/assets/game/ios.png b/assets/game/ios.png Binary files differnew file mode 100644 index 0000000..8b2451e --- /dev/null +++ b/assets/game/ios.png diff --git a/assets/game/mario.png b/assets/game/mario.png Binary files differnew file mode 100644 index 0000000..62684f2 --- /dev/null +++ b/assets/game/mario.png diff --git a/assets/game/objects/forest.png b/assets/game/objects/forest.png Binary files differnew file mode 100755 index 0000000..5ec07bb --- /dev/null +++ b/assets/game/objects/forest.png diff --git a/assets/game/objects/lamp.png b/assets/game/objects/lamp.png Binary files differnew file mode 100755 index 0000000..e9da156 --- /dev/null +++ b/assets/game/objects/lamp.png diff --git a/assets/game/objects/shop-blue.png b/assets/game/objects/shop-blue.png Binary files differnew file mode 100755 index 0000000..eda6584 --- /dev/null +++ b/assets/game/objects/shop-blue.png diff --git a/assets/game/objects/shop-red.png b/assets/game/objects/shop-red.png Binary files differnew file mode 100755 index 0000000..97570fc --- /dev/null +++ b/assets/game/objects/shop-red.png diff --git a/assets/game/objects/shop-violet.png b/assets/game/objects/shop-violet.png Binary files differnew file mode 100755 index 0000000..e1534d5 --- /dev/null +++ b/assets/game/objects/shop-violet.png diff --git a/assets/game/objects/sign-blue.png b/assets/game/objects/sign-blue.png Binary files differnew file mode 100755 index 0000000..fd1c58a --- /dev/null +++ b/assets/game/objects/sign-blue.png diff --git a/assets/game/objects/tall-green.png b/assets/game/objects/tall-green.png Binary files differnew file mode 100755 index 0000000..d0b4063 --- /dev/null +++ b/assets/game/objects/tall-green.png diff --git a/assets/game/objects/tall-red.png b/assets/game/objects/tall-red.png Binary files differnew file mode 100755 index 0000000..8e16e40 --- /dev/null +++ b/assets/game/objects/tall-red.png diff --git a/assets/game/objects/tall-violet.png b/assets/game/objects/tall-violet.png Binary files differnew file mode 100755 index 0000000..3a91f9e --- /dev/null +++ b/assets/game/objects/tall-violet.png diff --git a/assets/game/objects/trash.png b/assets/game/objects/trash.png Binary files differnew file mode 100755 index 0000000..448b261 --- /dev/null +++ b/assets/game/objects/trash.png diff --git a/assets/game/objects/wide-gray.png b/assets/game/objects/wide-gray.png Binary files differnew file mode 100755 index 0000000..f754e45 --- /dev/null +++ b/assets/game/objects/wide-gray.png diff --git a/assets/game/objects/wide-green.png b/assets/game/objects/wide-green.png Binary files differnew file mode 100755 index 0000000..10dc2bf --- /dev/null +++ b/assets/game/objects/wide-green.png diff --git a/assets/game/objects/wide-violet.png b/assets/game/objects/wide-violet.png Binary files differnew file mode 100755 index 0000000..1da2b3c --- /dev/null +++ b/assets/game/objects/wide-violet.png diff --git a/assets/game/objects/world.png b/assets/game/objects/world.png Binary files differnew file mode 100755 index 0000000..46ca080 --- /dev/null +++ b/assets/game/objects/world.png diff --git a/assets/game/stollman.png b/assets/game/stollman.png Binary files differnew file mode 100644 index 0000000..ef27637 --- /dev/null +++ b/assets/game/stollman.png diff --git a/assets/game/world.png b/assets/game/world.png Binary files differnew file mode 100644 index 0000000..46ca080 --- /dev/null +++ b/assets/game/world.png diff --git a/assets/style.css b/assets/style.css index 6bd979d..1aa9704 100644 --- a/assets/style.css +++ b/assets/style.css @@ -1,16 +1,30 @@ -body {
- overflow-y: scroll;
+@font-face {
+ font-family:Graphik LC;
+ src:url(/assets/Graphik-Bold-Cy-Web.eot);
+ src:url(/assets/Graphik-Bold-Cy-Web.eot?#iefix) format("embedded-opentype"),url(/assets/Graphik-Bold-Cy-Web.woff) format("woff"),url(/assets/Graphik-Bold-Cy-Web.ttf) format("truetype"),url(/assets/Graphik-Bold-Cy-Web.svg#Graphik-Bold-Cy) format("svg");
+ font-weight:700;
+ font-style:normal
+}
+
+@font-face {
+ font-family:Graphik LC;
+ src:url(/assets/Graphik-Regular-Cy-Web.eot);
+ src:url(/assets/Graphik-Regular-Cy-Web.eot?#iefix) format("embedded-opentype"),url(/assets/Graphik-Regular-Cy-Web.woff) format("woff"),url(/assets/Graphik-Regular-Cy-Web.ttf) format("truetype"),url(/assets/Graphik-Regular-Cy-Web.svg#Graphik-Regular-Cy) format("svg");
+ font-weight:400;
+ font-style:normal;
+ font-stretch:normal
}
html, body {
+ -webkit-overflow-scrolling: auto;
width: 100%;
height: 100%;
padding: 0;
margin: 0;
+ line-height: 1.5;
text-rendering: optimizeLegibility;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
- line-height: 1.6;
+ font-family: "Graphik LC", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
color: #444;
font-size: 18px;
}
@@ -64,52 +78,51 @@ img, .product-tags { background: none repeat scroll 0% 0% #D6EDFC;
}
-.contacts {
- padding-top: 5px;
- float: left;
-}
-
-.contacts__position {
- vertical-align: middle;
- line-height: 15px;
- font-size: 15px;
-}
-
.contacts__name {
font-size: 25px;
}
-.post {
- padding: 20px 40px;
+.contacts__info {
+ font-size: 14px;
+ padding: 10px 0 0 0;
}
-main {
- width: 1160px;
+footer {
+ height: 339px;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ padding-top: 50px;
}
-nav {
- width: 1160px;
- margin: 0 40px;
- background: white;
- height: 80px;
- border-bottom: 1px solid #f0f0f0;
+.wrapper {
+ min-height: 100%;
+ position: relative;
}
-.menu-horizontal {
- float: left;
+.page {
+ padding-top: 30px;
+ padding-left: 60px;
+ width: 1000px;
+ padding-bottom: 380px;
+}
+
+.menu {
width: 100%;
- padding: 0;
- margin: 0;
+ padding: 20px 0 20px 0;
+ margin-bottom: 20px;
+ margin-top: 20px;
list-style-type: none;
+ line-height: 36px;
+ border-top: 1px solid #f0f0f0;
+ border-bottom: 1px solid #f0f0f0;
}
-.menu-horizontal__item {
- margin: 0px 0px 0px 15px;
- display: inline;
- float: left;
+.menu__item {
text-transform: uppercase;
letter-spacing: 0.5px;
- font-size: 12px;
+ font-size: 18px;
}
.game {
@@ -121,19 +134,97 @@ nav { height: 339px;
}
-.menu {
- padding-top: 10px;
- float: left;
+.menu-container {
+ margin: 0;
+ padding: 0;
+}
+
+nav {
+ flex: 0 0 230px;
+ text-align: center;
+ background: white;
+ padding: 0;
+ margin: 0;
+}
+
+main {
+ padding: 0 0 0 60px;
+ flex-grow: 3;
+}
+
+.page {
+ flex-direction: row;
+ display: flex;
+ justify-content: center;
+ align-items: stretch;
+}
+
+.email {
+ font-size: 14px;
+}
+
+@media (max-width: 800px) {
+ html, body {
+ font-size: 16px;
+ line-height: 1.2;
+ }
+
+ .page {
+ flex-direction: column;
+ width: auto !important;
+ padding-left: 0px !important;
+ padding-top: 20px !important;
+ }
+
+ .email {
+ display: none;
+ }
+
+ nav {
+ flex: 0 0 0;
+ margin-bottom: 10px;
+ }
+
+ .contacts__position {
+ display: inline;
+ }
+
+ .contacts__info {
+ padding: 10px 18px 0 18px;
+ }
+
+ .menu {
+ padding: 10px 0 10px 0;
+ line-height: 1.5;
+ }
+
+ menu li {
+ display: inline;
+ list-style-type: none;
+ padding-right: 20px;
+ font-size: 13px !important;
+ }
+
+ main {
+ padding-right: 30px;
+ padding-left: 30px;
+ }
+
+ main p {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ margin-left: 0px !important;
+ }
}
.additional {
- padding: 50px;
+ padding: 0 50px 50px 50px;
}
.additional h2 {
padding: 0;
margin: 0;
- font-size: 60px;
+ font-size: 48px;
}
.additional ul li {
@@ -144,19 +235,8 @@ nav { content: "— ";
}
-.product-photo {
- display: none;
- float: left;
- padding-top: 10px;
- width: 250px;
-}
-
-.product-photo img {
- width: 280px;
-}
-
.product-tags {
- padding-left: 40px;
+ float: left;
text-align: left;
}
@@ -166,45 +246,54 @@ nav { margin: 2px;
background: #4779f6;
border-radius: 15px;
-}
-
-.products {
- padding: 15px 35px;
+ font-size: 10px;
}
.products__item {
- display: inline-block;
- width: 325px;
- margin: 5px;
- border: 1px solid #ddd;
+ margin: 0px 10px 20px 5px;
+ padding-bottom: 20px;
+ border-bottom: 1px solid #ddd;
}
-.product-info {
- padding: 20px 10px 15px 25px;
+.products__item:last-child {
+ border: 0;
+ padding-bottom: 0;
}
.product-description {
- font-size: 14px;
+ padding-top: 10px;
+ padding-bottom: 10px;
line-height: 1.5;
- max-height: 170px;
- height: 170px;
+ font-size: 16px;
}
.product-icon {
- float: left;
- padding-right: 10px;
- height: 55px;
+ display: inline-block;
+ padding-right: 2px;
+ vertical-align: middle;
+ height: 20px;
}
.product-header {
- margin-bottom: 10px;
- height: 55px;
+ height: 30px;
}
.product-title {
- display: block;
- padding-top: 10px;
- font-size: 24px;
+ display: inline-block;
+ font-size: 14px;
+ vertical-align: baseline;
+
+ color: #282425;
+ font-weight: 900;
+ letter-spacing: 0.035em;
+ text-transform: uppercase;
+}
+
+.product-link {
+ padding-top: 7px;
+ padding-right: 10px;
+ float: right;
+ font-size: 12px;
}
.product-link-passive:hover {
@@ -212,8 +301,7 @@ nav { }
main ul, main ol {
- margin-left: 2em;
- margin-bottom: 1em;
+ margin-left: 27px;
}
main ul li:before {
@@ -226,23 +314,31 @@ main ul li:before { position: absolute;
}
+ul p, main p, ul {
+ line-height: 1.7;
+}
+
main ul p {
margin: 0px;
- line-height: 31px;
}
main p {
- line-height: 25px;
margin: 20px;
}
+main pre {
+ margin: 20px;
+ background: rgba(0,0,0,0.02);
+ padding: 15px;
+}
+
main ul {
padding: 0;
list-style: none;
- line-height: 31px;
}
main h1, main h2 {
+ margin: 0;
padding: 0;
color: #282425;
font-weight: 900;
diff --git a/assets/syntax.css b/assets/syntax.css new file mode 100644 index 0000000..5ec3fbc --- /dev/null +++ b/assets/syntax.css @@ -0,0 +1,62 @@ +.highlight .c { color: #999988; font-style: italic } /* Comment */ +.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +.highlight .k { font-weight: bold } /* Keyword */ +.highlight .o { font-weight: bold } /* Operator */ +.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */ +.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ +.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #aa0000 } /* Generic.Error */ +.highlight .gh { color: #999999 } /* Generic.Heading */ +.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ +.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #555555 } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #aaaaaa } /* Generic.Subheading */ +.highlight .gt { color: #aa0000 } /* Generic.Traceback */ +.highlight .kc { font-weight: bold } /* Keyword.Constant */ +.highlight .kd { font-weight: bold } /* Keyword.Declaration */ +.highlight .kp { font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #009999 } /* Literal.Number */ +.highlight .s { color: #d14 } /* Literal.String */ +.highlight .na { color: #008080 } /* Name.Attribute */ +.highlight .nb { color: #0086B3 } /* Name.Builtin */ +.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ +.highlight .no { color: #008080 } /* Name.Constant */ +.highlight .ni { color: #800080 } /* Name.Entity */ +.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ +.highlight .nn { color: #555555 } /* Name.Namespace */ +.highlight .nt { color: #000080 } /* Name.Tag */ +.highlight .nv { color: #008080 } /* Name.Variable */ +.highlight .ow { font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #009999 } /* Literal.Number.Float */ +.highlight .mh { color: #009999 } /* Literal.Number.Hex */ +.highlight .mi { color: #009999 } /* Literal.Number.Integer */ +.highlight .mo { color: #009999 } /* Literal.Number.Oct */ +.highlight .sb { color: #d14 } /* Literal.String.Backtick */ +.highlight .sc { color: #d14 } /* Literal.String.Char */ +.highlight .sd { color: #d14 } /* Literal.String.Doc */ +.highlight .s2 { color: #d14 } /* Literal.String.Double */ +.highlight .se { color: #d14 } /* Literal.String.Escape */ +.highlight .sh { color: #d14 } /* Literal.String.Heredoc */ +.highlight .si { color: #d14 } /* Literal.String.Interpol */ +.highlight .sx { color: #d14 } /* Literal.String.Other */ +.highlight .sr { color: #009926 } /* Literal.String.Regex */ +.highlight .s1 { color: #d14 } /* Literal.String.Single */ +.highlight .ss { color: #990073 } /* Literal.String.Symbol */ +.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #008080 } /* Name.Variable.Class */ +.highlight .vg { color: #008080 } /* Name.Variable.Global */ +.highlight .vi { color: #008080 } /* Name.Variable.Instance */ +.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ + +.post > .highlight .lineno { color: #ccc; display:inline-block; padding: 0 5px; border-right:1px solid #ccc; } +.post > .highlight pre code { display: block; white-space: pre; overflow-x: auto; word-wrap: normal; } diff --git a/forge.md b/forge.md deleted file mode 100644 index 5e954a9..0000000 --- a/forge.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -layout: page -title: Source code ---- - -Что же я могу показать? -======================= - -* У меня есть набор [dotfiles](http://git.nazaryev.ru/cgit/dotfiles.git/), - который я использую на большинстве своих девайсов; - -* [Медианный - фильтр](http://git.nazaryev.ru/cgit/metrotek-aptitude-test.git/) в - качестве тестового задания в [НТЦ Метротек](http://metrotek.spb.ru); - -* В рамках университетских работ делаю [контроллер FLASH-памяти ST - M25P16 на - Verilog](http://git.nazaryev.ru/cgit/circuit-design-lab234.git); - -* [Реверс-инжиниринг приложения под - Android](http://git.nazaryev.ru/cgit/drweb-aptitude-test.git/) в рамках - тестового задания в компанию Dr. Web на вакансию `Вирусный - аналитик-стажёр Android`; - -* В свободное время пытаюсь написать [очень ёмкую - выдержку](http://git.nazaryev.ru/cgit/csbook.git/) из книг - Таненбаума по архитектуре ЭВМ; - -* Для зачёта по дисциплине `Информатика` в университете писал - [web-приложение для обучения - алгебре логики](http://git.nazaryev.ru/cgit/euler.git/) на основе кругов Эйлера; - -* [Портфолио на сайте - nazaryev.ru](http://git.nazaryev.ru/cgit/portfolio.git/) собирается с - помощью Makefile и python'а; - -* Резюме [тоже собирается](http://git.nazaryev.ru/cgit/resume.git/), но - Makefile'ом и pdflatex'ом. @@ -1,3 +1,38 @@ --- -layout: projects +layout: page --- + +Что же я могу показать? +======================= + + - У меня есть набор [dotfiles][dotfiles], который я использую на + большинстве своих устройств; + + - [Подсчёт статистики сетевого интерфейса в ядре(eBPF)][ifstat] в + качестве тестового задания в НТЦ Метротек; + + - [Фреймворк под Xilinx Zynq 7000][zybo-z7] для написания bare + metal-кода без использования Xilinx SDK; + + - [Реверс-инжиниринг приложения под Android][drweb] в рамках + тестового задания в компанию Dr. Web на вакансию Вирусный + аналитик-стажёр Android; + + - В рамках университетских работ делаю поддержку контроллера + [ST M25P16 на Verilog][m25p16]; + + - Для зачёта по дисциплине Информатика в университете писал + [web-приложение для обучения алгебре логики][euler] на основе + кругов Эйлера; + + - Резюме [тоже собирается][resume], но Makefile'ом и xelatex'ом. + +[resume]: http://git.nazaryev.ru/cgit/resume.git +[euler]: http://git.nazaryev.ru/cgit/euler.git +[csbook]: http://git.nazaryev.ru/cgit/csbook.git +[drweb]: http://git.nazaryev.ru/cgit/drweb-aptitude-test.git +[m25p16]: http://git.nazaryev.ru/cgit/circuit-design-lab234.git +[medfilter]: http://git.nazaryev.ru/cgit/metrotek-aptitude-test.git +[dotfiles]: http://git.nazaryev.ru/cgit/dotfiles.git +[ifstat]: https://github.com/3ap/ifstat +[zybo-z7]: https://github.com/3ap/zybo-z7-baremetal diff --git a/notes.md b/notes.md new file mode 100644 index 0000000..b001d14 --- /dev/null +++ b/notes.md @@ -0,0 +1,7 @@ +--- +layout: articles +title: Заметки +--- + +Заметки +======= diff --git a/projects.md b/projects.md new file mode 100644 index 0000000..1814b1d --- /dev/null +++ b/projects.md @@ -0,0 +1,7 @@ +--- +layout: projects +title: Проекты +--- + +В чём я участвовал? +=================== diff --git a/resume.pdf b/resume.pdf Binary files differnew file mode 100644 index 0000000..38c1770 --- /dev/null +++ b/resume.pdf |