Building iPhone Apps with HTML, CSS, and JavaScript
If you know HTML, CSS, and JavaScript, you already have what you need to develop your own iPhone apps.
(еще 3 слова)
Хорошей DB должно быть монго
Много-много лет назад, великий гений, коим я, несомненно, являюсь, осознавал неуместность использования реляционных баз данных в веб-программировании и регулярно травил пхп-программистов, которые любили писать, например, логи в базы.
И действительно, даже при разработке «типа CMS» для того, чтобы по адресу /about выводился какой-нибудь текст, в 99% случаев достаточно сделать файл about.txt и пихать все туда, если надо запихать больше одного значения («текст и заголовок») — то serialize и вперед (нет, не xml и прочее гавно).
Да и вообще, CMS никому не нужны.
У меня был движок блога, «написанный на файлах» и была даже специальная кнопочка, на которой значилось «no sql». У Болка движок блога, кстати, до сих пор на файлах работает, а ведь уже 21 век на дворе.
С тех пор прошло много времени, остальное отсталое человечество дозрело и движение nosql действительно завелось и стало трендом, похуже mysql.
Я же совершенно случайно и безотносительно ко всяким трендам попробовал mongodb и полюбил.
Пользоваться mongodb надо не из-за производительности, масштабируемости, nosql (забудьте все, что я говорил выше), а только хотя бы потому, что после ее использования внутри остается теплое приятное чувство, что Сделал Всё Правильно.
В mongo можно пихать «документы», при этом документ — это массив. Поднимите руки, что любит массивы так же, как люблю их я? Ага, молодцы, возьмите с полки пирожки.
Что самое смешное — на предыдущем проекте я написал простенькую «оболочку» для mysql, которая позволяет работать с «документом», как с «массивом» (ну, чисто формально оно и сейчас позволяет, после запроса возвращается же массив? А теперь попробуйте изменить в нем одно значение и запихать его обратно, ага).
Документы не обязаны иметь строгую структуру, это называется «schema-less». Не, ну я любил заниматься анальными извращениями и решать, где для столбика в mysql хватит tinyint, а где и вовсе bit(4), но всему есть предел, к тому же после второго раза это уже не так интересно.
Тем те менее, несмотря на то, что нет «обязательных» полей, строить по ним индексы мы все равно можем. А потом искать по ним (впрочем, искать можно и вовсе без индексов, причем иногда более оптимально, чем с ними — когда требуется перебор всей таблицы, например).
Таким образом, «коллекция» в mongo представляет собой просто набор массивов, куда можно свободно писать, свободно модифицировать и свободно делать любые выборки по любому количеству полей, не хуже, чем в mysql.
Кстати, запросы для выборок — тоже массивы. Очень удобно генерировать их автоматически, не надо подставлять «SELECT .... FROM» в нужных местах, просто создал массив — и вперед. То есть, если документ-массив целиком же кинуть в выборку в качестве запроса, то он найдет и вернет самого себя (что логично), если часть документа, напимер, массив user => acerbial, то оно вернет все документы, где user => acerbial.
«Но без join-ов».
В этом — прелесть номер два. Так как пихать можно любые массивы (это называется «Document Store»), половина join-ов отпадает естественным образом.
Например, заметка и комментарии к ней — это один документ, а не 1+N запись в базе данных (где N — количество комментариев).
Учитывая, что максимальный размер документа — 4 мегабайта, и ты не обязан работать с ним целиком, не только нет причин не хранить комментарии отдельно, но это является единственным логичным и правильным способом.
Сразу решается «проблема» удаления текста и удаления комментариев к нему.
Очень просто решаются задачи, типа «закладки пользователя» — они принадлежат, натурально, пользователю.
Ну давайте уже признаем, что в вебе хранятся и выводятся документы — сразу станет легче жить.
Многие мелочи заботливо сделаны «для веба», да и просто — заботливо сделаны. У каждого документа есть автоматически создаваемый уникальный id («аналог» int autoincrement в mysql), о котором не надо заботиться — он просто есть и работает. Более того, когда ты запишешь новый документ в коллекцию, mongo вернет этот id сам, mysql же придется об этом просить отдельно.
Есть capped collection — коллекция, которая обрезает себя сама («хранить 100 последних документов»), идеально для ведения логоподобной ерунды. Есть upsert — «если документ не существует, то создать», это позволяет писать один и тот же код для создания и редактирования. (Что тоже меня всегда бесило в MYSQL — там update и insert это две разные команды).
Можно не только указать, какие поля возвращать («как в mysql»), но и обратное — указать, какие не возвращать.
В результате всех этих мелочей код у меня выходит раза в два меньше (и раза в два медленней, смакую удовольствие) и пока что нет никакой необходимости создавать обертки вокруг mongodb, все стандартные классы делают ровно то, что нужно.
Инъекций, как легко догадаться, тоже не существует в принципе, как можно сделать инъекцию в массив?
Mongo просто очень приятный и покрывает все потребности «домашних веб-движков блогов» лучше, чем это делает mysql.
Скорее всего, он более подходит и для «серьезных, масштабируемых проектов», но в эти дебри мне углубляться не хочется, потому что там все сводится к аргументу «99.99% стартапов никогда не умрут от излишней посещаемости, поэтому не выебывайтесь, и делайте на mysql+php».
Проблема в том, что на mysql просто физически неприятно после того, как попробовал mongo.
Главный минус — Монго пока что мало где стоит, и уж явно не стоит на хостингах за 5 баксов.
Собственно, поэтому и я агитирую — ставьте, пробуйте, требуйте в магазинах города. Так победим.
Остальные «минусы» Монго вытекают из плюсов — ну, знаете, как с девушками: «страшная, но ебливая», и являются не минусами, а «архитектурными решениями».
Например, по умолчанию Монго пишет на диск когда захочет (Mongo writes when it pleases, ага). За счет этого достигается феноменальная скорость работы (проще просто сказать «ага, записал» на очередной запрос, а записать как-нибудь потом) и феноменальное умение проебывать данные за последнюю минуту и портить всю базу, если отрубилось питание (поправимо с помощью --repair, но осадочек остается).
С одной стороны, это все поправимо, никто не запрещает делать запросы с опцией принудительной записи, с другой — в этом и прелесть, за супермегапроизводительность надо чем-то платить.
(Рекомендуемая книга — MongoDB: The Definitive Guide, хотя для начала мануала на сайте хватает «за глаза»).
Ложная слепота
«Ложную слепоту» я уже советовал, но лень было метать бисер перед вами, свиньями, и писать обзор.
ИЗО
Сначала какие-то блогеры раскопали, что Pin-up’ы рисовались с фотографий, выложили картинки и фотографии рядом и вздохнули: «а мы-то думали, что это какие-то мегамонстры рисовали». Потом какой-то блогер начал копать дальше, выяснил, что почти все великие художники не брезговали рисовать по фотографии и ужасно расстроился.
И теперь вот прекрасная miumau срывает покровы.
Тут я и не выдержал.
По старой доброй традиции, давайте с очень умным видом поговорим о том, в чем я совсем не понимаю — о рисовании.
Заметка содержит нехарактерно большое количество картинок, но тема обязывает.
Все эти годы я трепетно боялся «рисования», так как был уверен, что художники совершают какую-то неведомую магию, для которой нужен как минимум «талант». Все усугублялось тяжелым детством — у моего лучшего детства друга был прям талант-талант, и уже в первом классе он что-то рисовал на холсте маслом — а это вам не пенис собачий — в то время, как я имел четверку (!) в четверти по рисованию, что было несмываемым позором, учитывая, что все остальные оценки были пятерками.
Не так давно я откопал книгу «Откройте в себе художника», автор — Бетти Эдвардс, в которой «все эти художества» объяснялись очень просто.
Есть, дескать, правое и левое полушарие, левое отвечает за логику, речь и все остальное «правильное», а правое — за всякую неведомую хуйню.
(Я могу ошибаться, но это — представление 20-летней давности, а современное представление несколько более сложное, но тем не менее).
У обычных, нормальных, людей доминирует левое полушарие, поэтому когда человек садиться рисовать, например, лицо, он рисует не реальные формы, а символы из головы. («Голова круглая», «глаза в виде миндалин»). Получается в итоге, разумеется, «совершенно непохоже», потому что в реальности мозг вмешивается в восприятие изображения сильнее, чем нам кажется.
Стол, например, «квадратный», но из-за перспективы и прочих штук мы никогда не видим его квадратным, но мы про это знаем, и рука сама тянется рисовать неправильно правильные квадраты.
Для того, чтобы побороть свой мозг, в книге есть несколько простых магических упражнений.
Упражнения простые, но очень забавные — несколько раз удавалось словить практически «триповые» состояния, и вообще — ощущение, когда у тебя отрубается речевой центр, а потом медленно (за несколько секунд) включается обратно — это забавно. То-то художники иногда языка человеческого не понимают.
Эзотерически настроенные товарищи могут рассматривать эти упражнения как техники работы с тоналем и лучом внимания, что бы это ни значило.
Самым полезным с познавательной точки зрения упражнением было нарисовать лицо человека «как умеешь», а потом сравнить через несколько занятий с тем, что стало получаться.
Что примечательно — в книге было много примеров «до» и «после» с разницей примерно в месяц, но я им не верил. Мало ли, реклама. Слишком разительная разница.
Тем не менее, за две недели занятий по часу в день, у меня получилось нарисовать автопортрет.
Вот «до» и «после»:

Самое главное — это рисунок «до». Я правда старался. Очень.
А это на следующий день:

И еще через четыре дня пробуем рисовать в цвете:

Просто балуемся, доказывая, что модную цветастую хуету рисовать может любой:

Ну и груша на закуску:

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

2. Вся ценность художника состоит не в том, что он может «из головы» нарисовать все, что угодно, а в том, что он в это привносит своего, включая «передачу настроения».
Фотографическая точность — это мастурбация над «техникой», никому сейчас не нужная.
«Есть же фотоаппараты». Серьезно, раньше художники рисовали портреты за деньги, чтобы решить ровно ту же задачу, которую сейчас решает «мыльница».
3. При этом если художник рисует в «характерном стиле», то есть «привносит» каждый раз одно и то же «свое», то он, скорее всего, лентяй.
Ну, это как программист, который знает всего один язык. Знает хорошо, имеет готовые библиотеки и уже может решать задачу «не изобретая велосипед», а переиспользуя код. Но тем не менее — лентяй.
Сидит на своей сытой работе и зажирается.
4. Забудьте про пункты 2 и 3, ибо есть еще коммерческая ценность художника, там как раз все наоборот — чем более стабилен и востребован стиль и чем больше плодовитость автора в этом стиле, тем он, как «иллюстратор», лучше.
5. Рисование — это навык, ремесло, весь «талант» заключается в том, что у прирожденных художников части мозга, отвечающие за «рисование», просто более раскачаны изначально. Раскачать можно любого, весь вопрос в прикладываемых усилиях.
Меня хватило примерно на месяц, дальше было все понятно, и я все забросил.
Я домосед, поэтому рисовать «прекрасный мир, окружающий нас» ради удовольствия не получилось бы. Получать деньги как простой иллюстратор тоже было бы бессмысленно, по той же причине я не стал «обычным пхп-программистом».
Экстраполируя прогресс, можно было бы сказать, что за год-два упорной работы в этом направлении я получил бы еще одну никому не нужную специализацию — «арт-директор».
Книгу со смешным названием «Откройте в себе художника» могу посоветовать вообще всем «для общего развития». Она Реально Работает, а затраты по времени минимальны.
Очень хорошо, что такие книги есть. Если начинать обучение с основ академического рисунка и рисовать простые геометрические фигуры первые три месяца, то очень легко отбить все желание.
Я понимаю, что потом станет легче, но гораздо приятней сначала «открыть в себе художника», а уже потом, если понравиться, помучать себя академическим рисунком.
В качестве лирического отступления: параллельно прочитал пару книжек «про это». Оказалось, как обычно, что нам всё врали или сами не понимали, о чем говорили. Так, например, я всю жизнь считал импрессионизм мазней, а импрессионистов — помпезными идиотами, которые рисовали «настроение» и «впечатление», а всё оказалось еще проще и прозаичнее.
Сначала художники рисовали контуры объектов (наскальная живопись), потом — массу («объемные» объекты и перспектива), потом до них дошло, что можно рисовать свет, и некоторые вещи, например, «лучи света в лесу» не нарисуешь ни «контуром», ни «массой».
А объекты появятся «сами», ибо любой объект мы видим только потому, что он отражает свет. (Это физика, детка!).
Собственно, импрессионисты — это те, до которых это дошло первыми. Поэтому они и любили рисовать всякие «световые» штуки, типа различной солнечной активности, природных явлений и окон.
Поэтому и «мазня» — свет же.
Отсюда, кстати, понятна (ну, по крайней мере — мне) и ценность некоторых картин: жил-был художник, был вовлечен в некий «художественно-культурный процесс», относился к какой-нибудь школе, рисовал «как все». Потом начал экспериментировать, сказал новое слово — которое нам, может и не понять — пусть искусствоведы разбираются, потом всякие подражатели подтянулись и начали рисовать так же.
А первая картина «в этом стиле», или пусть даже не в стиле, а как «попытка нащупать стиль», осталась, и вот она. Она стоит денег, как документальное свидетельство «прорыва».
То есть сейчас любой дурак возьмет и нарисует мазню не хуже любого импрессиониста, но тогда это было прорывом. Все равно, что любой школьник сейчас сможет собрать детекторный приемник, а Попова почему-то мы помним и любим, и его первый приемник стоил бы сейчас бешеных денег.
Я сейчас, конечно, безумно глупо все упрощаю, до каких-то пучин невежества, чтобы даже «всякие программисты» поняли, а не только возвышенные люди, как мы с вами.
Заодно понятно, что «модные современные художники» — это развод для лохов, а покупать надо тех, кто как минимум лет сто, как умер. Чтобы наверняка.
По тем же причинам современного искусства не существует — благодаря интернету, миру-деревне (привет, Маклюэн) и общему темпу жизни, любая новая «фишка» в искусстве тиражируется мгновенно.
Только Ван Гог сел писать «Подсолнухи», а уже все фотобанки заполнены изображением всех возможных цветов в модненькой ныне манере «под Ван Гога», по цене доллар за пучок.
Пойди найди тут, откуда все началось.
