Pixel City процедурный город

Microsoft will adopt Chromium for its next browser

The most interesting thing to me about this story is the long, wandering path Microsoft took to bring a browser back to the Mac after 15 years of absence from the platform.

Once upon a time, Microsoft released Internet Explorer 5 for the Mac, which was widely regarded as the best web browser (at the time) for any platform. It had a great UI, it was fast, and it had great support for new (at the time) technologies like CSS and transparent PNGs. Then Apple released Safari for the Mac, based on the KHTML rendering engine which Apple adopted and called WebKit. Soon after that, Microsoft quit developing IE for the Mac. Also after that, Google used WebKit as the basis for its new browser, Chrome. As with Apple, once their own branch of code diverged enough, they made it their own and renamed it Blink. They also have an open-source browser based on this engine called Chromium. (Also along the way, Microsoft changed from Internet Explorer to Edge.) And now Microsoft will make a browser based on Chromium and it will be available on the Mac for the first time in 15 years.

So IE left the Mac, and Safari led to Chrome, which is now being used by Microsoft, and IE’s successor will come back to the Mac.  

(From Daring Fireball and Michael Tsai.)

Что еще?

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

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

В этой статье были приведены примеры работы с GD на PHP и реальный код по работе с графикой на примере генеративного искусства.

I don’t think we’ll ever see a small iPhone again

I was surprised that anyone, let alone “Today’s Apple”, would kill the iPhone SE so quickly. It was introduced in March 2016 and got a storage bump in March 2017. In the world of lesser-loved and neglected Apple products, it was practically brand new. Apple is all about keeping products around forever: the Mac mini from 2014, the Mac Pro from 2013, the iPad Mini from 2015, the non-retina MacBook Air from 2015. 3-plus years without an update or price drop is common now. To kill it with no warning just before the new 2018 iPhones came out was practically unprecedented.

Update, October 23, 2020: Hooray! I was afraid that small iPhones were gone forever, but today Apple came out with the iPhone 12 Mini which is just what I was hoping for/expecting: an X-style device (edge-to-edge screen, no home button) that’s about the size of an old 5S/SE. (Photo 1, photo 2.) I hate that the power button has moved to the side, and I’ll miss the headphone jack some, but overall it looks good.

Дороги и парки

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

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

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

Пример сетки

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

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

Процесс создания тайлов города выглядит примерно так:

Создаём базовое изображение и подгружаем объекты.

  • Инициализируем массив мира.
  • Добавляем дороги.
  • Добавляем парки.
  • Рисуем подготовленные данные.
  • Сохраняем в изображение.

Изучить исходный код вы можете на Github.

20 Years of Mac OS X

