====== Programming ======
* [[http://sideeffect.kr/popularconvention|Popular Coding Convention on Github]]
* [[habrahabr>266969|Что такое красивый код, и как его писать?]]
* [[habrahabr>207390|Почему [не]нужно комментировать код]]
* [[habrahabr>268063|Как писать код, который никто не сможет сопровождать]]
* [[habrahabr>252101|Документируем код эффективно при помощи Doxygen]]
* [[habrahabr>276695|Как оформлять коммиты, чтобы потом не было больно]]
* [[habrahabr>272469|Инструкция по проведению code review]]
* [[habrahabr>270881|Этика Code Review]]
* [[habrahabr>260241|Семь смертных грехов разработки ПО]] -- анти-паттерны, неотслеживаемые изменения, сложные релизы, добровольный статический анализ, неизвестное покрытие тестами, бесконечная разработка, недокументированные интерфейсы
* [[habrahabr>252493|Как внедрить статический анализ в проект, в котором более 10 мегабайт исходного кода?]]
* [[habrahabr>271585|Нам нужны не столь мощные языки программирования]]
* [[habrahabr>267559|Как работают над Chromium]]
* [[lifehackeru>2015/08/05/deadline|Почему мы срываем дедлайны и как это остановить]]
* [[habrahabr>278179|Почему технический долг — это хорошо]]
* [[habrahabr>305280|9 ¾ действительно полезных советов по работе с большими проектами]]
===== Languages =====
{{ http://habr.habrastorage.org/post_images/58e/f3a/536/58ef3a536e9c97f42b5723356d0134c4.png?600|Популярность языков программирования}}
[[habrahabr>307012|{{ https://hsto.org/getpro/habr/post_images/ead/7ec/6b5/ead7ec6b5e70800d56a6b040864f4982.png|Рейтинг RedMonk}}]]
[[http://apptractor.ru/info/analytics/linkedin-samyiy-vostrebovannyiy-navyik-na-ryinke-statisticheskiy-analiz-data-mining.html|{{ http://apptractor.ru/wp-content/uploads/2014/12/The-25-Hottest-Skills-of-2014-on-LinkedIn.png?400|Самый востребованный навык на рынке — статистический анализ и Data Mining}}]]
* [[habrahabr>201548|Опросы про языки программирования (популярность)]]
* [[https://stackoverflow.com/insights/survey/2017/|StackOverflow Developer Survey Results 2017]]
* [[youtube>v=LR8fQiskYII&list=PLF4wvr0GvlAGt91fny1CSBLklXEVsiUg5|Larry Wall: 5 Programming Languages Everyone Should Know]]
* [[habrahabr>307012|Рейтинг языков программирования в 2016 году]]
* [[habrahabr>265271|Какие технологии чаще всего используются на хакатонах]]
* [[habrahabr>254121|Большое обзорное тестирование языков программирования]] на нескольких сомнительных бенчмарках
* [[habrahabr>275547|Несколько интересностей и полезностей для всех]]
* [[http://www.nestor.minsk.by/sr/2003/07/30710.html|Lisp: побеждая посредственность]]
==== C++ ====
* [[habrahabr>275685|Советы о том, как писать на С в 2016 году]]
* [[habrahabr>277261|Как непродуманные предупреждения компиляторов помогают портить совершенно правильный код]]
* [[habrahabr>304176|Анализ потокобезопасности в С++]]
==== Scala ====
* [[habrahabr>228247|Scala is a complex language!]]
* [[habrahabr>269695|Из Java в Scala: 7 причин для изучения нового языка]]
* [[habrahabr>302828|Курс молодого бойца для Spark/Scala]] -- курсы по Hadoop, Spark, Scala
* [[habrahabr>273535|Как мы перешли со Scala на Go]]
* [[youtube>TS1lpKBMkgg|Scala 2013 We're Doing It All Wrong]] by Paul Phillips
===== Algorithms =====
* [[http://courses.csail.mit.edu/6.851/spring12/lectures/|Advanced Data Structures]] lectures at MIT.
* [[habrahabr>182776|Алгоритмы и структуры данных JDK]]
* [[habrahabr>222427|Перевод учебника Дасгупты, Пападимитриу, Вазирани «Алгоритмы»]]
* [[http://www.stolyarov.info/books|Андрей Викторович Столяров: Опубликованные книги]]
* [[habrahabr>346362|Советуют разработчики: подборка популярных книг о программировании, языках, алгоритмах]]
* [[habrahabr>202820|Cache-Conscious Binary Search]]
* [[http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85|Дискретная математика, алгоритмы и структуры данных — Викиконспекты]]
* [[habrahabr>246105|Структуры данных: 2-3 куча]]
* [[habrahabr>303374|2-3-дерево. Наивная реализация]]
* [[habrahabr>150732|АВЛ-деревья]]
* [[habrahabr>145388|Рандомизированные деревья поиска]]
* [[habrahabr>246951|Играем с генетическими алгоритмами]]
* [[habrahabr>267037|Простой алгоритм определения пересечения двух отрезков]] -- читать [[wpru>Алгоритмы:_построение_и_анализ|Алгоритмы: построение и анализ]]
* [[habrahabr>268513|Муравьиная оптимизация и сетевые алгоритмы]]
* [[habrahabr>270289/#comment_8645065|Метод Гаусса на Java]]
* [[habrahabr>275813|Рекурсия. Тренировочные задачи]]
* [[habrahabr>305912|Доказываем корректность поиска диаметра дерева]]
* [[habrahabr>305868|Синтезатор речи «для роботов» с нуля]]
* [[stackoverflow>3492302|Given sequence of numbers 1..100, find the missing number(s)]]
==== Сложность алгоритмов ====
* [[habrahabr>195482|Введение в анализ сложности алгоритмов]]
* [[http://bigocheatsheet.com/|Know the complexities]]
* [[habrahabr>188010|Знай сложности алгоритмов]]
* [[ixbt>64:3154#8|Определение NP, NP-полных (NP-complete), NP-трудных (NP-hard) задач]]
==== Сортировка ====
* [[habrahabr>251751|Доказательство некорректности алгоритма сортировки Android, Java и Python]]
* [[habrahabr>247053|Сортировка на односвязном списке за O(nlogn) времени в худшем случае с O(1) дополнительной памяти]]
* [[habrahabr>268535|Внешняя сортировка с O(1) дополнительной памяти]]
==== Строки ====
* [[habrahabr>144736|Ropes — быстрые строки]]
* [[habrahabr>303830|Как я ускорял strstr]]
* [[https://habrahabr.ru/users/ntz/topics/|Статьи ntz по нечёткому поиску]]
* [[habrahabr>114947|Фонетические алгоритмы]]
* [[habrahabr>114997|Нечёткий поиск в тексте и словаре]]
===== Android =====
* [[https://www.udacity.com/course/ud853|Developing Android Apps - Android Fundamentals]]
* [[habrahabr>211921|Переадресуем уведомления о входящих звонках и SMS с Android телефона на Linux]]
* [[https://cordova.apache.org/|Cordova]] -- develop mobile apps with HTML, CSS & JS
===== [[wp>Unicode Transformation Format|UTF]] =====
* [[livejournal>wizzard0/238106|турецкая İ с точкой]]
* [[livejournal>lionet/104884|Кто считает, что UCS-4 решает все проблемы с многобайтовыми кодировками?]]
* [[https://bugzilla.mozilla.org/show_bug.cgi?id=202251|bug#202251 – Find/FindAsYouType will not find text if entered with diacritics]]
===== API =====
=== [[http://chaos.troll.no/~shausman/api-design/api-design.pdf|The Little Manual of API Design]] ===
Characteristics of good API:
* Easy to learn and memorize
* Leads to readable code
* Hard to misuse
* Easy to extend
* Complete
The design process
* Know the requirements. Define the API before you implement it.
* Write use cases before you write any other code. Write several examples against the API.
* Prepare for extensions.
* Have your peers review your public API. Don't publish internal APIs without review.
* When in doubt, leave it out.
=== [[habrahabr>237459|Как правильно разрабатывать API с поддержкой обратной совместимости. Семинар в Яндексе]] ===
* Правило №1: больше интерфейсов. В пределе в вашей публичной документации не должно быть ни одной сигнатуры, принимающей конкретные типы, а не интерфейсы.
* Правило №2: иерархия. Ваши объекты должны быть выстроены в иерархию: кто с кем взаимодействует.
* Правило №3: контексты. Рассматривайте любую промежуточную ступень иерархии как информационный контекст для нижележащей ступени.
* Правило №4: consistency. Любой объект должен предоставлять полное описание своего состояния в любой момент и полный набор событий, позволяющий отслеживать все изменения своего состояния.
* Правило №5: события. Организуйте взаимодействие между объектами с помощью событий, причём в обе стороны.
* Правило №6: делегирование. Поскольку чаще всего изменяется реализация и функциональность именно нижнего уровня абстракции (верстка, протоколы взаимодействия, etc), интерфейс к нижнему уровню абстракции должен быть максимально общим.
* Правило №7: тесты. Пишите тесты на интерфейс и запускайте их поверх предыдущей версии API.
* Правило №8: внешние источники. Если вы не контролируете внешний источник данных – заведите к нему версионируемую обёртку на своей стороне.
===== [[wp>Software design pattern|Design patterns]] =====
* [[habrahabr>259885|Интерфейс на веревочке]]
* [[habrahabr>259167|Шаблоны проектирования XSD]]
* [[habrahabr>263033|Забудьте о DAO, используйте Repository]] -- идея использовать аналог ''[[http://grepcode.com/file/repo1.maven.org/maven2/org.hibernate/hibernate-core/4.3.10.Final/org/hibernate/criterion/Criterion.java#Criterion|org.hibernate.criterion.Criterion]]'' в DAO
* [[dropbox>1vmn9o907o6o2dd/head_first_design_patterns_poster.pdf|Head First Design Patterns poster]]
* [[dropbox>jk7sgvyhi6328gg/design_patterns_uml.pdf|Design Patterns UML poster]] (taken from [[http://blog.miloot.com/blog/2013/12/10/design-pattern-cheat-sheet/|Design Pattern Cheat Sheet]])
* [[stackoverflowa>2707195/267197|GoF patterns in JDK]] ([[dropbox>qleb8mnsa01jxqd/design_patterns_in_java.pdf|local copy]])
* [[http://www.mehdi-khalili.com/orm-anti-patterns-series/|ORM anti-patterns]]
==== Design Pattern Encapsulation Hierarchy* ====
{{http://i.stack.imgur.com/wTO3S.jpg?400|Design pattern encapsulation hierarchy}}
Solution Language |
Interpreter |
Public Interface |
Adapter |
Bridge |
Façade |
Interface |
Mediator |
Behavior |
Class |
Decorator † |
State |
Algorithm |
Strategy |
Algorithm Elements |
Template |
Executable Sequences |
Method
Receiver |
Selector |
Arguments |
Invocation |
- Collection
- Composite
- Chain of Responsibility
- Iterator
- Proxy †
- Object
- Flyweight
|
Visitor |
|
|
|
Closure |
* //Static//, //Named Variable// & //Computed// can also be applied at any level.
† [[wp>Design Patterns|GoF]] designated //Proxy// to this pattern where access to the target object or its behavior is limited and //Decorator// where it's augmented.
===== Development methodologies =====
==== XP principles((From "Extreme Programming Applied: Playing To Win" by Ken Auer and Roy Miller. Other books can be found [[http://kibi.ru/xp/xp|here]].)) ====
- Planning Game
- Small Interactions
- System Metaphor
- Simple Design
- Unit Testing
- Refactoring
- Pair Programming
- Collective Code Ownership
- Continuous Integration
- 40-hour Week
- On-site Customer
- Coding Standard
===== Web =====
==== WebServices ====
* [[habrahabr>274675|Что такое RESTful на самом деле]]
* [[habrahabr>265845|RESTful API — большая ложь]]
* [[http://samolisov.blogspot.com/2013/12/soap-vs-restful.html|SOAP vs RESTful]]
* [[habrahabr>252237|3 лучших инструмента для описания RESTful API]]
* [[http://vbond.kiev.ua/ru/post/Pochemu_ne_stoit_ispolzovat_Swagger_kak_servis_dlja_dokumentirovanija_RESTful_API/|Почему не стоит использовать Swagger как сервис для документирования RESTful API]]
* [[habrahabr>276731|Полноценный REST API для перфекционистов за 5 минут]]
* [[livejournal>ru_java/1019047|Самый лучший простой надёжный элегантный REST framework]]
* [[.:java:web_service|Creating a SOAP Web Service using Java 6]]
=== [[http://cxf.apache.org/|CXF]] ===
* [[http://www.slideshare.net/trenaman/oop2008-restful-services-with-gwt-and-apache-cxf|RESTful services with GWT and Apache CXF]]
==== MVC frameworks ====
* [[livejournal>tonsky/216018|Критерии выбора веб-фреймворка]]
* [[livejournal>ru_java/958646|Выбор Java web framework 2010]]
* [[livejournal>ru_java/972026|Ext GWT vs GWT]]
* [[http://www.allpdf.info/2011/01/ext-gwt-2-0-beginner%E2%80%99s-guide.html|Ext GWT 2.0: Beginner's Guide]] (ISBN-10: 1849511845, ISBN-13: 978-1849511841)
* http://playframework.org ([[habrahabr>106744|статья]])
* [[livejournal>tonsky/219212|Choosing the HTML templating engine]]
* [[http://liftweb.net/|Lift]] -- Web Framework for Scala
* [[livejournal>ru_java/1023955|JavaServer Faces (JSF) 2]]
* [[http://click.apache.org/|Apache web application framework]]
* [[http://www.vaadin.com/|Vaadin]]
* [[http://demo.vaadin.com/sampler|Vaadin Sampler]]
* [[http://vaadin.com/book/|Book of Vaadin]]
* [[http://demo.vaadin.com/book-examples/book/|Book Examples]]
* [[livejournal>ru_java/967069|Vaadin + Spring Security]]
* [[stackoverflow>8872398|What Web Framework to use to implement the diff-like UI?]]
* [[http://www.inductionframework.org/|Induction Java Web Application Framework]]
* [[http://www.stripesframework.org/|Stripes]] -- a presentation framework for building web applications. Similar to Tapestry, Spring-MVC and Struts.
* [[http://www.playframework.org/|Play framework]] focuses on developer productivity and targets RESTful architectures
* [[livejournal>ru_java/1018430|Play framework]]
==== CSS ====
* [[habrahabr>204238|Отключать эффекты :hover при скроле позволяет здорово сохранить отзывчивость сайта]]
* [[habrahabr>243821|Математика разметки с помощью CSS: разбираемся с calc()]]
* [[habrahabr>158917|CSS анимации transition и transform: трудности, которые могут ждать вас на пути]]
* [[habrahabr>229359|О размере экрана, пикселя и элемента]] -- формула для расчёта размера элемента в зависимости от расстояния до экрана
* [[habrahabr>255919|Стилизация поля ввода для загрузки файлов на чистом CSS]]
* [[habrahabr>267677|10 частых ошибок начинающих веб-разработчиков]]
* [[habrahabr>273403|Несколько дельных советов по CSS]]
* [[habrahabr>277399|Мои правила хорошего интерфейса]]
* [[googleplus>109778339382896924585/posts/iBDVB4StrB1|Названия цветов и оттенков]]
* [[lifehackeru>2013/11/24/tiff-naglyadnoe-sravnenie-raznyx-shriftov/|Tiff — наглядное сравнение разных шрифтов]]
=== Flexbox ===
* [[http://caniuse.com/#feat=flexbox|Can I use Flexible Box Layout Module?]]
* [[http://css-tricks.com/snippets/css/a-guide-to-flexbox/|A Complete Guide to Flexbox]]
* [[http://www.w3.org/TR/css3-flexbox/|CSS Flexible Box Layout Module Working Draft]]
* [[stackoverflowa>21515042|Scrolling a flexbox with overflowing content]]
* [[http://msdn.microsoft.com/en-us/library/ie/hh673531%28v=vs.85%29.aspx|Flexbox layout in Internet Explorer 10]]
===== Math =====
* [[lifehackeru>2014/12/09/matematicheskie-tryuki/|10 трюков, упрощающих математические операции]]
=== Ряды ===
* [[wpru>Гармонический ряд]]
* [[http://mathprofi.ru/kak_naiti_summu_ryada.html|Как найти сумму ряда?]]
* [[http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D1%80%D0%B8%D1%84%D0%BC%D0%B5%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D1%8F_%D1%81_%D1%87%D0%B8%D1%81%D0%BB%D0%BE%D0%B2%D1%8B%D0%BC%D0%B8_%D1%80%D1%8F%D0%B4%D0%B0%D0%BC%D0%B8|Арифметические действия с числовыми рядами]]
* [[http://storage.mstuca.ru/bitstream/123456789/4301/4/%D0%A0%D1%8F%D0%B4%D1%8B.doc|Ряды (пособие по изучению дисциплины)]]
===== DNS =====
* [[https://www.host-tracker.com/]] -- checks site availability / domain expiration
* [[lifehacker>5683682/five-best-domain-name-registrars|Five Best Domain Name Registrars]]
* [[https://www.gandi.net/|gandi]] -- most verbose search for domain availability
* [[:software:security#ssl_certificate_authorities|Get SSL Certificate]]
==== Trademark / registered name search ====
* [[http://belgospatent.org.by/database/index.php?pref=tz&lng=ru&page=1|Поиск товарных знаков в РБ]]
* [[https://www.znakoved.ru/poisk_tovarnyh_znakov/|Поиск товарных знаков РФ, Европа]]
* [[http://oami.europa.eu/eSearch/#basic|Trademark search for Europe]]
==== Port forwarding and DynDNS ====
If you which to benefit from [[wp>DynDNS]], you have to register.
==== Alternative dynamic DNS providers ====
Collection of dynamic DNS providers:
* [[http://dnslookup.me/dynamic-dns/|DDNS – Free Dynamic DNS Providers]]
* [[lifehacker>the-best-free-alternatives-to-dyndns-1561556205|The Best Free Alternatives to DynDNS]]
Support MX records:
* [[http://freedns.afraid.org/|FreeDNS]]
* Interesting subdomains: [[http://freedns.afraid.org/subdomain/edit.php?edit_domain_id=29|mooo.com]], [[http://freedns.afraid.org/subdomain/edit.php?edit_domain_id=45088|etherbyte.com]], [[http://freedns.afraid.org/subdomain/edit.php?edit_domain_id=71015|shadir.com]], [[http://freedns.afraid.org/subdomain/edit.php?edit_domain_id=90982|icfar.com]], [[http://freedns.afraid.org/subdomain/edit.php?edit_domain_id=106091|patf.com]], [[http://freedns.afraid.org/subdomain/edit.php?edit_domain_id=110961|robinhud.com]], [[http://freedns.afraid.org/subdomain/edit.php?edit_domain_id=122536|feared.eu]], [[http://freedns.afraid.org/subdomain/edit.php?edit_domain_id=179636|dynamai.com]], [[http://freedns.afraid.org/subdomain/edit.php?edit_domain_id=209455|silksky.com]], [[http://freedns.afraid.org/subdomain/edit.php?edit_domain_id=212676|nfors.com]], [[http://freedns.afraid.org/subdomain/edit.php?edit_domain_id=225070|pegle.com]], [[http://freedns.afraid.org/subdomain/edit.php?edit_domain_id=242733|diipl.com]], gurdit.com, ndcg.com, higgr.com, mocis.com, patov.com, tintira.com, alexfb.com, lolk.org, mtn.cc, jake.eu
* [[https://entrydns.net/|EntryDNS]]
* [[http://duckdns.org/|DuckDNS]]
Support MX records for paid accounts:
* [[https://www.dtdns.com/|DtDNS]]
Does not seem to support MX records:
* [[https://ydns.eu/|yDNS]] -- currently only A and AAAA records are supported
* [[https://www.dnsdynamic.org/|DNSdynamic]]
* [[habrahabr>253851|Еще один вариант динамического DNS на своей площадке]] -- работает только в пределах локальной сети (использует ''[[http://linux.die.net/man/8/nsupdate|nsupdate]]'' из пакета ''[[https://packages.debian.org/jessie/dnsutils|dnsutils]]'')
{{tag>UTF image DNS REST 7-zip}}