Функциональное программирование должно стать вашим приоритетом №1 в 2015 году


— ООП не сможет больше спасать нас от «Облачных монстров».

Примечание переводчика: Есть два понятия — параллельность (выполнение одновременно, независимо) и конкурентность (выполнение по шагам, поочерёдно, но одновременно несколько задач) и, как всегда, мне пришлось поломать голову подобрав правильные термины.

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

Возможно вы уже слышали такое выражение, вроде: “Clojure”, “Scala”, “Erlang” или даже “Java теперь имеет лямбды”. И вы имеете хоть и отдалённое представление о «Функциональном программировании». Если вы участник какого-либа программисткого сообщества, тогда эта тема могла уже вами обсуждаться.

Если вы поищите в Google по словосочетанию «Функциональное программирование», вы не увидите что-то нового. Второй язык из созданных ранее уже охватывает эту тему, он был создан в 50-ых и называется Lisp. Тогда, какого чёрта, эта тема стала популярна только сейчас? Всего то 60 лет спустя?

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

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


Компьютеры не имели достаточно вычислительных мощностей, чтоб иметь дело со всеми абстракциями и справляться с программами, написанными в функциональном стиле. Так Lisp выдыхался раньше, будучи чрезвычайно медленным и, следовательно, не пригодным для работы. Тогда-то и началось господство императивного стиля программирования, особенно с расцветом C.

Но компьютеры сильно улучшились

Сейчас стало практически нормальным использовать большинство приложений совершенно не заботясь на каком языке они были написаны. Наконец-то функциональные языки получили второй шанс.

Функциональное программирование 50.5

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

Вы можете понимать термин «Функциональное программирование» слишком буквально, как программирование с использованием функций и это недалеко от истины. Вы будете создавать функции в терминах других функций и писать функции (Вы помните f ∘ g из школьной программы? Сейчас вам это пригодится). Это всё.

Список (не полный) особенностей ФП:

  1. Функции первого класса (First-Class Functions)
  2. Функции высшего порядка (High-Order Functions)
  3. Чистые функции (Pure Functions)
  4. Замыкания (Closures)
  5. Неизменяемое состояние (Immutable State)

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

Функции первого класса значит, что вы сможете сохранять функции в переменные. Я уверен вы делали что-то похожее, как в примере на JavaScript:

var add = function(a, b){   return a + b } 

Вы только что создали анонимную функцию, которая получает a и b и возвращает a + b в переменную add.

Функции высшего порядка значит, что функции могут возвращать функции или принимать функции как параметры.

И снова на JavaScript:

document.querySelector('#button')   .addEventListener('click', function(){     alert('yay, i got clicked')   }) 

или

var add = function(a){   return function(b){     return a + b   } }   var add2 = add(2) add2(3) // => 5 

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

Чистые функции значит, что функция не меняет переменные, она просто принимает данные и возвращает данные, как наши любимые функции из математики. Так-же это значит, что если вы вызовите функцию f с аргументом 2 и она возвращает 10, то она всегда будет возвращать 10. Не имеет значение какое окружение, количество нитей или порядок выполнения. Они не вызывают никаких побочных эффектов в других частях программы и это действительно мощная концепция.

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

var add = function(a){   return function(b){     return a + b   } }   var add2 = add(2) add2(3) // => 5 

Снова взгляните на второй пример из параграфа Функции высшего порядка, переменная a была замкнута и доступна только в возвращаемой функции. На самом деле, замыкания не особенность ФП парадигмы, скорее оптимизация.

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

let x = 5;; x = 6;;  print_int x;;  (* prints 5 *) 

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

Объектно-ориентированное программирование не может больше вас защищать

Это многообещающее время, когда мы сможем иметь распределённые и многопоточные приложения, наконец-то наступило. К сожалению, наша существующая (или наиболее используемая) модель не готова к многопоточности (concurrency) и параллельности (parallelism), хотя она и решает текущие задачи, но и добавляет большие проблемы.

Чтобы улучшить приложения, мы нуждаемся в простом и надёжном способе добиться желаемого. Вы помните выше упомянутые особенности ФП? Чистые функции и неизменяемое состояние? Правильно, вы можете выполнять функции тысячи раз на разных ядрах или машинах и результат будет всегда одинаковым. И так, мы можем один и тот-же код запускать и на одном ядре и на тысячах. Жизнь опять становится безоблачной.

«Но почему я не могу продолжать использовать ООП?»

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

Пишу это не для того, чтобы агитировать вас переходить на ФП с тех парадигм, которые вы сейчас используете (хотя некоторые люди скажут я должен), но вы однозначно должны усвоить: Java и C++11 уже имеют лямбда исчисления. Могу сказать, что почти все современные и поддерживаемые языки собираются реализовать ФП особенности или уже сделали это.

Стоить отметить, что мы не должны прекращать использовать изменяемое состояние. Мы должны использовать ввод/вывод (IO) и т.д., чтобы наши программы были полезны. Основная идея ФП является: используй изменяемое состояние, только тогда, когда это действительно необходимо.

«Я не работаю с облаками, мне действительно нужно изучать ФП?»

Да.

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

«Я пытался. Это слишком сложно и код трудночитаемый»

Начинать всегда трудно в любой области. Уверен, вы начали изучать программирование тоже имея кучу проблем, даже в ООП языках. Возможно начинать писать в ООП стиле было проще, чем писать свою первую программу потому, что вы уже были знакомы с некоторыми общими идиомами, вроде объявление переменных и for/while циклами.

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

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

Просмотрите программу написанную на Haskell и JavaScript (в императивном стиле):

guess :: Int -> [Char] guess 7 = "Much 7 very wow." guess x = "Ooops, try again."  -- strongly inspired by http://learnyouahaskell.com 

function guess(x){   if(x == 7){     return "Much 7 very wow."   }   else {     return "Oops, try again."   } } 

Это очень простая программа. Она выводит поздравительное сообщение, когда пользователь угадал и ввёл цифру 7 или выведет сообщение об ошибке во всех других случаях. Возможно это выглядит шифровкой, как Haskell может делать всю работу всего в две строки кода (первую строку вы можете игнорировать, это просто «объявление типа»). Но это станет достаточно простым, однажды, поняв возможности сопоставления с образцом (Pattern Matching) (которые реализованы не только в ФП языках, но были их особенностью).

Что делает Haskell:

Если принимаемый аргумент у функции guess равен цифре 7, то она вернёт «Much 7 very wow.» или вернёт «Oooops, try again.» в других случаях.

И это тоже самое, что делает код на JavaScript, но Haskell сопоставляет с «образцом», объявленным программистом в коде.

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

plus1 :: [Int] -> [Int] plus1 []      = [] plus1 (x:xs)  = x + 1 : plus1 xs   -- plus1 [0,1,2,3] -- > [1,2,3,4] 

В программе выше, *plus1* функция, которая принимает список целых чисел и прибавляет по 1 к каждому элементу списка. Функция сопоставляет, когда список пустой [] (возвращает другой пустой список, раз в нём нет элементов) обходит не пустой список и определяет образец сопоставления: x как первый элемент списка, xs как оставшийся список. Потом просто считает сумму и объединяет через рекурсивный вызов.

Я уверен, вы потратите много минут (не самых приятных), переписывая данный пример в императивном стиле, уместив код в две строки, и при этом, сохранив читаемость.

Итак, давайте начнём

Вышло много материалов по Функциональному программированию, но эти ссылки вы не должны пропустить однозначно:

  1. Principles of Functional Programming in Scala: курс будет полезен для тех, кто знает Java и хочет попробовать Функциональное программирование не спрыгивая с JVM. Курс охватывает базовые концепции.
  2. Paradigms of Computer Programming — Fundamentals: курс будет полезен для тех, кто хочет узнать как писать программы на функциональном языке. На курсе используюется обучающий язык Qz. В курсе много упражнений, вы сможете использовать функциональный язык и попробовать создать свою структуру данных. Полагаю, курс предоставляет строительные блоки для «здания» с названием «Функциональное программирование», он поможет вам с другими языками в будущем.

К сожалению, курсы будут доступны только в конце года. Но вы можете следить за контентом и видео, они доступны на Youtube.

С другой стороны, если вы предпочитаете текстовые материалы, я непременно рекомендую некоторые из них:

  1. Structure and Interpretation of Computer Programs
  2. How to Design Programs
  3. Concepts, Techniques, and Models of Computer Programming

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

Кроме того, Крис Аллен (Chris Allen) написал отличную статью по изучению Функционального программирования. Она называется Functional Education и имеет исчерпывающий список материалов для изучения Функционального программирования используя Haskell, а так же расскажет о сильных и слабых сторонах этого подхода. Следуя рекомендованным Крисом ссылкам, вы сможете изучить начальные принципы и более сложные темы (я уверен вы слышали о монадах) Функционального программирования и возможно поймёте как писать приложения используя их. (Спасибо тебе Крис, за ссылки на материалы.)

Удачи в вашем Функциональном Новом Году! ☺

ссылка на оригинал статьи http://geektimes.ru/post/261144/

Редактор Urho3D (часть 1)

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


Редактор тоже игра

Редактор — это скрипт на языке AngelScript, запускаемый лаучнером, которым мы пользовались в прошлый раз. А значит, его код можно изучать наряду с другими примерами и, при желании, легко модифицировать. Запустить редактор можно при помощи пакетного файла Build/bin/Editor.bat.

Навигация подобна управлению в шутере. W и S — перемещение вперед и назад, A и D — влево и вправо, Q и E — вниз и вверх. С зажатым шифтом перемещение быстрее. Можно использовать стрелочки. Зажатая правая кнопка мыши позволяет поворачивать камеру в разные стороны. При зажатой средней кнопке происходит вращение вокруг выделенного объекта. Если крутить колесико, то меняется угол обзора (fov). Полный список клавиш можно посмотреть тут.

Настройки

View->Editor Settings — настройка отображения и управления. Для любителей Blender’а есть возможность выбрать альтернативную раскладку клавиатуры. Опция, на которую следует обратить внимание — New node mode. По умолчанию включен режим Use distance. В этом режиме новые ноды создаются в центре экрана на расстоянии, заданном в графе New node distance. Как по мне, это не очень удобно. Мне гораздо больше нравится второй режим — In center. В этом режиме новые ноды создаются в центре координат и их оттуда можно двигать в нужное положение. Третий режим (Raycast) похож на первый, только используется не фиксированное расстояние, а ищется пересечение со сценой.

View->Editor Preferences — настройка интерфейса. Из интересного здесь — возможность выбрать язык (русский в том числе) и задать прозрачность интерфейса. Minimum opacity — прозрачность при перемещении вида, Maximum opacity — все остальное время. Я обычно устанавливаю оба значения в 1, ибо отвлекает. Примечание: чтобы новые значения применились, после ввода нажимайте Enter.

Все настройки хранятся в файле c:\Users\ИМЯ_ПОЛЬЗОВАТЕЛЯ\AppData\Roaming\urho3d\Editor\Config.xml (в Windows). Чтобы сбросить настройки, этот файл можно удалить.

Консоль

При нажатии F1 открывается консоль. Она может работать в двух режимах, переключение между которыми производится с помощью кнопки левее поля ввода.

В режиме FileSystem консоль работает как обычная командная строка Windows (если у вас Windows конечно). Например, если ввести «notepad.exe», то откроется блокнот.

В режиме Script все введенные команды исполняются интерпретатором AngelScript. Например, команда «log.Write(1+2)» выведет 3. Тут мы приходим к пониманию того, что вывод консоли — это лог. Сам лог в текстовом виде записывается в файл c:\Users\ИМЯ_ПОЛЬЗОВАТЕЛЯ\AppData\Roaming\urho3d\logs\Editor.as.log. Он очень сильно вам поможет при отладке скриптов.

Первые шаги

Возьмите архив Urho3DHabrahabr02Start.zip из репозитория github.com/1vanK/Urho3DHabrahabr02 и распакуйте его в пустую папку (у меня этот путь «d:\MyGames\Urho3DHabrahabr02\Urho3DHabrahabr02\», поэтому я буду использовать его для ясности). Этот архив содержит ресурсы, которые понадобятся нам при создании игры: несколько моделей, материалы к ним и один звуковой файл.

В редакторе нажмите File->Set resource path… и укажите путь «d:\MyGames\Urho3DHabrahabr02\Urho3DHabrahabr02\GameData\». Теперь редактор имеет доступ к трем папкам с ресурсами: собственные папки Data и CoreData, которые находятся рядом с ним, и папка GameData, которую мы указали.

Создаем сцену

В браузере ресурсов (Resource Browser) выделите папку Models и перетащите Ground.mdl на корневую ноду Scene в окне Hierarchy.

При этом автоматически будет создана новая нода с компонентом StaticModel (простая модель без скелета). В окне Attribute inspector задайте для ноды имя Ground, нажмите кнопку Pick возле графы Material и выберите Materials/Ground.xml.

Теперь у нас есть пол, но сцена плохо освещена, поэтому давайте добавим источник света.

Для начала создадим новый узел. Выделите корневую ноду Scene и выберите пункт меню Create->Local node. Можно также создавать Replicated node. В нашем случае нет никакой разницы, так как реплицируемые ноды синхронизируют свое состояние при сетевом взаимодействии, а с сетью мы работать не планируем. Ноды также можно создавать не через меню, а с помощью вертикальной панели в левой части редактора.

Убедитесь, что новосозданная нода выделена, и выберите пункт меню Create->Component->Scene->Light (многие компоненты продублированы на левой вертикальной панели). В окне Attribute inspector задайте имя для ноды, выберите тип источника Directional (солнечный свет), укажите яркость, поворот, позицию (для данного типа источника света позиция не имеет значения, но поднимем ноду выше, чтобы не мешала работать со сценой). Также включите опцию Cast Shadows, чтобы источник света мог создавать тени.

Теперь изменим фоновое освещение. Выделите корневую ноду Scene и создайте компонент Zone (Create->Component->Scene->Zone). Задайте цвет фона (Fog Color) и цвет фонового освещения (Ambient Color). Эти значения будут использоваться, только если камера находится в пределах зоны, поэтому расширьте границы (Bounding Box Min/Max).

Скрипты

Создайте новую ноду, добавьте к ней компонент AnimatedModel (модель со скелетом) и укажите модель Models/Cannon.mdl и материал Materials/Cannon.xml. Сдвиньте пушку немного вверх, а также включите опцию Cast Shadows, чтобы пушка отбрасывала тень.

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

В папке GameData\Scripts создайте файл Cannon.as со следующим содержимым:

class Cannon : ScriptObject {     // Положительное или отрицательное направление вращения пушки.     int direction = 1;      // Функция вызывается каждый кадр.     void Update(float timeStep)     {         // Угол поворота вокруг оси x (node указывает на ноду, к которой прикреплен скрипт).         float pitch = node.rotation.pitch;                  // Меняем направление вращения, если значение угла выходит за заданные пределы.         if (pitch >= 70.0f)             direction = -1;         else if (pitch <= -10.0f)             direction = 1;                  pitch += 30.0f * direction * timeStep;         node.rotation = Quaternion(pitch, 0.0f, 0.0f);     } } 

Скрипты лучше сохранять в кодировке UTF-8, тогда не будет проблем с кириллицей.

К ноде Cannon добавьте компонент ScriptInstance (Create->Component->Logic->ScriptInstance). Нажмите на кнопку Pick и выберите новосозданный файл, а в графе Class Name введите Cannon (файл может содержать несколько классов). После ввода не забудьте нажать Enter. Если все сделано правильно, ниже имени класса должна появиться переменная direction, которую мы объявили в скрипте.

Убедитесь, что переключатель RevertOnPause (третья кнопка на верхней панели) активирован и нажмите кнопку RunUpdatePlay (первая кнопка на верхней панели). Пушка начнет вращаться туда-сюда. Для остановки нажмите RunUpdatePause (средняя кнопка).

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

И, наконец, сохраните сцену (File->Save scene as…) в файл GameData/Scenes/Level01.xml.

Продолжение следует…

ссылка на оригинал статьи http://habrahabr.ru/post/265749/

Создание доменных зон в AzureDns [шпаргалка]

Привет, Хабр!
Хочу опубликовать небольшую шпаргалку по созданию новых доменных зон в AzureDns. К своему удивлению, так и не нашёл какого-либо визуального редактора для этого, поэтому все действия будут производится из PowerShell.

Переворошив кучу статей из руководства по созданию DNS в Azure сделал небольшую выжимку нужных команд.

Шаг первый

Скачиваем и ставим PowerShell
Переключаемся в режим Azure:

Switch-AzureMode -Name AzureResourceManager 

Авторизуемся:

Add-AzureAccount 

Переключаемся на подписку:

Select-AzureSubscription -SubscriptionName "name" 

Если не знаете какое имя указать, то список подписок можно получить командой:

Get-AzureSubscription 

Нас интересует поле Name данные из него необходимо подставить в опцию -SubscriptionName.

Подробнее о днс в Azure.

Шаг второй

Создаём новую корневую зону (или получаем имеющуюся):

$zone = New-AzureDnsZone -Name domain.com -ResourceGroupName "Group-1" 

или

$zone = Get-AzureDnsZone -Name domain.com -ResourceGroupName "Group-1" 

Информацию по созданной зоне можно посмотреть командой:

Get-AzureDnsRecordSet –Name “@” –RecordType NS –Zone $zone 

Шаг третий

Добавляем А запись:

$rs = New-AzureDnsRecordSet -Name www -Zone $zone -RecordType A -Ttl 300 

или по имени зоны

$rs = New-AzureDnsRecordSet -Name www –ZoneName domain.com –ResourceGroupName MyAzureResourceGroup -RecordType A -Ttl 300 

Подробнее о поддерживаемых записях.

Добавляем ip сервера (или серверов, для этого команду нужно выполнить для каждого ip):

Add-AzureDnsRecordConfig -RecordSet $rs -Ipv4Address "1.2.3.4" 

Записываем:

Set-AzureDnsRecordSet -RecordSet $rs 

Шаг четрые

Смотрим ns-серверы по зоне:

Get-AzureDnsRecordSet -Zone $zone -Name "@" -RecordType NS 

И добавляем их у своего регистратора.

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

Get-AzureDnsZone -ResourceGroupName Group-1 

Добавляем поддомен

$child = New-AzureDnsZone -Name "test.domain.com" -ResourceGroupName "Group-1" $child_ns_recordset = Get-AzureDnsRecordSet -Zone $child -Name "@" -RecordType NS $parent_ns_recordset = New-AzureDnsRecordSet -Zone $zone -Name "test" -RecordType NS -Ttl 3600 $parent_ns_recordset.Records = $child_ns_recordset.Records Set-AzureDnsRecordSet -RecordSet $parent_ns_recordset  $rs = Get-AzureDnsRecordSet -Name test-RecordType A -Zone $zone -ResourceGroupName "Group-1" Add-AzureDnsRecordConfig -RecordSet $rs -Ipv4Address "1.2.3.4" Set-AzureDnsRecordSet -RecordSet $rs Get-AzureDnsRecordSet -Name test -RecordType A -Zone $zone -ResourceGroupName "Group-1" 

Благодарю за внимание.

ссылка на оригинал статьи http://habrahabr.ru/post/265797/

Дальше, легче, дешевле: обзор перспективных электровелосипедов

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

go-e ONwheel

Задачу, как превратить свой велосипед без лишних усилий в электрический, с успехом решили два австрийских инженера, представивших на Кикстартере оригинальный привод go-e ONwheel.

Максимальная мощность компактного электромотора — 800 Вт, емкости батареи хватает на 60 км пути. Весь крепежный комплект поставляется в наборе:

Сегодня проект собрал уже более 150 тысяч евро, втрое превысив начальную сумму. Если есть желание проверить девайс в действии — 450 евро до конца этапа фондирования, потом будет на 100 евро дороже. Поставка с октября по январь.

Vela

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

В задней втулке — бесконтактный электромотор мощностью 350 Вт и с максимальным крутящим моментом 35 Нм, в стойке рамы — заменяемая аккумуляторная батарея емкостью 370 Втч и рассчитанная на 32 километра пробега только на электротяге. Батарея выдерживает до 1500 циклов зарядки, так что при даже при интенсивных поездках в течение дня, года на 3-4 должно хватить.

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

JIVR

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

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

15 кг веса, до 30 км пробега и цена в районе 1700 $. Обо всех условиях договаривайтесь здесь.

Wave Electric Bike

600 $, вес 23 кг, мотор 750 Вт, пробег на одной зарядке до 80 км, максимальная скорость 45 км/ч. Ну что еще сказать? Разве что этот стартап собрал почти 1 млн. долларов при начальной заявке в 90 тысяч. Итак, самый-самый электробайк в мире — Wave Electric 28 MPH:

Современный дизайн круизера, возможность поездок как в полностью электрическом режиме, так и в гибридном, комбинируя педали и мотор. Конечно, недостатки искать можно — и найти, в итоге. Но цена какая! Плюс гарантия в 1 год.

В общем, если есть интерес — пишите сюда, пока действует предложение в 599 $.

Sondors Electric Bike

И в завершение нашего обзора — настоящий внедорожник от молодого парня из Малибу Сторма Сондорса, собравшего на свою версию электрического велосипеда более 6 млн долларов. Это один из самых успешных стартапов на Индигоу:

Заднеприводный, с мотором в 350 Вт, максимальной скоростью до 35 км/ч и пробегом до 80 км на одной зарядке литий-ионовой батареи, этот е-байк с успехом штурмует почти любые преграды на дерте. Не говоря уже о парке — на такой-то пятидюймовой резине.
Кстати, несмотря на кажущуюся массивность, вес снаряженного велосипеда всего 20 кг.

По заказу — хотя стадия фондирования на Индигоу уже закончилась, можно сделать заказ на сайте Gosondors.com. Там же ознакомиться со всеми характеристиками и дополнительным оборудованием.

Если вы решили заказать велосипед

Доставить любой велосипед из США можно без проблем, даже не попадая в категорию «негабарит». При условии, что не превышен обхват посылки в 300 см (имеется в виду сумма Д+2Ш+2В) и допустимый вес в 31 кг. Что для этого нужно сделать? Да просто уточнить у продавца, в каком виде велосипед транспортируется, его габариты и вес в упаковке.

Как правило, колеса и рама идут не в собранном виде, поэтому и максимальный размер упаковки определяется лишь геометрией рамы. Но если, по каким-то причинам, продавец отправляет байк в собранном виде, у нас на складе можно его подготовить к отправке «правильно», предварительно разобрав. Стоимость такой услуги — 30 $.

Что касается стоимости доставки. Максимальный вес электрического велосипеда не превышает 20 кг, соответственно, максимальная стоимость доставки в Москву не превысит 207,85 $ — если воспользоваться методом LiteMF Express.

И опять же, для более точного расчета на нашем сайте уточняйте вес для транспортировки (не просто вес самого байка) у продавца.

С любыми вопросами вы также можете обратиться в нашу Cлужбу поддержки.

ссылка на оригинал статьи http://geektimes.ru/post/261150/

Предложение наркотиков в интернет-продаже даже выросло после закрытия Silk Road

По результатам исследования Digital Citizen’s Alliance, закрытие черного рынка Silk Road лишь ненадолго замедлило рост продаж наркотиков в сети. Когда власти США закрыли Silk Road в октябре 2013 и конфисковали все активы проекта, многие полагали, что онлайн-рынок наркотиков не оправится после этого сокрушительного удара. На тот момент доля Silk Road составляла 70% от общего оборота, обеспечивая пользователям доступ практически к любым видам нелегальных товаров, включая наркотики, оружие и поддельные документы.



Уже через пару месяцев после закрытия Silk Road, появился Silk Road 2.0, который также впоследствии был арестован. На смену ему пришли 2 более мелких проекта: Evolution и Agora. В марте 2015, Evolution исчез, но не по вине вмешательства властей, а по причине мошеннических манипуляций администраторов сайта. После исчезновения Evolution всё больше и больше новых проектов стали заполнять пустующую нишу.

Суровый приговор Россу Ульбрихту, основателю Silk Road (пожизненное заключение), по всей видимости, был вынесен в качестве меры устрашения: чтобы другим было не повадно создавать и развивать онлайн-площадки для продажи нелегальных товаров. Поскольку судебная система США носит прецедентный характер, последующих организаторов онлайн-рынков, торгующих запрещенными наркотиками, ждет схожая участь. Тем не менее, по данным Digital Citizen’s Alliance, случай Silk Road лишь ненадолго сдержал рост продаж наркотиков в интернете.

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


Детальнее ознакомиться с методами исследования можно на английском языке

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

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

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

Впрочем, когда речь идет о статистике интернет-продаж наркотиков, далеко не всегда подразумеваются именно черные рынки. Покупка марихуаны может быть вполне легальной – в нескольких странах (Нидерланды, ряд латиноамериканских государств), а также в нескольких штатах и городах США. Одно из этих мест – штат Колорадо. Здесь разрешено выращивать марихуану, употреблять ее, продавать, покупать, дарить. Но главная проблема бизнеса, связанного с марихуаной состоит в нежелании банковского сектора сотрудничать, даже тогда, когда все операции полностью легальны. Маршалл Хейнер, руководитель отдела продажи марихуаны по медицинским рецептам в Сан-Франциско, штат Калифорния (в Калифорнии марихуану можно употреблять только с разрешения врача), отмечает:

Марихуаны ежегодно производится на 2,5 миллиарда долларов, и до сих пор нет ни одного партнерства с банком».

Там, где банки не могут или не хотят прийти на помощь, отлично справляется биткойн. Именно после запуска первых интернет- площадок по продаже наркотиков биткойн получил свою первую известность. Более того, многие и до сих пор полагают, что биткойны – это такие деньги, которыми можно заплатить за наркотики в интернете. Невзирая на очевидную однобокость данного суждения, доля истины в нем все же есть. Анонимный и децентрализованный характер виртуальной валюты сделал ее идеальным средством для покупки наркотиков в сети. Его анонимность выгодна покупателю, а продавцу нет нужды связываться с наличными. Хейнер считает, что блоковая цепь может использоваться и для того, чтобы подтвердить происхождение и качество марихуаны (регистрация характеристик продукции в блокчейне). Однако, невзирая на все преимущества использования биткойнов в интернет-продажах марихуаны и отлаженный механизм реализации сделок, лицензированные производители и продавцы марихуаны отчасти опасаются пользоваться биткойнами как раз из-за их репутации. Чувствуя себя на грани легальности, они с оглядкой используют валюту, которая у множества людей ассоциируется с темной частью интернета.

Нынешнее положение дел можно изменить, если представители биткойн-сообщества и производители марихуаны встретятся друг с другом, считают организаторы Crypto Cannabis Conference, которая состоится 24-25 октября 2015 года в Денвере, штат Колорадо. В числе участников – Калеб Чень, в настоящий момент преподающий курс по цифровой валюте в университете Никосии, Роджер Вер, известный как «Биткойн-Иисус» и другие эксперты в области биткойна, а также юристы, финансисты и специалисты по марихуане. Организаторы конференции планируют установить связи между представителями двух сообществ и рассмотреть возможные пути сотрудничества.

Данное событие, которое состоится при поддержке властей штата, наглядно демонстрирует интереснейший процесс перехода виртуальных рынков по продаже наркотиков и виртуальных валют из одной правовой плоскости в другую. Легализация марихуаны и, соответственно, ее продаж в интернете, в США происходит параллельно с процессом признания криптовалют, не только на бытовом, но и на правовом и государственном уровне. Еще несколько лет назад марихуану в США можно было приобрести только в злачных местах и темных переулках, а сегодня новый американский стартап Trees, занимающийся продажами медицинской марихуаны за биткойны, планирует запустить сервис доставки своей продукции с помощью летающих дронов. Сфера правового регулирования лишь вынужденно фиксирует определенные экономические тенденции и сдвиги в общественном сознании, в итоге то, что когда-то было вне закона, становится правовой и бытовой нормой современной действительности — эти процессы происходят, и, похоже, их уже остановить.

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

ссылка на оригинал статьи http://geektimes.ru/post/261108/