...

суббота, 4 октября 2014 г.

Как я логгер собирал на SD card Shield V2.0

Привет, Хабр!

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


Задача, действительно, была простейшая. Но как всегда все срочно. Тратить деньги на промышленный логгер не хотелось, а в запасе оказалась платка Ардуино УНО. Пятиминутное прогугливание вопроса и нашелся подходящий шильдик, который прекрасно подходил для этой задачи. Промышленный газоанализатор ДОГ-4, который необходимо было подключить к логгеру, имеет лишь выводы на бумажные самописцы. Выводы токовые 0..5 мА для каждого анализируемого газа (NO и SO2).

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

Найденный в Интернете шильдик был заказан в этом (кстати, очень неплохом) магазине и буквально на следующий день был доставлен в Томск из Новосибирска. Шильдик по описанию очень удобный, имеет площадку для прототипирования, которую я надеялся использовать в этом простом проекте. Достаточно нагрузить токовые выводы самописцев, к примеру, на резисторы 1 кОм, подтянутые в земле и получишь цифровые данные с прибора для всего диапазона измерений. Разрядности ADC в 10 бит Ардуино вполне устраивало технологов (еще бы, с бумажных лент скалывать данные куда веселее). Пришла посылка, красивая упаковка, описание как в интернет магазине. Указано наличие площадки для прототипирования, на которую необходимо было подпаять лишь два резистора.





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

Шильдик использует 4 пина Ардуино, согласно этой таблице. Здесь, слава Богу, ничего не напутано.




Уже задумавшись о том, чтобы начать самому программировать корректную работу данного устройства, я вспомнил о том, что в версиях Arduino IDE 1.0+ разработчики везде по какой-то причине стали использовать дефиницию #include «Arduino.h» вместо #include «WProgram.h» и поэтому старые библиотеки перестали работать в поздних версиях Arduino IDE. Вернувшись к библиотеке с сайта производителя я обнаружил, что именно по этой причине я не могу её «завести». Лечится ситуация достаточно просто. В файлах с расширениями .h и .cpp необходимо строку #include «WProgram.h» заменить на такую конструкцию

#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif


После этого библиотека заработает в любой версии Arduino IDE. Можете это сделать сами, а можно скачать уже поправленный вариант библиотеки по этой ссылке.


Окончательный код моего логгера для газоанализатора вряд ли будет интересен для поста, но привожу для ознакомления простенький пример. Так будет выглядеть рабочий код для записи данных на SD карту, который будет писать в файл каждые 5 секунд фразу «Hello, Habrahabr!»



#include "FileLogger.h"

// подключаем карточку к питанию 3,3 вольт на 8 пине
#define MEM_PW 8

void setup(void) {

pinMode(MEM_PW, OUTPUT); // Инициируем пин 8 и подаем питание на карту
digitalWrite(MEM_PW, HIGH);

}

void loop(void) {

byte buffer[] = "Hello, Habrahabr! \r\n";
unsigned long length = sizeof(buffer)-1; // Важно!
int result = FileLogger::append("data.log", buffer, length);

delay(5000); // ждем 5 секунд
}


Несколько важных замечаний. Перед тем, как начать запись необходимо отформатировать карточку (FAT16) и открыть пустой файл с названием, которое будет использоваться в программе. В примере это data.log. Не выдергивайте карту из шильдика на «горячую». Лучше предусмотреть программное отключение питания командой digitalWrite(MEM_PW, LOW);

Если ваши данные переменной длины, используйте вычисление длины строки. В примере это unsigned long length = sizeof(buffer)-1. Неточности в длине фраз приводят к сбою процесса записи и можно получить вместо данных битый файл.


Выводы


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


Всем хорошего дня!


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 http://ift.tt/jcXqJW.


[recovery mode] Штраф до 1 млн за разработку и использование альтернативных платёжных систем

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

Кроме того, штрафы вводятся за «умышленное распространение информации, позволяющей осуществлять эмиссию денежных суррогатов и операции с их использованием». Законопроект разработан в соответствии с поручением первого вице-премьера российского правительства Игоря Шувалова от 02.06.2014.






Подробный анализ законопроекта представлен в статье cnews.


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


За последние 1,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 http://ift.tt/jcXqJW.


57 лет назад был запущен первый в мире искусственный спутник Земли


4 октября 1957 года СССР вывел на орбиту Земли первый искусственный спутник. Спутник получил название ПС-1, а на орбиту его выводила ракета-носитель Р-7, с космодрома Байконур. Тогда этот космодром именовали научно-исследовательским полигоном министерства обороны СССР.


Сам спутник был небольшим, его диаметр составляет 58 сантиметров, а весил спутник 83,6 килограмма. ПС-1 оснастили четырьмя антеннами (благодаря которым он и получил свой узнаваемый внешний вид), с целью передачи сигналов. Устройство состояло из двух отполированных алюминиевых (вернее, использовался сплав алюминия) полусфер, которые были соединены между собой болтами. Края герметизировались резиновой прокладкой.


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


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




Торжественная статья в «Правде», посвященная успешному запуску


Параметры полета спутника:



  • Начало полёта — 4 октября 1957 в 19:28:34 по Гринвичу

  • Окончание полёта — 4 января 1958

  • Масса аппарата — 83,6 кг;

  • Максимальный диаметр — 0,58 м.

  • Наклонение орбиты — 65,1°.

  • Период обращения — 96,7 мин.

  • Перигей — 228 км.

  • Апогей — 947 км.

  • Витков — 1440


Сейчас на Марсе и вокруг него работают аппараты, сложность которых на порядок, если не больше, превышает сложность конструкции ПС-1. За пределы Солнечной системы вышел «Вояджер», «Кассини» исследует Титан и Сатурн, в открытом космосе работают орбитальные телескопы. Но по значимости события запуск первого спутника сравним разве что с полетом человека в космос. Остается только желать, чтобы космическая индустрия и связанные с ней науки продолжали развиваться, и человек уделял больше внимания космосу, чем дисплею своего модного смартфона.


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 http://ift.tt/jcXqJW.


Создаем 2D платформер при помощи Unreal Engine 4. Часть 1,5 — Прыжки



Полноценная «часть 2» будет посвящена боевой системе, но пока еще я не довел ее до нужного состояния, но и вовсе ничего не писать 2 недели не хотелось, так что пока займемся небольшим расширением способностей нашего персонажа.

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


Небольшие изменения в проекте:


  • Нашел новую раскадровку, переделал все спрайты Алукарда, теперь, как и положено, он в красном

  • Добавил небольшие платформы, сделанные из текстуры пола для отработки прыжков

  • Добавил фоновые картинки для атмосферы :)






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


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

Что бы переключить анимацию, нам надо знать, что была нажата клавиша, так что добавляем на ввод булевую переменную и переводим в состояние истинности. Таким образом, отследим нажатие клавиши, после идет прыжок и обнуление (false) нашей переменной, с задержкой — анимация ведь занимает какое-то время.

На освобождение клавиши добавим другую булевую переменную — она нам потребуется позже. В итоге получаем простой алгоритм:


Jumping



Расширяем нашу систему анимаций. У нас пояпилась новая возможность, так что добавим ветвление к выбору анимаций: проверим, может ли персонаж прыгать (встроенная функция, спасибо ребятам из Epic Games), если прыгать может — мы за земле, идем в уже существующую ветвь, если нет — мы в воздухе и анимации нужны другие.


Ветвь смены анимаций прыжка





Логика тут простая: если мы прыгать не можем, то надо определить по какой причине — мы либо прыгаем, либо падаем. В первом случае последовательно проигрываем прыжок/падение, во втором только падение.

Тестируем:


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 http://ift.tt/jcXqJW.


Автомобильная аудиосистема, как гарнитура для телефона

Имея в распоряжении автомобиль малого класса и используя штатную магнитолу можно нарваться на отсутствие USB, для проигрывания музыки с флешки и на отсутствие Bluetooth, для использования громкой связи, проигрывания музыки с телефона.

Частично выручало использование AUX IN разъёма, с простым кабелем 3-pin Jack 3.5 mm — 3-pin Jack 3.5 mm. Таким образом, автомобильная аудиосистема использовалась как динамики для телефона. Такое использование связано с некоторыми неудобствами:



  • для переключения музыки приходится использовать сенсорный дисплей телефона, при этом приложение музыки оказывается свернутым, экран выключен, система под паролем;

  • с ответом на звонок несколько проще, но сенсорный дисплей никто не отменял;

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




Мои пешие прогулки изначально не были связаны с вытаскиванием телефона из кармана для переключения музыки или ответа на звонок, а микрофон располагался достаточно близко. Выручала проводная гарнитура. Почему вместо маленьких динамиков от наушников не подсоединить бы большие динамики от автомобиля? Конечно, всё обошлось штекером 3-pin Jack 3.5 mm, но автомобильная аудиосистема стала гарнитурой для телефона.



Из подручных средств в наличии имелась старая гарнитура Sony Ericsson MH-650 из комплекта Sony Ericsson Xperia arc S и короткий кабель 3-pin Jack 3.5 mm — 3-pin Jack 3.5 mm. Из этих элементов было решено сделать кабель 3-pin Jack 3.5 mm — 4-pin Jack 3.5 mm, с микрофоном и кнопкой. На этапе проверки работоспособности гарнитуры на новой модели телефона мне пришлось узнать, что такое OMTP и CTIA. Оказалось, что на Xperia arc S использовался стандарт OMTP, а в новом Sony Xperia Z1 Compact — CTIA. Конечно, можно найти лёгкий путь:


  • существуют специальные переходники OMTP <-> CTIA;

  • купить новую гарнитуру с распиновкой CTIA.




Тогда пришлось бы переделать только одну часть, выпаяв динамики, а на их место припаяв Jack 3.5 mm.

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

На основе статьи с сайта PCTUNER, Модификация гарнитуры Sony MH750 под смартфоны 2011 года, где описана переделка гарнитуры из CTIA в OMTP, было совершено обратное преобразование, из OMTP в CTIA.


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


Исходно, соединения контактов выглядят таким образом:



Перед выполнением работ с гарнитурой убедитесь в соответствии маркировки контактам тестером!


Необходимо поменять местами провода приходящие на M+ и M-, а между контактными площадками M- и G сделать перемычку. Получаем гарнитуру переделанную из OMTP в CTIA:



Осталось отрезать 3-pin Jack 3.5 mm, с проводом необходимой длины и припаять данный провод к плате. Контакты должны соединяться следующим образом:



Можно все закрепить, залить термоклеем и убрать плату в корпус. Как это получилось у меня:




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


При использовании такого устройства исчезли неудобства описанные в начале статьи, а ещё нашлась дополнительная функция. При удержании кнопки на кабеле-гарнитуре запускается приложение Google Поиск, с активной записью голоса. Как известно, сейчас Google Поиск — не просто голосовой поиск, но и замечательная программа для голосового управления телефоном. Можно позвонить («Позвонить %контакт%»), отправить СМС («Отправить СМС %контакт% с текстом %текст%»), построить маршрут в Google Картах, запустить приложение и, я думаю, некоторые другие вещи. В целях безопасности, если на устройстве стоит пароль, то управление голосом недоступно, пока его не разблокируешь. Для быстрой разблокировки можно использовать модуль NFC LockScreenOff Enabler для Xposed и NFC-метку. Достаточно будет включить экран и провести телефоном над NFC-меткой. Метку можно вытащить из обычного проездного на метро, размочив карточку водой. Такой метод разблокировки будет доступен только тем у кого есть Root-права, установленный Xposed и, конечно, модуль NFC LockScreenOff Enabler. На просторах Google Play ещё встречалось приложение, позволяющее разблокировать устройство при получении уникального кода NFC-метки, но в заблокированном Android-устройстве NFC-модуль в телефоне выключен, поэтому, для работы приложения, необходимо измененное приложение, отвечающее за работу NFC-модуля (обычно это NfcNci.apk), которое найти, для некоторых устройств, несколько сложнее, чем установить Xposed, тем более для замены NfcNci.apk также требуются root-права.


В качестве аналога можно использовать обычную Bluetooth-гарнитуру, с 3-pin Jack 3.5 mm разъёмом для подключения наушников. Данный аналог имеет преимущества в том, что его можно использовать сразу, без трудозатрат, а телефон не надо постоянно вручную подключать. Всё-таки не лишен недостатков, Bluetooth-гарнитуру надо заряжать, включать/выключать перед началом использования. В связи с необходимостью зарядки, её нельзя постоянно хранить в машине, а если её заряжать в машине, то она будет занимать ценную розетку 12 В, через которую обычно заряжается телефон.


Недавно, нашёл аналоги такого кабеля-гарнитуры, Beats RemoteTalk Cable, за 29.95$ и Griffin Headphone Control Adapter, за 9.99$ (цена со скидкой 10$), причём для Griffin требуется ещё кабель 3-pin Jack 3.5 mm — 3-pin Jack 3.5 mm. Сделать самому гораздо приятнее, тем более, цена Beats RemoteTalk Cable, в России, составляет 1490 руб, которые можно потратить с большей пользой.


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


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 http://ift.tt/jcXqJW.


JavaScript. Вопросы на собеседовании

Не так давно озадачился поиском работы, в связи с чем посетил n-нное количество собеседований и услышал много интересных вопросов. По сети гуляет много статей с вопросами по JS, поэтому постараюсь выбрать вопросы, которые ещё не видел. Здесь нет вопросов типа Что такое замыкание?, Наследование в JavaScript или Сделайте ajax запрос на VanillaJS. Кстати советую поискать ответы на эти вопросы, прежде чем читать статью :) Под катом вопросы типа «с подвохом». Вряд ли какой-то из них попадётся вам, но, надеюсь, статья настроит вас на «подвоховое» мышление, и напомнит некоторые скользкие места и подводные камушки javascript.


Hoisting




Hoisting — всплытие переменных объявленных в функции.Здесь можно подробно узнать о том как это бывает.

А вот интересный вопрос:

(function() {
f();

f = function() {
console.log(1);
}
})()

function f() {
console.log(2)
}

f();


Что мы увидим в консоли?


Ответ
Объявленная в gs function f() всплывёт, соответственно при вызове f внутри анонимной функции мы увидим не ReferenceError, как кто-то мог предположить, а двойку в консоли, при повторном вызове переменная f уже ссылается на функцию которая печатает 1.

Результат:



< (function() {
f();

f = function() {
console.log(1);
}
})()

function f() {
console.log(2)
}

f();
> undefined
2
1





Если вы сходу уловили подвох предыдущей задачи — не обольщайтесь. Вот ещё интересный пример кода:



(function() {
var x = 1;

function x() {};

console.log(x);
})()


Что теперь мы увидим в консоли?


Ответ
Функции объявленный при помощи function declaration имеют больший приоритет и понимаются выше var. Поэтому интерпретатор сначала выполнит function x() {};, а затем var x = 1;

< (function() {

var x = 1;


function x() {};


console.log(x);

})()


> undefined

1




Ну и напоследок. Напомню советы Дугласа Крокфорда: избегать слабых сторон языка и использовать сильные и использовать JSLint.

Чтобы не наткнуться на такие сюрпризы можно взять за привычку самому выносить var в начало функции и объявлять функцию через function expression


Передача по ссылке


Наверное все знают что все объекты передаются в javascript по ссылке:



var obj = {
a: 1
}

(function(obj) {
obj = {
a: 2
};

})(obj);

console.log(obj.a);


Не знаю как вы, а я засыпался на этом вопросе. Я точно знал что объект не измениться после вызова функции, но объяснить почему так и не смог.


А вот почему!

При вызове анонимной функции создастся локальная переменная obj в её области видимости. А затем создаётся новый объект {a : 2}, ссылка на который попадает в локальную переменную obj, но переменная из верхнего скоупа будет всё так же ссылаться на старый объект.



Контекст выполнения


Контекст выполнения функции — мощный и выразительный механизм, если умело его использовать. Правда есть несколько моментов о которых не стоит забывать. Простой пример. Рассмотрим класс который логгирует некие действия.



Logger = function(logFn) {

_logFn = logFn;

this.log = function(message) {
_logFn(new Date() + ": " + message);
}
}

var logger = new Logger(console.log);

logger.log("Hi!");
logger.log("Wazzup?");


Что будет в консоли? Как починить?


Ответ
В консоли мы увидим TypeError: Illegal invocation

А всё потому что при вызове logger.log(), контекст выполнения функции — logger

Чтобы починить можно вспомнить про встроенные методы функций .apply(), .call(), .bind()



< rightLogger = new Logger(console.log.bind(console))
> Logger {log: function}
< rightLogger.log("It's works")
> Sat Oct 04 2014 00:32:49 GMT+0400 (MSK): It's works





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 http://ift.tt/jcXqJW.


[Перевод] Reddit попросил своих удаленных разработчиков переехать в Сан-Франциско или они будут уволены

У Reddit большие планы по расширению своей плошадки в сторону «платформы для распространения новостей» … которые, неожиданно, накладывают ограничения на то, где работники должны жить. На днях Reddit поставил ультиматум своим удаленным работникам: или они переезжают в Сан-Франциско (где у Reddit офис), или будут уволены. Об изменении политики в отношении удаленных работников опубликовал в своем Twitter основатель Basecamp — David Heinemeier Hansson.

Guess reddit's "suitable talent only exists in San Fran" approach explains why they need $50M to hire more devs. Small pond, big trawler.— DHH (@dhh) 1 октября 2014



Новость появилась сразу на следующий день как Reddit сообщил о получении 50$ миллионов инвестиций. Yishan Wong (Reddit CEO) вчера убеждал лояльных пользователей Reddit, что новые инвестиции не принесут никаких отрицательных изменений на сайте и не заставят Reddit меньше беспокоиться и сообществе.


Wong подтвердил в Twitter об изменении политики в отношении работников, которое, как он сказал, было принято независимо от полученных инвестиций. “Нашим намерением было собрать всю команду в одном месте, что бы получить 100% командной работы. Наша цель сохранить каждого члена команды" — написал Wong.



@dhh Intention is to get whole team under one roof for optimal teamwork. Our goal is to retain 100% of the team.— Yishan Wong (@yishan) 1 октября 2014



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


Вице-президент Elance-oDesk по услугам и инженерному обеспечению (Senior Vice President of Product and Engineering) Stephane Kasriel уже опубликовал свое мнение, в котором заявил, что Elance-oDesk будет рад нанять уволенных из Reddit сотрудников.

http://ift.tt/1uksiox


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 http://ift.tt/jcXqJW.


пятница, 3 октября 2014 г.

Как я перестал бояться и полюбил Windows 10


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

настал черёд запустить свой любимый браузер, например, Opera.


Сколько действий нужно будет произвести, чтобы получить готовый к использованию софт?

Первый ваш ответ будет, скорее всего, таким:


1. Открыть Internet Explorer

2. Набрать в адресной строке opera.com (или найти сайт через поисковик)

3. Найти ссылку на закачку, а потом скачать инсталлятор

4. Запустить файл

5. Согласиться с лицензией

6. Кликнуть несколько раз кнопку «Далее»

7. Дождаться окончания установки

8. Запустить браузер


Некоторые знающие люди предложат следующий вариант:

1. Открыть проводник.

2. Ввести в строке пути «ftp.opera.com»

3. Найти инсталлятор и повторить действия с № 4 по № 8.


А вы не забыли, что у вас Windows 10 и вы можете решить задачу вот так:


Да, сразу. Из коробки.


Что такое OneGet




OneGet — унифицированный интерфейс для создания и дистрибуции программ. С помощью него пользователи Windows 10 смогут искать и устанавливать программы очень легко и быстро. OneGet — модуль к PowerShell, он будет польностью интегрирован в Windows 10 и добавит неограниченные возможности автоматизации.

Кого благодарить




Команда NuGet сейчас состоит из трёх человек, они тесно работают с командой Chocolatey и стараются провести интеграцию в Windows.

Как это работает




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

Что грядёт




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

Установить программу. Без маркета. Без подтверждений. Сделал список, отошёл за кофе и вернулся, а там всё уже готово.

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


Где-то автор слукавил




Не совсем, так как Windows 10 сейчас в статусе Technical Preview, то модуль OneGet (конфиг NuGet) не протестирован и скорее всего сейчас работать не будет.

В финальной версии (и даже раньше) всё будет работать.

Полезные ссылки:

Установить OneGet на Windows 8.1

Исходный код OneGet на GitHub

Справочник по OneGet на русском


Просьба об ошибках и опечатках сообщать в личку.


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 http://ift.tt/jcXqJW.


Презентация нового электромобиля Tesla состоится 9 октября


Вчера глава компании Tesla Motors Элон Маск написал в свой Twitter о важном событии в жизни компании: презентации новой модели электромобиля. К сожалению, детали не были указаны — неизвестно даже, какая именно модель будет показана.


Скорее всего, будет проведена презентация Model D — модели, которую можно считать наследницей самой популярной версией электромобиля Tesla, Model S. Кроме того, Элон Маск сообщил о намерении показать «что-то еще» — и вот об этом «что-то» неизвестно ничего :)


Вполне может быть, что будет рассказано о новой фабрике аккумуляторов для автомобилей Tesla — о чем уже не раз писали на Хабре. Ранее уже сообщалось, что фабрика будет построена в Неваде. Еще одна догадка — будет показана система Driver Assist — это новая система автоматического управления автомобилем. В Tesla ранее уже говорили о том, что компания работает над надежной системой автоматического управления авто, причем до появления серийных роботов автомобилей осталось еще 5-6 лет.


Кроме всего прочего, компания заявляла и о планах выпуска компактного электрического седана с названием Model III. Габариты Model III должны быть на 20% меньше размеров Model S, а заряда аккумулятора должно хватить на 320 километров. Цена авто будет составлять 35 тысяч долларов США (30 тысяч фунтов стерлингов для Великобритании). В Model III, насколько известно, не будет алюминиевой платформы, как у Model S, плюс будут установлены батареи нового поколения. Как раз такие аккумуляторы и будут выпускать на новой фабрике Tesla.


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 http://ift.tt/jcXqJW.


Тестируем VoCore в хакспейсе — микро-компьютер с WiFi на Linux/OpenWrt


VoCore — это такой микрокомпьютер с Linux/OpenWrt на борту, который совсем недавно с помощью краудфандинга собрал более $100к (из заявленных $6k). Внутри этой штучки: MIPS процессор 360МГц, WiFi 802.11n, Ethernet 10/100Мбит/с, и куча GPIO. Все уместилось на платке размерами 25х25мм!


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


А самое главное, мы объявляем конкурс на раздачу трех VoCore тем, кто предложит самые лучшие идеи его применения. Подробности, опять же, под катом!


Более развернутая характеристика VoCore:



  • прошивка — OpenWrt;

  • процессор — RT5350(360MHz MIPS) (недавно был пост Исследуем китайские роутеры на RT5350);

  • ОЗУ — 32Мб SDRAM;

  • ПЗУ — 8Мб SPI Flash;

  • интерфейсы — 10/100M Ethernet, USB, UART, I2C, I2S, PCM, JTAG, >20 GPIO;

  • размер — 25х25мм;

  • цена — ориентировочно 80 Юаней в Китае (около 500 руб).


Итак, у нас есть VoCore (мы получили пред-релизные версии), и есть твердое намерение чем-нибудь поуправлять, например, светодиодом.


План такой:



  1. подключить питание к VoCore

  2. подключиться по Wi-Fi к VoCore и зайти через SSH в OpenWrt

  3. собрать на макетке простую схему светодиода резистором

  4. подключить эту схему к GPIO выходу VoCore

  5. реализовать управление GPIO выходом

  6. мигать светодиодом


Приступим.


Первым делом нам надо найти спецификации на пины этой платы:



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


1. Подключаем питание




Мы использовали четыре батарейки по 1.5В. Получаем в сумме 5.5В. VoCore можно питать напряжением от +3.5В до +6.0В.

Поскольку на VoCore пины имеют шаг 1.27, а не 2.54, то для работы с ними пришлось применить специальные «крокодилы».



Так получилось, что в нашем примере мы минус поставили на HOLE1 (техническое отверстие для крепления платы) — оказалось, что оно работает как «земля». А нижние левые ноги GND, напротив, не были соединены с землей.


2. Подключаемся к VoCore по Wi-Fi и заходим по SSH




После включения питания — ожидаем порядка 30 секунд пока VoCore загрузится (Linux) и делаем поиск по Wi-Fi. Подключаемся в WiFi точке c SSID «VoCore» (кто бы мог подумать).

После этого заходим ssh на IP 192.168.61.1 и логинимся с реквизитами root/vocore.


Видим знакомую картинку:


Теперь мы находимся внутри OpenWrt/Linux — внутри компьютера размером с монетку!


3. Создаём на макетке схемы для светодиода




На макетной плате (без использования паяльника) сделаем простую схему включения светодиода (не забудем про резистор).

Вот схема:


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


4. Подключаемся к GPIO VoCore




Для управления светодиодом будем использовать GPIO7.

Подключаем согласно схеме:


Вот наш макет в сборе:


5. Инициализируем GPIO




Для работы с GPIO выходами, мы будем использовать GPIO Sysfs — это механизм работы с GPIO как с файловой системой.

Для управления GPIO выходом — надо будет просто создать соотв. файл и записывать в него 0 или 1.


Выполняем следующие действия в консоли:



cd /sys/class/gpio
echo 7 > export
cd gpio7
echo out > direction




Мы перешли в виртуальную файловую систему — "/sys/class/gpio", подключили «7»-ой GPIO, и указали его направление «out».

6. Зажигаем и гасим светодиод




Теперь, когда порт настроен, мы можем изменять значение с помощью записи значения (1 или 0) в файл «value».

Зажигаем светодиод, передавая на GPIO7 истину:



echo 1 > value


Ну и гасим (выдача 0):



echo 0 > value


Прочитать подробнее про GPIO sysfs здесь: GPIO Sysfs Interface for Userspace.


Вот, что получилось в конце:


Видео





Конкурс




У нас в хакспейсе есть 3шт VoCore, которые мы готовы бесплатно выслать. Для этого мы объявляем Конкурс. Основная цель конкурса — посмотреть насколько проект VoCore станет интересен читателям хабра.

Конкурс будет состоять из двух этапов. Первый этап продлится с настоящего момента по 12.10.2014. За это время требуется сформулировать идею проекта, либо показать наработки с аналогичными системами (на базе OpenWrt или с использованием других микрокомпьютеров).


Заявку можно подать заявку двумя способами:

1) опубликовав комментарий под этим постом;

2) прислав описание на почту hackspace@makeitlab.ru


На втором этапе мы проведем голосование по 10 понравившимся работам, и выберем из них три лучших ( с 13.10.2014 по 19.10.2014 ). При этом, два победителя будут выбраны по наибольшему числу голосов, а одного выберем субъективно за наиболее всего понравившийся проект.


В заявке приветствуется:

1) наличие готового аналога на базе OpenWrt;

2) наличие аналога на прочих микрокомпьютерах;

3) подробное описание и история создания;

4) ссылки на код, если проект открытый.


Анкета




Так же, у нас появилась идея заказать партию VoCore прямо на заводе в Китае. Чтобы это сделать, потребуется оценить потенциал рынка. Если у вас появился интерес в данном девайсе, не поленитесь, заполните пару поле в этой анкете. Чем больше желающих появится, тем дешевле выйдет VoCore!

На последок, пара полезных ссылок:


Проект VoCore на IndieGoGo

Официальный сайт проекта VoCore


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 http://ift.tt/jcXqJW.


Golf от Moscow.pm для всех


Всех с пятницей! По итогам недавно прошедшей встречи Moscow.pm я хочу предложить всем желающим посоревноваться в решении задачки.



Гольф (англ. golf) — спортивная игра, в которой отдельные участники или команды соревнуются, загоняя маленький мячик в специальные лунки ударами клюшек, пытаясь пройти отведённую дистанцию за минимальное число ударов.



Wikipedia

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




Домино́ — игра, в процессе которой выстраивается цепь костяшек («костей», «камней»), соприкасающихся половинками с одинаковым числом очков. Таким образом каждая костяшка характеризуется парой чисел, не важно в каком порядке.



Wikipedia

Задача. Найти максимально длинное кольцо, которое можно составить из списка предложенных вам костяшек или вывести 0, если их нельзя закольцевать.


Входные данные: Строка из пар чисел от 0 до 6, разделенных пробелом. Каждая пара — одна костяшка.

Пример: 01 11 12 22 31 32

Данные подаются на STDIN: cat data | golf.pl

Пример ответа: 11 12 22 23 31


Проверить работоспособность решения можно приложенным набором тестов, пока только для perl (присылайте свои пул-реквесты):

prove test.pl


Размер решения можно посчитать с помощью скрипта golfcount.pl:

perl golfcount.pl golf.pl


Решения присылайте на dzirtik@gmail.com с темой «Golf 1410». Крайний срок приема решений 31 октября 2014 23.59. Решение может быть на любом языке программирования. Для лучших решений у нас заготовлены призы.


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 http://ift.tt/jcXqJW.


Клавиатура для iOS 8 позволит печатать фразами

Привет, Хабр!

На днях Techcrunch опубликовать новость о том, что для iOS появится специальная клавиатура Phraseboard. Вам это ничего не напоминает?


image


Конечно же, это та самая идеальная клавиатура!


image


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


Phraseboard уже доступна для скачивания в магазине Apple.



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 http://ift.tt/jcXqJW.


[recovery mode] ФСКН внёс одну из крупнейших торговых площадок Китая Aliexpress в реестр запрещённых сайтов

Итак, маразм закон крепчал и вчера (2 октября) ФСКН внёс одну из крупнейших торговых площадок Китая Aliexpress в реестр запрещённых сайтов (домен ru.aliexpress.com).

image


Заблокированным оказался русский субдомен «ru.aliexpress.com», личный кабинет доступен.

А что думают Хабровчане по этому поводу?


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 http://ift.tt/jcXqJW.


[Перевод] 9 самых успешных стартапов Стэнфорда

Расположенный в самом сердце Кремниевой долины Стэнфордский университет считается одним из лучших американских вузов, и при этом, самым дорогостоящим. Например, один год обучения в бакалавриате стоит студенту $50-70 тысяч, а двухгодичная программа MBA в Стэнфорде по совокупности затрат обходится в $200 тысяч.


Instagram: Майкл Кригер (первый слева), Кевин Систром (третий слева)


Однако это не отпугивает желающих получить высшее образование в заведении, где самый высокий в мире процент преподавателей (на 6 студентов – 1 преподаватель) и 16 из них — Нобелевские лауреаты, а еще 4 — обладатели Пулитцеровской премии. Читать сюда лекции приезжают Билл Гейтс и бывший глава Hewlett Paccard Карли Фиорина, почетным профессором Стэнфордского университета был живший неподалеку в Пало-Альто Стив Джобс, сам так и не получивший высшего образования.


Кроме того, во многом благодаря близости к основным технологическим компаниям Калифорнии (и территориально, и посредством работающих в них выпускников), Стэнфордский университет стал своего рода инкубатором кадров для Кремниевой долины. Здесь учились Билл Хьюлетт и Дэйв Паккард, основатели Google Сергей Брин и Ларри Пейдж, Лен Босак и Сенди Лернер, учредившие компанию Cisco Systems, президент Yahoo! Марисса Майер и создатель PayPal Питер Тиль.


Собственно, сама долина построена на земле, принадлежащей Стэнфорду. В 50-х университет, который сегодня зарабатывает более миллиарда долларов в год, испытывал финансовые трудности, хотя располагал обширными неиспользуемыми землями, продавать которые не имел права согласно завещанию своего основателя Леланда Стэнфорда. Тогда руководство университета нашло соломоново решение, решив сдавать земли в долгосрочную аренду высокотехнологичным компаниям. Первой в технологическом парке Стэнфорда обосновалась Varian Associates. Вскоре ее примеру последовали Eastman Kodak, General Electric, Lockheed, Hewlett-Packard и многие другие.


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


Instagram. Создатели знаменитого фотосервиса Кевин Систром и Майк Кригер познакомились через сеть выпускников Стэнфорда


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



«Когда говорят, что колледж не стоит тех денег, которые за него надо платить, я однозначно с этим не согласен», — однажды сказал Систром в интервью Forbes. «Опыт учебы и полученные во время нее знания, которые в данный момент могут показаться необязательными, в конечном итоге пригодятся вам снова и снова».



В апреле 2012 года Систром и Кригер продали Instagram компании Facebook за $1 миллиард.

Trulia. Соучредители популярного real estate-сервиса Пит Флинт и Сами Инкинен встретились во время занятий в Высшей школе бизнеса



Как это часто бывает, идея родилась, как плод собственных исканий. Флинт и Инкинен решили создать Trulia, когда столкнулись с трудностями при съеме жилья в Пало-Альто. Лидирующий в США онлайн-агрегатор по недвижимости был разработан за два семестра в стэнфордском классе Startup Garage.

В следующий понедельник после выпускного у Флинта и Инкинена был назначен ряд встреч с потенциальными инвесторами. По состоянию на июнь 2014 года, Trulia посещают ежемесячно 54 миллиона пользователей. В июле этого года Trulia был куплен Zillow за $3,5 миллиарда.


StubHub. Идея онлайн-маркета билетов на мероприятия была представлена из конкурсе бизнес-планов в Стэнфорде



Знакомство Эрика Бейкера и Джеффа Флура состоялось в Высшей школе бизнеса Стэнфорда. Выяснилось, что у обоих был опыт продаж билетов онлайн. Через некоторое время Флур и Бейкер подали заявку бизнес-плана сервиса с названием Needaticket.com на конкурс бизнес-планов. После того, как план вышел в финал, они отозвали его из конкурса, а в 2000 году Флур оставил учебу, чтобы целиком посвятить себя проекту. Сайт StubHub, который был разработан ими в компьютерных классах Стэнфорда, через некоторое время стал одним из крупных игроков на рынке продаж билетов на спортивные и развлекательные мероприятия. В 2007 году компания была куплена eBay за $ 300 млн.


Loopt. Популярный геосоциальный сервис был основан тремя второкурсниками Стэнфорда



Сэм Альтман, Ник Сиво и Элок Дешпанди продумали концепцию будущего Loopt на второй год совместной учебы. Вскоре после того, как было разработано приложение, все трое бросили колледж. В 2012 году Loopt был поглощен Green Dot Corporation за $ 43,4 млн, а Альтман теперь известен как президент самого перспективного технологического инкубатора Y Combinator. В этом году он вернулся в Стэнфорд уже в качестве руководителя класса «Как создать стартап», преподавать в котором будут Пол Грэм (Viaweb), Питер Тиль (PayPal), Марк Андреессен (Netscape), Рон Конвэй (ангел-инвестор, Google на ранней стадии и многие другие) и СЕО Yahoo! Марисса Майер.


Bonobos. Брайан Спали и Энди Данн придумали свой интернет-магазин мужских брюк в стэнфордской Высшей школе бизнеса



Легенда гласит, что Спали cшил первые брюки Bonobos, ставшие прототипом, в доме, в котором сооснователи жили в университетском кампусе. Спали позже стал стилистом Trunk Club, а Данн остался на посту генерального директора Bonobos, которая в итоге недавнего раунда финансирования собрала 55 млн долларов.


Snapchat. Соучредители Эван Шпигель и Бобби Мерфи жили в одном коттедже землячества Kappa Sigma



«Мы не были крутыми», — рассказывал Мерфи Forbes – Но работали над тем, чтобы ими стать». Сегодня Snapchat имеет более 100 млн зарегистрированных пользователей и близок к завершению раунда финансирования в 20 миллионов долларов при оценке в $10 млрд.


Lytro. Рен Нг разработал технологию камеры Lytro, когда писал в Стэнфорде докторскую диссертацию



Нг получил в Стэнфорде университете степень бакалавра, магистра и защитил докторскую, в основу которой как раз и легла технология светового поля, затем успешно примененная при создании фотоаппарата Lytro.Во время празднования 40-ой годовщины кафедры компьютерных наук Нг познакомился с основателем K9 Ventures и таким же выпускником Ману Кумаром, в результате чего компания Lytro получила мощный импульс для развития.


Pulse. Создатели сервиса только поступили на отделение компьютерного дизайна, когда был выпущен первый iPad. Увидев в его появлении простор для деятельности, они взялись за дело



Анкит Гупта и Акшай Котари начали разработку своего новостного агрегатора в тот день, когда Apple представила миру свой планшетный компьютер, и уже через несколько месяцев на WWDC Стив Джобс отметил Pulse, как одно из лучших приложений для iPad. В апреле 2013 года LinkedIn приобрела Pulse за $90 миллионов.


Coursera. Крупнейшая образовательная онлайн-платформа была была основана двумя профессорами Стэнфорда


Даффи Коллер и Эндрю Нг долгое время были коллегами на кафедре компьютерных наук Стэнфорда. Идея Coursera выросла из чрезвычайно популярного на кафедре класса компьютерного обучения, в котором Нг преподавал в 2011 году. 104 000 человек поступили в него через Интернет, более 46 тысяч выполнили по крайней мере одно домашнее задание, 13 тысяч из них получили сертификат прохождения курса. Сегодня Coursera предлагает пользователям более 600 бесплатных курсов, на сервисе зарегистрировано семь миллионов студентов. Нг недавно стал ведущим специалистом Baidu по научным исследованиям, Коллер остается президентом Coursera по сей день. Платформа продолжает успешно функционировать и привлекать миллионы инвестиций.



В силу многих факторов Стэнфордский университет доминирует среди ведущих высших образовательных заведений США по количеству успешных предпринимательских карьер, которые сделали его выпускники и студенты. К такому выводу еще три года назад пришла исследовательская фирма CB Insights, сравнив по этому показателю шесть высших школ — Стэнфорд, Гарвард, Калифорнийский университет в Беркли, Нью-Йоркский университет, Университет Пенсильвании и Массачусетский технологический институт.


И дело здесь не только в удачном географическом расположении посреди Кремниевой долины и высокой плотности бизнес-ангелов на квадратный метр. Кампус Стэнфорда – подходящее место для создания новой успешной компании, с его первоклассными инженерными и бизнес-программами, обширной базой выпускников, известных своей корпоративной спайкой, не уступающей гарвардской, и собственными бизнес-акселераторами (фонд StartX тратит ежегодно $1,2 млн на инвестирование стартапов, в которых хотя бы один из основателей является студентом Стэнфорда).


В России аналога такого учебного заведения, при всем уважении к ведущим отечественным вузам, к сожалению нет. Стартаперы по сути, варятся в своем соку в куда менее комфортной среде. Наша платформа коллективных инвестиций VCStart в меру своих возможностей помогает IT-стартапам обрести финансирование и в итоге сделать качественный шаг в своем развитии. Регистрируйте свои проекты, находите инвесторов, творите и развивайтесь. Welcome!


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 http://ift.tt/jcXqJW.


[Перевод] Свежий взгляд на Rust

Я программирую на Rust уже достаточно давно, но на самом деле это не имеет большого значения. Rust настолько динамичен, что стоит отвлечься на пару месяцев, и придётся писать уже на фактически другом языке. Однако одна вещь остаётся неизменной: вектор развития. С каждым обновлением, каждой модификацией язык становится всё лучше и лучше.

Изменениям всё еще не видно конца, но даже сейчас язык уже кажется более стабильным, чем несколько месяцев назад, и начинают появляться некоторые устойчивые шаблоны проектирования API. Я подумал, что настало время исследовать всё это поглубже и решил переписать мою библиотеку для redis.



Где ниша Rust?




Больше всего я работаю с тремя языками программирования: Python, C и C++. С последним у меня очень противоречивые отношения, потому что я никогда не уверен какую часть языка я должен использовать. Си прямолинеен, потому что прост. С++ же заключает в себе кучу особенностей, среди которых ты выбираешь множество используемых тобой, и в тоже время практически гарантированно кто-нибудь другой выберет что-то другое. И хуже всего, когда начинаются холивары. Я одинаково не испытаю любви ни к STL, ни к boost, причём началось это еще до того, как я связался с разработкой игр. И каждый раз когда всплывает эта тема, находится как минимум один человек, который заявляет, что я неправ и не понимаю сути языка.

Rust для меня как раз вписывается в область использования Python, C и C++, но занимает эту нишу в разных категориях. Python я использую для написания как небольших утилит, так и масштабируемых серверных приложений. И он устраивает меня потому, что у него большая экосистема, и когда что-то ломается, это можно очень быстро отладить.


У Python, в отличие от других динамических языков, есть одна интересная особенность: он очень предсказуем. Может быть это из-за того, что я в меньшей степени завишу от сборщика мусора, чем в других языках: Python для меня равен CPython, a CPython подразумевает подсчет ссылок. Я тот человек, который разбивает циклы введением слабых ссылок, и который добавляет проверку на количество ссылок до и после запроса, чтобы убедится, что циклы не образовываются. Почему? Потому что мне нравится, что можно объяснить, как работает система. Я не настолько сумасшедший, чтобы отключать cycle collector, но я хочу, чтобы всё было предсказуемо.


Да, Python медленный, у него большие проблемы с параллельным кодом, интерпретатор слабоват и иногда кажется, что он должен работать по-другому, но на самом деле мне это не доставляет больших проблем. Я могу что-то запустить, уйти на месяц, вернуться – и оно всё еще будет работать.


Rust повёрнут на работе с памятью и данными, в чём очень похож на С и C++. Но в отличие от этих двух языков он куда больше похож на Python с точки зрения программирования API из-за вывода типов и отлично написанной стандартной библиотеки, которая удовлетворяет все нужды программиста.


Биться об стену




Забавно, что в начале программирование на Rust похоже на постоянное битьё об стену. Да, это не Python, и множество вещей, привычных для него, не работают в Rust. В то же время это не C++, так что проверка зависимостей станет вашим самым большим врагом. Вы будете часто задумываться: ведь это же должно работать, так какого чёрта эта тупая штуковина думает, что знает что-то лучше меня, и запрещает мне это делать?

Правда в том, что borrow checker не идеален. Он защищает от опасностей, но порой слишком многое запрещает. Исходя из своего опыта, я могу сказать, что он на самом деле неправ гораздо реже, чем вы предполагаете; просто нужно начать думать немного по другому. И самое главное, что он порой предотвращает самые опасные ошибки проектирования, которые потом сложнее всего исправлять. Python использует GIL для работы с потоками, и он там действительно необходим с момента появления самого языка. Интерпретатор написан таким образом, что сейчас уже практически невозможно ничего исправить.


Если постараться, то можно ошибиться с принятием решения при распараллеливании и в Rust, но для этого действительно придется постараться. Язык заставляет больше думать, и я считаю, что это хорошо. Я не хочу опускаться до проповедования тезиса «ООП – ошибка на миллиард долларов», но считаю, что код, который пишут люди, по большей части зависит от языка программирования. Мы пишем объектно, потому что это просто в C++, Java, Python. Ага, и птицы становятся объектами класса «Животные». Если же отобрать такой инструмент, то ты начинаешь мыслить немного по другому, и это хорошо. Мощности CPU уже растут не так быстро, и уже бессмысленно рассматривать только один объект в единицу времени. Приходится больше рассуждать о коллекциях и необходимых преобразованиях.


Rust вдохновляет




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

Rust вдохновляет по многим причинам. И главная из них – он практичен. У меня есть опыт работы с Haskell, я пробовал Erlang, и ни один из них не похож на практичный язык. Я знаю, что множество программистов обожают их, но эти языки явно не для меня.


Rust же одна из тех вещей, которую может попробовать каждый, и это будет весело. Во-первых (пока вы не наткнётесь на баг компилятора), он не будет крэшится. И будет выдавать милые сообщения при ошибках компиляции. И еще у него есть менеджер пакетов с отслеживанием зависимостей, так что можно начать использовать чужие библиотеки не боясь наткнуться на поганую или уже несуществующую экосистему. Работа с пакетами в Python достаточно сильно эволюционировала за последние несколько лет, но это всё еще одна из самых разочаровывающих его частей. Cargo, пакетному менеджеру Rust, всего полгода, но у него есть постоянный мейнтейнер, и его классно использовать.


Даже инсталлятор высшего качества. Он предоставляет компилятор, утилиту для документирования и пакетный менеджер. И большой вклад в удовольствие от программирования привносит как раз инструмент для работы с документацией, который рождает отлично выглядящую справку «из коробки». Хотя я и хочу, чтобы он был чуть более похож на Sphinx, чем на javadoc, это действительно хороший задаток на будущее.


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


Проектирование API




Самое занимательное сейчас в работе с Rust – это поиск пути правильного и красивого написания API. Rust как язык несомненно сложнее многих других именно с этой точки зрения: как программист вы будете разрываться между написанием прямолинейного (как в языках системного программирования) и предоставлением красивого высокоуровневого интерфейса (как в Python).

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


Одна из таких «плюшек» – это чертовски классная система типов. Язык статически типизированный, но механизм выведения типов позволяет писать действительно красивый код. Например, мой драйвер для Redis позволяет писать так:



extern create redis;

fn main() {
let client = redis::Client::open("redis://127.0.0.1/").unwrap();
let con = client.get_connection().unwrap();

let (k1, k2) : (i32, i32) = redis::pipe()
.cmd("SET").arg("key_1").arg(42i).ignore()
.cmd("SET").arg("key_2").arg(43i).ignore()
.cmd("GET").arg("key_1")
.cmd("GET").arg("key_2").query(&con).unwrap();

println!("result = {}", k1 + k2);
}




И для сравнения код на Python:

import redis

def main():
client = redis.Redis('127.0.0.1', 6379)
pipe = client.pipeline()
rv = pipe \
.set("key_1", 42) \
.set("key_2", 43) \
.get("key_1") \
.get("key_2").execute()
k1 = int(rv[2])
k2 = int(rv[3])
print 'result = {}'.format(k1 + k2)

if __name__ == '__main__':
main()




Интересно, что хотя библиотека на Rust по размеру и «чистоте» походит на библиотеку на Python, она куда более низкоуровневая. Питоновская библиотека даёт каждому вызову отдельный метод, версия для Rust (потому что она молодая) – просто обёртка для low-level API, и запрос приходится создавать вручную как последовательность вызовов для каждого аргумента. Тем не менее конечный результат для пользователя выглядит так же хорошо. И всё же Rust требует немного больше обработчиков ошибок (хотя я избегал этого использованием unwrap, который заставляет приложение завершаться, но то же самое происходит и в версии для Python, где я так же пропускал проверку ошибок).

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


Однако это не лучшее, что мы можем сделать с помощью Rust: у него есть расширения компилятора, которые открывают целое море возможностей. Например, есть библиотека, которая проверяет команды Postgres SQL на правильность, rust-postgres-macros:



test.rs:8:26: 8:63 error: Invalid syntax at position 10: syntax error at or near "FORM"
test.rs:8 let bad_query = sql!("SELECT * FORM users WEHRE name = $1");
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
error: aborting due to previous error




И вот это действительно захватывающе.

P.S. Пообщаться на тему Rust API design можно в IRC-сети Mozilla на канале #rust-apidesign


Будущее