Mac OS X 10.0 was released 20 years ago today, on March 24, 2001. There is plenty of coverage about it like this and this. Here are some quick thoughts from me on every version of Mac OS X.

  • The first time I used OS X was version 10.0.3, very shortly after it was released. (I still have the CD.) It came with some G4s my work bought and I used the included disc to install it on a spare beige G3 I had at work. Having used Linux for a couple years, I loved the idea of being able to use a supported Unix variant at work for random tasks. The Unix-ness of it was great and the sleep/wake speed was amazing. Everything else about the OS was so slow as to be basically unusable. I specifically remember dragging a rectangle with the cursor to select multiple icons on the desktop and having the machine lag before each icon was highlighted.
  • 10.1 was tons faster than 10.0. Reports at the time attributed this to lots of debugging code being removed. It was reasonable, but there were still few third-party apps, so it wasn’t good for much. The first Adobe app to run natively on OS X was *yawn* Acrobat. Next was Illustrator, but most of my work in those days was done with Photoshop, so I kept waiting.
  • By the time 10.2 (Jaguar) came out, Adobe apps and MS Office were available. 10.2 was way faster than 10.1, and hardware was almost 2 years newer by this point, so it was viable. It had Quartz Extreme and ran great on supported hardware. My 800 MHz G3 iBook with a supported video card ran 10.2 better than my dual-G4 at work with an unsupported card. 10.2 was when I switched to OS X (from OS 9) full-time.
  • 10.3 (Panther) was great. Tied with 10.6 for my favorite OS X release of all time.
  • 10.4 (Tiger) I didn’t like, but it was what came on Intel Macs, which were awesome. I stuck with 10.3 on my early G5 at work and on my G4 Mini at home.
  • 10.5 (Leopard) was a mixed bag but better than 10.4 overall. Time Machine was great, but I still ran 10.3 where I could.
  • 10.6 (Snow Leopard) was the first Intel-only release and it was smooth, fast, and great. 10.3 was no longer really viable for everyday use as it could only run older browsers and the Web was advancing. Plus Intel machines had great performance. My 1.83 GHz Core Duo iBook could perform useful tasks faster than my 2.0 GHz dual G5.
  • 10.7 (Lion) I hated. I think I only ever had it on one work-issued machine for a very short time.
  • 10.8 (Mountain Lion) was a little better and I ran it on any machine that wouldn’t support 10.6. As I had with 10.3, I stuck with 10.6 everywhere I could for as long as I could. Once that became untanable, I updated my 10.6 Macs to 10.8, because…
  • 10.9 (Mavericks) I also hated. 
  • 10.10 (Yosemite) was tolerable but I only ran it where hardware and/or work dictated. I stayed with 10.8 on my home Mac for a long, long time, finally updating to…
  • 10.11 (El Capitan) no, not this…
  • 10.12 (Sierra) not this either…
  • 10.13 (High Sierra) this is what I finally updated my main Mac Mini (a 2012 server) to once 10.8 was no longer viable.
  • 10.14 (Mojave) — I don’t think I ever ran this anywhere, except for maybe a barely-used work-issued Mac.
  • 10.15 (Catalina) — same with this. Never run by me voluntarily.
  • macOS 11 (Big Sur) — is running on my M1 Mac Mini, which I ordered on release day and received quite promptly. It’s fine. There are some things I don’t like in it — some lingering bugs that have been around for years and were not in 10.6 or 10.8 — but it’s fine. I’m used to it. Everything is web-based now and I spend much less time in the Finder than I used to, so its dumb behaviors only bug me occasionally.

OS X took a long time to feel as fast as OS 9 did. It became acceptable mainly due to hardware getting 2 or 3 times faster. I had a beige G3 that dual-booted OS 9 and either 10.1 or 10.2. I remember installing universal apps — single binaries that could run in either OS — and testing them. One computer, one hard drive, one shared partition, one copy of each app. (I think it was the Macromedia Studio MX apps: FreeHand, Fireworks, etc.) Simply launching an app took almost exactly twice as long in OS X as it did in OS 9. Literally the same single binary on disk in each environment: you could run the installer in OS 9, launch the app in OS 9, reboot to OS X, and launch the app you had just installed. 

Создание заготовок для генерации изображений

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

Для создания пиксельных изображений я использую Aseprite. Aseprite — это потрясающий инструмент!

Aseprite — это приложение, созданное специально для пиксель-арта, и поэтому у него довольно уникальный и необычный интерфейс. Я не люблю, когда интерфейс приложений выглядит как-то странно или нестандартно. Мне нравится, когда всё выглядит так, как должно выглядеть, но для Aseprite я сделал исключение — интерфейс идеально подходит для использования, и мне действительно нравится им пользоваться. Aseprite — платное приложение, но я с радостью заплатил бы за него снова — его использование приносит мне радость, а таких приложений не так много.

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

“Big Text” has gone too far

Seriously, this is bullcrap.

OK, some details: This is Apple’s new “Compare Models” page. This screenshot shows my browser set to 1280px wide, and as tall as it can be, on my 1920×1200px display. 95 pixels at the top of this image are used by the Mac OS* menu bar and Chrome’s title/tab bar, location bar, and bookmarks bar. The bottom 56 pixels are for my Dock. The remaining 1,049 vertical pixels are used for a grand total of SIX lines of text. The fact that it’s scaled down to less than half size here — but still readable — is a good indication that it’s not a particularly efficient use of space.

You know what would help me compare specs? Being able to see lots of info on the screen at once. Maybe I’m not just comparing it all item-by-item. Maybe I want to factor in several things at once. Maybe I’d like to see the weight and the battery life at the same time.

Here is the same info, coming in at 250 pixels tall on my desktop’s screen — just one quarter of the original height. Tell me, is this that hard to read?

