Избранное

Все заметки

GitHub icon Github

Buffer icon Проекты

Обо мне

Избранное

Про Notion

Я давно слышал про Notion.so, и на VC.ru и в телеграмм-канале его дизайнера читал, зарегался давно, но всё никак попробовать времени не хватало.

Вообще, уже долгое время хочу систематизировать все свои записи, заметки, напоминания и списки в одном месте. Сейчас многое хранится в Pocket, Google Keep, Docs и Drive. Думал развернуть у себя что-то типа MediaWiki, DokuWiki, чтобы был поиск, вложенные страницы, таблицы и вот это вот всё. Но так до этого дело и не дошло. Зато, до Notion добрался.

Если коротко:

сначала не понятно и сложно, потом интересно и многообещающе :)

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

Планирую туда перенести базу знаний по своим проектам, также таблицы из Trello, списки задач и диздоки. Ну и личные всякие штуки. Есть мобильные приложения и проги для Windows и MacOS. Ещё удобно отправлять в Notion ссылку на какой-нибудь сайт/статью/видео через встроенную функцию «Поделиться» на Android или iOS, как я делал это с Pocket. Возможностей по внутренней организации и оформлению страниц — море.

Эта штука бесплатна для личного пользования с ограничением в 1000 блоков, всё что больше — платно, $4 в месяц. Если нужен доступ для нескольких пользователей, с обсуждениями и админскими опциями, то $8.

Было бы классно, если была self-hosted версия, как например DokuWiki или Gitlab, но пока отсутствует. Посмотрим, как быстро кончатся «бесплатные» блоки :)

Наставничество

Читаешь новости, блоги, фейсбуки, (не)успешные истории и прочее, и видишь, что многие кто добился успеха, сделали это на своих ошибках. Да, у них всё получилось, набрались опыта, заработали деньги, написали статью, как они через всё прошли и т. д. Но сколько было потрачено времени и сил? Наверно есть ситуации когда это оправдано. Хотя сейчас, с ходу — не назову...

Как пример, образование в университете/институте по IT специальностям, в России. Это же полный провал. Понятно что сейчас информация быстро устаревает, но там же вообще ахтунг. Кто-то скажет, что там дают фундаментальное образование, что там учат учиться! Возможно. Но не 5 лет же! Специалисты выходят не подготовленные к реальной работе. Если ты не начал самообучаться, если не пошел стажироваться в профильную компанию, то такому выпускнику сложно будет найти работу. И работодателю нужно будет учить его с начала. Ценность такого высшего образования сильно преувеличена.

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

У нас почему-то плохо знают (забыли?) про наставничество. Это когда ты хочешь чему-то научиться/добиться и находишь себе опытного в определенной сфере человека, который уже прошел весь путь, который может дать совет, у которого скорее всего тоже был наставник, а у того тоже...:) В общем, человек, который готов помочь и замотивировать. Да, такие есть. Человек может быть наставником и даже не знать об этом. И наверное, наставнику не обязательно быть «профессором» в своей сфере.

У всех профессионалов — есть тренер, а у всех успешных людей — наставник.

Кажется, так это звучит.

Почему же тогда не найти себе наставника? Это сложно?
Нет. Есть онлайн сервисы для наставников и наставляемых.

Может быть стыдно/некомфортно просить такой помощи?
Возможно, для кого-то это так. Ведь в том же IT много интровертов.

Почему у нас это так слабо развито? Почему не говорят в школах и ВУЗах?
Я не знаю :(

Главная мысль:

Хотите быстрее добиться успеха — найдите себе наставника!

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

Получилось немного скомкано, но посыл вроде ясен :) А если вы хотите помогать другим и у вас есть чем поделиться, есть опыт в какой-то сфере — станьте наставником! Возможно один из ваших наставляемых — будущий Пушкин, Стив Джобс или Менделеев.

2018   мысли

Unity Mobile Input

Выложил на Github плагин нативного ввода для мобильных устройств. Это небольшая надстройка над стандартным Unity InputField UI. Работает на iOS и Android.

Зачем он нужен:

  1. Нативное поле ввода и клавиатура
  2. Отсутствует раздражающее дополнительное поле над клавиатурой в Android
  3. Для iOS можно добавить кнопку «Готово»
  4. Настройка кнопки Return для клавиатуры: стандартная, далее, готово, поиск
  5. Для работы нужно просто повестить скрипт MobileInput на родной InputField UI

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

В моей версии исправлены ошибки и отрефакторен почти весь код от старого и неподдерживаемого плагина UnityNativeEdit.

Исходники на Github

Unity на Linux

