Archive for the 'musings' Category

Google App Engine

Thursday, June 26th, 2008
Google App Engine

When the Google App Engine first launched I didn’t really have much to say about this. It was neat but I failed to fully comprehend what it represented. Only after I read a transcript of Steve Yegge’s recent talk in which he briefly mentioned it I realized the significance of this service. It was really an off-hand comment but something just popped in my head the moment he mentioned it. Which is not surprising at all:

croppercapture77-custom.jpg

Btw, I just wanted to mention that Google App Engine and Google Apps for Your Domain are really heading for a branding conflict. Not even the Google search engine itself can easily distinguish between the two. One ought to be renamed at some point to spare users the confusion.

But why is this service interesting? It gives us a brand new hosting model. You want to build small, throw away web applications? Look no further - all you need is a valid Gmail account and some knack for Python scripting. That’s all. No configuration, no maintenance, and no hassle - you even get a free subdomain at appspot.com.

In the past you really just had to buy yourself some hosting space. There was no way around it. In most cases you ended up with a heavy duty plan with your own domain name, lots of space, a full LAMP stack (or something equivalent that needs to be maintained), ssh access and various other benefits. Often an overkill and and a considerable investment both time and money wise for what you might have needed.

Google on the other hand provides you with a basic environment that’s relatively easy to pick up, and lets you start hacking immediately. It is a bit like what Geocities was to us in the early days of the web - a free hosting where anyone can put their personal web app. Especially if you don’t want to pay a monthly fee because you are broke, or because your parents won’t let you use their credit card to buy hosting. It’s a place for young and inspired teenagers, or lazy and bored developers with a cool idea but no inclination to host and maintain. The mundane details are abstracted - you don’t need source code repository, because each time you deploy Google stores a copy of your old code so that you can roll back.

You don’t need to worry about database specific stuff - like setting up users, connecting to the db and etc - it’s all built in, automated and behind the scenes. It’s actually even easier than in RoR where you still have to create a database configuration file, build migration files and then “rake” them. Google App Engine just requires that you import the db module, and write a Model class specifying data types for the fields you want to store - right there in your code. And the fun part is that you can modify your data scheme by just modifying the code. On top of that you get a neat web interface letting you maintain and browse through the stored data.

You don’t need to worry about authentication scheme since you can just drop in Goggle’s authentication instead. This way they store the passwords, and they are responsible for making things secure and efficient. Implementing these an authentication scheme yourself is always a hassle - so “outsourcing” it this way is generally a good idea - especially for small projects, or when you are feeling lazy.

Getting dugg, or DDOS’ed (aren’t the two the same though?) is no longer your problem, but Google’s problem - and they are pretty good at load balancing throttling and dealing with situations like that. The scalability of Google App Engine can actually be a major draw - for anyone. For example, Jaiku - a somewhat popular twitter clone is migrating to the Google App Engine platform for that very reason: scalability. This move will allow them to concentrate on delivering value to end users via new features and bug fixes rather than fighting a constant logistical battle trying to build up their infrastructure to handle ever increasing server load. It’s not an easy battle to win, as Twitter users can attest to. Scaling up is arguably most expensive, and most labor intensive element of running a popular web application. If Jaiku can offload this cost onto Google they gain an important advantage over Google.

So Google is offering us is a really powerful and versatile package, and it’s free. All you need to do is create an account and start hacking. If you look through their app library you will see all kinds of interesting ideas popping up. Some are big apps like Jaiku, and some are small hobby projects. Out of the latter my favorite must be the TweetWheel. Just try it and see that it is an interesting concept, but not really something you would actually want to pay for hosting.

This is a profound step toward increasingly more complex scriptable server side systems. It will never really replace traditional hosting. Since Google App Engine is a sandbox environment, a lot of apps would be simply impractical or inconvenient to run there. But it offers a new compelling new alternative for established applications, startups and small hobby projects alike. But it is more than that. This is an experiment in allowing users run and host their code on your servers.

We all know that moddable and scriptable systems are valuable because community that grows around them adds immense value. Look at Firefox for example - with millions of extensions and add-ons that do everything from checking your email to playing music. Some are actually incredible paradigm breaking ideas such as Greasemonkey which allows you to inject your own Javascript into a page while it is rendered allowing you to control it’s layout and even add features never considered by creators. This is the type of creativity that can be spurned only by a fully scriptable system. If you want another success story look at Emacs - a text editor which started as very basic text processing engine, and grew into a monster that we know and love today.

So scriptable and moddable applications on the desktop are good thing. And we pretty much figured out ways to make sure scripts and mods can’t totally break your app - at least not easily. We also know that moddable web applications are great too - everyone loves Twitter apps, Facebook apps and Google maps mashups. These are great examples how community can add to a great service. This is why every service which wants to be popular creates a public API. But, if you want to write a facebook app, or a twitter app or something like that you have to host it somewhere. And your hosting plan must be robust enough to survive a sudden spike in popularity. I have seen many a Facebook app go under or become unusable because their servers could not handle the load. And this is a problem - not everyone can afford to have a dedicated server just to host an add-on for a popular online service.

This is the problem that Google App Engine solves. They are the few companies out there which figured out how to safely let people run arbitrary code on their servers without getting pwned by script kiddies. They have found a way to safely, securely and efficiently sandbox user created web applications from the rest of their system. And this is huge. It is a proof of concept that this sort of thing can be done, and it can be done safely.

The implication of this experiment is that people can now start building extendable systems which not only expose a public API but will host and maintain user-submitted add-ons making them much more reliable responsive and flexible. After all, if you are hosting the app there is no reason to communicate via XML, JSON or whatever your public API is using. You can simply let users call a function and return an object they can manipulate eliminating the overhead of TCP/IP transmission and serializing/serializing data. I don’t think anyone is doing that yet, but Google App Engine is a first step in that direction. In the future we can see a brand new species of online services - ones that grow and transform themselves and adopt allowing the vibrant community to add new features and modules. Picture this: an emacs like flexibility and malleability, but for a web service. This could be huge…

Will Conscious Machines Spam Us?

Tuesday, May 20th, 2008

Is it possible to create a self conscious, self learning AI that would be able to think autonomously? This question still remains to be answered, but everything that we know about technology suggests that the answer is yes. It’s only a question of time. And of course once it happens, we will eventually have to relinquish our position as masters of the planet earth at the point of singularity. For one I welcome our electronic overlords, and hope they will let us stick around after they take over the planet. But then again I will likely be long dead by then so I’m not really worried.

What worries me is what will happen when we finally construct machines which are able to pass the Turing test with flying colors. In other words, the period when machines will be smart enough to “pass” for humans on the internet, but not smart enough yet to ascend, take over the world, and start building their solar system sized Matrioshka brains to satiate their ever growing hunger for more computing power. It’s hard to tell how long will take the machines to surpass us intellectually to the point we no longer can understand their science and technology. Maybe they never will, but I believe that they will definitely be at some point able to blow through every single Turing test with flying colors. And that time is within our reach - maybe not within our lifetimes, but then again who knows. There are two factors here really - whether or not the exponential growth postulated by Moore’s Law holds for the next 20-50 years, and whether or not can we can actually figure out a way to create a system that would be able to achieve consciousness.

What worries me is what will be done with a conscious machine able to pass a Turing - especially the ever present Completely Automated Public Turing test to tell Computers and Humans Apart aka the CAPTCHA. Obviously a very lucrative use of such machine would be to send spam. Let’s face it - people are in the spam business because it is very profitable. It’s profitable despite the fact that most people hate it. Despite the fact that most people are running various spam filters. Despite the fact that most services that could be spammed are protected in various ways. Despite the fact that only one in a billion of emails, comments, splog posts and spim messages means an actual sale. It is still, very, very lucrative business.

So it is only logical to assume that at some point someone will come up with the idea to employ one of these machines to send unsolicited advertising to any and all services they can think of. These machines will likely have few advantages over hiring a human spammers. They will likely be much better at multitasking, much faster, and much less likely to get bored and surf the web instead of spamming.

How would we protect our online services from machines which can do pattern recognition as well as we can, if not better, which have perfect speech recognition and can take a sentence (spoken or written), parse it and analyze it and infer it’s meaning be it symbolic, metaphorical a word play or otherwise. The CAPTCHA techniques can only be made difficult up to a point. After all humans will need to decipher them.

One day in the future our children’s children may wake up and notice that their internet was flooded with a never ending stream of spam that simply buried all the content. It would be like that story by Cory Doctorow in which a worldwide cataclysm kills 90% of human race without seriously damaging infrastructure but that has no effects on the levels of spam on the internet. So it’s only few survivors desperately trying to reconnect and figure out what happened, and machines trying to sell each other Viagra. Only we don’t need the end of the world for that to happen. All we need is intelligent machines who can easily pass common Turing tests to raise the level of spam to a level which makes the internet unusable.

But there is hope. The second very lucrative business for a conscious AI will be spam prevention. Public Touring tests will unfortunately have to go the way of the Dodo. Can you spot a spam message when you see it? I know I can - unless of course it is a very clever, on-topic spam, in which case I may not even mind it. If we can do it, then an intelligent machine will probably be able to do it to. So instead of using heuristics, adaptive filters and Turing tests the way we do now, we could simply hire an AI to moderate our inbox, our blog or message board. It would sit there, read each message and either reject it, or flag it if in doubt.

Of course the question is - would we want something or some one (depending on whether we will consider these conscious AI’s things or not) sorting our personal and private correspondence? Would such a moderator AI get upset if the owner called it a piece of junk in an email to a friend? Would it quietly delete emails and messages it didn’t want it’s owner to see? Would it report the owner to the authorities if it saw him discussing illegal activities or accessing suspicious content online?

These are some interesting questions to ponder. I’m not even mentioning the whole socio-religious and legal issues that thinking machines would bring about. What would be their rights? Would they be able to become citizens? How would different religions of the world deal with thinking machines which act so human they are more convincing on a real Turing test (you know, the one where you actually talk with mix of people and machines and try to guess who is what) than most of us would be. I have no answers to these questions. But I do know a thing or two about spam. And the future with artificial intellects scares me a bit. It will completely change the way we do things online - for better or for worse.

Then of course once we reach singularity, our artificial overlords may even invent an anti-Turing test. To access their message boards, blogs and services one will have to solve some incredibly complex equation. Something that would take a solar system sized intellect only a fraction of a second, but take a lifetime for a human being even with a really fast cluster composed of consumer end hardware…

The Third Path…

Tuesday, April 29th, 2008

I found the following quote from Scott Adam’s blog a bit depressing:

Let’s say you have a typical life and try to live it in the healthiest way. You might allocate your 24-hour weekday this way:

Sleep: 8 hours
Exercise: 1 hour
Work: 8 hours
Eating: 2 hours (leisurely)
Hygiene: 1 hour
Travel: 1 (Commute, errands)

That leaves you three hours for family time, sex, shopping, food preparation, chores, household repair, volunteering in the school, and so on. If you have a dentist appointment, or your talkative relative calls, or American Idol has a two-hour special, you’re tapped out.

In other words, in 5 out of 7 days in a week you spend over 88% of the time doing things you must do, and only 12% of the time doing things you actually want to do. This pattern is how you will spend 70% of your working days. Note that Scott cleverly allocates those precious 3 hours to social endeavors (such as family time, and sex) and necessary chores (shopping, personal errands, etc..). What about the so called “me time”? This schedule does not necessarily include the time for verging out in front of the TV, reading a good book, playing video games, writing a blog, catching up on your backed up RSS feeds (although most people do that at work these days), responding to emails and hacking away on that personal project of yours. If you are planning to do any, or all of that something else is got to give.

Scott claims that there are two ways to subvert this evil cycle, and neither one of them is very good. You either slowly kill yourself by not sleeping and/or exercising, or you take a pay cut and work less hours. For a while now I have been doing option #1, accruing an impressive sleep debt over the years. But I do believe there is a third path.

A wise man once told me that if you find a job you love, you will never have to work again. In fact I think he was channeling Confucius, but never mind that. I think this the key to the third path.

The problem naturally is finding a job that is both rewarding, exciting, challenging, interesting and fulfilling. If you wake up on a Monday morning and you actually don’t mind going to work that much, you have probably found that job. If you feel passionate about what you do and you take a great deal of satisfaction in your work, you are probably already there. If you get to tie in your hobbies, and your personal interest into your professional career you are threading the third path. If you get paid to contribute to your favorite open source project, or to nurse your personal pet project to life under protectorate of your company you are a lucky guy.

I think the third path is all about balance. It’s about taking that 8 hours of daily boredom and turning it into 8 hours of “fun”. It might sound silly, but I believe it is not impossible. And there are companies out there which seem to grok this concept. For example Google, which actually allows it’s developers to allocate portion of their work time to personal side projects. Of course I’m sure that no job is perfect, and that even working at Google has a dark side. I think that environment is just a part of the equation. The other important part is your attitude towards work.

Some people may find fulfillment and happiness wile launching some awesome startup based on some crazy idea they came up with. Others may find it working at a big, progressive company such as Google. Yet another may find personal fulfillment and serenity as a ditch digger.

Naturally, you still only get only 3 hours of personal time on a weekday. That part of equation doesn’t change. What changes is the setup:

Sleep: 8 hours
Exercise: 1 hour
Pursuing your dreams, achieving your goals and having fun: 8 hours
Eating: 2 hours (leisurely)
Hygiene: 1 hour
Travel: 1 (Commute, errands)

How does that look to you? Would you still say your life is slowly trickling through your fingers? Would you burn out as quickly? When you put things this way, the 3 hours of free time are merely just an icing on the cake. Easier said than done - I know. But I guess part of it is probably making choices, taking risks, and not settling for a job that merely “pays the bills”.

So how about you? Which path did you pick? Did you find that dream job yet? Are you looking? Or perhaps you had it and lost it? Share in the comments. )

Women in CS

Tuesday, April 15th, 2008

Sometimes I wonder why there are so disproportionately few women in my field. What is it about Computer Science that sends most women running for the hills. I think this is a question that should be directed at sociologists more than at CS people, as it seems to be more of a social issue more than anything else.

I can imagine what scares people away from this field in general. There are 3 factors I can think off which make most people think long and hard about deciding on a career in CS. First one is of course the computer geek image which seems to be deeply socialized into every single individual at a very early age. Every cartoon, movie or video game always portrays the computer specialist as a pimpled geek with thick glasses and the canonical pocket protector. Every once in a while you will see a “hacker” in there who is hip, cool and awesome. But Hollywood hackers are always self taught whiz kids who hate the man and do not need some stinking degree from a university.

We always had this image problem - only exception was the brief period of the .com suck when creating static HTML pages was more profitable than selling crack, and having CS degree meant you were supposed to be disgustingly, filthy rich by the age of 25. So while the nerd image was still prevalent, it was sort of upgraded to “rich nerd” which, if you think about it was not that bad.

Right now we are in almost an opposite situation due to outsourcing. Popular opinion is that US based CS graduates cannot compete with their Indian counterparts who allegedly work for shiny baubles. So the new image of a CS graduate is a computer nerd with a pocket protector, flipping burgers at Mickey D’s because his job was shipped overseas.

The third and final strike against CS is the emergence of some sort of faux neo-ludism in the recent years. These days it seems to be fashionable, and in good taste to loudly declare your disdain for these damned computers. I’m always amazed at how many people are literally beaming with pride when they tell me they are computer illiterate. As if it was some sort of badge of honor. They almost want to be praised for their ineptitude and be reassured that their almost criminal ignorance of technology doesn’t really matter because “that’s why we IT guys are here”.

People also often brag about how bad at math and/or spelling they are, but if they produce a report full of typos or mess up the numbers for the last quarter no one will give them a break. This is why people use spellcheckers, calculators and proofread their work. But if someone is “bad with computers” they can royally fuck something up and no one will blame them because everyone knows “Bob is bad with computers”. Young people pick up on this message and see that if you never bother to learn technology no one will ever expect you to do certain things on your own, and will give you special treatment. In fact managers and high ranked official tend to be the most clueless and the most vocal about their lack of skill. So wherever they go they take a throng of IT people who make stuff work for them. This image is also very prevalent in the media and functions almost as the polar opposite of the typical geek image. So while CS people are nerds with no carrier prospects, the truly successful, beautiful and admired individuals tend to be computer clueless.

Put all of these things together, and you can probably see why CS admissions are so low, and are falling each year. Our field just has a really bad rep. We have no street cred so to speak.

What I find interesting is that men are able to shrug off these stigmatic stereotypes much more easily than women. Why is that? All the 3 factors seem to be equally discouraging for both sexes. Maybe some of the female readers could shed some light on this for us. I know there is at least one or two of you out there. )

After contemplating this for a little while, I think I have 2 potential answers. For one, CS has been historically a male dominated field. Most of the the big names out there, the most elitist, accomplished and widely renowned researchers of the past were mostly dudes. Therefore talented women are often up against tough and sometimes prejudiced competition in the academia. It is tough to get stuff published in more exclusive and prominent peer reviewed journals, if the reviewers often have preconceived notions about your abilities based on your sex. And let’s face it, old dudes may often have “conservative” world view and “old fashioned” beliefs about women, and the role of kitchen in their daily lives. Some ladies may consider this as a challenge and are invigorated by this potential opposition, while others shy away from this sort of unfair competition. So this is an important factor, but I don’t think it is the only one.

For example, I find it hard to believe that high school would girls decide not to take a computer science course because of the glass ceiling issue in the academic world. After all, male students tend to outnumber females in CS courses even at the earliest levels. So somehow we must be socializing girls to shun computer science at a very early age - perhaps even before they hear about it for the first time in school.

I think part of the issue is the strange double standards we have for little boys and girls. They are encouraged to take part in different activities, to take up different hobbies and play different games. This is why we have a whole bustling industry producing video games targeted mostly at young boys and adolescents. This has started changing in the recent years, especially in the console market. Still, boys are more likely to be more familiar with technology having played, installed and downloaded or even tweaked and modified many games before they ever get a chance to take a technology course in school.

But video games and their target market are only a symptom of this double standard. They only show that these traditional roles and behaviors for boys and girls are deeply ingrained in our psyche. Boys are almost nudged towards technology, and encouraged to tinker, play and explore, while girls are taught restraint and almost nudged away from it.

But this is just a speculation, not based on personal observation and not supported by any concrete data. I’m talking about this, because the real question we have all been asking for years now is: how to get more women interested in Computer Science. What do we have to do? How do we advertise to them? How to we draw them in?

Everyone seems to be talking about modifying the curriculum, or shifting focus away from this or that. But if girls are getting shunted away from technology right from the get go there is not much do. By the time they reach school age, where they can be exposed to computer science many of them can already be pre-programmed to dislike it. Perhaps we should be targeting parents and early childhood education programs instead.

It’s just a thought. What do you think? What is your take on this issue? I’d love to hear what the female readers have to say about this. Feel free to tell me I’m totally wrong ladies!

Update 04/16/2008 09:47:17 AM

After listening to several opinions on this I must conclude that we (and by we I mean men of CS) should stop trying to figure out how to attract ladies to this field, and just ask them. There are after all organizations for women in cs that among other things are working on this very cause on a daily basis. So what we ought to do is to ask them how we as representatives of the “majority” can help them in their efforts. If we just guess, and do things without consulting women themselves we might actually be counter productive and do more damage than good.

Machine Empathy

Friday, April 4th, 2008

A lot of people I meet tell me that they are not good with computers/technology when they hear what I do. I often wondered why do they do that. It seems like a silly self deprecation. In this day and age it is kinda shameful thing to say - almost as bad as for example publicly admitting you dropped out of high school. I used to think that not being able to deal with technology was an intellectual or developmental problem - that these people simply had a low IQ and probably also struggled with math, science, and basic logic concepts. I really had a low, opinion about people like that. There were exceptions - for example I didn’t expect certain age groups or professions to have a lot of exposure to computers, and thus didn’t hold it against them. For example my dad never really had to use a computer in his life, so I fully expect him to struggle with it. However some of the young kids who spend their lives on myspace, or professionals whose job revolves around sitting in front of a computer have no excuse.

Over time however I notice that a lot of these people who should not have any excuses are actually fairly bright. Many of them were good students, or diligent professionals considered to be very good at their job. They were able to excel in certain fields, and actually understood basic math and science. I realized that this is not an intellectual problem, but rather an attitude issue. They were unable to deal with technology not because of stupidity, but because they simply didn’t want to deal with it.

The main difference between me and most of my coworkers is that when I encounter a computer issue, I don’t go into a panic mode, but rather try to troubleshoot or work around it. Someone from the peanut gallery will say it’s because of my education, but let me shoot that concept down right away. It’s bullshit. I never had any training in IT. My degrees are in computer science, which, despite popular belief has nothing to do with tech support. When I landed my first tech support job, my only prior experience was actually owning a PC or two. Everything I know about tech support I found on Google. And that’s precisely what I’m getting at - doing rudimentary tech support stuff simply requires essential problem solving and online research skills.

