...

суббота, 14 сентября 2013 г.

Пока Элон Маск мечтает, Япония делает самый быстрый поезд в мире


сегодня в 23:41


image

На сегодняшний день самый быстрый поезд в мире находится в Японии. Мечты Элона насчет Hyperloop'а это, конечно, прекрасно, но пока что это только мечты. Тем временем Япония презентовала самый быстрый поезд в мире, который парит в воздухе — маглев.



Japan Rail презентовала новый поезд, который может двигаться со скоростью 311 миль в час. Над названием, по всей видимости, решили не заморчиваться и дали ему милозвучное имя JR Tokai L0 Series Shinkansen. Поезд плавно парит над путями на магнитной подушке без какого либо трения в любую погоду.


В данный момент поезд работает в тестовом режиме, сообщая Токио и Нагою, полноценный запуск планируется на 2027 год. Поезд имеет чрезвычайно длинный и заостренный перед для уменьшения воздушного сопротивления. В данном тестовом режиме поезда будут оснащены 16 вагонами и смогут перевозить до 1000 пассажиров. На автомобиле этот путь занимает около 200 миль, поезд будет преодолевать это расстояние за 40 минут. Другим скоростным поездам сейчас требуется до 95 минут для преодоления этого расстояния.


Несмотря на всю свою технологичность и преимущества, проект бросает серьезные финансовые вызовы, а именно 100 миллиардов долларов, чтобы построить полностью готовое сообщение на магнитной подушке между Токио и Осакой (около 500 км). Если все пойдет по плану, то японцы смогут передвигаться по своей стране быстрее, чем когда либо прежде.


Ниже несколько фото и видео:


image


image


image






Developers, stick with Russians – work in London




Переводы с

карты на карту


Переводы

через QR-Код


Новая функция

«Мой контроль»




Возьми Lumia 925 на тест-драйв сейчас.




Впечатляющие возможности

в стильном тонком корпусе из металла




Boomburum

исследует LTE


Эволюция средств связи

в путешествии по России



Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Карта Московского Метро на Canvas

Идея попробовать нарисовать карту появилась после просмотра карты метро в Википедии в формате SVG. В Firefox она открывается долго, к тому же при разрешении 1600x1300 она не вмещается в экран, а скроллинг по ней работает тоже очень долго. Стало интересно, а в Canvas она тоже будет тормозить? Решил нарисовать свою версию карты метро в качестве очередного демо для проекта dbCartajs.

Moscow Metro



Canvas поддерживает далеко не все возможности, которые есть в SVG. Например, как выяснилось, он частично поддерживает рисование пунктирных линий: метод setDashLine поддерживает только Chrome, а Firefox использует свое свойство mozDash. Зато Canvas поддерживает Bezier Curve для отрисовки плавных изгибов.

Я добавил возможность использования метода bezierCurveTo в dbCartajs, если в тройке координат третьим параметром идет символ 'Q', например, для объекта с координатами [[1,1,'Q'],[2,2,'Q'],[3,3,'Q'],[4,4,'Q'],[5,5,'Q'],[6,6,'Q']] метод bezierCurveTo будет вызван 2 раза. Также добавил проверку для поддержки Dash Line, который можно задать как свойство dash в mopt.

Пиксельные координаты линий, станций, каналов, рек, ж/д путей переведены в градусы с долготой и широтой. Новые координаты объектов сохранены в файле mosmetro.js.


Из станций сформирован выпадающий список. Выбор станции в нем центрирует ее на карте.


В целом получается, что в Canvas карта отрисовывается намного быстрее, чем в SVG. Особенно это заметно на планшете.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Дайджест интересных материалов из мира веб-разработки и IT за последнюю неделю № 74 (8—14 сентября 2013)


сегодня в 22:41


Предлагаем вашему вниманию очередную подборку с ссылками на новости, интересные материалы и полезные ресурсы.




Веб-разработка




CSS




JavaScripts




Браузеры




Веб-инструменты





  • Color Palettes of the Web — сервис для анализа цветовых палитр сайтов

  • cloudconvert — конвертер файлов любых форматов онлайн

  • Bootstrap Magic — создание собственной темы на базе Bootstrap 3 (сделано с использованием Angular.js)

  • Generate WP — инструменты для WordPress-разработчиков




Новости




Демо




Сайты с интересным дизайном и функциональностью




Дизайн




Подборка бесплатных дизайнерских печенек







Занимательное


Дайджест за прошлую неделю.

Материал подготовили dersmoll и alekskorovin




Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Квайн на Brainfuck, тьюториал

На Хабре уже есть множество статей о квайнах и технологиях их написания. Любителям квайнов может стать скучно — есть шаблон, следуешь ему, получаешь квайн. Мультиязыковой квайн, даже с участием эзотерических языков тоже написать несложно и об этом тоже есть по меньшей мере три статьи. Вот тут то и приходят на помощь квайны целиком написанные на эзотерических языках, возвращая заскучавшему программисту интерес.

Попробую рассказать о процессе написания квайнов на Brainfuck.




Процитирую свою статью Мультиязыковые квайны


Квайноподобную конструкцию (здесь и далее речь только о языках, где можно разделить данные и код) можно поделить на две части:

1) сегмент данных (важный момент, эта часть остаётся незаполненной до того момента, когда код будет завершён, после этого он кодируется).

2) сегмент кода

Сегмент данных — это некий шифр, который можно расшифровать двумя способами, в результате расшифровки первым способом получится строковое

