Newer posts are loading.
You are at the newest post.
Click here to check if anything new just came in.

November 02 2013

13:00

Noupe’s Favorites 44/2013: The Best Links of the Week


  

If you follow our accounts in the various social networks out and about, you’re certainly aware that we are posting loads of additional content there. Be it links to freebies, tutorials, interesting articles or other things worth mentioning. We dig up a lot in the widths and depths of the web. And we do actually share content, that hasn’t been created by our own team. One of these days we got a friendly email by one of our dear readers, asking us to not only publish these additionals in the social networks as this reader as well as many others are refusing to get engaged in socializing. In times of Prism and Tempora we can perfectly understand this approach. So we decided to curate the best links of each past week into one weekly article, starting today. Here you go…

June 11 2013

09:30

Developer Thoughts: Four Lessons We Learned While Creating our First WordPress Plugin


  
wordpress-hate-main Building our first plugin wasn’t an entirely smooth process - anyone thinking of doing something similar should consider several things before they get started. Below are the lessons we picked up.

July 21 2012

13:00

How to Get the Most out of Your Design Degree

Studying design might not be the hardest thing a person can do on Earth. Studying design is actually quite easy – it’s very practice-oriented, every piece of theory is applied and there is no wrong answer. If you have good reasons for everything you do, there is no way somebody will be able to tell you that you are wrong. Hey, it might actually be one of the funniest degrees possible.

However, getting the most out of your education is something not many are good at, and especially in our business where everybody thinks they know something, finishing high and then getting a good job is something only a handful of people from each class manage to do throughout their life. So you might ask yourself how do others manage to get that dream job of theirs when they have the same education as you – the same degree that hasn’t landed you anything more than poorly paid jobs and difficult clients to handle.

Like any other business, you only hear about the successful ones, but the majority of people in the web industry are the ones who don’t really make it anywhere. Focusing on education is the only way to avoid being one of them and to have a successful design career.

There are two kinds of education in the industry: a traditional one and a practice-oriented one.

Traditional Design Education

This is the kind of education that was really popular in the industry ten years ago. Since now we have the opportunity to get a hands-on experience right in school, it is not as popular anymore and many people prefer to go the route of a practice oriented education. The degree might not even be too helpful.

This kind of education is not similar to the real world environment. It is based on lectures and grades which are most of the time subjective. This kind of education is usually good for programmers, as it will offer them a rigid, serious education which will prepare them for the real world. But this won’t teach you how to deal with clients and it won’t tell you anything about running your own freelance business and other day-to-day aspects of a web design job.

Image by Abacus

This kind of education might make you a good designer with a very good eye for coding, but this is not your goal. A web designer needs much more than just knowing how to properly code. If coding is all you think about, you should go for a career in web development. Although many don’t think about this, web design and web development are two different careers. You’re not in for the geeky stuff.

Moreover, a university teacher might not even know much about the field. I bet there are hundreds of freelancers out there (without a degree) who know more than the tutors do. The things they teach are day-to-day routine for freelancers all over the world. The curriculum is usually updated once per year in the design field, but this is not enough. Everything moves and changes so fast that what you teach today might not be relevant at all to students next semester.

Having such an education is not a guarantee that you will get a job. In the end, people with the best portfolio get hired first. A very technical and book-based education might not give you enough free time to work on different projects. By taking this education you might be technically bright, but you are still at a clear disadvantage.

Practice-oriented Education

This is very popular today. It is what I did and what many other freelancers out there decided to do as well. The main difference between these two educations is that the books and theories are not as important here. Sure, marketing and communication theories have to be learned and Gestalt and design laws have to be considered all the time, but the education is more similar to art than to math. In the end, design is art.

This type of education allows your creativity to flow. It allows you to collaborate with different clients (on school projects) and it also gives you enough time after school to do some freelancing and build up an impressive portfolio.

When collaborating with clients from here, you have a huge advantage over the real world. You are allowed to make mistakes – this is unheard of out there in the real world. No mistakes are allowed when money is involved. When you are still in school you are allowed to make them – and the good thing is that you can learn a lot by looking back at all the mistakes you made.

Image by CELALTEBER.

This type of education can only be describes as Learning By Doing. However, this kind of degree has a disadvantage as well. Being generally more free than the other type, it also requires a lot of effort from the student. If the student lacks motivation, he will not achieve much. This kind of education usually gives you the basics and sends you out there to learn more on your own. This type of education is solely dependent on what the student puts into it. If you’re lazy and don’t work on many projects, you won’t have as good a skill set as someone from the same class who takes on a variety of projects and treats them like paying clients.

How to learn?

One of the main abilities you will need if you want to go through a design degree is the ability to learn. You need to be able to find yourself the best way to get work done and to soak up new information. Pushing yourself is a skill not many are able to learn – but if you do it, then design will not be a challenge for you. In this industry the only way to survive is to continuously improve and learn. Three years ago HTML5 was not even released. Now, together with CSS3, it is slowly replacing Flash. That’s how fast things change.

As mentioned earlier, in a practice-oriented education the school will only give you guidelines. It will offer you some structure to – but it is up to you if you will actually make your time there worth it.

Is the degree necessary?

Definitely yes. You don’t need school in order to perform freelance design gigs. You might even find work in a small advertising agency without a degree, but you’ll need an impressive portfolio. However, even with the most impressive portfolio out there, the education might be the one which will in the end make the difference between two outstanding candidates. Having the degree offers you some clear advantages. It will not replace the portfolio – these two need to work in collaboration.

In order to get an interview at many companies you need a degree. The portfolio usually never gets noticed before the “education” field. Your CV might end up tossed in a shredder because you don’t meet the minimum requirements, even if you have an outstanding portfolio.

Image by University of Denver

An education offers something else as well. It teaches you how to build a network and gives you the basics of design laws and theories. It allows you to fail without serious consequences, like losing a job. It gives you invaluable feedback through your tutors. It might not seem like it, but working in a school environment is more or less the same as working out there in the real world. So you will get that from school too.

Which is your career path?

Many people go to study something just because they are passionate about it – but do not really consider what exactly they want to become. This happens even more often in the design industry, where the limit between graphic designer and web designer is almost invisible. Moving from web to graphic is very common nowadays, so you could even say there really is no limit.

But starting a design education with a goal in mind will ensure that throughout the years you will stay focused. Spending years to take a design degree only to realize afterwards that you like graphic more than web is a shame. Instead of focusing on both, you could have used all the available opportunities to focus on graphic and become better at what you actually like.

Image by Jim in Times Square

Now don’t get me wrong. Switching careers or departments isn’t always bad. But knowing from the beginning what you really want to become might give better results in the end.

Sure, it is hard to pick a career when you are 18 and ready to go to study. But today we have a world of information only a click away. Doing a bit of research will usually lead you to the necessary conclusions.

Knowing that you want to be a motion designer for example will help you right from the start. You can make a list with all the things that are required for such a job and, during school, focus mostly on them. You don’t want to get out as a Jack of all trades and Master of none.

Prices

In some countries, especially Europe, this is not a concern for students. Education is free for everybody in countries like Denmark and free for the ones with good high school grades in other top European societies. But in the US you need to think of how much money you can afford to spend on education. A design degree can be pretty expensive, especially with the necessity for sudden changes in curriculums.

Student loans are something many people make use of in the US, but you need to seriously consider if you are ready to go into debt for a design career. In case this is not something you are 100% sure of, don’t spend too much money on it. Start with learning a bit from the internet and doing some freelancing for a period and if it is what you believed it would be, then go to school. Otherwise, try to find another career that suits you better.

Now I don’t know much about US schools, colleges and universities, but I am quite sure that there are junior colleges, state schools and probably more expensive private schools a student can attend. Do your research and make sure you pick the right one for your situation.

When thinking of finances, considering the software and hardware a designer needs to buy is something important too. If you are a freelancer, you will have to buy every piece of software yourself – on top of that expensive computer that can render a video or a 3D scene fast enough. If you are a student you can usually get huge discounts, but it is still a lot of money to be spent by somebody who doesn’t really make much.

As said earlier, the internet is the cheapest school you can attend. There is so much information out there that you don’t even need school to have a successful career – from a technical point of view. You can learn every programming language; every design law; Photoshop and Premiere Pro; literally everything. Many online courses do offer discounts for young people and are usually reasonably priced. This is the place to start from and get the basics if you can’t afford to pay for a degree.

Continue learning

I’ve mentioned earlier that the only way to have a long-time successful career in the design industry is to learn all the time. New technologies appear every year and the more you know, the better you will be rated by your employers. Thinking that once you got that so-much-wanted design degree you are done with learning is the biggest mistake you can make. The hard work only begins after you get out there on your own.

The degree is basically just a piece of paper, so normally you could do a lot without necessarily having it. But in my opinion, as stated earlier, a degree is required if you want to have a successful career in the design industry, especially in a company. The advantage over other educations is that the grades do not really matter. What matters is that you have a good portfolio. An employer will overlook your grades if you have delivered quality projects on the side.

Networking

Networking is also something very useful in the industry. If you work as a freelancer, many of the jobs you will get will be through recommendations. And I highly recommend you build a strong network. It will help you throughout your career.

Image by svilen001

Bottom line

Having a solid design degree is definitely an advantage, but it doesn’t mean everything for an individual working in the industry. At the same time you need a very good portfolio in order to impress the potential employers and prospects. If you are not sure about how much money you want to spend on a solid education, then the internet is the right place to start.

What do you think about this topic? Are you one of the ones with a successful career even if you have no degree? If yes, how did you manage and what tips do you have for the ones who wish to do the same?

April 01 2012

11:00

How To Grow as a Designer by Building Your Own Network

Being part of a web design and development community offers you many possibilities and chances for self-development. Each one of us knows about these communities and, at some point in time or another, wished or even was part of one of them. Knowing other individuals in your industry is something I recommend to everybody, as you can get a lot of help from such experts. Communities are not only created around people, but also around offline web design agencies, which give you even a better set of possibilities and a different network that you can use during your career.

Design, development, social media, marketing or blogging (part of the web in general) are industries evolving a lot lately and this will not stop soon. Working by yourself was an option more than five years ago, but today things have changed and many of us have started to outsource in order to finish projects faster and earn more money. Being part of such a network or community can help you develop your skills and bring new people around you. In this article I will talk about why it is important to keep yourself close to these networks and in the end we will take a look at some of the well-known ones as of this period. Moreover, we will see if building your own network is an option.

Image by CubaGallery.

Main asset

A community is important because it brings us all together and this helps us to grow individually and as a group of experts. Fashion, football (and sports in general), computers and other devices – some niches off the top of my head that enjoy large support communities. And we, designers and developers, have that too.

Communities are important and helpful for personal development because they feature tutorials, forums, posts, advice, tips and so on. If you do not have a university degree, there is a high chance that all you know about designing is due to one of these communities. People share their knowledge, often for free. As a famous advertising campaign says, sharing is caring. It seems we all care a lot about each other in this industry.

A good example could be the articles we post here on 1WD. We take our time to write articles for you, while others from the community come and share even more in the comments. This is one of the ways to learn a lot – by reading and interacting with people from your own industry.

The trick of our field is that everything evolves and changes fast. If you don’t pay attention to the trends, you will find yourself knowing too much about old stuff and not enough about what is really important. Spending money all the time on books would be ineffective for us, as many books get renewed and improved two-three times per year, due to the industry advancing so fast. In order to avoid spending so much money, you can always turn your attention to networks and communities on the internet.

If you look at it from another point of view, being part of design communities can get even more helpful. Try to look back and remember how many frameworks, resources and tools you’ve used – many of them provided by these communities. And then try to remember how many of them were free of charge. Now imagine how much time or money you would have to spend to use those things if you needed to develop them yourself or to hire someone to do it for you. And let’s move our attention to the things that are not free. Even the premium resources are delivered very cheap compared to the market price; all this thanks to the design and development communities.

WordPress, Boilerplate, CodeIgniter, Drupal, GIMP, Inkscape – how many times have you used these open-source tools? It may come as a surprise to you, but all of them were developed by these communities at some point or another. Now don’t get me wrong, I am sure WordPress is a money powerhouse today, but looking back in the past, it all started as a community project.

Image by steven w.

And to top it off, communities are helpful at something else as well – and that is probably the most important asset. Getting recommended there happens quite often and outsourcing happens most of the time inside these communities. Only if and after not finding someone suitable, freelancers use third-party websites to search for individuals to work with, otherwise everything starts off from communities like forums or blogs.

Types of networks

All of us can create our own communities or networks, but most of us prefer to use the ones already populated with experts and people with years of experience in the field. If you are a freelancer developing small jQuery sliders, you can offer them on your website, which is likely to bring you some success, or to collaborate with a huge network such as Nettuts, which will probably bring you a lot of referrals and possibly even money.

However, I am sure all of us start from social media. We share lots of interesting links on Facebook and Twitter and it is probably where lone developers or designers start.

Blogs are also considered networks. Not so much personal blogs as the ones related to a specific topic or an industry. 1stWebDesigner is an example. With a blog getting bigger, the community behind it gets bigger as well. All these blogs turned into communities develop side-projects, just as here at 1WD we publish eBooks for Amazon’s Kindle.

Some other popular communities might be forums (CodingForums is hot), social networks, web pages and so on.

What more is in it for you?

I am sure most of you know the answer to this question by now. We talked about advantages a bit earlier. But there is more than just open-source tools and support. You can gain a lot by starting such a community yourself, by creating an application or an open-source tool people can use. By getting involved, others can hear about you and your reputation within the industry will grow as fast as you never experienced before. If you want to build a community, there are some steps you might want to start with – it is usually how everybody starts. It is not a success guaranteed method, but it will aid your cause.

Knowing how to use social media properly will give you a huge advantage over the others. Don’t forget that your short-term goal is to get as many people as you can interested in your product. There is no better way of doing this than using Twitter, Facebook, Digg and the other social sharing giants. Use all these to share links, tips, resources and ask for feedback. Engage the community as this will make a whole buzz around you and it will bring you even more interest.

If you like writing, blogging is also a way to aid your start-up. It doesn’t even have to be a full-time job, but having a blog that you update once or twice per week will keep people interested. Experts advise bloggers to update the content far more often than this, but don’t forget you are not a blogger, rather you are a developer or a designer. Blogging is only a way to help yourself, you don’t look to earn money out of it.

If you are involved in other communities and networks, this will improve your reputation as well. Be involved in as many as you can, talk to people, share their links, interact with them over social media and so on. Getting involved is one of the best ways to get recognized and earn people’s respect.

Image by Doug88888.

I read an article a few months ago about social media strategies. The author mentioned the fact that a retweet is not as effective as when a personal comment is included. It also makes a lot of sense. You need not create articles that are robot sharing, rather you need to add a personal touch to them when sharing. Real popular communities are based on active people who get involved on a professional and personal level, not on social media robots.

If you have knowledge of something worth sharing, don’t keep it to yourself. Be selfless and give advice. Help people if they need it. Offer them tips and show them the right path if you’ve been there before. It is also about earning respect and getting recognized. You might not get much in the short-term, but you will earn a lot in the long-term out of being generous.

If you have your own community, providing tools or services for free will always bring you traffic and referrals. People love free stuff, it is a general and an easy-to-notice behavior. Doing something to improve the communities will bring you appreciation.

Upon providing freebies, you can also create something you sell for a cheap price. This will not only help you earn some money, but it will show your community you also do more quality work – not that free stuff are not of good quality, but there is a reason behind them being free. If you think you can make something that people will pay for, go for it!

Examples of networks

I think we talked a lot about the advantages of joining a community and it should be clear for you that you get much more out of it than out of any other activity on the internet.

Now, let’s take a look at the most popular and well-working web design and development networks. I am sure you heard about most of them, but we recap just for the ones who are new to the industry and look for inspiration.

  • It is fairly impossible not to start with the Smashing Magazine Network. They are an example of professionalism and represent something that many other communities can only long for. They do not only have blogs about web design, web development, graphics and vectors, but also a job board. Parts of their networks are also sections such as “Coding”, “UX Design” and “WordPress”. They focus on everything a newbie or an expert would like to have knowledge of and this is the place to get inspired if you wish to build your own network some time.
  • Envato is another great example. The network features many websites related to the topic and, quite impossible not to have heard of, the Tuts+ network. Envato is probably the largest community out there and is built on several smaller communities such as FreelanceSwitch, ThemeForest and PSDTuts. They really talk about everything in the industry and not keeping an eye on them is definitely a mistake for an individual interested in the web.
  • One Mighty Roar is a bit smaller than the others – they are actually in their beginning phase, but they become more popular day by day. Their smaller community called “Build Internet” is a web development blog and is where it all started. After the huge success they had, One Mighty Roar opened their own offline web development agency.
  • Fuel Brand Network is the last example in this list. It is a network composed of several smaller web pages about coding, blogging and others. They are all under the same visual identity, but with a different color, and have a lovely overall brand.

Bottom line

There are clear advantages not only from building your own network, but also from being part of ones that already exist on the internet. Creating such a powerful community is not easy, not anybody can pull off such a huge task. The examples above show that the ones who actually manage to do it, do not only help themselves, but tens of thousands of designers and developers all over the world.

I am sure being able to provide help and resources to so many people gives you a pleasant feeling of personal fulfillment and earns you a lot of respect from others.

Even if you do not think you are able to build your own network, it is definitely worth joining some others and helping people there. The truth is that an individual needs huge resources to be able to build and maintain such a community and not everybody has them. If after this article you think even of just being part of a design or development network and contributing as much as possible, then my goal is achieved.

Until next time… are you part of online communities? Have you ever thought of building your own, or you just want to help others using networks already established? Which do you think are the challenges of building such a community?

March 22 2012

10:00

What is Pro Bono Work and Why Should You Embrace It

Few weeks ago I wrote an article where I torn Spec work apart. There is no reason in going back and I think I should do as promised and explain why I think pro bono work is something you should do to help you build up a portfolio if you are new to the design business and to give a helping hand to different communities.

Pro bono work comes from a Latin phrase and is mostly used to describe professional work delivered voluntarily and without payment or at a highly reduced fee. Pro bono work is increasing in popularity lately in domains such as marketing, technology and yes, web design. Such a concept offers the specific skills of a professional for free to someone who is not able to afford them otherwise. The main difference between Spec work and pro bono work is that pro bono work is usually for a good cause and even if you don’t get paid, it will definitely bring you awareness and allow you to build up a portfolio and earn experience. The reason behind me preferring pro bono work instead of spec work is that it is usually for a good cause. We designers love the nature, optimistic and energetic volunteers and good causes like charity. Why not work for them and earn their respect rather than do Spec work and (most of the time) earn nothing?

We sometimes feel like helping somebody in need of our services and only ask for a trackback or a modest fee. If you really need to build up a portfolio in the beginning of your design career, doing this kind of work for non-profit organizations or charities is a win-win situation. You help them and, in exchange, you have your work online and will also feel better about yourself. It must feel better helping NGOs battling for disadvantaged children, disaster victims, people with special needs or poor people than doing work for a who-knows-who and not get paid for it, right?

Pro bono also means you have a big responsibility. It means providing fully professional results, not something done while watching your favorite show or while you wait for the train. You will not get paid for it in most cases, but you still need to be professional. Not only for the sake of your portfolio, but also for the sake of the organization you help. Only deliver designs you would normally deliver to people who would pay. I know it sounds difficult and does not make too much sense – why would you submit free high-quality work instead of asking for money for it?

Well, not all of us have a reputation that every company would be glad to fill our pockets for a redesign. When you start working in the business you will understand you need experience – and how else will you get it? I have knowledge of companies looking at people’s previous work and digging for pro bono publico. Why? Because it says a lot about you. It shows your passion for this business. It shows money may be on the low end, but you will always be there for the client and will deliver high-quality work. It shows integrity. It shows just the right qualities.

All design jobs I had when I was a lot younger were pro bono or poorly paid. I mostly did it for fun and to learn. I was proud of my work. I wouldn’t be proud of it today, but back then I was thrilled to be able to deliver friends and local charities their own website. I had no problem working for free and this helped me a lot. Sure, I was not older than 15 and money issues were not pressuring me; fair enough, I give you that one. On the other side, what was in it for me if I was starting to ask for money? Just think about this yourself, would there have been any chance for a 14-year-old without a bit of experience in the business?

Image by mrszooropa.

Is pro bono equal to volunteerism?

Many think so. I doubt it, however. I also volunteer in my spare time and it is quite different from undertaking pro bono work. The main difference is that while volunteerism means providing something for free, pro bono means acting as a professional, having client meetings, providing drafts, changing, providing another draft, changing again, getting the green light and so on. It is like in the real world. Pro bono is a playground for the real business. It is where we experiment with our techniques and skills. It is where we act as professionals although we are not paid – we only do it because of our desire to help.

Pro bono involves getting familiar with the client, the community you will provide for, their volunteers and their needs. Pro bono for a local charity means getting involved.

Image by twestival.

Another difference between pro bono and volunteerism is that pro bono leads sometimes to paid work. If the local charity will need a poster, a more professional website or an advertising campaign and will have money for it, whom do you think they will turn to first?

How to choose?

It depends a lot on the area where you live. There are a lot more charities in Chicago then in a small city outside of the Ukraine capital Kiev. But providing you live in an area with lots of them, choosing a local charity or a non-profit organization to do some pro bono for might be tricky.

I heard lots of opinions about doing pro bono from more experienced designers and developers. I think there should be several reasons behind doing it, not only one. You should not only do pro bono in order to improve your portfolio and your skills, because let’s face it, all of us like to help. This is a good way to show your support and make a charitable contribution. If you find at least one of these reasons being enough for you, then you should undertake pro bono work. Why we do it is not as important – charities and organizations will appreciate our help anyway.

The search for a suitable organization might be long. Try to choose something that fits you, something that you like. If you like dogs, you will most likely be more excited about doing a website for an animal shelter than for an Elderly Home. Keep in mind that money is out of this equation and the only thing that can make you run and keep you still wanting to help is working for a cause which is close to you. Your main goal is to find a charity or an organization whose agenda and goals match your own. You need to feel passionate about a group’s cause in order to do professional pro bono for them.

Another thing you should remember is that many of these organizations already have their own websites on the internet, therefore think of upgrades, tweaks and redesigns instead of new web pages.

Another piece of advice would be to start locally. I say this because getting in contact with volunteers and clients will be much easier if they are located 10 minutes from your home, than if they are placed somewhere 10 hours away. Also, don’t forget that larger organizations probably have lots of sponsors and already own a website or have what they already need.

Image by sarah_dr.

Finding the right client should take some time, but it shouldn’t be a tremendous effort. You can start looking for the following:

  • Religious organizations or churches
  • Adoption agencies
  • Community projects
  • Community theaters and playhouses
  • Public school projects
  • Private and public after-school programs
  • Academic organizations
  • Political organizations
  • Food banks and other aid distribution organizations
  • Disease research groups

This is a just a list out off the top of my head. There should be many more out there and a simple Google search will probably reveal hundreds or thousands more from you to choose from.

What’s in for you?

Besides the things we already talked about, there is something else for you as well in pro bono work. Besides polishing your skills and padding your portfolio, earning some promotion is also on the table. Because there is nothing else they can offer, many NGOs will allow you to post a link of your portfolio on their website. They also have large networks and as said earlier, pro bono might result in paid work for you somewhere in the future. And not only the organizations have a network, but also the volunteers and people involved. Imagine what kind of viral marketing you can get from a group of 500 people in your small city.

Bottom line

So yes folks, this is why I think you should embrace pro bono instead of Spec work. If you read both my articles it should be more than enough to convince you that doing something for a specific community is worth much more than doing something for an unknown person that is highly unlikely to pay you.

Until next time… what do you think about pro bono? Is there a clear difference between it and Spec work or you still consider both as being under the same umbrella? Have you ever undertaken pro bono work?

February 20 2012

21:00

How to Overcome the Bad Moments of Your Career Like a Boss

There are lots of web design resources out there and learning all the skills you need is not a problem anymore – everybody can do it. But some of us (or better said, most of us) encounter the same logistical problems now and then during our freelance careers. Being able to create high quality websites is not enough anymore. Freelancing is a total challenge as you also need to be able to manage yourself, your work and your problems.

Even if most people consider the motivational articles a waste of time, they actually offer solutions to problems more important than color theory, typography or web usability. The inner problems can stop freelancers from finding the right balance between work and personal life and, at some point in time, can even force them to retire or change careers.

The issue with having bad moods or difficulty getting into a working mood is that it seriously affects your results. It can make you miss deadlines, deliver poor-quality products and even break agreements before being done with them. If you are interested in being efficient, then this article is targeting you. If you don’t know how to be, then pay attention to this advice

Lack of motivation


Most of us have a goal in life. It can be a job you always dreamed of having or something that will bring you lots of money. It’s totally up to you. When you’re still going after the goal, you motivated are most of the time . However, when there is nothing more to achieve (or no more goals to achieve), lack of motivation appears very often and damages your work. Working in the same position for a long time may also be another why you lack motivation.

Let’s face it, few of us would work if we didn’t need it to survive. Sometimes it just gets boring to work, it’s highly unlikely that it you aren’t nodding your head in agreement yet. The good news is that there are many ways ways to cure a lack of motivation.

Image by DonnaGrayson.

Steve Jobs said it himself: “Stay hungry, stay foolish!” By always wanting more, there is always enough motivation. Regardless of where you are right now, always wish for more. This way you will always work in order to achieve that goal you set for yourself. You also need to find a balance between work and personal life. Having too much free time can affect your productivity while spending too much time at work can damage the relationships with your family and friends – and maybe even more importantly, your health.

Lack of clients


If you work freelance, you are most probably delivering the work and finding clients. This can be overwhelming and with no work there is no money. It is something every freelancer is afraid of, especially the ones who are inexperienced.

Some solutions could be saving money for back-up. Lack of clients might be something all of us will encounter sometime and it is very good to have some savings. Not having clients is worse than getting fired from your 9-to-5 job, because if you get fired there, you are probably entitled to some kind of financial aid; there is no such thing while you freelance (it might, however, depend on the country). Therefore always be wise and have some money for the rough periods.

Another good way of solving this problem is maintaining contact with several clients. Having your income come from only one client is dangerous, but working with more at the same time is likely to feed you for some months to come.

As I always say, when you deliver a project make sure to check on the client once or twice afterwards. Make sure you maintain a good relationship with your former clients, otherwise there is no chance you will ever get hired by them again. However, if you convince them you are more than just “the guy who designs websites”, they will even further recommend you to their clients.

Family issues


Let’s face it, none of us are working machines. We provide good results based on external factors (skills) and internal ones (inner behaviour, trust, confidence, motivation etc). Both are important. If we have problems at home, how will we be able to focus on work? Our relatives and friends have a huge influence on us and one of them being sick or going through other difficulties is surely going to damage your motivation and self-belief. Any issue you have at home will affect your work life more or less.

I know it is something very difficult to work with, but making a clear difference between personal life and work will solve these issues in the end. However, this is not something you will achieve very easily. It might as well be the most difficult problem you will encounter during your freelance career. While clients and motivation come and go, family problems usually just come and will only disappear after long periods of time.

Image by auroneurotica photo.

Talking to your family about your work might help. Letting them understand what you do and why you spend so much time on even small projects, but also telling them that their behaviour affects yours and the monthly income will probably solve the problems you have. By trying to show you are the busy boss you will not solve too much – but you will do it by talking. Communication is important in today’s reality.

Fights with bosses


Although not all of us have a boss on paper, all of us have one, even freelancers. If the client is the one paying  you, he is most definitely your boss. You probably won’t last long at an agency if you’re always arguing with your boss. Bosses are usually disregarded by employees, but having a good relationship with them will help you along the way. Web design agencies work usually as a team and having a weak link in your team will decrease the chances of success.

Sometimes it might be just too difficult to agree with your boss. Most of the time in this case it is easier to just try following their advice – even if it is something you do not agree with. In the end, you can always hold them responsible for your poor work if they just push ideas down your throat.

I, however, prefer to use dialogue. I always prefer to communicate before making any major decision. And most of the time there is a reason behind someone being my boss – so I respect that. Remaining frustrated is never going to solve your disputes with your bosses, so try to free yourself and follow his advice. And let’s face it, it’s never nice to have a boss who wants to take revenge on you for something.

Difficult clients


We all encounter, at some point in time, the so-called “client from hell”. People who only know the basics at best and think they know better than us  – this is when we start calling them clients from hell – when they think they know better.

Image by Filippo Venturi.

It is very difficult to work with them because they will do everything to convince you they know better. And while they pay, there is not very much you can do other than try to discuss things with them. Some of them can even get aggressive and instead of just giving some feedback, actually force you to do something. It is very difficult to maintain a good relationship with this kind of client. Although some say communication works, I doubt it. These people are not willing to listen. They just want a product, know how they want it to be and that’s it.

In my opinion not dealing with this type of client at all is the way to go. When you feel one of your potential clients might be a difficult one to work with, just avoid him. It might sound weird – we are all designers and look for work, but we need to avoid these guys. Well yes, it is weird and it shouldn’t be like that, but think that some of them don’t even pay. Some of then will knock your moral down to the ground. After working with two or three of those, you will need a break. It is not worth it. Drop them and move on!

Bonus: lack of inspiration - a whole article about it.

Bottom line


Freelancing is something very challenging and now and then you will encounter these difficulties, but the quicker you get past them, the quicker you will be able to get back to work and earn some money. As said earlier, all these motivational articles are good for you and your work process in general, although in the beginning they might seem like a waste of time. If you find yourself surrounded by all these kinds of problems, it is best to even spend some money and buy books about how to solve them – there are hundreds of them out there and they can’t do any harm.

Until next time… which of these problems do you encounter most? How do you solve them?

February 02 2012

21:00

First Steps in Creating a Web Design Business

You don’t like working for others and wish others worked for you? Are you also attracted to the idea of working with lots of people and multiple personalities? Then going for your own design company is something you might want to look into.

Starting a web design business might seem something anybody can do, but is definitely a difficult task. Note that this discussion is purely theoretical, if you wish to read a real opinion, then find someone who owns such a company and ask him how it was in the beginning.

The difficult part about starting your own company is that you need to be patient – the good stuff comes to those who wait. It is a long-term commitment and results might not come right away. Actually, it might be a bumpy ride up until the results come; or worse, they might not come at all and you will fail miserably.

Image by kristja.

In the beginning it sounds nice. You are your own boss, make lots of money and do pretty much nothing besides sign papers. This might be the life of huge company owners (although I would like the right to disagree), but it will not be yours. You might have to work even more than your own employees, you will not really make that much money and yes, you will be your own boss, but the clients you work with will still decide whether or not to hire you – they have the money, right?

Statistics say 80% of new businesses disappear within their first year. It takes a lot of determination and it is not the path to take for people without drive and stamina. If you’re still reading and think you have a fairly good chance of being one of the 20%, then continue reading, this is for you.

Owning a company


Great, are you ready to embark on this journey? Then you need to know things will change for you. Your career will not be a 9-5 job and won’t even be similar to the bits of freelancing you experienced before. Expect to get a feeling of accomplishment when things happen as you wish them to – expect to put your head down and be disappointed when things don’t turn out the way you want. Now you are on the other side of a business. You control what is happening and you give jobs, order people around and decide on wages. Landing a big project will mean much more for you now than if you were working in an agency, where you just get assignments and, when you deliver them, you get new ones. Your life has changed!

Now you can also employ people and let them do your work, while you spend time with your family or doing whatever else you wish to. However, most designers or developers who start their own businesses have no, or a limited, amount of money in the beginning and choose to do some of the work themselves, to save up until they have a bigger budget. You will most definitely have to do this in the beginning, unless you find a partner who is willing to contribute to the finances.

Advantages of owning your business are many. You are able to schedule your own time and have more freedom to experiment; even more freedom to hang out with your friends. You get total control, price up jobs as you think and have a different feeling knowing this time everything you do is for your own purpose. You are in charge of everything. But challenges arise at any minute too…

Get ready for problems


The first part of the article was about the nice stuff. Now it comes the ugly. Just because you are a great web designer doesn’t mean you are a great entrepreneur. There is a whole new path for you to learn and there is not much free time for you after you throw yourself out there. As in freelancing, you need to be able to motivate yourself and the ones you work with and be the boss, not just a friend or co-worker.

Unlike in a company, there is no one who takes care of other things for you. Unless you hire people for it, you will need to do the bookkeeping, taxes, client meetings, project presentations, project management and so on. This doesn’t allow too much time for hanging out with your friends.

Image by iprole.

Working on your time and whenever you want is an advantage – like in freelancing. But in both careers you need to be able to motivate yourself and start working right away instead of doing laundry or walking your dog. Also, you need to be good at following a schedule. If you slack off a day, the second day you will find yourself in a lot of trouble. Distractions are also something difficult to deal with, from social media to e-mails and, if you work from home, to kids and family members.

Maybe the most time-consuming task is email. This time you need to create them yourself; from scratch! There are no short answers to your project manager anymore. Now you are also in charge of communicating with the client and there is a reason why every company hires specialized people to do this – because it requires special skills. Now go and ask yourself, will you spend the necessary time to learn them or will you hire someone to handle the external communication? If you prefer to do it alone, get ready for some difficult challenges. Not every client is a joy to work with and you need to learn how to get the best out of them. Your job will be even more stressful if most of the clients are difficult to work with – and you probably already know most of them are difficult to work with.

Some good tips I can give you for when you decide to start your own design company is getting an accountant and focus on smaller tasks. Having an expert to keep control of all the stuff you have no idea about will pay off because it will allow you more time for the things you know how to do. It is not really possible to keep track of everything and doing both administrative and technical tasks will only give you sleepless nights.

If you are out there always looking for clients and you do it well, keep doing it and hire somebody at the office to actually turn the ideas into projects. Chasing clients and doing the work is quite impossible to do at the same time. It is possible for freelancers, as they have more free time than you do, but don’t forget – there is no real free time for you in the following months or even years. On the other hand, if you’re really good at completing the design briefs, then do that and hire someone else on commission to land projects. All big companies have several departments for a reason: keep sales, finance, design and technology apart from each other.

What’s in for you later?


Now we talk about the future. What are your opportunities in the future? Well, there are actually only two: success and failure, but we all know failure is never an option. Forcing yourself to be successful is the only way to actually reach your goals. If in the beginning you only run a business, in the future you have the opportunity to own it and hire people to run it – this is the dream, I would say. It is as far as it will go for you.

Image by cobrasoft.

You will pick up business skills along the road that might help you get back in with another agency. If at some point in time you wish to start working again, nobody will reject you – with the experience of leading a small project to running a company everybody will be delighted to have you around.

If you fail, however, the only thing you can do is go back to an agency or freelance. You can still have the company on your CV, but is it really worth? How likely are you to get a job if you state your small business failed? If you disagree with this, you are more than welcome to share your opinion with us; I would love to hear them.

Bottom line


Well, now you’ve heard it all. You know what is good about owning your own business and you know what challenges to expect. I would be glad to hear that some of you still want to pursue your dream or maybe start or continue on this path. I can’t wait to hear about your results.

Until next time, let’s hear your opinions on the topic…

January 18 2012

21:00

6 Things To Consider For A Better Web Design Career

For most of us web design started as a passion or a part-time job. For many of us it started before we turned 18, but most of us ended up working full-time in an agency or as freelance web designers and developers and will probably continue doing so for years and years to come.

But being a designer can take a great deal of time, with multiple clients to please, working in an environment that moves fast and changes even faster, where we have to learn new skills over and over again, market ourselves and even find clients on a monthly basis if we don’t work in an agency.

As with any other career, web design has its own challenges and they arise all the time for us, even if we are experienced or well-known. It can be a difficult client to work with, an impossible deadline or a bad example of outsourcing, it doesn’t really matter. Unfortunately these things can’t be avoided, but to ensure you enjoy a better career anyway I created a list with some tips for all of you.

Success only comes if you work smarter and more efficiently, not necessarily more than you do now. It will not be possible to pull all nighters or work 36 hours straight in 20 years anymore, your body will just not be able to handle it. You will end up burning out and will start hating your job and career choice. Therefore you have to reconsider the way you work; design and development are careers for organized and smart people. Not that we do something incredibly special, but let’s face it, there are more designers that don’t manage it than the ones who do and enjoy success – it is definitely not easy.

1. Be organized


This should be the first new rule of your career. You can only work more efficiently and smarter by being organized. Everything from your working hours and sleep to breaks and time for a personal life. Being organized or becoming organized is difficult and requires time and effort. We try to focus more on deadlines and projects (which are short-term) than on improving the way we work (which is long-term and more efficient).

If you just can’t handle both of them, take a break from design for a month and organize your life. Catch up with your bills, see everybody in the family, get out with all your friends and handle anything that has been causing you stress. Then start being organized.

Keeping yourself and your schedule organized is crucial.

Image by tome213

Create and use a schedule, this will allow you to avoid a chaotic life. It is not important what kind of system you use, the most important thing is to actually have one – and to rigidly respect it no matter what.

Actually, this part of the article is focusing more on freelancers than on agency employees and this is simply because the first have to manage their own schedule, while the second already have a schedule imposed by their companies.

You decide what your schedule going to look like. You know what you want to start with and at what time, although I do not think that starting after 9 is beneficial. On a normal, 8 hour work day  you will finish at 5pm, which might be a bit too late if you need time for other activities such as running, family meetings, working out or seeing a football game. E-mails with new tasks might appear throughout the day, the best way of dealing with them is ignoring and revising them at the end of the day, when the work you planned to do is already done. Otherwise you will end up reading e-mails and not delivering the projects on time.

Having a schedule is more important than you think - stick with it!

Image by biewoef

Another tip is to take 30 minutes at the beginning of each day to read e-mails, plan ahead and get rid of everything that might concern you. Then just start working. At the end of the day take another 30 minutes to read and write e-mails, send milestone reports and other work related emails. Sure, you lose an hour a day, but being organized is important and this hour you use for things other than work will pay off long-term. You will notice that you will not be concerned with new e-mails after you get used to only reading your email twice a day. Incoming e-mails are only a distraction. Talking about distractions…

2. Get rid of Social Media


Yes, of all of them. From Twitter and Facebook to e-mail and phone. By being surrounded by all of these you only risk getting distracted and doing anything besides your work.

You might not realize it, but your probably use Facebook and Twitter even more than you think. Install one of the activity tracking applications you can find on the internet and you will be amazed at how much you use Facebook and Twitter.

By only checking them from time to time, I spent almost two hours per day on Twitter, Facebook and e-mail combined. Quite a lot thinking I can bill a client $50 for two hours of development here in Denmark. Using this logic I lose around $250 per week by being distracted, which means $1000 per month. Quite a lot, I would say, there are freelancers out there not even earning $1000 per month.

Facebook is one of the biggest distractions a freelancer can have.

Image source

Even if you think Facebook and Twitter are the biggest distractions, they are not. E-mail is the biggest and I can’t stress enough about how important it is to only check it in the morning and in the afternoon, before and after your working schedule. If you don’t believe me, use one of the tools recommended above and see for yourself.

You might be afraid of missing important e-mail messages, but we all know most of our e-mails end up in spam anyway and very few of the others require immediate attention. You will not miss your dream job or even a big client if you answer at 4.30 instead of 12.30. You can also create filters and only get notices when a specific person sends you an e-mail, so you can act on it immediately if needed.

Cleaning and managing your inbox is important too, because it will turn your one-hour habit of checking e-mails into a 30-minute one – and there’s half an hour more of earning money per day. Make sure your inbox is not cluttered, get rid of anything you don’t need and move all the spam to the spam folder – don’t forget to always block the sender and maybe even the sender’s domain. If spam is sent from there, you might not want to have anything to do with them anyway.

3. Use methods to concentrate


Our bodies are not like computers. This means we can’t just inject food and energy drinks into it and expect it to work at its best all the time. Our bodies work according to how much energy we have. Therefore we can aid our schedule by using some well-known methods.

Our energy, however, depends on our natural rhythm. This means some of us work better in the morning, while others are more energetic at night. And even under these circumstances, our concentration increases or decreases throughout the day. These methods I am talking about are ways of properly managing your energy so that you work as effectively as possible.

The Pomodoro Technique is one of the best out there. It means you force yourself to work in short bursts. You set a timer to 25 minutes and during the 25 minutes the only thing you do is work without being distracted at all. Just work. After the 25-minute cycle take a five minute break and continue with another sprint afterwards. After four cycles take a longer break.

If The Pomodoro Technique does not fit your working style, then try something else. Use the morning and the first hours of work for the more demanding jobs – this is when you have the most energy – and then keep the easier tasks for later in the day. You don’t really feel like coding, but would like to read something, save the reading for later since it isn’t as demanding as coding is.

There is nothing wrong with taking naps after lunch either, just don’t take long ones. Half an hour should be enough for your body to rest and to give you enough energy for finishing the work day. We know that once you are done working, the energy just comes back out of the blue.

And if this doesn’t help and you still feel tired, then it’s time for…

4. Working out and exercising


Yes, this is always a way to get rid of the tiredness. I am not saying you have to work out until your muscles get sore. Go out and take a short run, do some push-ups (I love this one, that one or the other one) or just move around the house for few minutes. Just moving your muscles for a short amount of time will give you back some energy and will make you active again.

Exercise during your breaks - it will give your energy back.

Image by Johhnyberg

In general, having a healthy life style will do much more for your freelance career than you think. Only being healthy and managing to sleep well during the night will give you more energy than others have. Therefore you will be able to work for longer periods of time, avoid naps and be able to concentrate better. I’m not saying you should, but going and talking to a doctor about your situation might be good advice. See if you need some vitamins and if you do, don’t hesitate to take them. You might not feel a difference, but I am sure your body will.

5. Outsource if you can


Outsourcing is one of the ways a freelance designer can take on a huge amount of work. Because you can’t do them all, having someone to help you might come in handy. If there are things that you hate doing or are just not good at, think of getting another freelancer to help you. It can be paying bills, invoicing, administrative tasks or even chasing clients. Get somebody who can find clients for you, this way you will never have to spend time on it. Find somebody to market you and the only thing you will have to worry about are your deadlines.

Paying somebody else to handle some of your business is not wrong and is a very common practice these days. You can even charge the client a bit more and use that extra cash to pay someone to help you. There are so many virtual assistants out there that price will not be a problem at all – there are many of them who will do a fantastic administration job for a few dollars an hour.

If you want to get more serious and hire other designers or developers to work with you, this means you are ready to create a small business and as long as it works for you, why not try it?

6. Reuse work


Because time is important, it’s smart to “recycle” the products created before and use them again in new projects. You can save some time and stress and get a bit more free time and also get ahead of schedule.

There is nothing wrong with using the same JavaScript snippet again, as long as it is developed by you. If you develop a really good default CSS stylesheet, reuse it every time you start a new project. Moreover, search for work on the internet which is available for free and make use of it. The three hours spared by using something free from the internet can be used for other projects or tasks.

Reuse your previous work if you can - it will spare you time.

Image by 7rains

Lots of clients come and ask if I can develop a web page with a Content Management System. Well yes I can, WordPress is out there and it also takes only a few minutes to install. Why develop their own, when I can instead use the same amount of time to customize a theme for them? Reusing work you’ve previously done is a smart way of saving time and working more efficiently, and don’t forget, free stuff from the internet can help too.

Conclusion


It fascinates me how people choose web design for a career when they are young and so passionate about it, but when they get close to their 30′s start hating their job and are not motivated anymore. Success is one way of staying motivated and if you can follow the rules above, you will most likely achieve it. Pulling all-nighters is something you will have to do often and if your body can’t handle it, then you need to make sure you’re the most organized person you know so that you can complete your work and not need to pull all nighters.

Being organized is one of the most important skills of a web designer in my opinion because I am sure not many of us can afford being otherwise for the following 20 years. Try to have a schedule and stick with it, it is important for short-term, but crucial for long-term. This is the only way you will be able to achieve success, stay motivated and have a better design career and a happier life.

Now it’s your turn. What advice do you have for your fellow freelance web designers / developers?

January 14 2012

10:00

Web Service Review: CSS Lint – Helping You Code Better

Coding is something that takes time to learn and novice developers might not use the best practices when converting web interfaces from a Photoshop file into a fully functional web site. It would be really good to have access to an experience programmer, but not everybody can afford to hire one or knows someone that is with spare time.

So you might ask yourself what to do to improve the code before delivering a web page. Well, lucky you, there is a tool out there which I will review for you today. The tool is called CSS Lint, it is totally free and I definitely recommend trying it and see what you can get out of it. The difference between a good and a great programmer is all in the small details CSS Lint can fix for you – or, at least, can tell you to fix them and why.

CSS Lint is an open source application that checks your code syntax and, according to the latest web standards, gives you a list of mistakes it spotted in your CSS code. It is similar to the W3C Validator, only it gives you better descriptions of your issues and offers suggestions about how to solve them. The tool is very easy to use. The only thing you have to do is paste the source code and choose the rules you want to be enforced (and there are lots of them). CSS Lint will start analyzing your code immediately after you hit the lint button and it will not take too much time until you will see a full preview of how good your code is.

The rules


As said before, you can choose your code to be checked by certain rules and I will give you a list with all the rules you can choose from.

1. Errors

  • Beware of broken box sizing.
  • Require properties appropriate for display.
  • Disallow duplicate properties.
  • Disallow empty rules.
  • Require use of known properties

2. Compatibility

  • Disallow adjoining classes.
  • Disallow box-sizing.
  • Require compatible vendor prefixes.
  • Require all gradient definitions.
  • Disallow negative text-indent.
  • Require standard property with vendor prefix.
  • Require fallback colors.

3. Performance

  • Don’t use too many web fonts.
  • Disallow @import.
  • Disallow duplicate background images (new feature)
  • Disallow selectors that look like regexs.
  • Disallow universal selector.
  • Disallow units for 0 values.
  • Disallow overqualified elements.
  • Require shorthand properties.

4. Maintainability and duplication

  • Disallow too many floats.
  • Don’t use too many font sizes.
  • Disallow IDs in selectors.
  • Disallow !important.

5. Accessibility

  • Disallow outline: none.

6. OOCSS

  • Disallow qualified headings.
  • Heading should only be defined once

The good part about any of these rules is that CSS Lint gives you a full explanation of each of them and, in most of the cases, recommendations on how to improve your code and keep the same functions, but avoid the specific mistake you made.

All these rules definitely make sense, but there is no time to take a look at all of them, so I will choose the most important and give you an explanation about why it’s a mistake to use them, and also some tips about how to replace them with valid code. This is only to give you a preview of the tool, you can obviously dig into it more later.

Disallow duplicate properties

A few years ago assigning the same property to a container was a mistake, although it is not considered one today. Today this is used as a way to deal with varying levels of browser support for CSS properties. There are browsers out there which support RGBA colors and there are some that do not, so a snippet like the following one would be accepted:

. container { background: #000; background: rgba (255, 255, 255, 0.5); }

Moreover, the following lines are also OK:

. container { border: 1px solid black; border: 1px solid red; }

However, this is not accepted and is puts up a warning when the two properties are separated by another different one or when the properties have the same value:

.container { border: 1px solid black; border: 1px solid black; }

or

.container { border: 1px solid black; color: red; border: 1px solid black; }

Require use of known properties

As more and more properties are accepted in a CSS file, this rule makes sure you don’t have any typos in your code. It is like spelling check in Microsoft Word. This rule checks each property name and makes sure it is a known CSS property. If there is a vendor-prefixed property (the ones beginning with a -), they are ignored by the tool, because they may add in their own properties. A normal CSS validator would warn when such a property is used (-moz-border-radius sound familiar?), because it doesn’t recognize the name, but CSS Lint doesn’t.

a { color: red; } would be accepted, but a { colr: red; } would be displayed as a warning, because the property colr does not exist. The following snippet: a { -moz-foo: bar; } would not be displayed as a warning.

Don’t use too many web fonts

Using too many web fonts is clearly bad technique, not only from a design perspective, but also from an accessibility and usability point of view. A web page that has to load more than one (maximum two) web fonts at every refresh is going to load very slowly and we know how this affects the user experience on a site.

Web fonts should not be overused.

The tool searches for the popular @font-face property and warns you when there are more than five of them. However, I personally don’t recommend you use more than one and, if you can, try to avoid using them at all.

Disallow too many floats

The float property is used to achieve a columnar layout in CSS. Some of us have been thought we have to use as many floats  as possible to ensure everything stays in place, but this is not the case anymore. Today there are lots of grid systems out there which you can download and they do not have an excess of this property. They are also made by expert developers and do not have usability flaws. The 960 Grid System and The Grid System are two incredible grid generators and I recommend you check them if you haven’t already.

Moreover, using one of these grid systems will decrease the amount of code you have to write yourself, which will help you deliver the web site faster and make the final product better.

CSS Lint warns you when there are more than 10 floats used (which is something most of the designers already use when they create the basic layout). Analyzes have been made and it seems the grid systems improve web site performance (source), so why not take advantage of them?

Don’t use too many font-size declarations

If your website is well-organized, then it probably has a small set of font sizes. However, many designers prefer to use a clearly visible hierarchy and do this by playing with the font sizes. Well, this would not be a problem either if developers would code it properly. Instead of using font-size 15 times, define three classes and use each one of them five times. To better illustrate, take a look at the code below:

.small { font-size: 10px; }

.medium { font-size: 13px; }

.big { font-size: 16px; }

The font-size property should not be overused - try classes instead. Image from: www.dtelepathy.com

This way, instead of declaring the size of the font 15 times, just point the container to a class. This is known to be much faster and to improve the loading speed of your web page. If there are more than 10 font-size properties used in your CSS file, this tool will show you a warning and a description of the issue.

Disallow !important

The !important property is used to increase the specificity of a given property value. If a web page has many instances of this property, it is a clear sign that the developer uses it because he has problems styling the page effectively. Therefore, CSS Lint displays a warning when the !important property is used.

Heading should be defined only once

The heading is an Object-Oriented CSS (OOCSS) which works by defining certain objects that can be used to place a particular object anywhere on a web page and display the same. For example, the heading elements (h1 to h6) are built-in objects and should look the same wherever they appear. This means developers are not allowed to define the same element multiple times.

The following code displays as a warning:

h3 { font-weight: normal; }

.box h3 { font-weight: bold; }

As you can see, the h3 has been defined twice, once for general use and once when used together with the class called box. This is not allowed! However, headings can be defined more than once when the hover property is used:

h3 { font-weight: normal; }

h3:hover { font-weight: bold; }

CSS Lint is nothing more than a tool


The bottom line is that CSS Lint should be taken as what it is – a tool. This means that no developer should code like this tool wants only because it says so. There are some rules that developers might not agree with (like the controversial OOCSS rules) and nobody forces you to use this tool as a Bible. CSS Lint should only be a tool to help you if you want to know where you can improve. None of us like to find out that we have issues in the way we code – so some of us might reject it.

So, the conclusion?


Even though there are some issues with it, I think CSS Lint is a tool you should start using. None of the ways of coding is the best one, unless we think it is for the purpose of our project. If you think you’re doing everything right, then so be it. Otherwise just try to use CSS Lint a few times and see if it improves your results. If it does, it might be worth to stick with it.

CSS Lint is also a very good way for beginner developers to learn more about the way they code and the way they should do it. There is nothing wrong with that and it is never too late to learn something new.

Do you think CSS Lint is useful? Did you know about it or have you used it? Did it improve the way you code or the loading speed of your website? Or was it a waste of time?

January 08 2012

10:00

Questions to Ask Yourself Before Becoming a Freelancer

Going freelance nowadays is a path many designers and developers take, not only because of job vacancies being on the low side, but also because there are some clear advantages to it. While working for a company is more secure and organized, going freelance is something most of us have thought about at least once. Working by yourself means you need some special skills, such as being able to work alone, to respect schedules and deadlines and to be able to market yourself better than the others. None of these is easy to do and not being able to follow some specific rules will ruin your freelance career. Therefore before going freelance, take a look at the following questions and try to ask yourself if this is indeed the right path for you to follow.

1. How do you feel about working alone?


Freelancing can get pretty boring sometimes and working alone is not something everybody can do. If you find enjoyment in working with people in a group, then freelancing might be something to avoid. You will probably get lonely and might want to have someone to chat with and this is not likely to happen if you freelance – don’t forget there is a schedule to follow and a deadline to keep.

Moreover, there are lots of designers and developers who like to ask for feedback or ask people around for help, this is something you should consider as well.

On the other hand, working alone has some clear advantages. If you like to work in a peaceful and quiet environment then working freelance in your own office might suit you better than a nine to five company job. Some of us really need to concentrate when we work and therefore prefer to work alone.

Anyway, regardless of which way you like to work, it is always a good idea to have some backup places to go and work from if you need. As a busy freelancer your social life might suffer and being near people while working might even increase your results. Bookstores, libraries or any place like Starbucks or McDonald’s are sometimes good for your workflow.

2. How about motivation?


OK then, you like working alone and can’t wait to start, but are you motivated enough to keep this up when it becomes your everyday life? Otherwise freelancing might not be for you either. Think of all the moments when you will need to step it up a notch without anyone pushing you. Can you push yourself?

Source: somewhere on the internet

Can you get up in the morning, eat and start working immediately instead of connecting the yoke and flying that Boeing from Amsterdam’s Schiphol to Charles de Gaulle in Paris? Just think this is only one of the few moments when you will need to go make some money instead of having fun. Deadlines are always tight and you always need to meet them in time, otherwise you will be considered unreliable and will end up with no clients and without clients you end up with no money.

3. Are you pleased with just enough money?


Freelancing for extra money is a bit different from freelancing for a living. Unlike what everyone thinks, freelancing does not fill your bank account too much. Sure, you control the amount of money you charge, and to some extent the amount of money you make, but if you want lots of money at the end of the month, you will have to work a lot, because money doesn’t just fall from trees on the internet – as a matter of fact, there are not even trees on the internet. In the beginning you might not even make enough, because nobody knows you and you need a portfolio to land big jobs (sure, if you have a portfolio already, lucky you, but not everyone who starts freelancing has one).

The good part is that you have full control of your money. You decide if you charge per hour, per project or if you work for free just because you want to. You also decide how much you charge for maintenance of a previous project or for a client that has been with you for five years. This is all in your hands – and you need to be able to manage your money wisely. If you make a fortune this month, the following three could be dry.

4. Will you go abroad?


Working freelance allows people to collaborate with individuals or companies from all over the world. This is a huge opportunity for anybody who knows a foreign language (English should be enough though) and is willing to go abroad and look for work – not necessarily going there physically, but who knows, it might land you that dream job of yours.

Photo by fraserd

Thinking of this beforehand is important because you need to market yourself in such a way that clients from China, India, Croatia or Greece will all be interested in your services – or only some of them, depends who are you interested in. Working with local clients might not be so difficult, especially if you have lived somewhere for a long time and know the surroundings and the culture, but going abroad is definitely a challenge and you need strong personal skills for it. When the internet is full of scammers, only a strong portfolio and personality will convince someone abroad to hire you for big bucks.

If you market yourself to the local clients, then you will also rely on some other channels than internet. If you want to go abroad, internet is the only way to become known and get some work.

5. How does your portfolio look?


It had better be good, otherwise everybody will skip it. Having a powerful internet presence is the only way you can make a name for yourself out there, with so much competition. Before going and marketing yourself, make sure your portfolio looks at least decent. Update the content, keep the latest contact information and make sure everybody gets what it is you offer. Your online portfolio is the place everything starts from, so make sure that when users look at it, they imagine and wish to hire you.

6. What are you good at?


This is a question you should ask yourself regardless of the career you choose and it is of utmost importance when freelancing because you have to market yourself in a specific way. In a company, once you get hired, you don’t need to advertise you or your services, but when you are a freelancer you need to do this all the time. Find out what it is you are good at and make sure people know it only by looking at your work.

It is also important to have general knowledge, but to specialize in something is crucial. Don’t market yourself as a generalist (and don’t be one either). Sure, it is good to know a bit of everything, but have strong knowledge of one or two things and call yourself an expert in those fields.

7. Where is your office going to be?


This is a bit different from the first question although it is closely related. If you like to work alone, then home might be a good choice, otherwise you might even need to rent an office in order to be around people, or maybe even work in a public place (although I do not recommend this third choice).

Photo by barunpatro

There are advantages and disadvantages to each of them and even if working from home seems the best one, it is really not. It is always difficult to stay focused on work and not start doing laundry, mop your floor or watch TV. In an office space you won’t have these problems, so this is the advantage of a more professional working space. However, if working from an office, talking too much with your colleagues will have the same effect and you will not be able to meet your deadlines. It is smart to find a balance between working alone and around other people and finding the right working space for you.

You can find some tips for your home office here.

8. Do you have future plans?


And if you do, where do you see yourself in five years? Will you be a freelancer forever or do you just want to do it now until you will be able to find an agency job? Do you wish to hire some more employees to work with you and turn your freelance hobby into a professional small company? Do you wish to work your way up in the freelance world and become well-known all over the internet?

You need to consider all these things; not only for the sake of having something to think about, but also because you need to run your business accordingly. Moreover, you don’t want to freelance for life if you don’t enjoy it too much. On the other hand, if you really like to be a freelancer, then why search for a more stable, agency job for the moment?

9. Should you become one of us?


Well, if you went through all the questions above and still think this is for you, then this is the final test. Do you really think freelancing is for you? Is it something you are truly passionate about? Are you ready for all the challenges, for getting clients on your own, be maybe close to starving in some bad months, take vacations rarely because you don’t have time for it and so on? Are you certain freelancing is the way you want to go? Because if your answer is still YES, then I am sure you will enjoy a lot of success and will avoid failure at all costs, only because this challenging career seems to suit you better than many others.

Do you think there is something else to consider when starting a freelance career? How was it when you started, what was the most challenging thing? How did you manage to go through with it?

December 20 2011

10:00

The Grim Future of Web Browsers

Nothing new appearing today in the IT world is labelled as a surprise, because everything moves so fast and at some point in time you start to know when the big news hit the market. With the technology advancing so fast, especially all the mobile devices we call smartphones today part of the mainstream and are, maybe, the most important thing in our lives. So by sending a message from your QWERTY Android device or by playing Fruit Ninja on your latest iPhone, have you ever thought that you yourself are changing the IT world?

Well if you haven’t, I can tell you for sure that you do. By using portable devices more often and desktop computers less the latest gadgets quickly become out of date. Without realizing we have become unplugged and do not need computers anymore – which also means we do not need browsers anymore. And why would we? At the end of the day we have our smartphones filled with apps that can keep us busy for a long time. Sometimes I don’t even check my Facebook from my computer, even if I am close to it, because it is much easier to do it from the phone. Ever since the IT world made it possible to connect to the internet wirelessly, nobody has looked back. People invest much more money today in phones and portable devices like tablets or eBook Readers than in computers.

Image by ~jeroen-tje

Internet without a Browser


It is easy to see how we’ve become unplugged. Apple’s iOS and Android do it; Adobe Flash Player 10.2 and AIR technologies as well. HTML5 starts becoming more popular and supported on many portable platforms and other companies like Blackberry or Nokia follow in close. There are over 400,000 applications in the App Store, an incredible growth from 500 in the beginning. Android has around 400,000 applications and the numbers are increasing. The year started with around 300,000 apps for both platforms and ends with, very possibly, close to 1 million of them. Android included Flash from the 2.2 Froyo version and this made the portable devices running on the open-source platform even more popular. And you know what the good part of this is? That you don’t need anything besides a WiFi or 3G/4G connection to access them from all over the World.

Why do we talk about apps when we’re talking about browsers? Because if you think about it, the applications are nothing less than websites which are accessed without a browser. And more than 10 million of them were downloaded in 2011. That’s a huge amount of users who accessed this information from a portable device, avoiding using a browser. And it should be a clear sign about the future of the web. The apps are more intuitive, faster and easier to use, therefore they are preferred to Chrome, Mozilla, Safari or any other application. Another advantage is that the apps can be accessed from everywhere, while for a browser you not only need internet, but also a computer.

Smartphone and the Internet


A smartphone will also always allow you access to the internet, so why have a big laptop when you can have a pocket device that can do the same? A study made two years ago concluded that by 2013 mobile browsing will be more popular than desktop browsing. With the usage of smartphones growing by 110% in the US in 2009 and by 148% all over the world, this seems quite possible. Also, the younger internet users get educated in the world of smartphones, meaning that the computer will mean even less for them than it does for us.

source: BettyArmado via Chrome Store

This could be great news for designers – up til now everybody had to have a webpage, soon everybody will have to have a mobile device version as well. More work, more money for the design industry. China for example is a huge industry with tremendous potential. Not many people there have tablets or smartphones, but many say in 3-4 years everyone there will own one. With a market of almost 1 billion mobile subscribers, there will be a huge need for mobile websites for the companies and business individuals. So, bottom line, the fact that web browsers are on a downhill is not that bad for us – we will still have a lot of work anyway.

Right now there are more than 300 million mobile internet users in China and this is around 60% of all mobile and desktop internet users all over Europe – we’re talking huge numbers here. We’re talking about the Chinese equivalent of eBay, Taobao on which the transactions for the last year totaled roughly $60 billion; and this is while eBay was delighted with a total of only $2 billion. All of these things happen while the major internet providers already update the speeds to 4G. You see where I’m heading? As designers, we might be concerned that our jobs will disappear in 15 years but really, who knows how many other challenges will appear for us by then?

However, the truth is that it always takes up to five years after a new web technology appears until people get a hold of it and learn how it really works. Smartphones are huge today, but I don’t think they reached their maximum potential yet. There is still a lot yet to come and just because we think we know everything, it doesn’t mean we actually do. Web browsers are still popular and widely used, but they will be a thing of the past at some point in time, because nothing lives forever on the web. There is no such thing as a technology which didn’t improve since it was released (unless it was released recently).

Conclusion


The bottom line of this article is that even if the browsers disappear in several years (or at least their use will decrease), there will still be a lot of work for designers and developers. The internet is almost fed up with designs and experts, in five years time it will all move on portable devices. This means, as stated before, much more work for us, both for desktop and portable devices. All the technologies will be available on portable devices as well at some point in time and designing for them will be maybe even more challenging than designing for desktop use.

The beginners of today are the experts of tomorrow. We all know what’s coming in the short term, so why not try to become better at this while letting the current experts do their work? Who knows, in five years it might be you who earns the big bucks from all kind of clients and, as its normal, there will be others taking your place in the “follower seat”. The increasing use of smartphones and tablets bring a new taste in the design industry, with many new challenges yet to come. Get ready to take on all of them!

November 11 2011

10:00

Improve Website Usability Using jQuery, HTML5, And CSS3

Remember back when if you wanted to add interactivity to your site to improve the UX aspect to make it more appealing to visitors, you had to immediately go to a flash outlet? Well that sure does seem like a long time ago now, surprisingly so because it was just a few short years ago. The decline of Flash use for these instances can be credited to advances in web technologies such as HTML5, CSS3, and jQuery. These advancements have made the use of Flash in most cases an outdated and inefficient method of tackling interactivity in a website. That is why in this article, we’re going to take a look at HTML5, CSS3, and jQuery tutorials, techniques, and resources that can replace aspects of a website where the use of Flash was the dominant and most practical option.

Forms

Pretty Checkboxs with jQuery

This is a cool tutorial that teaches you how to turn your ordinary check boxes into something stylish, and quite fun to use.

Pretty Checkboxes with jQuery

Rethinking Forms in HTML5

This is a great tutorial by the people at Nettuts+ about how you can get the most out of HTML5 for your fomrs.
Rethinking Forms with HTML5

jQuery Impromtu

jQuery Impromtu is a great replacement for alerts, prompts, and confirmations that users will enjoy and not find annoying in the slightest.

jQuery Impromptu

jQuery Simple Modal

Simple Modal is a flexible modal dialog framework which provides a great interface for development, allowing for some really nice looking forms too.

jQuery Simple Model

mcDropdown

This multi-column drop down layout is great for giving users a detailed tree of options to select from.

mcDropdown

jQ Transform

jQ Transform is a great tool for adding some style to your forms, giving them cool skin elements.

jqTransform

Emblematiq Niceforms

Niceforms by Embematiq is a cool jQuery plug-in that allows you to turn your boring forms into something cool with one of their designed themes, or with your own custom made one.

Emblematiq Niceforms

Uniform

Uniform masks your standard forms with custom skins and works in perfect sync with your real form elements, ensuring great accessibility and compatibility.

Uniform

Image Buttons a Part of Input Fields

This is a great tutorial to learn how to have image buttons inside of your input fields.

Images As Apart of Input Fields

DynamicWP Contact Form

This is a great WP plug-in that gives you a contact form that slides conveniently from the side of the page, and then back once it is no longer of use.

 

DynamicWP Contact Form

jQuery Highlight

jQuery Highlight is a great jQuery feature that gives your active input fields a highlight over them, as we know some users need all the extra guidance they can get.

jQuery Highlight

jQuery inline form Validation

jQuery inline form Validation is a cool hassle free form validation option that takes away the mess that is usually associated with this form feature.

jQuery inline from Validation

Navigation

White Smoke Menu Style

This jQuery powered navigation menu is very reminiscent of what was usually done in flash, and moves so smoothly you might think it was. It is fully browser compatible, and even maintains functionality if Javascript is turned off.

jQuery White Smoke Menu

jQuery mb.Menu

This jQuery menu plug-in is a great option to look into when aiming to build a complex multilevel tree menu with some style and great functionality.

mb.Menu

Coda Slider

Coda Slider is a very versatile and feature full panel slider. It comes as is very well suitable for your panel slider needs, and there have been great advancesin how to better it.

Coda Slider

 ID Tabs

This is by far the best tabs and/or panel navigation jQuery plug-in when level of how extensibility is concerned.

ID Tabs

Smooth Horizontal Sliding Menu

This is a cool tutorial that teaches you how to make a jQuery powered menu with the sub entries sliding out horizontally.

Horizontal Sliding Menu

jBreadCrumb Menu

This collapsible bread crumb menu that collapses based on the the amount and length of the elements in the set.

jBreadCrumb

jQuery FLOWERNAV

FLOWERNAV is a cool animated navigation plug-in that, well gives a flower effect to your link.

FLOWERNAV

jQuery Accordion

This is an easy to follow jQuery accordion style navigation menu tutorial.

Accordion Style Menu

Interface

jQuery Slide Note

Slide Note is a great plugin for giving your visitors a little hint, or note about something on your website.

Slide Note

jQuery Page Peel

Page peel is a simple to use jQuery plug-in that is great when you want to advertise something in a cool way.

jQuery Page Peel

jQuery InfiniScroll 

InfiniScroll is a cool plug-in that allows for an never ending scrollable section. This is great for websites that have sections with long lists.

jQuery InfiniScroll

jQuery SliderNav

SliderNav is a jQuery plug-in that allows you to incorporate dynamic vertically sliding content to your website.

SliderNav

jQuery Tipped

Tipped is a cool plug-in that easily allows you to add tips to your website’s content, there are also cool skins to choose from.

Tipped

Supersized

Supersized is a jQuery plug-in that allows you to have a image slideshow as your website’s background.
jQuery Supersized

Imagin8

Imagin8 is not just another jQuery image slider. This one allows for you to direct a path folder, so ALL THE IMAGES DON’T HAVE TO BE IN YOU HTML! Just label your first image as 1.jpg for example, and the following the numerically after that, and they will be automatically added to your slideshow. Great for clients.

Imagin8

jQuery Lettering

Lettering is a jQuery plug-in that allows you to have complete control of  every letter, opening for great creative web typography experimenting.

jQuery Lettering

jQuery Stylesheet Switcher

Stylesheet Switcher is a jQuery plug-in that lets you set links within your page to change to different stylesheets.

jQuery Stylesheet Switcher

Flip

Flip is a jQuery plug-in that lets you flip your web elements in one of four directions.

Flip

September 29 2011

02:12

Web Design & Development Podcasts


  

Not long ago we had a post that discussed the role that podcasts have been playing in the design field. After which we were asked for a post that focused on more web design and development related podcasts for our readers. Something of a proverbial playlist of shows that are currently helping to shape the fields from the virtual airwaves. So here we are!

We scoured the bountiful podcast offerings that the design and development community have on offer these days, and found some great shows to point our readers towards. Naturally, every one has different tastes, so we tried to assemble a nice mix of styles and show formats so that there is something that every one will find appealing in this list.

Take a look down through all of these shows and see if any of the descriptions trip your trigger. Then follow the links to their sites, or the images to their iTunes feed to check out the show for yourself.

On With the Shows

There are hours upon hours of web design and development podcasts gathered for you here. From instructional to conversational to informative, the spectrum they span is as impressive as the shows themselves. Enjoy.

The Big Web Show

The Big Web Show features special guests and topics like web publishing, art direction, content strategy, typography, web technology, and more. It’s everything web that matters. Hosted by Dan Benjamin & Jeffrey Zeldman.

This is one of the more popular podcasts in the showcase, and as such, you have probably already heard of it. However, the list would not have felt complete without it.

PageBreak Podcast

PageBreak is a design, business and marketing-themed podcast hosted by Liz Andrade and Niki Brown. The main goal of the club is to build a strong online community of designers, developers, freelancer (like ourselves) and to encourage people to read more and share their ideas and opinions!

If the fantastic insights weren’t enough, the back and forth between the hosts gives one a sense of being in on the conversation…in a completely passive manner, but still, immersed in the discussion.

The Web Ahead

A weekly podcast about changing technologies and the future of the web, discussing HTML5, mobile, responsive design, iOS, Android, and more. Hosted by Jen Simmons.

This is a brand new podcast that is just getting going, but with the backing of the 5by5 team (responsible for The Big Web Show among others) and the fabulous host it has a promising future for sure.

Web Axe – Practical Web Design Accessibility Tips

Practical web accessibility tips. Blog and podcast for programmers, coders, or anyone else interested in techniques for web accessibility (see WAI, Section 508, WebAIM).

Only latest 3 are available through iTunes, but others are available via the website, so never fear. Plenty of listening to catch up on awaits.

Design Festival Podcast

Practical web design tips, strategies, and inspiration. We love exploring usability, typography, and new trends in web design. Part of the SitePoint Network.

Fairly new show, with only the most current episodes are available through iTunes while the rest are posted on the website

ExplicitWeb Design & Development

ExplicitWeb is a regularly recorded podcast all about the front lines of website design and development. These typically half-hour shows are made up of hosts Rob Hawkes, Hannah and John O’Nolan discussing the finer points of the industry, as well as sharing helpful tips and information for the savvy web professional.

Like the title states, this is an explicit show. However, it does offer a comprehensive look at the design and development industries that resonates with a number of fans. Might be just the show you are looking for.

Weekly Web Tools

Tips and Reviews of Web Tools for the Do it yourself Webmaster.

A short and sweet show dedicated to letting the community know about resources that are available at our disposal.

The ATX Web Show

The ATX Web Show is a podcast all about the web design and development community in Austin, TX. Our city is consistently rated as one of the top cities in America and our mission is to highlight what is coming out of the web community here. From apps, to design, to startups, to indie developers; we dive into the never-ending stream of talented web creators. Hosted by Dave Rupert and his co-hosts Trent Walton and Reagan Ray

While focused mainly on what is happening in Austin, the show still acts as a good resource for all members of the design and development communities. Certainly worth a listen, might just be your cup of tea.

Web Directions Podcast

Sessions from the Web Directions conference series. Sessions are © Web Directions and the respective speakers. See individual sessions for license details.

Each annual conference shared via podcast, those who have not been able to attend do not have to miss out.

Frederick Weiss – Keeping the Web in Check

I am a strategist with over 12 years of web development experience. I have a passion for typography, clarity, detail, and general UI best practices. I PLAN, DESIGN, and BUILD web sites with results.

The show is less than a year old, but seems to be building on a solid foundation.

Herding Code

A weekly discussion featuring K. Scott Allen (odetocode.com), Kevin Dente, Scott Koon (lazycoder.com), and Jon Galloway.

With over a hundred episodes, this weekly roundtable discussion is a virtual goldmine of development information.

Web Design 1

This podcast features live screencasted lessons in the use of Fireworks and Dreamweaver as part of the Web Design 1 class at New Hartford High School in New Hartford, NY, USA. Skills taught here specific for students enrolled in the class but anyone is free to subscribe and learn how to make great looking web graphics and websites!

If it is the instructional (Fireworks and Dreamweaver specific) that you are seeking in your design podcast playlist, then this is certainly the one for you. Loads of content to check out.

UXpod – User Experience Podcast

A free-ranging set of discussions on matters of interest to people involved in user experience design, website design, and usability in general.

With years of shows in the archives, this podcast is a wonderful resource from the UX side of the field.

Art Zen Podcast

A podcast about art, design and the web.

Again, while not always about the web and design, there are some episodes that web professionals would be amiss to…well, miss.

The Digital Life

A candid look at digital technology from the people trusted by tech giants like Apple, Microsoft and Oracle, major organizations like AstraZeneca, General Motors and BarackObama.com, and hundreds of hungry start-ups.

An interesting and explicit podcast that takes on living in this digital age and the technology that is driving it.

Design Critique: Products for People

Design Critique encourages usable product designs for a better customer experience. Using principles and experience from our careers helping clients and employers create usable products, we critique software and hardware based on long-term experience with them in our own lives. We also interview our peers in the user experience-related fields of User-Centered Design (UCD), human-computer interaction (HCI), usability engineering, information architecture, technical communication, interaction design, customer research, and more! All while maintaining a light-hearted spirit of inquiry about how we can improve the world by designing products that serve people better.

While not strictly web design related, there is a lot of useful usability and user focused design content that lands with designers across the board. Given that it is all about building a better customer experience, we can all learn something from these poignant dissections.

(rb)

May 28 2011

10:00

Pros And Cons Of Using Frameworks

Sometimes you should ask yourself, why you need to do the same thing everyday when there’s a new bridge to shorten the path. Think of a framework as a bridge that will help you code faster and easier. Did you notice I didn’t include the word “better” in the last sentence? Faster and easier doesn’t always mean better, but we will get to that later.

First things first, so what is a framework really? It actually depends on the context it is used. It can be defined as an abstraction tool that makes it easier to develop applications and reuse code.

“The framework aims to alleviate the overhead associated with common activities performed in Web development… and they often promote code reuse.”

Like everything else, when it comes to its use, a framework has advantages and downsides. Below is a list of some important facts you should consider, before you decide to start learning or using one.

Pros

Pros of using a framework

Efficiency

Tasks that usually would take you hours and hundreds of lines of code to write, can now be done in minutes with pre-built functions. Development becomes a lot easier, so if it’s easier it’s faster, and consequently efficient.

Security

A widely used framework has big security implementations. The big advantage is the community behind it, where users become long-term testers. If you find a vulnerability or a security hole, you can go to the framework’s website and let the team know so they can fix it.

Cost

Most popular frameworks are free, and since it also helps the developer to code faster, the cost for the final client will be smaller.

Support

As any other distributed tool, a framework usually comes with documentation, a support team, or big community forums where you can obtain quick answers.

Cons

Cons

You learn the framework, not the language

I believe this to be the major problem. If you’re using a framework and you know very little about the language behind it, you will learn the framework and not the language itself. The way you code jQuery is different from the way you code javascript. Simple put, if you know jQuery, it doesn’t mean you know javascript.

Limitation

The framework’s core behaviour can’t be modified, meaning that when you use a framework, you are forced to respect its limits and work the way it is required. Make sure you choose a framework that suits your needs.

Code is public

Since the framework is available to everyone, it is also available to people with bad intentions. It can be studied in order to know how things work and to find flaws that can be used against you.

JavaScript Frameworks

jQuery

http://jquery.com/

jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. jQuery is designed to change the way that you write JavaScript.

jQuery


Prototype

http://www.prototypejs.org/

Prototype is a JavaScript Framework that aims to ease development of dynamic web applications. Featuring a unique, easy-to-use toolkit for class-driven development and the nicest Ajax library around, Prototype is quickly becoming the codebase of choice for web application developers everywhere.

Prototype


Mootools

http://mootools.net/

MooTools is a compact, modular, Object-Oriented JavaScript framework designed for the intermediate to advanced JavaScript developer. It allows you to write powerful, flexible, and cross-browser code with its elegant, well documented, and coherent API.

Mootools


PHP Frameworks

CodeIgniter

http://codeigniter.com/

CodeIgniter is a powerful PHP framework with a very small footprint, built for PHP coders who need a simple and elegant toolkit to create full-featured web applications.

Codeigniter


CakePHP

http://cakephp.org/

CakePHP is a rapid development framework for PHP that provides an extensible architecture for developing, maintaining, and deploying applications.

CakePHP


Symfony

http://www.symfony-project.org/

Symfony is a full-stack framework, a library of cohesive classes written in PHP.

Symfony


Mobile Frameworks

jQuery Mobile

http://jquerymobile.com/

Query mobile framework takes the “write less, do more” mantra to the next level: Instead of writing unique apps for each mobile device or OS.

jQuery Mobile


iWebKit

http://snippetspace.com/projects/iwebkit/

iWebKit is a file package designed to help you create your own iPhone, iPod Touch and iPad compatible website or webapp.

iWebKit


DHTMLX Touch

http://www.dhtmlx.com/touch

DHTMLX Touch is an HTML5-based JavaScript library for building mobile web applications. It’s not just a set of UI widgets, but a complete framework that allows you to create eye-catching, cross-platform web applications for mobile and touchscreen devices.

DHTMLX


Ruby Frameworks

Ruby on Rails

http://rubyonrails.org/

Ruby on Rails is an open-source web framework that’s optimized for programmer happiness and sustainable productivity.

Ruby on Rails


Padrino

http://www.padrinorb.com/

Padrino is a ruby framework built upon the excellent Sinatra Microframework. Sinatra is a DSL for quickly creating simple web applications in Ruby.

Padrino


Bowline

http://bowlineapp.com/

Bowline is a framework for making cross platform desktop applications in Ruby, HTML and JavaScript.

Bowline


CSS Frameworks

Blueprint

http://www.blueprintcss.org/

Blueprint is a CSS framework, which aims to cut down on your development time.

Blueprint


960 Grid System

http://960.gs/

The 960 Grid System is an effort to streamline web development workflow by providing commonly used dimensions, based on a width of 960 pixels.

960 Grid System


YUI2

http://developer.yahoo.com/yui/grids/

The foundational YUI Grids CSS offers four preset page widths, six preset templates, and the ability to stack and nest subdivided regions of two, three, or four columns.

Yui2


Considerations

Now you understand why I didn’t include the word “better” on my first sentence. A framework can bring you several advantages and may suit your needs, but it also brings downsides to your projects. There are hundreds of frameworks out there, so be sure to choose carefully, if you plan to use one in the future.

May 26 2011

13:49

Better Image Management With WordPress

Advertisement in Better Image Management With WordPress
 in Better Image Management With WordPress  in Better Image Management With WordPress  in Better Image Management With WordPress

With the advent of sophisticated and user-friendly content management systems like WordPress, textual content has become increasingly easier to manage. The architecture of these systems aims to deliver a well-formed code foundation; this means that if you are a good writer, then your content will be just as awesome as the structure and quality of the code that runs it.

Gallery-room in Better Image Management With WordPress

However, media handling is, by nature, not the greatest. In many cases, images are used merely to make the website look good, not to supplement the content. Little care is usually taken to make these elements as useful as their textual counterparts. They are often tacked on as an afterthought; the owner thinks, “If all of my posts have an image, surely I should find something quickly for this next one as well.”

Because the content of images cannot be parsed by search engines, making sure they are rich in meta information before publishing them is important. Here are a few ways to enrich your blog using some common sense, best practices and the power of WordPress.

Understanding And Using Images

To get the most out of your graphic content, you’ll need to be familiar with how they work in HTML. To put an image on a page, you would add an image tag, with the appropriate attributes, like so:

<img title="A duck" src="http://myimages.com/theimage.jpg" alt="A mallard duck landing in the water" >

As you can see, the tag has three attributes that contain information about the image:

  • src is the URL source of the image file;
  • alt, or alternative, text is shown when an image can’t load (whether because of a loading error, text-only browser, etc.);
  • title is the title attribute, where you can add a short description of the image, which will pop up after hovering over the image for a second.

The src and alt attributes are both required; the HTML is invalid without them. However, HTML is not a strict language. Your post will still render just fine if you leave out the alt text, which is one of the negative aspect of loose languages: it doesn’t force best practices.

Why Use Alt and Title Tags?

The most useful aspect of alt and title tags is that they allow you to add text-based information to an element on your website that would otherwise be invisible to search engines. If you sell umbrellas, Google won’t see that one particular image on your page is of the coolest umbrella it’s ever seen. You’ll have to add that information yourself.

Also, alt tags can be a huge help to the disabled, because this is how they know what is in an image. So, use the title tag to write something snappy about the image, and use the alt tag to describe it. Sticking with our umbrella example, the incorrect way to do this would be:

<img title="Awesome umbrella" src="awesomeumbrella.jpg" alt="The most awesome umbrella ever" >

And the correct way would be:

<img title="Awesome umbrella" src="awesomeubrella.jpg" alt="A matte black cane umbrella with a spruce handle and a chrome tip" >

Remember, the alt tag is descriptive not only for the visually impaired, but for Google as well. Your website might even rank better if it’s image-heavy.

While not as critical, it is probably worth optimizing the file name as well. The name o290rjf.jpg won’t get in the way showing the image, but super-sleek-umbrella.jpg is a parsable bit of text, and there is a chance that some search engines would take it into account. Also, if someone downloads the image from your website, they will be able to find it more easily in their “Downloads” folder. And user satisfaction translates into more visits.

Adding Images Properly With WordPress

WordPress allows you to attach media to posts very easily through the “Add media” modal window, which you can access by clicking one of the icons over the editing toolbar in a post. You can select multiple images and upload them to the post with a click. Because this is so easy, adding the meta attributes is often overlooked and regarded as a hassle.

When uploading images, make sure to fill out the form which is displayed. Add the title and alt text at a bare minimum, but also consider filling in the caption and description fields. If you want a short, nicely formatted caption to appear under the image (which is a good idea), type one in. We’ll look later at harnessing the description field, so writing a paragraph or so about the image might be a good idea.

Once done, all you need to do is insert the image, and the correct HTML tag will be plopped in by WordPress automatically. By taking an extra minute, you will have added a sizable bit of text to your image, making it SEO-friendly and in turn making your website that much more informative. If this is all you have time for, then you have done the most important step. But let’s look at some more advanced image-handling techniques.

Managing Image Sizes

If you display an image at a size of 450×300 pixels, then having an image file of roughly the same size is a good idea. If the source file is 2250×1500 pixels, the image will show up just fine, but instead of loading a 50 KB image, you would be loading a 500 KB image, while achieving the same effect.

WordPress is super-smart, though, taking care of this for you by churning out different sizes for each image you upload. See the dimensions it creates by going to the media settings in the back end. You can modify these once you have the final layout, which I would advise.

For an image-centric website, you might want to add a couple of more sizes, to make sure you never serve an image that is bigger than needed. By putting the following code in your theme’s functions.php file, you create two extra sizes:

add_image_size( 'large_thumb', 75, 75, true );
add_image_size( 'wider_image', 200, 150 );

The first line defines an image that is cropped to exactly 75×75 pixels, and the second line defines an image whose maximum dimension is 200×150, while maintaining the aspect ratio. Note the name given in the first argument of the function, because you will be referring to it when retrieving the images, which you can do like so:

wp_get_attachment_image_src( 325, 'wider_image');

The first argument is the ID of the attachment that we want to show. The second argument is the size of the image.

Rebuilding Your Thumbnails

If you have been blogging for a while now, you probably have a ton of images. Adding an image size now will not create new thumbnails of your existing images. If you specify an image size—for example, our wider_image format—WordPress will fetch a resolution that is close to it, but it won’t create a thumbnail especially for this size.

Using a plug-in, however, you can go back and regenerate the thumbnails to make sure that all of the images are optimized, thus minimizing server load. I can personally vouch for AJAX Thumbnail Rebuild, which goes through all of your images and regenerates the selected sizes for you.

Using Featured Images

A featured image can capture the message of a post. Featured images have many uses: for adding flare in a magazine-style layout, underlining a point made in an article, or substituting for an article’s title (in the sidebar, for example).

Featured images have been built into WordPress since version 2.9, so you don’t need any special plug-ins. If you are using the new default WordPress theme, TwentyTen, or the cutting-edge TwentyEleven (which is right now only in development versions), then featured images are already enabled. Otherwise, you might need to switch them on manually. To enable them, just open your theme’s functions.php file, paste in the code below, and voila!

add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 115, 115 )

The first line of code tells WordPress to enable featured images, while the second sets the default size for featured thumbnails. The set_post_thumbnail_size() bit works just like the add_image_size() function we looked at above. You can give it a width, a height and, optionally, a third boolean parameter (true or false) to indicate whether it should be an exact crop.

Once that’s done, go into the back end and edit a post. You should see a featured image widget in the right sidebar; click it to add an image. Or navigate to the media section of the post, view an image’s details, and click the “Use as featured image” link.

The only thing left to do is make these featured images show up! You will need to edit the code for the loop in your theme’s files, which is usually found in index.php or in some cases in loop.php. Look for something like this:

<?php while ( have_posts() ) : the_post(); ?>
The code to display a post is inside here, it can be quite long
<?php endwhile; ?>

Wherever you want to show the images, add the following in the loop:

<?php the_post_thumbnail(); ?>

In some cases, you may want to show the featured image at a size different than the default. If so, you can pass the desired size as an argument, like so:

<?php the_post_thumbnail("wider_image"); ?>

You can name a size that you have previously created using add_image_size(), as I have done above, or you can use an array to specify a size on the fly: array(225, 166).

Creating Galleries

The easiest way to show multiple images in a post is to upload the images to the post and then use the gallery shortcode to display them all.

Gallery-settings in Better Image Management With WordPress

Simply open the “Upload/insert” media screen, click on “Galleries,” and scroll down to the gallery settings. Make sure the links point to the attachment pages (more on this later), and then insert the gallery. Now, thumbnails of all the images you have uploaded to that post will be displayed, each linked to its attachment page.

Including and Excluding Images

You can easily include images from other posts or exclude certain images from the current post by modifying the gallery shortcode. If you switch the editor to the HTML view, you should see [ gallery ] where the gallery would show up. You can add options to it using the following format: [ gallery option_1="value" option_2="value" ].

To include a specific image, you will need to know its attachment ID. You can find that by going to the “Media” section of the WordPress admin area, finding the image you need, hovering over it, and reading the target from the URL or status bar. It should be something like http://webtastique.net/wp-admin/media.php?attachment_id=92&action=edit. The number after attachment_id is what you need.

You can include multiple items like so: [ gallery include="23,39,45" ]. And exclude items the same way: [ gallery exclude="87,11" include="23,39,45" ].

Excluding the Featured Image

Sometimes you will want to use all of the images attached to a post except the featured one. You could find the ID of the image and enter it in the exclude options of the gallery shortcode every time, but that would be a hassle (especially if you change the featured image later). Let’s automate this.

Regrettably, the only way to do this is by replacing a core function in WordPress with our own, using the remove_shortcode() and add_shortcode() functions. The large chunk of code below may be off-putting, but implementing it is as easy as copying, pasting and adding two lines of code. The reason we need to add all this is that we can’t just go around editing a WordPress core file; we need to replace core functions with built-in functions.

First, open your theme’s functions.php file (if it doesn’t exist, simply create it), and add the following code to it:

// remove the  WordPress function
remove_shortcode('gallery', 'gallery_shortcode');
// add our own replacement function
add_shortcode('gallery', 'myown_gallery_shortcode');

This removes the gallery_shortcode() function that WordPress uses to display galleries and replaces it with our own function, called myown_gallery_shortcode().

The code below is almost exactly the same as the default, but we are adding a line to exclude our featured image. Paste the code below into the functions.php file, and then read the explanation further down:

function myown_gallery_shortcode($attr) {
	global $post, $wp_locale;

	static $instance = 0;
	$instance++;

	// Allow plugins/themes to override the default gallery template.
	$output = apply_filters('post_gallery', '', $attr);
	if ( $output != '' )
		return $output;

	// We’re trusting author input, so let’s at least make sure it looks like a valid orderby statement
	if ( isset( $attr['orderby'] ) ) {
		$attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] );
		if ( !$attr['orderby'] )
			unset( $attr['orderby'] );
	}
	extract(shortcode_atts(array(
		'order'      => 'ASC',
		'orderby'    => 'menu_order ID',
		'id'         => $post->ID,
		'itemtag'    => 'dl',
		'icontag'    => 'dt',
		'captiontag' => 'dd',
		'columns'    => 3,
		'size'       => 'thumbnail',
		'include'    => '',
		'exclude'    => $default_exclude
	), $attr));

	$default_exclude = get_post_thumbnail_id($post->ID);
	$exclude .= ",".$default_exclude; 

	$id = intval($id);
	if ( 'RAND' == $order )
		$orderby = 'none';

	if ( !empty($include) ) {
		$include = preg_replace( '/[^0-9,]+/', '', $include );
		$_attachments = get_posts( array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );

		$attachments = array();
		foreach ( $_attachments as $key => $val ) {
			$attachments[$val->ID] = $_attachments[$key];
		}
	} elseif ( !empty($exclude) ) {
		$exclude = preg_replace( '/[^0-9,]+/', '', $exclude );
		$attachments = get_children( array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );
	} else {
		$attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );
	}

	if ( empty($attachments) )
		return '';

	if ( is_feed() ) {
		$output = "\n";
		foreach ( $attachments as $att_id => $attachment )
			$output .= wp_get_attachment_link($att_id, $size, true) . "\n";
		return $output;
	}

	$itemtag = tag_escape($itemtag);
	$captiontag = tag_escape($captiontag);
	$columns = intval($columns);
	$itemwidth = $columns > 0 ? floor(100/$columns) : 100;
	$float = is_rtl() ? 'right' : 'left';

	$selector = "gallery-{$instance}";

	$output = apply_filters('gallery_style', "
		
		



\n";

	return $output;
}

In lines 18 through 29, WordPress is determining the default attributes. By default, nothing is excluded; so under this bit of code, we add two more lines, and that’s it:

$default_exclude = get_post_thumbnail_id($post->ID);
$exclude .= ",".$default_exclude;

The first line here finds the featured image of the post in question, while the second appends it to the exclude list. The rest of the code is the same as the default.

Using Attachment Pages

Colorblocks in Better Image Management With WordPress

In my opinion, attachment pages are the single best tool for creating richer, more informative image-driven websites. They enable you to create separate pages for each and every media item you have, affording you considerably more power in managing them.

Attachment pages exist in WordPress by default, but people seem to rarely link to them. Linking thumbnails directly to their full-sized versions (i.e. without the website framework) is much more common. I am not a huge fan of this because it throws the user into a completely new environment without prior warning. Attachment pages allow you to show the user a wealth of information about the image; and for those who need a bigger version, you can display download links for different sizes.

Enabling Attachment Pages

As stated, you don’t need to do anything to enable attachment pages. Just make sure to link your images to them instead of to the original files. For galleries, link to the attachment page using the radio buttons before inserting them. When inserting a single image, point the link’s URL field to the “Post URL” by clicking the relevant button below it.

Styling Attachment Pages

If your theme doesn’t have an attachment.php file, then single.php will handle the display of attachment pages by default. If you have a decent theme, chances are this will work fine without your needing to touch any code. When clicking on an image, you should arrive on a page that shows the title and description of the image and the image itself.

To add additional information to this page, you will need an attachment.php file. I suggest duplicating single.php and going from there, because in most cases it will have most of what you need.

Adding Image Data

To make the attachment pages more informative, add a bunch of meta data to your images. To help with this, I have created a plug-in especially for Smashing Magazine readers, which you can download from the WordPress Plugins page, or just search for “media custom fields” in WordPress’ back end where you “Add new” plug-ins.

This plug-in lets you create your own custom fields, like the photographer’s name, coordinates, color palette, etc. What you add is up to you. You can easily manage all of the information on the plug-in’s admin page.

In the video below, I’ll walk you through how I did this on my own blog. You’ll learn about basic usage and see an example.


Better Media Management With WordPress Using the Media Custom Fields Plugin,” by Daniel Pataki.

Creative Attachment Page Uses

Download Links for Image Sizes

Using the add_image_size() function mentioned above, you could create five or six image sizes and show Flickr-style download options that allow users to choose the dimensions of their preference. This is helpful when showcasing desktop backgrounds and large photographs. So, let’s do that:

// If we are on an attachment page, the $post object will be available and the $post->ID variable will contain the ID of the image in question.

// Find the meta data field from the postmeta table, which contains the sizes for a given image. This is the '_wp_attachment_metadata' field, which contains a serialized array. Take care, because if you use 'true' as the third parameter, the function will unserialize the string for you, so that you don’t need to do it.
$image_meta = get_post_meta( $post->ID, '_wp_attachment_metadata', true);

// Put all the image sizes and file names into an array for ease of use
$image_sizes = $image_meta['sizes'];
$image_sizes['original']['width']  =  $image_meta['width'];
$image_sizes['original']['height'] =  $image_meta['width'];
$image_sizes['original']['file']      =  $image_meta['file'];

// Display a list of links for these images
echo '
<h3>This image is available in the following formats</h3>

';
echo '

    '; foreach ( $image_sizes as $size_name => $size ) { $url = wp_get_attachment_image_src( $post->ID, $size_name ); $anchortext = $size['width'] . 'x' . $size['height']; echo "
".$anchortext.""; } echo ' ';

Adding Color Palettes

By adding some creativity to the mix, you can come up with some nifty features. The screencast above and the code below shows you how to display color blocks of the dominant colors in each of your photos.

Screen-shot-2011-02-11-at-1 21 12-PM in Better Image Management With WordPress

To accomplish this, you will first need to create a custom field using the Media Custom Fields plug-in and name it something like “Color Palette.” Remember to look at the field name that the system generates; it is displayed in parentheses next to the title you chose. It should be something like tqmcf_color-palette.

Once that’s done, edit the image you’d like, and add the following in the custom field: color_1,color_2,color_3, where colors_x should be hex values. In my case, I entered the following string: f0e9bf,e4dc99,000000.

Open up the attachment.php file in a code editor. Wherever you want to display the colors, you’ll need to add something like this:

// Retrieve the field value from the database
$color_palette = get_post_meta( $post->ID, 'tqmfc_color-palette', true );

// Turn the string into an array of values, where each value is one of the colors
$colors = explode( ',', $color_palette );

echo '

<h2>Logo Colors</h2>
';

// Loop through all the colors and create the color blocks, which will actually be links pointing the the color's page on Colourlovers.com
foreach ($colors as $color) {
    $link = 'http://www.colourlovers.com/color/'.$color.'/';
    echo '';
}

You will also need to style the link element so that it shows up. Because anchors are inline elements by default, if they have no content, they won’t show up. Here’s the CSS I used, but you’ll need to change it to match your website:

.color-block {
    display: block;
    float: left;
    height: 20px;
    margin-right: 3px;
    width: 30px;
}

Conclusion

As you can see, even with minimal effort, you can create a much more robust system for storing and showing images. And with some copying and pasting, you can take it one step further.

The first and most important step is to add meta data like alt tags to images, give them meaningful file names and so on. By doing so, you lay a foundation for any media management system. You can easily add other meta data to your files by using the Media Custom Fields plug-in for WordPress.

With this foundation in place and a few simple code tweaks, you can show images based on any of the custom fields you wish, displaying relevant and interesting information about them. Creating download buttons for multiple sizes and creating multiple color palettes are only the tip of the iceberg. The techniques showcased here can be used for so much more!

(al)


© Daniel Pataki for Smashing Magazine, 2011. | Permalink | Post a comment | Smashing Shop | Smashing Network | About Us
Post tags: development, Wordpress

May 23 2011

10:17

Cool and Useful jQuery Image and Content Sliders and Slideshows

Advertisement in Cool and Useful jQuery Image and Content Sliders and Slideshows
 in Cool and Useful jQuery Image and Content Sliders and Slideshows  in Cool and Useful jQuery Image and Content Sliders and Slideshows  in Cool and Useful jQuery Image and Content Sliders and Slideshows

Looking for some cool new (and free) jQuery slider plug-ins and scripts? Then here is the perfect round-up created just for you. Here, we have collected the best of the freshest jQuery plug-ins for creating amazing image and content sliders. Because all of these plug-ins come with different functionality, this guide should help you figure out which one suits you best. Let’s go!

jQuery Image And Content Sliders

Cloud Carousel (demo | download)

Here is a 3-D carousel, with optional auto-reflection that doesn’t require images to be modified or server code to be added. Accurate 3-D perspective and easy integration with basic valid HTML, all with a tiny bit of JavaScript.

Jqueryimage481 in Cool and Useful jQuery Image and Content Sliders and Slideshows

ShineTime (demo | download)

“A new kick-ass jQuery and CSS3 gallery with animated shine effects.” This effect will make user interface elements look like they’re a polaroid photo (or made of glass). The best part is that it’s not that difficult to achieve.

Jqueryimage45 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Nivo Slider (demo | download)

Nivo Slider is an awesome and lightweight jQuery plug-in for creating attractive image sliders. It simply converts a wrapper for images into a slider, and it offers nine unique transition effects.

Jqueryimage3 in Cool and Useful jQuery Image and Content Sliders and Slideshows

MLB.com Content Switcher with jQuery and CSS3 (demo | download)

The goal of this project was to recreate MLB.com’s switcher without any extraneous images or other non-essential elements that tend to make stuff less maintainable.

Jqueryimage51 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Create Scrollable Interface (demo | download)

This jQuery plug-in creates a scrollable interface with which to scroll over a large image in a small area.

Jqueryimage52 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Beautiful Photo Stack Gallery with jQuery and CSS3 (demo | download)

The idea here is to show photo albums with a slider, and when an album is chosen, its images are displayed as a beautiful photo stack. In this stack view, you can browse through images by tucking the one on top under the stack with a slick animation.

Jqueryimage58 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Micro Image Gallery: A jQuery Plugin (demo | download)

Jqueryimage54 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Minimalistic Slideshow Gallery with jQuery (demo | download)

This simple and beautiful slideshow gallery can be easily integrated in your website. The slideshow is in a container, with options to view a thumbnail grid, pause the slideshow and navigate through the pictures. The grid slides out from above and allow the user to navigate the thumbnails.

Jqueryimage55 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Image Slider with Unique Effects (demo | download)

This coin-slider jQuery image plug-in has several transition effects.

Jqueryimage1 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Create image gallery in 4 lines of jQuery (demo | download)

Jqueryimage2 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Slideshow with strip effects (demo | download)

jqFancyTransitions is an easy-to-use jQuery plug-in for displaying photos as a slideshow with fancy transition effects.

Jqueryimage4 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Nivo Zoom (demo | download)

Nivo Zoom is a free jQuery image zoomer intended as a replacement for a lightbox.

Jqueryimage5 in Cool and Useful jQuery Image and Content Sliders and Slideshows

AD Gallery, gallery plugin for jQuery (demo | download)

A highly customizable gallery and showcase plug-in for jQuery.

Jqueryimage6 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Animate Panning Slideshow with jQuery (demo | download)

Jqueryimage7 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Image Scale Carousel (demo | download)

When working with images online, keeping the aspect ratio intact is as important as anything. That is what’s so nice about this jQuery plug-in: you don’t have to worry about sizing all of your images perfectly. It auto-scales your images for you, making implementation super-simple.

Jqueryimage8 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Sudo Slider (demo | download)

Essentially, Sudo Slider is a slider plug-in that allows you to do whatever you want, with whatever HTML you want. It’s both a content and image slider

Jqueryimage9 in Cool and Useful jQuery Image and Content Sliders and Slideshows

GALLERYVIEW (demo | download)

GalleryView is a content gallery plug-in capable of displaying any HTML content in an animated gallery view. Visit the project’s home page for documentation and demonstrations.

Jqueryimage10 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Jquery Plugin MopSlider 2.4 (demo | download)

MopSlider is a slider box that can contain any item with a set height and width. With version 2.5, MopSlider can be added to a page however many times you want. An auto-move function is included.

Jqueryimage11 in Cool and Useful jQuery Image and Content Sliders and Slideshows

jQuery Image Scroller (demo | download)

Making use of jQuery’s excellent animation features, this image scroller is completely autonomous and begins scrolling once the page loads. The finished widget is completely cross-browser compatible and performs as expected in the latest versions of the most common browsers.

Jqueryimage12 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Image Gallery Using jQuery and Flickr (demo | download)

Jqueryimage13 in Cool and Useful jQuery Image and Content Sliders and Slideshows

jQuery plugin: Wilq32.RotateImage (demo | download)

This is the product of the Wilq32.PhotoEffect snippet. You can use this tiny script to rotate images (at any angle) directly on the client side (e.g. with user-generated content) and animate them using your own functions.

Jqueryimage14 in Cool and Useful jQuery Image and Content Sliders and Slideshows

jQZoom Evolution (demo | download)

JQZoom is a JavaScript image magnifier built on jQuery. The script makes it easy to magnify whatever you want.

Jqueryimage15 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Photo gallery using jQuery and VisualLightBox (demo | download)
Jqueryimage16 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Zoomimage (demo | download)

Jqueryimage17 in Cool and Useful jQuery Image and Content Sliders and Slideshows

YoxView (demo | download)

YoxView is a free lightbox-type media and image viewing jQuery plug-in. It’s easy to use and feature-rich.

Jqueryimage18 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Supersized (demo | download)

This plug-in resizes images to fill the browser while maintaining their dimensions. You can cycles images and backgrounds in a slideshow with transitions and preloading. And navigation controls allow for “Pause/Play” and “Forward/Back.”

Jqueryimage19 in Cool and Useful jQuery Image and Content Sliders and Slideshows

AnythingSlider (demo | download)

Jqueryimage20 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Photo Revealer (demo | download)

With this, you get a line of cropped thumbnails on a string. Clicking the “More Info” button expands a photograph to full size and reveals additional information. Photos are loaded on page load, so there is no waiting after clicks.

Jqueryimage21 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Exposure (demo | download)

Jqueryimage47 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Auto-Playing Featured Content Slider (demo | download)

This is an alternative to the jQuery Coda Slider plug-in. With this, a slide can be any kind of HTML content whatsoever, even a full-size image with overlay. Each slide has a unique thumbnail that, when clicked, takes you to the corresponding slide, with an arrow above indicating the active panel. And it auto-plays!

Jqueryimage22 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Horinaja (demo | download)

Horinaja is a ready-to-use slideshow that can be used with either Scriptaculous/Prototype or jQuery. It allows you to use the mouse wheel for navigation; when the mouse is outside of the slideshow area, it scrolls; when hovering over the slideshow, scrolling pauses.

Jqueryimage23 in Cool and Useful jQuery Image and Content Sliders and Slideshows

S3 Slider (demo | download)

This one’s easy. First, enable the jQuery library, and then include the S3 Slider JavaScript in the head of the page where you want to use it.

Jqueryimage24 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Slide Deck (demo | download)

SlideDeck is a powerful plug-in that lets you organize any type of content into a beautiful and user-friendly slider.

Jqueryimage25 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Galleriffic (demo | download)

A jQuery plug-in for rendering rich fast photo galleries.

Jqueryimage26 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Photo Gallery – Dark Theme (demo | download)

GalleryView decides the best way to animate your filmstrip. When the gallery is wider than the filmstrip, the filmstrip remains stationary and the pointer slides from frame to frame. When the filmstrip is too long for the gallery, the pointer remains still and the filmstrip animates beneath it.

Jqueryimage27 in Cool and Useful jQuery Image and Content Sliders and Slideshows

jQuery morphing gallery (demo | download)

A gallery that “morphs” images between transitions.

Jqueryimage28 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Simple Accordion w/ CSS and jQuery (demo | download)

Designed and implemented with usability in mind, this accordion can come in very useful when organizing a good chunk of content.

Jqueryimage29 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Automatic Image Slider w/ CSS & jQuery (demo | download)

Jqueryimage30 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Create a Slick and Accessible Slideshow Using jQuery (demo | download)

A usable and accessible slideshow widget for your website that uses HTML, CSS and JavaScript (via jQuery).

Jqueryimage31 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Fancy Thumbnail Hover Effect w/ jQuery (demo | download)

Jqueryimage32 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Coda Slider Effect (demo | download)

Jqueryimage33 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Simple Controls Gallery (demo | download)

Want to display images as an automatic slideshow that can be played or paused by the user? Simple Controls Gallery displays an image by fading it into view over the previous one. Navigation controls pop up when the mouse rolls over the gallery.

Jqueryimage34 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Popeye (demo | download)

jQuery.popeye is an advanced image gallery script built on jQuery. Use it to save space when displaying a collection of images, and offer users an elegant way to show big versions of images without disrupting the page flow.

Jqueryimage35 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Simple demo (demo | download)

Jqueryimage36 in Cool and Useful jQuery Image and Content Sliders and Slideshows

ImageFlow (demo | download)

ImageFlow is an unobtrusive and user-friendly JavaScript image gallery.

Jqueryimage37 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Moving Boxes (demo | download)

Jqueryimage38 in Cool and Useful jQuery Image and Content Sliders and Slideshows

SlideViewerPro (demo | download)

SlideViewerPro is a fully customizable jQuery image gallery engine that allows you to create outstanding sliding galleries or interactive galleries in blog posts.

Jqueryimage39 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Pirobox (demo | download)

Jqueryimage40 in Cool and Useful jQuery Image and Content Sliders and Slideshows

jQuery simple panorama viewer (demo | download)

This small plug-in for jQuery will display any image on the page that has the class panorama as an interactive panorama.

Jqueryimage41 in Cool and Useful jQuery Image and Content Sliders and Slideshows

A Beautiful Apple-style Slideshow Gallery (demo | download)

Jqueryimage42 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Flickr Photobar Gallery (demo | download)

The aim here was to build a bottom photo bar that one could easily integrate into a website. It is hidden initially and slides up when the handle is clicked. The photo sets are first shown and when one of them is chosen; all of the set’s images can be viewed as thumbnails; when a thumbnail is clicked, the full view appears as an overlay.

Jqueryimage60 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Step Carousel Viewer (demo | download)

Step Carousel Viewer displays images and even rich HTML by side-scrolling them left and right. Users can jump to any panel on demand or browse the gallery by scrolling through any number of panels at a time. A smooth sliding animation is used to transition between items. And don’t worry, you can tame this script to do exactly want you want: two public methods, two custom event handlers, and three “status” variables are available for this purpose.

Jqueryimage43 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Zoom-Info (demo | download)

Jqueryimage46 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Box Slider (demo | download)

Jqueryimage49 in Cool and Useful jQuery Image and Content Sliders and Slideshows

jQuery Panel Gallery (demo | download)

An attractive and beautiful image slideshow plug-in, with a classic transition effect.

Jqueryimage53 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Image Highlighting and Preview with jQuery (demo | download)

A nice way to allow users to view bigger versions of images with some context.

Jqueryimage56 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Interactive Photo Desk (demo | download)

With this utility, photos can be dragged and dropped, stacked and deleted, with each action resembling a real-world action.

Jqueryimage57 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Multimedia Gallery for Images, Video and Audio (demo | download)

Jqueryimage59 in Cool and Useful jQuery Image and Content Sliders and Slideshows

Awesome Mobile Image Gallery Web App (demo | download)

A simple mobile image gallery, using the amazing jQTouch jQuery plug-in for mobile Web development. jQTouch has native animations, automatic navigation and themes for mobile Webkit browsers like those on the iPhone, iPod Touch, G1 and Pre.

Jqueryimage61 in Cool and Useful jQuery Image and Content Sliders and Slideshows

(al)(rb)

April 11 2011

10:00

40 Upcoming Design, Development & Social Media Conferences Worth Attending

Attending conferences and seminars can noticeably boost your knowledge and work productivity. Design, development and social media conferences give you the wonderful chance to acquire essential knowledge in spheres you’re interested, get in touch with the masters in the field and be up-to-date about the freshest trends. These conferences usually gathers together hundreds of designers, developers and social media experts so they can be a great place to connect with people and gain friends or business partners. Most of the conferences also offer workshops where you can test your skills in work and learn new useful techniques.

I suggest every designer, developer or emerging social media enthusiast to attend some kind of conference because it can be an invaluable experience and you can gain unique insights you wouldn’t gain anywhere else. This post presents 40 upcoming design, development, social media and other type of conferences sorted by date.

1.  O’Reilly MySQL Conference

Mysql-conferences-design-development-worth-attending

The O’Reilly MySQL Conference & Expo is an interactive learning community—four days packed with connections to MySQL developers and open source experts who know their subject inside and out. You’ll gain unique insights from speakers, vendors, project leaders, and other participants who are using MySQL to successfully run the world’s most demanding applications, saving millions of dollars over proprietary software and hardware solutions.

When: April 11–14
Where: Santa Clara, CA
Costs: $699–$1449
Workshops: No, but there will be in-depth tutorials

2. MIX 2011

Mix-conferences-design-development-worth-attending

MIX is a gathering of developers, designers, UX experts and business professionals creating the most innovative and profitable consumer sites on the web. Sessions range from technical, code-based topics to expert advice on content strategy, usability and design. Explore the future of the standards-based web – join the conversation at MIX11.

When: April 12–14, 2011
Where: Las Vegas, NV
Costs: $1395
Workshops: No

3. PHP Community Conference

Php-community-conferences-design-development-worth-attending

The PHP Community Conference is a two-day event, taking place April 21st and 22nd, 2011 in Nashville, TN. They have an awesome line-up of speakers, including a keynote address by Rasmus Lerdorf. Things will kick off with a tutorial day that will introduce you to tools and ideas that you can use in your code right away. The second day will consist of presentations that will inspire you to create something new with PHP. With the help of our sponsors, organizers are able to offer admission to the entire event for $350 USD. They’ll provide lunch and snacks on both days. On Friday night, the conference will finish with a party featuring pecha kucha talks by our awesome attendees.

When: April 21–22, 2011
Where: Nashville, TN
Costs: $350
Workshops: No information

4. The Next Web Conference

Next-web-conferences-design-development-worth-attending

The Next Web Conference brings together the best audience and companies from Europe and the US to discuss the future of the web and mobile. The Next Web has a soul, a vibe that is shared amongst the speakers, the attendees, the partners and the organizers. Something you have to have experienced before you can put a finger on it.

When: April 27–29, 2011
Where: Amsterdam
Costs: €595 (before April 1st) – € 999
Workshops: No information

5. Google I/O Extended

Google-io-conferences-design-development-worth-attending

Google I/O brings together thousands of developers for two days of deep technical content, focused on building the next generation of web, mobile, and enterprise applications with Google and open web technologies such as Android, Google Chrome, Google APIs, Google Web Toolkit, App Engine, and more. Unfortunately the tickets are sold out though there still is a chance to connect with the I/O speakers. Google I/O Extended are free events focused on live-streaming parts of Google I/O. Depending on location, the event could also include local developer demos and other speaker sessions.

When: May 10–11, 2011
Where: Multiple locations
Costs: Free, though registration is required
Workshops: No

6. Web Directories Unplugged

Unplugged-conferences-design-development-worth-attending

HTML5 is fast becoming the way to develop not just web apps, but native apps for platforms like Android, iOS and webOS. Join Unplugged for two groundbreaking days of practical development and design presented by leading experts in this exploding field.

When: May 12–13, 2011
Where: Seattle, WA
Costs: $799 (before April 1st)
Workshops: $349 (conference attendees)

7. Future of Web Design

Future-web-conferences-design-development-worth-attending

The Future of Web Design is coming back to London in 2011. Following on from the success of last year they will be bringing you three beautiful days of essential web learning. Not only that, they’re also back at The Brewery for the conference where you will have two tracks and four workshops to choose from. They’re full day workshops, so you can really get into it and learn loads about the topic you’re most passionate about.

When: May 16–18, 2011
Where: London
Costs: £714
Workshops: Yes, additional £120

8. Web Directories @media

Media-conferences-design-development-worth-attending

Get together with the local web community to stay in touch with the freshest design ideas and the latest development techniques. Meet the biggest names and the newest faces, over two packed and fun-​​filled days with some of the friendliest people on the web. HTML5, CSS3, JavaScript, Mobile, Interaction Design, User Experience, and everything else that’s hot right now — it’s all on the carefully curated Web Directions @media program for 2011.

When: May 24–27, 2011
Where: London
Costs: £499 (before April 1st)
Workshops: £299 (conference attendees)

9. Web Visions

Web-visions-conferences-design-development-worth-attending

Web Visions explores the future of design, content creation, user experience and business strategy to uncover the trends and agents of change that will shatter your assumptions about the Web. Be ready to network, share ideas and be inspired by an all-star lineup of speakers.

When: May 25–27, 2011
Where: Portland, OR
Costs: $150–$625
Workshops: Yes, additional $300

10. Interlink Conference

Interlink-conferences-design-development-worth-attending

Interlink Conference will be a small and carefully crafted 3-day web event that will appeal to all web professionals. This international web design conference welcomes website architects, usability specialists, project managers, marketing coordinators, web developers, website designers and any other online professional that wants to meet others in the industry and get inspired.

When: June 2–4, 2011
Where: Vancouver
Costs: C$350
Workshops: Yes, though seems to be sold out

11. DIBI

Dibi-conferences-design-development-worth-attending

DIBI (pronounced “dibby”), is the annual Design It. Build It. Conference held at The Sage Gateshead in the North East of England. DIBI brings together both sides of the web coin for an unusual two-track web conference. World renowned speakers leading in their fields of work will talk about all things web.

When: June 7–8, 2011
Where: Gateshead, UK
Costs: £199
Workshops: No

12. An Event Apart

Event-apart-conferences-design-development-worth-attending

An Event Apart is an intensely educational two-day conference for passionate practitioners of standards-based web design. If you care about code as well as content, usability as well as design, An Event Apart is the conference you’ve been waiting for.

When: June 13–15, 2011; August 8–10, 2011; October 24–26, 2011; December 12–14, 2011
Where: Atlanta, GA; Minneapolis, MN; Washington, DC; San Francisco, CA
Costs: About $400–$1400
Workshops: No

13. How Design Conference

How-live-conferences-design-development-worth-attending

With more than 35 sessions and 30+ expert speakers, the HOW Design Conference offers everything you need to boost your design career and create outstanding work. You’ll learn how to use your software more effectively, develop a better creative process, find inspiration whenever you need it and more. Plus, you’ll be surrounded by thousands of creatives—the perfect environment for networking, learning and soaking up all the creative energy.

When: June 24–27, 2011
Where: Chicago, IL
Costs: $595–$1195
Workshops: $175 per workshop

14. Future of Web Apps

Future-apps-conferences-design-development-worth-attending

The Future of Web Apps is coming to Las Vegas in 2011. It’s a brand new event that takes place over three days, and much like it’s sister conference FOWD, there are four workshops to choose from and with each one being a full day workshop, your brain is bound to be bursting with new skills and techniques by the end of it.

When: June 27–29, 2011
Where: Las Vegas, NV
Costs: $90–$895
Workshops: Yes, additional $100

15. Big Design Conference

Big-conferences-design-development-worth-attending

The Big Design Conference is three intense days of learning within the scope of Strategy, User Experience, and Code Development. Experts from across the country will gather to present theories, research, experiences, and best practices to students, professionals, and executives looking to stay on the bleeding edge.

When: July 14–16, 2011
Where: Addison, TX
Costs: $150 (before April 30th)
Workshops: Yes, additional $50

16. UX Australia 2011

Ux-australia-conferences-design-development-worth-attending

UX Australia 2011 is a  four day user experience design conference, with inspiring and practical presentations, covering a range of topics about how to design great experiences for people.

When: August 22–26
Where: Australia
Costs: $300–$750
Workshops: Yes, $300–$600

17. London Design Festival

London-festival-conferences-design-development-worth-attending

First staged in 2003, the London Design Festival is one of the world’s most important annual design events. The nine-day Festival programme is made up of over 200 events and exhibitions staged by around 160 partner organizations across the design spectrum and from around the world

When: September 17–27, 2011
Where: London
Costs: Most events are free to enter
Workshops: No

18. Adobe MAX

Adobe-max-conferences-design-development-worth-attending

MAX is a unique opportunity to connect with thousands of designers, developers, and business leaders as we shape the future of digital media together. Discover how to realize the full potential of your content and applications. Find new opportunities presented by rich experiences across screens. Explore new methods for monetizing content. Learn about innovative technologies that enable designers and developers to work together more effectively. Join us and get inspired.

When: October 1–5, 2011
Where: Los Angeles, CA
Costs: No information
Workshops: No information

19. Pivot – AIGA Design Conference

Pivot-aiga-conferences-design-development-worth-attending

Design is at a critical inflection point as a practice, thought process and force for change. At “Pivot,” this year’s AIGA Design Conference in Phoenix, they’ll explore the shifts prompting this change—in design thinking, practice, education, technology, society and business—and discuss how designers can prepare for the complexities of the future.

When: October 13–16, 2011
Where: Phoenix, AZ
Costs: $900 (before June 8th)
Workshops: Yes, includes in price

20. View Conference

View-conferences-design-development-worth-attending

VIEW Conference is the premiere international event in Italy on Computer Graphics, Interactive Techniques, Digital Cinema, 3D Animation, Gaming and VFX. VIEW 2011 will continue to focus on exploring the increasingly fluid boundary between real and digital worlds. Through lectures, meetings, tributes, exhibits, screenings and demo presentations VIEW will reveal the new digital frontier sweeping from cinema to architecture, from automotive design to advertisement, from medicine to videogames.

When: 25–28 October, 2011
Where: Turin, Italy
Costs: €80–€300
Workshops: Yes, included in price

21. Build

Build-conferences-design-development-worth-attending

Build is a small, yet perfectly formed, design conference taking place this November in Belfast, Northern Ireland. More details coming soon.

When: November 7–11, 2011
Where: Belfast, Northern Ireland
Costs: No information
Workshops: No information

22. Design City 2011

City-conferences-design-development-worth-attending

Visit Design City and see the latest graphic design tools, services, and products from the world’s largest vendors. You’ll see and test software that you’ve been wanting to try, you’ll meet the people that you talk to on the phone every day, and you’ll be wowed by some of the latest technology created for your profession.

When: November 10–12, 2011
Where: Toronto, ON
Costs: No information
Workshops: No Information

23. Web Design World

Web-world-conferences-design-development-worth-attending

Since 1997, Web Design World has helped thousands of web designers to learn what they need to know to make better web sites, manage web projects, and get home at a decent hour. Their recipe is simple. Start with great designers and developers who also have that rare gift of being able to teach.  Add more great designers and developers who are in the trenches, creating the web sites, large and small, that we use every day. Mix for two or three days. Serve via HTTP.

When: December 5–7, 2011
Where: Orlando, FL
Costs: No information (2010 conference costed about $400–$1200)
Workshops: No information

24. Mogo Media Conferences

Mogo-media-conferences-design-development-worth-attending

MOGO Media delivers best-of-class training events, conferences and seminars for the global design community. An independent organization, MOGO Media specializes in dedicated events geared toward niche and focused markets that utilize Adobe products. Partnering with the world’s leading authors, experts and professionals, MOGO Media offers focused and meaningful content to print, web and cross-media design professionals including The InDesign Conference, The Creative Suite Conference, The Vector Conference, The Pixel Conference, The Web Design Conference, and The Conference for Adobe Acrobat.

Social media, tech and other conferences

1. Mobile Research Conference

Mobile-research-conferences-design-development-worth-attending

The Mobile Research Conference is the must-attend annual event for brands, agencies and academics interested in engaging consumers and capturing real-time feedback through mobile phones. Mobile, along with social media and online networks, represents the latest frontier for market research. Join other fearless pioneers and industry leading lights for MRC 2011 and discover how to engage respondents, extract insights for product innovation and optimize marketing activities.

When: April 18–19, 2011
Where: London
Costs: £650

2. Planet of the Apps Arabia

Planet-apps-conferences-design-development-worth-attending

Planet of the Apps Arabia 2011 brings together the mobile application ecosystem in one location. It is a two day strategic conference, a dedicated developer masterclass and a technology showcase exhibition. The conference will feature the industry’s most respected stakeholders who will be looking closely at the opportunities and challenges brought to your business by the explosion of mobile apps.

When: April 18–20, 2011
Where: Dubai, UAE
Costs: $4395

3. Where 2.0

Where-conferences-design-development-worth-attending

The O’Reilly Where 2.0 Conference explores the intersection of location technologies and trends in software development, business strategies, and marketing. The source for all things location-aware, Where 2.0 brings together CTOs, marketers, developers, technologists, researchers, geographers, startups, business developers, and entrepreneurs, to shed light on the issues surrounding:

When: April 19–21, 2011
Where: Santa Clara, CA
Costs: $1295
Workshops: Yes, $595

4. Activate New York

Activate-conferences-design-development-worth-attending

Activate is the Guardian newspaper’s platform for leaders working across all sectors who are proving that, through the use of technology and the internet, we can make the world a better place.

When: April 28, 2011
Where: New York, NY
Costs: $844.99

5. FITC Toronto

Fitc-conferences-design-development-worth-attending

Now in its 10th year, FITC Toronto is one of the largest and longest running events of its kind in the world. With some of the most unique and engaging presenters from around the globe, FITC Toronto is a three day blitz of presentations, demonstrations, and panel discussions, sandwiched between our legendary FITC parties and abundant networking opportunities. Topped off with the FITC Award Show, it’s three days and nights that will leave you inspired, energized and awed.

When: May 2–4, 2011
Where: Toronto, ON
Costs: c$699
Workshops: Yes, c$299

6. Fashion 140

Fashion140-conferences-design-development-worth-attending

E-commerce enabling customers to shop via mobile phone, tablets and Facebook;  customer engagement is now direct and more personal; the shopping experience is fast changing with new sites and mobile application allowing consumers to socialize and personalize the shopping experience –  these are just few topics Fashion140 will cover. Fashion140 is a brave collaborative inquiry into how the real time web, twitter, Facebook and other forms of social media are reshaping the fashion industry, now.

When: May 4, 2011
Where: New York, NY
Costs: $95

7. Social Loco

Social-loco-conferences-design-development-worth-attending

Social-Loco will dive into social and mobile web convergence, and what that means for SMB, big brands and consumers. Learn from real-world successes in daily deals, location based services and advertising, mobile marketing platforms and more. Executives from Groupon, Facebook, Google, ATTi, Microsoft and leading investors will address these topics in a highly interactive setting.

When: May 5, 2011
Where: San Francisco, CA
Costs: $295

8. TedxEast

Tedxeast-conferences-design-development-worth-attending

TEDxEast brings the spirit of the TED conference to New York City- hosting some of the world’s most fascinating thinkers, doers and teachers to inspire attendees to create greater impact with their ideas. And true to the format of the TED conference, TEDxEast presenters will give the talk of their lives in 18 minutes or less.

When: May 9, 2011
Where: New York, NY
Costs: $100 though you have to apply for invitation

9. Internet World 2011

Internet-world-conferences-design-development-worth-attending

Over 300 solution providers and 12,000 visitors, combining five shows in one event, Internet World is the event for digital marketing and online business. The Internet is worth over £100 billion to the UK economy. Fast changing, ever adapting and creating more competition every second the need to be ahead of the game has never been more important.

When: May 10–12, 2011
Where: London
Costs: Free

10. iStrategy

Istrategy-conferences-design-development-worth-attending

iStrategy conferences brings together the globe’s top marketers for intimate, interactive two-day gatherings.  Their speakers are global thought leaders at major brands, and our attendees are CXOs, VPs and Directors from a wide range of verticals, resulting in unmatched learning and networking opportunities.

When: May 11–12, 2011
Where: Amsterdam
Costs: £950

11. Mashable Connect

Mashable-connect-conferences-design-development-worth-attending

Mashable Connect 2011 is an intimate conference experience that will bring together leaders from the digital world for three days away to share and connect offline in a unique setting. Mashable will be bringing social and content from the online to the offline.

When: May 12–14, 2011
Where: Walt Disney World, FL
Costs: $2449

12. Digital Summit 2011

Digital-summit-conferences-design-development-worth-attending

Join hundreds of Internet executives, online marketers, entrepreneurs, web strategists, bloggers, and investors at the inaugural Digital Summit for expert content on opportunities and trends created by the latest in web innovation. Hear from dozens of industry thought leaders and innovators on topics such as Social Media, Mobile, Cloud Computing, Web Analytics, Online Advertising, Ecommerce, Email, and Search and much more.

When: May 16–17, 2011
Where: Atlanta, GA
Costs: $245

13. Next 2011

Next-conferences-design-development-worth-attending

From the very beginning in 2006, NEXT has been a community-driven event. They always received invaluable input from the NEXT community, helping organizers to put together a programme that is attractive for participants who invest their precious time and money.

When: May 17–18, 2011
Where: Berlin
Costs: € 940.10

14. Social Media 2011

Social-media-conferences-design-development-worth-attending

Social Media Marketing & Monitoring 2011 will bring together leading marketing experts, brands, agencies and journalists for an intensive one-day conference in San Francisco. Following the huge success of this conference last year, a team of experts will be joining us again for an update on the latest strategies, tools and techniques in social media marketing. From Facebook to Foursquare, Groupon to social gaming, social media monitoring, influencer engagement and social CRM – this conference will examine all the latest trends.

When: May 23, 2011
Where: San Francisco, CA
Costs: $195.00

15. a4u Expo Europe

A4u-expo-conferences-design-development-worth-attending

a4uexpo is Europe’s largest Performance Marketing Conference with over 1,000 delegates & 36 diverse conference sessions. From the latest SEO Strategy to the current thinking on Retargeting and Deduplication their diverse conference programme covers everything you need to know to succeed.

When: June 7–9, 2011
Where: Munich
Costs: €495

Conclusion

What about you? Do you plan to attend any of these conferences? What’s your experience with such events? Would love to hear your feedback – I consider conferences to be an invaluable place to make new contacts and gain fresh inspiration! What’s your take here?

March 28 2011

11:14

Get Started Developing For Android With Eclipse, Reloaded

Advertisement in Get Started Developing For Android With Eclipse, Reloaded
 in Get Started Developing For Android With Eclipse, Reloaded  in Get Started Developing For Android With Eclipse, Reloaded  in Get Started Developing For Android With Eclipse, Reloaded

In the first part of this tutorial series, we built a simple brew timer application using Android and Eclipse. In this second part, we’ll continue developing the application by adding extra functionality. In doing this, you’ll be introduced to some important and powerful features of the Android SDK, including Persistent data storage, Activities and Intent as well as Shared user preferences.

To follow this tutorial, you’ll need the code from the previous article. If you want to get started right away, grab the code from GitHub and check out the tutorial_part_1 tag using this:

1 Starting Point in Get Started Developing For Android With Eclipse, Reloaded

$ git clone git://github.com/cblunt/BrewClock.git
$ cd BrewClock
$ git checkout tutorial_part_1

Once you’ve checked out the code on GitHub, you’ll need to import the project into Eclipse:

  1. Launch Eclipse and choose File → Import…
  2. In the Import window, select “Existing Projects into Workspace” and click “Next.”
  3. On the next screen, click “Browse,” and select the project folder that you cloned from GitHub.
  4. Click “Finish” to import your project into Eclipse.

After importing the project into Eclipse, you might receive a warning message:

Android required .class compatibility set to 5.0.
Please fix project properties.

If this is the case, right-click on the newly imported “BrewClock” project in the “Project Explorer,” choose “Fix Project Properties,” and then restart Eclipse.

Getting Started With Data Storage

Currently, BrewClock lets users set a specific time for brewing their favorite cups of tea. This is great, but what if they regularly drink a variety of teas, each with their own different brewing times? At the moment, users have to remember brewing times for all their favorite teas! This doesn’t make for a great user experience. So, in this tutorial we’ll develop functionality to let users store brewing times for their favorite teas and then choose from that list of teas when they make a brew.

To do this, we’ll take advantage of Android’s rich data-storage API. Android offers several ways to store data, two of which we’ll cover in this article. The first, more powerful option, uses the SQLite database engine to store data for our application.

SQLite is a popular and lightweight SQL database engine that saves data in a single file. It is often used in desktop and embedded applications, where running a client-server SQL engine (such as MySQL or PostgreSQL) isn’t feasible.

Every application installed on an Android device can save and use any number of SQLite database files (subject to storage capacity), which the system will manage automatically. An application’s databases are private and so cannot be accessed by any other applications. (Data can be shared through the ContentProvider class, but we won’t cover content providers in this tutorial.) Database files persist when the application is upgraded and are deleted when the application is uninstalled.

We’ll use a simple SQLite database in BrewClock to maintain a list of teas and their appropriate brewing times. Here’s an overview of how our database schema will look:

+-------------------------------------+
| Table: teas                         |
+------------+------------------------+
| Column     | Description            |
+------------+------------------------+
| _ID        | integer, autoincrement |
| name       | text, not null         |
| brew_time  | integer, not null      |
+------------+------------------------+

If you’ve worked with SQL before, this should look fairly familiar. The database table has three columns: a unique identifier (_ID), name and brewing time. We’ll use the APIs provided by Android to create the database table in our code. The system will take care of creating the database file in the right location for our application.

Abstracting the Database

To ensure the database code is easy to maintain, we’ll abstract all the code for handling database creation, inserts and queries into a separate class, TeaData. This should be fairly familiar if you’re used to the model-view-controller approach. All the database code is kept in a separate class from our BrewClockActivity. The Activity can then just instantiate a new TeaData instance (which will connect to the database) and do what it needs to do. Working in this way enables us to easily change the database in one place without having to change anything in any other parts of our application that deal with the database.

Create a new class called TeaData in the BrewClock project by going to File → New → Class. Ensure that TeaData extends the android.database.sqlite.SQLiteOpenHelper class and that you check the box for “Constructors from superclass.”

2 Create Teadata Class1 in Get Started Developing For Android With Eclipse, Reloaded

The TeaData class will automatically handle the creation and versioning of a SQLite database for your application. We’ll also add methods to give other parts of our code an interface to the database.

Add two constants to TeaData to store the name and version of the database, the table’s name and the names of columns in that table. We’ll use the Android-provided constant BaseColumns._ID for the table’s unique id column:

// src/com/example/brewclock/TeaData.java
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.provider.BaseColumns;

public class TeaData extends SQLiteOpenHelper {
  private static final String DATABASE_NAME = "teas.db";
  private static final int DATABASE_VERSION = 1;

  public static final String TABLE_NAME = "teas";

  public static final String _ID = BaseColumns._ID;
  public static final String NAME = "name";
  public static final String BREW_TIME = "brew_time";

  // …
}

Add a constructor to TeaData that calls its parent method, supplying our database name and version. Android will automatically handle opening the database (and creating it if it does not exist).

// src/com/example/brewclock/TeaData.java
public TeaData(Context context) {
  super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

We’ll need to override the onCreate method to execute a string of SQL commands that create the database table for our tea. Android will handle this method for us, calling onCreate when the database file is first created.

On subsequent launches, Android checks the version of the database against the DATABASE_VERSION number we supplied to the constructor. If the version has changed, Android will call the onUpgrade method, which is where you would write any code to modify the database structure. In this tutorial, we’ll just ask Android to drop and recreate the database.

So, add the following code to onCreate:

// src/com/example/brewclock/TeaData.java
@Override
public void onCreate(SQLiteDatabase db) {
  // CREATE TABLE teas (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, brew_time INTEGER);
  String sql =
    "CREATE TABLE " + TABLE_NAME + " ("
      + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
      + NAME + " TEXT NOT NULL, "
      + BREW_TIME + " INTEGER"
      + ");";

  db.execSQL(sql);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
  onCreate(db);
}

Next, we’ll add a new method to TeaData that lets us easily add new tea records to the database. We’ll supply the method with a name and brewing time for the tea to be added. Rather than forcing us to write out the raw SQL to do this, Android supplies a set of classes for inserting records into the database. First, we create a set of ContentValues, pushing the relevant values into that set.

With an instance of ContentValues, we simply supply the column name and the value to insert. Android takes care of creating and running the appropriate SQL. Using Android’s database classes ensures that the writes are safe, and if the data storage mechanism changes in a future Android release, our code will still work.

Add a new method, insert(), to the TeaData class:

// src/com/example/brewclock/TeaData.java
public void insert(String name, int brewTime) {
  SQLiteDatabase db = getWritableDatabase();

  ContentValues values = new ContentValues();
  values.put(NAME, name);
  values.put(BREW_TIME, brewTime);

  db.insertOrThrow(TABLE_NAME, null, values);
}

Retrieving Data

With the ability to save data into the database, we’ll also need a way to get it back out. Android provides the Cursor interface for doing just this. A Cursor represents the results of running a SQL query against the database, and it maintains a pointer to one row within that result set. This pointer can be moved forwards and backwards through the results, returning the values from each column. It can help to visualize this:


SQL Query: SELECT * from teas LIMIT 3;

+-----------------------------------+
|  _ID  |  name       |  brew_time  |
+-----------------------------------+
|    1  |  Earl Grey  |          3  |
|    2  |  Green      |          1  | <= Cursor
|    3  |  Assam      |          5  |
+-------+-------------+-------------+

In this example, the Cursor is pointing at the second row in the result set (Green tea). We could move the Cursor back a row to represent the first row (Earl Grey) by calling cursor.moveToPrevious(), or move forward to the Assam row with moveToNext(). To fetch the name of the tea that the Cursor is pointing out, we would call cursor.getString(1), where 1 is the column index of the column we wish to retrieve (note that the index is zero-based, so column 0 is the first column, 1 the second column and so on).

Now that you know about Cursors, add a method that creates a Cursor object that returns all the teas in our database. Add an all method to TeaData:

// src/com/example/brewclock/TeaData.java
public Cursor all(Activity activity) {
  String[] from = { _ID, NAME, BREW_TIME };
  String order = NAME;

  SQLiteDatabase db = getReadableDatabase();
  Cursor cursor = db.query(TABLE_NAME, from, null, null, null, null, order);
  activity.startManagingCursor(cursor);

  return cursor;
}

Let’s go over this method in detail, because it looks a little strange at first. Again, rather than writing raw SQL to query the database, we make use of Android’s database interface methods.

First, we need to tell Android which columns from our database we’re interested in. To do this, we create an array of strings—each one of the column identifiers that we defined at the top of TeaData. We’ll also set the column that we want to order the results by and store it in the order string.

Next, we create a read-only connection to the database using getReadableDatabase(), and with that connection, we tell Android to run a query using the query() method. The query() method takes a set of parameters that Android internally converts into a SQL query. Again, Android’s abstraction layer ensures that our application code will likely continue to work, even if the underlying data storage changes in a future version of Android.

Because we just want to return every tea in the database, we don’t apply any joins, filters or groups (i.e. WHERE, JOIN, and GROUP BY clauses in SQL) to the method. The from and order variables tell the query what columns to return on the database and the order in which they are retrieved. We use the SQLiteDatabase.query() method as an interface to the database.

Last, we ask the supplied Activity (in this case, our BrewClockActivity) to manage the Cursor. Usually, a Cursor must be manually refreshed to reload any new data, so if we added a new tea to our database, we would have to remember to refresh our Cursor. Instead, Android can take care of this for us, recreating the results whenever the Activity is suspended and resumed, by calling startManagingCursor().

Finally, we’ll add another utility method to return the number of records in the table. Once again, Android provides a handy utility to do this for us in the DatabaseUtils class:

Add the following method, count, to your TeaData class:

// src/com/example/brewclock/TeaData.java
  public long count() {
    SQLiteDatabase db = getReadableDatabase();
    return DatabaseUtils.queryNumEntries(db, TABLE_NAME);
  }

Save the TeaData class, and fix any missing imports using Eclipse (Source → Organize Imports). With our data class finished, it’s time to change BrewClock’s interface to make use of the database!

Modify BrewClock’s Interface to Allow Tea Selection

The purpose of storing preset teas and brew times is to let the user quickly select their favorite tea from the presets. To facilitate this, we’ll add a Spinner (analogous to a pop-up menu in desktop interfaces) to the main BrewClock interface, populated with the list of teas from TeaData.

As in the previous tutorial, use Eclipse’s layout editor to add the Spinner to BrewClock’s main interface layout XML file. Add the following code just below the LinearLayout for the brew count label (around line 24). Remember, you can switch to the “Code View” tab along the bottom of the window if Eclipse opens the visual layout editor.

<!-- /res/layout/main.xml -->

<!-- Tea Selection -->
<LinearLayout
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content">

  <Spinner
    android:id="@+id/tea_spinner"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

</LinearLayout>

In the BrewClockActivity class, add a member variable to reference the Spinner, and connect it to the interface using findViewById:

// src/com/example/brewclock/BrewClockActivity.java
protected Spinner teaSpinner;
protected TeaData teaData;

// …

public void onCreate(Bundle savedInstanceState) {
  // …
  teaData = new TeaData(this);
  teaSpinner = (Spinner) findViewById(R.id.tea_spinner);
}

Try running your application to make sure the new interface works correctly. You should see a blank pop-up menu (or Spinner) just below the brew count. If you tap the spinner, Android handles displaying a pop-up menu so that you can choose an option for the spinner. At the moment, the menu is empty, so we’ll remedy that by binding the Spinner to our tea database.

3 Blank Spinner in Get Started Developing For Android With Eclipse, Reloaded

Data Binding

When Android retrieves data from a database, it returns a Cursor object. The Cursor represents a set of results from the database and can be moved through the results to retrieve values. We can easily bind these results to a view (in this case, the Spinner) using a set of classes provided by Android called “Adapters.” Adapters do all the hard work of fetching database results from a Cursor and displaying them in the interface.

Remember that our TeaData.all() method already returns a Cursor populated with the contents of our teas table. Using that Cursor, all we need to do is create a SimpleCursorAdapter to bind its data to our teaSpinner, and Android will take care of populating the spinner’s options.

Connect the Cursor returned by teaData.all() to the Spinner by creating a SimpleCursorAdapter:

// com/example/brewclock/BrewClockActivity.java

public void onCreate(Bundle savedInstanceState) {
  // …
  Cursor cursor = teaData.all(this);

  SimpleCursorAdapter teaCursorAdapter = new SimpleCursorAdapter(
    this,
    android.R.layout.simple_spinner_item,
    cursor,
    new String[] { TeaData.NAME },
    new int[] { android.R.id.text1 }
  );

  teaSpinner.setAdapter(teaCursorAdapter);
  teaCursorAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
}

Notice that we’ve made use of Android’s built-in android.R object. This provides some generic default resources for your application, such as simple views and layouts. In this case, we’ve used android.R.layout.simple_spinner_item, which is a simple text label layout.

If you run the application again, you’ll see that the spinner is still empty! Even though we’ve connected the spinner to our database, there are no records in the database to display.

Let’s give the user a choice of teas by adding some default records to the database in BrewClock’s constructor. To avoid duplicate entries, we’ll add only the default teas if the database is empty. We can make use of TeaData’s count() method to check if this is the case.

Add code to create a default set of teas if the database is empty. Add this line just above the code to fetch the teas from teaData:

// com/example/brewclock/BrewClockActivity.java
public void onCreate(Bundle savedInstanceState) {
  // …

  // Add some default tea data! (Adjust to your preference :)
  if(teaData.count() == 0) {
    teaData.insert("Earl Grey", 3);
    teaData.insert("Assam", 3);
    teaData.insert("Jasmine Green", 1);
    teaData.insert("Darjeeling", 2);
  }

  // Code from the previous step:
  Cursor cursor = teaData.all(this);

  // …
}

Now run the application again. You’ll now see that your tea Spinner has the first tea selected. Tapping on the Spinner lets you select one of the teas from your database!

4 Populated Spinner in Get Started Developing For Android With Eclipse, Reloaded

Congratulations! You’ve successfully connected your interface to a data source. This is one of the most important aspects of any software application. As you’ve seen, Android makes this task fairly easy, but it is extremely powerful. Using cursors and adapters, you can take virtually any data source (from a simple array of strings to a complex relational database query) and bind it to any type of view: a spinner, a list view or even an iTunes-like cover-flow gallery!

Although now would be a good time for a brew, our work isn’t over yet. While you can choose different teas from the Spinner, making a selection doesn’t do anything. We need to find out which tea the user has selected and update the brew time accordingly.

Read Selected Tea, and Update Brew Time

To determine which tea the user has selected from our database, BrewClockActivity needs to listen for an event. Similar to the OnClickListener event that is triggered by button presses, we’ll implement the OnItemSelectedListener. Events in this listener are triggered when the user makes a selection from a view, such as our Spinner.

Enable the onItemSelectedListener in BrewClockActivity by adding it to the class declaration. Remember to implement the interface methods onItemSelected() and onNothingSelected():

// src/com/example/brewclock/BrewClockActivity.java
public class BrewClockActivity extends Activity implements OnClickListener, OnItemSelectedListener {
  // …
  public void onItemSelected(AdapterView<?> spinner, View view, int position, long id) {
    if(spinner == teaSpinner) {
      // Update the brew time with the selected tea’s brewtime
      Cursor cursor = (Cursor) spinner.getSelectedItem();
      setBrewTime(cursor.getInt(2));
    }
  }

  public void onNothingSelected(AdapterView<?> adapterView) {
    // Do nothing
  }
}

Here we check whether the spinner that triggered the onItemSelected event was BrewClock’s teaSpinner. If so, we retrieve a Cursor object that represents the selected record. This is all handled for us by the SimpleCursorAdapter that connects teaData to the Spinner. Android knows which query populates the Spinner and which item the user has selected. It uses these to return the single row from the database, representing the user’s selected tea.

Cursor’s getInt() method takes the index of the column we want to retrieve. Remember that when we built our Cursor in teaData.all(), the columns we read were _ID, NAME and BREW_TIME. Assuming we chose Jasmine tea in teaSpinner, the Cursor returned by our selection would be pointing at that record in the database.

We then ask the Cursor to retrieve the value from column 2 (using getInt(2)), which in this query is our BREW_TIME column. This value is supplied to our existing setBrewTime() method, which updates the interface to show the selected tea’s brewing time.

Finally, we need to tell the teaSpinner that BrewClockActivity is listening for OnItemSelected events. Add the following line to BrewClockActivity’s onCreate method:

// src/com/example/brewclock/BrewClockActivity.java
public void onCreate() {
  // …
  teaSpinner.setOnItemSelectedListener(this);
}

That should do it! Run your application again, and try selecting different teas from the Spinner. Each time you select a tea, its brew time will be shown on the countdown clock. The rest of our code already handles counting down from the current brew time, so we now have a fully working brew timer, with a list of preset teas.

You can, of course, go back into the code and add more preset teas to the database to suit your tastes. But what if we released BrewClock to the market? Every time someone wanted to add a new tea to the database, we’d need to manually update the database, and republish the application; everyone would need to update, and everybody would have the same list of teas. That sounds pretty inflexible, and a lot of work for us!

5 Default Teas in Get Started Developing For Android With Eclipse, Reloaded

It would be much better if the user had some way to add their own teas and preferences to the database. We’ll tackle that next…

Introducing Activities

Each screen in your application and its associated code is an Activity. Every time you go from one screen to another, Android creates a new Activity. In reality, although an application may comprise any number of screens/activities, Android treats them as separate entities. Activities work together to form a cohesive experience because Android lets you easily pass data between them.

In this final section, you’ll add a new Activity (AddTeaActivity) to your application and register it with the Android system. You’ll then pass data from the original BrewClockActivity to this new Activity.

First, though, we need to give the user a way to switch to the new Activity. We’ll do this using an options menu.

Options Menus

Options menus are the pop-up menus that appear when the user hits the “Menu” key on their device. Android handles the creation and display of options menus automatically; you just need to tell it what options to display and what to do when an option is chosen by the user.

However, rather than hard-coding our labels into the menu itself, we’ll make use of Android string resources. String resources let you maintain all the human-readable strings and labels for your application in one file, calling them within your code. This means there’s only one place in your code where you need to change strings in the future.

In the project explorer, navigate to “res/values” and you will see that a strings.xml file already exists. This was created by Eclipse when we first created the project, and it is used to store any strings of text that we want to use throughout the application.

Open strings.xml by double clicking on it, and switch to the XML view by clicking the strings.xml tab along the bottom of the window.

Add the following line within the <resources>…</resources> element:

<!-- res/values/strings.xml -->
  <resources>
    <!-- … -->
    <string name="add_tea_label">Add Tea</string>
  </resources>

Here you’ve defined a string, add_tea_label, and its associated text. We can use add_tea_label to reference the string throughout the application’s code. If the label needs to change for some reason in the future, you’ll need to change it only once in this file.

Next, let’s create a new file to define our options menu. Just like strings and layouts, menus are defined in an XML file, so we’ll start by creating a new XML file in Eclipse:

Create a new Android XML file in Eclipse by choosing File → New → Other, and then select “Android XML File.”

Select a resource type of “Menu,” and save the file as main.xml. Eclipse will automatically create a folder, res/menu, where your menu XML files will be stored.

7 New Menu Xml in Get Started Developing For Android With Eclipse, Reloaded

Open the res/menus/main.xml file, and switch to XML view by clicking the “main.xml” tab along the bottom of the window.

Add a new menu item, add_tea.

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:id="@+id/add_tea" android:title="@string/add_tea_label" />
</menu>

Notice the android:title attribute is set to @string/add_tea_label. This tells Android to look up add_tea_label in our strings.xml file and return the associated label. In this case, our menu item will have a label “Add Tea.”

Next, we’ll tell our Activity to display the options menu when the user hits the “Menu” key on their device.

Back in BrewClockActivity.java, override the onCreateOptionsMenu method to tell Android to load our menu when the user presses the “Menu” button:

// src/com/example/brewclock/BrewClockActivity.java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.main, menu);

  return true;
}

When the user presses the “Menu” button on their device, Android will now call onCreateOptionsMenu. In this method, we create a MenuInflater, which loads a menu resource from your application’s package. Just like the buttons and text fields that make up your application’s layout, the main.xml resource is available via the global R object, so we use that to supply the MenuInflater with our menu resource.

To test the menu, save and run the application in the Android emulator. While it’s running, press the “Menu” button, and you’ll see the options menu pop up with an “Add Tea” option.

8 Add Teas Options Menu in Get Started Developing For Android With Eclipse, Reloaded

If you tap the “Add Tea” option, Android automatically detects the tap and closes the menu. In the background, Android will notify the application that the option was tapped.

Handling Menu Taps

When the user taps the “Add Tea” menu option, we want to display a new Activity so that they can enter the details of the tea to be added. Start by creating that new Activity by selecting File → New → Class.

9 New Activity Settings in Get Started Developing For Android With Eclipse, Reloaded

Name the new class AddTeaActivity, and make sure it inherits from the android.app.Activity class. It should also be in the com.example.brewclock package:

// src/com/example/brewclock/AddTeaActivity.java
package com.example.brewclock;

import android.app.Activity;
import android.os.Bundle;

public class AddTeaActivity extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  }
}

This simple, blank Activity won’t do anything yet, but it gives us enough to finish our options menu.

Add the onOptionsItemSelected override method to BrewClockActivity. This is the method that Android calls when you tap on a MenuItem (notice it receives the tapped MenuItem in the item parameter):

// src/com/example/brewclock/BrewClockActivity.java
@Override
public boolean onOptionsItemSelected(MenuItem item) {
  switch(item.getItemId()) {
    case R.id.add_tea:
      Intent intent = new Intent(this, AddTeaActivity.class);
      startActivity(intent);
      return true;

    default:
      return super.onOptionsItemSelected(item);
  }
}

With this code, we’ve told Android that when the “Add Tea” menu item is tapped, we want to start a new Activity; in this case, AddTeaActivity. However, rather than directly creating an instance of AddTeaActivity, notice that we’ve used an Intent. Intents are a powerful feature of the Android framework: they bind Activities together to make up an application and allow data to be passed between them.

Intents even let your application take advantage of any Activities within other applications that the user has installed. For example, when the user asks to display a picture from a gallery, Android automatically displays a dialogue to the user allowing them to pick the application that displays the image. Any applications that are registered to handle image display will be shown in the dialogue.

Intents are a powerful and complex topic, so it’s worth reading about them in detail in the official Android SDK documentation.

Let’s try running our application to test out the new “Add Tea” screen.

Run your project, tap the “Menu” button and then tap “Add Tea.”

Instead of seeing your “Add Tea” Activity as expected, you’ll be presented with a dialogue that is all too common for Android developers:

10 Crash in Get Started Developing For Android With Eclipse, Reloaded

Although we created the Intent and told it to start our AddTeaActivity Activity, the application crashed because we haven’t yet registered it within Android. The system doesn’t know where to find the Activity we’re trying to run (remember that Intents can start Activities from any application installed on the device). Let’s remedy this by registering our Activity within the application manifest file.

Open your application’s manifest file, AndroidManifest.xml in Eclipse, and switch to the code view by selecting the “AndroidManifest.xml” tab along the bottom of the window.

The application’s manifest file is where you define global settings and information about your application. You’ll see that it already declares .BrewClockActivity as the Activity to run when the application is launched.

Within <application>, add a new <activity> node to describe the “Add Tea” Activity. Use the same add_tea_label string that we declared earlier in strings.xml for the Activity’s title:

<!-- AndroidManifest.xml -->
<application …>
  …
  <activity android:name=".AddTeaActivity" android:label="@string/add_tea_label" />
</application>

Save the manifest file before running BrewClock again. This time, when you open the menu and tap “Add Tea,” Android will start the AddTeaActivity. Hit the “Back” button to go back to the main screen.

With the Activities hooked together, it’s time to build an interface for adding tea!

Building The Tea Editor Interface

Building the interface to add a tea is very similar to how we built the main BrewClock interface in the previous tutorial. Start by creating a new layout file, and then add the appropriate XML, as below.

Alternatively, you could use Android’s recently improved layout editor in Eclipse to build a suitable interface. Create a new XML file in which to define the layout. Go to File → New, then select “Android XML File,” and select a “Layout” type. Name the file add_tea.xml.

11 New Layout Xml in Get Started Developing For Android With Eclipse, Reloaded

Replace the contents of add_tea.xml with the following layout:

<!-- res/layouts/add_tea.xml -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical"
  android:padding="10dip">

  <TextView
    android:text="@string/tea_name_label"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

  <EditText
    android:id="@+id/tea_name"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>

  <TextView
    android:text="@string/brew_time_label"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

  <SeekBar
    android:id="@+id/brew_time_seekbar"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:progress="2"
    android:max="9" />

  <TextView
    android:id="@+id/brew_time_value"
    android:text="3 m"
    android:textSize="20dip"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal" />
</LinearLayout>

We’ll also need to add some new strings to strings.xml for the labels used in this interface:

<!-- res/values/strings.xml -->
<resources>
  <!-- … -->
  <string name="tea_name_label">Tea Name</string>

  <string name="brew_time_label">Brew Time</string>
</resources>

In this layout, we’ve added a new type of interface widget, the SeekBar. This lets the user easily specify a brew time by dragging a thumb from left to right. The range of values that the SeekBar produces always runs from zero (0) to the value of android:max.

In this interface, we’ve used a scale of 0 to 9, which we will map to brew times of 1 to 10 minutes (brewing for 0 minutes would be a waste of good tea!). First, though, we need to make sure that AddTeaActivity loads our new interface:

Add the following line of code to the Activity’s onCreate() method that loads and displays the add_tea layout file:

// src/com/example/brewclock/AddTeaActivity.java
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.add_tea);
}

Now test your application by running it, pressing the “Menu” button and tapping “Add Tea” from the menu.

12 Add Tea Interface in Get Started Developing For Android With Eclipse, Reloaded

You’ll see your new interface on the “Add Tea” screen. You can enter text and slide the SeekBar left and right. But as you’d expect, nothing works yet because we haven’t hooked up any code.

Declare some properties in AddTeaActivity to reference our interface elements:

// src/com/example/brewclock/AddTeaActivity.java
public class AddTeaActivity {
  // …

  /** Properties **/
  protected EditText teaName;
  protected SeekBar brewTimeSeekBar;
  protected TextView brewTimeLabel;

  // …

Next, connect those properties to your interface:

public void onCreate(Bundle savedInstanceState) {
  // …
  // Connect interface elements to properties
  teaName = (EditText) findViewById(R.id.tea_name);
  brewTimeSeekBar = (SeekBar) findViewById(R.id.brew_time_seekbar);
  brewTimeLabel = (TextView) findViewById(R.id.brew_time_value);
}

The interface is fairly simple, and the only events we need to listen for are changes to the SeekBar. When the user moves the SeekBar thumb left or right, our application will need to read the new value and update the label below with the selected brew time. We’ll use a Listener to detect when the SeekBar is changed:

Add an onSeekBarChangedListener interface to the AddTeaActivity class declaration, and add the required methods:

// src/com/example/brewclock/AddTeaActivity.java
public class AddTeaActivity
extends Activity
implements OnSeekBarChangeListener {
  // …

  public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    // TODO Detect change in progress
  }

  public void onStartTrackingTouch(SeekBar seekBar) {}

  public void onStopTrackingTouch(SeekBar seekBar) {}
}

The only event we’re interested in is onProgressChanged, so we need to add the code below to that method to update the brew time label with the selected value. Remember that our SeekBar values range from 0 to 9, so we’ll add 1 to the supplied value so that it makes more sense to the user:

Add the following code to onProgressChanged() in AddTeaActivity.java:

// src/com/example/brewclock/AddTeaActivity.java
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
  if(seekBar == brewTimeSeekBar) {
    // Update the brew time label with the chosen value.
    brewTimeLabel.setText((progress + 1) + " m");
  }
}

Set the SeekBar’s listener to be our AddTeaActivity in onCreate:

// src/com/example/brewclock/AddTeaActivity.java
public void onCreate(Bundle savedInstanceState) {
  // …

  // Setup Listeners
  brewTimeSeekBar.setOnSeekBarChangeListener(this);
}

Now when run the application and slide the SeekBar left to right, the brew time label will be updated with the correct value:

13 Seekbar in Get Started Developing For Android With Eclipse, Reloaded

Saving Tea

With a working interface for adding teas, all that’s left is to give the user the option to save their new tea to the database. We’ll also add a little validation to the interface so that the user cannot save an empty tea to the database!

Start by opening strings.xml in the editor and adding some new labels for our application:

<!-- res/values/strings.xml -->
<string name="save_tea_label">Save Tea</string>
<string name="invalid_tea_title">Tea could not be saved.</string>

<string name="invalid_tea_no_name">Enter a name for your tea.</string>

Just like before, we’ll need to create a new options menu for AddTeaActivity so that the user can save their favorite tea:

Create a new XML file, add_tea.xml, in the res/menus folder by choosing File → New and then Other → Android XML File. Remember to select “Menu” as the resource type.

Add an item to the new menu for saving the tea:

<!-- res/menus/add_tea.xml -->
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:title="@string/save_tea_label" android:id="@+id/save_tea" />
</menu>

Back in AddTeaActivity, add the override methods for onCreateOptionsMenu and onOptionsItemSelected, just like you did in BrewClockActivity. However, this time, you’ll supply the add_tea.xml resource file to the MenuInflater:

// src/com/example/brewclock/AddTeaActivity.java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.add_tea, menu);

  return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  switch(item.getItemId()) {
    case R.id.save_tea:
      saveTea();

    default:
      return super.onOptionsItemSelected(item);
  }
}

Next, we’ll add a new method, saveTea(), to handle saving the tea. The saveTea method first reads the name and brew time values chosen by the user, validates them and (if all is well) saves them to the database:

// src/com/example/brewclock/AddTeaActivity.java
public boolean saveTea() {
  // Read values from the interface
  String teaNameText = teaName.getText().toString();
  int brewTimeValue = brewTimeSeekBar.getProgress() + 1;

  // Validate a name has been entered for the tea
  if(teaNameText.length() < 2) {
    AlertDialog.Builder dialog = new AlertDialog.Builder(this);
    dialog.setTitle(R.string.invalid_tea_title);
    dialog.setMessage(R.string.invalid_tea_no_name);
    dialog.show();

    return false;
  }

  // The tea is valid, so connect to the tea database and insert the tea
  TeaData teaData = new TeaData(this);
  teaData.insert(teaNameText, brewTimeValue);
  teaData.close();

  return true;
}

This is quite a hefty chunk of code, so let’s go over the logic.

First, we read the values of the EditText teaName and the SeekBar brewTimeSeekBar (remembering to add 1 to the value to ensure a brew time of between 1 and 10 minutes). Next, we validate that a name has been entered that is two or more characters (this is really simple validation; you might want to experiment doing something more elaborate, such as using regular expressions).

If the tea name is not valid, we need to let the user know. We make use of one of Android’s helper classes, AlertDialog.Builder, which gives us a handy shortcut for creating and displaying a modal dialog window. After setting the title and error message (using our string resources), the dialogue is displayed by calling its show() method. This dialogue is modal, so the user will have to dismiss it by pressing the “Back” key. At this point, we don’t want to save any data, so just return false out of the method.

If the tea is valid, we create a new temporary connection to our tea database using the TeaData class. This demonstrates the advantage of abstracting your database access to a separate class: you can access it from anywhere in the application!

After calling teaData.insert() to add our tea to the database, we no longer need this database connection, so we close it before returning true to indicate that the save was successful.

Try this out by running the application in the emulator, pressing “Menu” and tapping “Add Tea.” Once on the “Add Tea” screen, try saving an empty tea by pressing “Menu” again and tapping “Save Tea.” With your validation in place, you’ll be presented with an error message:

14 Invalid Tea in Get Started Developing For Android With Eclipse, Reloaded

Next, try entering a name for your tea, choosing a suitable brew time, and choosing “Save Tea” from the menu again. This time, you won’t see an error message. In fact, you’ll see nothing at all.

Improving the User Experience

While functional, this isn’t a great user experience. The user doesn’t know that their tea has been successfully saved. In fact, the only way to check is to go back from the “Add Tea” Activity and check the list of teas. Not great. Letting the user know that their tea was successfully saved would be much better. Let’s show a message on the screen when a tea has been added successfully.

We want the message to be passive, or non-modal, so using an AlertDialog like before won’t help. Instead, we’ll make use of another popular Android feature, the Toast.

Toasts display a short message near the bottom of the screen but do not interrupt the user. They’re often used for non-critical notifications and status updates.

Start by adding a new string to the strings.xml resource file. Notice the %s in the string? We’ll use this in the next step to interpolate the name of the saved tea into the message!

<!-- res/values/strings.xml -->
<string name="save_tea_success">%s tea has been saved.</string>

Modify the code in onOptionsItemSelected to create and show a Toast pop-up if the result of saveTea() is true. The second parameter uses of getString() interpolate the name of our tea into the Toast message. Finally, we clear the “Tea Name” text so that the user can quickly add more teas!

// src/com/example/brewclock/AddTeaActivity.java
// …
switch(item.getItemId()) {
 case R.id.save_tea:
   if(saveTea()) {
     Toast.makeText(this, getString(R.string.save_tea_success, teaName.getText().toString()), Toast.LENGTH_SHORT).show();
     teaName.setText("");
   }
// …

Now re-run your application and try adding and saving a new tea. You’ll see a nice Toast pop up to let you know the tea has been saved. The getString() method interpolates the name of the tea that was saved into the XML string, where we placed the %s.

16 Valid Save in Get Started Developing For Android With Eclipse, Reloaded

Click the “Back” button to return to the application’s main screen, and tap the tea spinner. The new teas you added in the database now show up as options in the spinner!

User Preferences

BrewClock is now fully functional. Users can add their favorite teas and the respective brewing times to the database, and they can quickly select them to start a new brew. Any teas added to BrewClock are saved in the database, so even if we quit the application and come back to it later, our list of teas is still available.

One thing you might notice when restarting BrewClock, though, is that the brew counter is reset to 0. This makes keeping track of our daily tea intake (a vital statistic!) difficult. As a final exercise, let’s save the total brew count to the device.

Rather than adding another table to our teas database, we’ll make use of Android’s “Shared Preferences,” a simple database that Android provides to your application for storing simple data (strings, numbers, etc.), such as high scores in games and user preferences.

Start by adding a couple of constants to the top of BrewClockActivity.java. These will store the name of your shared preferences file and the name of the key we’ll use to access the brew count. Android takes care of saving and persisting our shared preferences file.

// src/com/example/brewclock/BrewClockActivity.java
protected static final String SHARED_PREFS_NAME = "brew_count_preferences";
protected static final String BREW_COUNT_SHARED_PREF = "brew_count";

Next, we’ll need to make some changes to the code so that we can read and write the brew count to the user preferences, rather than relying on an initial value in our code. In BrewClockActivity’s onCreate method, change the lines around setBrewCount(0) to the following:

// src/com/example/brewclock/BrewClockActivity.java
public void onCreate() {
  // … 

  // Set the initial brew values
  SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS_NAME, MODE_PRIVATE);
  brewCount = sharedPreferences.getInt(BREW_COUNT_SHARED_PREF, 0);
  setBrewCount(brewCount);

  // …
}

Here we’re retrieving an instance of the application’s shared preferences using SharedPreferences, and asking for the value of the brew_count key (identified by the BREW_COUNT_SHARED_PREF constant that was declared earlier). If a value is found, it will be returned; if not, we’ll use the default value in the second parameter of getInt (in this case, 0).

Now that we can retrieve the stored value of brew count, we need to ensure its value is saved to SharedPreferences whenever the count is updated.

Add the following code to setBrewCount in BrewClockActivity:

// src/com/example/brewclock/BrewClockActivity.java
 public void setBrewCount(int count) {
   brewCount = count;
   brewCountLabel.setText(String.valueOf(brewCount));

   // Update the brewCount and write the value to the shared preferences.
   SharedPreferences.Editor editor = getSharedPreferences(SHARED_PREFS_NAME, MODE_PRIVATE).edit();
   editor.putInt(BREW_COUNT_SHARED_PREF, brewCount);
   editor.commit();
 }

Shared preferences are never saved directly. Instead, we make use of Android’s SharedPreferences.Editor class. Calling edit() on SharedPreferences returns an editor instance, which can then be used to set values in our preferences. When the values are ready to be saved to the shared preferences file, we just call commit().

With our application’s code all wrapped up, it’s time to test everything!

Run the application on the emulator, and time a few brews (this is the perfect excuse to go and make a well-deserved tea or two!), and then quit the application. Try running another application that is installed on the emulator to ensure BrewClock is terminated. Remember that Android doesn’t terminate an Activity until it starts to run out of memory.

When you next run the application, you’ll see that your previous brew count is maintained, and all your existing teas are saved!

Summary

Congratulations! You’ve built a fully working Android application that makes use of a number of core components of the Android SDK. In this tutorial, you have seen how to:

  • Create a simple SQLite database to store your application’s data;
  • Make use of Android’s database classes and write a custom class to abstract the data access;
  • Add option menus to your application;
  • Create and register new Activities within your application and bind them together into a coherent interface using Intents;
  • Store and retrieve simple user data and settings using the built-in “Shared Preferences” database.

Data storage and persistence is an important topic, no matter what type of application you’re building. From utilities and business tools to 3-D games, nearly every application will need to make use of the data tools provided by Android.

17 Brew Up in Get Started Developing For Android With Eclipse, Reloaded

Activities

BrewClock is now on its way to being a fully functional application. However, we could still implement a few more features to improve the user experience. For example, you might like to develop your skills by trying any of the following:

  • Checking for duplicate tea name entries before saving a tea,
  • Adding a menu option to reset the brew counter to 0,
  • Storing the last-chosen brew time in a shared preference so that the application defaults to that value when restarted,
  • Adding an option for the user to delete teas from the database.

Solutions for the Activities will be included in a future branch on the GitHub repository, where you’ll find the full source-code listings. You can download the working tutorial code by switching your copy of the code to the tutorial_2 branch:

# If you’ve not already cloned the repository,
# you’ll need to do that first:
# $ git clone git://github.com/cblunt/BrewClock.git
# $ cd BrewClock
$ git checkout tutorial_2

I hope you’ve enjoyed working through this tutorial and that it helps you in designing and building your great Android applications. Please let me know how you get on in the comments below, or feel free to drop me an email.

Thanks to Anselm for his suggestions and feedback!

(al)


© Chris Blunt for Smashing Magazine, 2011. | Permalink | Post a comment | Smashing Shop | Smashing Network | About Us
Post tags: android, development, programming

March 12 2011

10:00

20+ Websites To Help You Learn Flash and ActionScript

There are many software products that are available in the market for website development. In the world of multimedia, Flash has its own position. In designing interactive demos, standalone movies, and aesthetically pleasing web content, flash plays a main role.

Tips and tricks can be learned from different websites.  The good reputation of Adobe products is one of the core reasons that Flash and ActionScript are so popular. A major reason for it’s popularity is that ActionScript is similar to JavaScript. There are many websites that are very helpful for learning Flash. Below are 25 websites that will help you in learning Flash/ActionScript.

1. NET MAGAZINE


.NET mag has a very useful collection of tutorials on flash. These tutorial are helpful if you want to learn about styling in flash. Flash 7 gives you the advantage of embedding images regardless of the format. Flash 7 supports PNG, GIF and JPG etc as well as movie clips.  There are pdf files of tutorials available as well to view them offline.

2. STEVES TUTES


There are varieties of tutorials available on this website for Flash 8. This website provides learning materials about how to filter an image, about all the basic components of Flash 8 and many more. Video tutorials are also available on this site. To cut it short, this is a complete package for learning Flash 8.

3. BAYCON GROUP


Baycon Group’s tutorials are a good source for professional learning. The thing that I found best on this site is that it gives you different options for learning, it starts with the basics and proceeds towards professional learning. This website is very helpful for those who are interested in learning Flash 8 professionally.

4. TEACHER CLICK


On this site, the study material is divided in the form of syllabus. It is just like learning at any institute. The syllabus has 10 units which start from the easier parts of learning and gradually moves towards professional education. It also provides theoretical knowledge of Flash 8. If someone is interested in getting practical as well as theoretical information about Flash 8, I recommend this site.

5. BRAINBELL


This tutorial is a great source of learning for the layman; anyone can learn Flash 8 from this tutorial. This set of  tutorials provides a step by step learning of Flash 8 by demonstrating how to perform simple tasks on Flash 8. This tutorial is a good way of getting a start on Flash 8. An amateur can get everything about Flash 8 on this site.

6. MACROMEDIA FLASH TUTORIALS


This is a good source of learning for how to create a mouse cursor, Flash preloaders and others aspects. If you are dealing with multimedia,  Flash 8 will be your first choice. These tutorials are helpful for those who are working professionally and are in need of assistance in grooming their work. This site will help them in putting a step forward in their career. It has guidance about animation, special effects, and games and about all that a professional wants.

7. MACROMEDIA FLASH NAVIGATION TUTORIALS


Tutorialized provides nearly 600 tutorials for Flash animation. There are varieties of instructional materials that demonstrate animation on different objects. This is good for those who need help in their work. It has tutorials for animations, interior design, creating transparent buttons, highlighting, 3D animation, vector animation and much more.

8. NEW TUTORIALS


There is another website that provides tutorials for preloaders in Flash along with many other tutorials. This site is helpful for those who are interested in making interactive software programs like games and animations.

9. ADOBE


The most genuine site for learning Flash is Adobe.com. Here you can find Flash MX tutorials where you can get information about how to work around ActionScript. The website gives a good approach for those who want an authentic piece of information.

10. FLASH TUTORIALS.US


If you need ActionScript or Macromedia then Flashtutorials is a site that provides you tutorials that gives you theoretical information about how to apply logics and functions using ActionScript.

11. WEB DESIGN-TUTORIALS


If you are up to developing an exotic website and you need some tutorials, webdesign-tutorials will be a good choice. It has many tutorials which will help you design a website of any kind and any taste. Layout design tutorials, background integration tutorials and interactivity tutorial will be very helpful amongst all. There are many tutorials that will also help you in developing websites to meet the demands of today’s fashion like breaking news interface, flash flip letter effect etc.

12. WEB DEVELOPERS NOTES


Flash tutorials are available for developers and hobbyists in webdevelopersnotes.com. These tutorials teach how to enhance interactivity in a web design as well as software design. In multimedia little things matter a lot to include interactivity and appeal to the design. There are many tutorials that give you innovative ideas and the good news is that they are available on this site.

13. FLASH ADVISOR


Flash Advisor is another site for those who are interested in learning projectile motion, sound controlling and animated preloaders in Flash. The tutorials on this site are of high quality. These lessons are good for advance learning of Flash. The best thing about these tutorials is that they have been written by experts. This is a dedicated site for Flash.

14. SMASHING MAGAZINE


This is a site where I found some interesting tutorials that will help you create some smashing, eye-catching, and aesthetic web designs. The tutorials here will teach you how to increase reusability in Flash although it is assumed to be a nightmare for many programmers. Picture animation, water wave effect, high-tech animation, hypnotic gear rotation are some tutorials that I found most helpful.

15. EDUCATION ONLINE FOR COMPUTERS


This site has a good collection of Flash tutorials, not only for advance learning, but also for novices. Flash is the best source to create multimedia content on the web sites and games and the tutorials available on this site will teach you how to achieve it in Flash. You can find all kinds of tutorials from simple drawing guidance to high level animation courses.

16. FLASH GAME DESIGN


I will recommend this site to those who are interested in designing games. As its name suggests, this is web site where one can find tutorial related to designing websites and games and creating animations. These are advanced tutorials by which you can learn how to create web designs without using advanced ActionScript.

There are endless possibilities of developing any kind of master piece by using flash; the only limit is your mind. Banner, videos, cartoons, games and web sites can be developed with aesthetically pleasing designs in flash. Following are some websites for those who are interested in designing of banners.

17. FLASH-BANNER-CREATOR