iPhone X iPhone 8 Plus iPhone 8
5.8” Super Retina HD display2 5.5” Retina HD display 4.7” Retina HD display
12MP wide-angle and telephoto cameras 12MP wide-angle and telephoto cameras 12MP camera
Face ID Touch ID Touch ID
A11 Bionic chip A11 Bionic chip A11 Bionic chip
Wireless charging (works with Qi chargers3) Wireless charging (works with Qi chargers3) Wireless charging (works with Qi chargers3)

Also: that table shows up in its entirety on the 4″ screen of my iPhone 5S. The Apple page? Just three rows of icons — and just two columns.


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

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

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

Генерация пиксельных аватаров

Скрипт генерации аватарок работает максимально примитивно. Я просто создал различные заготовки слоёв для всех частей аватара (фоновый цвет, глаза, рот), а затем использовал PHP для наложения слоёв различных частей, выбирая случайный слой для каждой из группы.

При работе с PHP я использую библиотеку GD, которая часто идет по дефолту при установке PHP. Так же, для разработки я использовал Docker, благодаря которому вы сможете запустить этот проект у себя локально в пару команд и проверить работу этого скрипта.

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

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

В псевдокоде процесс создания случайной аватарки выглядит так:

  • Создаём изображение (imagecreatetruecolor).
  • Получаем массив всех возможных частей для первого слоя (используя функцию glob для поиска файлов в указанной папке определённой группы).
  • Перемешиваем все найденные картинки, чтобы выбрать случайный элемент.
  • Накладываем слой на результирующее изображение (imagecreatefrompng > imagecopy).
  • Повторяем для каждого слоя.
  • Сохраняем изображение (imagepng).

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

В моём примере набор изображений составляет: 9 изображений глаз, 5 изображений рта и 7 изображений кожи — что даёт 315 уникальных комбинаций (9 * 5 * 7). Если добавить волосы, очки (и всё остальное), то можно быстро получить десятки тысяч возможных вариантов.

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

Генеративное искусство на основе тайлов

Если вы когда-нибудь играли в 2D видеоигры, вы наверняка видели уровни, созданные с помощью двухмерных сеток тайлов. Это очень интересная задача, учитывая мой недостаток опыта работы в этой области. К тому же, я не работал с изометрическими сетками раньше — поэтому моя следующая работа была немного сложнее.

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

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

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

Для изометрического города код выглядел примерно так:

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

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

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

I’m looking forward to Macs with Apple-designed CPUs

In 2003, I had a PowerMac G5 at work. It had two 2.0 GHz CPUs.

When Apple transitioned to Intel CPUs, I got a white plastic MacBook with a 1.83 GHz dual-core Intel Core Duo CPU. (It was quite an upgrade from my 800 MHz G3 iBook.)

I used to rip DVDs a lot. My dual-1.83 GHz Intel laptop could rip DVDs faster than my dual-2 GHz G5 PowerMac. I forget how much faster, but it was significant. I think around 10 or 20%. Considering the CPU was running at an 8.5% lower clock speed, that was very impressive. (And no, it was not because the optical drive was faster. I’d copy the raw contents to the hard drive first, then run them through HandBrake.)


Пиксельный рыцарь (Super Pixel Knight) (онлайн)

Раздел: Игры онлайн » Приключения, квесты | 26-04-2015, 10:44

Хотели бы вы стать настоящим героем? Тогда погрузитесь в данный небезопасный мир и сделайте все, дабы спасти это королевство. Есть много монстров, и вы обязаны убить их всех! Используйте все подсказки и станьте героем в этом сражение. Достигнув своей цели, будьте уверенным, что эта земля будет …

Город в осаде 4: Пришельцы (City Siege 4: Alien Siege)

Раздел: Война и стрельба, Приключения, квесты | 18-02-2014, 18:37

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

Приключения в пиксельном городе (Pix city adventure)

Раздел: Онлайн симуляторы, Приключения, квесты | 18-01-2018, 14:11

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

Город кристаллов (онлайн)

Раздел: Игры онлайн » Приключения, квесты | 1-02-2014, 14:40

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

Город Даймер 2 (онлайн)

Раздел: Игры онлайн » Приключения, квесты | 27-03-2014, 12:41

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

Старинный город (онлайн)

Раздел: Игры онлайн » Приключения, квесты | 26-01-2014, 21:36

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

( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: