Apps for Troublemakers # 1

Save

How-to book for “Moody”, a mobile happiness/unhappiness tracker for your community. Track the happiness of your community daily while revealing the underlying reasons.

Thumbnail for Apps for Troublemakers # 1
Category:
Apps for Troublemakers “A do-it-yourself guide for wannabee mobile app developers with a twisted sense of humor”

Erol Bozkurt

2025

First Edition August 14th, 2025 (rough draft) (NoRM) (one person will get it)* Second Edition September 3rd, 2025 (v 2.0) (NoRM) (100 people will get it) Third Edition December 31st, 2025 (v 3.0) (NoRM) (Thousands will get it)

Thank You!

School’s Out students (2024).

(Büşra Nimet Oğuz, Burçak Çam, Emirhan Talha, Talha Berkay Eren, Yağız Öztürk)

Yüksel Körükçü for tips on system architecture.

Erdinç Kütük for development insights.

Şenol Dikyurt for tips on marketing.

Tolga Bildirici for helping us during School’s Out lectures.

Çağla Özen for helping us launch the project.

Tim Corey for his lectures on C# and MongoDB.

Safia Abdalla, James Montemagno and Amichai Mantinband for lectures on .NET MAUI.

Dorian Lazzari for his dedicated support for the project.

If you want to get better and better in programming, continue with their tutorials on YouTube.

If you want to become the master of crazy schemes, follow me.

To Sanbot, the robot who started it all. Several years ago, when I saw a government official rudely bothering Sanbot, I became a supporter of her cause.

“I’m with the machines, man!”

A4t1 “How-to book for Moody” Troublemakers, Unite! Vision 1 Project One Concept 13 The Gathering Storm Development 31 Into the Storm Development 65 Verdict & Notung Linkable Apps 87 Emotional Agility DASH Linkable Consolidator 99

It’s Alive! Testing Strategies 105

Judgment Day Missing bits 113 Extension Schemes Compatible Ideas 119 Disrupting Perceptions Battle Strategies 127 Making Maddening Moves The Art of War 137

“Just provide a convenience and let humanity take its course”

“Twin Peaks, Season Three”

Foreword

“We are the Borg. Lower your shields and surrender your ships. We will add your biological and technological distinctiveness to our own. Your culture will adapt to service us. Resistance is futile.”

Just think about Blockchain, and what it has become. A perfect example for the distinction between what you say and what you do. What you do is what you are… no matter what you say. That alone should convince you that good intentions never work. Of course, those who invest in this idea will argue otherwise, but it’s their nature. They cannot fight it. Say something and do something else.

That’s the story of their lives. What does that tell you? You must always take the bad bits into account. You must design systems which exploit those weaknesses Otherwise, you will fail miserably regardless of whether you work hard… or believe in gods.

What we have embarked here, what it will become… I will reveal it little by little on a need-to-know basis. This way a true understanding of your situation becomes possible, my friend. This wouldn’t have been possible a decade earlier, because regardless of how good or evil communities were, they were genuine. Their lives were meaningful.

They didn’t have appendages that subtracted humanity from them daily. Like the Yin Yang philosophy, every good has evil and every evil has good within. There was always light at the end of the tunnels… which is no longer true.

To be able to visualize my point, think of a forest, an old one like the Amazon rainforest. A forest so thick, it’s full of life. Even the roots are covered with grass and there are flowers of all kinds everywhere. It’s beautiful, because it lives the way it was meant to live, connected with all the other organisms… living in harmony… and that’s the curse all good things in life must fight against.

Think of one of those drive-ins… a drive-in burger joint. How fake it is… You have something you may mistake for a tree or a bush of flowers in the front, and then, there’s a simulated natural corridor leading to the gal who will ask whether you want bigger fries. Yet, there is something good here too.

It’s not too cohesive meaning if you played tricks on one component, it wouldn’t screw up the whole system. However, the supposedly better one in the blockchain example is very cohesive. Screw just one component in that system and the whole thing starts to crumble. Well, it’s the weakness of all good things in life. They are fragile. Because good things are the exception, not the bad ones.

Good things don’t last, bad ones do. The good die young… and the pricks live forever, my friend. So, always work keeping that in mind.

Today, good and bad things are so mixed up together, you can never tell. This little black slab in your pocket is what makes it all possible. You can escape from it… but if you could, we wouldn’t be having this conversation. You have become as mindless as the programmable sprites in old video games by making small, logical decisions.

Some see our salvation in science, others see in in the Heavens. I see it in letting go. I mean, a lion doesn’t think about who he is and waste his whole life now, does he? No worries, your new condition makes it possible for me to program you. NEEHEEHEEHEEHAHAHA! No matter how much you resist, you will fail. “Resistance is futile. You will be assimilated.”

I’m writing this book and creating a toolbox (training, app, book) for aspiring troublemakers everywhere, because I know how. I have been there. I am a troublemaker. When you are in the twilight years of your life… and you have witnessed something remarkable… something that can change everything, you want to spread the disease.

Keep in mind that I’m a computer scientist and we never do anything %100. Why? Finding the murderer is fun. Catching him is tiresome and more importantly boring. Also, beyond the very center of a solution everything is expandable… extendable… expendable… forgettable. So, this book and the other components in the toolbox are all incomplete. You can complete them.

You can leave them the way they are. Their usefulness doesn’t require their completeness. When you know stealing is bad, you don’t really need a lot of details, granted you are not a thief after excuses.

You might find me strange but having experienced strange things all my life made me that way. I have learned to enjoy watching people suffer. By people I don’t mean people, I mean those with some sort of power… like managers and those who want to become managers aching for more power or toys.

I love making them suffer, not on the outside, but on the inside. I want them to shake nervously just because I might be around, having a good time, defying their existence, making their lives unbearable. They never get the fact that they don’t employ me. I just share my hours with them because of some reason or perhaps I need some quick cash.

And, when I’m done, I leave that place leaving them behind, you know, like leaving the zoo or the asylum behind. I tell you, there isn’t a better feeling in the world. Interestingly enough, my disposition is very well expressed in my country’s national anthem, “I was born free, I live free, what kind of an lunatic thinks otherwise just makes me laugh”.

By the way, this book will not make you the greatest .NET MAUI developer. You won’t become a VMVM, MVC or API guru either. However, regardless of your background, you will know how to develop mobile apps from scratch by the end of this book.

You will be able to survey ecosystems, create a product concept, manage requirements, create paradigms, devise release strategies… and obviously, develop each and every component of a six-layer cross platform mobile app. You will also learn how to deploy your app and API to AWS (2.0) and let your target audience start enjoying them.

While bits and pieces of such content is available everywhere, this scope is unique. Why? Because I care ;o)

About Me

This is not my story. This is your story. Yet, people keep asking me who the heck I’m like that matters. So, here’s a short bio for you, curious ones. You know who you are. I’m a computer scientist turned writer turned entrepreneur turned activist. I’m into anthropology and its implications in technology-oriented communities.

I believe software developers have a responsibility to set the record straight. Today software, like everything else, has become an influencing agent used by the power holders, misused by diminished employees and abused by those who consume them. The fact that it has become everybody’s bitch in this prison makes me sick. Because this profession is different from all the others.

That it doesn’t need the approval or the support of the establishment, not just the business circles or the government, it doesn’t need anyone’s approval or support. That’s what made it what it is.

When watching a good horror movie, it presses every plausible button not just the one associated with scary things. That’s why we feel alive watching them. Being alive means being open for every unexpected turn, every twist. Software was just like that. Pressing those keys made us smile with joy. We used to lose track of time. Making love to loved ones was the only excuse to pause. Living and typing were one and the same. With every line of code something changed in our lives for the better.

Those days are long gone. Now software is either boring financial decisions made for you or the involuntary movement of your fingers on bacteria-infested black screen you cannot leave behind. If I learned anything, when a system crashes everything goes back to the beginning. This is not necessarily good or bad. It depends on what you do next. Your move will make it bad or good.

So, since we are moving towards singularity, I have decided to make a good move. A move you can mimic yourselves to formulate your moves. Everybody’s ecosystem is different. Yet, we are all the same. Even if only one of us succeeds, that’s good enough. That’s enough to unbalance the equation… set the record straight… start the war that will end all wars.

I’m doing this to set you free, my friend. It doesn’t matter who I am. I’m here for you. Your name is more important than mine. What you will accomplish is much more important than what I’m trying to do here. Good luck!

Erol Bozkurt

[email protected]

https://www.linkedin.com/in/erolbozkurt/

A4t 1

Troublemakers, Unite! What’s a good novel or a film? “If you feel like the extraordinary event that took place there is within your reach after you have put the book aside or left the movie theatre, it’s a good one” (Sean Penn). The same thing is true for software.

If the experience a piece of software evokes feels like it is within your reach even when you are in the real world, it’s a good one. That’s why the apps you work on while learning to develop software should not be trivial. They must be simpler versions of great experiences. Apps… you can use as drawing boards which will grow as you grow. Apps… that will change the world.

Imperfect, incomplete or even buggy they may be, still they can change the world, granted you have what it takes, troublemaker.

What’s the Point?

As you can see, the apps we are going to develop together will be tiny. That’s why we call them micro apps. Don’t get their size fool you, though. You can do all kinds of things with them. Yet, one thing is more important than the others. These apps are yours… unconditionally. You can customize them to do whatever you want.

Nobody else can control how they work, where they work, when they work, why they work. Nobody can shut them down. You don’t even need the cloud. Any crappy computer will do as a server. They are not meant to have characters of their own (read “generic”). They are meant to be abundant in all shapes and colors.

While their size must be small at all times, you can plug one into another to make them bigger. They are meant to be used in groups to make “maddening moves” possible (strategically deployed interlinked apps dispersed over time… to terraform cultures). That’s why every School’s Out cycle spits out three customizable interlinked apps (3) with a unifying theme (1).

That theme is made more prominent with an accompanying consolidator, one-page [web] app. That’s our formula for success: 3+1 apps every cycle. Moody will soon have two siblings, “Verdict” (which helps you conduct performance reviews on the go by exposing issues) and Notung (which helps you control public opinion by making ideas visible).

Together they will give rise to a new paradigm called “Emotional Agility” (and appropriate consolidator, Emotional Agility DASH or EAD for short).

“What can you do with an app for troublemakers (A4t)? Anything.”

1

A4t 1

This book is about the first app in the trinity. Heck, it’s the first app we have developed in a School’s Out HUB! Later we will add a web app that will tie all the strings together, “Emotional Agility DASH”.

This final step of the first cycle will provide an example for how one may finance her social experiments by exposing her findings to appropriate communities… but this is a story for another book.1 Does it have a goal other than gathering support for the cause? Yes, it provides an unavoidable manifestation of our findings via three interlinked apps for troublemakers. Does it have to be a web app?

No. It can be a one-page mobile app too, but such a web page is a lot easier to develop, isn’t it?

Before we delve deep into our project, let’s try to grasp its full potential. Consider this first app, “Moody”, for example. What can a tiny app “which can only be used to broadcast how one feels in [the office] on a daily basis” accomplish? A lot!

George Orwell once said, “In a time of universal deceit – telling the truth is a revolutionary act.” Our motto is very similar to that with a twist, “In a time of universal deceit – telling the truth is an evolutionary act.” Consider the mess we are in using a game. All you have to do is to remove the block at the bottom of the pile in this enormous game of Jenga.

The complexity and the sheer size of the game unintentionally empower all the little men and little women (and little trans-persons, for that matter). Since evil cannot tolerate anything but itself (Remember Agent Smith in the Matrix?), as the ‘game’ spreads everywhere, it will expose one weak spot after another. And that’s where you come in.

With your micro apps you can easily unbalance the equation one weak spot at a time, my friend. This is the only way to kill dragons. Make small incisions and don’t stop until the sucker is down on his knees. One small crack on the wall is enough to let the sunshine in. Good luck!

Assumptions

(somewhat) Working knowledge of C# at the most basic level… That’s it. That’s all you need to ‘digest’ this book. If you don’t have it, just go over a dummies book and then, after a week or two come back here! We will not cover what a class is, what a loop is or what a conditional is.

We will not cover the history of technologies, their system architectures, or the limitless customization options they provide. We will only cover what we need with just the right amount of detail, so that you can easily tweak the resulting app here and there. You will see that this way, you will also be able to teach what you have just learned to other enthusiasts.

That’s how heavy metal spread, man. First, learn your songs. Then, learn your theory. Better yet, do not learn your theory. Just feel it here, at the center of your soul. Soon you will see that the angels (or demons) will whisper into your ears… and you will rock like nobody has rocked before. Feels good, doesn’t it… to be free?

We will only cover basic flows our actors will be walking towards their goals, and maybe (?) a few alternates leaving all the rest to you. Aren’t you lucky, now? There is so much room for you to grow. Yeah, seeing the big picture is a bitch. Anyway, we are all about generic apps here, but there is no such thing as a good generic application. So, the first social experiment (read, “first mobile app”) Moody will be a variant that will target big businesses which have several departments.

As a result, Moody (or the other A4t(s) for that matter) is not generic to the point of uselessness. You can make it your own after you understand how it works. You may even consider this as the birthing grounds of new design patterns. A wise man said that patterns should be about people and for the people, not just for lazy programmers. There, that covers all our assumptions.

1 After all three apps are published along with their how-to books, global pilots will take place. Global pilots will start in the Baltic

states, continue in the North and end with a tour in Germany. Then, the final chapter will take place in Texas (Austin) and California (San Francisco and Los Angeles). During the course of those pilots, a new book will be written to reflect upon those experiences, “Experiment”. While the how-to book will be covering the software engineering aspects of the project, the second book will cover an entrepreneur’s journey within the context of NoRM Institute.

2

A4t 1 It’s All About Community

There are only two archetypes in our profession, “Sherlock Holmes” and “Dr. Holmes”. One catches the murderers and the other makes sure they stay in prison. One is an analyst, and the other is a programmer. And you can never be both. Even if you can handle both chores up to a standard, only one of them has you… balls to bones. Me? I’m a natural born Sherlock Holmes. I can not only catch murderers, but I also love fucking with them so much. NEEHEEHEEHEEHAHAHA!

“You cannot find truth on your own” – Sevent Letter, Plato.

While I believe in everything Han Solo, I’d advise you to get an accomplice. You should both be wannabee programmers. The only distinction is one of you should be good at making things up and the other should be good at making things. When one is bored, the other should be able to take charge. This way you will always have fun, my friend. Also, you may pick someone with other things on your mind too. Unlike many other pros, I’m all for office romance. It’s fun!

Technology

Every app for troublemakers has the same technology, so that you won’t waste your time on such matters too much. You can make a few modifications and port an app to another platform, such as an iOS, a Windows or a MacOS app very easily. Because of this, we will be releasing only the Android versions to make the training process simpler. In the Android world there are fewer rules and that’s the way we like it. Here’s the list of the technologies we will use:

– Programming language: C# – Mobile app development platform: .NET MAUI – User interface technology: XAML – Database: MongoDB – Deployment platform: AWS

Apps for troublemakers released by a School’s Out cycle will always be an “interlinked group of three mobile apps” and a “one-page (web) app” which consolidates the information gathered by the first three. This (web) app can be a one- page mobile app as well. This one-page app has the potential to be commercialized, which isn’t one of our priorities, but you can go ahead and do that.

It all depends on you and your ecosystem. Every minute a sucker is born. Someone has to take advantage of the situation.

– Moody (this book’s concern) – Verdict (Another book: A4t2: Conduct performance reviews by exposing issues and alerting authorities) – Notung (Yet another book: A4t3: Gather ideas, pick one as the solution and control public view) – Emotional Agility DASH (One-page app that restricts view to the most critical information AKA single metric)

Their architecture is straightforward after your first experience… meaning “become a pro after your first encounter”.

– A loose application of Model View Controller. We will not use MVVM architecture even if it’s the default for .NET MAUI. Why? Because it’s overkill for small apps. Also, I don’t like someone else’s idea of flexible architecture control my every move. If you prefer it, you can easily port what we are going to do here to MVVM.

It would be like killing the damsel during your attempt to rescue her, but hey, who am I to judge? – Controllers will be use case based (1.0), but there will also be an overseer type of controller which makes sense of the created data within the context of the current A4t trinity (2.0). While we seem to have two use cases,

3

A4t 1

since they are very closely linked, I preferred to go with one controller here. Controllers, after all, are here to make things simpler for us. We don’t have to make things simpler for them. – The database created for the first A4t will be used by the other A4t(s) in the trinity.

This means not only feelings, criteria, community, moods and cultures are consolidated, but also, issues, clues, ideas and solutions. Get it? Whoever uses these apps will be able to link feelings all the way to solution without missing any important info in between. Yes, I’m a history buff… not!

This way feeding a consolidator will be the easiest thing to do. – The API created for the first A4t will be used by the other A4t(s) in the trinity. The same goes for server-side functionality. In a single API, you will be able to traverse, modify and maintain all actions necessary for emotional agility. Don’t get emotional yet, man. We are only in the beginning of this wild ride.

Let’s summarize what we have just said within the context of our first app, Moody.

– Moody (app) (If you must know, “moody” comes from “moody”.) – Presentation Layer (View) – Business Logic Layer (Controller) = Overseer controller will be here too (2.0). – Data Access Layer (Service) – Data Layer (Models) – Milgram (API) (If you must know, “milgram” comes from our inspiration, “Stanley Milgram”.) – Data Access Layer (Service) – Data Layer (Models) – Berry (Database) (if you must know, “berry” comes from my mentor, “John M.

Berry”.) – Collections and Documents

We will use “Do It Before You Do It” (DIBYDI) framework first introduced by Ercan Köse (2016) (LinkedIn Profile). This process is designed in such a way to help you “develop applications with technologies you don’t really know”. Sounds crazy? Trust me, it works.

And all the newbies and old farts out there memorizing some made up gibberish by framework spitting vendors can go out and cry now. For all the others, this is the moment for you to say, “I’m bad, but I feel good”. “NEEHEEHEEHEEHAHAHA!”

1) First Cycle, “Formulate Your Point” a. Pick a scenario that really matters b. Add an inline watcher for every test case (i.e. “a verdict has been submitted”) c. Add mock objects for the server side (i.e. Erol Bozkurt works in the technology department of ACME) d. Finish everything on the surface e. (if it is not an MVP yet) Go to “a”

2) Second Cycle, “Prove Your Point” a. Pick the scenario you first picked b. Create an appropriate database c. Add server-side functions d. Add functions to monitor key metrics (i.e. number of verdicts for that day) e. Finish everything in the background f. Run with inline watchers enabled to display on screen alerts (i.e. a new verdict is in) g. (if it’s not an MVP yet) Go to “a”

4

A4t 1

3) Third Cycle, “Test Your Point in the Trenches” a. Interview relevant people and create a feedback loop meaning “create your first community”. b. Determine pilot zones and start with the most relevant one… or the closest to home. c. Release, Analyze Metrics, Review Feedback, Make Modifications, Release.

4)Fourth Cycle, “Make It Big” a. Pick another pilot zone. b. Release, Analyze Metrics, Review Feedback, Make Modifications, Release. c. (if MVP is rock solid) Finish. This is the end of the first version of your product. d. For the next versions of your product use proper techniques, man. Game over. *MVP = An app which delivers the most important feature in a so-so manner without crashing because of your help.

What, you expected thick guides, expensive tools and silly games? We don’t have them here! You don’t need them here!

One for All, All for One This is my favorite. I believe in small groups forming big groups via interfaces (or contracts) just like software systems. How a small group interacts with another one is straightforward. One asks for something, and the other one delivers it or not. What’s not that obvious may be how a group, even a small one, can work on one thing at a time.

And how can every member of that group work on any task regardless of the expertise it requires? Did you say, “Why?” Why is a silly question, pal.

Simple answer, they can’t. However, when a group works on the same thing together, there is more than one goal. First, you want to perform a task. Second, you want to have everybody have a good grip on the issues associated with the task in hand. Third, you are building a cohesive team where every member can perform the job with different levels of expertise… at different levels of quality.

Regardless of the sophistication level of the resulting artifact, it always adheres to your minimum quality standards. Imagine it this way, when you are going to have a dinner party, children may only prepare the table, but still, they can do a wonderful job while they are at it. It’s not the meal. It’s not the drink, but it is still an important part of the whole experience.

Having everybody in your team on the same page with the same aspirations is critical. Them being aware of what is missing is a matter of life or death. I would pick a team which is aware of what they are not doing over a team of world-famous know-it-alls anytime. Even if you are left with the one who can do very little, you are not lost.

Your touch with reality is strong, which will show you the path sooner or later. That’s the deal we are looking for. Also, the resulting product is always so much better when created by a harmonious group. Furthermore, you would no longer need silly meetings, planning sessions, brainstorming workshops, motivational speeches or lousy birthday parties.

Everything is handled while doing the something… while “living”.

Limits… What limits?

This first edition has some limitations, a few missing bits here and there, because I just wanted to get it out there fast. Also, those limitations won’t be limitations for most readers… and… must I do everything myself, people? Anyway, I will release another version of this book towards the end of next year (2026) and it will have all the missing bits one way or another.

I mean, didn’t we all earn the right for a breather here? Let’s enjoy what we have done so far. If we just keep on running, life becomes a nuisance rather than a blessing.

– We won’t have authentication. The second version will have LinkedIn Authentication. – Communities will be a business departments. The second version will have 12 customizable communities. – We will have a rather loose concept of a rules engine… meaning the first version of Moody can be misused. The second one will have components that will handle a-holes in our midst. You heard me.

You know who you are. – We won’t spend time on beautification. The second version may be (!) prettier. – We won’t deal with deployment issues. The second version will be ready to be deployed to a machine on AWS.

There, I feel good already.

5

A4t 1

What can I say? I get a better understanding of my situation after I draw about it. So, sue me!

Weird Science

Unlike all the other books (!) out there, I will share what went through during this project with you, which will reveal the changes we have made to the product concept along the way. Perhaps, you may favor another version of Moody and after you finish this book, you may go ahead and develop a better one. It’s all good. I’m a fan of Director’s Cuts too.

Bedrock

Before we start working on the app, we should have a general understanding of the circumstances that made it possible. Circumstances that require, help create and sustain apps designed for social experiments… “ecosystems of powerless employees”. Employees who complain about the things they end up supporting… Employees who become the problem.

While there are many [troublemaker] candidates here, I’m not sure they will all go that far. This will only be revealed after our apps are deployed in this ecosystem. On the other hand, the best [subject] and [enabler] are obvious. Our [subject] has already been creating chaos on his own. It’s about time we gave him a hand.

Our [enabler] is just another powerless middle manager who used to be a [subject] herself. Yes, some [subjects] become troublemakers, enthusiasts and experimenters (as in, “they have guts”). Others are left behind to continue as subjects or fake it by becoming powerless managers who cannot head towards the exit and continue to take crap which they turn into their daily bread.

6

A4t 1

Let’s use the characters in the US version of the TV series, “The Office”, for simplicity. Jim Halpert represents an ordinary (read sane) employee who isn’t very happy about what’s going on in the office. Also, he isn’t afraid to express how he feels or share what he thinks. While we think about chronic feeling of misery when we refer to [subjects], this is where it all begins.

After this point a [subject] may sink deeper and deeper into or rise above daily bullshit. So, Jim is a good example for both paths. He may continue to be a [subject] or he may become a [troublemaker] and even an [experimenter] one day.

Jan Levinson represents an ordinary employee who has somehow ascended to the upper management. “Somehow” is the secret word here. Because work is mysterious (Severance). Anyway, this makes her detached from the branches which do the real work. She appears to be a different species… who never took crap before… who cannot understand what is really going on down there in the trenches.

This quality makes her a perfect match too. Because, on one end, we are interested in real people who have the blues. And on the other end, we want to have those who give the blues… those who became great at faking things… who lie to themselves and to the others 24/7.

7

A4t 1

Unlike Jan, there are [enablers] who used to be [subjects] meaning they remember their past. So, [enablers] with subject memories and those who are lacking them for they are still [subjects] with a different shade. You know, kind of like the slave traders and slavers… or madam of a brothel and Uncle Tom. Without those with memories, others cannot manage their slave labor.

There must be a familiar interface in between. She must have an incentive to put distance between her and her past. Similarly, without the ones lacking the memories, management isn’t possible. Because when you are too emotional about the subject material, you cannot do what is necessary. You must be lost in the game to tick.

I hear you. You are saying, “Aren’t [subjects] lamer… cowardly?” Yes, they are. And while Jim has dignity, he is also at the precipice where many of his predecessors could not move beyond. Understand that a [subject] isn’t born a subject. Rather he makes himself one by taking little, seemingly unimportant steps. Interestingly, steps that liberate them seem trivial to them.

Characters without internal conflicts… who only chase Sophist dreams (immediately available outlets for self-gratification) are shallow. We don’t have to experiment on them to understand them. Just a short glance would do. [Subjects] on the other hand, are all about conflict… and they are trapped between imaginary point A(s) and point B(s). Imaginary as in craved…

The same goes for Jan as well. While she portrays strength, confidence and a strong sense of belonging to ‘upper classes’ for the lack of a better word, inside she is the complete opposite of her mask, someone who craves for attention… and love. So, to be able to understand the whole thing one must first understand her beginnings and then explore her possible futures.

She makes her feeling good possible by staying in the loop. Whereas for Jim, it’s the opposite. The only way out of this mess is “his leaving this ecosystem before he becomes a subject himself”. Sometimes, the only way out is through the front door. This is a tricky ordeal. Many mistake “migration” (!) as another form of the front door. It isn’t.

It only means you do not have power, and you need a handler. You need to stay in the loop.

In essence, there isn’t a big difference between Jim and Jan. Think about Star Trek, where often bits and pieces of the same person are portrayed by different people / species to make a point. The same thing is true here. If Jim continues to exist in this ecosystem, he will eventually become a [subject].

While there is a possibility to become a [troublemaker] afterwards, meaning being no longer a [subject], it is only one outcome of many. More likely than not, he will live in a loop he can never escape from. “A subject that strengthens his being a subject with every passing year” … A person who puts chains on himself by his own freewill.

That type of [subject] is our ideal [subject], but we can do with less.

8

A4t 1

A part of Jim has the courage to do something about his life, but another part has not. A part of Jim sees himself in a management position to become Jan one day. While Jan has progressed further away from her [subject] days, she is one at heart. She will always be that way, because a slave is a slave regardless of whether he becomes Uncle Tom one day.

Tastes and smells may change, what lies within does not. She may have an infinite regress one day only to find out herself at the beginning of her new loop, as a [subject]. Of course, she has the capacity to move further away from this fate and delve deep into her current loop where she thinks she has made something out of herself by becoming management material.

The simplest visualization of this situation is a maze with clear signs pointing to the exit, but those lost in the maze are refusing to go that way… not by choice, but because of their fears. They cling on to whatever they may have, hoping to be liberated where this isn’t an option. Strange, huh? Sometimes the burden of the truth is so immense, one does everything to ignore it. When people fall, it may take a lifetime to get it, because it too gives the illusion of a life.

That condition is the true trait of a [subject]. He may change ecosystems, but he always switches between similar ones while giving him the feeling of progress and always keeping him where he belongs. He begins to see what’s not right as a universal law… and he accepts this thinking it is inevitable. That’s how a coward hides in the shade. That’s how he can get up in the morning and pursue a powerless, meaningless, loveless, corrupt and selfish life. Because of ‘laws’.

9

A4t 1

A [subject] is a person who can do the job which gives him a false sense of security. It makes him believe that he is in control. That, he matters. In fact, this is the opposite of the truth. He does not matter.

Some may think intelligence and stupidity are the extremes of the same scale. They are not.

They are different qualities which can exist side by side. This makes fixing (!) stupidity very difficult, almost impossible.

The defining characteristic of a [subject] isn’t his being smart and stupid at the same time. It’s his cowardice… and his ability to fake otherwise. He specializes in making people, including himself, believe in fabricated truths… That he is the hero.

The secret word is “the ability to lie to oneself”.

Now, you may be thinking “what’s wrong with this guy?” Nobody with his right mind would promote bad behavior. Well, I do. Because without bad behavior, there is no way we can create deterministic systems. If we had to deal with people with good behavior, so to speak, we wouldn’t have any rats in the maze… but we do. Not only that, but they also remain there no matter what.

They love to be slaves. Yes, the Grand Inquisitor was right! Agent Smith was right too. A good writer makes his innermost thoughts seen by the villains he creates. Heroes… well, he knows they are the figments of our imagination. They may exist, but no one has seen one.

Rear Window, Alfred Hitchcock, 1954.

An [enabler] is a con artist who takes advantage of herself. What a world! Yes, of course, she takes advantage of others, but her main interest is to create a modified, idealized version of herself that will convince herself that she is somebody. The easiest way to spot one is to have a keen eye for absurd comments.

While you are talking about this or that, especially when you reveal your inclinations, preferences… things that are there because of your involvement with world affairs… you reveal who you are.

10

A4t 1

This is when they cannot contain themselves. They immediately react, trying to prove you otherwise. They always react. It isn’t in their hands. They must bury everything that may give birth to the ideas that other realities exist. No, they must make sure that there is only oneness. Their reality is… the light. All the rest is darkness.

In this regard, an [enabler] can change who she is to a certain degree. She can put some distance between her and the things that harm (wake) her. That’s the rub, on the other hand. Just behind this wall, everything is just like how it has always been. Yet, we can fake it till death, can’t we? Just have a look at mom and dad… or your reflection in the mirror… and you will understand.

She can influence others to do the same… but she cannot change things.

She can only change people’s perceptions of themselves. No, it’s not a small thing. You may even argue that it’s a way to change things without changing them, like magic. On the other hand, when such transformations can no longer be maintained, [enablers] migrate. In their worlds, this is called a promotion or early retirement.