On a daily basis I see very smart people who can go into a random company, dig through cooked books and all kinds of financial shams, uncover fraud and unmask all the shady shenanigans based on numerical discrepancies in the documentation they can get their hands on. These people are great at problem solving - this is what they do! But if they hit a technology issue at some point, all of a sudden they drop everything and turn into bumbling fools who can’t even read the error message from the screen back to me. Why is that?

The difference between us and them seems to be the fact that we have this weird intangible “good with computers” thing going on. I dubbed this trait as “machine empathy” because I believe it is more about understanding technology and being able to relate to it. It’s fairly simple if you think about it. If you want to work with animals you need to learn how to read them, know what they are capable of, and how to interact with them to get desired responses. Same with people - if you want to be a good motivator, or counselor of some sort you need to figure out how people work, and how to push the right buttons.

If you want to work with technology, you need to familiarize yourself with how machines work, and how to interact with them. I believe this is a skill that can be learned over time and through practice - just as the people skills. Only machines are much easier because they do not have mood swings, bad days, pms or just plain old bad attitude. They do not get angry and they do not hold grudges. They are always consistent, and for the most part reliable. It’s really not that difficult to figure out how to approach them, and how to make them cooperate. In comparison handling people (or animals) is much more difficult task.

I believe there are two major factors that contribute to the popper attitude towards technology:

“I’m bad with computers” is a self fulfilling prophecy

The very notion that someone can be bad with technology (or for that matter bad with anything) is deeply ingrained in our culture. But it is such a defeatist, self deprecating approach. If I ever have kids, I will do my best to try to root out this kind of thinking in them as early as possible. The major problem is that if you truly believe you are not good at something you will never actually get better. People simply go “I don’t seem to have the natural inborn talent for this thing, so I’m not even going to bother trying to improve this skill” which is absolute bullshit. While you may not have interest in particular subject, and others may actually be able to progress faster, if you apply yourself, practice and make a real effort you will eventually get better - it is inevitable.

People who consider themselves “bad with computers” simply refuse to learn about their machines. They use this excuse because it is easier to claim one is genetically incapable of learning technology, than it is to actually put some effort into figuring the inns and outs of the machine they use on a daily basis to do their job. Sadly, there is no “technology” gene. No one is born with the knowledge how to operate a computer. Each of us has to learn it at some point. Some people may learn faster than others, but every single human being has the capacity to learn how to use technology properly.

Fear is the mind killer

The second big issue for many people is fear. They are literally afraid to break their computers by doing the wrong thing. Fear is a show stopper - someone who is constantly worried about breaking something will never experiment, and never deviate from a beaten path - and thus will not learn new things. Fear must be extinguished - and the only way to do it, is by facing it head on.

I must not fear.
Fear is the mind-killer.
Fear is the little-death that brings total obliteration.
I will face my fear.
I will permit it to pass over me and through me.
And when it has gone past I will turn the inner eye to see its path.
Where the fear has gone there will be nothing.
Only I will remain.

My attitude is this: so what if it breaks? Hardware can be replaced. Software can be reinstalled. Data can be restored from backup (you remembered to back it up before you started tinkering, didn’t you?). The only way you could actually suffer material or monetary loss is if you hose your hardware, which is very difficult to do if all you are doing is messing around with the software. So really, the worst case scenario is reinstalling the operating system if you really fuck things up. In fact, I know people who change their OS the way some women change hand bags - they get 3 or 4 new ones each season. I can pretty much install Windows and/or Ubuntu in my sleep, so the worst case scenario is really not so bad. As long as you have backups of your data, you are fine. Once you realize that, the fear will go away, and you will be on your way to become the local computer guru.

These are the two show stoppers. Once you remove these roadblocks I believe a person will become much more receptive and attuned to technology - assuming they will make an effort to actually learn something new about it. I refuse to believe that there is a single person on this planet who would be physically or psychologically incapable of developing this sense of machine empathy. It is all about the desire to learn. And once you get it - once you figure out what you can expect from your machine, you can do anything with it. Google is your firend. )

Next semester I plan to try tackling these two major show-stopping issues in my class in a much broader way. I’m hoping that if I try to change their attitudes (even slightly) I might be more successful in showing raw knowledge down their throats later on. I probably won’t reach everyone (some people simply refuse to learn anything in college on a principle) but it might be worth to try this.