Automate Everything

I had an interesting conversation with my mother earlier today. We were discussing a previous purchase of mine from Redbox and she commented on how Redbox and Netflix put Blockbuster out of business.  This eventually lead to a discussion in which I commented on how the world needs more of this type of automation.

What is particularly interesting is the response I typically get when I make that statement.  In almost all cases, the response is something like “Technology takes jobs away from people.” or “Technology does not always work.”  Each one of these statements has a fallacy that I want to address.

On the first – “Technology takes jobs away from people” – Automation through the use of technology does not necessarily mean jobs need be taken away.  What it does mean is that those tasks no longer require a human which gives the human that would normally be doing that job, the ability to use their brain power for much more advanced tasks. Why should a human waste time doing something that a computer can do more efficiently? What benefit does that human provide the rest of society by doing the job we can teach technology to do for us? Automation of tasks that can be automated enables us  to use our brain power on the truly hard problems.

On the second – “Technology does not always work” – I’ve heard many variants of this to include that the “Human element is missing”.  My response to this is that neither of these statements means we should not automate tasks – they mean we should make the automations better.  Efforts have been made to make technology seem more human.  I have mixed feelings on these efforts.  For automated tasks, seeming more human can be valuable in helping make the experience easier for humans.  On the other hand, there are some tasks where seeming more human is not good enough.  There are cases where you need a human to actually reason and/or empathize with a complex situation (and these are not the things I think should be automated anyway).

I’ll close with this – If man-kind wants to truly advance, we should automate everything we possibly can and use human brain power on higher order problems.  To that end I say – automate everything.

Posted in Age of Information, Analytics, Application Development, Automation, Data Analysis, Programming, Software Development | Leave a comment

Freakonomics Is About Data Science (mind blown)

I just got done reading Freakonomics and I’ve got to say I was pretty impressed. Most people assume this is a book about economics and how to game the system. Turns out it is actually a book about data science. The authors walk through a variety of scenarios in which answering very interesting questions relies heavily on ones ability to ask the right questions of the right data.

For any aspiring/would-be data scientists out there – I highly recommend reading this book.

Posted in Uncategorized | Tagged , | Leave a comment

Native Apps in JavaScript

Who would have thought that writing a native mobile app entirely in Javascript was possible? I know I was a skeptic initially. Yet – the first mobile app I wrote was written entirely in Javascript – and you’d never know it if I hadn’t told you. How did I achieve such a feat? Sadly it wasn’t anything as exciting as black magic. I used two very powerful frameworks to churn out an awesome app: Appcelerator’s Titanium and Facebook’s Parse Frameworks.

On Titanium

  •  Why Titanium? – I wanted the flexibility to make a cross-platform app*
  • I knew JavaScript (or so I thought)
  • Appcelerator seemed to have a stable enough platform and powerful enough SDK*
  • Free platform and did not require me to send my code elsewhere to get compiled
  • There were plenty of modules out there for me to use for random things.

That said – let me say three things:

“Cross-platform” frameworks don’t mean 100% cross-platform. What this typically means is you will be able to share 80% of your code (business logic and some UI stuff), but you still have to write specific things for each platform. I realized this about half way through my development effort and because I’m an Apple user myself I chose to go the iOS route. About half way through my development, iOS 7 was release with all the lovely UI changes and I had to completely scrap my UI and re-write it (worked out for the best, I like the current design). Note – this is all in JavaScript – You basically create JavaScript objects that have the same properties iOS UI Elements do.

The second note is – I thought I knew JavaScript before I embarked on this task. I realized that I in-fact did not know it as well as I thought I did. Handling memory is very different from how you handle memory in other languages, and there are other random nuances about polluting namespaces and such. This is a self-correcting problem if you can identify what problems you’re actually experiencing (memory leaks and the like).

Finally – There are a number of Titanium modules out there for you to throw in to your code. Plenty of them are free and open source. These modules are written in the native languages (Objective-C/Java for iOS and Android respectively) and are exposed to you via a JavaScript API. There were a few times I had to get my hands dirty and actually dig into some Objective-C code to modify these modules to do some additional things I needed, but that wasn’t too terrible, and the Titanium Framework makes it pretty easy to re-deploy.

On Parse

  • Parse was attractive because of the pricing model*
  • It is MongoDB on the backend so it is scalable.
  • Cloud Code* is amazing.
  • More JavaScript

Parse’s pricing model when I started was a freemium model that was based on the # of queries. This is great for scaling up. You’d pay nothing for the first 1,000,000 queries a month. After that the pricing did take a bit of a jump, but it was manageable. My thought was – if I’m hitting 1M+ queries a month, I’m probably making money. This did, however, put a bit of a damper on some things I wanted to do at first. I wanted to track all kinds of metrics and had to be creative about how I collected information and sent that back to the server. It wasn’t elegant, but it got me my data. Then something wonderful happened – At F8 (about two weeks before my launch), Facebook announced a new pricing model for Parse. No longer were you bound by the #of queries, but now by the #of queries per second (with some room for bursts). I re-wrote a lot of my business logic that very night and track everything. (Thanks Zuckerberg).

Parse also has this nifty little thing called Cloud Code. It allows you to write JavaScript functions that run on the server so you can actually offload a lot of your business logic from your app to these Cloud Functions. Additionally, you can create cloud jobs that can run on your data in a scheduled manner.

On launch day – Cloud Code saved my life. I was obsessing as any developer would when their product hits production and kept checking to see how many downloads I was getting/users. The first 4 of the first 10 users to sign up all had some missing data (I was checking it through Parse’s data browser) that my app was supposed to be providing in order for them to actually use it. Long story short – I had an edge case that I hadn’t accounted for, which was actually a bigger edge case than I assumed. Luckily – I was able to update my cloud code logic such that on save it checked for these errors and appropriately handled them so the users never knew there was an issue and I didn’t lose them because of a stupid bug that I was able to fix with one safety check.

Other Thoughts

Writing an app entirely in JavaScript isn’t all pluses. The Titanium Developer community is not one of the most active communities. There were many cases where I spent hours looking at forums for ways to solve odd problems I was having. In most cases I had to hack away to find the correct solution. Appcelerator certainly tries to keep Developers active so it’s hard to say why that is. I should also note that Titanium also has a cloud storage backend. I honestly don’t know much about it and had trouble finding many others using it (likely because it was early on in the life cycle). It may be a completely viable option, but I can’t comment on it. I can’t say I’ll use Titanium for my next app simply because of the lack of activity in the developer community (certain functionalities in iOS won’t be easily usable without modules being built). Luckily I won’t have to learn Objective-C and Swift is pretty damn close to JavaScript.

Parse – has completely won me over. Ease of use. Great documentation and the developer community is extremely active. Will likely be using Parse for future mobile apps, web apps, etc… Would recommend it to just about anyone. They have had their stability issues – this happens when you have a scalable platform with many users, but they are very quick about fixing them. Downtime has been minimal in the last 60 days.

Moral of this story: Mobile Apps can be written entirely in JavaScript and still feel native. Writer’s Block is proof.

Posted in Application Development, Databases, MongoDB, Programming, Software Development | Tagged , , , , , , , | Leave a comment

When I started this blog many moons ago, I was sitting in my college dorm room at Virginia Tech. My long time followers will remember the old name “Tech From Tech”, which was a play on the type of content I was writing (technical education for the masses)  and the college I went to. It has been years since I left VT, and while I will always love the Hokies – it is time for a change.

That said – today marks the first day in my rebranding. You’ll notice the blog is now titled “Night Shift Writing”. Why you ask? Because peak performance happens at night. This has been especially true for me over the past few years. It is also no accident this re-branding coincides with the start of my new company – Night Shift Development – the same company under which I recently released my first app for iOS, Writer’s Block. More on that later.

Expect to see more writing from me going forward. I’m going to aim to write more shorter posts with longer ones scattered in between. Keep on the lookout.

Posted on by Tim Tutt | Leave a comment

The Worth of College Degrees

About 3 or 4 years ago I found myself in a Barnes & Noble (an actual store for books for you young ones) looking for a programming book of sorts.  I was pretty disappointed in the selection and vocalized this not realizing there was someone standing nearby.  The older gentleman, overhearing me, decides to spark up a conversation with me about education (this seems to happen to me often).  During the course of this discussion, this anonymous man makes one comment to me that has stuck with me for years – “Degrees only matter for a point in time.”

Over the years, while completing my degree and making the transition into the real world, this statement has resonated in the back of my mind.  As my career has progressed and my skills have developed, I’ve come to really understand the meaning of this anonymous man’s statement.  Moreover, I’ve come to believe whole heartedly that college degrees actually don’t mean much more than you are a trainable monkey.  That is to say that we, as a society, put too much emphasis on college degrees.

Before I continue, let me make one thing very clear.  This article is not meant to say that college is all bad.  It is not meant to be a debate about the value of higher education.  I fully believe that higher education is completely necessary.  College is not all bad.  You have a tremendous amount of learning opportunities in and outside of the classroom that you would not get in any other environment.  The networking opportunities that you have in college are unparalleled.  So for emphasis, the argument here solely focuses on the value of a college degree.

Depending on where you live, the salary discrepancy between those with college degrees and those without is somewhere between 40 and 99%.  What I have always found particularly interesting about this little statistic is that those with only high school degrees tend to find their way into the workforce much earlier giving them the opportunity to gain real world experience, while those in college come out (in a lot of cases) with little to no real world experience.  A degree is not necessarily a good indicator of one’s ability to perform a job.  It is a good indicator of that individuals ability to test well in controlled situations.

Real world experience, whether through internships or full time work, is much more valuable than a degree.  I have interviewed many recent grads over the past few years only to find that most of them spend no time outside of the classroom learning about the industry they hope to play in.  They come to interviews with the ability to regurgitate textbook definitions of technical terms, but no idea how to apply that knowledge to a real world situation.  Perhaps my standards are a bit high,  but only 42% of employers believe recent graduates are ready for work so I am obivously not alone.  Even companies like Google see less of a value in college degrees these days with more emphasis on the skill set of the individuals.

The fact is, education actually extends beyond the classroom, and many students fail to realize this.  If you are a student in a a college degree program that stops learning once you leave the classroom, you are not doing your job.  The traditional definition of the word education is dated with an emphasis on classroom based education and perpetuated by a class of individuals that view themselves above those without college degrees, unless, those individuals become tremendous success stories like Mark Zuckerberg and Bill Gates.  Sadly, this definition is taken as doctrine by most of today’s students leaving them far behind the curve when they graduate with these degrees.

Websites like Coursera and services like iTunesU providing top notch education from major Universities are making higher education much more accessible to individuals who have an interest and drive, and are making college degrees less necessary.  Society today still puts a heavy emphasis on college degrees, but we are starting to see a shift from that model to something different.  It is not an entirely new paradigm.  We are all required, in the professional world, to stay current on the changing times, laws, and technologies long after receiving that piece of paper that seems to define us; however, it seems society may finally be starting to put less emphasis on college degrees.

Posted in college degrees, higher education, Tech Ed | Leave a comment

What You Give Away

“…You also agree that you will not use these products for any purposes prohibited by United States law, including, without limitation, the development, design, manufacture or production of nuclear, missiles, or chemical or biological weapons”.

Even though you have probably never actually read that statement, you have more than likely agreed to those terms on several occasions. That little gem comes right out of the Apple iTunes End User Licensed Agreement. You know – the thing that you usually just hit “Accept” or “I Agree” to without reading so you can get to using the application?

How about this one:

“To enhance your online experience, we use “cookies” or similar technologies. Cookies are text files placed in your computer’s browser to store your preferences. Cookies do not contain personally identifiable information; however, once you choose to furnish a site with personally identifiable information, this information may be linked to the data stored in the cookie”.

That came right out of the CNN Website Privacy Policy. Their policy goes on to say that “third party service providers” may also use these cookies to collection information and that “Visitors should consult the other sites’ privacy notices as we have no control over information that is submitted to, or collected by, these third parties”.

Oddly enough those terms are pretty standard for any website you go to. In fact, if you take a look at every privacy policy and terms of service agreement you have ever agreed to, tacitly or explicitly (Don’t try it. It would it’d take about 76 work days), you will find that you give away more information on a daily basis than you knew was being collected about you. For instance, when using Netflix, did you know they track whenever you rewind or pause a movie/show? Mobile service providers track things like what cell towers you connect to and how long your calls last. To top it off, they retain all of these data points later run massive analytics to profile who you are. Your mobile service provider likely knows more about your day to day habits than your closest friends.

