Sleep as Android - умный будильник для Android со статистикой и фазами сна



17 коммент.

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

Современные смартфоны напичканы всеми вообразимыми датчиками, включая акселерометры, так что кому-то должна была постучаться в голову светлая мысль реализовать умный будильник для Android на смартфоне, благо смартфоны есть у многих и на этом можно срубить пиастров. Так и поступил товарищ Petr Nálevka, который вместе с Martin Šťava написали приложение Sleep as Android.

Читать далее

ЛаТеХ для продвинутых. Как подружить LaTeX и Inkscape.



23 коммент.

(La)TeX является одной из наиболее продвинутых систем обработки текста. Тексты созданные в ЛаТеХе, обычно естественно-научной направленности, легко узнать не только по красивым формулам, но и по исключительно сбалансированному тексту.

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

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

Цель этого поста: применение аналогичного трюка для экспорта иллюстраций, схем и рисунков из Inkscape таким образом, что текст на них будет соответствовать использованному в основном тексте.

Импорт рисунков Inkscape в LaTeX

Основная идея и простой пример

Inkscape создаёт рисунки в формате svg. Наша задача: "красиво" вставить их в ЛаТеХ-документ. Итак, по порядку:

  1. Рисуем рисунок :) Лучше всего задать размер страницы равным желаемому размеру иллюстрации в ЛаТеХе. Все надписи выполняем, как если бы мы это делали в ЛаТеХе. Т.е. пишем, например, $\vec{F}$, если хотим получить F с вектором-стрелочкой сверху. Размер и тип шрифта роли не играет: в результате получится шрифт как в документе (хотя можно указать размер посредством \large и т.п. команд). Цвет и "поворот" текста, напротив, будут приняты во внимание. Уделяем особое внимание горизонтальному выравниванию текста (влево, вправо, по центру), иначе он "переедет" в ЛаТеХе.
  2. Сохраняем в PDF формате: через пункт меню "Сохранить как..."/"Save as...". В появившемся окошке ставим галочку напротив "PDF+LaTeX: опустить текст в ПДФ и создать ЛаТеХ файл"/"PDF+LaTeX: Omit text in PDF, and create LaTeX file".
    Будут созданы два файла: "имя.pdf" с рисунком и "имя.pdf_tex" со всеми надписями (ниже полагаем имя=drawing).
  3. В ЛаТеХ-файл вставляем вот так:
    01:  % преамбула
    02:  \usepackage{graphicx,xcolor}
    03:  ...
    04:  % тело документа
    05:  \begin{figure}\centering
    06:    %\def\svgwidth{5cm} % если надо изменить размер
    07:    \input{drawing.pdf_tex}
    08:    \caption{...}\label{...}
    09:  \end{figure}
    
    Если необходимо изменить размер, то нужно переопределить параметр \svgwidth. Здесь также предполагается, что все файлы были сохранены в текущей директории.
  4. Компилируем: pdflatex имя-tex-файла. ЛаТеХ сначала вставит pdf-картинку из drawing.pdf, а затем наложит на неё текст из drawing.pdf_tex.
Результат:

Оптимизация процесса

У описанного выше процесса есть два больших недостатка. Во-первых, каждый раз, когда что-то изменено в Inkscape, надо заново сохранять файл как PDF+LaTeX, тыкая мышкой в разные пункты меню. Кроме того, включение файла срабатывает только, если файлы картинок находятся в текущей директории. От обоих недостатков можно легко избавиться, используя следующий код в ЛаТеХ-файле:

01:  ...
02:  %----------------------------------
03:  % Вставляем это в преамбулу документа
04:  \graphicspath{{figs/}} % путь, где искать картинки
05:  % следующий код взят из 
06:  % http://mirrors.ctan.org/info/svg-inkscape/InkscapePDFLaTeX.pdf
07:  \newcommand{\executeiffilenewer}[3]{%
08:    \ifnum\pdfstrcmp{\pdffilemoddate{#1}}%
09:    {\pdffilemoddate{#2}} > 0 {\immediate\write18{#3}}\fi}
10:  \newcommand{\includesvg}[1]{%
11:    \executeiffilenewer{#1.svg}{#1.pdf}%
12:    {inkscape -z -D --file=#1.svg %
13:     --export-pdf=#1.pdf --export-latex}%
14:    \input{#1.pdf_tex}%
15:  }
16:  %-----------------------------------
17:  ...
18:  \begin{document}
19:  ...
20:  % Inkscape figure
21:  \begin{figure}\centering
22:    %\def\svgwidth{5cm} % используем для изменения размера, если надо
23:    \includesvg{figs/drawing}
24:    \caption{Example Inkscape: include svg.}
25:  \end{figure}
26:  ...
27:  \end{document}
Здесь для начала указано, что \includegraphics должен искать картинки в поддиректории figs. Затем определены две новые команды.

Первая \executeiffilenewer{файл1}{фаил2}{команда1} выполняет команду команда1, если файл1 новее, чем файл2.

Вторая \includesvg{} сначала, если нужно, конвертирует svg файл в пару PDF+LaTeX, а затем вставляет получившуюся картинку. Конвертирование происходит посредством вызова Inkscape "из командной строки". Параметр -z означает "without-gui", а -D говорит Инкскейпу, что нужно экспортировать всю картинку. Предполагается, что команда inkscape находится в "путях к исполняемым файлам" (переменная $PATH в Юниксах или %path% в нетрадиционных операционных системах). Проверить так ли это можно открыв терминал ("коммандную строку"), набрав там inkscape и нажав ENTER. Если ничего не запустилось, значит надо в 12-й строке прописать полный путь к исполняемому файлу, что-то вроде "c:/Programms/Inkscape/inskcape" или "/usr/bin/inkscape", в зависимости от операционной системы.

Для компиляции используем pdflatex -shell-escape имя-tex-файла. Ключик -shell-escape разрешает ЛаТеХу запускать сторонние программы: в нашем случае, Инкскейп для конвертации svg в pdf+tex.

Возможности и ограничения

После вставки в ЛаТеХ, не должно быть никаких проблем с цветами, градиентными заливками и т.п. вещами: они сохранены в pdf-файле. С текстовыми же эффектами могут быть проблемы. Поддерживается только цвет и поворот текста. Такие навороты, как "текст вдоль линии" или "отображение" работать не будут, хотя в большинстве случаев они и не нужны. Единственным действительно неприятным недостатком является то, что не поддерживается текст в несколько строк.

Связка MATLAB - Inkscape - LaTeX

Иногда приходится "усовершенствовать" график, например, указав стрелками на какие-то его особые точки или разместив дополнительный рисунок поверх графика. Инкскейп идеально для этого подходит: он может "читать" файлы в формате eps и pdf.

Однако, если график построен в MATLAB, то лучше его сохранить напрямую в svg-формате, вместо промежуточного (для наших целей) eps. Сделать это очень просто с помощью функции plot2svg, которую можно скачать с MATLAB Central. На всякий случай, файл plot2svg.m включён также в архив с примерами из этого поста.

Строим график, а затем сохраняем его как, например,
plot2svg('figs/example_matlab.svg')
После этого "график" можно открыть в Инкскейп и внести изменения.

Экспорт/импорт в ЛаТеХ осуществляется в точности как уже было описано выше. Результат:

ЛаТеХ в Инкскейпе

Итак, прямая задача — экспорт рисунков из Инкскейпа в ЛаТеХ — решена. Но иногда приходится решать и обратную задачу: вставлять формулы из ЛаТеХа в Инкскейп. Сделать это можно двумя способами.

Способ первый: Render LaTeX Formula

Стандартное расширение Инкскейпа (из базовой поставки) позволяет легко и просто вставить формулу. Идём в пункт меню Extensions, выбираем Render, а потом LaTeX Formula.

Если нужно, можно также подгрузить дополнительные пакеты, как, например, kpfonts в примере выше. В результате получаем суперкрасивую... нарисованную формулу. Да-да, не "написанную буквами", а "нарисованную линиями".

Если в вашем Инкскейпе отсутствует пункт меню "LaTeX Formula", то попытайтесь найти файл extension-errors.log и посмотреть, что именно произошло. Например, в Windows велики шансы, что Инкскейп не смог найти програмку pstoedit, необходимую для функционирования "LaTeX Formula": если дело действительно в этом, то установите pstoedit и добавьте его в путь %path%.

Способ второй: Tex Text

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

Заключение и выводы

Итак, экспортировать рисунки из Инкскейпа совсем несложно. Процесс легко автоматизировать с помощью простого ЛаТеХ-скрипта, автоматически конвертирующего svg-рисунок в связку PDF (картинка) и ТеХ (текст), которые вставляются в ЛаТеХ-документ один поверх другого. Достоинством этого метода является весьма неплохо выглядящий результат (рисунок с ТеХ шрифтом, формулами, ссылками) при минимальных затратах времени.

Хотя мы рассмотрели данный рецепт на примере Инкскейпа, аналогичные методы могут быть использованы и с другими программами. Из графических редакторов, ЛаТеХ неплохо поддерживается Xfig: об этом написано, например, здесь.

Справедливости ради, стоит отметить, что весьма неплохих результатов можно также добиться с помощью inkscape2tikz. Но это уже совсем другая история...

Все примеры из данного поста доступны для скачивания по адресу tinyurl.com/amorua-inkscape.

Зеркала на случай сбоя: зеркало1 зеркало2

Читать далее

Zim - настольная вики, структуризатор и каталогизатор в одном флаконе: zim wiki outliner



39 коммент.
Согласно заветам Ильича, коммунизм есть советская власть плюс электрификация всей страны. Так и Zim, в духе духа духовных предков, представляет собой каталогизатор (outliner) плюс возможность пользовать вики-разметку. Простой и незатейливый, но полезный в хозяйстве, Zim поможет простым колхозникам быстро разгрести ворох заметок, файлов и набросков и превратить в организованную структуру, расфасованную по каталогам.

Читать далее

ЛаТеХ для продвинутых. Как подружить LaTeX и MATLAB: вставка рисунков из MATLAB в документы LaTeX



39 коммент.

В документе всё должно быть прекрасно — и текст, и картинки

Благодаря ЛаТеХу научные работники (и не только) получили возможность создавать красивые, уравновешенные документы с чётко просматривающейся структурой. Однако "сфера влияния" ЛаТеХа распространяется только на текст и формулы, а внешний вид графиков и иллюстраций находится полностью на совести автора. И вот здесь-то и начинаются полные разброд и шатания: на некоторые рисунки трудно смотреть без слёз :)

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

Постановка задачи

Что отличает рисунок гармонично вписывающийся в основной текст от рисунка плохого? Безусловно, содержание, размер и расположение являются важными эстетическими параметрами. Однако наиболее бросающимся в глаза диссонансом, свойственным львиной доле естественно-научных рисунков, являются шрифты. Да-да, именно шрифты... Речь идёт о подписях к осям графиков, о легендах и т.п. Порой создается ощущение, что у автора серьёзные проблемы со зрением: скажем, рядом с текстом набранным Times 12pt вдруг оказывается график с подписями 16-ым шрифтом... Или, ещё лучше, нечитаемым 8-ым... А о соответствии типа шрифта (начертания) между рисунками и текстом и мечтать не приходится!

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

Все дороги, которые ведут в Рим

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

  1. Использовать LaTeX для построения графиков. На деле это означает либо использование pgfplots и tikz, либо pstricks.
  2. Использовать около-ЛаТеХные средства, хорошо взаимодействующие с ЛаТеХом. Например, MetaPost или Asymptote.
  3. Использование вашей любимой программы (например, Matlab, Mathematica, Gnuplot и т.д. в сочетании с тем или иным способом конвертации в "ЛаТеХ-код", скажем tikz. Более конкретно: например, matlab2tikz. Или tikz терминал для Gnuplot.
  4. И, наконец, использование вашей любимой программы, как и в предыдущем пункте, с сохранением картинки как eps или pdf и последующей "подменой текста", a la psfrag и т.п.

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

В этом посту мы рассмотрим алгоритм экспорта графиков из MATLAB в LaTeX.

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

Как ЛаТеХ с Матлабом подружить

Цель

Собственно: экспорт графиков из Матлаба в ЛаТеХ. При этом предполагается, что подписи и т.п. на графике должны сочетаться с основным текстом.

Желаемый результат изображен ниже. Специально выбран нестандартный фонт (Kepler-подобный из kpfonts вместо стандартного Computer Modern), чтобы подчернуть желаемый эффект.

Средства

Матлаб, версии новее 7.6 (release name 2008a). Кроме того, скрипт matlabfrag.m. Его можно скачать самостоятельно, но он (вернее его улучшенная версия) есть и в архиве с примерами из этого поста: tinyurl.com/amorua-matlabfrag. Поместите его в текущую директорию: туда где будут находиться ваши скрипты для построения графиков. Поместите туда же файлы myfigure.m и mylegend.m из того же архива с примерами.

ЛаТеХ. Нам понадобится пакет pstool, причём версия 2013/02/11 v1.5 или новее. В старых версиях пакета будет работать всё, кроме ссылок из картинок на основной документ, например, на уравнения или номера страниц. Файл pstool.sty нужной версии находится в архиве с примерами. Все примеры можно компилировать либо
pdflatex -shel-escape имя-файла
либо
latex -shell-escape имя-файла
dvips имя-файла
pstopdf имя-файла.ps

но предпочтение должно быть отдано первому варианту.

Если -schell-escape опция не работает, возможно в вашей версии ЛаТеХ она называется -enable-write18.

Строим график

Здесь всё почти как обычно:

01:  %% example 1
02:  close all ; clear all; clc;
03:  %% Интерпретатот текста, по умолчанию, latex
04:  set(0,'DefaultTextInterpreter', 'latex');
05:  %  Размер шрифта такой же как в ЛаТеХ-документе
06:  set(0,'DefaultAxesFontSize',12);
07:  set(0,'DefaultTextFontSize',12);
08:  
09:  %% Создаём картинку   
10:  fig=figure;
11:  %% Рисуем графики ...
12:  x=0:0.1:pi;
13:  y=sin(x); plot(x,y,'r'); hold on;
14:  z=cos(x); plot(x,z,'b');
15:  
16:  %% Подписи к осям
17:  xlabel('$t$, s'); ylabel('$l$, m');
18:  %% Легенда
19:  l=legend('$\sin x$','$\cos x$');
20:  
21:  %% Дополнительный текст на графике
22:  text(0.5,-0.5,'$\int\limits_0^{2\pi}\sin x\, dx = 0$');
23:  text(3,-0.5,'$\gamma = \frac{\alpha}{\zeta}$');
24:  
25:  %% Экспортируем график 
26:  matlabfrag('figs/example1','epspad',[10,10,10,10]);

Теперь по порядку:

  1. В строке 4, latex установлен как интерпретатор текста по умолчанию. Благодаря этому, в подписях к осям (строка 17), легенде (строка 19) и дополнительном тексте (строки 22, 23) мы можем спокойно использовать ЛаТеХ-комманды.
  2. Затем, надо проинформировать Матлаб о том, что весь текст мы хотим набирать 12-ым шрифтом (если используется используется "улучшенная" версия matlabfrag из архива с примерами, то устанавливать размер шрифта не надо — будет автоматически подхвачен текущий размер из ЛаТеХ-документа).
  3. После того как всё готово, в строке 26, использована функция matlabfrag() для сохранения графика. Она создаст два файла: figs/example1.eps и figs/example1.tex (предполагается, что в текущей директории вы создали поддиректорию figs/, куда мы будем складывать все картинки). Если посмотреть на их содержимое, то станет понятно, как это всё работает.
    Сама картинка находится в eps-файле, но вместо текста там "числа-заглушки", вроде 000, 001, 002 и т.д. В tex-файле же находится весь текст в виде, понятном ЛаТеХу.
    Теперь дело за ЛаТеХом.

Вставляем график в документ ЛаТеХ

Как видно из предыдущего рисунка, ЛаТеХ-текст будет вставлен с помощью команды \psfrag из одноимённого пакета. Однако, гораздо удобнее пользоваться им не напрямую, а через интерфейс, предоставляемый пакетом pstool. Делается это так: подключаем пакет pstool и вставляем картинку командой \psfragfig{}.

01:  \documentclass[12pt]{article}
02:  ...
03:  \usepackage{pstool} 
04:  ...
05:  \begin{document}
06:  ...
07:  \begin{figure}\centering
08:    % вставляем картинку: 
09:    % имя файла без расширения!!!
10:    \psfragfig{figs/example1}
11:    \caption{Example of a Matlab plot.}\label{fig:ex1}
12:  \end{figure}
13:  ...
14:  \end{document}

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

Кроме того, размер шрифта в самом первой строке установлен в 12pt, в соответствии с размером шрифта на рисунке в Матлабе.

Компилируем командой
pdflatex -shell-escape имя-тех-файла
Пакет pstool сделает за нас всю чёрную работу: он сам сконвертирует на лету связку файлов eps+tex в pdf картинку и вставит её: он прогонит автоматически каждую картинку через ЛаТеХ, dvips и pstopdf. Именно для этого и надо указать ключ -shell-escape при запуске pdflatex — он разрешает пакету запускать внешние программы.

Пакет pstool достаточно разумен: он смотрит на дату создания файлов картинок и "конвертирует" только изменившиеся со времени последнего запуска. Чтобы принудительно переконвертировать все картинки, надо указать опцию process=all, а именно

01:  ...
02:  \usepackage[process=all]{pstool} 
03:  ...
Результат наших усилий показан внизу. Как видите, на графике использованы Computer Modern шрифты ЛаТеХа, размер которых совпадает с размером, использованным в тексте (см. подпись к рисунку).

Тонкая настройка

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

Деталь нулевая

Деталь, к matlabfrag() прямого отношения не имеющая, но тем не менее... Наилучшего, с эстетической точки зрения, результата можно добиться, если вставлять в ЛаТеХ рисунки в том масштабе, в котором они были нарисованы. Т.е. рисовать их лучше сразу в нужном размере! Для этого создаём в Матлабе простенькую функцию

01:  function h=myfigure(width,height)
02:  % создаёт figure с заданной шириной и высотой в см
03:  
04:  if nargin<2 % если дана только ширина, использует золотое сечение для высоты
05:      height = width * 2/(1+sqrt(5)); % высота=ширина/золотое сечение
06:  end
07:  
08:  set(0,'units','centimeters')
09:  scrsz=get(0,'screensize'); % размер экрана в см
10:  % положение и размер картинки
11:  position=[scrsz(3)/2-width/2 scrsz(4)/2-height/2 width height];
12:  h=figure;
13:  set(h,'units','centimeters')
14:  % устанавливаем размер
15:  set(h,'position',position)
16:  % Set screen and figure units back to pixels
17:  set(0,'units','pixel')
18:  set(h,'units','pixel')
Если использовать myfigure(10,8), то размер картинки будет 10см на 8см. Если задать только первый аргумент myfigure(10), то функция сама посчитает высоту исходя из золотого сечения. Файл myfigure.m находится в архиве с примерами.

Деталь первая: UserData matlabfrag

В принципе, необязательно пользоваться интерпретатором latex в Матлабе. Функция matlabfrag() смотрит на свойство UserData и, если оно имеет вид matlabfrag:XXX, вставляет XXX в качестве ЛаТеХ-текста. Например, код ниже делает в точности то же самое, как и разобранный выше пример

01:  %% example 2
02:  close all ; clear all; clc;
03:  %% По умолчанию, интерпретатор текста tex, а не latex,
04:  %  т.е. set(0,'DefaultTextInterpreter', 'tex'); указывать не обязательно
05:  
06:  %% Создаём картинку   
07:  fig=myfigure(10);
08:  %% Рисуем графики ...
09:  x=0:0.1:pi;
10:  y=sin(x); plot(x,y,'r'); hold on;
11:  z=cos(x); plot(x,z,'b');
12:  
13:  %% Подписи к осям
14:  xlabel('t, s', 'UserData','matlabfrag:$t$, s'); 
15:  ylabel('l, m', 'UserData','matlabfrag:$l$, m');
16:  %% Легенда
17:  l=mylegend({'sin x';'cos x'},...
18:             {'$\sin x$';$\cos x$});
19:  
20:  %% Дополнительный текст на графике
21:  text(0.5,-0.5,'integral here',...
22:       'UserData','matlabfrag:$\displaystyle \int\limits_0^{2\pi}\sin x\,dx = 0$');
23:  
24:  text(3,-0.5,'\gamma = \alpha/\zeta',...
25:      'UserData','matlabfrag:$\displaystyle \gamma=\frac{\alpha}{\zeta}$'); 
Недостаток этого способа в том, что придётся набирать больше текста. Кроме того, картинка, как её покажет Матлаб, вообще говоря, будет отличаться от той, которую вы увидите в ЛаТеХе.

Зато такой способ гораздо более гибок. Он позволяет вставлять в текст подписей команды, определённые в ЛаТеХ документе, о которых Матлаб ничего не знает. Например:

01:  text(0.5,-0.5,'integral here',...
02:   'UserData','matlabfrag:\myint see eq.(\ref{eq:1})');
использует команду \myint, а кроме того, ссылается на уравнение из основного текста.

Обратите внимание на то, как добавляется UserData к легенде: здесь для облегчения процесса использована функция mylegend(легенда,латех_вариант). Она принимает два аргумента, оба cell array. Первый — легенды для Матлаба, второй — для ЛаТеХа.

01:  function l=mylegend(lgnds,usrdta_in)
02:  % функция для создания легенд с ЛаТеХ-вариантами
03:  % пример вызова: l=mylegend({'sin(x)';'cos(x)'},{'$\sin x$';'$\cos x$'})
04:  % возвращает указатель на легенду
05:    l=legend(lgnds);
06:  
07:    if nargin>1 % если переданы UserData
08:       usrdta=lgnds;
09:       for i=1:min(length(usrdta),length(usrdta_in))
10:      usrdta{i} = usrdta_in{i};
11:       end
12:      
13:       lchild=get(l,'children');
14:       i_max=length(usrdta);
15:    
16:       for i=1:i_max
17:           i_child=3*i_max-(i-1)*3 ;
18:           set(lchild(i_child),'Userdata',sprintf('matlabfrag:%s',usrdta{i}));
19:       end
20:    end
21:  end

Дело в том, как Матлаб хранит текстовое содержимое легенд: если легенды две, то их текст будет сохранен в 6-м и 3-м элементах "детей легенды". Если легенды три, то в 9-м, 6-м и 3-м. И так далее.

Файл mylegend.m может быть найдена в архиве с примерами.

Деталь вторая: текстовые эффекты

Функция matlabfrag() настолько сообразительна, что автоматически подхватит эффекты, такие как вращение текста, центрирование, цвет, размер и т.п. Например, такой код

01:  %% example 3
02:  %% Text effects
03:  text(2.5,-0.5,{'Rotated';'text'},'Rotation',90);
04:  
05:  text(0.5,-0.5,{'Colored';'centered';'italic';'text'},...
06:      'Color','r',...
07:      'HorizontalAlignment','center',...
08:      'FontAngle','italic');
09:  
10:  text(1,-0.5,{'Big Text:';'16pt'},'FontSize',16)
даст эффект, очевидный из картинки ниже.

Обратите внимание, что для набора текста в несколько строк использованны cell arrays, вроде {'строка один';'строка два'}. Этот трюк работает не только для функции text(), но и для, например, подписей на осях:

01:  xlabel({'$t$, s'; 'time to goal'}); 
02:  ylabel({'$l$, m'; 'distance to goal'});

Деталь третья: поддержка русского языка

С русским тоже никаких проблем: просто, набираем подписи и текст на русском. Только не забываем в ЛаТеХ-документ вставить в преамбулу

01:  \usepackage[utf8]{inputenc}
02:  \usepackage[T2A]{fontenc}
03:  \usepackage[russian]{babel}

Результат:

Деталь четвертая: подписи к меткам на осях

Иногда хочется заполучить у меток на осях не числа типа 3.14, а что-то посимпатичнее, вроде числа "пи". Делается это просто:

01:  %% example 4
02:  ...
03:  %% подписи у меток, aka tick marks
04:  set(gca,'XLim',[0 pi],'XTick',[0 pi/2 pi],...
05:       'XTickLabel',{'$0$','$\pi/2$','$\pi$'});

Всё остальное — как прежде. Результат:

Деталь пятая: необязательные аргументы matlabfrag()

Функция matlabfrag(), помимо обязательного имени файла, принимает ещё несколько опций: handle, epspad, renderer и dpi. Например,

01:  matlabfrag('figs/myfig','handle',h,'epspad',[10 10 10 10])
сохранит в файлы figs/myfig.tex и figs/myfig.eps не активную в данный момент картинку, а ту, на которую указывает h; кроме того, добавит по 10px со всех сторон. Про renderer и dpi можно почитать в документации.

Деталь шестая: необязательные аргументы \psfragfig{}

Прежде всего, поведением pstool можно управлять задав опции при загрузке пакета. Одну из них, которая принудительно перекодирует все картинки, мы уже обсуждали: process=all.

Иногда метки, выдающиеся далеко за пределы графика, оказываются "обрезанными". Предотвратить такое поведение можно задав опцию crop=pdfcrop.

Если возникают непонятные проблемы со вставкой картинок, можно задать опцию mode=errorstop, чтобы процесс комиляции останавливался при возникновении ошибки.

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

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

  1. с помощью команды \pstoolsetup{}; опция будет применена с момента её объявления
  2. в качестве необязательных аргументов к \psfragfig{}; при этом опция будет применена только к текущей картинке; например
    01:  \psfragfig[crop=pdfcrop]{figs/myfig}
    

Деталь седьмая: лезем в код matlabfrag()

Одним (пожалуй, единственным) из недостатков matlabfrag() является то, что всегда надо указывать явно размер шрифта (посмотрите на строки 6 и 7 самого первого примера, см. также ниже), чтобы он совпадал с размером шрифта в ЛаТеХе. Тогда как гораздо более удобным, по мнению автора этих строк, поведением было бы следующее: (1) если размер шрифта не указан, то просто используется установленный ЛаТеХом; (2) если же мы указываем в Матлабе размер шрифта явно, через FontSize, то и в ЛаТеХе надо этот размер насильно применить.

К сожалению, в "ванильной" версии matlabfrag() такая возможность отсутствует. Однако в версии, которую можно найти в файле с примерами к этому посту, я взял на себя смелость и изменил код этой функции соответствующим образом. Т.е., если вы используете эту "хакнутую" версию, то указывать

01:  %  Размер шрифта такой же как в ЛаТеХ-документе
02:  set(0,'DefaultAxesFontSize',12);
03:  set(0,'DefaultTextFontSize',12);
не нужно.

Деталь восьмая и последняя: хочу другой шрифт

До настоящего момента мы стремились использовать на графиках шрифт того же начертания, что и в основном тексте. Однако "в узких кругах существует мнение", что хотя в основном тексте лучше использовать шрифт с насечками (serif font), на рисунках надо отдать предпочтение шрифту без насечек (san serif font). Выражаясь языком понятным пользователям Ворда, "в тексте: Times New Roman, на рисунках: Arial". Якобы, такое разделение привлекает внимание к рисункам и выделяет их в массе текста.

Хотя эстетическая ценность такого решения весьма сомнительна, в "улучшенной" версии matlabfrag.m реализована такая возможность. В преамбулу ЛаТеХ-документа помещаем

01:  \usepackage{sansmath}
02:  \providecommand{\MATLABFont}{\sffamily\sansmath}
и наслаждаемся результатами. Заметьте, что сами рисунки для этого "перерисовывать" не надо. Результат с и без \MATLABFont приведён ниже. Обратите внимание, что греческие буквы недоступны в начертании "без насечек".


В принципе, выше были рассмотрены все основные шаги и опции для сохранения графиков и их импорта в ЛаТеХ. Интересующиеся более подробно деталями процесса могут ознакомиться с документацией к matlabfrag и pstool.

Заключение и выводы

Итак, подведём итоги. Описанный метод позволяет при сравнительно малых затратах времени добиться более чем удовлетворительных результатов: векторных графиков с надписями, выполненными ЛаТеХом. Это позволяет не только добиться гармоничного соответствия между шрифтами на рисунке и в тексте, но и использовать на рисунке формулы и ссылки на уравнения, другие рисунки и т.д.

В случае Матлаба, необходимая функциональность доступна через matlabfrag(). Использование пакета pstool позволяет существенно упростить процесс импорта сгенерированных таким образом eps-файлов в pdfLaTeX.

Хотя мы рассмотрели данный рецепт на примере Матлаба, аналогичные методы могут быть использованы и с другими программами. Например, MathPSfrag является аналогом mathlabfrag() для мат-пакета Mathematica. Для Gnuplot использование set terminal latex и экспорт через pstool также позволяют добиться сходного результата.

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

Все примеры из данного поста доступны для скачивания по адресу tinyurl.com/amorua-matlabfrag.

Зеркала на случай сбоязеркало1, зеркало2

Читать далее

Отложенная отправка электропочты: scheduled email



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

Чего мне не хватает в интерфейсе Gmail, на фоне всех этих бесполезных свистулек и бубенчиков, так это отправки электропочты по расписанию. Например, у Васи Пупкина день рождения в субботу, а я в субботу колесю на своём Бентли велосипеде по всяким Флайшиттаунам. Хорошо бы запрячь Gmail отправить письмо в заданный день - сделали же они Scheduled Posts в Blogger.

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

Читать далее

Китайский Android-смартфон THL W5: приятный сюрприз по вменяемой цене



33 коммент.
Некоторое время назад я писал о том, как завёл себе Андроида - гигантскую электроовцу под названием HTC Desire HD. Время шло, смартфон был в активном использовании, несмотря на (частично) алюминиевый корпус, постоянные сжатия от тесного чехла HTC не понравились, и через некоторое время накрылся экран. По гарантии смартфон был отправлен обратно (+ почтовые расходы), но после ремонта через некоторое время экран стал отходить от корпуса. В общем, надо искать замену - пока смартфон жив. И тут автор этих строк заметил, что китайцы из компании THL для внутреннего узкоглазого рынка клепают вполне себе неплохие агрегаты...

HTC, THL и другие китайские балалайки

Компания THL расшифровывается как Technology, Happy Life, и представляет собой лавку дядюшки Ляо, разросшуюся до размеров нескольких десятков магазинов с фабрикой по поклёпу смартфонов. Как и вся продукция из Китая, она чем-то напоминает что-то, что уже кем-то сделано. В случае с THL их смартфоны, сделанные по сходному дизайну, чем-то напоминают продукцию HTC (а конкретно HTC One X) и Samsung, которая, в свою очередь, сильно напоминает продукцию Apple.
Работая в интернациональном коллективе, невольно замечаешь особенности конкретных наций в деле инженерии. Конкретно у китайцев всё очень здорово, когда нужно выдать большой объём работ при точно известной схеме. То есть, например, задача genome sequencing для них - идеальна: схема есть, оборудование есть, и просто нужна толпа квалифицированных исполнителей. Всё становится намного хуже, когда нужно придумать что-то новое, особенно если до этого народ приходил к выводу, что так сделать нельзя. Один китаец меня как-то спросил: какой метод для создания новых вещей? Как ты придумываешь новое? Он искренне думал, что я сейчас ему дам книжку, в которой это написано. Я же честно ему ответил: рву на жопе волосы :-) Он после этого меня больше ни о чём не спрашивал, хотя я ответил ему предельно честно.
Почти весь модельный ряд THL построен на базе одной и той же платформы (SoC, System on Chip) MTK6577, в которую они вставляют разные экраны и батарейки. Так как THL, что называется, "без роду и племени", то денег за свои балалайки смартфоны они просят немного (в отличие от оборзевшего самсунга), собирают пристойно, заливают туда стоковый Андроид и продают всем страждущим.

Душа горит огнём желаний

Собственно, автору этих строк хотелось получить за вменяемые (до 300 долларов) деньги смартфон вида:
  • большой и яркий экран с диагональю больше 3" но меньше 5" и плотностью точек не менее 250 PPI;
  • естественно Android (версия не важна, но ICS хотелось бы);
  • Много памяти (1 Гб);
  • SD-карта памяти - без неё смартфон вообще не рассматривается;
  • приличное качество сборки (пластиковые игрушки от самсунга со скрипами идут лесом);
  • Могучая батарейка.
Удивительно, что таким простым требованиям удовлетворяет не так уж много аппаратов. Более того, намечается тенденция по обезьянничанию Apple: убирание SD-карт, блокирование загрузчика и прочее.

THL W5 3G Smart Phone MTK6577 1GB RAM Dual Core Android 4.0 4.7" IPS Screen

Долго ли, коротко, но я набрёл на смартфон вот с таким длинным названием. По размерам он почти такой же, как мой старый HTC Desire HD, только длиннее за счёт большего экрана (всё-таки 4.7 дюйма). Вот он, наш герой:


Хотя он сделан весь из пластика, выглядит строго и достойно. Более того, за свои 200 долларов под капотом имеется весьма достойное железо, а именно:
  • CPU: Dual Core Cortex A9;
  • GPU: PowerVR Series5 SGX (MT6577);
  • Memory:
    • RAM: 1 GB
    • ROM : 4GB that is 1GB for system, 820MB APPS, 2GB storage space
  • SD-cards: up to 64GB Class 12 Micro SD Memory Card
  • Size:136 x 69.8 x 10.3mm
  • Weight: 157g with battery
  • Screen: 4.7" IPS, 1280x720 Capacitive Multi Touch Screen
  • Network: Dual Sim
    • 2G:GSM/GPRS/EDGE: 850/900/1800/1900 MHz
    • 3G:WCDMA/HSPA/HSPA+: 850/2100MHz
  • GPS: Built In GPS A.GPS
  • Wi-Fi : IEEE 802.11 b/g/n, supports Wi-Fi hotspot
  • Camera:
    • Back: 8.0 mega pixel,
    • Front: 2.0 mega pixel, supports Skype Video Calls
  • Sensor: Gravity Sensor, Proximity Sensor, Light Sensor
Всё это под управлением Android V4.0.4 Ice Cream Sandwich. Среди всего прочего, особо радует IPS-экран, камера и, конечно же фирменный знак китайцев - две сим-карты.


Покупалось это чудо на Ebay вот тут за 209 долларов вместе с доставкой.


В комплект добрые китайцы положили, помимо телефона, наушники, USB-кабель, зарядник, плёнку для экрана и аж целых две (2!) могучие 2000 mAh батарейки. Да, так же в комплекте замечена инструкция для простых китайских колхозников на таком простом и понятном китайском же языке:

Смартфон долетел из Гонк-Конга в Австралию за 8 дней в целости и сохранности:


и далее начал радовать автора этих строк неимоверно, о чём ниже.



Внешний вид, комплект и сборка THL W5

На фотографиях THL W5 выглядит очень прилично, но каков он в жизни? А в жизни он выглядит не менее достойно: несмотря на полностью пластиковый корпус, выглядит строго, собран хорошо и в широкой руке автора лежит отлично. Задняя крышка сделана из мягкого и "шелковистого" на ощупь пластика, скрывая под собой здоровенный танковый аккумулятор, доступ к microSD и SIM-картам.



Собственно, кнопок и штекеров минимум: вкл\выкл, стандартное гнездо наушников на 3.5", кнопка громкости, microUSB, камера сзади (с дистрофичной подсветкой) дырка для микрофона снизу.

Крышка

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

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

Кнопка включения - в верхней части, в центре. Если обхватить смартфон и положить указательный палец на верхнюю часть, он точно приземлится на кнопку включения. Чуть левее притаился Audio Jack 3.5" выход на наушники.

Наушники

Да, наушники идут в комплекте, но, признаться, лучше бы не шли. На china-review пишут, что эти затычки а-ля "наушники вакуумного типа с довольно хорошим качеством звука" - с чем автор этих строк категорически не согласен.

Такого кошмара я не слышал уже давно: звук как из бочки, басы отсутствуют как класс, высоких частот нет в принципе. Конечно, "Владимирский централ" в них слушать можно, но, скажем, Боккерини и Моцарта, к которым тяготеет автор, лучше даже не пробовать. Для сравнения, оставшиеся наушники от HTC по сравнению с THLевскими звучат как Hi-End студийная запись.

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

Железо: что под капотом у THL W5

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

Батарейка

Целых два могучих 2000 mA*h кирпичика в комплекте, которые призваны поддерживать жизнь огромного 4.7" яркого экрана, двухядрёного процессора и что-то вечно энергично качающего WiFi чипа.


На тему энергопотребления и времени работы, как всегда, мнения несколько разнятся. Официальных данных на сайте THL нет, но есть восторженные комментарии пользователей под описанием смартфона (которые всегда выставляют 5 звёзд):
The battery life is great. It gets me all the way through the day without having to plug in and that's with very heavy usage - I've been an Android user for years and I've never had a phone that will do that...
или:
The battery exceeds my expectations, getting through a full day is no problem for me using web, email, text, google talk, streaming music via BT, checking weather, reading Kindle, you name it. Average 12 hours or so battery for me with 20% or so remaining at the time I plug it in at night.
То, что это опубликовано на официальном сайте, это, конечно, лучше чем ничего, но отсутствие цифр от производителя несколько смущает.
Охочим до цифр и замеров - их есть у нас:
  • выкрутив яркость до 1% с помощью Elixir2 и запустив pomodroido (экран всегда включён), можно проработать от одного заряда с 9.30 утра до 7 часов вечера, при двух SIM-картах, коротком использовании Wifi для забора почты и немного текстовых сообщений. При этом расход за первые 7 часов - 80%, с 7 до 9 часов заряд уходит с 20% до 4% (как раз успеть добежать до розетки) То есть в районе 10 часов.
  • использование утилит типа ScreenDim Full ощутимо продлевают жизнь батарейки.
Тем не менее, автор с комментаторами в целом согласен: батарейка достойная и её хватает на весь день. Хорошая новость в том, что в чехол можно положить вторую :-)

Две SIM-карты - Про и Контра

Смартфон, как и полагается по древней китайской традиции, имеет две SIM-карты (Dual SIM) и, естественно, не залочен на мерзких капиталистических операторов связи.

Как уже говорилось, у смартфона - две SIM-карты под стандартные SIM (полноразмерные). Здесь нужно ещё немного попенять узкоглазым: места для двух симок очень мало, и слоты очень тугие. Вставка SIM-карты, особенно нижней, это то ещё развлечение - автору этих строк, при всей его инженерной подготовке, потребовалось добрых полчаса, чтобы просунуть обе SIM-карты.
Лирическое отступление. Разного рода проприетарщики обожают изобретать новые несовместимые стандарты, на радость простым пользователям. Нынче появилась тенденция делать не нормальные SIM-карты, которые были ещё до изобретения огня, колеса и электричества, а micro-SIM.


Но Apple не была бы Apple, если бы не выпендрилась со своим форматом NanoSIM. В ихний iPhone 5, видите ли, microSIM не влезают, и давайте уже сделаем новый формат.
Вопреки расхожему мнению о том, что Dual SIM потребляет много энергии, автор не заметил ощутимой разницы между включением двух сим-карт (в комментариях сообщают, что в смартфоне один радиомодуль), одной или Airplane mode: главные потребители батарейки, как и всегда, это экран и WiFi.

Занятно, но вот тут говорят, что в таких Dual SIM смартфонах - два разных GSM-приёмника, которые работают одновременно, мониторя состояние сигнала двух сим-карт. Знающие всё на свете авторитетные Анонимусы приглашаются это прокомментировать.
Работают две SIM-карты параллельно, Оказывается, что нет, на чём можно убедиться на опыте: во время разговора "по одной симке", звоним на вторую и убеждаемся что абонент отсутствует в сети. Тем не менее, можно принимать и отправлять SMS на два номера:


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

IPS Экран 4.7 дюйма

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



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


Здесь следует отметить один момент: на экране видна сетка тачскрина, хотя видна она только на ярких участках изображения. На HTC Desire HD её заметно не было, а здесь её видно. Запишем в недостатки, а то кто-нибудь подумает, что THL заплатила мне мильён юаней за обзор :-)

Забавный момент с регулятором яркости: шагов яркости не так много, и даже на 1%, выведенный с помощью Elixir2, это не похоже. В темноте читать не очень удобно, хотя я нашёл ScreenDim Full, который решает эту проблему (утилита стоит целых 99 центов).

WiFi, GPS, Bluetooth...

и прочий беспроводный ливер вполне достойные: wifi цепляется к домашнему и университетскому роутеру, GPS выдаёт координаты, Bluethooth кидает файлы на планшет и десктоп. Дабы проверить WiFi, автор этих строк, естественно, пошёл на свой бложик:


WiFi чип очень охоч до батарейки, и расположен, судя по нагреву во время работы, недалеко от камеры - в верхней части смартфона. Батарею ест от души, хотя WiFi на моём старом HTC более чувстсвительный, и ловит сильно удалённые WiFi точки, которых THL не видит. В остальном WiFi работает без вопросов и проблем.

GPS работает без проблем, хотя холодный старт занимает ощутимо больше времени, чем на HTC Desire HD. Тем не менее, отлично работает в паре с GPStest и Osmand.

Камера и подсветка

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

Фронтальная камера на 2 мегапикселя для видеозвонков - выдаёт немного засвеченную картинку, хотя вполне приличную.

Задняя камера на 8 мегапикселей тоже радует приличными картинками:

Приличные для телефонной камеры снимки, неплохая цветопередача. Снимает на удивление быстро, и так же шустро работает автофокус.
Подсветка... имеет место быть, и это уже радует. Я не знаю, о чём думали в THL, когда ставили эту пародию на LED-подсветку. Картинка стоит тысячи слов: слева HTC Desire HD, справа THL 5W.


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

Выводы по железу

За 200 долларов железо в смартфоне очень достойное: быстрый двухядерный процессор, много (1 Гб) памяти, Dual SIM, могучая батарейка, яркий и качественный экран, достойная камера и долгое время работы (HTC Desire HD в этом плане тихо покуривает в сторонке). Из недостатков стоит отметить дистрофичную подсветку и нагревающийся при работе WiFi.

Софт: Андроид "Мороженый бутерброд" и как сделать его съедобным

На THL W5 залит Android 4.0.4 ICS с минимумом софта и который при первом включении выглядит вот так:

То есть часы, иконки внизу, аутентичные китайские обои и неубираемая строка поиска от Google. Если общую убогость тем и изкоробочный вид Андроида ещё можно терпеть, то надоедливую строку гуглопоиска, отнимающую целый ряд иконок, терпеть решительно невозможно.

Go Launcher EX

Поэтому было решено установить GO Launcher EX в качестве штатной оболочки. Небольшой напилинг, красноглазинг и подбор тем - и вот что из всего этого получилось в итоге:

Тема Stained Glass, виджет для часов пришлось искать отдельно. По сравнению со стоковым убожеством выглядит отлично и, что самое приятное, конфигурировать можно до посинения.Есть много красивых тем, в том числе платных. На скриншотах выбрана тема Stained Glass (бесплатная). Три скриншота отражают установленные приложения, конфигурацию виджетов Elixir2 и календарик от Go:


Из специфичного софта отмечу Andie Graph (эмулятор TI калькуляторов - мечта любого инженера), G Cloud для переноса настроек и AirDroid для связи со смартфоном по WiFi.

SIM Card management

Это ещё одно специфичное отличие от большинства смартфонов - управление двумя SIM-картами. Выше в разделе про железо уже говорилось, что с THL W5 можно посылать и принимать SMS на оба номера одновременно, при этом в сообщениях они будут отображаться все вместе.

Можно выключать и включать SIM-карты в настройках:

назначив каждой цвет для удобства:

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

Так что теперь можно рассылать и принимать сообщения с обеих SIM-карт одновременно.

Выводы по софту

После HTC Sense и привычного Android 2.3, новый Android 4.0.3 Ice Cream Sandwich выглядит убого и минималистично, с неубираемой строкой поиска вверху, которая отнимает место, и урезанными настройками. К счастью, в отличие от Apple, на андроиде оставлено большое поле для настройки под себя, и сторонняя оболочка GO Launcher EX исправляет положение. В остальном всё как прежде: перенос настроек, уже купленные приложения из Play Store ставятся на новый аппарат, и вот он уже радует нас всеми возможными и невозможными приложениям.

Заключение

Смартфон THL W5, несмотря на своё безродно-китайское происхождение, более чем стоит своих денег, имея мощное железо, отличный экран и кастомизируемый современный Андроид на борту.

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

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

Ссылки

Есть хороший обзор на украинском сайте china-review, откуда автор позаимствовал немного картинок. Краткий обзор на английском здесь.
Читать далее

Закрытие Google Reader: альтернативы и что теперь делать



32 коммент.
Не так давно Google объявил о том, что сервис Google Reader будет закрыт 1 июля 2013 года, а всем до того счастливым пользователям предлагается забрать свои данные из Google Takeout и идти к чёртовой матери. На сохранение своих данных отведено время до Июля и оставлена возможность вытащить свои данные через Google Takeout.

Читать далее