May 17 2008

toebot

You can do things the right way or realize you are an idiot!

Alright, I will try not to be so harsh through this post but the fact is you can either do things the right way or you have to face the fact you are doing them wrong.

And if you are doing things the wrong way on purpose, well, then you are an idiot.

This came to me while reading another of Veerle’s expert posts and having just visited Digital FAQ.

I will start with the “offending” site. I say that loosely because at least it is not a site about how to properly use markup, or something similar. Digital FAQ is an excellent resource and should not be considered anything but that. So take my critique of one small flaw as that — a critique of one small flaw.

When you visit the site you immediately see “Site optimized for Internet Explorer and 1024×768 resolution.”

There is so much wrong with that mentality it is hard to know where to start. However, the first thing that comes to mind is that there are several more browsers than Internet Explorer. Not only are there several other browsers but a few of them are considered mainstream!

No smart web designer, developer, or architect would design a system that accommodated only the most popular perceived browser. I say perceived because it is simply not the most popular browser anymore.

Before you go throwing browser statistics and usage pattern numbers at me, let me clarify.

There are browsers out there that mystify, confuse, or just plain cause people headaches. My mother is one of them. Just looking at Firefox or Opera begins to confuse her and fill her with questions.

As power users we may look and see instant similarities — but the average user does not. One of the number one complaints I hear from Internet Explorer users is that they simply do not like it for whatever reasons, but they do not have the time to invest in learning something else.

This does not sound like a popular alternative but one that is forced upon people by convenience.

Now if you would like to dig out the numbers make sure to think about what I have said. So when you see that there are several alternative browsers that are steadily gaining in “popularity,” know that is only the story you hear, only the numbers that get sampled, and only those users who are willing to put forth the effort to learning and utilize something better.

Having said ALL this, do I really need to discuss different resolutions? Different sized displays? I will refrain, but the numbers in all these situations are evident. No statistics and fact sheets are needed.

Stay away from designing for one browser or resolution. It is quite simply put the wrong thing to do. Therefore knowing that and continuing to do it makes you or anyone else an idiot.

Wait a minute, I was supposed to not be so harsh. Well, let me explain that bit too. You have created a website or page for 2 reasons:

  1. You want someone to share in the information you have.  Take part in its discovery.  Et cetera.
  2. You must make a living off of what you create.

So you see whether or not you are doing something for a personal site or for something professional you really need to be open to allowing the web to be traversed freely if not expertly.  By that I mean achieving the widest possible audience.

Don’t get me wrong now.  If you are throwing some stuff together for you and a few members of your family to view, then so be it.  But anything beyond that is a futile and inefficient endeavor.

This brings me to my final point.  Start off on the right foot!  If you have already begun learning ineffective and haphazard methodologies, well, stop!  It is fairly straightforward — STOP!

So I invite you to Google these terms and definitely check out Veerle’s post on this matter, because she very swiftly and with precision lays out several key terms, books, and ideas for you.

Terms to Google:

  1. Web Standards
  2. Semantic markup
  3. CSS shorthand

And know that the W3C is quite literally the authoratative source on all things semantic web and web standards.  However, if you are like me, you will have a difficult time absorbing the material there (highly technical at times).

Therefore, feel free to peruse other sources.  Just make sure the focus is on one thing and that is the three main terms presented above.

No responses yet

May 16 2008

toebot

Everything in Moderation

Let me first say that I am NOT critizing Veerle’s comments on Flash nor commenting on Flash’s usability.

In this article Veerle discusses that Flash is not a suitable replacement for valid semantic markup and efficient use of CSS — and I wholeheartedly agree.

If I’m working on a project where Flash is involved I try to think in terms of user experience and usability first. I will question the purpose: do we need Flash to be able to do this or that? If we have a choice and we choose to use Flash will it enrich the user experience? Will it improve usability?

This is a perfectly valid assessment, but I feel it needs some clarification.

Flash can play several parts. It can:

  • Detract from usability
  • Add to usability
  • Offer no change either way

If the second point is accurate then Flash is a great choice!  By doing something in Flash that could not be done with markup, CSS, or JavaScript and it increases the usability at the same time we see a clear case of a win-win situation.

However, if the third point is also accurate then the choice to use Flash becomes purely aesthetic in fashion and ultimately up to the designer.  If it does not add or detract from the end-user’s ability to access, use, or understand the content, then we again have a win-win.  Well, assuming it has a nice visual design.

So enriching the user experience should not be the ONLY thing to bear in mind when considering whether or not to use Flash, but whether or not it reduces usability.

And in case it is not clear:

Usability = Accessibility + Functionality + Form (where Form = Aesthetics + Visually Appealing Content/Design).

If a site, page, application, or rich media experience is not accessible and functional it is simply not usable.  In most cases it could be argued that if it is ugly it is just as unusable — and what do you know?  Those cases are right.

Everything in moderation!

No responses yet

May 14 2008

toebot

JourneyEd and Microsoft DreamSpark

Filed under College, Programming

Microsoft, in another magnanimous act, is offering SEVERAL professional editions of its most popular developer software to students for free.

No, seriously.

No, I am not talking about the Visual Studio Express Editions.

If you have any further doubts just visit the Microsoft DreamSpark site. I think it is fairly pointless to repeat a bunch of information (a blogging about another blogging or article), so I will stick a few points in for brevity (a micro-blogging).

So:

  1. Sign in.
  2. Verify you are a student.
  3. Download.

Then enjoy:

  1. Expression Studio
  2. Visual Studio 2005 Professional Edition
  3. Visual Studio 2008 Professional Edition
  4. Windows Server 2003 Standard Edition
  5. SQL Server 2005 Developer Edition
  6. XNA Game Studio 2.0
  7. XNA Creators Club Online

Darn!  What if my university or student organization is not listed?  Well, if you have any kind of partnership with JourneyEd through whatever school you are enrolled in, just follow JourneyEd’s student verification process.  You will:

  1. Visit JourneyEd through your alliance link.
  2. Add “MS DreamSpark” to your cart.
  3. Checkout.
  4. Verify you are a student which is simple.

    If you came from your school homepage JourneyEd will detect that.
    If not, it will ask you to login to your school homepage and come back.

  5. Checkout.
  6. Wait for your link to the DreamSpark site.  Which by the way, didn’t come until my 2nd call to JourneyEd asking where my e-mail was.  My Comcast e-mail didn’t work.  Nor did our EDU addresses.  *shrug*

And that is about it.  You will be verified and sent straight to the DreamSpark site.

OK, maybe that was not as brief as I previously thought.

No responses yet

May 13 2008

toebot

Inform is part of Information

Since I recently discussed (ten minutes ago) not hiding stuff, or if you have to at least notify your users of the fact, I thought it appropriate to say this:

If you are going to take down a link — LET ME KNOW!

Yesterday I visited http://www.waldenu.edu/c/10909.htm to check if they had any online Information Technology courses.  I found http://www.waldenu.edu/c/Schools/Schools_13788.htm, which was supposed to lead to “B.S. in Computer Information Systems.”  Instead I was presented with a 404 page.

And of course today the link on the “10909″ page is now gone. If we view the source of that page we see the link is there — it is just commented out.

If you are smart enough to design applications that notify you of problems you should be just as smart in notifying your users.

Tell me that the link is temporarily unavailable.  Better yet, tell me when it is coming back online or where I can find the information in the meantime.

Walden University has lost out on a student simply because I am unwilling to check back every day to check for links that have magically disappeared.

NOTE:  As of May 20th, 2008 the Walden University llink finally reappeared.

No responses yet

May 13 2008

toebot

Disappearing Menu Items = Chaotic Behavior

It really is a simple concept, but seems to be one all too often forgotten.

In any application it is necessary (not optional) to keep all menus intact.  If an option is not applicable in a given scenario, then disable it.  Do NOT hide it.

If your application has grown to massive proportions as is the case with:

  1. Blender
  2. Maya
  3. Photoshop
  4. The GIMP
  5. Dreamweaver

Just to name a few — then you need to consider an alternative such as the splash screen or the first page of the help manual, discussing the fact that menus and or their menu items may disappear but that it is simply a context issue.

This enables the user to realize they must not be in the right context.  ”Filters” and “Effects” are not working properly?  Then you probably do not have anything on the canvas selected or you have the wrong type of object selected.

Leaving it to the user to guess their dilemma and its solution is not appropriate.

No responses yet

May 12 2008

toebot

URIs – Don’t Go Overboard

Filed under Usability

Why Am I Ranting?

It amazes me how often stale topics are rehashed into new concepts simply because:

  1. Everyone was too lazy or simply unwilling to adopt it.
  2. It was not clearly explained or properly reinforced.
  3. Someone has a stroke of (stale) genius and does something great with it.

We first saw this happen in the last couple of years with the “Web 2.0″ and AJAX concepts that were by no means a new concept or even a new technology.

So what exactly is so terribly thrilling about this article that discusses using “awesome URLs?”

It is quite simple really.  Users love easy interfaces.  And that is really all that matters when we talk about usable structured URI schemes.  Simple, easy, and affectionate URLs.

Affectionate URLs?

Yep, affectionate URLs.  By this we mean the kind of URLs that ANYONE can remember.  Let’s take a few examples of some simple and extreme examples.

http://www.developerfusion.co.uk/show/3821/

This lovely URL is simple and very intuitive.  But intuitive to who?  To people who know about Developer Fusion?  Those who work on the back-end of Developer Fusion?  Programmers in general?  Web Developers?

Does that not cut out a LOT of possible users?  Granted, we are not talking about major application-threatening obstacles here — but it is the overall approach that sweetens the interface, not the complete disregard for these subtleties.

http://www.roscripts.com/Pretty_URLs_-_a_guide_to_URL_rewriting-168.html

OK.  Let me take a step back here and truly see where this URL went wrong.

The first thing that springs to mind is what in the world was the author of this particular page thinking?  How exactly does one set out to write a mod_rewrite article on “pretty URLs” and end up with a URL like the one above?

It actually is not THAT bad.  The problem comes in with the “168.”  What is that for?  What does it tell me?

If I want to share that URL with a co-worker from memory, how do I do it?  The naming is fairly straightforward, you just need to remember spaces are underscores.

And there is the “dashNNN.”  *shrugs*  I can only assume that “168″ is the unique identification number of the article specified in a database.  Still a mystery as to why it’s tacked on to the end of the URL though.  Anyway… moving on.

http://www.somecoders.com/2006/07/pretty-urls-using-htaccess/

All right, now we are talking!  Because let’s be honest with ourselves, there is only so many unique names someone can come up with.  And depending on the mechanism you utilize to serve these URLs, it can become quite messy.

This is why your application should ALWAYS manage its own URLs.

So simply remembering an article from July of 2006 called “Pretty URLs Using htaccess” is all there is to it.  Everything be lowercase makes it that much more simple.

Is that really as clean and affectionate as we can get it though?  I recall reading somewhere among my 1,000+ list of feeds where someone was extremely impressed with their URL scheme.  Sadly, I have forgotten the article so I will have to wing it a bit here.  The point is that I was extremely impressed with their idea, although it was nothing groundbreaking, nor even that innovative.

http://show.me/the/money/stocks
http://show.me/the/money/bonds
http://show.me/the/money/taxes

http://show.me/the/programming/perl/regular_expressions/

This is the official trump of all URI schemes — ever.  Well, if *.me was a valid TLD that is.

The point is the more you make a URL stick in someone’s mind, the more affectionate that URL becomes.  The kind of URL that just warms your heart knowing that it is simple, effective, and you do not have to look like an idiot (like I just did) when you cannot remember a particular URL.

The prospect of designing an effective mechanism by which to deliver URLs is definitely beyond the scope of this meager article.  Just remember — this is but one step of many.

EDIT:  It may seem redundant, especially in lieu of this article’s focus on “old material,” but I just had to add http://www.w3.org/Provider/Style/URI.

No responses yet

May 09 2008

toebot

School’s Out and I Am Reborn!

Filed under C#, College, Rambling

Yep, that’s right.  I graduated April 8th — well, finished school that is. Graduation isn’t until August.

I am sure it is completely evident, but here it is again in case you missed it.

I simply hate blogging.

I have tried so many times to run a successful blog and it simply does not pan out.  By successful I do not mean one that is dependent upon advertising revenue, but one that simply sees a post once in a while.

Long story short I have decided that this blog is to have a different purpose.  It started out that I would post my happenings in C#, but inevitably became my rant zone for my idiot professor who spent the majority of his time taking comments personally.

When he was not doing that, he was busy making comments that generally pissed a lot of fellow classmates.