A few years ago I decided to take all of the publicly available information on Foursquare in the Northern Virginia area for 4 months. I picked a random, seemingly anonymous user out of this mass of data and tracked the movements for those four months. End result – with this data and a little bit of social networking was able to determine the name of this pilot who was based out of IAD that decided it was a good idea to check in at every airport he flew to, and at the Burger King he liked to frequent between 6:15-6:18 am before arriving at work around 6:45 am when in Virginia.

The amount of information we as a society willingly give away is very scary. We provide everything someone would need to identify, track, profile, or rob us. This culture of sharing has largely been influenced by social media giants Facebook and Twitter, but there is a layer beyond that. We actually PAY corporations to take our data and turn around and do whatever they want with it (store it, analyze it, read it, listen to it, sell it). Your cell service providers, your television providers, even your energy providers have more data about you than you would imagine because you willingly give it away.

[Begin digression]

We willing give away data to private corporations who only want our data for a bottom line (improving services and selling data are all just ways to make more money), but we seem to have a major problem with our governments using the same data to protect us. At some point, we decided it was okay to entrust employees of private corporations with this data, but we kick and scream when our governments want to use the same data to protect us at home. Something about that seems off and I think it is time for society on a whole to start reevaluating what is important.

[End digression]

In the age of information, we freely give away data without thinking twice about it. Turns out this is also the age of “big data” and “data analysis” so profiling you and knowing more about you than you ever knew about yourself has become somewhat of a game. A very profitable game at that. So now that you know this, what is going to change? There will be no huge uprising to take back control of our data. There will not be national discussions about privacy and human rights violations. We will continue providing this data willingly, but knowing what is being collected and how it is being used gives us opportunities to forcibly change our own behaviors and limit the amount of data we allow to be collected on us. Food for thought.

Posted in Age of Information, Analytics, big brother, Big Data, Data Analysis, Large Scale Systems, Politics, social networking | Leave a comment

National Security Rant

<Begin Political Rant>

I have not done this in a while, but after watching this evening’s debate on Foreign Policy, I am thoroughly disappointed in both candidates. When asked what the #1 future National Security Threat was, neither candidate responded correctly. What answers did we get? Some fluff answer about jobs and China and a nuclear armed Iran. You both receive a grade of F on this question. In fact, the President gets an F- for saying the words “cyber security” and not following up.

Why am I so harsh on this particular issue? Let’s take a quick look at just the past two weeks:

That’s just to name a few biggies. News media not enough? How about these little tid-bits:

  • In 2009 the current Administration established the nations first cyber security czar to respond to cyber threats against America
  • In the same year the US Cyber Command was established to respond to cyber threats and expand the Nations capabilities in cyberspace
  • 2010 Stuxnet was discovered – one of the most massive computer worms ever.
  • 2012 Flame – even worse than Stuxnet

With all of this going on, please tell me how throughout their campaigns and in the debates how:

  • Neither candidate discusses the cyber threat at any length
  • Romney has failed to even mention the phrase “cyber security”
  • Obama has mentioned “cyber security” and not expanded on it

It is an absolute shame that these candidates flat out ignore the significant threat that is posed in the cyber arena. The “major” newsworthy events that I have mentioned here do not even scratch the surface of how significant the threat is. I didn’t even mention the fact that major defense contractors are being hacked by China.

Yes, I blame these candidates for not talking about this, but I also put blame on the moderators of debates and every single journalist out there who has had the opportunity and failed to press these candidates on this topic. I put the blame on all of those undecided voters in New York who asked about all the same things we heard about all along the campaign trail. I am thoroughly unimpressed right now.

It amazes me that this is not one of the deciding factors of this election. It amazes me that no one seems to think to ask about this. It amazes me that in 2012 abortion and GLBT rights are still being discussed as if they affect the very fabric of our ability to survive as a nation and cyber security is not even mentioned.

Very frustrated right now.

</End Political Rant>


Posted in cyber security, Politics, security | Leave a comment

Building Better Software

I have never been just a Software Developer.  In every job that I have had since I was young and started my own web development business, I have been put in the sales role performing functions from marketing and business development, to sales negotiation and fulfilling contracts. In every sense of the word I have been an entrepreneur. Working as a Software Developer, I never just wanted to write code. I wanted to build effective tools that made business more efficient and to do so I had to understand the business. Perhaps my experiences gave me a bit of an advantage, but it is an advantage that can be learned.

