Pull to refresh
183
0
Макс Обухов @maxshopen

User

Send message
Изучив оригинал статьи, а потом спеки от Google, Apple и Microsoft, мы упростили до такого:
favicon.ico, который кладем в корень сайта
В html
<link rel="apple-touch-icon" sizes="192x192" href="favicons/favicon-192x192.png">
<link rel="icon" type="image/png" sizes="192x192" href="favicons/favicon-192x192.png">
<meta name="msapplication-config" content="browserconfig.xml">

В browserconfig.xml
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
  <msapplication>
    <tile>
      <square70x70logo   src="favicons/mstile-70x70.png"/>
      <square150x150logo src="favicons/mstile-150x150.png"/>
      <square310x310logo src="favicons/mstile-310x310.png"/>
      <wide310x150logo   src="favicons/mstile-310x150.png"/>
      <TileColor>#bada55</TileColor>
    </tile>
  </msapplication>
</browserconfig>
В своё время реализовывали с другом поисковый движок — обходились лишь стандартными алгоритмами СУБД MySQL. Ваш «Лос Анженес Бидва» нашелся бы прекрасно, как не коверкай. Краткая суть:
1. Режем «плохие» слова (союзы, описания, и т.п.)
Боль в галаве -> галаве
2. Переводим строку в транслит
galave
3. Осуществляем поиск по SOUNDEX каждого слова
OR ( SOUNDEX( r.phrase ) LIKE SOUNDEX( '$word' ) )
Этот поиск вытягивает из базы «правильные» слова и заменяет ими «неправильные», тем самым нормализуя запрос (двумя зайцами можно убить и склонение существительных)
galave G410 -> голова (golova) G410
4. Теперь осуществляем релевантный поиск через MATCH AGAINST
Не совсем гайды, но посмотрите вот это видео о том, как должен «тянуться» дизайн:
www.youtube.com/watch?v=zHirwKGEfoE

А про гайды — тут:
developer.android.com/guide/practices/screens_support.html
Вместо глаголов — HTTP

Мы только что описали собак с помощью двух базовых URL адресов с существительными. Теперь нам нужно работать с созданными сущностями. Чаще всего требуются операции чтения, создания, редактирования и удаления (CRUD — Create — Read — Update — Delete). Для этого нам прекрасно подойдут HTTP-методы GET, POST, PUT и DELETE.
POST /dogs — создать новую собаку
GET /dogs — получить список собак
PUT /dogs — редактирование всех собак сразу
DELETE /dogs — удаление всех собак

POST /dogs/12345 — вернуть ошибку (собака 12345 уже создана)
GET /dogs/12345 — показать информацию о собаке
PUT /dogs/12345 — редактировать собаку 12345
DELETE /dogs/12345 — удалить

Базовые URL выглядят просто, глаголы не используются, все интуитивно и понятно. Красота!

От заключительной фразы попахивает нездоровым слепым восхищением. На мой взгляд, в подобных случаях лучше использовать более явные URL адреса:

GET /dogs — получить список собак
POST /dogs/add — создать новую собаку
POST /dogs/update — редактирование всех собак сразу
POST /dogs/delete — удаление всех собак

GET /dogs/12345 — показать информацию о собаке
POST /dogs/12345/update — редактировать собаку 12345
POST /dogs/12345/delete — удалить

Это позволит добавлять новые (не входящие в набор CRUD) методы (например, "/dogs/12345/archive") не отходя от схемы именования и (опять же, на мой взгляд) это куда более нагляднее и понятнее, чем использование методов PUT и DELETE (малораспространённых, требующих дополнительных разъяснений и дополнительных технических возможностей от клиента).
1. несколько ортогональных инструментов обработки ошибок (hot code reload, try/catch, linked processes, supervisors)
2. горячая замена кода без остановки приложения. работа 24/7/365 без остановки для апгрейда.
3. горячий дебаг без пауз того, что дебажится
4. отсутствие разделяемой памяти — изоляция процессов друг от друга
5. возможность породить десятки и сотни тысяч независимых процессов, выполняющихся параллельно друг с другом и не блокирующих друг друга
6. неизменяемые структуры данных — способ исключить целые классы ошибок в коде
7. мощные библиотеки работы с асинхронными процессами — в бою уже пару десятков лет.
8. делать код-ревью на Erlang проще, чем на императивных языках типа PHP, Perl, etc: lionet.info/pdf/2010-lev-walkin-erlang-experience.pdf
9. по сравнению с Node.JS — код выглядит как код, а не как лапша:
Step(
  function readSelf() {
    fs.readFile(__filename, this);
  },
  function capitalize(err, text) {
    if (err) throw err;
    return text.toUpperCase();
  },
  function showIt(err, newText) {
    if (err) throw err;
    console.log(newText);
  }
);


Эрланг:
  {ok, Data} = file:read_file(Filename),
  Text = string:to_upper(binary_to_list(Data)),
  error_logger:info_msg("~s", [Text]).


www.slideshare.net/rit2010/max-lapshin-erlyvideo-v2
lionet.info/pdf/2010-lev-walkin-erlang-experience.pdf
lionet.livejournal.com/tag/erlang
Вау, а сюда можно комментарии писать? Кто бы мог подумать… :)

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity