### 4796628539

2018-12-03 09:12

One of the very first projects in my career was php (plain php, no frameworks, no js) cms system for medical facilities. By that time, I didn't know how web works (I mean, I knew even less than now) and my coding skills were very rough. I have spent 3 years in support and happily left the company in early 2013. And today I have found, that this project is still alive, used and they haven't changed admin password ð¤ª
Somewhere in this site there are my own implementation of mvc and orm.. even before I knew about these pattern or read GoF book.
This has the shittiest code, that I have ever wrote for production and I think, by far the oldest that is still in use.

### Developer diaries #2 2D Iterators

2018-10-19 09:10

One of the first thing, that people learn about programming is control flow and, in particular, loops. I can clearly recall how we have implemented two dimensional loop in qbasic in middle school. Itâs very simple task, nevertheless, recently I have found a way to make it complex and cumbersome. May be task, that I will explain below, would be good for a interview.
Letâs imagine, that we have two-dimensional array W x H. Simplest way to iterate throw would be double loop directly from 6th grade:

``````for(int i1 = 0; i1 < H; i1++)
for(int i2 = 0; i2 < W; i2++)
var el = array[i1 * W + i2];
``````

I hope I didnât make a mistakes here, I havenât checked this
But what if we need to get chunks of data from left to right?

``````var container = array[]
for(int i1 = 0; i1 < H; i1++)
for(int i2 = 0; i2 < W; i2++)
``````

This is basically transforms one array to another, not good. We need to use iterators. What is iterators? Here is abstract interface:

``````protocol BaseIterator
{
T? next();
func clear();
}
``````

We should have ability to create iterators from containers and call `next()` until it will not return null (or nil or whatever crap, which mean, that array is over). Internally it should store some counter or pointer to next element. `clear()` function set counter back to the beginning of collection.
For one dimensional array, that allocates in memory lineally, such pointer is trivial. But what should we do in case two dimensional array?

``````protocol CellsIterator {

func next() -> LineCellsContainer?
}

class BaseCellsIterator {

internal let gameModel : GameModel
internal var line = LineCellsContainer()

internal var y: Int = 0
internal var x: Int = 0
internal var w: Int { return self.gameModel.fieldWidth }
internal var h: Int { return self.gameModel.fieldHeight }
}
``````

Here is cropped version on baseIterator in my game and also protocol for cells iterator. I use them both because protocols with associated types (PAT) exist and annoy me, but that is a theme for another post.
So, here I store:

• link to god object (`gameModel`), that is completely unrelated to the topic
• container (`line`), that will store result of current iteration
• two integers (`x, y`) as pointer to current iterator position
• two integers (`w, h`), that describe the size the matrix Here is implementation of simple iterator x from 0 to w and y from 0 to h
``````    func next() -> LineCellsContainer? {
/ clear container
line.clear()

/ if end of line, increment to next one
if x >= w {
x = 0
y += 1
}

/ if it was last line, then we need to stop
if y >= h {
return nil;
}

/ iterate through end of the line
for _ in x ..< w {

let cell = getCell(x, y)

x += 1

if(cell.isBlocked) {
break
}

}

/ return container
return line;
}
``````

I have added comments to make it more readable, although it is already pretty simple. Unfortunately, swift doesnât allow creation of for loops with outside variable, otherwise it would be even simpler `for(;x<w;x++)`.
Another remark: because of the game logic (`cell.isBlocked`), it is possible, that loop should stop, return current container and continue with new one.
This all seems very simple, however it took for me several days to figure out how to do it right. And now I have iterators not only for 4 directions (up, down, left, right), but also by diagonals. Iâm using this to check game logic for player move and at another place, to check, can player make any move at all.
DRY

### Half-Life

2018-09-26 09:09