Not too long ago, an old co-worker of mine and I were having a discussion in which he described 3 types of technologists. The first type – your Level 1 technologists are effectively your soldiers. These are the developers that you can give a set of tasks to and they will march forward and write some of the most brilliant code you have ever seen to do exactly what you have asked them to do in the most efficient manner possible. Level 3 technologists are what you call your visionaries. These are the most brilliant minds in academia or a particular domain who are consistently ahead of the game. They are thinking about technologies 5 to 10 years out and are the ones who drive innovation. Level 2 technologists lie firmly in between and  spend a lot of time understanding the business use case and attempting to apply the ideas of the visionaries to today’s businesses cases.

I lie firmly at Level 2 at this stage in my career, and I can confidently say that because of this I write better software than most others at the same stage in their careers. Writing software should not just be about writing code in the fewest number of lines possible. It should not just be about finding the best algorithms for specific problems. All of those things are components of writing software that solves real world problems. We absolutely need those people at the Level 1 stage who can effectively execute when given a task, but in order for those individuals to truly be effective Software Developers they need to be able to understand the business case.

I’ve worked on many projects and one common problem that I have seen is there is always a non-technical requirements team that understands the business case who hands technical requirements to a development team. The end result is usually a software product that the end users did not want. Sound familiar? The motivation behind this is usually because there is a stigma that developers do not know how to communicate with end-users. The fact of the matter is – all of the successful projects I have ever worked on were successful because I went out and spoke to the end users to truly understand their business case.

These projects were successful because when I approached the end-users, I took off my developer hat. I put on the hat of the end-user and fully immersed myself in what they were doing to truly understand the problems they were experiencing. This gave me not only insight into what they thought the problems were and how they could be solved, but also what other problems existed and how those could be solved. As technologists, it is our job to apply technologies to domains to make the life of the end users better – not to show off how you can write a data mining application in python in less that 10 lines. After the immersion session, I took what I learned and put my developer hat back on. What you eventually learn is that most users in across domains have very similar problems, and later you can spend less time trying to understand the problems because you already know them.

It is time to stop building development teams full of only Level 1s who never become domain experts. They have a lot offer to the visionaries who may not be aware of the technical capabilities that exist right there within their own teams.  Additionally, when you have the opportunity to become a domain expert by being surrounded by Level 2s and 3s, you start to write better software. I intentionally surround myself with Level 3s in hopes that one day I will become the visionary type that everyone looks to. In order to build better software, we need to be sure that all levels are tightly integrated and understand the business domains in which they work. Otherwise, the software is being written for the sake of writing software.

Posted in Age of Information, Application Development, General, Programming, Software Development, Tech Ed | Leave a comment

Rackspace Cloud And Domain Transfers

For starters, I actually had not planned on writing this article… Sometimes topics just fall into your lap, and you can do nothing else, but move on them. This one is going to be a little more directed than usual as it is inspired by an event that occurred today. For my more technical readers you can skip over the next three paragraphs to get to the meat of this story while explain a few things like DNS to everyone else.

Here goes a quick crash course on the Internet, IP Addresses, Domains, and DNS. Contrary to popular belief the Internet is not run by a bunch of elves running around putting “cookies” on your machine. In actuality, what happens is your computer sends things called packets across the huge network that is the Internet.  These packets contain data with your requests or responses to and from servers and other devices on the Internet. Now usually you’ll type into your browser (i.e. Internet Explorer, Firefox, Safari, Chrome or the like) and magically get the days latest cute kittens, but how does this work?

Every device on the Internet has something called an Internet Protocol (IP) Address (for the sake of simplicity we won’t get into IPv6 vs IPv4 here today). An IP Address is effectively your online phone number. For instance, the IP address for this website is When a computer makes a request to another computer it is actually using the IP address. But wait, you didn’t type that into your browser, so how did it know how to find me? That’s where DNS comes in. Domain Name System (DNS) is essentially the phone book for your computer on the Internet. Your computer shoots out a request and says “Hey which of you DNS servers can tell me where to find’s phone number?” One of them responds with a “Hey that’s me, his phone number is” Once your computer has the phone number it can appropriately route packets across the Internet to serve you the content you want.