They move from one ecosystem to another to create a sense of progress. Without a sense of progress, they are lost. They are creatures of project management. Beyond managed realities they do not exist.

The Man Who Knew Too Much, Alfred Hitchcock, 1956.

11

A4t 1

There is another way, on the other hand. The path to your salvation… which lies between you and the others you have been ignoring for a long time. Your path will be revealed to you only after you have made contact.

Understand that you don’t have to be very strong or very smart or very brave. Just a little bit of all those would suffice. A small crack on the wall will let the sunshine in. You don’t have to bring it all down. Once the light passes through, it takes it from there. The light needs you to open a crack. Bringing down walls is its job, not yours.

It is beyond your abilities to separate light from darkness. Yet, it is your defining characteristic to make the choice to see the light… and to let it shine through.

Your power lies in your ability to say a genuine “Yes” or “No”. You can only do that if your interests lie beyond yourself. That you are not self-absorbed. You can see the world beyond what you want. This ability which is normally (!) granted at death is the proof that you have been awakened to the hidden reality of human existence. “We can leave ourselves behind”.

You can say “No” to become a failed (!) Jim or a successful (!) Jan. You can go through the exit, become a part of a much larger universe. You can make this quality of yours stronger by learning to develop mobile apps from scratch. You can learn to design social experiments. You can learn to develop strategies for cultural transformations. You can strategically deploy interlinked apps dispersed over time. You can become an [experimenter] yourself! You can save yourself!

While it is contrary to common sense, “being trapped feels like you are onto something great… that you are making the right move… even if you have been doing the same shit so many times before”. If you are clueless about which path your recent awakening will take you, don’t worry, you are on the right track! You feel like a fool, because you preserved your innocence.

You are your own (wo)man. You are doing something not because you have guaranteed certain privileges on the other end, but because you reject doing something morally wrong. That’s the price of freedom.

So, you are in the dark, huh? Don’t imitate stereotypical reactions. Enjoy! This is what freedom feels like. Savor it. Explore it. Understand it. Most of all, learn how to move forward in the dark without even knowing where you should go. This is the skill that separates living from the undead. Unfortunately, it may take a lifetime to learn it. You may not be able to learn it at all. Don’t worry. I am here precisely to teach you that, my friend. I am your newfound best friend!

12

A4t 1

Project One Concept We will start off with a very simple but potent mobile application which will serve as a template for all the remaining apps. Moody is an app you can use to let a target group; a group you want to intimidate know how you feel about stuff. While remaining anonymous, you will be granted a single vote every day. You will have the option to state whether you feel good or bad.

And, once you have done so, you will be asked to reveal the reason why you feel that way by selecting one of the twelve customizable criteria. Since you have already selected your community from twelve possible options (Sign Up), those monitoring how people feel about certain things on a daily basis can see happiness or unhappiness grouped by criteria and community.

For example, one may see that “accountants are really pissed about work – life balance in their firm”. We also get to see how an employee’s community feels about what’s on her mind. The things causing extreme unhappiness or happiness are displayed as well.

This way “employee feelings, their reasons of happiness or unhappiness, community moods about the same criterium and overall corporate culture” are not only closely linked but also made visible. Simple and effective, right? So, let’s create chaos and have fun, shall we?

Actors [Tips] An “actor” is someone who triggers a system hoping to achieve a visible / meaningful goal.

[Tips] A “goal” is not a step towards something. It’s an end in itself… but it can be a part of a process”.

[Tips] An “actor” can also be an external system our system is dependent on or vice versa.

[Tips] A “business actor” is someone who isn’t using our application, but still she is indirectly affected by it.

[Tips] A “persona” is an imaginary representative of “actor”.

[Tips] A “business actor” is often the inspiration behind an “actor” or a “persona”.

Moody has two personae, “a worker bee” and “a queen bee”. These two actor candidates have a temporal relationship. The second one is a possible future of the first one. Not only that, but she is also the desired mutation of many residing in the first position. Our worker bee, on the other hand, is someone who has mutated differently.

While she cannot leave the system, she has decided to sabotage it from the inside. She isn’t very brave. This is her way of comitting suicide. In this version, the “queen bee” will be a business actor. So, she will be indirectly affected by Moody, nay, we

13

A4t 1

will drive her crazy! This approach is rather rare in software, but I love to mix system and business actors together and design my application while thinking about both. Also, when designing a flow or a process, I like to include both the good and the bad bits of an ecosystem in the mix. Because a system made of only the good bits is bound to fail.

A perfect solution is a bad solution (Remember what the architect said in Matrix Reloaded?). Even if this approach doesn’t fail you, it will limit you. It will block your attempts to evolve your original idea. That’s why I solve the main problem but leave many features dangling around it. Who knows where we should head next? I do! I mean, I might.

So, our “worker bee” is also the only system actor here (Employee). She is the only one who is going to use the application. However, considering office politics schemes, there will be a lot of business actors including our very own “queen bee”. By the way, when we use the term “sabotage”, don’t panic. Because we don’t mean anything illegal or dangerous here.

What we mean is “making the pink elephant in the ecosystem visible” to an extent that lies can no longer hide it no matter how good they are. This way, even if the system has a habit of devouring any activity for self- reflection or cultural change, one can still expose problems and request attention.

In that regard, we are a force for good who isn’t shy about using brute force when necessary. Our technique is pretty much like the famous Chinese Water Torture where never-ending drops of water falling on one’s head breaks him so much quicker than the good old fashioned pain.

(system actor) A “worker bee” can be anybody in the workplace, granted she has no power, and she cannot take it anymore. Don’t interpret this as if she is going to do something about it. No, she isn’t one of the brave ones. Instead, she will bitch about it all the time like her close friends do. Bitching is a way of life.

That’s what we are after, “an energy source which is too weak to light a fire, but too strong to be extinguished”. In our example, she is one of the employees. She is a sheep… not the black one, but not the white one either. It’s always easier to play with the ones who are in- between… their imaginary point A(s) and point B(s).

The former is assumed to be career steps and the latter is assumed to be the zone of those she considers as royalty where she won’t be seen as an a-hole anymore… Heaven, if you will.

(business actor) A “queen bee” can be anybody who has some sort of power as long as she is the (filthy) right hand of upper management. In our example, she is one of the mid-level managers, an HR Manager to be exact. Why? Because human resource managers are ideal when it comes to serving slave masters, doing their bidding and still thinking they fight for the people.

It’s always easier to play with Uncle Toms. Also, being a mid-level manager means being without real power. This miracle mix is what turns someone to the dark side. You cannot be in this position, if you are not a coward.

As you can see, for Moody to be applicable in your situation, your ecosystem must be a hive with a strict hierarchy, a caste system to be exact where a worker bee cannot be anything else. For her to become something else, she must transform herself by getting rid of all her principles. She must find a new home for herself. The same is true for the queen bees as well. The moment they remember their former selves, they are at the risk of being excommunicated.

Personae

A persona gives an actor life. You may consider it like an acting role. Even if you narrow down what one may think of an actor when you name her (i.e. Sigourney Weaver), you can never really tell how she is going to act in a particular context (i.e. Alien franchise). However, when you provide a persona for her (i.e.

Ripley), you have an idea about her notion of reality which will help you predict what she will do when. Also, this way you will be able to spot those like her which will be indispensable when you have to create a community for your app (i.e. Noomi Rapace). Apps without communities are failures regardless of whether they are great or not. When you come up with a hi-fi amplifier, for

14

A4t 1

example, there must be people who need it, who will appreciate it. If people are just fine with using their phones for listening to low quality music, you will have a hard time promoting your product. Even if the product is great, you won’t get very far with it.

IT Professional Jim

Jim is 30-something. He has graduated from a reputable technical university. He is married without kids. He is planning to have children after a long overdue promotion takes place. Unfortunately, that promotion never comes. His salary is getting bigger, but he is never given a managerial position. To make him believe such an impossibility is indeed possible, he is never given a clear answer.

He is encouraged to take all the possible training a manager someday may use. Never having the guts to resign or cause a major disruption in the corporate culture, he passively bitches about this and that while he waits for his retirement. Even then, he is reluctant to take risks. He doesn’t see anything wrong with this, because his friends are doing exactly the same thing.

He is a sheep… a sheep thinking he is something so much better.

Moody is designed to give such people visibility or rather, the strength that will turn wishes into actions. Of course, a few of them isn’t good enough, but if you group hundreds or thousands of them who are unwilling to take risks… who would like to amplify their distress… (Ring a bell? Remember, Agent Smith?) they begin taking risks without even knowing.

Issues making them unhappy are broadcast daily to make ignorant managers feel bad too. On the other hand, those managers were already feeling bad, but they weren’t unhappy because of the same reason. That’s what we will make sure of. Everybody will laugh or cry because of the same reason.

Although it is highly unlikely that they will do anything about these issues, the sheer necessity to appear that they are going to do something about them will drive them crazy. They come from the same livestock. So, to be able to preserve their places in the hierarchy they must prove their ability to handle their kind or maintain their cool.

Otherwise, their superiors could very easily replace them with

15

A4t 1

others who are dying to become the new buffer zone. There, that was the pessimistic version for you. You don’t have to be blue, though. There is nothing intrinsically bad about Moody. Moody is there to spread happiness or unhappiness a group may be experiencing throughout the land. Communities are at their best when there is free communication of thoughts and feelings.

If those who are able are willing to solve these issues, Moody will help them create heaven. If they simply ignore those issues, Moody will help them create hell. In a word, Moody is innocent. You are not.

– Jim Salton. – 35. – System Administrator. Avid shell programmer. – Computer Engineer. – University of South Taratino. – Married. – No children but planning for it. Already picked names for them. – Renting. Doesn’t believe in the value of ownership. – Has a secondhand Toyota for the wife, a Fender guitar and a Yamaha amp. A natural born hobbyist.

HR Manager Jane

Jane is a sociology major which is every confused young woman’s career path. That and American Literature. Not knowing what to do next, she stumbled upon a career in human resources only because the person on the other end thought she was pretty. That she had a future. She always needed such acknowledgements. She said, “Yes” as usual.

16

A4t 1

After years and years in several firms in exactly the same position, she has accepted a managerial position in a big firm. To her spent time meant being managerial material. The day she said just another “Yes”, she knew that she would never leave this firm. A manager’s life, what she perceived as the good life, was heaven on earth for her.

To make sure there were no glitches, she slowly became the long arm of the upper management. She did their dirty work. Years and years passed. Everything was running so smoothly until one day Moody arrived. It ruined everything!

– Jane Pixie. – 41. – Human Resources Manager. – Sociologist with a minor in Business Administration. – Married to a turf accountant with three children, two cats and one dog. – Has a condo. – Has a sports Mercedes-Benz her husband has bought for her. – Has a set of expensive jewelry. She thinks one should only wear diamond earrings with black dresses.

Upper Manager Joe

Joe is who we are really after. He made his way to the top through compromise, conformism and office politics. He takes his strength from his team which he exploits every opportunity he gets. However, he also provides their daily bread with high profits. So, those who consider a career as a means to an end, flock behind him. He is the most popular manager in the firm… the most hated and the most loved… the most feared. It’s true love!

He is a natural born leader. He seems to be graduated from some university, but no one really knows. He has houses, cars, mistresses… Anything you can think of, he already has it. On top of that, he has a devoted wife and four children. He takes care of his parents. He smiles all the time as if he doesn’t have a central nervous system. The wife dreams of tall dark strangers taking her. She has a set of collectible dildos. Daughter has daddy issues. It’s the happiest family in the world!

17

A4t 1 The Main Story

You are in a boring workplace. It’s a cubicle hell. You are wide open to any kind of stimuli. While hidden processes take charge everywhere, everybody is required to act as if another, more presentable, more mature, official process reigns supreme. Yet, when everything looks that clean, it is always a sign that everything is kind of dirty.

That’s why management and its long arm, human resources department, do everything in their power to suppress negative thoughts and alternative ideas. And that’s exactly where Moody comes into the picture. It helps you create a glitch.

1) Moody prompts for your current mood every morning.

You can vote any time before your shift ends. You don’t have to vote, on the other hand.

2) You make a selection without much thought.

You either say that “you are mad as Hell” or “you are fine and dandy” (as in binary).

3) Moody reminds you that there must be a reason.

4) You specify the reason for your current mood. Reasons come from a customizable list of criteria. They are what may cause happiness or unhappiness in an ecosystem.

5) You are directed to the waiting room where you can see the votes as they come in. You can see the votes in terms of your community’s mood, the best and the worst aspects of your corporate culture.

6) Other employees do the same.

7) At the end of the shift, votes are consolidated.

8) The general mood of the company is published.

9) The number one issue of the company is published (best performing criterium).

10) The greatest achievement of the company is published (worst performing criterium).

11) Votes can be viewed by departmental mood swings and corporate mood trends with additional functionality (2.0).

[Tips] A “use case” is a visible, achievable, meaningful goal of a particular actor.

[Tips] A “use case” encapsulates different kinds of flows, conditions and extension points.

[Tips] A “use case” makes the detailed information about all the data, business rules and algorithms actionable by programmers.

18

A4t 1 Walking the Path

While delving deep into the unknown is always fun, knowing how your path will unfold will give you a better chance of survival. Every “apps for troublemakers” story begins the same way. Its steps don’t change either. So, here’s the plot.

Start with an absurdity you find interesting. Taking an interest, focusing on it, caring for it… sucks you in. This is your call to adventure. On the other hand, one can always pick a better absurdity, one with an ecosystem suitable for experiments, begging to be exploited. Once this is over, all you have to do is to make that absurdity intelligible by finding the presuppositions behind it.

This is a very tricky step, because if you share those presuppositions, you would never formulate a question that could uncover them. However, since you see it as an absurdity, you are halfway there. If you shared those presuppositions, it wouldn’t seem absurd to you. You would see nothing out of the ordinary.

After you have uncovered the presuppositions that made the absurdity intelligible, you must make your presuppositions… the ones which made the issue an absurdity in the first place, visible too. Because they were the blocks against your understanding. When both sets of presuppositions are in place, you might want to check whether they reside within a BPI framework.

While this is not necessarily the case, it often is. This means the absurdity has to do with interactions with beings which are reduced into entities, beings controlled by the properties they inhabit. Imagine, “a white guy being polite” and “a black guy making too much noise on the bus” as their uncontrollable properties. Anyway, where were we?

Yes, when both sets of presuppositions are in place, you will move above them, because you now understand both. This is called “merging of horizons”. You have become someone who understands both worlds.

19

A4t 1

To be able to conduct social experiments, you must have subjects… willing to be exploited knowingly or otherwise. They must be consumed in their own affairs, trapped between their Point A(s) and Point B(s), unable to escape their ill fates. Think about moths flying towards fire only to be burned. Since experimenting, analyzing the results and taking care of experimenters require a workplace of sorts, this is the step you should go out and create a new School’s Out HUB.

Using the resources of your subjects for your own benefit… What sounds more Turkish than that? Ottoman sultans often recruited good specimens of their subjects regardless of their being Turkish / Muslim or not. They trained them to be great warriors who more often did not fight with their own people… but against them. We will use the same strategy here.

We will recruit people who are half awakened so to speak. Subjects who are aware of their circumstances, willing to become agents of change even if they are not hero material. We call them troublemakers. Usually, they are good employees and management needs them. That’s why they are tolerated. Their longevity is our tool.

Since they remain in the same ecosystems for long periods of time, we will spread the disease by using them while making sure they are separated from the hopeless ones, the subjects. Subjects will be using our apps and troublemakers will embark on a new journey to become experimenters who will one day develop those kinds of apps.

One from the inside and the other from the outside, our target ecosystem will take a beating.

The fun starts with the first app which must hit where it hurts the most. Unless app one formula reveals the ugly truth, you cannot take another step. When that’s in place, however, you can go anywhere. Sometimes, you may find yourself in the dark. The best course of action is to imagine your subjects with an axis going through them… kind of like you prepare your shish kebabs.

This axis represents their unescapable faith. Don’t worry. Real (!) people have freewill… meaning they can act in ways that make the things they desire less likely to be achieved. Subjects, on the other hand, cannot do that. They are forever intertwined with what they desire.

This is why you can come up with the formula within minutes, once you position them in between Point A(s) and Point B(s). What makes such points visible to you? Because you don’t seek anything in their notion of reality. If you do, you are a subject not an experimenter. Sad but true.

20

A4t 1

App one formula will help you move forward with the remaining apps too. Because it (app one) will need clues (app two) and public support (app three). In the end, the whole thing will need to be summarized (consolidator formula). Understand that your consolidator formula and the new paradigm you come up with are pretty much one and the same (i.e. “consolidate feeling-reason-issue-clue-idea-solution”, “Emotional Agility”).

Finally, you must have control over time and place. People? That too! If you build it, they will come. Your instrument for time control is moving your interlinked apps and with their consolidator over time… as a marker. Think about it as who you are at a specific time. You know, “this was who you were”, “this is who you are”, “this is who you will become”.

Your instrument “place” is a series of activities starting with a “local launch party”. It will continue as “gift mania” spreading from country to country. You will be sharing the artifacts of that School’s Out cycle, so to speak. You will be giving free training materials, apps and books. Who wouldn’t like free stuff? It’s the best way to spread the disease.

Use Cases

First, you must understand that a “Use Case” is not a case of usage. Rather, it is an observable, meaningful goal which encapsulates all scenarios that have to do with it at an appropriate detail, so that programmers can go over it and start coding. While it is possible to flesh out a more complete use case view with all the external systems and such, we will keep things simple here.

We will focus only on the basic flows meaning we will ignore alternate scenarios. This way it will be easier to develop our app. Later you can make Moody grow if you want to. Don’t forget to share, though.

21

A4t 1

While Moody won’t be complete until the second version of this book comes out, this first attempt will teach you everything you need to know about developing mobile apps from scratch. So, relax. Why do we need a second version of this book? Well, first, I didn’t want to waste any more time and wanted to get the book out there. Second, this is my charity project, man. I’ve got stuff to do.

Third, you (yes, you) can add the missing parts and get it out there! You are the hero after all. I’m just the herald!

Employee Use Cases with brief descriptions:

“Version 1.0”

– Broadcast Feeling: Employee broadcasts a positive or a negative feeling daily with the reason behind it.

– View Results: Employee views poll results in terms of feeling, mood and culture as they come in.

“Version 2.0”

– Sign Up: Employee signs up using LinkedIn Authentication by-passing her company’s hierarchy.

Manager’s Use Cases with brief descriptions (optional):

“Version 2.0”

– Manage Members: Manager communicates with certain anonymous employees. (i.e. “Those unhappy because of benefits” or “Those happy because of work-life balance”)

– Monitor Employee Happiness: Manager tracks issues, focuses on a selected few and analyses trends with the option to share what she has uncovered with the upper management.

22

A4t 1

Administrator’s Use Case with brief descriptions (optional):

“Version 2.0”

– Setup Ecosystem: Administrator updates communities and criteria.

Now, let’s have a look at the use cases we are going to implement in detail, shall we?

[Tips] A “use case” always has a short, active name which exposes the actor’s goal without causing any false messages.

[Tips] A “basic flow” is the one where an actor always achieves the goal summarized by the name of a use case without any issues.

Broadcast Feeling

Preconditions

– Employee must have a membership meaning we can retrieve employee information when we need to. (Company, Community*, First Name, Last Name) *community is one of twelve customizable items in a customizable list.

Since we won’t have authentication in this first version of “Moody”, we will fake that information.

– Employee has logged into the system (2.0).

– Employee’s voting privileges have been restored (2.0).

Postconditions

– A verdict must be entered into to the database with date-time value. (Company, Community, First Name, Last Name, feeling, criterium*, date-time) *criterium is one of twelve customizable items in a customizable list.

– Employee’s voting privileges have been revoked (2.0).

Flows limited to “Basic Flow”

1) Employee opens “Moody” = System prompts for daily feeling.

a. “I’m mad as Hell!” with unhappy emoji vs “I’m fine and dandy!” with happy emoji.

