?

Log in

Swift, Apple Watch, and Dynamic Graphs

To Hacker News fellas: please recognize the phrase about a week worth of battery is just a joke. Today I learned that even HN trolls don't understand a concept of trolling. Read into the technical side of this writeup, ignore opinions.


I tried to write something for Apple Watch as a weekend project to polish my rough Swift skills. Swift got me rather excited. It takes some things from OCaml and FP, having a strong nod to immutability concerns. Constants are defined via let, and variable are allowed to vary through a var. Though constants are lame, as only the binding itself is constant and you can change everything inside them as usual.

Nevertheless, Swift is a step in right direction. I enjoyed programming for the most part. However, XCode was traditionally nauseous with its hiccups and interventions into my editing process.

I made an app which shows a dynamic 30fps graph inside the Watch Emulator. Incidentally, had to figure out how to made the animated gifs use solid colors, rather than being hellishly dithered. There's a two step process. First, you have to generate a single palette out of all frames. Then you apply that same palette in the second conversion. The overall workflow would look like this: use a standard QuickTime player to record a screencast, then filter that .MOV through this script to get a .GIF.



The Watch App sources are here: https://github.com/vlm/ExampleWatchGraph (look for WatchKit Extension — that's the very part that runs on a Watch).

The Watch SDK has a strong Apple-style feel, if you get my french. For example, in order to draw something dynamic on a screen, you have to do the following 30 times a second:
  1. Create a graphics context using a size known in advance. You can't just get the WKInterfaceImage dimensions, that'd be too easy. You can only set the user interface element size, not get it.
  2. Draw what's needed through a CoreGraphics (Quartz 2D, runs on a CPU) — that seems to be the easy part.
  3. Convert the context into a .PNG and assign that .PNG to the WKInterfaceImage. Check this out: https://github.com/vlm/ExampleWatchGraph/blob/master/ExampleWatchGraph%20WatchKit%20Extension/GraphPainter.swift#L117

In the end of the day, the watch battery is there just to shuffle these .PNGs around. When Apple realizes how to avoid that, the watch will last for a week instead of hours.

Here's my profiling session showing this .PNG madness:

Swift, Apple Watch, and dynamic Graphs

Поробовал я попрограммировать под Apple Watch на досуге. На Swift'е. Свифт очень даже ничё так. Похож на OCaml чем-то. Например, константы определяются через let, переменные через var. Но константы дутые: внутри них можно менять всё, что там меняется.

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

Сделал приложение, которое показывает динамический график, движущийся со плавностью в 30fps в эмуляторе. Заодно разобрался, как сделать так, чтобы анимированные гифки были с нормальными цветами, а не все в дизере. Для этого надо сначала со всех кадров собрать палитру, затем её в дальнейшем и использовать. В итоге workflow выглядит так: обычным QuickTime'ом делается скринкаст, затем обрабатывается скриптом, делающим из .MOV → .GIF.



Исходники приложения здесь: https://github.com/vlm/ExampleWatchGraph (см. в сторону WatchKit Extension — это именно то, то выполняется на часах).

Проблема с часовым API заключается в том, что там всё через ж всё в Apple-стиле. Например, чтобы нарисовать что-то динамическое на экране, надо 30 раз в секунду:
  1. Создать графический контекст заданного заранее размера. Потому что вычислить размер WKInterfaceImage, в который вставлять будешь получившийся битмап, нельзя. Размер интерфейсного элемента можно задать (set), но не опросить (get).
  2. Нарисовать, что нужно, через CoreGraphics (Quartz 2D) — это лёгкая часть.
  3. Превратить контекст в .PNG, и уже этот .PNG разместить на WKInterfaceImage. См. здесь: https://github.com/vlm/ExampleWatchGraph/blob/master/ExampleWatchGraph%20WatchKit%20Extension/GraphPainter.swift#L117


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

Ну или я что-то не понял.

Pandoc and Manual Pages

Итак, надоело мне рисовать мануальные страницы через nroff. Как в asn1c, например:



Проблемы с подготовкой документации в nroff такие:
Проблемы с nroffCollapse )

Про Крым и медиков

Привет.

Если так-то, у меня родственники в Крыму, в Алуште. Ну, то есть, можно позвонить и провентилировать, если СМИ не доверяешь. Они были рады выйти из Украины, населению же заранее рассказали, чего надо хотеть и как надо думать. Воодушевление какое-то было, как рассказывали.

Час в день дают электричество. В магазинах всё попортилось, холодильников-то нет. Супермаркеты закрылись из-за этого. Туристический сезон свернули, естественно. Хотя какой особый сезон в ноябре. Но, тем не менее.

Кстати о погоде. В Ульяновской области уже несколько учебных заведений начали готовить медработников — медсестёр, медицинских биологов, etc. Есть проблемы с тем, что эти заведения раньше кадрами для федерального НИИ атомных реакторов занимались, ещё какой-то местной спецификой. Учителей готовили, например. Теперь будут медсестёр готовить.