We all agreed that he, the class, or perhaps the university — I would vote all three — was simply too pathetic to glean anything useful.

Since I found myself bitter and angry, I gave up blogging about it.

Instead, this will be the home of my random thoughts and activities in interfaces, usability, and functionality.

I fear that I may be one of those who are far better suited to teach, than professionally exert my knowledge.

If that is the case, I sincerely promise to deliver the best possible ideas and concepts that randomly flit through this damaged brain.

No responses yet

Feb 16 2008

toebot

Solicitation during class, by the professor no less

Filed under C#, College, Programming, Rambling, Rant

Say what!? No way!

Yes way!

During my class last night StudentA (for some strange reason) stroked the professor’s ego by saying that he should have wrote the book, upon which the professor replied:

Student A: They should have just paid you to write the text
Professor: (I have my own C# text out there Student A)

Upon reviewing the class transcript I see that it was because the idea behind the “static” keyword finally sunk in for Student A. It was then that they fully understood why you call:

System.Console.WriteLine();

By prefixing the WriteLine method with Console, rather than instantiating an object of the Console class.

For this a student gushes about how well the professor is teaching? That he should have wrote the book? All he did was explain how static works!

*sigh*

No responses yet

Feb 14 2008

toebot

Is nitpicking a requirement of a PhD?

Filed under C#, College, Programming, Rambling, Rant

My professor constantly avoids any and all questions that involve anything beyond the simplistic. For example, one time he tells me:

I feel really bad because if this is your last term as a programmer, then you should have been through 3 courses in either VB or Java here. Which means then you really should already have the knowledge base for this course – you just don’t have the C# syntax (which is nearly identical to Java). Honestly, you’re the bulk of the reason why I’ve added in these ‘extra’ programs – because I think everyone else is going to be having a tough enough time with the regular projects. Hopefully I’ll be wrong about that, but having taught this course more than a few times, that’s just been my experience.

Yeah, you heard that right. He feels bad because I should have had previous programming classes to prepare me for this course. Granted, I did have an Introduction to Programming about a year ago, but it was basically a “how to use Visio” course. It didn’t teach anything worthwhile (unless you consider Visio that worthwhile).

So, I decide to continue to push my understanding of the language and ask about assemblies, specifically this (in a discussion board thread that he previously ignored):

ME

I didn’t see a necessity to pollute the global namespace with a using directive for one qualification.

And I’ll be honest, I have no absolute clue that it would pollute the “global namespace.” That is basically a carry-over from my work in client-side programming and memory resident applications that would normally suffer greatly the more you “polluted” the memory allocation.

Well, PROFESSOR? Does it increase memory whatsoever? I’m going to say, “No.” It probably doesn’t because this is a compiled language, then again, I’ve no clue how it may poll the framework. It might request that System be looked up each and every time the program runs or it may statically link in some information pertaining to the specific calls it requires. I have ZERO clue how assemblies are resolved.

PROFESSOR

For this course, it’s quite appropriate to have a ‘using statement’ even if you only use that reference one time – in fact, it’s nearly expected. For example, it’s fine to have:

using System;

public class TestMe {
public static void Main() {
Console.WriteLine("hello");
}
}

The rest of the discussion here is well beyond the scope of this course.

Say what?! How in the world did that answer ANYTHING I said?! In fact, the response didn’t even make sense.

And if that simple bit of information is outside of the scope of this course, yet it is supposed to be the 4th in a series of programming courses offered — WHEN exactly would it be in scope?

I am convinced my professor is an idiot.

Oops, almost forgot the nitpicking. I purposely did the wrong exercise to see how it would be handled (it was an extra, nothing against my grade) and this was his response:

PROFESSOR

The problem that I see in the text says:

“Show the output for each of the following data types: …”

The program code that I see here has 3 ints, a float and a double. It does some math and then outputs a single value (the double).

~~~~~~~~~~~~~~~~~~~~~~~

Now, was this first problem a real-world problem? Certainly not. It was quite abstract – BUT – it does bring up a great point. And this was something that I mentioned near the end of our first meeting together:

“The thing that folks tend to lose the most points for in this class is for not following directions.”

And while the problem itself might not be ‘real world’, following directions is definitely something that’s about as real world as it gets. I have this long, drawn out story that I tell to seated students about working your first job.

The short version is that your boss says they have a big client who wants a spreadsheet program. You want to impress your boss so you add all these extra features. At the end, you have a program that’s the best word processor EVER. It’s going to put Word out of business. The problem is – your client wanted a spreadsheet and you end up getting fired.

Ok… a little unrealistic, but the point is that reading and following directions is critical for a programmer. After all, what does a programmer do for a living? They write instructions for a machine.

Again, I feel bad posting this here — hey, you’ve taken the time out of your life to write an extra program. However, this is really part of the reason why I’ve created these ‘extras’. Because there’s so much to learn and really the best way to find out is to actually write a program and then get feedback on it.

Overall, I think it’s wonderful that you were able to get this program working — but I’ll challenge you to try to slow down a bit and pay close attention to what the problem is stating. This is going to be critical in your Projects this term as I’ll always grade based on the Project specs.

Thanks!

ME

Thanks for that lengthy response — I think.

I am worried about something small — I’m not sure if it was the fact that I did the wrong exercise, or the fact that you didn’t catch it.

PROFESSOR

Well, to be fair to myself, I do not have 100% complete knowledge of every single problem that is written in this textbook.

I sincerely apologize for not being better at catching the fact that you did a different problem.

All of my comments still apply to everyone though. Reading and following directions is critical.

Um… to be fair to me should I not have a competent professor in the field I’m studying? Why do I have to have the Gomer Pyle of C#?

So, I post the right exercise:


2. “Initialize each variable with an appropriate test value.”

I figured this meant no values outside of the types natural range. So I pushed the limit and casted a float value to my integer variable. (Just because I wanted to use 12345.12345 in each example. I know… silly…)

namespace IT254_01_Unit2_Extra
{
	class Program
	{
		static void Main()
		{
			int varInteger = (int) 12345.12345; // casting so I can use 12345.12345
			float varFloat = 12345.12345F; // no implicit conversions
			double varDouble = 12345.12345;
			decimal varDecimal = 12345.12345M; // no implicit conversions

			Console.WriteLine("\r\nFormatted with 0 digits:");
			Console.WriteLine("varInteger:\t{0:C0}", varInteger);
			Console.WriteLine("varFloat:\t{0:C0}", varFloat);
			Console.WriteLine("varDouble:\t{0:C0}", varDouble);
			Console.WriteLine("varDecimal:\t{0:C0}", varDecimal);

			Console.WriteLine("\r\nFormatted with 2 digits:");
			Console.WriteLine("varInteger:\t{0:C2}", varInteger);
			Console.WriteLine("varFloat:\t{0:C2}", varFloat);
			Console.WriteLine("varDouble:\t{0:C2}", varDouble);
			Console.WriteLine("varDecimal:\t{0:C2}", varDecimal);

			Console.WriteLine("\r\nFormatted with 5 digits:");
			Console.WriteLine("varInteger:\t{0:C5}", varInteger);
			Console.WriteLine("varFloat:\t{0:C5}", varFloat);
			Console.WriteLine("varDouble:\t{0:C5}", varDouble);
			Console.WriteLine("varDecimal:\t{0:C5}", varDecimal);
			Console.WriteLine();
			Console.Write("Press any key to continue... ");
			Console.ReadKey();
		}
	}
}

He responds with:

Sounds fine. I'm not sure that I totally understand why you cast a double into an int, instead of just storing the int. Yes, I see your explanation there, but I think that was part of the deal with having 4 different variables and was probably an extra line of text that wasn't necessary.

Oh, and keep in mind that often times with these textbooks, the author writes the text and someone else (maybe multiple someone elses) write the problems, summaries, student materials, etc, etc, etc. Not really that big of a deal, but its more than likely true. (See you never know what you might learn here)

So of course, why the heck are we learning from this 5 year old book in the first place — you know, the one my PROFESSOR told me was not really all that old and was a great book to learn C# from?

And of course that brings me to my final and most important point of my post — why can he not stop nitpicking? I mean, I explained that OCD frequently makes me do neurotic things and I've explained inline and in comments that I just wanted to, for no reason whatsoever. The only thing this moron can do is try and justify it in his own mind?

He cannot answer a simple question about C# coding conventions, but he can nitpick every moot point he sees fit?

I think my professor is an idiot.

You know what? Since I am rambling... let me tell you this final story. It relates to him saying that I should have had more programming classes before this one, but offers nothing in the way of actual assistance or guidance — and coding conventions just reminded me of it.

I asked if he had any C# design patterns or specifically a way to lay out my projects in a way that made sense and were easy to revisit after months or years of not perusing the code.

His response:

Are there any design patterns that I recommend? Yes, I'd recommend that you learn the different patterns and choose the most appropriate for the situation at hand. A good text to use when learning these is "Design Patterns" (Gamma, Helm, Johnson, Vlissides) ISBN 0-201-63361-2.

I am so letdown at my college's offerings and staff at this point, I feel as if I have wasted an entire 2 years of my life and over $30,000 USD in tuition.

Did I mention I think my professor is an idiot?

No responses yet

Feb 01 2008

toebot

Second omen. Good or bad? You tell me.

Filed under College, Programming

OK, yet another area of slight distress has popped up.  As with most of the curriculum and overall coursework I’ve received, completed, and submitted, I feel as if it is not being transferred to me by competent hands.

I had my first C# class tonight and here is but an excerpt from it:

PROFESSOR: So the next question I usually get is, “C# 2003, 2005, or 2008?”

PROFESSOR: Let’s start from the first one – 2003

PROFESSOR: This is the version that comes bundled with your book.

PROFESSOR: I believe this is a free trial for Visual Studio, which is a good thing.

PROFESSOR: However, this is a trial so it’ll eventually expire.

PROFESSOR: Then there’s 2005.

PROFESSOR: Now I’ve used this in the past for this course and have recommended that folks use it here as well

PROFESSOR: It’s pretty much the same as 2003, but some things are a bit easier

PROFESSOR: The problem is that then your screen won’t match what it shows in the text, which is a bit of a problem sometimes

PROFESSOR: And just recently we got the chance to get 2008

PROFESSOR: Now this thing was just released in the past couple weeks, so I haven’t really had a chance to play with it very much

PROFESSOR: My guess is that for the purposes of this course, it’s probably about the same as 2003 … but I can’t promise anything

StudentA: If we want 2005, can we get a demo for free?

PROFESSOR: Either way, if you do choose to use 2005 or 2008, be aware that you should bother buying it.. at least not yet

PROFESSOR: Right StudentA… here’s the deal with that

PROFESSOR: Microsoft provides their ’Express Editions’ to us for free!

PROFESSOR: And again, for purposes of this course, the Express Edition is more than enough

PROFESSOR: So if you’re interested, and willing to work with something that looks different from your text,

PROFESSOR: then you might consider downloading the Express edition and using it for this course

PROFESSOR: I personally have all the versions on my machine (since Visual Studio 6!), so they all co exist just fine and

PROFESSOR: I’m able to handle any version you choose to submit to me

PROFESSOR: Ok, let me pause and see what questions you have

PROFESSOR: Uh-oh… is anyone still here?

StudentC: yes

StudentA: Yeah, still here. No questions

PROFESSOR: Ok good… one thing that worries me is when I ask a yes/no question and I don’t get a response.

PROFESSOR: I want to be sure you’re still here and participating

[[After having to reconnect because of server latency.]]

ME: Couple of weeks?

StudentB: I’m still here and I have no questions.

PROFESSOR: I also need to apologize for all the ’blue text’ tonight… there’s just a lot of info to go over

PROFESSOR: I’m sorry ME, can you rephrase your question?

StudentC: understandable

PROFESSOR: Well.. no matter which version of C# you choose to use for this class

ME: I was wondering about what you said about VS Express 2008 being released only a few weeks ago.

PROFESSOR: Yes, that’s correct.

PROFESSOR: The full release just came out

From what I remember, the 2008 Express Editions were talked about publicly as early as third quarter 2006, but officially released to the public fourth quarter 2007.  See here for example.  (And let’s not forget that Microsoft’s “RTM” means if it doesn’t blow up your computer it’s the product you’ll be stuck with for a while.)

Then on November 19th, 2007 the pre-release of Visual Studio Express and its many incarnations were released.  There was definitely a bit of buzz about it.

So am I missing something fundamental or does “a couple of weeks” not equate to well over two months?

I think my final point is basically that because the newest release is dubbed “2008,” then everyone, my professor included assumes it must have been concocted on January 1st, 2008.

Should I be worried?

2 responses so far

« Newer Posts - Older Posts »