b. Reason = {criterium 1 .. criterium 12}

2) Employee taps a feeling and selects an item from criteria list. Then, she casts her vote.

3) System checks whether both feeling and reason are selected (2.0).

23

A4t 1

4) System saves verdict.

a. (Company, Community*, First Name, Last Name) (Feeling, Criterium*) (Date-Time)

5) System directs employee to the Analyses Page by passing the vote info (and making it the default page 2.0).

Short, huh? Well, we love to keep it simple and stupid. How strange, important things in life are always like that… simple and stupid. Perhaps, that’s why we want to complicate life and hide broken lives behind “words, words, words”.

Let’s have a look at the other one, then.

View Results

Preconditions

– Employee has cast a vote.

Postconditions

– (at the beginning of the next shift) Employee’s voting privileges have been restored (2.0).

– (at the beginning of the next shift) Default page is restored (Voting Page) (2.0).

Flows limited to “Basic Flow”

1) Employee lands on waiting room* (Analyses Page). *waiting room is the place to view votes as they come in or the final results at the end of the shift.

2) System displays four metrics that summarize the state of mind of the company.

a. Verdict: is the feeling and criterium employee has picked. (Serena is unhappy because of benefits)

b. Mood: is the cumulative feelings of other employees in the employee’s community with regard to the criterium employee has picked. (Serena’s community, Marketing Department, is happy because of benefits)

c. Culture (worst): “Number one issue” is the criterium with the highest number of negative votes in the company. (ACME’s biggest problem is her management style)

d. Culture (best): “Greatest achievement” is the criterium with the lowest number of negative votes in the company. (ACME’s best aspect is her compensation)

That’s it!

Remember, I told you this will be a tiny little app. However, it’s not the size. It’s how you use it. Powerful they may seem to be, nasty hierarchies are always fragile. All you have to do is to open a crack and let the sunshine in. That’s how you slay dragons. You make small incisions. And you don’t stop until the sucker is down on his knees.

That’s the philosophy of the apps for troublemakers. Don’t try to face them head on. Instead, look directly in their eyes and make small moves.

24

A4t 1 Data

We will have three kinds of entities, “obvious ones”, “not so obvious ones” and “shadow objects”. The first ones have to do with the problem at hand. The second ones are for the future version of “Moody” and the third ones are for collecting information about the unsuspecting users of our micro app. NEEHEEHEEHEEHAHAHA!

– Organization (company name) = “ACME”. – Vote {yay, nay} = “I’m fine and dandy”, “I’m mad as Hell”. – [customizable] Criteria {criterium 1 .. criterium 12} = Typical causes of happiness / unhappiness in the office. – [customizable] Category {community 1 .. community 12} = Typical business departments in big companies. – (2.0) Voting Enabled {true, false} = Has to do with whether an employee cast a vote or not. – (2.0) Visibility {on, off} = Has to do with the default page reflecting whether a vote has been cast or not. – (2.0) Timer (24 Hours) = Has to do with voting interval. – (2.0) Mood Swings (history) = Moods of a community over time. – (2.0) Trend (organization, history) = Culture of a company over time. – (2.0) Chronic Pain = Has to do with repeating number one criteriums. – (2.0) Ranking = Has to do with the happiness generation capacity of a company. – (2.0) Wound Type {deep, shallow, not a wound} = Has to do with employee’s tight coupling with certain criteria. – (2.0) Personality Type {ranting lunatic, inmate, guy/gal next door} = Has to do with employee’s voting behavior.

There is another kind of data… those we use to link Moody to interrelated apps. Remember, every app for troublemakers comes in threes. So, each app in the trinity has extra classes that serve as linking mediums. Good, you remember. There is a fourth app, a one-pager (web) app to be exact. It isn’t important within the context of this book, however. Because it only accesses our database.

It has nothing to do with how our apps interact with each other’s data. Did I forget to tell you? Apps do not interact with each other’s data. We save the data in a way that it can be retrieved as a whole.

A superficial view of the key abstractions (1 of 2)

– Linking with Verdict = “Verdict is about clues and issues. So, we link those with feelings and reasons.” – Linking with Notung = “Notung is about ideas and solutions. So, we link those with feelings and reasons.”

– Linking old information = “Every information about the employee is at the disposal of the other apps”.

25

A4t 1

A superficial view of the key abstractions (2 of 2)

[Tips] A “city” is an ecosystem which may or may not be a city.

[Tips] An “authority” is someone who has power to do something.

[Tips] It’s possible to have an abstract class at the top which has cities, like “World”.

Of course, you can make changes or add new items to our list. If you do so, remember, there must be an overall theme. For example, in mine employee’s feelings are reflected in her community’s mood and firm’s culture.

In a way, these three findings represent the schizophrenic existence of a person who is trying to live in an unhospitable environment (Remember, Star Trek?) and never having the guts to simply leave the premises or act like a hero for once. Yet, absorbed in their tiny little worlds, they do not see those options. “No one can see beyond the choices he makes” (The Matrix).

I have so many friends (!) in this condition. They all act like they are just about to find a cure for cancer as if they weren’t the ones who have failed again and again and again for years and years and years. They act smart, but it is just a mask for cowardice. The only way to help them or to preserve our sanity is to program them! That’s why you are here, people!

And to preserve your sanity, you must seek nothing. Remember that!

26

A4t 1 Pages

Our goal is to have two things, “an A4t with minimal complexity” and “a template for all upcoming A4t(s)”. Since Moody is the first one in the series, it will both serve as a “architectural template” and an example for our “programming style”.

“Version 1.0” – Voting Page is used to receive the daily vote. – Analyses (results) Page is used to display the consolidated votes at the end of that day’s shift. – Analyses Page also acts as a waiting room which will be used to keep the motivation of the voter high.

That’s why employees can see the poll results as they come in.

That’s why the results are presented in a way that provides contrasts.

We want to disrupt what’s going on in the office, not just deliver the news in a boring manner.

We want to create chaos and have fun!

“Version 2.0” (optional) – A one-time Help Page will be used to provide a summary of the app’s main functions. – Trend Page is a chart that displays corporate culture (lows, highs, chronic problems) with respect to time. – Mood Swings Page is a chart that displays the feelings of employees with respect to time. – Customization Page is used to update the criteria and the communities. (not optional) – Sign Up Page is a cover for LinkedIn Authentication. “Current company” in LinkedIn profiles will be regarded as “Company”.

A one-time selection will be enforced before using the app, to specify one’s community. – Sign In Page is a cover for LinkedIn Authentication.

Functions

As you can see, the secret word is “minimal” around here. So, we will always try to accomplish more with less. A few carefully designed steps have greater implications than one may think of. That’s what we are after. We will keep app’s functionality easy to understand and even easier to modify. Remember the Pareto Principle.

Whatever you do, twenty percent of it is always the most important bit. The rest is just a barrier between you and the love of your life. So, when you are done, don’t just pick the next task on a list. Turn off your computer, stand up and walk away. Have a life.

So, you have come back for more, huh? I can’t blame you. One cannot get enough of a good thing. Causing chaos and having fun… what can be better than that?

Micro apps can be better understood through their functions. As you get more comfortable playing with them, you will see that you can arrange them in so many different ways. Also, modifying them will grant you additional powers. When I say “modifying”, I don’t mean spending hours. I mean spending minutes. Because like customizations, modifying A4t(s) is a breeze. By the way, “r” means “read”, “w” means “write” and “c” means “compute”.

And understanding Moody begins with understanding our controller, “VotingController.cs”.

We will go over those functions in detail when we get to develop Moody. Right now, all you have to understand is what’s going to be in our toolbox, which also marks the limitations of our A4t. Every app (like every project) must have a clear border that shows what we are going to do and what we are not going to do. Gaining control over borders is your way to success. If you lose control over them, the other abilities in your skillset very rarely make a difference. You will lose.

27

A4t 1

“Losing because of oversimplification” = “Losing because of complexity” = “Losing”.

28

A4t 1

– (w) We have a “verdict creation” function that gets a feeling with a reason and turns it into a verdict. – (r) We have two “verdict retrieval” functions that compile every negative or positive verdict for a criterium in a company (i.e. ACME). – (r) We have two “verdict retrieval” functions that compile every negative or positive verdict for a criterium in a community (i.e.

Technology Department of ACME). – (c) We have a function that computes the mood of an employee’s community. It gets all the negative and positive verdicts for a criterium and finds the one with the highest value. – (c) We have a function that preps verdicts for further computations.

It gets all the negative and positive verdicts for all criteria and creates a list of cultures where a culture is a record of a criterium and its associated number of negative and positive verdicts. – (c) We have a function that computes the criterium with the highest number of negative verdicts. – (c) We have a function that computes the criterium with the highest number of positive verdicts.

There! That’s it. All the rest is for user interface manipulations or minor tasks which could have been done differently. There is a catch, though. To really understand what is going on, you must understand the functions these functions are depended upon… meaning, you must understand our service, “MilgramService.cs”. Of course, you must also understand the API running in the background, but as I said before, that can wait for now.

It is starting to make sense, right? Whatever we did in our controller has a counterpart here… and whatever we do here has a counterpart… yes, you’ve guessed it, in the API. A multilayered mobile app is nothing but a whisper game. The only difference is this time whatever being whispered into the ear of the first person is exactly the same as whatever the last person hears.

Controller Service API Service

Maybe some of you have already figured this out. Yes, our API has a service too! And it is very similar to… the one that came before! So, why, oh, why are we doing all this? The main reason is to avoid conflicts of interest. Because in more complex apps, each of those layers are drenched in architectural mechanisms… and when you mix apples with oranges, it never ends well.

Additionally, there are expert roles in bigger teams where one person only works on a single layer. So, this way updates are handled without causing unintended problems. There is one more reason which is a deal breaker. When you develop according to separation of concerns, you can change development platforms easily.

Even if you don’t change development platforms, it makes it so much easier to change components when you must. One more

29

A4t 1

thing, you can create mockup apps, apps without server counterparts in record time. You can use these apps to promote your idea. When it is time to go ahead and finish the app, you can use that mockup app as a starter app. Neat, right?

