Nixenv Linux-Konsolendienstprogramme für Windows

Ich habe meine eigene Alternative zu MSYS zusammengestellt. Dieses Set enthält die Dienstprogramme coretools + git + cmake + make + fügt msvs msbuild zur Umgebungsvariablen PATH hinzu. Diese Reihe von Anwendungen ist für Entwickler erforderlich, die mit der Entwicklung auf der Linux-Plattform vertraut sind und eine Anwendung für Windows über die Befehlszeile mit Microsoft Visual Studio erstellen müssen. Herunterladen:

https://www.mediafire.com/file/s5yf75blfslkbym/nixenv.exe

https://www.4shared.com/file/QyjJXBaJca/nixenv.html

Installieren, die Pfade in der Datei nixenv.bat ändern und ausführen.

Flammenstahl-Streitaxt

Ab heute beginne ich mit der Entwicklung eines Editors für das Gaming-Framework – Flame Steel Battle Axe.

Mit dem Editor können Sie Szenen für das Spiel-Framework Flame Steel Game Toolkit bearbeiten.
Ich habe mich für die relativ neue Java-basierte Kotlin-Sprache entschieden, um sie unter Kampfbedingungen zu testen.

Sie können den Vorgang im Repository verfolgen:
https://github.com/demensdeum/FlameSteelBattleAxe

WebGL + SDL + Emscripten

Am Ende habe ich Mika mit SDL 1 und Emscripten auf WebGL portiert.

Als nächstes beschreibe ich, was im Code geändert werden musste, damit der Build in JavaScript erfolgreich abgeschlossen werden konnte.

  1. Verwenden Sie SDL 1 anstelle von SDL 2. Im Moment gibt es einen SDL 2-Port für Emscripten, aber ich fand es angemessener, den in Emscripten integrierten SDL 1 zu verwenden. Der Kontext wird nicht im Fenster initialisiert, sondern mithilfe von SDL_SetVideoMode und dem SDL_OPENGL-Flag. Der Puffer wird mit dem Befehl SDL_GL_SwapBuffers()
  2. gezeichnet

  3. Aufgrund der Art und Weise, wie JavaScript Schleifen durchführt – Das Rendering wird in einer separaten Funktion platziert und der regelmäßige Aufruf erfolgt über die Funktion emscripten_set_main_loop
  4. Die Montage muss ebenfalls mit dem Schlüssel “-s FULL_ES2=1
  5. erfolgen

  6. Ich musste die Assimp-Bibliothek aufgeben, das Modell aus dem Dateisystem laden und die Textur von der Festplatte laden. Alle notwendigen Puffer wurden auf die Desktop-Version geladen und zur Assemblierung mit emscripten.
  7. in die C-Header-Datei eingefügt

Code:
https://github.com/demensdeum/OpenGLES3-Experiments/tree/master/9-sdl-gles-obj-textured-assimp-miku-webgl/mikuWebGL

Artikel:
http://blog.scottlogic.com/2014/03/12/native-code-emscripten-webgl-simmer-gently.html
https://kripken.github.io/emscripten-site/docs/porting/multimedia_and_graphics/OpenGL-support.html

Modell:
https://sketchfab.com/models/7310aaeb8370428e966bdcff414273e7

Es gibt nur Miku

Das Ergebnis der Arbeit an der FSGL-Bibliothek mit OpenGL ES und Code:

Als nächstes werde ich beschreiben, wie alles programmiert wurde und verschiedene interessante Probleme gelöst wurden.

Zuerst initialisieren wir den OpenGL ES-Kontext, wie ich im vorherigen Beitrag geschrieben habe. Im Folgenden betrachten wir nur das Rendern und eine kurze Beschreibung des Codes.

Die Matrix beobachtet dich

Diese Figur von Miku im Video besteht aus Dreiecken. Um in OpenGL ein Dreieck zu zeichnen, müssen Sie drei Punkte mit den Koordinaten x, y, z angeben. in 2D-Koordinaten des OpenGL-Kontexts.
Da wir eine Figur zeichnen müssen, die 3D-Koordinaten enthält, müssen wir eine Projektionsmatrix verwenden. Wir müssen das Modell auch drehen, vergrößern oder was auch immer wir tun möchten – Hierzu wird die Modellmatrix verwendet. In OpenGL gibt es kein Konzept einer Kamera; tatsächlich drehen sich Objekte um eine statische Kamera. Hierzu wird eine Ansichtsmatrix verwendet.

Um die Implementierung von OpenGL ES zu vereinfachen – es enthält keine Matrixdaten. Sie können Bibliotheken verwenden, die fehlende Funktionalität hinzufügen, zum Beispiel GLM.

Shader

Um es dem Entwickler zu ermöglichen, alles und in irgendeiner Weise zu zeichnen, muss OpenGL ES Vertex- und Fragment-Shader implementieren. Der Vertex-Shader muss Rendering-Koordinaten als Eingabe erhalten, Transformationen mithilfe von Matrizen durchführen und die Koordinaten an gl_Position übergeben. Fragment- oder Pixel-Shader – Zeichnet bereits Farbe/Textur, wendet Überlagerung an usw.

Ich habe Shader in GLSL geschrieben. In meiner aktuellen Implementierung sind Shader als C-Strings

direkt in den Hauptanwendungscode integriert

Puffer

Der Vertex-Puffer enthält die Koordinaten der Scheitelpunkte (Vertices); dieser Puffer enthält auch Koordinaten für die Texturierung und andere für Shader notwendige Daten. Nachdem Sie den Vertex-Puffer generiert haben, müssen Sie den Zeiger an die Daten für den Vertex-Shader binden. Dies erfolgt mit dem Befehl glVertexAttribPointer, bei dem Sie die Anzahl der Elemente, einen Zeiger auf den Anfang der Daten und die Schrittgröße angeben müssen, die zum Durchlaufen des Puffers verwendet wird. In meiner Implementierung erfolgt die Bindung von Scheitelpunktkoordinaten und Texturkoordinaten für den Pixel-Shader. Es ist jedoch anzumerken, dass die Übertragung der Daten (Texturkoordinaten) an den Fragment-Shader über den Vertex-Shader erfolgt. Um dies zu erreichen, werden die Koordinaten mit Varying angegeben.

Damit OpenGL weiß, in welcher Reihenfolge Punkte für Dreiecke gezeichnet werden müssen – Sie benötigen einen Indexpuffer (Index). Der Indexpuffer enthält die Scheitelpunktnummer im Array. Unter Verwendung dreier solcher Indizes wird ein Dreieck erhalten.

Texturen

Zuerst müssen Sie eine Textur für OpenGL laden/generieren. Hierzu habe ich SDL_LoadBMP verwendet, die Textur wird aus einer BMP-Datei geladen. Es ist jedoch zu beachten, dass nur 24-Bit-BMPs geeignet sind und die Farben darin nicht in der üblichen RGB-Reihenfolge, sondern in BGR gespeichert werden. Das heißt, nach dem Laden müssen Sie den roten Kanal durch einen blauen ersetzen.
Texturkoordinaten werden im Format angegeben UV< /a>, das heißt, Sie müssen nur zwei Koordinaten übertragen. Die Texturausgabe erfolgt im Fragment-Shader. Dazu müssen Sie die Textur in einen Fragment-Shader binden.

Nichts Besonderes

Da OpenGL gemäß unseren Anweisungen 3D bis 2D zeichnet – dann um die Tiefe zu implementieren und unsichtbare Dreiecke auszuwählen – Sie müssen Culling und einen Tiefenpuffer (Z-Puffer) verwenden. In meiner Implementierung ist es mir gelungen, die manuelle Generierung des Tiefenpuffers mithilfe von zwei Befehlen zu vermeiden: glEnable(GL_DEPTH_TEST); und Auswahlen glEnable(GL_CULL_FACE);
Stellen Sie außerdem sicher, dass die Nahebene für die Projektionsmatrix größer als Null ist, denn Die Überprüfung der Tiefe mit einer Null-Nahebene funktioniert nicht.

Rendering

Um den Vertex-Puffer und den Index-Puffer mit etwas Bewusstem zu füllen, zum Beispiel dem Miku-Modell, müssen Sie dieses Modell laden. Hierfür habe ich die Bibliothek assimp verwendet. Miku wurde in eine Wavefront-OBJ-Formatdatei eingefügt, mit assimp geladen und die Datenkonvertierung von assimp in Vertex- und Indexpuffer wurde implementiert.

Das Rendern erfolgt in mehreren Schritten:

  1. Rotieren Sie Miku mithilfe der Modellmatrixrotation
  2. Bildschirm und Tiefenpuffer löschen
  3. Zeichnen von Dreiecken mit dem glDrawElements-Befehl.

Nächste Stufe – Implementierung des Renderings in WebGL mit Emscripten.

Quellcode:
https://github.com/demensdeum/OpenGLES3-Experiments/tree/master/8-sdl-gles-obj-textured-assimp-miku
Modell:
https://sketchfab.com/models/7310aaeb8370428e966bdcff414273e7

 

Projizieren Sie es

Nachdem ich eine rote Teekanne in 3D gezeichnet habe, betrachte ich es als meine Pflicht, kurz zu beschreiben, wie es gemacht wird.

Modernes OpenGL zeichnet nicht 3D, sondern nur Dreiecke, Punkte usw. in 2D-Bildschirmkoordinaten.
Um zumindest etwas mit OpenGL auszugeben, müssen Sie einen Vertex-Puffer bereitstellen, einen Vertex-Shader schreiben, alle erforderlichen Matrizen (Projektion, Modell, Ansicht) zum Vertex-Shader hinzufügen und alle Eingabedaten damit verknüpfen Rufen Sie für den Shader die Methode Rendering in OpenGL auf. Sieht es einfach aus?


Ok, was ist ein Vertex-Puffer? Liste der zu zeichnenden Koordinaten (x, y, z)
Der Vertex-Shader teilt der GPU mit, welche Koordinaten gezeichnet werden sollen.
Der Pixel-Shader sagt, was gezeichnet werden soll (Farbe, Textur, Mischung usw.)
Die Matrizen übersetzen 3D-Koordinaten in 2D-OpenGL-Koordinaten, die gerendert werden können

In den folgenden Artikeln werde ich Codebeispiele und Ergebnisse bereitstellen.

SDL2 – OpenGL ES

I love Panda3D game engine. But right now this engine is very hard to compile and debug on Microsoft Windows operation system. So as I said some time ago, I begin to develop my own graphics library. Right now it’s based on OpenGL ES and SDL2.
In this article I am going to tell how to initialize OpenGL ES context and how SDL2 helps in this task. We are going to show nothing.

King Nothing

First of all you need to install OpenGL ES3 – GLES 3 libraries. This operation is platform dependant, for Ubuntu Linux you can just type sudo apt-get install libgles2-mesa-dev. To work with OpenGL you need to initialize OpenGL context. There is many ways to do that, by using one of libraries – SDL2, GLFW, GLFM etc. Actually there is no one right way to initialize OpenGL context, but I chose SDL2 because it’s cross-platform solution, code will look same for Windows/*nix/HTML5/iOS/Android/etc.

To install sdl2 on Ubuntu use this command sudo apt-get install libsdl2-dev

So here is OpenGL context initialization code with SDL2:

    SDL_Window *window = SDL_CreateWindow(
            "SDL2 - OGLES",
            SDL_WINDOWPOS_UNDEFINED,
            SDL_WINDOWPOS_UNDEFINED,
            640,
            480,
            SDL_WINDOW_OPENGL
            );
	    

    SDL_GLContext glContext = SDL_GL_CreateContext(window);

After that, you can use any OpenGL calls in that context.

Here is example code for this article:
https://github.com/demensdeum/OpenGLES3-Experiments/tree/master/3sdl-gles
https://github.com/demensdeum/OpenGLES3-Experiments/blob/master/3sdl-gles/sdlgles.cpp

You can build and test it with command cmake . && make && ./SDLGles

Flammenstahlkern

Screenshot der neuesten Version von Death Mask:

Sieht nach einer Million Dollar aus, oder?

< /blockquote>

Umbenennen, Aufteilen

Die Flame Steel Engine-Bibliothek wurde in Flame Steel Core umbenannt, das Game Toolkit wurde in die Bibliotheken SDL, Panda3D (Desktop) und Web (ThreeJS) aufgeteilt. Wenn Stahlkugeln für den Zusammenbau mithilfe der Flame Steel-Bibliotheken verfügbar sind, müssen Sie zunächst die benötigten Kugeln auswählen und zusammenbauen.

Github:

https://github.com/demensdeum/Death-Mask
https://github.com/demensdeum/FlameSteelCore
https://github.com/demensdeum/FlameSteelEngineGameToolkit
https://github.com/demensdeum/FlameSteelEngineGameToolkitDesktop

Veraltet:

https://github.com/demensdeum/FlameSteelEngineGameToolkitSDL
https://github.com/demensdeum/FlameSteelEngineGameToolkitWeb

Quanten-Hacking RSA

Neulich habe ich meine Implementierung des RSA-Public-Key-Verschlüsselungsalgorithmus geschrieben. Ich habe auch einen einfachen Hack dieses Algorithmus gemacht, deshalb wollte ich eine kurze Notiz zu diesem Thema schreiben. Die Manipulationssicherheit von RSA basiert auf einem Faktorisierungsproblem. Faktorisierung… Was für ein schreckliches Wort.

Es ist gar nicht so gruselig

Tatsächlich nehmen wir in der ersten Phase der Schlüsselerstellung zwei Zufallszahlen, aber die Zahlen dürfen nur durch sich selbst teilbar sein und eins – Primzahlen.
Nennen wir sie p und q. Als nächstes sollten wir die Zahl n = p *q erhalten. Es wird für die weitere Schlüsselgenerierung verwendet, die Schlüssel wiederum werden zum Ver- und Entschlüsseln von Nachrichten verwendet. In der finalen Version des privaten und öffentlichen Schlüssels wird die Nummer n unverändert übernommen.
Nehmen wir an, wir haben einen der RSA-Schlüssel und eine verschlüsselte Nachricht in unseren Händen. Wir nehmen die Nummer n aus dem Schlüssel und starten Hack.

N faktorisieren

Faktorisierung – Zerlegung einer Zahl in Primfaktoren. Zuerst extrahieren wir die Zahl naus dem Schlüssel (bei echten Schlüsseln können Sie das mit OpenSSL machen), sagen wir n = 35. Dann zerlegen wir sie in einfache Faktoren n = 35 = 5 * 7, das ist und da sind unsere p und q. Jetzt können Sie die Schlüssel mithilfe der empfangenen p, q neu generieren, die Nachricht entschlüsseln und verschlüsseln und dabei die Sichtbarkeit des ursprünglichen Autors sicherstellen.

Qubits sind nicht so einfach

Ist es wirklich möglich, RSA so einfach zu knacken? Tatsächlich nein, die Zahlen p, q sind bewusst groß gewählt, sodass die Faktorisierungsaufgabe auf klassischen Computern sehr lange dauert (teilweise 10 Jahre)< br / >Mit dem Quantenalgorithmus von Shor ist es jedoch möglich, eine Zahl in sehr kurzer Zeit zu faktorisieren. Derzeit wird in Artikeln zu diesem Thema die Zeit für die Multiplikation einer bestimmten Zahl angegeben, also praktisch sofort. Damit Shors Algorithmus funktioniert, ist es notwendig, Quantencomputer mit einer großen Anzahl von Qubits zu implementieren. Im Jahr 2001 faktorisierte IBM die Zahl 15 mithilfe von 7 Qubits. Wir werden also noch lange auf diesen Moment warten müssen, bis wir auf Post-Quanten-Verschlüsselungsalgorithmen umgestiegen sein werden.

Berühre Shor

Peter Shore spricht über seinen Faktorisierungsalgorithmus

Um Shors Algorithmus auf einem Quantensimulator auszuprobieren, können Sie ProjectQ, seine Beispiele umfassen eine Implementierung von shor.py, die es Ihnen ermöglicht, eine vom Benutzer eingegebene Zahl zu faktorisieren. Auf dem Simulator ist die Ausführungszeit deprimierend, aber es scheint eine unterhaltsame und spielerische Simulation des Betriebs eines Quantencomputers zu sein.

Artikel:
http://www.pagedon.com/rsa-explained-simply/my_programming/
http://southernpacificreview.com/2014/01/06/rsa-key-generation-example/
https://0day.work/how-i-recovered-your-private-key-or-why-small-keys-are-bad/

Python-Implementierung von RSA:
https://github.com/demensdeum/RSA-Python

Russian Quantum Hack and Number Generator

[Translation may be, some day]

Эта заметка увеличит длину вашего резюме на 5 см!

Без лишних слов о крутости квантовых компьютеров и всего такого, сегодня я покажу как сделать генератор чисел на реальном квантовом процессоре IBM.
Для этого мы будем использовать всего один кубит, фреймворк для разработки квантового ПО для python – ProjectQ, и 16 кубитовый процессор от IBM, онлайн доступ к которому открыт любому желающему по программе IBM Quantum Experience.

Установка ProjectQ

Для начала у вас должен быть Linux, Python и pip. Какие либо инструкции по установке этих базовых вещей приводить бесполезно, т.к. в любом случае инструкции устареют через неделю, поэтому просто найдите гайд по установке на официальном сайте. Далее устанавливаем ProjectQ, гайд по установке приведен в документации. На данный момент все свелось к установке пакета ProjectQ через pip, одной командой: python -m pip install –user projectq

Ставим кубит в суперпозицию

Создаем файл quantumNumberGenerator.py и берем пример генератора бинарного числа из документации ProjectQ, просто добавляем в него цикл на 32 шага, собираем бинарную строку и переводим в 32-битное число:

import projectq.setups.ibm
from projectq.ops import H, Measure
from projectq import MainEngine
from projectq.backends import IBMBackend

binaryString = ""

eng = MainEngine()

for i in range(1, 33):

 qubit = eng.allocate_qubit()

 H | qubit

 Measure | qubit

 eng.flush()

 binaryString = binaryString + str(int(qubit))

 print("Step " + str(i))

number = int(binaryString, 2)

print("\n--- Quantum 32-Bit Number Generator by demensdeum@gmail.com (2017) ---\n")
print("Binary: " + binaryString)
print("Number: " + str(number))
print("\n---")

Запускаем и получаем число из квантового симулятора с помощью команды python quantumNumberGenerator.py

Незнаю как вы, но я получил вывод и число 3974719468:

--- Quantum 32-Bit Number Generator by demensdeum@gmail.com (2017) ---

Binary: 11101100111010010110011111101100
Number: 3974719468

---

Хорошо, теперь мы запустим наш генератор на реальном квантовом процессоре IBM.

Хакаем IBM

Проходим регистрацию на сайте IBM Quantum Experience, подтверждаем email, в итоге должен остаться email и пароль для доступа.
Далее включаем айбиэмовский движок, меняем строку eng = MainEngine() -> eng = MainEngine(IBMBackend())
В теории после этого вы запускаете код снова и теперь он работает на реальном квантовом процессоре, используя один кубит. Однако после запуска вам придется 32 раза набрать свой email и пароль при каждой аллокации реального кубита. Обойти это можно прописав свой email и пароль прямо в библиотеки ProjectQ.

Заходим в папку где лежит фреймворк ProjectQ, ищем файл с помощью grep по строке IBM QE user (e-mail).
В итоге я исправил строки в файле projectq/backends/_ibm/_ibm_http_client.py:

email = input_fun('IBM QE user (e-mail) > ') -> email = "quantumPsycho@aport.ru"

password = getpass.getpass(prompt='IBM QE password > ') -> password = "ilovequbitsandicannotlie"

Напишите свой email и password со-но.

После этого IBM будет отправлять результаты работы с кубитом онлайн прямо в ваш скрипт, процесс генерации занимает около 20 секунд.

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

Статья на похожую тему:
Introducing the world’s first game for a quantum computer

Warum im Jahr 2017 eine Spiel-Engine entwickeln?

Viele Leute fragen mich: Warum sollte man 2017 eine Spiel-Engine entwickeln? Schließlich gibt es bereits so viele fertige Lösungen kostenlos auf dem Markt.

Ich habe einen separaten Artikel mit einem Überblick über den aktuellen Spieleentwicklungsmarkt vorbereitet und die Gründe beschrieben, die mich dazu veranlasst haben, die Flame Steel Engine zu entwickeln:

Reasons to Make New Game Engine in 2017

Totenmaske

Ab heute fange ich an, Roguelike-Spiele in einer Cyberpunk-Umgebung zu entwickeln &#8211 ; Totenmaske.
Eigentlich sollte dies das erste Spiel mit der neuen Flame Steel Engine sein, aber die Engine musste modifiziert werden, bevor vollständiges 3D erschien.
Der Originaltitel lautete „Flame Steel: Call Of The Death Mask“, dann beschloss ich, die Aufgabe zu vereinfachen und nur einen Teil des Spiels zu veröffentlichen. „Flame Steel: Zombie Night“
Allerdings verfolgte mich der Gedanke, ein normales, vollwertiges Projekt zu schaffen, und der Titel war auch mit dem Namen des Flame Steel-Universums überladen.
Als visuelle Inspiration nehme ich den Manga Biomega und < a href="http://a.co/8yUUA5i" target="_blank">Blame! Das Flame Steel-Universum selbst ist dem sehr ähnlich Shadowrun im Weltraum.
Seien Sie daher nicht überrascht, wenn Sie in diesem Spiel auf einen außerirdischen Magier treffen, der mit magischen Kugeln aus einem Revolver auf einen Werwolf schießt und dabei präzise auf ein Cyberimplantat im Auge zielt.

Das Spiel wird unter der MIT-Open-Source-Lizenz auf GitHub unter Verwendung der Flame Steel Engine-Toolchain und kostenloser Frameworks entwickelt.

GitHub:
https://github.com/demensdeum/Death-Mask

Schlechte Roboter auf WebGL basierend auf ThreeJS

Heute wird eine Version des Spiels Bad Robots auf einem experimentellen WebGL-Renderer veröffentlicht, der auf der Bibliothek ThreeJS.
Dies ist das erste OpenGL (WebGL)-Spiel auf der Flame Steel Engine.
Sie können es hier spielen:
http://demensdeum.com/games/BadRobotsGL/

Der auf ThreeJS basierende IOSystem-Quellcode ist hier verfügbar:
https://github.com/demensdeum/FlameSteelEngineGameToolkitWeb

Porting SDL C++ Game to HTML5 (Emscripten)

[Translation may be some day]

За последний год я написал простейший движок Flame Steel Engine и набор классов для игровой разработки Flame Steel Engine Game Toolkit. В данной статье я опишу как производил портирование движка и SDL игры Bad Robots на HTML 5, с использованием компилятора Emscripten.

Установка Hello World – Emscripten

Для начала нужно установить Emscripten. Простейшим вариантом оказалось использование скрипта emsdk для Linux. На официальном сайте данный тип установки называется как “Portable Emscripten SDK for Linux and OS X“. Внутри архива есть инструкция по установке с использованием скрипта. Я производил установку в директорию ~/emsdk/emsdk_portable.

После установки emscripten нужно проверить корректность работы компилятора, для этого создаем простейший hello_world.cpp и собираем его в hello_world.html с помощью команд:

source ~/emsdk/emsdk_portable/emsdk_env.sh
emcc hello_world.cpp -o hello_world.html

После компиляции в папке появится hello_world.html и вспомогательные файлы, откройте его в лучшем браузере Firefox, проверьте что все работает корректно.

Портирование кода игры

В javascript нежелательно вызывать бесконечный цикл – это приводит к зависанию браузера. На данный момент корректная стратегия – запрашивать один шаг цикла у браузера с помощью вызова window.requestAnimationFrame(callback)

В Emscripten данное обстоятельство решено с помощью вызова:

emscripten_set_main_loop(em_callback_func func, int fps, int simulate_infinite_loop);

Таким образом, нужно изменить код игры для корректного вызова метода emscripten. Для этого я сделал глобальный метод GLOBAL_fsegt_emscripten_gameLoop, в котором вызываю шаг цикла игрового контроллера. Главный игровой контроллер также вынесен в глобальную видимость:

#ifdef __EMSCRIPTEN__

void GLOBAL_fsegt_emscripten_gameLoop() {

GLOBAL_fsegt_emscripten_gameController->gameLoop();

}
#endif

Также для обработки специфических для Emscripten моментов, нужно использовать макрос __EMSCRIPTEN__.

Ресурсы и оптимизация

Emscripten поддерживает ресурсы и сборку с оптимизацией.

Для добавления изображений, музыки и прочего, положите все файлы в одну папку, например data. Далее в скрипт сборки добавьте:

emcc <файлы для сборки> –use-preload-plugins –preload-file data

Флаг –use-preload-plugins включает красивый прелоадер в углу экрана, –preload-file добавляет указанный ресурс в файл <имя проекта>.data
Код постоянно останавливался с ошибками доступа к ресурсам, пока я не включил оба этих флага. Также стоит заметить что для корректного доступа к ресурсам, желательно запускать игру на https (возможно и http) сервере, или отключить защиту локального доступа к файлам в вашем браузере.

Для включения оптимизации добавьте флаги:

-s TOTAL_MEMORY=67108864 -O3 -ffast-math

TOTAL_MEMORY – оперативная память в байтах(?) необходимая для корректной работы игры. Вы можете использовать флаг для динамического выделения памяти, но тогда часть оптимизаций работать не будет.

Производительность

Код javascript из C++ работает гораздо медленнее, даже со включенными оптимизациями. Поэтому если ваша цель это разработка для HTML5, то приготовьтесь к ручной оптимизации алгоритмов игры, паралелльному тестированию, также к написанию javascript кода вручную в особо узких местах. Для написания javascript кода используется макрос EM_ASM. Во время реализации рейкастера на emscripten, мне удалось добиться повышения fps с 2-4 до 30 с помощью прямого использования методов canvas.drawImage, в обход обертки SDL->Canvas, что почти приравнялось к написанию всего на javascript.

Поддержка SDL

На данный момент почти не работает SDL_TTF, поэтому отрисовка шрифта для Game Score в BadRobots очень проста. SDL_Image, SDL_Mixer работают корректно, в mixer я проверил только проигрывание музыки.

Исходный код Flame Steel Engine, Flame Steel Engine Game Toolkit, игры Bad Robots:

https://github.com/demensdeum/BadRobots
https://github.com/demensdeum/FlameSteelEngine
https://github.com/demensdeum/FlameSteelEngineGameToolkit

Статья на эту тему:

https://hacks.mozilla.org/2012/04/porting-me-my-shadow-to-the-web-c-to-javascriptcanvas-via-emscripten/

Schlechte Roboter – HTML 5-Spiel

Das erste Spiel auf der Flame Steel Engine.

http://demensdeum.com/games/BadRobots/BadRobots.html

Erschieße alle Roboter auf dem Bildschirm!

Autoren:

Roboteranimation – http://opengameart.org/content/xeon-ultimate-smash-friends
Musik – Killer Kevin MacLeod (incompetech.com)

Quellcode:

https://github.com/demensdeum/BadRobots
https://github.com/demensdeum/FlameSteelEngine
https://github.com/demensdeum/FlameSteelEngineGameToolkit

Flame Steel Zombie Night-Prototyp (aktualisiert)

Erste Version von Flame Steel Zombie Night für Windows:

FlameSteelZombieNightPrototype2

Sie können rennen, schießen und Punkte sammeln. Schießen Sie mit der Maus, laufen Sie mit den Pfeiltasten der Tastatur vorwärts und rückwärts.
Dies ist ein Prototyp des ersten Spiels auf der Flame Steel Engine mit einer einzigen Codebasis für mehrere Plattformen.

Schön und leer

Du stehst morgens auf, Mama kocht dir eine Mahlzeit, Papa gibt dir Geld für Snickers und bringt dich zur Schule. Du lernst in einer guten, strengen Schule ohne Tyrannen. Sie sind ein ausgezeichneter Student – Sie haben mehrere Nachhilfelehrer in Fächern, für die Sie nicht prädisponiert sind. An Ihrer Schule hängt eine Ehrentafel, auf der Sie mit Ihren Noten, am besten ganz oben, stehen müssen. Ihre Zukunft ist rosig – Jeden Tag gibt es Geschenke, Süßigkeiten und coole, modische Kleidung. Alles scheint in Ordnung zu sein, aber Sie verstehen, wie langweilig ein solches Leben wirklich ist. Es gibt kein Kampfgefühl, jeder Schritt ist vorbestimmt und mehrere Jahre im Voraus geplant.

So fühle ich mich, wenn ich ein Spiel von Blizzard spiele. Ich sehe viele Leute, die keine Old-School-Spiele spielen können, nicht etwas wirklich Originelles, nicht formelhaftes spielen können (Deadly Premonition oder Papers Please), aber jeder liebt Spiele Blizzard.

Mit Starcraft begann ich, mich mit ihren Spielen auf dem PC vertraut zu machen. Nach dem Wild- und Arcade-Command & ErobernIch fand das Gameplay sehr maßvoll und beruhigend. Mich persönlich schläft die Beschränkung der Anzahl der Einheiten ein, wenn ich mich mit Mikro-Nano-Operationen beschäftige. Als nächstes folgte ein schönes, aber leeres Clicker-Spiel – Diablo 2. Gute Grafik, generierte Levels und kein Gameplay, ein absolut meditativer und leerer Zeitvertreib. Meine Freunde sind jedoch fest in StarCraft und Diablo verankert. Anfang der 2000er Jahre erschien das umwerfende Warcraft 3. Das Single-Unternehmen hat mir damals sehr gut gefallen. Allerdings ähnelt der Multiplayer stark dem von Starcraft und ist daher sehr langweilig. Als nächstes kam die ebenso schöne, leere Starcraft 2. Ich habe f2p Hearthstone gespielt – Dieses Spiel ist wie ein Spielautomat, zuerst gewinnt man, man hat Vertrauen in sich selbst, aber dann kommen die Entwickler mit dem Angebot, mehrere Decks zum Preis von 500 ₽ zu kaufen. Deine Fähigkeit entscheidet über nichts, sie entscheidet nur darüber, wie viel Geld für virtuelle Decks ausgegeben wird.

Ich habe kürzlich Overwatch gekauft, einen Shooter von Blizzard. Ich mochte die Heldin Mei, mit deren Kunst und Cosplay alle sozialen Netzwerke bombardiert wurden, was zur Folge hatte, dass mich die allgemeine Werbewelle in Geek-Communities an die Küste der Overwatch-Spieler spülte.

Meine Befürchtungen waren berechtigt – Hervorragende Grafik, verschiedene Helden mit eigenen Stimmen und Fähigkeiten. Kein einziger Absturz während des Spiels, alles ist auf Blizzard-Niveau. Und so möchte ich sagen, dass das Spiel selbst im Gameplay wieder so ausgefeilt ist, dass es einfach nicht interessant zu spielen ist. Es gibt einen echten Mangel an interessanten – Unerwartete Momente, riskante Ideen, das Unternehmen hat wie immer nur das Beste aus den vergangenen Jahren genommen und es auf den neuesten Stand gebracht, um den Markt zu erobern, ohne dabei an guter Werbung zu sparen.

Das einzige Blizzard-Spiel, das mir wirklich gefallen hat – Rock’n’Roll Racing. Es gibt wirklich Gameplay, aber ich vermute, dass das nicht am Entwickler, sondern am Publisher liegt – Interplay hat höchstwahrscheinlich dazu beigetragen, dass Blizzard das Spiel wirklich spielbar gemacht hat.

Spielevision Nr. 2

Volatile Games Vision-Kolumne.
Ich schreibe kurze Rezensionen der Spiele, die ich kürzlich gespielt habe

wsunhd
SIM
aka Sara is Missing (Android, Monsoon Lab) – ты находишь телефон девушки по имени Сара. Внутри телефона есть встроенный помощник IRIS, она хочет найти свою хозяйку и просит тебя ей в этом помочь. Задача понять что творилось в голове Сары из ее переписки, фоточек и видео, найти где она находится. Игра очень оригинальная и достаточно пугающая. Минус в том что нет локализации на русский и другие языки, нет версии для iOS, хотя очевидно что интерфейс игры копирует продукцию Apple (IRIS – SIRI) Также игра очень короткая.
Bewertung 7/10

unnamed
The End of The World
(Android, Sean Wenham) – игра про расставание – парня бросила девушка, теперь он бродит в поисках вина и спит под мостом, вспоминая моменты когда они были вместе. Умилительные моменты воспоминаний, грустная музыка, переход в белое, в принципе отличная игра для женской аудитории и некоторых пацанов. Мне не понравилась бюджетная графика с претензией на оригинальность (напоминает Another World Эрика Шайи), нулевой геймплей, попытки выбить из игрока слезки, предсказуемость, десять минут прохождения. Любителям ванили рекомендую.
Bewertung: 5/10

unnamed

Werwolf-Tycoon< /strong> (Android, Joe Williamson) – ein Spiel über einen Werwolf, der Menschen in einem Stadtpark frisst. Die Grafik und das Gameplay machen hier Spaß – Kinderfarben, helle Farben ohne dunkle Töne, kein Blut und Menschen, die wie runde Cupcakes aussehen, mit lustigen Animationen. Die Runden sind kurz und einfach, die einzigen Feinde sind Journalisten mit Kameras. Es klingt, sieht aus und spielt jede Menge Spaß. Von den Minuspunkten – geringer Schwierigkeitsgrad, Anzeigen zum Abbrechen von Game Over ansehen, der Mechanismus zum Abheben der erzielten Punkte in sozialen Netzwerken funktioniert nicht.
Bewertung: 6/10

Spielevision Nr. 1

Volatile Games Vision-Kolumne.
In diesem Artikel werde ich kurze Rezensionen der Spiele schreiben, die ich kürzlich gespielt habe.

jansen

Glauben Sie nicht einmal, dass dieser Typ Gefühle hat, er tut nur manchmal so, als ob er solche Gefühle hätte.

Deus Ex Mankind Divided (PC, Square Enix) – ein Spiel über den Halbmenschen Adam Jensen, der in Prag Urlaub macht und nebenbei die Welt rettet.
Gute Grafik, hohe Systemanforderungen, vorhersehbare Handlung, ungewöhnliche Arbeit von Künstlern – alles ist hier. Das Spiel bietet viele Optionen zum Passen, zum Beispiel habe ich es geschafft, den Erfolg „Pazifist“ zu erreichen, weil ich während des gesamten Spieldurchgangs niemanden getötet habe, auch keine Bosse.
Mir gefielen die Anspielungen auf die Popkultur: „The VoidWhich Binds“, “IRON MADE in China” usw. Mir gefiel die große Menge an Text nicht – Wasser, alle möglichen E-Mails, in denen Türpasswörter und Charakterkorrespondenz gespeichert sind, der Text ist absolut leer und nicht interessant. Zum Zeitpunkt des Durchspielens stürzte das Spiel ständig im DirectX 12-Modus ab, automatische Speicherungen funktionierten nicht und es wurden offenbar immer noch Patches veröffentlicht. Ich habe mich entschieden, den DLC nicht zu spielen, weil… Ich spiele das Hauptspiel bereits seit etwa zwei Wochen und bin aus meinem gewohnten leeren Leben herausgekommen.
Bewertung 8/10

slayin

Slayin (Android, FDG) – ein außergewöhnliches Arcade-Spiel im Pixel-Stil für Mobiltelefone. Sie müssen rennen und Monster töten, indem Sie Ausrüstung im Laden kaufen. Ich mochte die Kunst in diesem Spiel, mir gefiel die Chiptune-Musik wirklich, es sieht aus wie ein Arcade-Spiel für NES, einfache Steuerung. Das Spiel selbst war enttäuschend, da sich das Gameplay nur über eine Szene auf dem Bildschirm erstreckt und es nicht möglich ist, sich durch ein großes Level zu bewegen.
Bewertung 5/10

swordxolan

Schwert von Xolan (Android, Alper Sarıkaya) – Arcade-Plattformer im Pixel-Stil für Mobiltelefone. Ein Ritter oder Samurai rennt durch das Level und rettet Menschen aus Eisenkäfigen. Ziemlich interessantes Gameplay, einfache Steuerung, große Level. Das Gesamtbudget des Spiels, die billige Grafik, der billige Sound und die durchgeknallte Musik sind enttäuschend.
Bewertung 6/10

bardstale

Der Barde’ s Tale(Android, inXile entertainment) – Remaster des Action-Rollenspiels für Mobiltelefone. Ein ungewöhnliches Rollenspiel mit lustigen Szenen und Dialogen. Auf der Spiel-CD stand: „Drehen Sie die CD um, um etwas Schreckliches zu sehen“, auf der Rückseite befand sich eine verspiegelte Seite der CD. Früher habe ich dieses Spiel auf dem PC wegen Neverwinter Nights verpasst, aber jetzt kann ich es im Bus auf meinem Handy spielen. Für einen modernen Spieler mangelt es eindeutig an Hinweisen, wohin er gehen und was er tun soll, aber deshalb liebe ich Old-School-Spiele, sie müssen unbedingt gespielt werden. Es gibt auch keine Möglichkeit, zu irgendeinem Zeitpunkt zu speichern, was für ein Handyspiel von entscheidender Bedeutung ist. Musik, Kunst, ich mag alles, aber ich finde die aktuellen Bedienelemente auf dem Telefonbildschirm unbequem. Und natürlich handelt es sich hier nicht um ein neues Spiel, sondern lediglich um eine Neuveröffentlichung auf mobilen Plattformen, was ich persönlich als großes Minus betrachte.
Bewertung 7/10

ECS verdünnen


Commission: Mad Scientist by Culpeo-Fox on DeviantArt

In diesem Artikel werde ich das ECS-Muster und meine Implementierung im Flame Steel Engine Game Toolkit grob beschreiben. Das Entity Component System-Muster wird in Spielen verwendet, einschließlich. auf der Unity-Engine. Jedes Objekt im Spiel ist eine Essenz, die mit Komponenten gefüllt ist.  Warum ist das notwendig, wenn es OOP gibt?
Dann können Sie die Eigenschaften, das Verhalten und die Anzeige von Objekten direkt während des Spiels ändern. Solche Dinge gibt es in realen Anwendungen nicht; die Dynamik sich ändernder Parameter, Objekteigenschaften, Anzeige und Sound ist charakteristischer für Spiele als für Buchhaltungssoftware.


An Bananen sind wir nicht vorbeigegangen

Nehmen wir an, wir haben eine Bananenklasse in unserem Spiel. Und der Spieleentwickler wollte, dass Bananen als Waffen verwendet werden. Nehmen wir an, dass Bananen in der aktuellen Architektur nichts mit Waffen zu tun haben. Eine Banane zur Waffe machen? Alle Gegenstände zu Waffen machen?
ECS bietet eine Lösung für dieses dringende Problem – Alle Objekte im Spiel müssen aus Komponenten bestehen. Früher war Banana die Banana-Klasse, jetzt machen wir sie und alle anderen Objekte zur Entity-Klasse und fügen ihnen Komponenten hinzu. Nehmen wir an, eine Banane besteht nun aus folgenden Komponenten:

  1. Positionskomponente (Koordinaten in der Spielwelt – x, y, z)
  2. Rotationskomponente (x-, y-, z-Koordinaten)
  3. Kalorienanteil einer Banane (die Hauptfigur sollte nicht zu dick werden)
  4. Bananen-Bildkomponente

Jetzt fügen wir eine neue Komponente für alle Bananen hinzu, nämlich eine Flagge, die besagt, dass sie als Waffe verwendet werden kann – Waffenkomponente. Wenn das Spielsystem nun erkennt, dass sich ein Spieler einer Banane genähert hat, prüft es, ob eine Waffenkomponente auf der Banane vorhanden ist, und wenn dies der Fall ist, bewaffnet es den Spieler mit einer Banane.
In meinem Spiel Flame Steel Call Of The Death Mask wird durchgehend das ECS-Muster verwendet. Objekte bestehen aus Komponenten, und Komponenten selbst können Komponenten enthalten. Im Allgemeinen ist die Aufteilung des Objekts < – > Die Komponente fehlt in meiner Implementierung, aber das ist sogar ein Plus.

screenshot_2016-09-24_14-33-43

Die Schrotflinte in diesem Screenshot ist eine Komponente des Spielers, und gleichzeitig hängt die zweite Schrotflinte einfach als gewöhnliches Objekt auf der Spielkarte.
In diesem Screenshot laufen zwei Systeme: – Szenen-Renderer und Schnittstellen-Renderer. Der Szenen-Renderer arbeitet mit der Schrotflinten-Bildkomponente auf der Karte, der Schnittstellen-Renderer arbeitet mit der Schrotflinten-Bildkomponente in den Händen des Spielers.

Verwandte Links:
https://habrahabr.ru/post/197920/
https://www.youtube.com/watch?v=NTWSeQtHZ9M

Architektur des Flame Steel Engine-Spiel-Toolkits

Heute werde ich über die Architektur des Toolkits für die Spieleentwicklung Flame Steel Engine Game Toolkit sprechen.
Mit dem Flame Steel Engine Game Toolkit können Sie Spiele erstellen, die auf der Flame Steel Engine basieren:
flamesteelgametoolkitschematics

Alle Klassen der Flame Steel Engine beginnen mit dem Präfix FSE (Flame Steel E ngine) undFSEGT (FlameSteelEngineG stark>ame Toolkit) für Toolkit.
Spielszenen, Objekte und Schaltflächen sind allesamt Unterklassen von FSEObject und sollten sich innerhalb der Klasse FSEGTGameData befinden. Jedes FSEObject muss die FSESerialize-Schnittstelle implementieren. Dadurch können Sie Spieldaten speichern/laden und einen Speichermechanismus bereitstellen.
Die Klasse FSEController arbeitet mit Objekten der Klasse FSEObject. Das Toolkit verfügt über eine Basis-Spielszenen-Controller-Klasse – FSEGTGameSceneController, Sie können diese Klasse erben, um Ihre Spiellogik zu implementieren.
IOSystem ist ein Objekt der FSEGTIOSystem-Schnittstelle. Diese Schnittstelle enthält FSEGTRenderer, FSEGTInputController, FSEGTUIRenderer.
FSEGTIOSystem muss einen Renderer implementieren, Daten von der Tastatur und Joysticks (Eingabegeräten) empfangen und die Darstellung von Schnittstellenelementen für zugängliche Eingabe-/Ausgabesysteme dieser Plattform.
Derzeit wurde ein Renderer implementiert, ein Tastatur-Controller basierend auf der SDL-Bibliothek, er ist im FSEGTIOSDLSystem-Klasse

Flame Steel Engine Raycaster Demo
Flame Steel Engine Raycaster Demo

Zukünftige Pläne zur Erstellung eines IOSystems basierend auf OpenGL, die Klasse wird FSEGTIOGLSystem heißen . Wenn Sie ein IOSystem basierend auf einer beliebigen Plattform erstellen möchten, müssen Sie die FSEGTIOSystem-Schnittstelle verwenden und dafür den FSEGTRenderer-Renderer FSEGTInputController implementieren Plattform .

Quellcode der Flame Steel Engine, Toolkit, Spiel:
https://github.com/demensdeum/FlameSteelCallOfTheDeathMask

Unity, warum funktioniert Wasteland 2 nicht auf meinem Ubuntu?

Ich bin stolz, ein Unterstützer des Spiels Wasteland 2 zu sein. Heute wollte ich es auf Ubuntu veröffentlichen, konnte es aber nicht. Nach einer Stunde Googeln hat jedoch alles geklappt. Es stellt sich heraus, dass Unity einige ernsthafte Probleme mit Linux hat, aber mit bestimmten Krücken kann das Spiel gestartet werden:

ulimit -Sn 65536~/.local/share/Steam/steamapps/common/Wasteland\ 2\ Director\'s\ Cut/Linux/WL2

Rezept von hier:
https://forums.inxile-entertainment.com/viewtopic.php?t=15505

Flammenstahl: Schnelle Kurieraugen

Sein Name war Revil und sein Spitzname war Quick Eyes. Die Freunde des Kumpels nannten ihn Shustryak. Als auf der Straße aufgewachsener, flinker Junge weiß er immer, was interessant ist und von wem er es bekommen kann. Dafür erlangte er den Respekt des kriminellen Umfelds von Alterra – 14.
Er befand sich jetzt im Lagerhaus von Native Farm United. Es standen riesige Behälter herum, es roch nach Medikamenten.
– Warum bist du aufgestanden? Nimm es und geh.
Der Angestellte sagte knurrend, er sah nervös aus, trat von einem Fuß auf den anderen, es war klar, dass er große Angst hatte. Mein Hemd ist nass vor Schweiß.
– Ich bin vom Sicherheitsdienst.
Das Gesicht des Angestellten wurde blass und er taumelte noch mehr.
– Was nun?
– Auf dem Boden – Hände hinter deinem Kopf!
Der Angestellte runzelte die Stirn, holte tief Luft und zog seine Hand nach unten. Nimble Eyes spürte, dass etwas nicht stimmte – es sieht aus, als würde er nach einer Waffe greifen. Revil betäubte ihn mit einem Schlag in sein unverschämtes Gesicht, sein Körper fiel mit einem Knall vor ihm zusammen.
– Ich habe um Gutes gebeten…
Nach der Durchsuchung des Angestellten fand Revil anstelle der Waffe einen normalen Inhalator, den Asthmatiker verwenden. Außerdem fand er eine Zugangskarte zu den Laborbereichen des Unternehmens. Es war ein sehr glücklicher Fund.
Die Toxic Brothers-Bande schickte ihn los, um eine Lieferung illegaler Substanzen abzuholen – endofomila. Aber Revil kümmerten sich nicht um die Brüder und ihre Giftigkeit, er war aus einem anderen Grund hier – wollte sein Glückslos ziehen.
Die Aufzugtüren öffneten sich, Shustryak wählte die auf der Karte angegebene Etage – zweiundvierzig. Der Aufzug bewegte sich langsam. Revil dachte darüber nach, was er im Laborbereich tun würde. Er war sich hochentwickelter Sicherheitssysteme, intelligenter Identitätsprüfungssysteme, Gehirnwellenanalysen und dergleichen bewusst.

Revil by Inc
Revil von Inc

Er war hier nicht allein; ein Mitarbeiter der Firma Lorian erklärte sich bereit, ihm dabei zu helfen, einen Systemausfall herbeizuführen, wodurch Revil zehn Minuten Zeit hätte, seine Pläne umzusetzen.
Im dreiunddreißigsten Stock hielt der Aufzug an und über Revils Kopf war ein lauter Schlag zu hören – Etwas landete krachend auf dem Dach des Aufzugs.
Der Flinke griff nach der Pistole, doch in diesem Moment durchbrachen metallische Tentakel das Dach des Aufzugs. Sie verwickelten ihn, ein knirschendes Geräusch war zu hören und das Aufzugsdach wurde nach außen gestülpt. Das Gesicht eines Mädchens sah ihn durch das Loch an. Kalte, leere Augen, auf dem Boden des Gesichts befindet sich eine Metallplatte mit blinkenden roten Indikatoren, die bewusst nicht unter der Haut versteckt ist.
– Bevor du stirbst, sag mir, warum du hierher gekommen bist?
Der Flinke konnte sich nicht bewegen, die stählernen Tentakel drückten ihn immer mehr und schon bald würde er keine Luft mehr bekommen.
– Ich bin gekommen, um das zu holen, was mir rechtmäßig gehört!
Auf dem Gesicht des Mädchens erschien ein erfreutes Grinsen. Die Anzeigen blinkten abwechselnd grün und rot…

Flammenstahl: Ruf der Todesmaske

Heute kündige ich gleich drei Projekte an! Wow!
Das erste Projekt – die Basisplattform für die plattformübergreifende Anwendungsentwicklung Flame Steel Engine. Zweites Projekt – Eine Reihe von Bibliotheken für die Basisplattform Flame Steel Game Toolkit, die für die Spieleentwicklung gedacht sind. Und das dritte Projekt – ein Spiel mit generierten Levels in einer Cyber-Fantasy-Umgebung Flame Steel: Call of The Death Mask.
Das Original ist unter der MIT-Lizenz verfügbar, Spielinhalte werden unter verschiedenen Lizenzen verfügbar sein (prüfen Sie jede Datei separat)

Link zu Github (C++, Eclipse):
https://github.com/demensdeum/FlameSteelCallOfTheDeathMask

Mich selbst verlieren

“Man kann nicht alles beherrschen” – Sätze wie dieser bringen mich immer zum Lachen. Jeder tappt in diese Spezialisierungsfalle. Benutzer, Programmierer, Chefs, Kunden. „Ich möchte es wie Microsoft/Apple/Google“, „Warum machen wir nicht einfach ein russisches iPhone?“, „Warum nicht.“ Ist es nicht wie in Word /uber/photoshop?” – Jeder, der in irgendeiner Weise mit IT zu tun hat, hat diese Sätze gehört. Diese Sätze, die von verschiedenen Menschen wiederholt werden, klingen noch lustiger.

Ich frage Sie, Leser – Warum brauchst du ein anderes Wort? Warum brauchst du noch einen Uber? Warum brauchen Sie ein anderes Photoshop? Warum müssen Sie „wie ein iPhone sein“?
Warum binden Sie sich an die Schnittstellen und Vorgehensweise nur eines Unternehmens? Warum bezeichnen Sie sich selbst als Fan von ausschließlich Apple-/Google-/Microsoft-Produkten? Warum können Sie Ihren Geist nicht für alternative Lösungsansätze öffnen, warum wollen Sie nicht produktiver sein?

Vielen Microsoft-Benutzern gefiel die Entscheidung des Unternehmens, dass alle auf Windows 10 aktualisieren müssen, nicht. Die Benutzer kritisieren die unbequemen Benutzeroberflächen des iPhones, Systemabstürze bei Updates und Designänderungen, die sie nicht benötigen, die sie aber trotzdem weiterhin verwenden weil sie so daran gewöhnt sind und ein „iPhone“ haben. es hat Status in der modernen Gesellschaft.

Manchmal scheint es so, als ob Microsoft/Apple/Google, wenn man sie dazu aufforderte, ihre eigenen Kinder aufzugeben, als Gegenleistung dafür, dass sie weiterhin mit ihren Produkten arbeiten, die Leute aufgrund der hohen Bindung an diese Produkte ihre Kinder leicht aufgeben würden.< /p>

Machen Sie sich nicht wie sie, hängen Sie nicht an einem Produkt fest, schauen Sie sich alternative Optionen an. Einmal wurde mir angeboten, ein System für Immobilienmakler mit einer Schnittstelle zu Microsoft Excel zu entwickeln, und es gab auch Angebote, ein „interaktives Whiteboard“-System auf Microsoft PowerPoint zu entwickeln. Als ich fragte, warum genau Microsoft, antworteten sie mir, dass sie „so daran gewöhnt“ seien, als ich fragte, ob diese Unternehmen Software von Microsoft lizenziert hätten. dann werden sie es kaufen.

Lieber Leser, ich bitte Sie dringend, sich zumindest kurz mit den Facetten der IT-Welt zu befassen. Wenn Sie Ihr ganzes Leben lang nur Microsoft Windows verwendet haben, versuchen Sie es mit Apple OS X oder Linux. Wenn Sie nur ein iPhone verwenden, versuchen Sie es mindestens eine Woche lang mit der neuesten Android-Version. In dem Moment, in dem man sich nur auf die Seite eines Unternehmens stellt und sich von den Produkten anderer abschließt, verliert man sich selbst. Er selbst, als eine Person, die selbst entscheiden kann, was sie will, als eine Person, die das bequemste und produktivste Werkzeug zur Lösung eines bestimmten Problems auswählen kann.

Programmierer nur einer Plattform – Ein weiteres Problem für mich persönlich und, glaube ich, für die gesamte IT-Branche. Entwickler, die Anwendungen erstellen, die nur in *.doc oder nur in *.pdf exportieren, Entwickler, die nur an eine veraltete kommerzielle Datenbank (z. B. IBM Informix oder Gott bewahre Firebird) und nur an einen Hardwaretyp (alle diese) gebunden sind nicht funktionierende Programme für x86 auf Android), natürlich verstehe ich, dass Sie „gebraucht“ sind, aber Leute, es ist Zeit, sich zu ändern.

Bei meiner Arbeit verwende ich oft unbeliebte, aber sehr praktische Werkzeuge. Eines der Beispiele – Es war notwendig, die Auflösung zu reduzieren und etwa 100 Fotos zu komprimieren, um sie schnell über 3G herunterzuladen und auf dem iPad auszugeben. An diesem Tag hörte ich einen der typischsten Sätze – „Wir müssen alle Fotos manuell in *Photoshop* in die gewünschte Form konvertieren.“ Sie kam mir komisch vor, weil… Ich stellte mir eine Person vor, die wie ein Diener Gottes alle diese 100 Fotos manuell in Photoshop wiederholen oder versuchen würde, sie durch einen eingebauten Mechanismus zu automatisieren. Der Punkt hier ist genau, dass die Person so an Photoshop gebunden ist, dass sie nicht einmal die Existenz eines kostenlosen, offenen Satzes von Tools wie ImageMagick vermutet hat. Mit ImageMagick können Sie viele Dinge mit Vektor- und Rasterbildern tun, darunter auch die ideale Lösung für die Lösung eines Problems mit 100 Bildern in 5 Minuten.

Seien Sie Herr über alles, studieren Sie, versuchen Sie es, werden Sie kein Sklave eines bestimmten Unternehmens.