It's 2020, and there's now many ways to work with data of arbitrary length in Excel:
- Power Query's M language
- JavaScript
- dynamic arrays.
But if you use or support older Excel versions, VBA can still be useful.
WARNING: Article moved to separate repo to allow users contributions: https://github.com/raysan5/custom_game_engines
A couple of weeks ago I played (and finished) A Plague Tale, a game by Asobo Studio. I was really captivated by the game, not only by the beautiful graphics but also by the story and the locations in the game. I decided to investigate a bit about the game tech and I was surprised to see it was developed with a custom engine by a relatively small studio. I know there are some companies using custom engines but it's very difficult to find a detailed market study with that kind of information curated and updated. So this article.
Nowadays lots of companies choose engines like [Unreal](https:
| ffmpeg -i coltrane.wav -filter_complex "[0:a]showcqt=s=640x518:fps=30:axis=0,colorchannelmixer=.769:.393:.189:.349:0:.686:.168:0:.272:.534:.131,hue=n*2,pad=1280:720[vs]; [0:a]showspectrum=mode=separate:color=fiery:scale=log:orientation=vertical:overlap=1:slide=scroll:s=640x518[ss]; [0:a]showwaves=s=1280x202:mode=cline:scale=cbrt:colors=#FF8300[sw]; [vs][ss]overlay=w[bg]; [bg][sw]overlay=0:H-h[out]" -map "[out]" -map 0:a coltrane-output.mov |
| library(ComplexHeatmap) | |
| set.seed(123) | |
| mat = matrix(rnorm(100), 10) | |
| rownames(mat) = letters[1:10] | |
| ht = Heatmap(mat, | |
| column_title = gt_render("Some <span style='color:blue'>blue text **in bold.**</span><br>And *italics text.*<br>And some <span style='font-size:18pt; color:black'>large</span> text.", | |
| r = unit(2, "pt"), | |
| padding = unit(c(2, 2, 2, 2), "pt")), | |
| column_title_gp = gpar(box_fill = "orange"), |
| from tkinter import * | |
| from PIL import ImageTk,Image | |
| import time | |
| import os | |
| targetImageWidth = 850 | |
| targetImageHeight = 400 | |
| inputImageWidth = 0 | |
| inputImageHeight = 0 |
Everyone who interacts with computers has in important ways always already been programming them.
Every time you make a folder or rename a file on your computer, the actions you take through moving your mouse and clicking on buttons, translate into text-based commands or scripts which eventually translate into binary.
Why are the common conceptions of programmer and user so divorced from each other? The distinction between programmer and user is reinforced and maintained by a tech industry that benefits from a population rendered computationally passive. If we accept and adopt the role of less agency, we then make it harder for ourselves to come into more agency.
We've unpacked the "user" a little, now let's look at the "programmer." When a programmer is writing javascript, they are using prewritten, packaged functions and variables in order to carry out the actions they want their code to do. In this way, the programmer is also the user. Why is using pre-made scripts seen
| X:1 | |
| T:from./abc-abcnotationcom+thesessions/abc-111803542.mid | |
| M:2/4 | |
| L:1/16 | |
| Q:1/4=120 | |
| K:D % 2 sharps | |
| V:1 | |
| BGEGc'2Bd2GdBdG|BGEGc'2Bd2GdB|BGEGc'2Bd2GdB|BGEGc'2B2a2b2g2|BBGEGc'2Bd2Gd| | |
| BGEGc'2Bd2G2B|BGEGc'2Bd2G2B|BGEc'2Bd2GdB|BGEGc'2B2a2b2g2| | |
| BBGEGc'2Bd2G2B|BGEGc'2Bd2G2B|BGEGc'2Bd2G2B|GEc'2Bd2GdB| |
These files comprise two versions of a midifileplayer for Sonic Pi version 3.0.1 or later. There are two versions.
File SPbasicMidiFilePlayer.rb is the basic version, where the synths used to play each channel in the midifile have to be specified in teh code before running the program in the form of a sonic pi ring. If this contains just a single synth e.g. (ring :saw) then each channel will use this synth. If two synths are specified eg (ring :rri) then midi channel 1 will use :saw, channel 2 :tri and then any further channel will use index into this ring and use in turn :saw, :tri,:saw,:tri This is set in line 38. Also specified at run time in the code is the attenuation level set by the fx :level wrapper in teh variable attenAmp set to 0.5 by default in line 40.
In the second more complicated vbesion, support is provided for an external TouchOSC interface which can be used to specify synth allocation on the fly as the program is running. and also to adjust the attenAmp setting in teh range 0.1 to 1 again
| node_modules | |
| build | |
| package-lock.json |