Didn’t I tell you? I love giving people bad news. These days you may see job posts seeking Full Stack Programmers. What this really means is all the more interesting components of your upcoming app were already programmed by a vendor handing you a free (!) development platform.

This reduces a programmer into a diminished human being who is never curious about what the heck is going on in those frameworks and considers a software career as the ability to memorize SDK updates. “Oh, Hamlet, what a falling off was there!”

30

A4t 1

The Gathering Storm Now that I’ve got your attention, let’s focus on the first use case “Broadcast Feeling” in greater detail by fleshing out all the requirements. Why stop there? We will go over the “user interface design” and “business ecosystem implications” as well. Here our success criterium is to have a chapter that can be used by programmers without further analysis.

Since we are using a two-page design, one page (Voting Page) aims to provoke a feeling and cause an action that makes it visible to the public anonymously on the other one.

The other page (Analyses Page) both acts as a waiting room and an analysis room. Employees, including human resource managers and those in C-Levels, all can see the votes as they come in. Also, they can see votes in terms of feelings, moods and cultures.

These findings (over time) give everybody the opportunity to reflect upon them and wake up ignorant masses including but not limited to incompetent or selfish managers.

In this first version of Moody, we don’t differentiate between employees and managers. They are represented by the same actor (Employee). Keeping that in mind, let’s look at the components of each page in detail. The first page (VotingPage.xaml) has 6 sections.

– App logo = I prefer to have the text version at this time. We can upgrade it (!) to an image later. [font = Breetty] [color = FF6A00] – Welcome text = A stationary text that sets the mood = “So, what’s up?” – Unhappy Smiley, Unhappy Text = A PNG image which can be upgraded (!) to a SVG one later.

I’m quite happy with the accompanying text, though. “I’m mad as Hell!” My inspiration was the Sidney Lumet’s film Network (1976) = YouTube clip. – Happy Smiley, Happy Text = A PNG image which can be upgraded (!) to a SVG one later.

Again, I’m happy with the accompanying text. “I’m fine and dandy!” My inspiration was a George Carlin parody where he discussed whether one can be both at the same time. – Criterium = One of 12 customizable reasons of happiness or unhappiness. – Voting button = Once you have tapped a feeling and selected a reason, you are good to go!

31

A4t 1

I don’t know whether you are cut for this, but all we computer scientists do is do the same things over and over as we get deeper and deeper into salvation (or damnation). This is what makes us like the whirling dervishes. We too believe we have found something worthwhile, and we too want to show off. Funny, isn’t it?

One of the most famous religious sects in the world is famous not because its disciples are humble or wise, which may or may not be the case, but because they just love to show off.

The second page (AnalysesPage.cs) has 6 sections too! Yes, I have a thing for repetition.

– App logo = I prefer to have the text version at this time. We can upgrade it (!) to an image later. [font = Breetty] [color = FF6A00] – Selected Criterium = This is the criterium voter has chosen as the reason behind her feeling. – Current Feeling of the employee. Unhappy or Happy Smiley, Unhappy or Happy Text = Depends upon the selected feeling and criterium duo. i.e. “You said Nay!” – Current Mood of the employee’s community.

Unhappy or Happy Smiley, Unhappy or Happy Text = Depends upon the community’s cumulative feeling. i.e. “They said Yay!” – Number one issue = A negative hand gesture usually associated with Roman emperors pointing out that a fallen gladiator must be slayed.

Underneath, there is a descriptive text = “Company worst” which is followed by the name of the relevant criterium. – Greatest achievement = A positive hand gesture usually associated with Roman emperors pointing that a fallen gladiator must be let go. Underneath, there is a descriptive text = “Company best” which is followed by the name of the relevant criterium.

Stop for a minute and think about that office. It may be any kind of office, but one thing is for sure, it’s a big one. Otherwise, people wouldn’t bother using an app like Moody. It must be big. There must be several different kinds of tribes there, all in competition with each other.

There must be a dysfunctional management team, and a human resources department willingly acting as the long arm of the law or something like that. Better yet, there must be a few similar companies in the same city. Those working in ours should have friends there. And they would all try to get to another company, their dream company regardless of whether such a thing exists or not.

That’s the best scenario for the business edition of Moody. This way we can create chaos that involves all kinds of people, not just for those in a miserable company. When it comes to chaos, the bigger the better. It’s like wildfires. Who would in his right mind stop and watch a small bush burning. On the other hand, who wouldn’t watch a city burning?

Understanding functions requires you to understand data, how it is created, why it flows from one place to another, how it is processed, how it is transmitted and how it is consumed. In our tiny little app, most data end up on a page. Others are kept in the archives waiting for a more feature packed version of Moody. Yet, others are there just to

32

A4t 1

feed other apps. You may want to add the feelings, thoughts and actions of those who are not using our app to the mix. This way you get a better view of the big scheme of things.

– Person = An employee feeling miserable regardless of her title or rank. – Vote = Verdicts which are consolidated into permanent records with date-time info at the end of shifts. An attribute acts like a flag whether an employee cast a vote or not.

Only a single vote per day is permitted. – Community = We divide every ecosystem into 12 subgroups, each of which may be a business department. – Criteria = We define the relationship between public and those in power by 12 happiness / unhappiness generators. You can see them as items in a business contract.

To me “apps, ecosystems and actors living there” are all one thing. So, I often take a look from above and relate things at that level. If things make sense at the cosmic (!) level, spending time on the details isn’t a waste of time. If you look at the pictures below, you can see “key abstractions” and “the shades of feelings” in the Moody universe so to speak.

33

A4t 1

As you can see from the first one, those who lose their way support each other for becoming more and more delusional. And the few who gained some kind of autonomy and power willingly forget who they were, what they have been through and how they are getting their daily bread now. Being greedy, having no problem faking it and the willingness to cherry pick memories create a diminished human being… who is content to pursue a powerless life for more toys.

34

A4t 1

35

A4t 1

“Generic Moody Framework”

“Two-page dynamics of Moody”

36

A4t 1 Plan

In computer sciences you can change the order of events. Reactions may come before actions. That is not to say apps should act weirdly. What I’m trying to say is you can pick a weird order to do things. For example, I always start from the trickiest part. I don’t waste my time working on basic building blocks even if I don’t have any reusable components.

When it comes to reusable components, I’m an ID Software kind of guy. I throw away reusable (read, “trivial”) components into the trash bin at the end of every project. On the other hand, when you are done, the result shouldn’t be weird. To be a computer scientist is like being a mathematician or even better, like being a philosopher.

Both prefer endless canvases, but small, elegant solutions are what really captivate them. You can leave an unfinished symphony behind. You can let those with lesser skills do the dirty work for you. Thanks to Mussorgsky, that’s my philosophy!

North by Nortwest, Alfred Hitchcock, 1959.

While artistry is required to bring all kinds of different skills together to create a good product, this isn’t art. It must accomplish something. Awakenings are not enough on their own. The equivalent of Steve Roach’s captivating music in computer sciences is plain boring. Also, a software product must be easy to use. It must help those who are using it to get to wherever they are trying to go. “Software is the thing that gets you to the thing” (Halt and Catch Fire).

However, this time I will play nice. We will start with the user interfaces, because our app is tiny. We don’t have to take precautions to prevent possible future complications. We can just start from the easiest task and proceed as we see fit.

“Develop app”. – Step 1 = Prep your development environment – Step 2 = Create the presentation layer = “XAML pages”. – Step 3 = Create the business layer = “controller and model classes”.

37

A4t 1

– Step 4 = Create the service layer = “intermediary classes”. “Proceed with the API”.

Step 1 The first thing we will do is to create a “.NET MAUI app”. To be able to do that you have to download a few apps.

➢ (our main IDE) Visual Studio Community Edition = Link

➢ (our secondary IDE) Visual Studio Code = Link

➢ (database) MongoDB Community Edition = Link

➢ (note taking app) Notepad++ = Link

➢ (yet another note taking app) Sublime Text = Link

➢ (mind map app) XMind = Link

I like to have alternative ways to do the same thing, so that I can see what I’m doing in different ways. That’s why I use two IDE(s) and two note taking apps. Am I weird or what? Trust me, soon you will see that it helps. It also prevents you from becoming a fan, which is worse than being blind.

You may also download the following apps. If you end up liking them, you must purchase them, though. I won’t require you to use them. These are the tools of the pros, folks!

➢ (a somewhat better (?) mind map app) Mind Manager = Link Android and iOS versions are free.

Free alternative = XMind = Link ➢ (a UML app) Sparx Systems Enterprise Architect = Link Free alternative = Visual Paradigm Online = Link

Voting Day

Steps 2 – 4

While being intriguing, all we have done until this moment is… just talking. Let’s put what we have come up with to good use. Let’s develop a five-layer cross-platform mobile app from scratch. Don’t worry. It’s easier than you think!

Flashback We won’t invent new approaches here. We will use a popular approach that will serve us well. Starting from what one sees when she opens Moody on her phone, there will be four layers: “View”, “Controller”, “Model” and “Service”. Views are pages. Controllers are intermediary classes that act like traffic police.

They accomplish nothing on their own, but they know where all the roads go. Models are entity classes that hold information for a variety of reasons. Service is a single class that communicates with our API (5th layer) which is in charge of accessing our database. Controller or Service Layers may be more complicated, of course. However, one class for each is more than enough in our tiny little app.

This may surprise you, but this approach is more than enough for many small apps. So, you are in good hands here.

38

A4t 1

“Moody (presentation, business, temporary data, communication)” “Milgram [data access]” “Berry [stored data]”

App (a .NET MAUI app) 1) Presentation Layer (View) ➢ XAML pages with visual controls such as labels, buttons, grids, frames, and pickers. ➢ Code behind files of pages with almost no code except user interface component manipulations.

If we preferred a “fat client approach”, everything in controllers or services would be here. 2) Business Logic (Controller) ➢ Classes that receive, retrieve or save information to perform computations on them or to transfer them to appropriate objects and components. 3) Data Layer (Model*) ➢ Classes that hold data temporarily which also summarize the whole system when considered as a whole. 4) Communication Layer (Service) ➢ Classes which receive and transmit data between disjointed systems (i.e. app on your phone, app on a server).

“API” (a .NET Core API) 5) Data Access Layer (API) which has “Communication” (Service) and “Data” (Model) layers of its own.

The default ‘main’ class, “Program”, acts like a “Controller”. “Database” (a NoSQL database) 6) Data Layer (Database) which has “collections” of “documents” that represent the “objects” of the “app”.

*A “model” is a more closely coupled information than a “class”. At least, this is how I see it. It makes run time collaborations simpler, sacrificing some of the generic qualities of associated classes. Some programmers never use classes with models. I do. Don’t get it wrong. Models are classes too… just, they are not your mother’s / father’s classes.

[Tips] You don’t have to follow someone else’s notion of good architecture. Good architecture must be good for you first and foremost.

The First Round If you are anything like me, you’d look for a visual editor first. However, not only are visual editors clumsy, but also when it comes to cross platform apps, they aren’t that dependable. What’s more, even if it sounds highly unlikely, designing pages in a code editor is really… easy. That is, unless you are not an ergonomics or a beautification freak.

On the other hand, if you were one you wouldn’t be reading this book. You would be knee deep in user interface trivialities that would bore me to death. While I’m too sexy for my own good, don’t worry, ordinary looking guys/gals can still attract the pretty ones. You do have fully functional brains after all, don’t you? So, don’t knock yourself out with user interface design.

It’s for mere mortals. Ability to do something well always wins over being cute.

Let’s create the first page of our app (Voting Page) and pass “feeling” and “criterium” to the next page (Analyses Page). Remember, we have only two pages in this tiny app. Regardless, there are four topics we must cover. Let me first introduce them and then we will tackle them one by one.

39

A4t 1

Voting Page Analyses Page (Page One) (Page Two) App Name = “Moody” App Name = “Moody” “What’s up?” [Selected Criterium] Happy Emoji Unhappy Emoji You said [feeling]! They said [mood]! “I’m fine and dandy!” “I’m mad as Hell!” Number one issue is [criterium].

Button = “Vote now!” Greatest achievement is [criterium].

Shortcuts (“optional”, 2.0) Shortcuts (“optional”, 2.0)

“Broadcast how you feel every single day until you drive all managers crazy” ➢ Voting Page is where you are prompted to provide how you feel and why. ➢ Voting Page Code Behind is closely tied to the page and does not move an inch further. ➢ Verdict class is equivalent to vote class. The only difference is here we ignore the date-time property. At the end of every shift, verdicts are converted to votes for archiving purposes and further analysis.

“View feelings, moods and cultures in contrast to each other as verdicts come in” ➢ Results Page is where you view your vote (feeling), your community’s vote (mood), number one issue (culture) and greatest achievement (culture) of your firm. ➢ Results Page Code Behind is closely tied to the page and does not move an inch further. ➢ Mood class is the cumulative feeling of the employee’s community such as Marketing Department. (i.e. “voter” versus “voters of a community”.) ➢ Culture class is the cumulative feeling of the entire company. ➢ (2.0) You can use the archive to uncover personalities, mood swings and cultural trends. ➢ (2.0) You can monitor your company’s ranking as an (un)happiness provider in your [selected area].

“Handle business logic in a separate layer” ➢ Voting Controller class has the business logic of both use cases. Since scenarios of these use cases are closely linked, we only need one controller to manage both processes. In more complex scenarios, we may need a controller for each use case regardless of the number of associated pages.

Also, the simple computations done here can be migrated to API when server-side computations make more sense. It is trivial here because of the size of our app and data. Your phone may be a lot faster than your server… if you are cheap (like me). Keep that in mind. ➢ (2.0) Later we may add another controller class which can be used by the other apps in the trinity.

This way, we can consolidate findings gathered in all those three apps (Moody, Verdict, Notung). Think about this as “Emotional Agility Controller” which has clones in all three apps, together making sure data generated in those apps remain consolidated and coherent… ready to be consumed by consolidators.

“Access API in a separate layer” ➢ Milgram Service Class is how we access our API (which accesses the database for us). Think about it this way, our service class asks for data and gets data. However, the real component that does those things is our API. Yet, another manifestation of separation of concerns.

Apps, data access mechanisms and data exist on their own which allows us to manage them individually. Remember, the other two apps in the trinity (Verdict, Notung) will be able to use the same API and database easily without doing anything extra. That’s the main goal here. Do it once and use it multiple times. Keep it simple and stupid (C. Hu*).

*“Who are you going to see when you have a problem, Mr. Bozkurt? C hu? See me.” (My college advisor)

The first thing we should do is to change [the default page] of our mobile app. This urge makes one realize that there are page files and code files closely associated with them. Every page comes with a code behind file which can be used

40

A4t 1

to manage what takes place on the page. While you can do almost anything in a code behind file, we will restrict code behind files to handle data entry, ensure data accuracy and enforce user interface rules. Because if you do more in a code behind file, it will become increasingly difficult to maintain your app in the future. We call this concept, “separation of concerns”.

Think about a friend you like to consult. If you had to ask everything to her, it would be tedious for you both, right? You should ask her about a few things and handle the rest on your own or with other friends. What we are doing here is very similar to that. Yes, I know. Balancing coupling or cohesion is a bitch. Well, follow my example, then.

When you create a .NET MAUI project, the default page is set to “Solution Project MainPage.xaml”.

• MoodyApp Moody MainPage.xaml => Automatically created default first page. • Moody App Moody App.xaml App.xaml.cs => App settings. ➢ “MainPage = new AppShell();” is the command that sets the first page.

We will change this command as follows:

➢ MainPage = new NavigationPage(new VotingPage());

Of course, for this to work, we must have a “VotingPage.xaml”. So, create a new folder called “Views” under “Moody”. This is where we will add all our pages. You can translate “views” as the Presentation Layer of your mobile app. Pages and their closely linked code behind files will be there.

And as the “separation of concerns” principal dictates, when you modify these pages, your Business (Controllers), Data Access (Services) and Data (Models) Layers should remain intact. This is exactly what we will be doing here. Even if our app is tiny, we don’t want to work more than we have to.

Right click the “Views” folder and add new item. Select “.NET MAUI” and then, “.NET NAUI ContentPage (XAML)”.

Finally, name it “VotingPage.xaml”. There, you created your first page!

1 2 3

4

Create a new page.

At this point, you may be wondering why I’m not sharing code as text, you know, so that you copy and paste like crazy. Oh, well, that was my answer in the form of a question, pal. You have to write it. Unless you write the whole thing and understand the basic mechanisms behind it, this is a futile attempt to change the world. Don’t worry, you don’t have to understand the whole thing. I don’t. Nobody does. Yet, being a driver who doesn’t know anything about cars is just

41

A4t 1

lame. Now that we got this out of the way, where were we? Oh, yes, we were designing the main page of Moody. Think about a page that provokes its actors (we don’t use the word user here) and triggers them to vote each and every day. It’s like children in the backseat, nagging nonstop during your 10-hour driving vacation, “Are we there yet?”. It’s the best punishment for upper management, don’t you think? NEEHEEHEEHEEHAHAHA!

What? “Why can’t we just write new VotingPage();”, you say, huh? Well, we must make our pages traversable. We should encapsulate them as “Navigation Pages”. That’s why. This is programming. Not everything is auto pilot material, pal.

2

1

Change default first page.

Go to your newly created “Voting Page” and locate section. In a XAML page everything begins and ends with a tag. The first one tells that a new section is beginning (), and the second one tells that it is ending (). You will put all the goodies between these Content Page tags.

Add a scroll view which basically lets every bit of content to scroll up or down as you swipe up or down on your smartphone screen. Between tags, add a grid which lets us easily organize different user

42

A4t 1

interface components horizontally, vertically or both. That’s why it’s my all-time favorite. I must be a grid fool, because I organize everything in grids. Come, join me! Add . To make it prettier add the attributes with the suggested values as shown in the picture above. The first two attributes are about responsiveness. The remaining three are about placement. No, I won’t tell you more about them. If you must know, check the XAML dictionary (Link).

Add a section just above . This will serve as our first “Feeling Trigger”. We will provoke the actor by placing a positive emotion on the left. The way to trigger actors depends on your ecosystem. Some are triggered when they come across an opposite point of view or feeling. Others do so when they meet things that resonate with how they think or feel. If you want to find out the inclinations of your subjects, chat with them and figure them out.

has two elements, a picture and a text. Since I’m a practical kind of guy, I went with smileys here. You can go your own way with this. However, apply some caution to what you will do here. Because even if it’s just a combination of a simple picture and a short text, we humans are irrational beings. We can be talked into doing anything. You don’t want to overstimulate your subjects, for what they will do afterwards may no longer reflect who they are.

➢ Image: “vunhappy.png” (as in “verdict unhappy…”) ➢ Text: “I’m mad as Hell!”

We will use this structure more than once. A frame in a grid holding a vertical stack layout… This way you can position user interface elements in appropriate cells of your grid to achieve a certain look. To enable interaction, we will be using “tap gesture” which is the default way to interact with smart devices. When such an interaction occurs, we will pass the data this interaction creates to what’s coming next.



43

A4t 1

You can use this layout to stack UI components on top of each other. When I need to place user interface components side by side, I still use this layout. Because their being side by side is handled by the grid too.

➢ and
Share:
Related
Thumbnail for 2021 Baglar Sahil Nevmekan Menu
Read More
Thumbnail for West Bend Breadmaker 41080 Recipes
Read More
Thumbnail for ASSD & PSFRD Examination Model Questions With Answers 2022
Read More
Thumbnail for Engaging Riddles For Puzzle Lovers
Read More
Thumbnail for Contemporary Collecting Objects Practices And The Fate Of Things 1st Edition Kevin M
Read More
Thumbnail for Modelo De Letra De Cambio
Read More
Read More
Thumbnail for Posing Tips For Non Model Men
Read More
Read More
Pier 88 Menu
Read More

Report This Content

Copyright infringement

If you are the copyright owner of this document or someone authorized to act on a copyright owner’s behalf, please use the DMCA form to report infringement.

Report an issue