представление собственно сегмента данных, при расшифровке вторым способом получится строковое представление сегмента кода. Объединив результаты этих расшифровок, мы получим строку, в которой содержится весь исходный код программы.


Обратите внимание на выделенный текст. В брейнфаке нет переменных, есть только и исключительно исполняемый код. С другой стороны, есть лента, которой можно и нужно пользоваться для хранения информации.

Поэтому, для брейнфака схема квайна будет выглядеть так.


1) Код, который записывает на ленту данные

2) Код, который читает с ленты данные и выводит код из п.1

3) Код, который читает с ленты данные и выводит код из п.2 и п.3


Соответственно код из п.1 можно получить «шифрованием» кода из п.2 и п.3, когда он будет написан.


В каком виде записывать данные на ленту? Напрашивается запись в виде ascii-кодов символов.


Напишем функцию на Питоне, которая получает строку и возвращает программу на брейнфаке, записывающую эту строку на ленту.



def to_brainfuck(st): return '>'+''.join('+'*ord(c)+'>' for c in st)



>>> print to_brainfuck('ku')
>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>


Обратите внимание на ">" в начале программы, пустая ячейка в начале ленты нужна на тот случай, если туда придётся возвращаться. Пустая ячейка это единственный способ остановить цикл в Брейнфаке. Если реализация брейнфака работает с бесконечной в обоих направлениях лентой, ">" в начале можно опустить.


Теперь вернёмся в начало ленты



<[<]

и распечатаем её содержимое:



>[.>]

Программа выведет на экран «ku»


Как написать код для п.1 и п.3 нашей схемы мы уже примерно знаем.

Теперь п.2, самая сложная часть.


Итак, нужно написать программу, которая используя содержимое ленты выведет ту строчку, которую вывела комманда print to_brainfuck('ku'), фактически аналог питоновской функции to_brainfuck на брейнфаке.

Печатать брейнфак умеет только те символы, которые есть на ленте. Комманда "." печатает содержимое ячейки на которой стоит каретка. Следовательно нам нужно записать символы "+" и ">" на ленту.



>+++++++++++++++++++++++++++++++++++++++++++>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.


Обратите внимание на ">" в начале — оставляем пустую ячейку-маркер между тем, что уже есть на ленте и всякой служебной информацией, которую мы туда записываем. Так же обратите внимание на "." в конце. Помните ">" в самом начале программы? Вот тут её и выведем.


вернёмся на начало ленты



[<]<[<]>

теперь напишем вложенный цикл. внутренний цикл «отщипывает» по одному от содержимого очередной ячейки и при каждом таком отщипывание выводит "+", внешний цикл выводит ">" и переходит к следующей ячейке



[
[
[>]> доходим до того места на ленте, где лежит "+"
. печатаем "+"
<<[<]>- возвращаемся к обрабатываемому символу и отнимаем единицу
]
>[>]>> после того, как символ кончился, доходим до места, где лежит ">"
. печатаем ">"
[<]<[<]> возвращаемся к следующему символу
]


итак, мы можем написать программу А, заполняющую ленту и программу Б, бегущую по заполненной ленте и выводящую программу А.

Правда у программы Б есть один недостаток, после её деятельности на ленте ничего не остаётся, а нам содержимое ленты нужно для последующей печати.


Изменим программу Б так, чтобы при каждом уменьшении содержимого ячейки на одном конце ленты, она увеличивала содержимое ячейки на другом конце. Новый код ставлю под старым и выравниваю, чтобы были видны проделанные изменения:



[[[>]>. << [<]>-]>[>]>>. [<]<[<]>] было
[[[>]>. [>]<+[<]< [<]>-]>[>]>>. [>]+ [<]<[<]>] стало


После выполнения программы, содержимое ячеек с копией на 1 больше чем нужно. Не будем ничего переделывать, просто поправим и распечатаем



>>>[->]<<[<]>>>[.>]


этот код мне не очень нравится, кажется можно сильно короче, что-то вроде:



>>>[-.>]


только без выведения ascii-0 в конце, но сходу не придумывается.

Соединяем всё вместе



вносим символы "k" и "u" на ленту

>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>

вносим символы "+" и ">" на ленту, а так же выводим ">"

>+++++++++++++++++++++++++++++++++++++++++++>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.

отмечаем начало области, в которую будем копировать символы

>+

возвращаемся на начало ленты

[<]<[<]>

описанный выше вложенный цикл, основная часть программы

[[[>]>.[>]<+[<]<[<]>-]>[>]>>.[>]+[<]<[<]>]

отнимаем по единице от каждого символа и выводим символы

>>>[->]<<[<]>>>[.>]


итак, у нас есть программа, которая забивает на ленту коды символов «k» и «u», затем распечатывает ту свою часть, которая их забивает, затем распечатывает сами символы. Т.е. в данный момент это уже почти квайн, программа распечатывает свою первую часть, а вместо второй она распечатывает «ku». А всё почему? Потому что именно строку «ku» мы скормили вначале питоновской функции to_brainfuck. А должны были текст программы. Но его тогда ещё не было. Зато теперь есть!

Теперь самый приятный момент. Берём ту часть программы, которую мы написали руками и скармливаем функции to_brainfuck. Объединяем две части и квайн готов:



>>> s=""">+++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>+[<]<[<]>[[[>]>.[>]<+[<]<[<]>-]>[>]>>.[>]+[<]<[<]>]>>>[->]<<[<]>>>[.>]"""
>>> print to_brainfuck(s)+s