Оно работает!

Всмысле не оболочка Unity, а редактор Unity :)
На выходных решил проверить, как там Ubuntu и всё «вот это вот с ней»... Оказалось, что всё хорошо-то. Всё работает, обновляется, есть куча разного софта, Unity в конце концов.

Последний раз я ставил какой-то Linux года 3-4 назад, но как-то не пошло. Даже не знаю почему. Потом пересел на MacOS и забыл про Linux и Windows. И вот — Ubuntu 16.04 LTS. Полёт нормальный. Оборудование на ноутбуке определилось, тачпад, камера, звук и т. д. Конечно, я сразу загуглил «ubuntu после установки» и проделал несколько настроек, но в целом — всё норм. Почему Ubuntu? Я не разбираюсь в 100500 дистрибутивах, да и не охота как-то, поэтому выбрал, тот что на слуху.

Так вот, по поводу Unity. Оказывается сборки под линукс делаются регулярно. И последняя версия которую я скачал и установил Unity-2017.3.0p2, вполне себе работает. Правда, я пока ничего не пробовал на ней сбилдить, но обязательно проверю :) Версия под линукс всё ещё в бете, поэтому возможны косяки. Но я к этому готов.

VSCode тоже есть под линукс и отлично работает. Думал ещё SourceTree поставить, но разработчики не планируют её выпускать для линукса. Жаль конечно, но на форуме где обсуждалось (и осуждалось) это решение, я нашёл пост про GitKraken. И, он очень даже хорош! Также есть аналог маковского homebrew — linuxbrew.

В общем, линукс — это не страшно и не больно :_) На нём даже игры делать можно...

Библия free2play

Почитал библию free2play. Определенно есть полезная информация. Для тех кто только начинает делать игры — must read, потому что там не только про f2p. Например:

  • с чего начать
  • основное правило: LTV должен быть больше CPI
  • «дефолтные» показатели ретеншн и монетизации
  • игровой цикл: action → reward → investment → trigger
  • игровые сессии и их продолжительность
  • экономика игры

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

Кликабельные ссылки в TextMeshPro

Как сделать чтобы ссылки в тексте, стали «ссылками» и при клике на них открывалась страница? Просто! Достаточно открыть примеры из TextMeshPro (TMP) и добавить немного кода.

Пускай у нас есть компонент ТМР с текстом, в котором встречаются ссылки на страницы в сети, например: http://mopsicus.ru, www.unity3d.com, и другие. И нужно чтобы это выглядело примерно так, и было кликабельно:

Для этого, находим ссылки в тексте с помощью регулярного выражения, сокращаем их (по желанию) и приводим к формату для обработки ТМР.

// Check links in text
void CheckLinks () {
	Regex regx = new Regex ("((http://|https://|www\\.)([A-Z0-9.-:]{1,})\\.[0-9A-Z?;~&#=\\-_\\./]{2,})" , RegexOptions.IgnoreCase | RegexOptions.Singleline); 
	MatchCollection matches = regx.Matches (textMessage.text); 
	foreach (Match match in matches) 
		textMessage.text = textMessage.text.Replace (match.Value, ShortLink(match.Value));     	
}

// Cut long url
string ShortLink (string link) {
	string text = link;
	int left = 9; 		
	int right = 16; 		
	string cut = "..."; 	
	if (link.Length > (left + right + cut.Length)) 
		text = string.Format ("{0}{1}{2}", link.Substring (0, left), cut, link.Substring (link.Length - right, right));
	return string.Format("<#7f7fe5><u><link=\"{0}\">{1}</link></u></color>", link, text);
}

Как установить подчеркивание, цвет текста и другое смотрите в документации ТМР. Осталось повесить обработчик нажатия и определить на какую ссылку кликнули:

// Get link and open page
public void OnPointerClick (PointerEventData eventData) {
	int linkIndex = TMP_TextUtilities.FindIntersectingLink (textMessage, eventData.position, eventData.pressEventCamera);
	if (linkIndex == -1) 
		return;
	TMP_LinkInfo linkInfo = textMessage.textInfo.linkInfo[linkIndex];
	string selectedLink = linkInfo.GetLinkID();
	if (selectedLink != "") {
		Debug.LogFormat ("Open link {0}", selectedLink);
		Application.OpenURL (selectedLink);        
	}
}

Исходник на Github

Emoji в Unity

Обновлено 1.03.2017
TextMeshPro теперь входит в состав Unity и стал бесплатным!

Как добавить поддержку эмоджи в Unity? К сожалению, решения из коробки нет. Но есть самый лучший ассет для работы с текстом Text Mesh Pro. Да, он не дешевый, но он этого стоит. Может когда-нибудь Unity его купит, и это будет стандартным решением, как они сделали с Anima2D.