Настолько ли мощна концепция управления памятью в Rust, чтобы принять её как модель программирования? Я не уверен. Но я верю, что язык уже может стоять на ногах. И даже если народ решит, что borrow checker не нужен, мне кажется, это не помешает широкому распространению языка. Rust обещает быть отличным, и к тому же отлично работает без сборщика мусора.

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


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 http://ift.tt/jcXqJW.


[Из песочницы] Парсим на Python: Pyparsing для новичков

Парсинг (синтаксический анализ) представляет собой процесс сопоставления последовательности слов или символов — так называемой формальной грамматике. Например, для строчки кода:

import matplotlib.pyplot as plt




имеет место следующая грамматика: сначала идёт ключевое слово import, потом название модуля или цепочка имён модулей, разделённых точкой, потом ключевое слово as, а за ним — наше название импортируемому модулю.

В результате парсинга, например, может быть необходимо прийти к следующему выражению:



{ 'import': [ 'matplotlib', 'pyplot' ], 'as': 'plt' }




Данное выражение представляет собой словарь Python, который имеет два ключа: 'import' и 'as'. Значением для ключа 'import' является список, в котором по порядку перечислены названия импортируемых модулей.

Для парсинга как правило используют регулярные выражения. Для этого имеется модуль Python под названием re (regular expression — регулярное выражение). Если вам не доводилось работать с регулярными выражениями, их вид может вас испугать. Например, для строки кода 'import matplotlib.pyplot as plt' оно будет иметь вид:



r'^[ \t]*import +\D+\.\D+ +as \D+'




К счастью, есть удобный и гибкий инструмент для парсинга, который называется Pyparsing. Главное его достоинство — он делает код более читаемым, а также позволяет проводить дополнительную обработку анализируемого текста.

В данной статье мы установим Pyparsing и создадим на нём наш первый парсер.




Вначале установим Pyparsing. Если Вы работаете в Linux, в командной строке наберите:



sudo pip install pyparsing




В Windows Вам необходимо в командной строке, запущенной с правами администратора, предварительно зайти в каталог, где лежит файл pip.exe (например, C:\Python27\Scripts\), после чего выполнить:

pip install pyparsing




Другой способ — это зайти на страницу проекта Pyparsing на SourceForge, скачать там инсталлятор для Windows и установить Pyparsing как обычную программу. Полную информацию о всевозможных способах установки Pyparsing можно получить на странице проекта.

Перейдём к парсингу. Пусть s — следующая строка:



s = 'import matplotlib.pyplot as plt'




В результате парсинга мы хотим получить словарь:

{ 'import': [ 'matplotlib', 'pyplot' ], 'as': 'plt' }




Сначала необходимо импортировать Pyparsing. Запустите например Python IDLE и введите:

from pyparsing import *




Звёздочка * выше означает импорт всех имён из pyparsing. В результате это может нарушить рабочее пространство имён, что приведёт к ошибкам в работе программы. В нашем случае * используется временно, потому что мы пока не знаем, какие классы из Pyparsing мы будем использовать. После того, как мы напишем парсер, мы заменим * на названия использованных нами классов.

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


Начнём с того, что у нас в строке есть название модуля. Формальная грамматика: в общем случае название модуля — это слово, состоящее из букв и символа нижнего подчёркивания. На pyparsing:



module_name = Word(alphas + '_')




Word — это слово, alphas — буквы. Word(alphas + '_') — слово, состоящее из букв и нижнего подчёркивания. module_name переводится как название модуля. Теперь читаем всё вместе: название модуля — это слово, состоящее из букв и символа нижнего подчёркивания. Таким образом, запись на Pyparsing очень близка к естественному языку.

Полное имя модуля — это название модуля, потом точка, потом название другого модуля, потом снова точка, потом название третьего модуля и так далее, пока по цепочке не дойдём до искомого модуля. Полное имя модуля может состоять из имени одного модуля и не иметь точек. На pyparsing:



full_module_name = module_name + ZeroOrMore('.' + module_name)




ZeroOrMore дословно переводится как «ноль или более», а это означает, что содержимое в скобках может повторяться несколько раз или отсутствовать. В итоге читаем полностью вторую строчку парсера: полное имя модуля — это название модуля, после которого ноль и более раз идут точка и название модуля.

После полного названия модуля идёт необязательная часть 'as plt'. Она представляет собой ключевое слово 'as', после которого идёт имя, которое мы сами дали импортируемому модулю. На pyparsing:



import_as = Optional('as' + module_name)




Optional дословно переводится как «необязательный», а это означает, что содержимое в скобках может быть, а может отсутствовать. В сумме получаем: «необязательное выражение, состоящее из слова 'as' и названия модуля.

Полная инструкция импорта состоит из ключевого слова import, после которого идёт полное имя модуля, потом необязательная конструкция 'as plt'. На pyparsing:



parse_module = 'import' + full_module_name + import_as




В итоге имеем наш первый парсер:

module_name = Word(alphas + '_')
full_module_name = module_name + ZeroOrMore('.' + module_name)
import_as = Optional('as' + module_name)
parse_module = 'import' + full_module_name + import_as




Теперь надо распарсить строку s:

parse_module.parseString(s)




Мы получим:

(['import', 'matplotlib', '.', 'pyplot', 'as', 'plt'], {})




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

parse_module.parseString(s).asList()




Получим:

['import', 'matplotlib', '.', 'pyplot', 'as', 'plt']




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

module_name = Word(alphas + '_')
full_module_name = module_name + ZeroOrMore(Suppress('.') + module_name)
import_as = Optional(Suppress('as') + module_name)
parse_module = Suppress('import') + full_module_name




Выполнив parse_module.parseString(s).asList(), получим:

['matplotlib', 'pyplot', 'plt']




Давайте теперь сделаем так, чтобы парсер сразу возвращал нам словарь вида {'import':[модуль1, модуль2, ...], 'as':модуль}. Прежде чем сделать это, вначале нужно отдельно получить доступ к списку импортируемых модулей (full_module_name) и к нашему собственному названию модуля (import_as). Для этого pyparsing позволяет назначать имена результатам парсинга. Давайте дадим списку импортируемых модулей имя 'modules', а тому, как мы сами назвали модуль — имя 'import as':

full_module_name = (module_name + ZeroOrMore(Suppress('.') + module_name))('modules')
import_as = (Optional(Suppress('as') + module_name))('import_as')




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

res = parse_module.parseString(s)
print(res.modules.asList())
print(res.import_as.asList())




Получим:

['matplotlib', 'pyplot']
['plt']




Теперь мы можем отдельно извлекать цепочку модулей для импорта искомого и наше название для него. Осталось сделать так, чтобы парсер возвращал словарь. Для этого используется так называемое ParseAction — действие в процессе парсинга:

parse_module = (Suppress('import') + full_module_name).setParseAction(lambda t: {'import': t.modules.asList(), 'as': t.import_as.asList()[0]})




lambda — это анонимная функция в Python, t — аргумент этой функции. Потом идёт двоеточие и выражение словаря Python, в который мы подставляем нужные нам данные. Когда мы вызываем asList(), мы получаем список. Имя модуля после as всегда одно, и список t.import_as.asList() всегда будет содержать только одно значение. Поэтому мы берём единственный элемент списка (он имеет индекс ноль) и пишем asList()[0].

Проверим парсер. Выполним parse_module.parseString(s).asList() и получим:



[{ 'import': [ 'matplotlib', 'pyplot' ], 'as': 'plt' }]




Мы почти достигли цели. Так как у полученного списка единственный аргумент, добавим [0] в конце строки для парсинга текста: parse_module.parseString(s).asList()[0]

В итоге:



{ 'import': [ 'matplotlib', 'pyplot' ], 'as': 'plt' }




Мы получили то, что хотели.

Достигнув цели, необходимо вернуться к 'from pyparsing import *' и поменять звёздочку на те классы, которые нам пригодились:



from pyparsing import Word, alphas, ZeroOrMore, Suppress, Optional




В итоге наш код имеет следующий вид:

from pyparsing import Word, alphas, ZeroOrMore, Suppress, Optional
module_name = Word(alphas + "_")
full_module_name = (module_name + ZeroOrMore(Suppress('.') + module_name))('modules')
import_as = (Optional(Suppress('as') + module_name))('import_as')
parse_module = (Suppress('import') + full_module_name + import_as).setParseAction(lambda t: {'import': t.modules.asList(), 'as': t.import_as.asList()[0]})




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

В заключение пару слов о себе. Я аспирант и ассистент МГТУ им. Баумана (кафедра МТ-1 „Металлорежущие станки“). Увлекаюсь Python, Linux, HTML, CSS и JS. Моё хобби — автоматизация инженерной деятельности и инженерных расчётов. Считаю, что могу быть полезным Хабру, делясь своими знаниями о работе в Pyparsing, Sage и некоторыми особенностями автоматизации инженерных расчётов. Также знаю среду SageMathCloud, которая является мощной альтернативой Wolfram Alpha. SageMathCloud заточена на проведение расчётов на Python в облаке. При этом Вам доступна консоль (Ubuntu под капотом), Sage, IPython и LaTeX. Есть возможность совместной работы. Помимо кода на Python SageMathCloud поддерживает html, css, js, coffescript, go, fortran, scilab и многое другое. В настоящее время среда бесплатна (достаточно стабильная бета-версия), потом будет будет работать по системе Freemium. На текущий момент времени эта среда не освещена на Хабре, и я хотел бы восполнить этот пробел.


Благодарю Дарью Фролову и Никиту Коновалова за помощь в редактировании статьи.


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 http://ift.tt/jcXqJW.


Монетизация детских приложений в зависимости от возраста

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


В последнее время мы стали получать очень много отзывов (процентов 50) о том, что наше приложение «Детский интерактивный развивающий журнал» очень классное и интересное, но вот что удивило нас в этих отзывах: они написаны простым детским языком или, проще говоря, детьми. Некоторые жалуются, что родители не разрешают покупать приложения, другие говорят что разрабы жмоты, третьи просят сделать все бесплатным и пожалеть бедных детей, у которых есть девайс, но нет денег.


Все это заставило по-другому взглянуть на монетизацию детских приложений и по-другому сегментировать аудиторию для монетизации.


Интересно ознакомится с нашими наблюдениями? Прошу под кат


Давайте разделим пользователей детских приложений на следующие группы


Возраст 0–4 года. Это дети, играющие в игры под присмотром родителей и только в то, что родители им разрешили. Приложения проходят отбор родителей. Основной покупатель — родитель. Поэтому на этом этапе очень важно заинтересовать родителя в выборе именно вашего приложения. Родитель в первую очередь обращает внимание на образовательную ценность и безопасность приложения (отсутствие рекламы, агрессивного контента). Если приложение нравится, родитель готов его купить.

При этом дети пользуются устройствами родителей.

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

В этом случае идеальным способом монетизации будет модель freemium — предоставление базового функционала приложения бесплатно для ознакомления. Продажа полного функционала в приложении — через IAP или отдельную полную версию приложения.


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

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

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


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

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

Для данного возраста возможный вариант монетизации — реклама. Предоставление пользователям бонусов за просмотр рекламы или установку приложения. Внедрение в игры рекламы, GetJar и других сервисов (получения очков и бонусов), которые можно обменять на премиум-контент. Дети готовы все это делать. Минусы — контент им реально должен быть интересен, должен быть популярен среди сверстников. Это скорее всего игры. Но родители готовы на этом этапе также продолжать платить за подписку тех приложений, которые они одобрили сами, чтобы дети могли получать образовательный контент.


Возраст 11–16 лет. Старшеклассники. У них есть топовые устройства, смартфоны.

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

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


Возраст 16—22. Студенты. Новый этап жизни — новые знакомства, самостоятельность. Имеют топовые устройства. Водятся карманные деньги, но пока нет готовности тратить деньги на приложения. Средства нужны на развлечения и тусы. Студенты любят халяву и соревнования. Готовы потреблять мобильный контент с рекламой, ачивками и возможностью бесплатно заработать дополнительные бонусы в приложении или игре. Если приложение очень и очень нравится, могут и заплатить за него.


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


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


Заключение

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


Простые и функциональные приложения, которые решают конкретные цель, логично монетизировать по модели freemiun (например, такие приложения, как «Математика», «Азбука», «Соедини точки»).


В приложениях, в которых постоянно обновляется контент и ежемесячно появляется что-то новое, логично использовать модель подписки, при которой пользователь получает доступ ко всему контенту, включая новый контент, который появляется во время пользования приложением (например, в таких приложениях, как «Детский интерактивный развивающий журнал», «Сказки», «3/9 царство», мы в ближайшее время планируем внедрить данную модель, так как в них постоянно обновляется контент и добавляется новый).


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


С уважением, Олег Демьянов, команда WebCanape

и подразделение мобильной разработки Whisper Arts


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 http://ift.tt/jcXqJW.


[Из песочницы] Windows 10: новые возможности и функции в командной строке

Microsoft недавно представили предварительную версию Windows 10 для разработчиков (т. н. Technical Preview), и многие сайты уже как следует успели осветить важные изменения по сравнению с предыдущей версией. Но мало кто обратил внимание на более мелкие изменения, как, например, в командной строке (и в узле консоли, лежащем в её основе). Их разбор представлен в статье Рафаэля Риверы, перевод которой и приводится ниже.





Вот так выглядит новая «экспериментальная» вкладка в окне свойств командной строки Windows 10. Здесь расположены переключатели для включения и выключения экспериментальных функций и возможностей, действующих на все окна консоли — в том числе и на окно PowerShell.


Рассмотрим их подробнее.


Выделение с переносом (Enable line wrapping selection)





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


Но теперь все эти мучения остались в прошлом. В Windows 10 текст выделяется и копируется таким же образом, что и в любом текстовом редакторе.


Фильтрация данных из буфера при вставке (Filter clipboard contents on paste)





Не приходилось ли вам вставлять команду и тут же обнаружить (после сообщения об ошибке), что она испорчена символами табуляции или типографскими кавычками? Мне приходилось. И больше такое не повторится благодаря новой функции фильтрации данных из буфера в Windows 10.


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


Перенос по словам при изменении размера окна (Wrap text output on resize)





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


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


Новые сочетания с клавишей Control (Enable new Ctrl key shortcuts)




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


  • CTRL + A — выделить всё

  • CTRL + C — копировать

  • CTRL + F — найти

  • CTRL + M — выделить

  • CTRL + V — вставить

  • CTRL + ↑/↓ — прокрутить на строку выше/ниже

  • CTRL + PgUp/PgDn — прокрутить на страницу выше/ниже


Расширенные клавиши редактирования (Extended edit keys)


Насчёт этой функции известно немногое. Она существовала в Windows довольно долгое время, но до Windows 10 никогда не была в открытую доступна пользователям. Подробнее о ней сможет рассказать разве что официальная документация, когда она появится.


Отсечение нулей в начале при выделении (Trim leading zeros on selection)





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


При выделении числа с нулями в начале (к примеру, двойным щелчком), рамка выделения начнётся после всех незначащих нулей. Например, 000001234 станет 1234. Правда, это не распространяется на шестнадцатеричные числа и десятичные с указанием системы счисления. Так что 0x1234 и 0n1234 будут выделены целиком.


(Не)прозрачность (Opacity)




Эта функция пока производит смешанные впечатления.

Ползунок двигается от еле видных 30% до стандартных 100%. Но при этом он действует на все без исключения окна командной строки в вашей системе, и помимо этого на всё окно консоли целиком, а не только его фон (цвет фона, кстати говоря, как и раньше, настраивается в окне свойств).


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


Вместо заключения




Сами разработчики, которые стоят за этими изменениями, говорят, что «это только начало» и «мы готовы выслушать любые ваши пожелания и предложения», а также организовали форум на UserVoice, доступный по этой ссылке: http://ift.tt/1wZgBDo

Оригинал статьи: Rafael Rivera — New experimental console features in Windows «Threshold».


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 http://ift.tt/jcXqJW.