Last time I have played Half-Life twelve years ago, on my first fall semester, when I got cold, stayed in bed for couple days with fathers laptop. I have played multiplayer a lot since, but never a storyline.
It was my favorite game in school and, at some point, i swear, I remembered all maps from the beginning until, at least, to chapter "surface tension". But twelve years later I have found, that although I still remember chapters order, but have completely forgot all small details and the entire feeling from game is slightly shifted from regular first person shooter to brilliant sci-fi story action game.
And 20 years old graphic technology is not breaking experience of watching slightly scary movie about brave scientist.

Enterance to final boss is magnificent

### scrumption

2018-09-09 14:21

#### Day 0.

Holding camera button lead to device reboot. Double sized control panel is awesome.

#### Day 1.

This morning I got notification "what's new?", it advertised some games from play store.
Spotify launches much faster, than next train stop.
Where is my keyboard magnifier???

#### Day 2.

Separate button for app switcher is good, but why it doesn't show all apps?
I took some photos, deleted all, but one. Half hour later: they are all in my Google photos. What the ... ??
Reordering grid of icons on home screen is similar to playing brocken Tetris.
I really miss Drafts and good markdown editor. I'm sure, that there are good Android alternatives, just don't have time to find one.

#### Day 3.

Photos inverse scrolling direction. Weird.
Piece of lint dropped to headphone jack and I cannot connect headphones anymore. This is silly and not related to iPhone, but in last 20+ years of using 3.5mm jack I met this problem once a couple months, but not on a third day of using phone. Just coincidence.
Twitter official app started ads on opening client, and, when I have tried to close it (show Android software buttons), it turned volume on. Instant delete. Started looking for alternatives.

#### Day5.

Here maps already know where is home and where is work. I have installed it in Saturday at home and now is afternoon Monday. How??..
Also, have found good apps: Fenix for Twitter, PocketCast for podcasts and JotterPad for markdown.
"What's New?" app shared personal data with Sony by default. This app was preinstalled and it is not possible to uninstall.

#### Day.6

Google maps showing small preview in screen, when switching to other app is brilliant idea, by first glance. However, this pip rect always blocked something important on current app - send button on messenger or play in podcast player. Yesterday I made 10 km walk in new area, and, as always in this case, I have constantly switching between four apps - camera, maps, messenger and podcast player. Greatest benefit compare to my old iPhone 6 is that I have never experienced dropping application out of memory, all four apps worked fine and coordinate with each other. Biggest flaw was lack of smartwatch connection and Bluetooth headphones, so most of my 2hour walk I have done with phone in my hand, with cord to my ears, which is not perfect, but definatelly not a Android miss.

Photos ordering is wrong. It's that I have used to another swipe direction, latest content should be on right bottom side! At least, in countries, where people reading from left to right and from top to bottom.

#### Day 22

I have a lot of problems more and I can't wait to buy new iPhone. Even if it would be just two-years old SE or 7, I really miss some apps, airpods and apple watch connectivity.

### Developer diaries #1: Mock

2018-09-04 17:31

Summer is over, and I'm trying to remind myself, that I have a blog. I have almost finished a post, how I used Android for a week (spoiler alert: it's fine, but I don't like it), but for now I want to throw couple things, that appear during my joby-job job:

• If you trying to test EF model functionality, but dont want to make in-memory database or build complex cases, you can create Mock object for tested class as this:
`public Mock<ClassNameToTest> ClassNameToTestMock = new Mock<ClassNameToTest>() {CallBase = true};`
This will call original methods and properties of this class, if you will not Setup-ed it by other values. Very usefull, when one of the properties, that I needed for test was a protected setter and it can be only set by EF, which I didnt want to bother for simple test.
• I have created small code snippet to easily paste mocks into test class. Sometimes it's not working, but I can say the same about all another parts of Visual studio.
• (800) 814-1836 in C# exist and implemented more transarent (static methods with this as a parameter), than in Swift. Cant wait to find a excuse to write one.
• Task, that can be used for job interview: given ordered array of numbers (A), and some parameter value (B). You need to write code, that will select only first objects from A, sum of which is not greater, than B. Should be impemented in O(n) and in linq.
It's very simple thing, actually and I have ended with 6148088657. Much more difficult were to conclude two enormous queries into one simple function.

Next