Код квайна


>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>>+++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>+[<]<[<]>[[[>]>.[>]<+[<]<[<]>-]>[>]>>.[>]+[<]<[<]>]>>>[->]<<[<]>>>[.>]





Получившийся квайн не слишком компактен из за выбранного способа кодирования, на каждый символ «сегмента кода» приходится около 50 символов «сегмента данных». Можно значительно уменьшить сегмент данных если прибегнуть к другим способам кодирования, разумеется, в этом случае сильно увеличится та часть программы, которую нужно писать руками.


Да, ещё один забавный момент. Т.к. брейнфак игнорирует все символы, кроме тех восьми, которые являются его коммандами, можно перед шифрованием как-нибудь интересно отформатировать код и/или добавить туда какие-нибудь надписи. Квайн от этого не перестанет быть квайном.



>+++++++++++++++++++++++++++++++++++++++++++>
+ +
+ Quine for Habrahabr +
+ +
+ +
+++++++++++++++++++++++++++++++++++++++++++++
+ +
+ +
+ +
+ +
+ .
> +
[ <
] <
[ <
] >
[ [
[ >
] >
. [
> ]
< +
[ <
] <
[<]>-]>[>]>>.[>]+[<]<[<]>]>>>[->]<<[<]>>>[.>]


Внутри квадрата можно ещё чего-нибудь добавить. Полный текст квайна не привожу, т.к. такие игры с форматированием в разы увеличивают размеры «сегмента данных» и квайн становится совсем уж огромным. Спасибо за внимание.

Кто-нибудь до конца дочитал? :)


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Apple «убили» свою самую инновационную модель айфона

* желтый заголовок для привлечения внимания.

Если же вас интересуют ответы на вопросы

* и вправду ли иссякли инновации в Apple?

* есть ли разница «при» и «после» Стива Джобса?

* какая же самая инновационная модель айфона, а какая нет?

* стоит ли обновляться до последних моделей?


то ответы вы найдете под катом.


Собственно, любое обсуждение связанное с продукцией Apple в последнее время имеет 2 обязательных комментария «Apple уже не те» и «Стив бы такого не допустил». Забегу вперед и сажу что оба утверждения ошибочны. Если провести сравнение нововведений между разными моделями iPhone, то можно четко понять насколько инновационна та или иная модель. Конечно важно определить что такое инновация: мы не будем сравнивать iPhone с другими телефонами, так как практически на любую фичу можно сказать «это уже было» (что собственно говорят на все, начиная с первого поколения). Мы же будем сравнивать новые возможности или явные улучшения старых возможностей, которые были представлены в той или иной версии. Для чистоты эксперимента, постараемся избежать чисто «софтверных» фич, ведь в принципе, их наличие в той или иной модели связано больше с маркетингом компании, чем с реальными ограничениями.


Пятница 13-е, день программиста, вечер судного дня и много скуки, вот что подвигнет пытливый ум в поисках истины. Наша цель — посчитать количество нововведений в каждой новой модели iPhone. Краткое гугление привело на википедию, в соответствующую статью. Именно она, а также немного первоисточников (здесь и здесь), помогут нам собрать единую таблицу технических характеристик всех моделей iPhone. Далее, дело за малым, все нововведения или улучшения были помечены зеленым цветом. ухудшения, а они тоже были, красным. Внизу, подбит некий итог.


Для особо нетерпеливых, привожу итоговую таблицу прямо здесь















































1st generation3G3GS44S55C5S
Улучшений-4121791616
ухудшений-1112030
Итого-31116716-26

немного дополнений по методологии



* мы не определяем инновационность того или иного нововведения, поэтому больший экран или меньший вес идут с такими изменениями как Ретина и 64 битный процессор. Причина этого в трудности оценить ценность изменения для конечного пользователя, ведь меньший вес в глазах обычного обывателя куда важнее чем непонятное количество бит в процессоре, хоть первое просто изменение, а второе как раз инновация на данный момент (в смартфонах имеется ввиду).

Сам файл сравнения выложен на Google Drive, если есть ошибки/замечания, пишите, буду обновлять таблицу и пост.


О результатах


Как видим, общее мнение что S модели, это некие бакгфиксы, в общем то справедливо, как минимум, количество нововведений в них намного меньше, но, что важно заметить, это изменения вполне значительные. Мажорные версии (4 и 5) показывают наибольшее количество позитивных изменений. Исключением из этого являются 3G и 3GS модели, где основной пик плюшек пришелся на 3GS.


Самой «идеальной» можно назвать пятую версию айфона, в ней было не только рекордное количество улучшений, но, что самое главное, не представлено ни одного ухудшения, чем может похвастаться только 5S. iPhone 5С, напротив, стал нашим антигероем, получив больше ухудшений, чем улучшений, выводы делайте сами. Кстати, и 5С и 5S, сравнивались с iPhone 5, так как оба являются его продолжениями.


Ну и что же насчет Apple? Нет, инновациии не иссякли, как мы видим, из года в год, как аппаратная, так и софтверная часть телефона улучшаются, хоть компании уже давно не удается быть впереди планеты всей, но порадовать своих фанатов им пока еще есть чем. iPhone 4s, а тем более «идеальный» iPhone 5 вышли уже после смерти Стива Джобса. так что любимая мантра многих про то что без него все не то, не соответствует фактам. 5s, с его малым количеством, но все же уникальных изменений, лишний раз это подтверждает. Скорее мир вокруг стал конкурентоспособным, а не компания потеряла свое видение.


Как вы можете понять, Apple, прекратив производство iPhone 5, практически убило свою самую позитивную модель, а ситуация с 5S и 5С напоминает сценарий из фильма «Близнецы», ну вы помните, два брата, один красивый, умный, сильный, а второй далек от совершенства. При текущей ценовой политике и разнице всего в 100$ между этими моделями, смысл создания iPhone 5С пока остается загадкой.


А что об этом думаете вы?


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



[Из песочницы] Видеоигры. Так ли все плохо?

Видеоигры всегда вызывали большое количество споров. Достаточно часто они упоминаются в контексте насилия, бессмысленной траты времени, привыкания, ожирения детей и так далее. Но это только одна сторона медали. Индустрия видео игр оценивается в $ 20 млрд. Так, может быть, хоть какая-то небольшая часть этих денег все же делает мир лучше?




image



Большинство видео игр могут нести в себе различные преимущества, как образовательные, так и физические. Существует мнение, что видеоигры имеют такой же эффект, как и чтение книги или езда на роликах – когда мозг обрабатывает новую информацию, образуются тысячи новых соединений. Вдобавок ко всему, игры мотивируют прогрессировать и постоянно улучшать свои навыки.
Люди, играющие в экшены, на 25% быстрее принимают решения.



image

Игры, сюжет в которых быстро развивается, заставляют быстрее думать, во избежание быть убитым. По мнению ученых из университета Рочестера, такие игроки лучше и быстрее оценивают окружающую среду, и способны быстрее принимать решения. Однажды учеными было проведено исследование, в котором приняли участие игроки в возрасте от 18 до 25 лет. В рамках исследования участников разделили на две группы: первая группа провела 50 часов, играя в экшен шутеры CoD и Unreal Tournament, вторая – в стратегию The Sims. Участники, игравшие в экшены, принимали решения на 25% быстрее в ситуациях не связанных с видеоиграми. Игроки шутеров принимали больше правильных решений за единицу времени. Когда в реальной жизни Вы хирург, это действительно может иметь значение в критической ситуации.


Играя в видеоигры, хирурги улучшают свои лапароскопические навыки.



image

Игра в Nintendo Wii улучшает навыки, необходимые для лапароскопической хирургии. Согласно данным исследования, опубликованного в журнале PLOS One, врачи, которые провели один месяц игры в Теннис Wii, Настольный Теннис Wii, или High Altitude Battle показывают лучшие результаты в моделируемых задачах, целью которых является проверка координации глаз-рука и точность движения. Таким образом, Nintendo Wii могут быть адаптированы для нужд бюджетных образовательных учреждений или на дому более молодыми студентами-хирургами с целью дополнительных тренировок перед выполнением реальных процедур.


Дети с дислексией улучшают свои навыки чтения после видеоигр.



image

Исследование, опубликованное в журнале Current Biology, показало, что экшен видеоигры помогли детям с дислексией читать быстрее и с большей точностью. Двенадцать часов за игрой в экшен улучшили скорость чтения детей без каких-либо потерь в точности, что оказалось лучшим результатом, чем год несистемных тренировок по развитию чтения или эквивалентно году специальных программ чтения с высококвалифицированными специалистами. Благодаря повышению концентрации внимания, видеоигры способствуют улучшению навыков чтения.


Видеоигры могут рассказать нам о биологических процессах.



image

Видеоигры предназначены не только для развлечения, они также могут помочь решить образовательные и научные задачи, по мнению ученых из Стэнфорда. Они разработали коллекцию экшенов, которые могут рассказать людям о биологических процессах. Игры предполагают одноклеточный организм содержащейся внутри квадратной камеры с жидкостью. Игрок взаимодействует с организмом путем применения электрического поля, используя ручные устройства, которые напоминают контроллер видеоигры. Поскольку реакция организма реальна, а не смоделирована, игры могут рассказать игрокам о микро-организменном поведении, диффузии и других биофизических процессах.


Больные раком, которые играют в видеоигры, имеют более позитивные прогнозы.



image

Re-Mission является шутером от третьего лица игра, созданная HopeLab, чтобы помочь молодым людям с онкологическими заболеваниями. В шутере игроки управляют нанороботом по имени Roxxi, который мчится через человеческое тело, борясь с раком различными видами оружия, например, радиоактивным пистолетом. Игроки должны также контролировать здоровье пациента, узнавая о различных формах лечения и как они работают. 375 пациентов, участвовавших в исследовании, стали принимать свои антибиотики более системно, и чаще придерживаться химиотерапии, чем другие. Игроки узнали больше о раке, и имели более твердую веру в свои способности излечиться.


Гоночные игры улучшают память и концентрацию у пожилых людей.



image

В исследовании, опубликованном в журнале Nature, ученые обнаружили, что взаимодействие с трафиком и одновременным принятием решений по дорожным знакам может улучшить кратковременную память и длительную концентрацию у пожилых людей. Группа пожилых людей в возрасте от 60 и 85 играла в игру под названием Neuro Racer в течение 12 часов за месяц. После шести месяцев игры, пожилые люди начали лучше справляться с мультизадачностью, запоминали большее количество информации в краткосрочном периоде, и имели более развитые навыки внимания.


Видео игры могут стимулировать физическую активность.



Бесконечные часы, проведенные перед экраном компьютера, конечно же, не приводят к потере веса. Но новое поколение видеоигр под названием Exergames могут заставить лентяев двигаться. Эндокринолог Стенли Хся в настоящее время изучает, могут ли люди, которые играют в Dance Dance Revolution — игра, в которой игроки должны двигать ногами в такт с сигналами на экране – иметь более низкие риски заболевания двумя типами диабета, чем люди, которые тренируются на беговой дорожке. Видеоигры могут быть более эффективным методом при изменении образа жизни. В исследовании, проведенном в Университете Индианы, люди, которые получали консультации через тренировки в игру под названием Second Life, имели больше позитивных изменений в здоровом питании и физической активности, чем люди, которые отправились в традиционный тренажерный зал, хотя потеря веса была одинаковой в обеих группах.
Видеоигры могут помочь больным с ожогами справляться болью.



Исследователи из Университета Вашингтона экспериментируют с виртуальными играми, как с реальной возможностью отвлечь пациентов с ожогами от боли.

Вовлекаясь в игровой процесс, пациенты тратят большую часть своего внимания на игру, тем самым оставляя своему мозгу меньше возможностей для обработки болевых сигналов.

В предварительном исследовании два пациента с тяжелыми ожогами играли в Nintendo, пока врачи лечили их раны. Оба пациента сообщили о значительно меньшей чувствительности к боли во время игры.
Дошкольники, которые играют в видеоигры, приобретают лучшую моторику движений.



image

Небольшое исследование, проведенное в Университете Дикин в Австралии, обнаружило, что дети в возрасте 3-6 лет, которые играли в интерактивные игры, как Wii, приобрели больше моторных навыков, чем те, кто играл в обычные видеоигры. Это включает в себя такие навыки, как бить, ловить, бросать мяч.

Вполне вероятно, что электронные игры улучшают и координацию рук и глаз.


Что-то хорошее все же можно извлечь из индустрии видеоигр...!


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Почему мы закрыли счет в PayPal


сегодня в 16:09


Недавно заказчику позвонили из PayPal и предложили изменить тип счета с личного на корпоративный + прислать документы, подтверждающие легальность юридической деятельности до 16 числа. К сожалению, если у Вас есть деньги на счете PayPal, и Вы выполните эти рекомендации, то Вас могут обвинить в финансировании терроризма. Почему?



С 16 сентября 2013 года, данная компания передает свои обязательства по счетам российской дочке.

Что касается текущих денег на счете PayPal и их вывода, данные деньги ни в коем случае нельзя переводить на расчетный счет ИП, ни до перевода компании из Сингапура в РФ, ни после, т.к. по сути эти деньги получены на территории РФ из-за границы нелегальным путем. (Федеральный закон от 7 августа 2001 года № 115-ФЗ (ред. от 28.06.2013) «О противодействии легализации (отмыванию) доходов, полученных преступным путем, и финансированию терроризма»).


Что можно сделать?





  1. Можно вывести текущие денежные средства на карточку физического лица в американском банке (если имеется).

  2. Если нет, можно вывести текущие денежные средства путем перечисления данных средств на счет человека/организации, которая потом сможет обеспечить вывод.

  3. Обменять данные денежные средства с последующей передачей в России. Например, через обменные пункты, которые меняют PayPal на Яндекс.Деньги, либо QIWI, либо WebMoney, либо наличные деньги.

  4. Искать другие способы вывода.




Затем закрыть этот счет, а уже после начала функционирования российской «дочки» (25 сентября), заключить с ней новый договор на ИП или ООО, открыть новый счет с целью дальнейшего принятия на него денежных средств и перечисления на расчетный счет ИП или ООО.



Developers, stick with Russians – work in London




Переводы с

карты на карту


Переводы

через QR-Код


Новая функция

«Мой контроль»




Возьми Lumia 925 на тест-драйв сейчас.




Впечатляющие возможности

в стильном тонком корпусе из металла




Boomburum

исследует LTE


Эволюция средств связи

в путешествии по России



Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



[recovery mode] Обновление интерфейса видео YouTube или очередная оптЕмизация Google

По горячим следам хотелось бы выразить свое негодование по поводу очередного новшества в интерфейсе сервиса Google. Ранее поисковый гигант уже «порадовал» нас «оптимизацией» непосредственно поисковых функций – быстрые настройки пропали как класс в ноябре прошлого года (судя по записи камрада Lici). Например, мне почти ежедневно приходится пользоваться выставлением фильтра показа результатов только на русском языке. Также практически каждый день прибегаю к фильтрации результатов картинок по размеру. Да-да, с прошлого года все это делается через… через раздражающего посредника «Инструменты поиска». Теперь «талантливые» ручки «оптимизаторов» Google добрались и до YouTube.


Отныне – никакого выставления качества видео в два клика. Сначала жмем кнопку настроек, потом «Качество» и лишь затем выбираем требуемый параметр. Да, всего одно лишнее действие, но когда его нужно делать при почти каждом просмотре видео, это серьезно нарушает вселенскую гармонию и равновесие внутренних Инь и Янь. Откровенно выводит из себя нововведение на фоне и без того очевидных «косяков» сервиса. Например, поставил видео на прогрузку, увидел подгрузившийся объем. Щелкнул в пределах загруженной линейки – получите загрузку с нуля, с новой точки.


Или выставление все того же качества видео. Сделать по умолчанию так, чтобы у пользователя автоматически проигрывались ролики в HD/Full HD невозможно – только исходные 360p (если 240/144p – не «потолок»). Подвижки возможны только для полноэкранного видео, для этого нужно а) завести аккаунт б) покопаться в настройках профиля.



Для меня это наболевшая проблема в свете того, что многие пользователи вообще не догадываются о возможности смены качества видео на YouTube. Серьезно. Я регулярно публикую обзоры регистраторов на разных ресурсах и, конечно, прилагаю примеры съемок. Когда юзер пишет под явно неплохим видео что-то вроде «нифига не видно, все размыто», раньше я в шутку отвечал «измените качество ролика». После определенного инцидента стало понятно, что люди не шутят, а действительно думают, что по умолчанию видят «исходное», наилучшее качество видео. В первую очередь это касается «не-айтишных» ресурсов для широкой аудитории.


Но Google происходящее, по всей видимости, совершенно не «напрягает». В конкретном случае событий последних дней так и останется тайной – зачем нужно было все усложнять, если кнопки и так прекрасно вмещались на горизонтальной панели. Публикацию можно было бы поместить в q&a, но вопрос возможности возврата исходного интерфейса кажется слишком риторическим.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



[Перевод] Руководство по проектированию реляционных баз данных (10-13 часть из 15) [перевод]

Продолжение.

Предыдущие части: 1-3, 4-6, 7-9

10. Нормализация баз данных




Указания для правильного проектирования реляционных баз данных изложены в реляционной модели данных. Они собраны в 5 групп, которые называются нормальными формами. Первая нормальная форма представляет самый низкий уровень нормализации баз данных. Пятый уровень представляет высший уровень нормализации.

Нормальные формы – это рекомендации по проектированию баз данных. Вы не обязаны придерживаться всех пяти нормальных форм при проектировании баз данных. Тем не менее, рекомендуется нормализовать базу данных в некоторой степени потому, что этот процесс имеет ряд существенных преимуществ с точки зрения эффективности и удобства обращения с вашей базой данных.




  • В нормализованной структуре базы данных вы можете производить сложные выборки данных относительно простыми SQL-запросами.

  • Целостность данных. Нормализованная база данных позволяет надежно хранить данные.

  • Нормализация предотвращает появление избыточности хранимых данных. Данные всегда хранятся только в одном месте, что делает легким процесс вставки, обновления и удаления данных. Есть исключение из этого правила. Ключи, сами по себе, хранятся в нескольких местах потому, что они копируются как внешние ключи в другие таблицы.

  • Масштабируемость – это возможность системы справляться с будущим ростом. Для базы данных это значит, что она должна быть способна работать быстро, когда число пользователей и объемы данных возрастают. Масштабируемость – это очень важная характеристика любой модели базы данных и для РСУБД.


Вот некоторые из основных пунктов, которые связаны с нормализацией баз данных:



  • Упорядочивание данных в логические группы или наборы.

  • Нахождение связей между наборами данных. Вы уже видели примеры связей один-ко-многим и многие-ко-многим.

  • Минимизация избыточности данных.


Очень малое количество баз данных следуют всем пяти нормальным формам, предоставленным в реляционной модели данных. Обычно базы данных нормализуются до второй или третьей нормальной формы. Четвертая и пятая формы используются редко. Поэтому я ограничусь тем, чтобы рассказать вам лишь о первых трех.


11. Первая нормальная форма (1НФ)




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



Правило: каждая таблица имеет первичный ключ, состоящий из наименьшего возможного количества полей.

Как вы знаете, первичный ключ может состоять из нескольких полей. Вы, к примеру, можете выбрать имя и фамилию в качестве первичного ключа (и надеяться, что эта комбинация будет уникальной всегда). Будет намного более хорошим выбором номер соц. Страхования в качестве первичного ключа, т.к. это единственное поле, которое уникальным образом идентифицирует человека.

Еще лучше, когда нет очевидного кандидата на звание первичного ключа, создайте суррогатный первичный ключ в виде числового автоинкрементного поля.


Атомарность.



Правило: поля не имеют дубликатов в каждой записи и каждое поле содержит только одно значение.

Возьмем, например, сайт коллекционеров автомобилей, на котором каждый коллекционер может зарегистрировать его автомобили. Таблица ниже хранит информацию о зарегистрированных автомобилях.


image

Горизонтальное дублирование данных – плохая практика.


С таким вариантом проектирования вы можете сохранить только пять автомобилей и если у вас их менее 5, то вы тратите впустую свободное место в базе данных на хранение пустых ячеек.

Другим примером плохой практики при проектировании является хранение множественных значений в ячейке.


image

Множественные значения в одной ячейке.


Верным решением в данном случае будет выделение автомобилей в отдельную таблицу и использование внешнего ключа, который ссылается на эту таблицу.


Порядок записей не должен иметь значение.



Правило: порядок записей таблицы не должен иметь значения.

Вы можете быть склонны использовать порядок записей в таблице клиентов для определения того, какой из клиентов зарегистрировался первым. Для этих целей вам лучше создать поля даты и времени регистрации клиентов. Порядок записей будет неизбежно меняться, когда клиенты будут удаляться, изменяться или добавляться. Вот почему вам никогда не следует полагаться на порядок записей в таблице.


В следующей части рассмотрим вторую нормальную форму (2НФ).


12. Вторая нормальная форма.




Для того, чтобы база данных была нормализована согласно второй нормальной форме, она должна быть нормализована согласно первой нормальной форме. Вторая нормальная форма связана с избыточностью данных.
Избыточность данных.