Медсестёр, товарищ. А если это не только в Ульяновской области? Если по всей стране медсестёр начали готовить?

Зачем стране столько медсёстр? Когда и кому они пригодятся, медсёстры эти?

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

Криптография для детей

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

Последний проект — попытка использования крауд-сорсинга на подготовку и печать этой серии приличным тиражом.

https://boomstarter.ru/projects/93363/69034

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

Присоединяйтесь!

Using Python to Code by Voice

У Тэвиса, у которого начался туннельный синдром, всё-таки получилось использовать dictation для программирования. Причём, он до сих пор использует голосовой ввод, даже когда его руки починились. Периодически это случается, люди находят голосовой ввод для программирования полезным.

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

Tags:

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

«Bruno said that he remains hopeful that Congress will loosen restrictions on the RD-180 engine and change the requirements so that ULA would be able to compete for future contracts.»

https://www.washingtonpost.com/business/economy/ula-bows-out-of-pentagon-launch-competition-paving-way-for-spacex/2015/11/16/2aae2aa4-8c99-11e5-ae1f-af46b7df8483_story.html

Остался один SpaceX, у которого двигатели свои.

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

Надолго ли.

Курочки-инвалиды

Алиска пятый день в школе («K», нулевой класс).

— Алиса, как дела у маленьких девочек?
— Хорошо!
— Что в школе изучали сегодня?
— Миссис Луша (Lucia) говорила, что у неё три куры!
— Курочки?
— Три курочки! И пришёл raccoon!
— И он курочку съел?
— Нет! Курочки с ним повоевали-повоевали, и ракун только ножку съел.
— О хосподи...
— Да, ножку у курочки съел. Она прыгает теперь на одной ножке.

Ольга:
— Ты вздыхаешь, а нам теперь этой курочке курятник строить... уже собрали шестьсот баксов.
— За что?
— На курятник. Чтобы деткам показывать, откуда пища берётся.
— О хосподи.



Так и живём.
Недавно деклассифицированные документы по истории развития спутниковой разведки в штатах.

POST-SPUTNIK "CATCH UP" ACTIONS-ARPA AND NASA ESTABLISHED



Decisions during this time were made against the backdrop of this stupendous Russian space achievement. The impact on world opinion, U.S. pUblic opinion, and congressional concern was almost immediate. The shock that a backward Eurasian power could leapfrog the once mightest technological nation to achieve a first in space was the general perception. Of more specific I concern was that the Soviets had a space booster which demonstrated not only the abUlty to place objects in space, but also the capability to carry warheads to intercontinental distance. Any attempts to belittle or minimize the significance of the 184-pound SPUTNIK I satellite were dismissed wben on the third of November a second satellite, SPUTNIK II, was launched by Russia.
This satellite,weighing 1,120 pounds,placed an animal into orbit for the first time, the dog named Laika. The location of ICBM sites in Russia would now become a highest priority task for the intelligence community.


http://www.nro.gov/foia/declass/mapping1.pdf

Там всё: про беспилотники в начале двадцатых, про первый радиоуправляемый дрон в 1935 году, etc. И самое главное — не прекращающий впечатлять меня вопрос про воспроизводимость и continuity проектов во времени.

During the course of the program, there was a considerable turnover of director and management personnel in the government and contractor organizations. In spite of this, the highest level of dedlcation and team spirit was maintained throughout as a continuous thread; this without doubt contributing significantly to program success. (Шрифт мой — lionet)


P.S. Помню статью про то, как на американских авианосцах устроена continuity, при том что кадровый состав полностью меняется менее чем за два года: The Self-Designing High-Reliability Organization: Aircraft Carrier Flight Operations at Sea.
Originally posted by astikhin at Мимо кассы.



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


Объем инвестиций Китая в экономику России в первом полугодии 2015 года сократился на 25 процентов. Об этом сообщил официальный представитель министерства коммерции КНР Шэнь Даньян. Вместе с тем, по его словам, «объем инвестиций в экономики Гонконга и США по сравнению с прошлым годом увеличился на 71,8 процента и 30 процентов соответственно».

Всего за шесть месяцев текущего года Китай инвестировал в нефинансовый сектор 147 стран и регионов мира 56 миллиардов долларов, что почти 30 процентов больше, чем в прошлом году.

Очевидно, по крайней мере, часть этих и других китайских инвестиций предназначена и России. Но почему же тогда итоги нашего вроде бы крепнущего экономического взаимодействия в первом полугодии столь унылы? И наоборот — вложения Китая в экономику США — его главного геополитического противника — столь внушительно растут?

Есть ещё краткосрочные инвестиции, которые могут принести прибыль инвестору в течение двух-трёх лет. Это относится к строительству заводов, например. Но здесь очень важна правильная подача такого проекта. А я лично неоднократно встречался с тем, что российские проекты плохо оформлены. Кроме того, в данном случае важна устойчивость экономической ситуации в конкретном регионе и в целом в стране. Китай не уверен, что в России получит устойчивую отдачу даже от краткосрочных инвестиций.


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