Now let’s look at this from the other side. When I purchased by domain from my registrar, I had to point it at some name servers and say “Hey name servers, you’re responsible for telling the world what the phone number is of the computer I assign this domain to.” Without getting into too many details – A Name records are the records that tell the name servers what the phone number is. So I add an A Name record to the DNS service telling it that is at, which is the IP address of the server that I’m hosting this website on. Typically, when I purchase that domain and point it to name servers, the only account that can change the IP Address of my domain is me by modifying the A Name record. All of this is very simplified, but it gets the point across.

Now that we are all caught up, let’s get to my day. A few days ago, I decided I wanted to use Rackspace’s Cloud Servers for some random development projects and such that I was working on. I’ve used Rackspace in the past, love their support, the management console is great for rapid deployment of cloud servers, full control, prices are great etc… Now I’ve got about 10 domains with Bluehost (great host btw). I wanted to move some of those over to Rackspace so I could just manage domains and servers in the same place. Before I start rambling, let me just allow you to read the conversation I had with Rackspace support earlier today (scrubbed only to protect identity of support member):


Welcome to the Rackspace Cloud! My name is <redacted>, how may I help you?
<redacted>: Hi Tim!
Tim Tutt: Hi <redacted>,
Tim Tutt: I just spoke with one of your other support members about transferring a domain of mine to rackspace cloud servers
Tim Tutt: they referenced a document, and in reading through it, I seem to be missing a step to bind a domain to my account and my account only.
<redacted>: Can you post the link you were provided?
Tim Tutt: It says I need to point to rackspace’s name servers, and then add an A name record in DNS, which is fine, but couldn’t in theory someone else add an A name record pointing my domain to their servers?
Tim Tutt:
Tim Tutt: I’m assuming I’m just missing a step or it’s not documented.
<redacted>: Of course!ß
<redacted>: To answer your question, yes
<redacted>.: you could update the DNS which your current DNS provider
Tim Tutt: right – that was my other option if this turned out to not be a viable solution
<redacted>: understood.
Tim Tutt: so to be clear – someone with another rackspace account could add an A name record before me and point to their servers if I pointed the domain to the rackspace dns servers?
<redacted>: Correct.
<redacted>: That wouldn’t be very nice but its possible
Tim Tutt: Okay got it – Well thanks very much. That makes my decision easy.

Yes, you read that right… Essentially in using the Rackspace name servers for my domain, I am giving the ability for anyone with a Rackspace cloud account to hijack my domain. This completely floored me. How could a vulnerability so obvious exist in a provider that is so well known and trusted? To their credit, I am very impressed that Rackspace knew and were honest about this vulnerability, but it is still one that is hard to overlook.

In talking to some buddies of mine, Rackspace is not the only offender. Slicehost has a similar issue. What is really concerning here is the fact that this is not a hard issue to fix. Imposing a validation step to see if a domain is associated with a particular account is a trivial task.  Additionally, validating user ownership of a particular domain is also a trivial task so the association should also be easy.  It tends to amaze me when such large companies make mistakes like this one.  They have a number of resources at their disposal and lots of technical talent, yet they lack the ability to think about situations that compromise security.

Large organizations focus on implementing best security practices to ensure the safety and security of information and property of their customers, but the fact of the matter is even the most advanced of systems won’t help if there are bad practices in the most simple pieces of the system. Security should be focused on in every aspect of a system not just the major parts that everyone pays attention to. This seemingly small issue is actually a major vulnerability. Hopefully Rackspace and others take care of issues like this one. I’d like to see less simple issues like this out there from major providers and vendors.


Posted in Application Development, DNS, security, Server Setup, Tech Ed, Web Development | Leave a comment

Time For A Change

So as you have undoubtedly already noticed, the site has gone through a major facelift. It took me all of 5 minutes to make the decision when I started searching for new themes. Ran across this one over at and thought it was pretty amazing. Quick install, and boom I’m done. I think I’ll stick with this one for a bit. Not the only technical change I’ll be making, but more on that later.

You should all also expect me to pick back up on writing a lot more starting soon. I’ve got a lot of posts that I’ve had in draft for a while, that will be finished, and many other ideas in the works. Focus will remain largely on the technical side, with some of my other rantings here and there. We’ll also have a few special guest writers, but again… more on that later.

For now, enjoy the new theme. Re-read some old stuff, and be on the look out for the new things coming.


Posted in Uncategorized | Leave a comment