Правило: поля с не первичным ключом не должны быть зависимы от первичного ключа.

Может звучать немного заумно. А означает это то, что вы должны хранить в таблице только данные, которые напрямую связаны с ней и не имеют отношения к другой сущности. Следование второй нормальной форме – это вопрос нахождения данных, которые часто дублируются в записях таблицы и которые могут принадлежать другой сущности.


image

Дублирование данных среди записей в поле store.


Таблица выше может принадлежать компании, которая продает автомобили и имеет несколько магазинов в Нидерландах.


Если посмотрите на эту таблицу, то вы увидите множественные примеры дублирования данных среди записей. Поле brand могло бы быть выделено в отдельную таблицу. Также, как и поле type (модель), которое также могло бы быть выделено в отдельную таблицу, которая бы имела связь многие-к-одному с таблицей brand потому, что у бренда могут быть разные модели.


Колонка store содержит наименование магазина, в котором в настоящее время находится машина. Store – это очевидный пример избыточности данных и хороший кандидат для отдельной сущности, которая должна быть связана с таблицей автомобилей связью по внешнему ключу.

Ниже пример того, как бы вы моги смоделировать базу данных для автомобилей, избегая избыточности данных.


image


В примере выше таблица car имеет внешний ключ – ссылку на таблицы type и store. Столбец brand исчез потому, что на бренд есть неявная ссылка через таблицу type. Когда есть ссылка на type, есть ссылка и на brand, т.к. type принадлежит brand.


Избыточность данных была существенным образом устранена из нашей модели базы данных. Если вы достаточно придирчивы, то вы, возможно, еще не удовлетворены этим решением. А как насчет поля country_of_origin в таблице brand? Пока дубликатов нет потому, что есть только четыре бренда из разных стран. Внимательный разработчик базы данных должен выделить названия стран в отдельную таблицу country.


И даже сейчас вы не должны быть удовлетворены результатом потому, что вы также могли бы выделить поле color в отдельную таблицу.


Насколько строго вы подходите к созданию ваших таблиц – решать вам и зависит от конкретной ситуации. Если вы планируете хранить огромное количество единиц автомобилей в системе и вы хотите иметь возможность производить поиск по цвету (color), то было бы мудрым решением выделить цвета в отдельную таблицу так, чтобы они не дублировались.


Существует другой случай, когда вы можете захотеть выделить цвета в отдельную таблицу. Если вы хотите позволить работникам компании вносить данные о новых автомобилях вы захотите, чтобы они имели возможно выбирать цвет машины из заранее заданного списка. В этом случае вы захотите хранить все возможные цвета в вашей базе данных. Даже если еще нет машин с таким цветом, вы захотите, чтобы эти цвета присутствовали в базе данных, чтобы работники могли их выбирать. Это определенно тот случай, когда вам нужно выделить цвета в отдельную таблицу.


13. Третья нормальная форма.




Третья нормальная форма связана с транзитивными зависимостями. Транзитивные зависимости между полями базы данных существует тогда, когда значения не ключевых полей зависят от значений других не ключевых полей. Чтобы база данных была в третьей нормальной форме, она должна быть во второй нормальной форме.
Транзитивные зависимости.



Правило: не может быть транзитивных зависимостей между полями в таблице.

Таблица клиентов (мои клиенты – игроки немецкой и французской футбольной команды) ниже содержит транзитивные зависимости.

image


В этой таблице не все поля зависят исключительно от первичного ключа. Существует отдельная связь между полем postal_code и полями города (city) и провинции (province). В Нидерландах оба значение: город и провинция – определяются почтовым кодом, индексом. Таким образом, нет необходимости хранить город и провинцию в клиентской таблице. Если вы знаете почтовый код, то вы уже знаете город и провинцию.


Такая транзитивной зависимости следует избегать, если вы хотите, чтобы ваша модель базы данных была в третьей нормальной форме.


В данном случае устранение транзитивной зависимости из таблицы может быть достигнуто путем удаления полей города и провинции из таблицы и хранение их в отдельной таблице, содержащей почтовый код (первичный ключ), имя провинции и имя города. Получение комбинации почтовый код-город-провинция для целой страны может быть весьма нетривиальным занятием. Вот почему такие таблицы зачастую продаются.


Другим примером для применения третьей нормальной формы может служить (слишком) простой пример таблицы заказов интернет-магазина ниже.


image


НДС (value added tax) – это процент, который добавляется к цене продукта (19% в данной таблице). Это означает, что значение total_ex_vat может быть вычислено из значения total_inc_vat и vice versa. Вы должны хранить в таблице одно из этих значений, но не оба сразу. Вы должны возложить задачу вычисления total_inc_vat из total_ex_vat или наоборот на программу, которая использует базу данных.


Третья нормальная форма гласит, что вы не должны хранить данные в таблице, которые могут быть получены из других (не ключевых) полей таблицы. Особенно в примере с таблицей клиентов следование третьей нормальной форме требует либо большого объема работы, либо приобретения коммерческой версии данных для такой таблицы.


Третья нормальная форма не всегда используется при проектировании баз данных. Когда разрабатываете базу данных вы всегда должны сравнивать преимущества от более высокой нормальной формы в сравнении с объемом работ, которые требуются для применения третьей нормальной формы и поддержания данных в таком состоянии. В случае с клиентской таблицей лично я бы предпочел не нормализовать таблицу до третьей нормальной формы. В последнем примере с НДС я бы использовал третью нормальную форму. Хранение данных, воспроизводимых из существующих, обычно плохая идея.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Делаем автоспуск почти для любого фотоаппарата

