I'm doing common build implementation based on Ant 1.8 Ivy 2.2 and Nexus current status can be found here
By default IBM Websphere Portal 6.0 uses the following chain to determine user locale
Navigation State
User Profile
Accept-Language
So when navigation state is lost there is a problem if we want to show content in a locale different from User Profile.
For instance when using url mapping the state is lost

on this image if we change the language and click 'Certificate Managment' language will be taken from User profile not from current settings since navigation state will be lost.
We can implement our own approach by writing a filter for wps.war which will use cookie with selected language.
New Chain to determent User locale
User open portal browser default language is used . User selected different language-cookie is set with this language. New language is used.
1. Set cookie when a User selects language
wps.ear\wps.war\themes\html\theme\Default.jsp - page contains the language selection logic insert logic to set cookie when the user selects the language
<script type="text/javascript"> dojo.addOnLoad(function(){ dojo.require("dojo.cookie"); dojo.query("a.change-language",dojo.byId("languagePart")).forEach(function(el){ dojo.connect(el,"onclick",function(_event){ _event.preventDefault(); _event.stopPropagation(); var loc=dojo.trim(el.innerHTML)==='ENG'?'en':'ru'; dojo.cookie("selectedUserLocale",loc,{path:"/"}); window.location=el.href; }); }); }); </script> ...... <a href='<portal-navigation:url command="ChangeLanguage" commandParam="en"/>' class='<%=styleAEn%> change-language'> ENG </a> ......
2. Create Filter with Request Wrapper
LocaleRequestWrapper
public class LocaleRequestWrapper extends HttpServletRequestWrapper implements IServletRequest { private String locale = null; private Locale localeObj; private List locales = new ArrayList(1); public LocaleRequestWrapper(HttpServletRequest request) { super(request); String selectedLocale = getLocaleFromCookie(request.getCookies()); String langCode = selectedLocale != null ? selectedLocale : request.getLocale().getLanguage(); if (langCode != null && langCode.trim().length() > 0) { this.locale = langCode; localeObj = new Locale(langCode); } if (locale != null) { locales.add(locale); } } private String getLocaleFromCookie(Cookie[] cookies) { if(cookies==null) return null; for (int i = 0; i < cookies.length; i++) { Cookie c=cookies[i]; if(!"selectedUserLocale".equals(c.getName())) continue; return c.getValue(); } return null; } public Object clone() throws CloneNotSupportedException { LocaleRequestWrapper crequest = (LocaleRequestWrapper) super.clone(); javax.servlet.ServletRequest inner = crequest.getRequest(); if (inner instanceof IServletRequest) crequest.setRequest((HttpServletRequest) ((IServletRequest) inner).clone()); else throw new CloneNotSupportedException(); return crequest; } public String getHeader(String key) { // get the original request HttpServletRequest request = (HttpServletRequest) getRequest(); // if the header request is for locale, return the stored locale if (!"Accept-Language".equalsIgnoreCase(key)) return request.getHeader(key); return locale != null ? locale : request.getHeader(key); } public Enumeration getHeaders(String key) { // get the original request HttpServletRequest request = (HttpServletRequest) getRequest(); // if the header request is for locale, return the stored locale if (!"Accept-Language".equalsIgnoreCase(key)) return request.getHeaders(key); return locale != null ? Collections.enumeration(locales) : request.getHeaders(key); } public Locale getLocale() { return localeObj != null ? localeObj:((HttpServletRequest)getRequest()).getLocale(); } public Enumeration getLocales() { return locale != null ? Collections.enumeration(locales) :((HttpServletRequest)getRequest()).getLocales(); } }
LocaleServletFilter
public class LocaleServletFilter implements Filter{ public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { LocaleRequestWrapper wrapper = new LocaleRequestWrapper((HttpServletRequest)request); if (chain != null) chain.doFilter(wrapper, response); } public void destroy() { } public void init(FilterConfig arg0) throws ServletException { } }
3. Add filter mapping
<filter>
<filter-name>Locale Filter</filter-name>
<filter-class>...LocaleServletFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Locale Filter</filter-name>
<url-pattern>/myportal/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Locale Filter</filter-name>
<url-pattern>/portal/*</url-pattern>
</filter-mapping>
4. Remove from Portal\wmm\wmmLDAPServerAttributes.xml preferredLanguage attributeMap
to prevent portal looking the locale in the user profile
Developing a multi-locale site using WebSphere Portal V5.1.0.1
Idea has been taken from this article.
The main idea is to restrict user to use only one session. For example if user logged in in one browser and then logged in in another one this restriction prevent users's work in the first browser.
Based on this article Restricting Multiple Sessions in WebSphere Portal I've created the session restriction implementation . It would be good to go through Restricting Multiple Sessions in WebSphere Portal article first and then read this implementation.
1. DB schema
CREATE TABLE "DB2ADMIN"."LOGINUSERDATA" ( "CUSTOMERID" VARCHAR(100) NOT NULL , "SESSIONID" VARCHAR(300) NOT NULL , "NODEIP" VARGRAPHIC(100) NOT NULL , "TIMESTAMP" TIMESTAMP NOT NULL ) IN "USERSPACE1" ; ALTER TABLE "DB2ADMIN"."LOGINUSERDATA" ADD CONSTRAINT "CC1277458314344" PRIMARY KEY ("CUSTOMERID");
2. Custom login module
to be able to monitor user login data custom login module should be created
the main goal of this class is to write user data into DB and into cache. This implementation uses DynaCache to cache user data
public class LoginUserAuth extends com.ibm.wps.engine.commands.LoginUserAuth { private LoginUserService loginUserService= LoginUserService.INSTANCE; private static final Logger logger = Logger.getLogger(LoginUserAuth.class); protected void doPostLogin(RunData aRunData, String aUserID, String aPassword) throws WpsException { if(aUserID==null) return; loginUserService.saveUser(new LoginUserData(aUserID,aRunData.getSession().getId())); } }
in WebSphere AS the following changes should be done
in WP LoaderService Custom properties is added command.path with value com.minosiants.auth.cmd,com.ibm.wps.engine.commands, com.ibm.wps.dynamicui.commands
![]()
3. Portal filter
To be able to prevent usage of "old session" each request now should be checked if its session ls up to date. If it is not request should be redirected to logout page.
public void doFilter(ServletRequest request, ServletResponse response , FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest)request; HttpServletResponse resp = (HttpServletResponse)response; String userId=req.getRemoteUser(); if(userId==null){ chain.doFilter( request, response ); } if("wpsadmin".equals(userId)){ chain.doFilter( request, response ); return; } String logoutURL=generateLogoutURL(req,(HttpServletResponse)response); if(!loginUserService.isCurrientSession(userId, req.getRequestedSessionId())){ try { String url=ServletURLHelper.generateUrl("CUSTOM_LOGOUT", null, null, req, resp); request.setAttribute("logoutURL", logoutURL); if(!req.getRequestURI().toString().equals("/wps/portal")){ url=url.replaceAll("/wps/", "/"); filterConfig.getServletContext().getRequestDispatcher(url).forward(request, response); return; } } catch (StateException e) { e.printStackTrace(); } catch (NamingException e) { // TODO Auto-generated catch block e.printStackTrace(); } chain.doFilter( request, response ); return; } chain.doFilter( request, response ); }
this filter should be added into wps.war web.xml
IBM\WebSphere\profiles\wp_profile\installedApps\NAME\wps.ear\wps.war\WEB-INF\web.xml
and
IBM\WebSphere\profiles\wp_profile\config\cells\GSRUE\applications\wps.ear\deployments\wps\wps.war\WEB-INF\web.xml
.... <filter> <filter-name>UserSession</filter-name> <filter-class>com.minosiants.auth.filter.UserSessionFilter</filter-class> </filter> .... <filter-mapping> <filter-name>UserSession</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ....
4. Custom logout portlet
To make logout process more user friendly new portlet should be added. This portlet contains only view on jsp page.
And this portlet is placed on a portal page. CUSTOM_LOGOUT unique id is assigned to this page
<script type="text/javascript"> dojo.addOnLoad(function(){ var myTimer = new dojox.timing.Timer(); myTimer.setInterval(1000); myTimer.onTick = function () { var sec=15; return function(){ sec=sec-1; dojo.byId("sec").innerHTML=sec; if(sec===0) window.location="/wps/portal"; }; }(); myTimer.start(); var b=dojo.byId("goButton"); dojo.connect(b, "onclick", function(event) { console.log("click"); event.preventDefault(); event.stopPropagation(); myTimer.stop(); window.location="/wps/portal"; }); }); </script> <script type="text/javascript"> dojo.addOnLoad(function(){ var myTimer = new dojox.timing.Timer(); myTimer.setInterval(1000); myTimer.onTick = function () { var sec=15; return function(){ sec=sec-1; dojo.byId("sec").innerHTML=sec; if(sec===0) window.location="/wps/portal"; }; }(); myTimer.start(); var b=dojo.byId("goButton"); dojo.connect(b, "onclick", function(event) { console.log("click"); event.preventDefault(); event.stopPropagation(); myTimer.stop(); window.location="/wps/portal"; }); }); </script> <script type="text/javascript"> dojo.addOnLoad(function(){ var myTimer = new dojox.timing.Timer(); myTimer.setInterval(1000); myTimer.onTick = function () { var sec=15; return function(){ sec=sec-1; dojo.byId("sec").innerHTML=sec; if(sec===0) window.location="/wps/portal"; }; }(); myTimer.start(); var b=dojo.byId("goButton"); dojo.connect(b, "onclick", function(event) { console.log("click"); event.preventDefault(); event.stopPropagation(); myTimer.stop(); window.location="/wps/portal"; }); }); </script> <div id="logoutInfo"> <h2><fmt:message key='logoutInfo'/></h2> <div id="pp"> <h2 id="hh"> <fmt:message key='beforeButton'/></h2> <button dojoType="dijit.form.Button" type="button" id="goButton" ><fmt:message key='goToLogin'/></button> </div> </div>
source code
login-module.zip
jar should be created from this project and placed into \PortalServer\shared\app and websphera lib dir
custom-logout-portlet.zip
portlet for logout view
Default approach used in IBM portlet application for integration resource bundles into view parts is really ugly.
So I've created another taglib which contains one tag placeResourceBundleData
This tag places an attribute java.util.Map under name ui into ServletRequest and places the same map converted into javascript object under var ui .
Now all properties from the resource bundle available during jsp translation and on the client side in javascript.
Changes in the bundle dont require restart of the application and available on the fly.
OnePortletResource_en.properties
firstPage.my.title=placeResourceBundleData portal tag demo firstPage.message.hello=Hello firstPage.message.world=World
index.jsp
<%@taglib uri="http://minosiants.com/tl/core" prefix="pc"%> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title></title> <script src="http://o.aolcdn.com/dojo/1.4/dojo/dojo.xd.js" type="text/javascript"> </script> <script type="text/javascript"> dojo.addOnLoad(function(){ <pc:placeResourceBundleData bundle="com.minosiants.nl.OnePortletResource" /> var msg=ui.firstPage.message; dojo.byId("h1").innerHTML=msg.hello+" "+msg.world; }); </script> </head> <body> <h1>${ui.firstPage.my.title}</h1> <h1 id="h1"></h1> </body> </html>
common-portal-taglib.zip - tag lib source
I've created test web project to demonstrate how it works TestTaglib.zip
Finished reading this book(Amazon) written by Robert Hoekman, Jr and Jared M. Spool. Although it seems too long , its good. I've created Web Anatomy MindMap of it.
Web Anatomy MindMap
At Flickr

BusinessObjects Components
CRYSTAL REPORTS SERVER XI RELEASE 2
BusinessObjects Portal Integration Kits
General Architecture
Three components participate. BusinessObjects Portlets , Crystal Reports Server, InfoView BusinessObjects Web application - UI working with Crystal Reports Server. JAAS SSO and Ldap are used for the SSO.
Poertlets and InfoView installed on the same Websphere but on different servers.
The whole installation process is written in BusinessObjects documentation. So instead of repeating it I just post the links
BusinessObjects Enterprise XI R2 PortalIntegration Kit Installation Guide for IBM WebSphere
JAAS SSO Enablement Extensions Deployment Guide for IBM WebSphere
Document List Portlet
There were two problems
Description
Document list contains list of the reports from crystal server. Each report is a link to InfoView which is responsible to open a report itself. When Document list opens - new portlet session is created and this session is alive unless any report is opened or portlet session timeout comes. It happens because InfoView also create a session. Both these session store session id a cookie JSESSIONID overwriting the previous value. Creation of any of these sessions assumes login into Crystal Report Server which means a new licence usage. With the restricted number of licences and active work at the portal and with the reports after a while we run out of the licences and unable to work further.
Solution
Session cookie name of deployed InfoView should be changed from its default value
Description
Accessing after a while of not using Document list portlet there is a some kind of timeout exception.
Solution
Remove timeout of the session in the deployed document list ear
Increase value of BusinessObjects Enterprise Token Timeout in deployed document list ear
<context-param>
<param-name>BusinessObjects Enterprise Token Timeout</param-name>
<param-value>300</param-value>
</context-param>
Секреты мотивации персонала by @ForbesRussia via @splix
интервью с Сергем Белоусовым
А третья мотивация — талантливые люди хотят развиваться, заниматься самоулучшением. Хотят видеть не только повышение денежной компенсации за свой труд и карьерный рост, но и повышение собственной квалификации. Например, создание программного продукта — это командная игра, где участвуют, скажем, 100 человек. Эти люди между собой сложным образом взаимодействуют, они быстро собирают головоломку, которая потом становится продуктом и продается. Люди обучаются лучше играть в эту игру, и им это нравится.
Интерестное описание создания программного продукта.
30 predictions for the future of twitter
Some interesting quotes to remember
Promos by brands and retailers will have big success for last minute deals
Talking to shops and restaurants via Twitter will become standard
and will get opt in coupons as we enter a shop, based on location
Interesting in a restaurant|shop based on my location I'd be able to start talking and getting coupons. (this should be exposed later )
There will be more devices publishing updates than humans
wifi scale, planes, trains, cars all posting updates.remotely control the house by the status update
thats good
Hyperlocal news sites with Twitter geotagging feature
(thanks, @stevefarnworth)
http://www.briansolis.com/2009/10/the-future-of-the-social-web/
3. The era of social colonization -
For consumers, surfing the Web is no longer a lonely experience. Forrester foresees the release of new browsers and frictionless, uncomplicated technologies that allow people to truly surf the Web with friends or see what they're doing in real-time.
it'd be nice to be in a colony of people with the same interest but in the same time I think it would narrow my view and bring the filling that nothing else exist . The most interesting thing would be at the intersection of different colonies . I't be nice to have a button "Go to completely different colony" LOL
Perhaps the future lies with making data mobile while still providing value to the economics of social networks. DataPortability.org is working with some of the most renowned networks to enable users to bring their identity, friends, conversations, files and histories with them, without having to manually add them to each new service
It used to be blog where people store log of their life activity. Now it mostly social platform. Regarding to that almost everything is cyclic, probably mobile data would become Blog 3.0.
Мтс предлагает тариф МТС Коннект c без лимитным интернетом
Максимальная скорость передачи данных при подключении услуги «Бюджетный безлимит» составляет 128 Кбит/сек, абонентская плата - 349 рублей в месяц. При подключении услуги «Безлимитный онлайн» максимальная скорость ограничивается 512 Кбит/сек и абонентская плата составляет - 549 рублей в месяц.
Проблема в том что стоимость исходящих вызовов на тарифе с безлимиитным интернетом 3 - 3,5 руб.
Но можно установить Sipdroid - это SIP клиент и пользоваться VoIP вместо GSM звонков.
В моем случае я установил sipdroid и использую voipcheap и получается теперь
звонки на обычный телефон по Питеру и Москве бесплатны, по России ~ 1 руб.
звонки на мобильный по всей России ~ 1.7 руб.
Sipdroid настроил только вчера поэтому пока еще не знаю насколько стабильная эта штука , а voipcheap пользуюсь уже давно качество у них связи хорошее.
Начал пользоваться HTC Hero и мое общее настроение - нравится.
Купил на ebay вот у этого продавца. EMS идет ~ 10 дней. В Питере официально продаются только черного цвета и стоит немного дороже.
Первая не понятная вещь - наличие только английской локали (в российской версии доступны две локали русская и английская) мне казалось ,что телефон без физической клавиатуры и поэтому тут ограничений быть не должно
. Например если владелец разговаривает еще на другом языке или учит иностранный язык то как тут быть ? . Оказалось что поддержка других локалей есть просто она скрыта. Для того что бы ее активировать надо модифицировать конфигурационные файлы , а для этого надо перепрошить телефон с root доступом.
Способ получения root доступа
Прошивка
Тут разные сборки альтернативных прошивок с разной кастомезацией
Способ активирования локали
После этого можно пользоваться клавиатурой с разными языками.
Другая не очень удобная вещь это импорт контактов.
Мне пришлось из старого телефона экспортировать контакты в gmail а от туда синхронизовать из на телефон. что совсем не удобно. Правда есть программа которая может импортировать их из vcard файлов прямо в hiro Import Contacts автор @bornmw.
Последние заметки
конечно такие устройства становятся очень удобными и полезными особенно с постоянным доступом в интернет.
twidroid - крутая штука
Надо еще настроить voip.
Authors:
- Source Code:download
Book description
Welcome to the expanded second edition of Dan Cederholm's best-selling Web Standards Solutions. Web Standards are the standard technology specifications enforced by the World Wide Web Consortium (W3C) to make sure that web designers and browser manufacturers are using the same technology syntax.
It is important that these implementations are the same throughout the Web, otherwise it becomes a messy proprietary place, and lacks consistency. These standards also allow content to be more compatible with multiple different viewing devices, such as screen readers for people with vision impairments, cell phones, PDFs, etc. HTML, XML, and CSS are all such technologies.
This book is your essential guide to understanding the advantages you can bring to your web pages by implementing web standards and precisely how to apply them. Web standards such as XHTML and CSS are now fairly well-known technologies, and they will likely be familiar to you, the web designer. Indeed, they are all around you on the Web. However, within web standards still lies a challenge: while the browser's support for web standards is steadily increasing, many web developers and designers have yet to discover the real benefits of web standards and respect the need to adhere to them.
The real art is in truly understanding the benefits and implementing the standards efficiently. As a simple example of its power, you can use CSS to lay out your pages instead of nesting tables. This can make file sizes smaller, allowing pages to load faster, ultimately increasing accessibility for all browsers, devices, and web users.
- Expanded edition containing bonus material.
- Teaches how to use Web Standards effectively to build better web sites.
- Solutions style promotes learning by work-through examples and assessments.
What you'll learn
Web Standards Solutions is broken down into 16 short chapters, each covering the theory and practice of different web standards concepts and showing multiple solutions to given problems for easy learning. You'll learn about multi-column layouts, using image replacement techniques to your best advantage, making the best use of tables and lists, and many more. This highly modular approach allows you to rapidly digest, understand, and utilize the essentials of web standards.
- Use XHTML elements correctly so that your markup is compact and more easily understood.
- Use CSS to style different elements of a web page.
- Lay out pages easily and effectively.
- Compare multiple methods of achieving the same results to make better design choices.
- Learn about advanced web design techniques and their important caveats.
- Make your sites more efficient and more accessible.
Who is this book for?
Web developers and designers wanting to learn standards-based techniques to improve their sites ‚Äömaking them more efficient, more accessible, and transferrable across multiple browsers and devices.
Information from book
- O'Reilly - Safari Books Online - 9781430219200 - Web Standards Solutions: The Markup and Style Handbook
- The W3C Markup Validation Service
-
This validator checks the markup validity of Web documents in HTML, XHTML, SMIL, MathML, etc. If you wish to validate specific content such as RSS/Atom feeds or CSS stylesheets, MobileOK content, or to find broken links, there are other validators and tools available
- Top 10 CSS Table Designs | CSS, Events | Smashing Magazine
-
3.10. More table style examples ( 1430219203 )
- A CSS styled table | Veerle's blog
-
3.10. More table style examples (1430219203)
- Data Tables and Cascading Style Sheets Gallery
-
3.10. More table style examples (1430219203)
- Day 28: Labeling form elements - Dive Into Accessibility
- Styling form controls with CSS, revisited | 456 Berea Street
-
Over two years ago, in September 2004, I posted an article called Styling form controls. My intention with that article (and its follow-up, Styling even more form controls) was to show that attempting to use CSS to make form controls look similar across browsers and operating systems in an exercise in futility. It simply cannot be done.
- HTML 4 Phrase Elements
-
ABBR - Abbreviation ACRONYM - Acronym CITE - Citation CODE - Computer code DEL - Deleted text DFN - Defined term EM - Emphasis INS - Inserted text KBD - Text to be input SAMP - Sample output STRONG - Strong emphasis VAR - Variable
- Microformats
- hCard Creator
-
This user interface, and the code behind it, is provided as an example for the benefit of microformat open standards developers, and to demonstrate the clear one to one correspondence between microformat fields and microformat code
- Technorati: Contacts Feed Service
-
Enter the URL of a page with hCard contact information (What is hCard?) to automatically add the contact information on that page into your address book application.
- mezzoblue CSS Crib Sheet
-
LoVe/HAte is a handy way to remember the correct order to place your declarations (www.mezzoblue.com/css/cribsheet/):
- On having layout — the concept of hasLayout in IE/Win
-
A lot of Internet Explorer's rendering inconsistencies can be fixed by giving an element "layout." John Gallant and Holly Bergevin classified these
- mezzoblue Fitts' Law
-
information on block-level link styling.
- Link presentation and Fitts' Law | Blog | 1976design.com
- Listamatic: one list, many options - Using CSS and a simple list to create radically different list options
-
Aside from the unordered variety, ordered and definition lists provide semantic structure as well as flexible styling options for those specific types. Let your imagination wander and experiment with different types of lists—using CSS to customize and spiff up the basic structure. To get you started, be sure to visit Listamatic, a site showcasing various CSS treatments on a single marked-up list:
- Media types
-
One of the most important features of style sheets is that they specify how a document is to be presented on different media: on the screen, on paper, with a speech synthesizer, with a braille device, etc.
- A List Apart: Articles: CSS Design: Going to Print
- The Layout Reservoir - BlueRobot
-
Great examples of multicolumn layouts created with absolute positioning.
- A List Apart: Articles: From Table Hacks to CSS Layout: A Web Designer's Journey
-
A great tutorial by Jeffrey Zeldman that chronicles the steps needed to create a two-column layout.
- glish.com : CSS layout techniques
-
Eric Costello's large resource of various CSS layouts.
- Little Boxes
-
A beautiful and simple interface to many CSS layout demonstrations by Owen Briggs.
- CSS Layouts: A collection of 224 Grid and CSS Layouts
-
Jacob C. Myers' collection of 224 grid and CSS layouts. Various configurations are available for preview and download.
- css Zen Garden: The Beauty in CSS Design
-
A demonstration of what can be accomplished visually through CSS-based design." Cultivated by Dave Shea, the "garden" showcases cutting-edge CSS designs (including layouts, of course) submitted by readers, using a single XHTML file. A fantastic resource to view CSS layouts at their best
- A List Apart: Articles: Elastic Design
-
We didn't talk about em-based (or "elastic") layouts, but I encourage you to take a look at this alternative way of creating CSS layouts with relative units, based on the current base font size. Author Patrick Griffiths discusses how adjusting the text also adjusts the calculated widths of the layout columns, therefore providing a flexible, scalable design.
- The Incredible Em & Elastic Layouts with CSS — Jon Tan 陳
-
Designer Jon Tan walks you through the construction of an em-based layout, with detailed explanation. A great tutorial for those interested in experimenting with em-based layouts.
- css-discuss.org
-
css-discuss "is a mailing list devoted to talking about CSS and ways to use it in the real world." This is a great place to ask questions and get answers as you're exploring the benefits of CSS. Plenty of helpful folks are out there with the knowledge to get you through just about anything.
- Digital Web Magazine
-
Published by Nick Finck, Digital Web Magazine was an online magazine full of columns, news, and tutorials for web designers. The site "closed its doors" in March 2009, but its archive is well worth browsing.
- Carsonified » Blog
-
Web design and development online publication with "in-depth features, audio interviews, training sessions and reviews," brought to you by the folks at Carsonified, a company that puts together popular conferences, workshops, and other web-related products.
- stopdesign
-
Douglas Bowman, best known for his standards-based redesigns of Wired News (www.wired.com) and Adaptive Path (www.adaptivepath.com), publishes useful tutorials, commentary, and insights into the mind of a designer within the world of web standards. His work on Wired News was a huge influence on my redesigns of the sites for Fast Company and Inc., and his attention to detail is second to none.
- mezzoblue § Home
-
No one monitors the pulse of the standards community better than Dave Shea, curator of the aforementioned CSS Zen Garden. At mezzoblue, Dave tackles the cutting-edge issues of standards-compliant design head on, often getting the community involved to work out existing issues. A fantastic resource.
- Authentic Boredom ~ Delivered weekly by Cameron Moll
-
The site of Cameron Moll, author, speaker, and Super-Designer.
- molly.com
-
Molly E. Holzschlag has done an enormous amount of work as a web standards advocate, instructor, and author over the years.
- Shaun Inman Compact
-
Home to Shaun Inman, pioneer of CSS and JavaScript explorations, sIFR (Scalable Inman Flash Replacement) contributor, and designer.
- Welcome to Ethan Marcotte's website — Unstoppable Robot Ninja
-
www.subtraction.com/
- Subtraction.com
-
The site of the master of the grid-based web, Khoi Vinh.
- Veerle's blog 2.0 - Webdesign - XHTML CSS | Graphic Design
-
The site of talented visual and web designer Veerle Pieters.
|
Typedia is a resource to classify, categorize, and connect typefaces.
|
|
Task management has never been this easy. Simplicity, however, is not achieved at the expense of powerful features. Download your free trial today and start getting more things done with less effort.
|
|
What will a technology-driven world look like 10, 50, or even 100 years from now? Those are questions that some of the most inventive and outrageous thinkers around have been addressing at the yearly TED (Technology, Entertainment, Design) conference. TED presenters have been wowing audiences with their future-tech ideas for a long time, and many of these talks are freely available on the web. But it can be a daunting task working out what to watch.
|