Kaspar Blog

Skip to end of sidebar Go to start of sidebar
Common Build Implementation Ant Ivy Nexus
I'm doing common build implementation based on Ant 1.8 Ivy 2.2 and Nexus current status can be found here
Overwriting IBM Websphere Portal 6.0 Localization

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.

Labels: ibm, portal
Restricting Multiple Sessions in WebSphere Portal 6.0

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

LoginUserAuth.java
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.

UserSessionFilter.java
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

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

Labels: ibm, portal
More Flexible Portlet Resource Bundle

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

Web Anatomy Interaction Design Frameworks that Work

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

Labels: mindmap, book
Problems which I met during integration of Crystal Reports into IBM Websphere Portal

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 человек. Эти люди между собой сложным образом взаимодействуют, они быстро собирают головоломку, которая потом становится продуктом и продается. Люди обучаются лучше играть в эту игру, и им это нравится.

Интерестное описание создания программного продукта.

Labels: quote
30 predictions for the future of twitter (some quotes)

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)

Labels: twitter, video, youtube
The Future of the Social Web

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.

HTC Hero и VoIP

Мтс предлагает тариф МТС Коннект c без лимитным интернетом

Максимальная скорость передачи данных при подключении услуги «Бюджетный безлимит» составляет 128 Кбит/сек, абонентская плата - 349 рублей в месяц. При подключении услуги «Безлимитный онлайн» максимальная скорость ограничивается 512 Кбит/сек и абонентская плата составляет - 549 рублей в месяц.

Проблема в том что стоимость исходящих вызовов на тарифе с безлимиитным интернетом 3 - 3,5 руб.
Но можно установить Sipdroid - это SIP клиент и пользоваться VoIP вместо GSM звонков.
В моем случае я установил sipdroid и использую voipcheap и получается теперь

звонки на обычный телефон по Питеру и Москве бесплатны, по России ~ 1 руб.
звонки на мобильный по всей России ~ 1.7 руб.

Sipdroid настроил только вчера поэтому пока еще не знаю насколько стабильная эта штука , а voipcheap пользуюсь уже давно качество у них связи хорошее.

voipcheap SIP настройки
voipcheap тарифы

2 Comments  |  Labels: hero, voip
HTC Hero Мое первое впечатление

Начал пользоваться HTC Hero и мое общее настроение - нравится.
Купил на ebay вот у этого продавца. EMS идет ~ 10 дней. В Питере официально продаются только черного цвета и стоит немного дороже.

Первая не понятная вещь - наличие только английской локали (в российской версии доступны две локали русская и английская) мне казалось ,что телефон без физической клавиатуры и поэтому тут ограничений быть не должно . Например если владелец разговаривает еще на другом языке или учит иностранный язык то как тут быть ? . Оказалось что поддержка других локалей есть просто она скрыта. Для того что бы ее активировать надо модифицировать конфигурационные файлы , а для этого надо перепрошить телефон с root доступом.
Способ получения root доступа
Прошивка
Тут разные сборки альтернативных прошивок с разной кастомезацией
Способ активирования локали
После этого можно пользоваться клавиатурой с разными языками.

Другая не очень удобная вещь это импорт контактов.

Мне пришлось из старого телефона экспортировать контакты в gmail а от туда синхронизовать из на телефон. что совсем не удобно. Правда есть программа которая может импортировать их из vcard файлов прямо в hiro Import Contacts автор @bornmw.

Последние заметки

конечно такие устройства становятся очень удобными и полезными особенно с постоянным доступом в интернет.

twidroid - крутая штука

Надо еще настроить voip.

Labels: hero
Finished reading - Web Standards Solutions, Second Edition

Authors:

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.

Daily Delicious 2009-08-25
Daily Delicious 2009-08-24

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.



Daily Delicious 2009-08-21

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.

Labels: delicious, mas, video, ted