В версии TMP, которая скоро должна пойти в релиз, разработчик добавил поддержку Emoji. Точнее, можно делать свои атласы, юникод эмоджи будет автоматически заменяться на картинку. Чтобы были доступны все эмоджи, нужен большой атлас. Я использовал EmojiOne. Также понадобится одна отличная программа — TexturePacker и расширение для Unity TexturePacker Importer.

  1. Загружаем все эмоджи в программу и экспортируем в формат Unity — Texture2D sprite sheet.
  2. После этого меняем Data format на JSON (Array) и делаем экспорт еще раз.
  3. Теперь полученные три файла: Emoji.png, Emoji.json и Emoji.tpsheet загружаем в Unity.

Осталось с помощью TMP Sprite Importer сгенерировать атлас для Text Mesh Pro. В результате, на iOS и Android можно использовать эмоджи.

Бесконечный скроллинг в Unity

Обновлено 07.09.2018
Теперь можно использовать ячейки разной высоты!
Добавил новые демки

Когда делаешь игру под мобильную платформу, пусть Android или iOS, иногда хочется использовать стандартные для этой платформы компоненты, потому что они проверены, оптимизированы и быстро работают. Например, списки. Кто делал в Unity интерфейс с большим количеством прокручивающихся элементов в Scrollrect, наверняка замечали, что после определенного количества, вся эта конструкция начинает притормаживать. Наиболее оптимально использовать т. н. data driving подход, когда количество видимых элементов не меняется, а данные подгружаются динамически в нужную ячейку.

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

Была сделана такая знакомая мобильным разработчикам функция, как pull-to-refresh, также, ячейки можно настраивать как угодно под ваш проект, нужное количество создается автоматически в зависимости от высоты экрана. Единственное ограничение — высота ячейки не динамическая.

Использовать очень легко — все делает один скрипт, вещаем его на Scrollview настраиваем параметры и коллбеки и все. Демо есть. Если будут какие-то вопросы и пожелания, не стесняйтесь писать. Удачи!

Ссылка на Github

Unity share плагин для iOS и Android

Каждый разработчик пытается автоматизировать процесс. В результате, создаются собственные движки, врапперы, надстройки, «велосипеды» и т. д... Так и получилось, нужно было сделать более-менее универсальный способ шаринга в Unity проекте для андроидов и айфонов, в результате написал эти два плагина. Теперь запросы типа: «как расшарить из Unity», «unity share plugin», «как отправить вконтакте из unity» должны вести сюда :)

Использовать очень просто. Есть небольшие заморочки с настройкой проекта под iOS, но это делается один раз и автоматически, с помощью обработки проекта после билда. Можно добавлять, изменять и использовать как угодно, все исходники и пример на Github.

В данный момент можно шарить в:

  • ВКонтакте
  • Facebook
  • Twitter
  • Одноклассники
  • WhatsApp
  • Viber
  • Telegram

Интерфейс в Unity выглядит так:

// vk, fb, ok, tw, wa, vb, tg
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;

public class Sharing : MonoBehaviour {

	#if UNITY_IOS
		[DllImport ("__Internal")]
		private static extern void shareVia (string app, string message, string url, string param);
	#endif

	// Поделиться 
	public static void ShareVia (string app, string message, string param = "") {
		#if UNITY_ANDROID
			message = string.Format ("{0} {1}", message, "http://my.url.com"); // добавление ссылки
			using (var plugin = new AndroidJavaClass("com.mycompany.sharing.Plugin")) {
				plugin.CallStatic("shareVia", app, message);
			}
		#elif UNITY_IOS
			shareVia (app, message, "http://my.url.com", param);
		#endif
	}
		
	// Не удалось расшарить
	void OnShareError (string result) {
		switch (result) {
			case "NotInstall":
				// приложение не установлено
				break;
			case "NotAvailable":
				// шаринг не доступен
				break;
			case "AccessDenied":
				// нет доступа
				break;
			default:
				// не удалось расшарить текст
				break;
		}
	}
}

Например, чтобы расшарить в Facebook, достаточно вызвать:

Sharing.ShareVia ("fb", "Hi from Unity");

Для работы некоторых API, нужны ID приложений. Чтобы их получить, необходимо создать приложения для этих соц. сетей, как это сделать обычно написано в специальном разделе для разработчиков на сайте. Например, как для ВКонтакте.

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

Исходник на Github

2016   android   ios   plugin   unity
Ранее Ctrl + ↓