The main idea of this site is banner creation using Flash. The tutorials on this site are all about different techniques of creating banners. Anyone who is interested in creating banners has to download the tutorial from this site. The steps used in the tutorial are very simple, one just need to follow the steps.

18. LAYOUT GALAXY


I found a concise and appropriate tutorial for banner creation in Flash here. This tutorial follows a step by step description of processes involved in the creation of banners in flash.  You can learn how to create exquisite and appealing banners for websites here.

19. FLASH VAULT


Here I found another tutorial for flash banners. This is helpful for people who want to create a full flash banner. The steps in the tutorial will lead you to create a high quality banner.

20. TIZAG


Tizag.com has many Flash tutorials from introduction to email forms. This site provides a good collection of flash tutorials for those who are eager to learn flash from home.

21. GOTO AND PLAY


Flash games are very famous these days and every developers are trying to learn the development of these games because of increasing demands from players. Gotoandplay.it is the place where you can find everything that you want to develop games.


22. EMANUELE FERONATO


If you want to learn flash game development in detail, then this tutorial is for you. It is a very long and detailed tutorial about game development. This tutorial demonstrates how you can create a quality game in Flash using ActionScript. This tutorial has covered a vast area of game development and that is why it is divided into parts which makes it a complete guide.

23. FLASH PERFECTION


All the tutorials on Flash Perfection are related to software that can be developed using Flash. This site covers many areas of development. It is also a complete package for flash game enthusiasts.

When it comes to multimedia, Flash is a household name. In games, websites, or banners you can add as much interactivity as you want using flash. The present era demands interactivity that’s aesthetically pleasing and user friendly. Today’s world is all about media and entertainment. If you want to utilize this powerful technology, I am sure that this article will help you save time in finding tutorials. Just find the best tutorial for you and start enjoying Flash miracles.

March 08 2011

13:52

Ten Things Every WordPress Plugin Developer Should Know

Advertisement in Ten Things Every WordPress Plugin Developer Should Know
 in Ten Things Every WordPress Plugin Developer Should Know  in Ten Things Every WordPress Plugin Developer Should Know  in Ten Things Every WordPress Plugin Developer Should Know

Plugins are a major part of why WordPress powers millions of blogs and websites around the world. The ability to extend WordPress to meet just about any need is a powerful motivator for choosing WordPress over other alternatives. Having written several plugins myself, I’ve come to learn many (but certainly not all) of the ins-and-outs of WordPress plugin development, and this article is a culmination of the things I think every WordPress plugin developer should know. Oh, and keep in mind everything you see here is compatible with WordPress 3.0+.

Don’t Develop Without Debugging

The first thing you should do when developing a WordPress plugin is to enable debugging, and I suggest leaving it on the entire time you’re writing plugin code. When things go wrong, WordPress raises warnings and error messages, but if you can’t see them then they might as well have not been raised at all.

Wordpress Plugins Screenshot in Ten Things Every WordPress Plugin Developer Should Know

Enabling debugging also turns on WordPress notices, which is important because that’s how you’ll know if you’re using any deprecated functions. Deprecated functions may be removed from future versions of WordPress, and just about every WordPress release contains functions slated to die at a later date. If you see that you are using a deprecated function, it’s best to find its replacement and use that instead.

How to Enable Debugging

By default, WordPress debugging is turned off, so to enable it, open wp-config.php (tip: make a backup copy of this file that you can revert to later if needed) in the root of your WordPress installation and look for this line:

define('WP_DEBUG', false);

Replace that line with the following:

// Turns WordPress debugging on
define('WP_DEBUG', true);

// Tells WordPress to log everything to the /wp-content/debug.log file
define('WP_DEBUG_LOG', true);

// Doesn't force the PHP 'display_errors' variable to be on
define('WP_DEBUG_DISPLAY', false);

// Hides errors from being displayed on-screen
@ini_set('display_errors', 0);

With those lines added to your wp-config.php file, debugging is fully enabled. Here’s an example of a notice that got logged to /wp-content/debug.log for using a deprecated function:

[15-Feb-2011 20:09:14] PHP Notice: get_usermeta is deprecated since version 3.0! Use get_user_meta() instead. in C:\Code\Plugins\wordpress\wp-includes\functions.php on line 3237

With debugging enabled, keep a close eye on /wp-content/debug.log as you develop your plugin. Doing so will save you, your users, and other plugin developers a lot of headaches.

How to Log Your Own Debug Statements

So what about logging your own debug statements? Well, the simplest way is to use echo and see the message on the page. It’s the quick-and-dirty-hack way to debug, but everyone has done it one time or another. A better way would be to create a function that does this for you, and then you can see all of your own debug statements in the debug.log file with everything else.

Here’s a function you can use; notice that it only logs the message if WP_DEBUG is enabled:

function log_me($message) {
    if (WP_DEBUG === true) {
        if (is_array($message) || is_object($message)) {
            error_log(print_r($message, true));
        } else {
            error_log($message);
        }
    }
}

And then you can call the log_me function like this:

log_me(array('This is a message' => 'for debugging purposes'));
log_me('This is a message for debugging purposes');

Use the BlackBox Debug Bar Plugin

I only recently discovered this plugin, but it’s already been a huge help as I work on my own plugins. The BlackBox plugin adds a thin black bar to the top of any WordPress post or page, and provides quick access to errors, global variables, profile data, and SQL queries.

Debug-bar-black1 in Ten Things Every WordPress Plugin Developer Should Know

Clicking on the Globals tab in the bar shows all of the global variables and their values that were part of the request, essentially everything in the $_GET, $_POST, $_COOKIE, $_SESSION, and $_SERVER variables:

Debug-bar-globals1 in Ten Things Every WordPress Plugin Developer Should Know

The next tab is the Profiler, which displays the time that passed since the profiler was started and the total memory WordPress was using when the checkpoint was reached:

Debug-bar-profiler1 in Ten Things Every WordPress Plugin Developer Should Know

You can add your own checkpoints to the Profiler by putting this line of code anywhere in your plugin where you want to capture a measurement:

apply_filters('debug', 'This is a checkpoint');

Perhaps the most valuable tab in the BlackBox plugin is the SQL tab, which shows you all of the database queries that executed as part of the request. Very useful for determining long-running database calls:

Debug-bar-sql1 in Ten Things Every WordPress Plugin Developer Should Know

And finally we have the Errors tab, which lists all of the notices, warnings, and errors that occurred during the request:

Debug-bar-errors1 in Ten Things Every WordPress Plugin Developer Should Know

By providing quick access to essential debug information, the BlackBox plugin is a big-timer when it comes to debugging your WordPress plugin.

Prefix Your Functions

One of the first things that bit me when I started developing WordPress plugins was finding out that other plugin developers sometimes use the same names for functions that I use. For example, function names like copy_file(), save_data(), and database_table_exists() have a decent chance of being used by other plugins in addition to yours.

The reason for this is because when WordPress activates a plugin, PHP loads the functions from the plugin into the WordPress execution space, where all functions from all plugins live together. There is no separation or isolation of functions for each plugin, which means that each function must be uniquely named.

Fortunately, there is an easy way around this, and it’s to name all of your plugin functions with a prefix. For example, the common functions I mentioned previously might now look like this:

function myplugin_copy_file() {
}

function myplugin_save_data() {
}

function myplugin_database_table_exists() {
}

Another common naming convention is to use a prefix that is an abbreviation of your plugin’s name, such as “My Awesome WordPress Plugin”, in which case the function names would be:

function mawp_copy_file() {
}

function mawp_save_data() {
}

function mawp_database_table_exists() {
}

There is one caveat to this, however. If you use PHP classes that contain your functions (which in many cases is a good idea), you don’t really have to worry about clashing with functions defined elsewhere. For example, let’s say you have a class in your plugin named “CommonFunctions” with a copy_file() function, and another plugin has the same copy_file() function defined, but not in a class. Invoking the two functions would look similar to this:

// Calls the copy_file() function from your class
$common = new CommonFunctions();
$common->copy_file();

// Calls the copy_file() function from the other plugin
copy_file();

By using classes, the need to explicitly prefix your functions goes away. Just keep in mind that WordPress will raise an error if you use a function name that’s already taken, so keep an eye on the debug.log file to know if you’re in the clear or not.

Global Paths Are Handy

Writing the PHP code to make your plugin work is one thing, but if you want to make it look and feel good at the same time, you’ll need to include some images, CSS, and perhaps a little JavaScript as well (maybe in the form of a jQuery plugin). And in typical fashion, you’ll most likely organize these files into their own folders, such as “images”, “css”, and “js”.

That’s all well and good, but how should you code your plugin so that it can always find those files, no matter what domain the plugin is running under? The best way that I’ve found is to create your own global paths that can be used anywhere in your plugin code.

For example, I always create four global variables for my plugins, one each for the following:

  • The path to the theme directory
  • The name of the plugin
  • The path to the plugin directory
  • The url of the plugin

For which the code looks like this:

if (!defined('MYPLUGIN_THEME_DIR'))
    define('MYPLUGIN_THEME_DIR', ABSPATH . 'wp-content/themes/' . get_template());

if (!defined('MYPLUGIN_PLUGIN_NAME'))
    define('MYPLUGIN_PLUGIN_NAME', trim(dirname(plugin_basename(__FILE__)), '/'));

if (!defined('MYPLUGIN_PLUGIN_DIR'))
    define('MYPLUGIN_PLUGIN_DIR', WP_PLUGIN_DIR . '/' . MYPLUGIN_PLUGIN_NAME);

if (!defined('MYPLUGIN_PLUGIN_URL'))
    define('MYPLUGIN_PLUGIN_URL', WP_PLUGIN_URL . '/' . MYPLUGIN_PLUGIN_NAME);

Having these global paths defined lets me write the code below in my plugin anywhere I need to, and I know it will resolve correctly for any website that uses the plugin:

$image = MYPLUGIN_PLUGIN_URL . '/images/my-image.jpg';
$style = MYPLUGIN_PLUGIN_URL . '/css/my-style.css';
$script = MYPLUGIN_PLUGIN_URL . '/js/my-script.js';

Store the Plugin Version for Upgrades

When it comes to WordPress plugins, one of the things you’ll have to deal with sooner or later is upgrades. For instance, let’s say the first version of your plugin required one database table, but the next version requires another table. How do you know if you should run the code that creates the second database table?

I suggest storing the plugin version in the WordPress database so that you can read it later to decide certain upgrade actions your plugin should take. To do this, you’ll need to create a couple more global variables and invoke the add_option() function:

if (!defined('MYPLUGIN_VERSION_KEY'))
    define('MYPLUGIN_VERSION_KEY', 'myplugin_version');

if (!defined('MYPLUGIN_VERSION_NUM'))
    define('MYPLUGIN_VERSION_NUM', '1.0.0');

add_option(MYPLUGIN_VERSION_KEY, MYPLUGIN_VERSION_NUM);

I certainly could have simply called add_option('myplugin_version', '1.0.0'); without the need for the global variables, but like the global path variables, I’ve found these just as handy for using in other parts of a plugin, such as a Dashboard or About page.

Also note that update_option() could have been used instead of add_option(). The difference is that add_option() does nothing if the option already exists, whereas update_option() checks to see if the option already exists, and if it doesn’t, it will add the option to the database using add_option(); otherwise, it updates the option with the value provided.

Then, when it comes time to check whether or not to perform upgrade actions, your plugin will end up with code that looks similar to this:

$new_version = '2.0.0';

if (get_option(MYPLUGIN_VERSION_KEY) != $new_version) {
    // Execute your upgrade logic here

    // Then update the version value
    update_option(MYPLUGIN_VERSION_KEY, $new_version);
}

Use dbDelta() to Create/Update Database Tables

If your plugin requires its own database tables, you will inevitably need to modify those tables in future versions of your plugin. This can get a bit tricky to manage if you’re not careful, but WordPress helps alleviate this problem by providing the dbDelta() function.

A useful feature of the dbDelta() function is that it can be used for both creating and updating tables, but according to the WordPress codex page “Creating Tables with Plugins”, it’s a little picky:

  • You have to put each field on its own line in your SQL statement.
  • You have to have two spaces between the words PRIMARY KEY and the definition of your primary key.
  • You must use the keyword KEY rather than its synonym INDEX and you must include at least one KEY.

Knowing these rules, we can use the function below to create a table that contains an ID, a name, and an email:

function myplugin_create_database_table() {
    global $wpdb;
    $table = $wpdb->prefix . 'myplugin_table_name';

    $sql = "CREATE TABLE " . $table . " (
              id INT NOT NULL AUTO_INCREMENT,
              name VARCHAR(100) NOT NULL DEFAULT '',
              email VARCHAR(100) NOT NULL DEFAULT '',
              UNIQUE KEY id (id)
              );";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

Important: The dbDelta() function is found in wp-admin/includes/upgrade.php, but it has to be included manually because it’s not loaded by default.

So now we have a table, but in the next version we need to expand the size of the name column from 100 to 250. Fortunately dbDelta() makes this straightforward, and using our upgrade logic previously, the next version of the plugin will have code similar to this:

$new_version = '2.0.0';

if (get_option(MYPLUGIN_VERSION_KEY) != $new_version) {
    myplugin_update_database_table();
    update_option(MYPLUGIN_VERSION_KEY, $new_version);
}

function myplugin_update_database_table() {
    global $wpdb;
    $table = $wpdb->prefix . 'myplugin_table_name';

    $sql = "CREATE TABLE " . $table . " (
              id INT NOT NULL AUTO_INCREMENT,
              name VARCHAR(250) NOT NULL DEFAULT '', // Bigger name column
              email VARCHAR(100) NOT NULL DEFAULT '',
              UNIQUE KEY id (id)
              );";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

While there are other ways to create and update database tables for your WordPress plugin, it’s hard to ignore the flexibility of the dbDelta() function.

Know the Difference Between include, include_once, require, and require_once

There will come a time during the development of your plugin where you will want to put code into other files so that maintaining your plugin is a bit easier. For instance, a common practice is to create a functions.php file that contains all of the shared functions that all of the files in your plugin can use.

Let’s say your main plugin file is named myplugin.php and you want to include the functions.php file. You can use any of these lines of code to do it:

include 'functions.php';
include_once 'functions.php';

require 'functions.php';
require_once 'functions.php';

But which should you use? It mostly depends on your expected outcome of the file not being there.

  • include: Includes and evaluates the specified file, throwing a warning if the file can’t be found.
  • include_once: Same as include, but if the file has already been included it will not be included again.
  • require: Includes and evaluates the specified file (same as include), but instead of a warning, throws a fatal error if the file can’t be found.
  • require_once: Same as require, but if the file has already been included it will not be included again.

My experience has been to always use include_once because a) how I structure and use my files usually requires them to be included once and only once, and b) if a required file can’t be found I don’t expect parts of the plugin to work, but it doesn’t need to break anything else either.

Your expectations may vary from mine, but it’s important to know the subtle differences between the four ways of including files.

Use bloginfo(‘wpurl’) Instead of bloginfo(‘url’)

By and large, WordPress is installed in the root folder of a website; it’s standard operating procedure. However, every now and then you’ll come across websites that install WordPress into a separate subdirectory under the root. Seems innocent enough, but the location of WordPress is critically important.

To demonstrate, in the “General Settings” section of the WordPress admin panel, you’ll find the “WordPress address (URL)” and “Site address (URL)” settings, and for sites where WordPress is installed into the root directory, they will have the exact same values:

General-settings-same-url in Ten Things Every WordPress Plugin Developer Should Know

But for sites where WordPress is installed into a subdirectory under the root (in this case a “wordpress” subdirectory), their values will be different:

General-settings-different-url in Ten Things Every WordPress Plugin Developer Should Know

At this stage it’s important to know the following:

  • bloginfo(‘wpurl’) equals the “WordPress address (URL)” setting
  • bloginfo(‘url’) equals the “Site address (URL)” setting

Where this matters is when you need to build URLs to certain resources or pages. For example, if you want to provide a link to the WordPress login screen, you could do this:

// URL will be http://mydomain.com/wp-login.php
<a href="<?php bloginfo('url') ?>/wp-login.php">Login</a>

But that won’t resolve to the correct URL in the scenario such as the one above where WordPress is installed to the “wordpress” subdirectory. To do this correctly, you must use bloginfo('wpurl') instead:

// URL will be http://mydomain.com/wordpress/wp-login.php
<a href="<?php bloginfo('wpurl') ?>/wp-login.php">Login</a>

Using bloginfo('wpurl') instead of bloginfo('url') is the safest way to go when building links and URLs inside your plugin because it works in both scenarios: when WordPress is installed in the root of a website and also when it’s installed in a subdirectory. Using bloginfo('url') only gets you the first one.

How and When to Use Actions and Filters

WordPress allows developers to add their own code during the execution of a request by providing various hooks. These hooks come in the form of actions and filters:

  • Actions: WordPress invokes actions at certain points during the execution request and when certain events occur.
  • Filters: WordPress uses filters to modify text before adding it to the database and before displaying it on-screen.

The number of actions and filters is quite large, so we can’t get into them all here, but let’s at least take a look at how they are used.

Here’s an example of how to use the admin_print_styles action, which allows you to add your own stylesheets to the WordPress admin pages:

add_action('admin_print_styles', 'myplugin_admin_print_styles');

function myplugin_admin_print_styles() {
    $handle = 'myplugin-css';
    $src = MYPLUGIN_PLUGIN_URL . '/styles.css';

    wp_register_style($handle, $src);
    wp_enqueue_style($handle);
}

And here’s how you would use the the_content filter to add a “Follow me on Twitter!” link to the bottom of every post:

add_filter('the_content', 'myplugin_the_content');

function myplugin_the_content($content) {
    $output = $content;
    $output .= '<p>';
    $output .= '<a href="http://twitter.com/username">Follow me on Twitter!</a>';
    $output .= '</p>';
    return $output;
}

It’s impossible to write a WordPress plugin without actions and filters, and knowing what’s available to use and when to use them can make a big difference. See the WordPress codex page “Plugin API/Action Reference” for the complete list of actions and the page “Plugin API/Filter Reference” for the complete list of filters.

Tip: Pay close attention to the order in which the actions are listed on its codex page. While not an exact specification, my experimentation and trial-and-error has shown it to be pretty close to the order in which actions are invoked during the WordPress request pipeline.

Add Your Own Settings Page or Admin Menu

Many WordPress plugins require users to enter settings or options for the plugin to operate properly, and the way plugin authors accomplish this is by either adding their own settings page to an existing menu or by adding their own new top-level admin menu to WordPress.

How to Add a Settings Page

A common practice for adding your own admin settings page is to use the add_menu() hook to call the add_options_page() function:

add_action('admin_menu', 'myplugin_admin_menu');

function myplugin_admin_menu() {
    $page_title = 'My Plugin Settings';
    $menu_title = 'My Plugin';
    $capability = 'manage_options';
    $menu_slug = 'myplugin-settings';
    $function = 'myplugin_settings';
    add_options_page($page_title, $menu_title, $capability, $menu_slug, $function);
}

function myplugin_settings() {
    if (!current_user_can('manage_options')) {
        wp_die('You do not have sufficient permissions to access this page.');
    }

    // Here is where you could start displaying the HTML needed for the settings
    // page, or you could include a file that handles the HTML output for you.
}

By invoking the add_options_page() function, we see that the “My Plugin” option has been added to the built-in Settings menu in the WordPress admin panel:

Admin-menu-options-page in Ten Things Every WordPress Plugin Developer Should Know

The add_options_page() function is really just a wrapper function on top of the add_submenu_page() function, and there are other wrapper functions that do similar work for the other sections of the WordPress admin panel:

  • add_dashboard_page()
  • add_posts_page()
  • add_media_page()
  • add_links_page()
  • add_pages_page()
  • add_comments_page()
  • add_theme_page()
  • add_plugins_page()
  • add_users_page()
  • add_management_page()

How to Add a Custom Admin Menu

Those wrapper functions work great, but what if you wanted to create your own admin menu section for your plugin? For example, what if you wanted to create a “My Plugin” admin section with more than just the Settings page, such as a Help page? This is how you would do that:

add_action('admin_menu', 'myplugin_menu_pages');

function myplugin_menu_pages() {
    // Add the top-level admin menu
    $page_title = 'My Plugin Settings';
    $menu_title = 'My Plugin';
    $capability = 'manage_options';
    $menu_slug = 'myplugin-settings';
    $function = 'myplugin_settings';
    add_menu_page($page_title, $menu_title, $capability, $menu_slug, $function);

    // Add submenu page with same slug as parent to ensure no duplicates
    $sub_menu_title = 'Settings';
    add_submenu_page($menu_slug, $page_title, $sub_menu_title, $capability, $menu_slug, $function);

    // Now add the submenu page for Help
    $submenu_page_title = 'My Plugin Help';
    $submenu_title = 'Help';
    $submenu_slug = 'myplugin-help';
    $submenu_function = 'myplugin_help';
    add_submenu_page($menu_slug, $submenu_page_title, $submenu_title, $capability, $submenu_slug, $submenu_function);
}

function myplugin_settings() {
    if (!current_user_can('manage_options')) {
        wp_die('You do not have sufficient permissions to access this page.');
    }

    // Render the HTML for the Settings page or include a file that does
}

function myplugin_help() {
    if (!current_user_can('manage_options')) {
        wp_die('You do not have sufficient permissions to access this page.');
    }

    // Render the HTML for the Help page or include a file that does
}

Notice that this code doesn’t use any of the wrapper functions. Instead, it calls add_menu_page() (for the parent menu page) and add_submenu_page() (for the child pages) to create a separate “My Plugin” admin menu that contains the Settings and Help pages:

Admin-menu-custom in Ten Things Every WordPress Plugin Developer Should Know

One advantage of adding your own custom menu is that it’s easier for users to find the settings for your plugin because they aren’t buried within one of the built-in WordPress admin menus. Keeping that in mind, if your plugin is simple enough to only require a single admin page, then using one of the wrapper functions might make the most sense. But if you need more than that, creating a custom admin menu is the way to go.

Provide a Shortcut to Your Settings Page with Plugin Action Links

In much the same way that adding your own custom admin menu helps give the sense of a well-rounded plugin, plugin action links work in the same fashion. So what are plugin action links? It’s best to start with a picture:

Plugin-action-links-none in Ten Things Every WordPress Plugin Developer Should Know

See the “Deactivate” and “Edit” links underneath the name of the plugin? Those are plugin action links, and WordPress provides a filter named plugin_action_links for you to add more. Basically, plugin action links are a great way to add a quick shortcut to your most commonly used admin menu page.

Keeping with our Settings admin page, here’s how we would add a plugin action link for it:

add_filter('plugin_action_links', 'myplugin_plugin_action_links', 10, 2);

function myplugin_plugin_action_links($links, $file) {
    static $this_plugin;

    if (!$this_plugin) {
        $this_plugin = plugin_basename(__FILE__);
    }

    if ($file == $this_plugin) {
        // The "page" query string value must be equal to the slug
        // of the Settings admin page we defined earlier, which in
        // this case equals "myplugin-settings".
        $settings_link = '<a href="' . get_bloginfo('wpurl') . '/wp-admin/admin.php?page=myplugin-settings">Settings</a>';
        array_unshift($links, $settings_link);
    }

    return $links;
}

With this code in place, now when you view your plugins list you’ll see this:

Plugin-action-links-settings in Ten Things Every WordPress Plugin Developer Should Know

Here we provided a plugin action link to the Settings admin page, which is the same thing as clicking on Settings from our custom admin menu. The benefit of the plugin action link is that users see it immediately after they activate the plugin, thus adding to the overall experience.

Additional Resources

I’ve covered a lot in this article, but there’s plenty more out there to keep you busy awhile. The most comprehensive documentation for WordPress plugin development can be found on the WordPress Codex, a huge collection of pages documenting everything that is WordPress. Below are some of the more pertinent links from the codex you’ll need:

I also suggest reading Joost de Valk’s article “Lessons Learned From Maintaining a WordPress Plug-In“, which provides more good tips on WordPress plugin development.

(vf) (ik)


© Dave Donaldson for Smashing Magazine, 2011. | Permalink | Post a comment | Smashing Shop | Smashing Network | About Us
Post tags: Coding, development, plugin, wordpress

Older posts are this way If this message doesn't go away, click anywhere on the page to continue loading posts.
Could not load more posts
Maybe Soup is currently being updated? I'll try again automatically in a few seconds...
Just a second, loading more posts...
You've reached the end.

Don't be the product, buy the product!

Schweinderl