Panasonic G3 remoteЕсли кто не знает, есть у меня хобби — коптеры и задался недавно целью поднять вместо мыльницы нечто приличное для фотографирования с воздуха. Но в воздухе на кнопки не по нажимаешь, а лепить механику, для имитации пальцев рук — это лишний вес и геморрой с механикой. Поэтому не долго думая глянул на дырочку с надписью remote на Panasonic G3 и полез гуглить что с ней можно сделать. И попал на замечательный сайт с распиновкой подобного разъема почти под все фотоаппараты.

Как выяснилось всё сводится к тому чтобы просто закоротить контакты, но Panasonic подкинула заботу, решив видимо, что как у всех не круто. Поэтому на фотографии справа вы видите страшные сборки из последовательно соединенных резисторов, чтоб немного приблизится к указанному на картинке номиналу:

panasonic remote pinout

Конечно же точно подобрать не удалось, но в итоге всё заработало и даже не нужно было думать о кнопке фокуса, при «нажатии» на кнопку спуска происходит и то и другое сразу.



Как вы помните, мне это нужно для управления фотоаппаратом в воздухе и, побаловавшись замыканием проводков, стал искать, как же эти самые проводки замыкать через Arduino. Подавать +5в как минимум опасно, просто так закоротить контакты, не влезая в цепь, ардуинка не умеет. Первым что пришло в голову — обычное реле, но знающие люди рассказали что есть такая штука — n-fet, которая сделает всё то же самое, только проще и меньше по весу. RC моделисты знают, что в любом регуляторе скорости (ESC) этих fet-ов просто завались, поэтому добил один из регулей, выпаяв из него сразу 3 n-fet с маркировкой 4420, что привело меня к Si4420DY* Single N-Channel Logic Level PowerTrench® MOSFET, что как раз мне и было нужно. Далее (я ни сколько не радиолюбитель, уж простите) начал искать как подключать это чудо к Arduino, оказалось всё очень просто, вот например подключение лампочки:

image

Или моторчика:

image

Поразмыслив и посмотрев на маркировку, сделал вывод что вот такое подключение будет работать (перед пайкой сверился со знающим человеком, который дал добро):

image

Спаял по схеме, залил небольшой скетч:

void setup() {
pinMode(13, OUTPUT);
pinMode(3, OUTPUT);
}

void loop() {
digitalWrite(13, HIGH); // зажечь статусный светодиод
digitalWrite(3, HIGH); // активировать спуск
delay(500); // ждем пол секунды, чтобы фотоаппарат сфокусировался
// и сделал кадр (надо варьировать в зависимости от вашей технике)
digitalWrite(3, LOW); // выключаем спуск
digitalWrite(13, LOW); // и светодиод
delay(5000); // ждем 5 секунд и делаем еще один кадр
}




Подключаем Arduino к фотоаппарату и подаем на неё питание:



Как видите работает прекрасно и дальше можно делать всё что угодно, например добавить переменный резистор или экран с кнопочками для изменения задержки перед спуском. Или ловить насекомых и животных, пересекающих датчик. Или так же фотографировать и потом выкладывать в интернет воров. Или сделать вращающийся предметный столик с автоматическим фотографированием и делать псевдо-3D модели для интернет-магазинов. Применений масса и ограничена только фантазией и потребностями.

Но меня интересовала работа с обычный RC приемником. Не буду утомлять читателя подробностями, да и не нужно это (а еще я не знаю точно как эта магия работает). Поэтому простенький копипастный проект выложил на github, чтобы любой мог дополнить и улучшить эту штуку для авиамоделей и не только.

А что делать если нет специализированного выхода




Вот тут уже сложнее, иногда производитель оставляет подобные вход для управления техникой в хитром проприетарном разъеме, но самый простой и наиболее опасный вариант — подпаяться к контактам кнопки спуск вашего фотоаппарата.

Прерапировал я Sony tx55 (так же использую на коптере, видео снимает прекрасно, весит всего 100 грамм).

Вскрытие показало вот такую красоту очень маленьких размеров. Тестером удалось выяснить какие контакты отвечают за нажатие кнопки фокусировки (полунажатие) и кнопки собственно спуска.

Sony TX55 pinout shutter button

После чего надфилем заточил паяльник и очень аккуратно приладил 3 провода: focus, shutter и gnd (земля/общий).

Sony TX55 pinout shutter button

После чего включил фотоаппарат и попробовал замыкать контакты, оказалось что замыкать надо сразу всё, т.е. focus и shutter на землю. Для будущего подключения Arduino вывел контакты на гребенку:

image

В плане эстетики это конечно ужасно, но мыльница используется исключительно на коптерах, где подобные вещи совершенно никого не волнуют — главное чтобы было легко и работало.

Можно было бы вывести кнопки трансфокатора (зум) и подключить их через оставшиеся n-fet-ы. К сожалению кнопка начала видео записи сделана в виде иконки на экране, куда уже никак не припаять провода.

Статья хоть и сумбурная, но надеюсь понравится и принесет пользу фотографам и не только.

Противники Arduino контроллеров, спешу вас заверить что на нажатии кнопки дело не закончится. И простите меня за столь ламерское описание процесса.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: