tag:blogger.com,1999:blog-1895740676302054112024-03-05T13:33:19.077-08:00Symbyo TechnologiesSymbyo Technologies, Software Outsourcinghttp://www.blogger.com/profile/16631045922375854226noreply@blogger.comBlogger196125tag:blogger.com,1999:blog-189574067630205411.post-71169966768541706162011-10-02T00:39:00.000-07:002011-10-02T01:07:52.951-07:00Using Art To Bring Scientific Concepts To Life<div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><div style="font-family: Georgia,"Times New Roman",serif;"><span style="font-size: small;"><b><span class="Apple-style-span" style="background-color: #fefefe; color: #0b5394; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 16px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">By: <i style="color: black;">Yasmen Refaat</i></span></b></span></div><span class="Apple-style-span" style="background-color: #fefefe; color: #0b5394; font-family: Verdana,Geneva,sans-serif; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 16px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"> </span><br>
<span class="Apple-style-span" style="background-color: #fefefe; color: #0b5394; font-family: Verdana,Geneva,sans-serif; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 16px; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">Sometimes the grand ideas behind science's most important and intriguing concepts are so abstract they can be difficult to understand. One of the main goals of the International Science and Engineering Visualization Challenge, sponsored by the journal Science and the National Science Foundation, is to help bring these scientific concepts to life through stunning visualizations.<br>
<br>
The photographs, illustrations, video, and interactive graphics submitted by the contest's participants are meant to help us understand both the beauty and the science behind life's many secrets.<span class="Apple-converted-space"> </span><a href="http://content.techrepublic.com.com/2346-1035_11-396051-1.html" id="w7sn" style="color: #a1d83b; text-decoration: none;" title="This gallery">This gallery</a><span class="Apple-converted-space"> </span>shows just a few of the winners, which were announced Friday.</span><br>
<br>
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-URiNpYJNpaY/TogRtbZ8XLI/AAAAAAAAAJg/EntK6x3CYi8/s1600/396054-500-343.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="273" src="http://2.bp.blogspot.com/-URiNpYJNpaY/TogRtbZ8XLI/AAAAAAAAAJg/EntK6x3CYi8/s400/396054-500-343.jpg" width="400"> </a></div><div class="separator" style="clear: both; text-align: center;"></div></div></div><a href="http://blog.symbyo.com/2011/10/using-art-to-bring-scientific-concepts.html#more">Read more »</a><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-45815874197630967382011-09-26T00:45:00.000-07:002011-09-26T01:53:08.552-07:00The Stand Up Meeting<div dir="ltr" style="text-align: left;" trbidi="on"><div style="color: black; font-family: Verdana,sans-serif;"><span style="font-size: small;"><span class="Apple-style-span" style="background-color: #e0e0e0; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 19px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="background-color: white;"><b>By:</b> <i style="color: #0b5394;">Aya Raafat</i></span></span></span><br>
<span style="font-size: small;"><span class="Apple-style-span" style="background-color: #e0e0e0; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 19px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="background-color: white;"> </span></span></span><br>
<span style="font-size: small;"><span class="Apple-style-span" style="background-color: #e0e0e0; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 19px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="background-color: white;">Everyday when I start my working day, I've a call for a stand up meeting .. what ever we do.. this gives the team members a push to commit to some tasks for the day to finish it by the end of it.</span></span></span></div><div style="color: black; font-family: Verdana,sans-serif;"><span style="font-size: small;"><span class="Apple-style-span" style="background-color: #e0e0e0; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 19px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="background-color: white;"> </span></span><span class="Apple-style-span" style="background-color: white; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 19px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">Every morning, gather the development team in the same area. That area could be a hallway, a meeting room or whatever space is available for standing. No chairs allowed.</span></span></div><div style="color: black; font-family: Verdana,sans-serif;"><br>
</div><div style="color: black; font-family: Verdana,sans-serif;"><span style="font-size: small;"><span class="Apple-style-span" style="background-color: white; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 19px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="font-weight: bold;">The meeting should be over in under 10-15 minutes. The agenda is :<span class="Apple-converted-space"> </span></span></span></span></div><ul style="color: black; font-family: Verdana,sans-serif; text-align: left;"><li><span style="font-size: small;"><span class="Apple-style-span" style="background-color: white; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 19px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span class="Apple-converted-space">What I Accomplished Yesterday</span></span></span></li>
<li><span style="font-size: small;"><span class="Apple-style-span" style="background-color: white; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 19px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span class="Apple-converted-space">What I plan to accomplish today</span></span></span></li>
<li><span style="font-size: small;"><span class="Apple-style-span" style="background-color: white; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 19px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span class="Apple-converted-space">What issues are blocking progress </span></span></span></li></ul></div><a href="http://blog.symbyo.com/2011/09/stand-up-meeting.html#more">Read more »</a><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-34635930777461725182011-09-18T00:58:00.000-07:002011-09-18T01:08:52.770-07:00Cloud Computing and Mobile Application Development<div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><div class="MsoNormal"><span style="font-size: small;"><span style="line-height: 115%;">By: <i>Mina Samy</i></span></span><br>
<span style="font-size: small;"><span style="line-height: 115%;"> </span></span><br>
<span style="font-size: small;"><span style="line-height: 115%;">Cloud computing has been in use for sometime cause it’s a better solution to traditional software solution as it provides <b>Software-as-a-Service (SaaS)</b>, <b>Platform-as-a-Service(PaaS)</b> and <b>Infrastructure-as-a-Service(IaaS)</b>.</span></span></div><div class="MsoNormal"><br>
</div><div class="MsoNormal"><span style="font-size: small;"><span style="line-height: 115%;">For an enterprise, Cloud Computing removes the burden of constructing its IT infrastructure by depending on a third-party service provider that owns and manages the enterprise resources and allowing the enterprise users to access these resources on the Internet.</span></span></div></div></div><a href="http://blog.symbyo.com/2011/09/cloud-computing-and-mobile-application.html#more">Read more »</a><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-34157807769958143972011-09-11T00:47:00.000-07:002011-09-11T01:39:45.300-07:00ASP.NET Security Vulnerability<div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><br>
<br>
<div class="MsoNormal" style="text-align: left;">By: <i>Ahmed Hussam </i></div><div align="center" class="MsoNormal" style="text-align: center;"></div><div align="center" class="MsoNormal" style="text-align: center;"></div><div align="center" class="MsoNormal" style="text-align: center;"></div><div class="MsoNormal" style="color: #0b5394; margin-left: 0in; text-indent: 0in;"><b><u><span style="font-size: 13.5pt;">Introduction:</span></u></b></div><div class="MsoNormal" style="margin-left: 0in; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; mso-outline-level: 3; text-indent: 0in;">I passed by a very interesting article about ASP.NET vulnerability at ScuttGu blog, it was disclosed by<a href="http://technet.microsoft.com/en-us/security/advisory/2416728"> Microsoft Security Advisory</a> and here is the details of the vulnerability and the workarounds to avoid being attacked through it</div><div class="MsoNormal" style="margin-left: 0in; text-indent: 0in;"></div></div></div><a href="http://blog.symbyo.com/2011/09/aspnet-security-vulnerability.html#more">Read more »</a><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-26894742787622648602011-08-29T08:45:00.000-07:002011-08-29T02:58:50.180-07:00Job Vacancy: User Experience Designer - Web Designer<div dir="ltr" style="text-align: left;" trbidi="on"><br>
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-_x0iRFRzqd4/Tlph7PF_38I/AAAAAAAAAJA/90Gd3XpX-2E/s1600/job_openings.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://3.bp.blogspot.com/-_x0iRFRzqd4/Tlph7PF_38I/AAAAAAAAAJA/90Gd3XpX-2E/s320/job_openings.png" width="288"></a></div><div style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-family: Tahoma, Arial, Verdana, Helvetica, sans-serif; font-size: 13px;"><br>
</div><div style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-family: Tahoma, Arial, Verdana, Helvetica, sans-serif; font-size: 13px;">Symbyo Technologies is seeking an innovative, self-motivated User Experience designer to innovate and support a variety of user experience design and improvement initiatives across our projects and products. The ideal candidate will work collaboratively with several different business and development teams within the organization, providing elegant User Interfaces to complex workflows. A thought leader within the company this candidate will demonstrate an unfailing passion and capacity to advocate on behalf of our customers. This candidate will also demonstrate bar-raising graphic design ability, designing User Experiences that are aligned with the our products brands, styleguide, and peculiarity. Because the scope of this position supports multiple product launches, business needs, and business domains, the ability to balance high-level, holistic reasoning with detail-oriented feature design is imperative.<br>
<br>
</div></div><a href="http://blog.symbyo.com/2011/08/job-vacancy-user-experience-designer.html#more">Read more »</a><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-90759709869214636622011-08-28T03:11:00.000-07:002011-08-29T02:58:38.406-07:00JQuery Auto-Complete TextBox for ASP.NET<div dir="ltr" style="text-align: left;" trbidi="on">By: <i>Ahmed Hussam</i><br>
<h2 style="margin-left: 0in; text-indent: 0in;"><span class="Apple-style-span" style="color: #0b5394; font-family: Arial, Helvetica, sans-serif; font-size: small;">Introduction:</span></h2><div class="MsoNormal" style="margin-left: 9.0pt; text-indent: 0in;"><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><o:p> </o:p>jQuery UI AutoComplete widget provides suggestions while typing into the field. Data-Source would be an xml web-service that returns JSON data, which will be providing flexibility for developers to communicate to any remote databases to get list of suggestions, do processing and format output based on the typed letters</span></div><div class="MsoNormal" style="margin-left: 9.0pt; text-indent: 0in;"><br>
</div></div><a href="http://blog.symbyo.com/2011/08/jquery-auto-complete-textbox-for-aspnet.html#more">Read more »</a><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-26323555433190267662011-08-21T02:02:00.000-07:002011-08-21T02:26:05.343-07:00How To Motivate Your Team?<div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: left;"><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;">By: <i>Yasmen Refaat</i></span></div><div class="separator" style="clear: both; text-align: left;"><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"><i><br>
</i></span></div><div class="separator" style="clear: both; text-align: left;"><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;">Motivation, motivation, and motivation!! Personally speaking, it's the biggest and heaviest load on leaders. Motivating people is not an easy job, and when a team works without any kind of motivations it becomes like machines!! Rusty machines !!!</span></div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"><br>
</span><br>
<span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;">I've been working in a charity organization and many volunteering communities since 2006. That let me live great experiences with too many leaders. Some of them ware amazing, others ware just carrying the title, but having nothing to do with its responsibilities!!! Also, I was on charge of a great team (my graduation's project team), so I became more interesting in leadership in addition to my old admiration to management.</span><br>
<div style="background-color: transparent;"><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"> <br>
So, I found this great article titled with "10 things you can do to motivate your team", and I liked it a lot. It sums up the most important things leaders should do to motivate their teams.<br>
</span><br>
</div></div></div><a href="http://blog.symbyo.com/2011/08/how-to-motivate-your-team.html#more">Read more »</a><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-72364265607181928062011-08-17T04:44:00.000-07:002011-08-17T04:44:49.036-07:00Job Vacancy At Symbyo Technologies<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-0KBpdO_LyUU/TkupDvXOlMI/AAAAAAAAAEc/QvYHLhULTnY/s1600/Job-Openings+at+Symbyo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://1.bp.blogspot.com/-0KBpdO_LyUU/TkupDvXOlMI/AAAAAAAAAEc/QvYHLhULTnY/s200/Job-Openings+at+Symbyo.jpg" width="191" /></a></div><span class="Apple-style-span" style="color: #0b5394;"><b><br />
</b></span><br />
<div style="text-align: left;"><span class="Apple-style-span" style="color: #333333; font-family: 'Lucida Grande', Arial, Helvetica, sans-serif;"></span></div><h1 class="entry-title" style="font-weight: 700; line-height: 1.3em; margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 15px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span class="Apple-style-span" style="font-size: small;">C++ Developers (Medical Imaging, 3D Visualization, Image Processing):</span></h1><span class="Apple-style-span" style="color: #333333; font-family: 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"><div><div style="line-height: 1.4em; margin-bottom: 1.25em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">Symbyo Technologies is seeking Top notch C++ Developers and Solution Architects.</div><div style="line-height: 1.4em; margin-bottom: 1.25em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">This is an excellent opportunity for potential career advancement and exposure to leading edge technology within the medical imaging industry.</div><div style="line-height: 1.4em; margin-bottom: 1.25em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">You will be based in our Advanced 3D Visualization and Medical Imagining group, responsible for researching, implementing, testing and documenting medical imaging software systems and will take responsibility for the completion of designated software features; designing suitable solutions to complex problems with assistance from a senior engineers and developing prototypes which you will see through to completion.</div><div style="line-height: 1.4em; margin-bottom: 1.25em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">To be successful, candidates should have an excellent academic record. You will also have proven practical experience of working with C++, and specifically, strong knowledge of computer graphics and algorithms.Additionally, knowledge of parallel/concurrent programming techniques, x86 assembly language and GPU programming (using a shader language or CUDA, for example) is desirable, but not essential. Previous knowledge of medical imaging would also be advantageous.You will be a strong communicator, able to thrive working within a dynamic, innovative team developing industry-leading 3D medical imaging technology and applications. You will be involved in all aspects of the product development lifecycle from requirements capture through to product release and support.</div></div></span><span class="Apple-style-span" style="color: #333333; font-family: 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16px;">The work is fast paced and intellectually stimulating. If you enjoy a team-oriented, self-directed, flexible work environment, this position may be for you.</span><span class="Apple-style-span" style="color: #333333; font-family: 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"><div><div style="line-height: 1.4em; margin-bottom: 1.25em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><br />
</div></div><div><div style="line-height: 1.4em; margin-bottom: 1.25em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><strong>Apply online: </strong><a href="http://symbyo.com/careers/biojobs.aspx" style="color: #0052a3; text-decoration: none;">http://symbyo.com/careers/biojobs.aspx</a></div></div><div style="line-height: 1.4em; margin-bottom: 1.25em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><strong>Required Skills/Experience:</strong><br />
• BS or advanced degree in Computer Science, Biomedical Engineering or equivalent subject matter<br />
• Solid programming experience with in C++.<br />
• Strong in trouble-shooting skills, and capable of reviewing source code and developing functional unit tests against it<br />
• knowledge of GPU programming (using a shader language or CUDA, for example), 3D visualization is desirable, but not essential.<br />
• Must be detail oriented, organized and able to multi-task<br />
• Have a passion for software quality and is a champion for the end user<br />
• Very strong communication skills and a collaborative approach</div></span><br />
</div><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-51065844611315273852011-08-14T00:51:00.000-07:002011-08-16T04:34:38.964-07:00Keep Design by the Minute<div dir="ltr" style="text-align: left;" trbidi="on"><span class="Apple-style-span" style="color: #0b5394; font-weight: bold;">By: <span class="Apple-style-span" style="font-weight: normal;"><i>Sohair Ali</i></span></span><br>
<div><o:p> </o:p>Software products go through several stages as they mature from initial concept to finished product. After the purpose and specifications of software are determined, software developers will design to develop a plan for software. It is important to design and document software in an organized way so that it can be easily understood and maintained after the initial release. </div><div class="MsoNormal" style="text-align: left;"><br>
</div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-0JXdauqVI_A/TkePp6KEhiI/AAAAAAAAAEQ/twJMIuwfFWw/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="286" src="http://2.bp.blogspot.com/-0JXdauqVI_A/TkePp6KEhiI/AAAAAAAAAEQ/twJMIuwfFWw/s320/1.png" width="320"></a></div><div class="separator" style="clear: both; text-align: center;"><br>
</div><div class="separator" style="clear: both; text-align: left;"></div><div class="MsoNormal" style="text-align: justify;">While designing software a lot of concepts and practices are the tools of software designers like abstraction, patterns, modularity, cohesion , separation of responsibilities, modularization and OO design principles </div><div style="text-align: justify;"><br>
</div><div class="MsoNormal" style="text-align: justify;">After accomplishing the task of design, this work needs to be maintained, reviewed and modified if needed while implementation and we are facing the question of How to write a code that preserves the initial architecture design, make sure of preserving and recovering the design of software in its implementation phase and avoid losing design in code?<br>
<br>
</div></div><a href="http://blog.symbyo.com/2011/08/keep-design-by-minute.html#more">Read more »</a><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-24789362994999552652011-08-07T01:48:00.000-07:002011-08-07T12:38:22.085-07:00Introduction to Cross Platform Mobile development<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><br></div><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-vLO7jvDr8Jc/Tj5HqvSjI8I/AAAAAAAAADk/Hgbp1qE3XYc/s1600/M._f._Post_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://2.bp.blogspot.com/-vLO7jvDr8Jc/Tj5HqvSjI8I/AAAAAAAAADk/Hgbp1qE3XYc/s320/M._f._Post_1.png" width="319"></a></div><div class="separator" style="clear: both; text-align: center;"><br></div><div class="separator" style="clear: both; text-align: left;"></div><div class="MsoNoSpacing" style="text-align: justify; text-justify: inter-ideograph;"><span style="font-family: Times;">With diversity of mobile platforms iOS, Android, Blackberry, Symbian, Windows Phone 7, Meego, WebOS, Bada and many more, developers all around the world face incredible challenge to design and build mobile apps tw<a href="http://www.blogger.com/post-edit.g?blogID=189574067630205411&postID=2478936299499955265" name="_GoBack"></a>hat run on all this platforms.<o:p></o:p></span></div><div class="MsoNoSpacing" style="text-align: justify; text-justify: inter-ideograph;"><br></div></div><a href="http://blog.symbyo.com/2011/08/into-to-cross-platform-mobile.html#more">Read more »</a><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Anonymousnoreply@blogger.com2tag:blogger.com,1999:blog-189574067630205411.post-73310446011398862372011-07-25T01:15:00.000-07:002011-07-26T09:05:14.494-07:00Tutorial: How to use jQuery DatePicker UI inside your ASP.NET Web Application<div dir="ltr" style="text-align: left;" trbidi="on">By: <i>Ahmed Hussam</i><br>
<b> <u>jQuery DatePicker Features:</u> </b><br>
<div class="MsoNormal" style="margin-left: 0in; text-indent: 0in;"> The jQuery UI Datepicker is a highly configurable plugin that adds datepicker functionality to your pages,</div><div class="MsoNormal" style="margin-left: 0in; text-indent: 0in;"> You can customize the date format and language, restrict the selectable date ranges and add in buttons and other navigation options easily.</div><div class="MsoNormal" style="margin-left: 0in; text-indent: 0in;">By default, the datepicker calendar opens in a small overlay onFocus and closes automatically onBlur or when a date is selected. For an inline calendar, simply attach the datepicker to a div or span. </div><div class="MsoNormal" style="margin-left: 0in; text-indent: 0in;">You can use keyboard shortcuts to drive the datepicker:</div><div class="MsoNormal" style="margin-left: 0in; text-indent: 0in;"></div></div><a href="http://blog.symbyo.com/2011/07/tutorial-how-to-use-jquery-datepicker.html#more">Read more »</a><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-70611869339425799762011-07-17T03:56:00.000-07:002011-07-17T03:56:13.087-07:00The Android Invasion Continues!!<div align="center" class="MsoNormal" style="text-align: center;"><b><span style="font-size: 18pt; line-height: 115%;"></span></b></div><div class="MsoNormal"><span style="font-size: small;"><span style="line-height: 115%;"><b>By:</b> <i>Mina Samy</i></span></span></div><div class="MsoNormal"><br>
</div><div class="MsoNormal"><span style="font-size: 14pt; line-height: 115%;"> </span></div><div class="MsoNormal" style="text-align: justify;"><span style="font-size: small;"><span style="line-height: 115%;">Android, Google’s mobile operating system that dominates the world market with 36% share seems to continue its invasion of new territories other than handsets and tablets. Android is going to get in Home automation, automotive industry, mobile payment and even military activities.</span></span></div><div class="separator" style="clear: both; text-align: center;"><span style="font-size: small;"><a href="http://4.bp.blogspot.com/-2p9l4We0BII/TiK2ZY-Xt3I/AAAAAAAAADE/n80W5AvbKtI/s1600/gartner.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="209" src="http://4.bp.blogspot.com/-2p9l4We0BII/TiK2ZY-Xt3I/AAAAAAAAADE/n80W5AvbKtI/s320/gartner.png" width="320"></a></span></div><div class="MsoNormal" style="text-align: justify;"><span style="font-size: small;"><span style="line-height: 115%;"> </span><b><span style="line-height: 115%;">Android@Home:</span></b></span></div><span style="font-size: small;"> </span><br>
<div class="MsoNormal" style="text-align: justify;"><span style="font-size: small;"><span style="line-height: 115%;">At Google I/O 2011 Google the <b>Android@Home</b> framework which will extend Android to home appliances. <b>Android@Home</b> is a set of protocols for controlling light switches and other home appliances through Android. Google revealed an example : "Project Tungsten," a wireless speaker system that can be synced via Android, as well as wireless light switches and other appliances. </span></span></div><div class="separator" style="clear: both; text-align: center;"><span style="font-size: small;"><a href="http://1.bp.blogspot.com/-q1tvSw1JOX4/TiK2hqvF4SI/AAAAAAAAADI/Us4NVGsqUnw/s1600/androidathome.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="http://1.bp.blogspot.com/-q1tvSw1JOX4/TiK2hqvF4SI/AAAAAAAAADI/Us4NVGsqUnw/s320/androidathome.png" width="320"></a></span></div><div class="MsoNormal" style="text-align: justify;"><br>
</div><span style="font-size: small;"> </span><br>
<div class="MsoNormal" style="text-align: justify;"><span style="font-size: small;"><span style="line-height: 115%;">Another aspect of this is the introduction of the <b>Android open Accessory Development Kit (ADK) </b>an API that allows external USB devices including keyboards, mice, and game controllers- based on the open source <b>Arduino </b>electronics platform - to be connected to Android powered devices.</span></span></div><span style="font-size: small;"> </span><br>
<div class="MsoNormal" style="text-align: justify;"><span style="font-size: small;"><span style="line-height: 115%;">Google demonstrated an exercise bike connected through USB to an Android phone, the phone launched an application that showed heart rate data from the cycle to the phone.</span></span></div><span style="font-size: small;"> </span><br>
<div class="MsoNormal" style="text-align: justify;"><span style="font-size: small;"><span style="line-height: 115%;">The ADK API currently supports connectivity through USB, but Bluetooth support is planned for the future.</span></span></div><span style="font-size: small;"> </span><br>
<div class="MsoNormal" style="text-align: justify;"></div><a href="http://blog.symbyo.com/2011/07/android-invasion-continues.html#more">Read more »</a><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Anonymousnoreply@blogger.com1tag:blogger.com,1999:blog-189574067630205411.post-67025043415326592912011-07-10T02:58:00.000-07:002011-07-10T06:15:38.504-07:00Understanding Collective Intelligence<div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; mso-outline-level: 3;"><b><span style="color: black; font-family: Arial,sans-serif;"></span></b><b><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"></span></b></div><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"></span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"></span></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: large;"><b>By:</b> </span><span style="font-size: large;"><i>Yasmen Refaat.</i></span></div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"> </span><span style="color: black; font-family: Arial,sans-serif;">Newer web applications trust their users, invite them to interact, connect them with others, gain early feedback from them, and then use the collected information to constantly improve the application.</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
<br />
</span><span style="color: black; font-family: Arial,sans-serif;">Users are expressing themselves. This expression may be in the form of sharing their opinions on a product or a service through reviews or comments; through sharing and tagging content; through participation in an online community; or by contributing new content.</span><br />
</div><span style="color: black; font-family: Arial,sans-serif;">This increased user interaction and participation gives rise to data that can be converted into intelligence in your application. The use of collective intelligence to personalize a site for a user, to aid him in searching and making decisions, and to make the application more sticky are cherished goals that web applications try to fulfill.</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
<br />
</span><span style="color: black; font-family: Arial,sans-serif;">More formally, collective intelligence (CI) simply and concisely means </span><i><span style="color: black; font-family: Georgia,serif;">To effectively use the information provided by others to improve one’s application</span></i><span style="color: black; font-family: Arial,sans-serif;">.</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
<br />
</span><b><span style="color: black; font-family: Arial,sans-serif;">What is collective intelligence?</span></b><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
<br />
</span><span style="color: black; font-family: Arial,sans-serif;">When a group of individuals collaborate or compete with each other, intelligence or behavior that otherwise didn’t exist suddenly emerges; this is commonly known as collective intelligence. The actions or influence of a few individuals slowly spread across the community until the actions become the norm for the community.</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
<br />
</span><b><span style="color: black; font-family: Arial,sans-serif;">YouTube Example:</span></b><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
</span><span style="color: black; font-family: Arial,sans-serif;">In October 2006, Google bought YouTube for $1.65 billion. In its 20 months of existence, YouTube had grown to be one of the busiest sites on the Internet, dishing out 100 million video (As of September 2006) views a day. It ramped from zero to more than 20 million unique user visits a day, with mainly viral marketing—spread from person to person.</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
<br />
</span><span style="color: black; font-family: Arial,sans-serif;">In YouTube’s case, each time a user uploaded a new video, she was easily able to invite others to view this video. As those others viewed this video, other related videos popped up as recommendations, keeping the user further engaged. Ultimately, many of these viewers also became submitters and uploaded their own videos as well. As the number of videos increased, the site became more and more attractive for new users to visit.</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"></span><br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dy4OoWENv3wZWMV4DMYUWoYq9WFb-dsLKWo1jaWtBN1ExKs2LBbzdj247LUonfxCsYAN6pdmUcbxPSxhg9xbg' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div><div style="text-align: center;"><br />
</div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"> <br />
</span><i><span style="color: black; font-family: Georgia,serif;">Harnessing information from users improves the perceived value of the application to both current and prospective users. This improved value will not only encourage current users to interact more, but will also attract new users to the application. The value of the application further improves as new users interact with it and contribute more content. This forms a self-reinforcing feedback loop, commonly known as a network effect, which enables wider adoption of the service.</span></i><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
<br />
<br />
</span><b><span style="color: black; font-family: Arial,sans-serif;">CI in Web Applications</span></b><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
</span><span style="color: black; font-family: Arial,sans-serif;">Collective intelligence of users in essence is</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
</span><span style="color: black; font-family: Arial,sans-serif;">■ The intelligence that’s extracted out from the collective set of interactions and contributions made by your users.</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
</span><span style="color: black; font-family: Arial,sans-serif;">■ The use of this intelligence to act as a filter for what’s valuable in your application for a user—This filter takes into account a user’s preferences and interactions to provide relevant information to the user.</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
<br />
</span><span style="color: black; font-family: Arial,sans-serif;">This filter could be the simple influence that collective user information has on a user—perhaps a rating or a review written about a product, as shown in figure 1—or it may be more involved—building models to recommend personalized content to a user. </span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"></span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-z5dRKVw72aw/Thl_0tLfH-I/AAAAAAAAACo/t5OCJsoKhmc/s1600/y.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="274" src="http://2.bp.blogspot.com/-z5dRKVw72aw/Thl_0tLfH-I/AAAAAAAAACo/t5OCJsoKhmc/s320/y.png" width="320" /></a></div><br />
</div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"> </span><span style="color: black; font-family: Arial,sans-serif;">As shown in figure 2, there are three things that need to happen to apply collective intelligence in your application. You need to:</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
</span><span style="color: black; font-family: Arial,sans-serif;">1- Allow users to interact with your site and with each other, learning about each user through their interactions and contributions.</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
</span><span style="color: black; font-family: Arial,sans-serif;">2- Aggregate what you learn about your users and their contributions using some useful models.</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
</span><span style="color: black; font-family: Arial,sans-serif;">3- Leverage those models to recommend relevant content to a user.</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"></span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-A-1qhfn97W8/Thl_4ZxwSRI/AAAAAAAAACs/PBco1giOi28/s1600/y1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="162" src="http://4.bp.blogspot.com/-A-1qhfn97W8/Thl_4ZxwSRI/AAAAAAAAACs/PBco1giOi28/s400/y1.png" width="400" /></a></div><br />
</div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"> </span><b><span style="color: black; font-family: Arial,sans-serif;">Benefits of Collective Intelligence</span></b><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
</span><span style="color: black; font-family: Arial,sans-serif;">Applying collective intelligence to your application impacts it in the following manner:</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
</span><span style="color: black; font-family: Arial,sans-serif;">■ Higher retention rates —The more users interact with the application, the stickier it gets for them, and the higher the probability that they’ll become repeat visitors.</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
</span><span style="color: black; font-family: Arial,sans-serif;">■ Greater opportunities to market to the user—The greater the number of interactions, the greater the number of pages visited by the user, which increases the opportunities to market to or communicate with the user.</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
</span><span style="color: black; font-family: Arial,sans-serif;">■ Higher probability of a user completing a transaction and finding information of interest —The more contextually relevant information that a user finds, the better the chances that he’ll have the information he needs to complete the transaction or find content of interest. This leads to higher click-through and conversion rates for your advertisements.</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
</span><span style="color: black; font-family: Arial,sans-serif;">■ Boosting search engine rankings —The more users participate and contribute content, the more content is available in your application and indexed by search engines. This could boost your search engine ranking and make it easier for others to find your application.</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
<br />
<br />
</span><b><span style="color: black; font-family: Arial,sans-serif;">References:</span></b><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"><br />
</span><span style="color: black; font-family: Arial,sans-serif;"><span style="font-family: 'Helvetica Neue',Arial,Helvetica,sans-serif;">1. Satnam Alag,</span><b style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><i> “Collective Intelligence In Action”</i></b><span style="font-family: 'Helvetica Neue',Arial,Helvetica,sans-serif;">. Manning Publications Co., 1st Ed., 2009</span>.</span><span style="color: black; font-family: 'Times New Roman',serif; font-size: 13.5pt;"></span></div><div class="MsoNormal"><br />
<br />
<div class="author-block"><a href="http://www.linkedin.com/in/yasmenrs">About Yasmen Refaat</a>:<br />
<br />
<img class="authoravatar" src="http://www.sydneycloseup.com/image-files/flights-to-sydney-australia-05.jpg" /> Associate Software Engeneer, at Symbyo Technologies. Yasmen's experience includes analysing, designing, & developing larg scale comunity based websites.Contact with Yasmen at:<br />
<a href="http://www.linkedin.com/in/yasmenrs">http://www.linkedin.com/in/yasmenrs<br />
</a>.<br />
<div style="clear: both;"></div></div><br />
<br />
</div><span class="fullpost"> </span><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-54387128776219703082011-07-03T00:41:00.000-07:002011-09-14T06:22:06.714-07:00Facing Quality Challenges in Agile Teams<div dir="ltr" style="text-align: left;" trbidi="on">By: Aya El-Gebeely<br>
<br>
<div style="margin: 0in 0in 0in 1.45pt;"><span style="font-family: Calibri,sans-serif; font-size: 11pt;">One of the<a href="http://twitter.com/#%21/jurgenappelo"> Agile practitioners</a> tweeted this quote : <i><span style="color: grey;">"Many Agile-related questions I get are of the type "How do we drive a car safely when it has only 3 wheels, no breaks, and a blind driver?".</span></i> This is pretty true, because many people consider that software product quality will find itself a path through and just be there, without giving it even small portion of thought. As mentioned in various literature about Agile teams, that the product Quality is the responsibility of the whole team. All team members work closely(Product owner - Developers - Testers - Architects - Technical Lead..etc.)to get the software product to the light. And the capacity to create high-quality solutions lies in the (Will) of the team and their dedication in considering quality through project's different phases.</span></div><div style="margin: 0in 0in 0in 1.45pt;"><span style="font-family: Calibri,sans-serif; font-size: 11pt;">On tight schedules teams tend to squeeze out the time dedicated for QA and testing activities, with a whole focus on getting the set of features done. Actually this may work for small projects and teams, but getting sloppy with process not always succeed; as we ignore the fact that higher penalty and technical dept will accumulate on the team, and then you find that more time and cost are depleted in the maintenance and rework. This was discussed before the <a href="http://blog.symbyo.com/2011/05/technical-debt.html">Technical dept</a> posted recently.<o:p></o:p></span></div><div style="margin: 0in 0in 0in 1.45pt;"><br>
</div></div><a href="http://blog.symbyo.com/2011/07/facing-quality-challenges-in-agile.html#more">Read more »</a><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-22082928730705349972011-06-26T21:48:00.000-07:002011-07-10T06:16:32.722-07:00How to Branch Strategically ?<div dir="ltr" style="text-align: left;" trbidi="on"><div><br />
</div><div>Branching is a fundamental part of version control systems. If you're working on any good sized project this is a feature you'll eventually come to depend on to enable simultaneous development of different features.</div><div><br />
</div><div>If you branch strategically, you can maintain the order and consistency of multiple versions of your software. In this article your will learn the best practices for adopting branching in your project regardless of the source control system you rely on.</div><div><div xmlns=""><div class="LW_CollapsibleArea_TitleDiv" style="margin-bottom: 19px; margin-top: 19px;"><div><span class="Apple-style-span" style="font-family: 'Segoe UI',Verdana,Arial; font-size: 13px;"><a class="LW_CollapsibleArea_TitleAhref" href="http://msdn.microsoft.com/en-us/library/ee782536.aspx" id="ec9a6136-a0ee-459e-b1dc-5c6bf4b8a42a" style="color: #1364c4; float: left; outline-color: initial; outline-style: none; outline-width: initial; text-decoration: none;" title="Collapse"><span class="LW_CollapsibleArea_Title" style="color: #3f529c; font-family: 'Segoe UI',Verdana,Arial; font-size: 1.538em; font-weight: bold; padding-left: 6px; word-wrap: break-word;"><br />
</span></a><a class="LW_CollapsibleArea_TitleAhref" href="http://msdn.microsoft.com/en-us/library/ee782536.aspx" id="ec9a6136-a0ee-459e-b1dc-5c6bf4b8a42a" style="color: #1364c4; float: left; outline-color: initial; outline-style: none; outline-width: initial; text-decoration: none;" title="Collapse"><span class="LW_CollapsibleArea_Title" style="color: #3f529c; font-family: 'Segoe UI',Verdana,Arial; font-size: 1.538em; font-weight: bold; padding-left: 6px; word-wrap: break-word;">How does your team manage code while it introduces multiple changes simultaneously through several project releases?</span></a><br />
</span><br />
<div class="LW_CollapsibleArea_HrDiv" style="padding-top: 12px;"><hr class="LW_CollapsibleArea_Hr" style="border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; color: #e5e5e5; margin-left: 4px;" /></div></div></div><div class="sectionblock" id="ec9a6136-a0ee-459e-b1dc-5c6bf4b8a42a_c" style="clear: both; display: block; padding-left: 15px;"><span class="Apple-style-span" style="font-family: 'Segoe UI',Verdana,Arial; font-size: 13px;"><a href="http://www.blogger.com/post-edit.g?blogID=189574067630205411&postID=2208292873070534997" id="sectionToggle0" xmlns="http://www.w3.org/1999/xhtml"></a></span><br />
<div xmlns="http://www.w3.org/1999/xhtml"><span class="Apple-style-span" style="font-family: 'Segoe UI',Verdana,Arial; font-size: 13px;">When you work with a version control system, you must consider how to set up a branch structure. You can create a branch by mirroring the source code file. Then you can change the branch without affecting the source. For example, as the branch structure in the following illustration shows, the MAIN branch contains completed functionality that has passed integration tests, and the DEVELOPMENT branch contains the code that is under construction. When a new functionality in the DEVELOPMENT branch is completed and can pass integration tests, you can promote the code from the DEVELOPMENT branch to the MAIN branch. This process is referred to as reverse integration. Conversely, if you merge the code from the MAIN branch to the DEVELOPMENT branch, the process is referred to as forward integration.</span></div><span class="Apple-style-span" style="font-family: 'Segoe UI',Verdana,Arial; font-size: 13px;"><img alt="Main Branch" id="BranchStrat_Main" src="http://i.msdn.microsoft.com/dynimg/IC372280.png" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px;" title="Main Branch" /></span></div></div><span class="Apple-style-span" style="font-family: 'Segoe UI',Verdana,Arial; font-size: 13px;"></span><br />
<div><span class="Apple-style-span" style="font-family: 'Segoe UI',Verdana,Arial; font-size: 13px;"><span class="Apple-style-span" style="font-family: 'Segoe UI',Verdana,Arial; font-size: 13px;"><br />
</span></span></div><span class="Apple-style-span" style="font-family: 'Segoe UI',Verdana,Arial; font-size: 13px;">Branching and merging entail the following principles:</span><span class="Apple-style-span" style="font-family: 'Segoe UI',Verdana,Arial; font-size: 13px;"><div xmlns=""><div class="sectionblock" style="clear: both; display: block; padding-left: 15px;"><ol xmlns="http://www.w3.org/1999/xhtml"><li>Each branch must have a defined policy about how to integrate code into this branch. For example, in the branch structure of the previous illustration, you can assign a team member to own and manage the MAIN branch. This member is responsible for performing the initial branch operation, reverse integrating changes from the DEVELOPMENT branch to the MAIN branch, and forward integrating changes from the MAIN branch to the DEVELOPMENT branch. Forward integration is important when the MAIN branch also integrates changes from other branches.</li>
<li>The MAIN branch must contain code that has passed integration tests so that it is always ready for a release.</li>
<li>The DEVELOPMENT (or work) branch constantly evolves because team members check in changes periodically.</li>
<li>Labels are snapshots of the files in a branch at a specific time.</li>
</ol></div></div></span><span class="Apple-style-span" style="font-family: 'Segoe UI',Verdana,Arial; font-size: 13px;"><a class="LW_CollapsibleArea_TitleAhref" href="http://msdn.microsoft.com/en-us/library/ee782536.aspx" id="80fb1753-630a-45e0-bbe5-2c84e07418a9" style="color: #1364c4; display: inline !important; outline-color: initial; outline-style: none; outline-width: initial; text-decoration: none;" title="Collapse"><span class="LW_CollapsibleArea_Title" style="color: #3f529c; font-family: 'Segoe UI',Verdana,Arial; font-size: 1.538em; font-weight: bold; padding-left: 6px; word-wrap: break-word;">How often should your team reverse integrate and forward integrate?</span></a></span><span class="Apple-style-span" style="font-family: 'Segoe UI',Verdana,Arial; font-size: 13px;"><div xmlns=""><div class="LW_CollapsibleArea_TitleDiv" style="margin-bottom: 19px; margin-top: 19px;"><div><div class="LW_CollapsibleArea_HrDiv" style="padding-top: 12px;"><hr class="LW_CollapsibleArea_Hr" style="border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; color: #e5e5e5; margin-left: 4px;" /></div></div></div><div class="sectionblock" id="80fb1753-630a-45e0-bbe5-2c84e07418a9_c" style="clear: both; display: block; padding-left: 15px;"><a href="http://www.blogger.com/post-edit.g?blogID=189574067630205411&postID=2208292873070534997" id="sectionToggle1" xmlns="http://www.w3.org/1999/xhtml"></a><br />
<div xmlns="http://www.w3.org/1999/xhtml">As shown in the following illustration, reverse integration and forward integration should occur at least when you complete a user story. Although each team might define completeness differently, completion of a user story generally means that you complete both the functionality and the corresponding unit tests. You can reverse integrate to the MAIN branch only after unit tests have verified the stability of the DEVELOPMENT branch.</div><img alt="Branch across two sprints" height="162" id="BranchStrat_Sprint" src="http://i.msdn.microsoft.com/dynimg/IC378600.png" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px;" title="Branch across two sprints" width="400" /><br />
<div xmlns="http://www.w3.org/1999/xhtml">If you have more than one work (DEVELOPMENT) branch, forward integration to all work branches should occur as soon as any branch integrates into the MAIN branch. Because the MAIN branch is kept stable, forward integration is safe. Conflicts or failures at the work branches might occur because you cannot guarantee that the work branches are stable.</div><div xmlns="http://www.w3.org/1999/xhtml">It is important that you resolve all conflicts as soon as possible. By using a gated check-in for the MAIN branch, you help make the reverse integration much easier because quality gates help avoid conflicts or errors in the MAIN branch. </div></div></div><div xmlns=""><div class="LW_CollapsibleArea_TitleDiv" style="margin-bottom: 19px; margin-top: 19px;"><div><a class="LW_CollapsibleArea_TitleAhref" href="http://msdn.microsoft.com/en-us/library/ee782536.aspx" id="90d8452b-b2df-4c00-b329-06639ed07463" style="color: #1364c4; float: left; outline-color: initial; outline-style: none; outline-width: initial; text-decoration: none;" title="Collapse"><span class="LW_CollapsibleArea_Title" style="color: #3f529c; font-family: 'Segoe UI',Verdana,Arial; font-size: 1.538em; font-weight: bold; padding-left: 6px; word-wrap: break-word;">How does your team manage sources that implement different user stories?</span></a><br />
<div class="LW_CollapsibleArea_HrDiv" style="padding-top: 12px;"><hr class="LW_CollapsibleArea_Hr" style="border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; color: #e5e5e5; margin-left: 4px;" /></div></div></div><div class="sectionblock" id="90d8452b-b2df-4c00-b329-06639ed07463_c" style="clear: both; display: block; padding-left: 15px;"><a href="http://www.blogger.com/post-edit.g?blogID=189574067630205411&postID=2208292873070534997" id="sectionToggle2" xmlns="http://www.w3.org/1999/xhtml"></a><br />
<div xmlns="http://www.w3.org/1999/xhtml">As the following illustration shows, you can check in changes to a work branch periodically to complete a user story. You can implement multiple user stories in the same branch at the same time. However, you can reverse integrate to the MAIN branch only when you complete all the in-progress work. It is recommended that you group user stories by similar size because you do not want a large user story to block the integration of many small ones. You can split the two sets of user stories into two branches.</div><img alt="Check-in Completes User story" id="BranchStrat_UserStory" src="http://i.msdn.microsoft.com/dynimg/IC378601.png" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px;" title="Check-in Completes User story" /></div></div><div xmlns=""><div class="LW_CollapsibleArea_TitleDiv" style="margin-bottom: 19px; margin-top: 19px;"><div><a class="LW_CollapsibleArea_TitleAhref" href="http://msdn.microsoft.com/en-us/library/ee782536.aspx" id="4c5d8c3e-12fd-45b7-902c-2aee081e10ea" style="color: #1364c4; float: left; outline-color: initial; outline-style: none; outline-width: initial; text-decoration: none;" title="Collapse"><span class="LW_CollapsibleArea_Title" style="color: #3f529c; font-family: 'Segoe UI',Verdana,Arial; font-size: 1.538em; font-weight: bold; padding-left: 6px; word-wrap: break-word;">When should the team add a branch?</span></a><br />
<div class="LW_CollapsibleArea_HrDiv" style="padding-top: 12px;"><hr class="LW_CollapsibleArea_Hr" style="border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; color: #e5e5e5; margin-left: 4px;" /></div></div></div><div class="sectionblock" id="4c5d8c3e-12fd-45b7-902c-2aee081e10ea_c" style="clear: both; display: block; padding-left: 15px;"><a href="http://www.blogger.com/post-edit.g?blogID=189574067630205411&postID=2208292873070534997" id="sectionToggle3" xmlns="http://www.w3.org/1999/xhtml"></a><br />
<div xmlns="http://www.w3.org/1999/xhtml">You should create branches in the following situations:</div><ul style="list-style-type: disc; margin-left: 40px; padding-left: 0px;" xmlns="http://www.w3.org/1999/xhtml"><li style="list-style-image: url(http://i3.msdn.microsoft.com/Hash/fcc063e32e5c2395ba48efadd8423b60.gif);">When you must release code on a different schedule/cycle than the existing branches.</li>
<li style="list-style-image: url(http://i3.msdn.microsoft.com/Hash/fcc063e32e5c2395ba48efadd8423b60.gif);">When your code requires a different branch policy. If you create a new branch that has the new policy, you can add strategic value to your project.</li>
<li style="list-style-image: url(http://i3.msdn.microsoft.com/Hash/fcc063e32e5c2395ba48efadd8423b60.gif);">When functionality is released to a customer and your team plans to make changes that do not affect the planned release cycle.</li>
</ul><div xmlns="http://www.w3.org/1999/xhtml">You should not create a branching for each user story because it creates a high integration cost. The overhead of managing branches can become significant if you have many branches.</div></div></div><div xmlns=""><div class="LW_CollapsibleArea_TitleDiv" style="margin-bottom: 19px; margin-top: 19px;"><div><a class="LW_CollapsibleArea_TitleAhref" href="http://msdn.microsoft.com/en-us/library/ee782536.aspx" id="5c17c7ab-2ab3-41e3-9855-0bafc4e85bc3" style="color: #1364c4; float: left; outline-color: initial; outline-style: none; outline-width: initial; text-decoration: none;" title="Collapse"><span class="LW_CollapsibleArea_Title" style="color: #3f529c; font-family: 'Segoe UI',Verdana,Arial; font-size: 1.538em; font-weight: bold; padding-left: 6px; word-wrap: break-word;">How does the team manage releases from the version control perspective?</span></a><br />
<div class="LW_CollapsibleArea_HrDiv" style="padding-top: 12px;"><hr class="LW_CollapsibleArea_Hr" style="border-bottom-color: rgb(229, 229, 229); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; color: #e5e5e5; margin-left: 4px;" /></div></div></div><div class="sectionblock" id="5c17c7ab-2ab3-41e3-9855-0bafc4e85bc3_c" style="clear: both; display: block; padding-left: 15px;"><a href="http://www.blogger.com/post-edit.g?blogID=189574067630205411&postID=2208292873070534997" id="sectionToggle4" xmlns="http://www.w3.org/1999/xhtml"></a><br />
<div xmlns="http://www.w3.org/1999/xhtml">Your team should be able to release code at the end of any sprint. By using Team Foundation Server, you can label a branch to take a snapshot of the code at a specific point in time. As the following illustration shows, you can label the MAIN branch for a release. This lets you return the branch to its state at this point.</div><img alt="Label a branch to take a snapshot of the code" id="BranchStrat_Label" src="http://i.msdn.microsoft.com/dynimg/IC372284.png" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px;" title="Label a branch to take a snapshot of the code" /><br />
<div xmlns="http://www.w3.org/1999/xhtml">Because you must implement updates on releases, creating a branch for a release helps your team continue to work independently on the next sprint without creating conflicts with future releases. The following illustration shows a branch that contains code for an update and that is reverse integrated into the MAIN branch after a release at the end of the second sprint.</div><img alt="Reverse integrate a branch that contains update" height="135" id="BranchStrat_Hotfix" src="http://i.msdn.microsoft.com/dynimg/IC379434.png" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px;" title="Reverse integrate a branch that contains update" width="400" /><br />
<div xmlns="http://www.w3.org/1999/xhtml">When you create a branch for a release, you should create that branch from the MAIN branch, which is the most stable. If you branch for release from a work branch, it can cause integration challenges because the stability of work branches is not guaranteed.</div><div xmlns="http://www.w3.org/1999/xhtml"><br />
</div><div xmlns="http://www.w3.org/1999/xhtml">Source: <a href="http://msdn.microsoft.com/en-us/library/ee782536.aspx">link</a></div><div xmlns="http://www.w3.org/1999/xhtml"><br />
</div></div></div></span></div></div><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Symbyo Technologies, Software Outsourcinghttp://www.blogger.com/profile/16631045922375854226noreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-39502900883795606402011-06-25T21:14:00.000-07:002011-07-10T06:21:06.622-07:00Product Managers Job Role @ Symbyo<span class="Apple-style-span"></span><br />
<div><span class="Apple-style-span"><span class="Apple-style-span"><span class="Apple-style-span" style="line-height: 17px;"><br />
</span></span></span></div><div><span class="Apple-style-span"><span class="Apple-style-span"><span class="Apple-style-span" style="line-height: 17px;">In this blog article we will highlight the role Product Managers play in Symbyo Technologies.</span></span></span></div><div style="font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17px;"><span class="Apple-style-span"><br />
</span></div>Product Managers at Symbyo acts as a managed conduit between the business world and a project team. In the beginning of a project life cycle, they drive gathering requirements, expectations, and constraints and distill them into a solution definition. As a project progresses, Product Managers works with the team to clarify what has been gathered and works with stakeholders to refine expectations. As a solution starts to take form, they reverse the conduit flow to start to prepare stakeholders for the coming solution.<div><span class="Apple-style-span" style="color: #003366; font-family: Arial,Helvetica,FreeSans,sans-serif; font-size: 20px; font-weight: bold;"><br />
</span></div><div><span class="Apple-style-span" style="font-family: Arial,Helvetica,FreeSans,sans-serif; font-size: 13px; line-height: 17px;"></span><span class="Apple-style-span" style="color: #003366; font-family: Arial,Helvetica,FreeSans,sans-serif; font-size: 20px; font-weight: bold;">Quality Goals</span></div><div>The quality goals for Product Managers are the following:</div><div><ul><li>Satisfy stakeholders</li>
<li>Define solution within project constraints</li>
</ul></div><div><div class="wiki-content"><hr style="color: #cccccc; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; height: 1px; line-height: 13pt;" /><h3 style="color: #003366; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 15pt; font-weight: bold; line-height: normal; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 28px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><a href="" name="ProductManagementAdvocacyGroup-Focus"></a>Focus</h3><div style="color: black; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; font-weight: normal; line-height: 13pt; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"></div>Product Managers ensures that all stakeholder expectations are understood, managed, and met throughout a project. In addition, Product Managers ensures that a project sponsor is satisfied with the progress and outcome of a project. To be effective, Product Managers needs to understand, communicate, and ensure success from a stakeholder perspective. To do this, they need to gain knowledge about customers' business, success factors, and key performance measures. They own and drive the definition of requirements and feature sets as well as help the team understand user profiles and how users will use a solution. As you can tell, it is a very communications-oriented group.</div><div class="wiki-content"><br />
</div><div class="wiki-content">As discussed previously about partnering with a customer, Product Managers leads this effort. They collaborate with customers to drive a solution vision and adjust both the vision and expectations as a project continues. It cannot be stressed enough how critical it is to manage customer expectations. Stuff happens, no plan is able to cover all project impacts, and as such, sharing that information in a no-fault environment is very important and healthy.</div><div class="wiki-content"><br />
</div><div class="wiki-content">The importance of effectively managing expectations can be illustrated with an example involving the anticipated delivery of five solution features from a team to a customer by a certain date. If a team delivers only three features when a customer expects delivery of all five, a project will be deemed a failure both by the customer and by the team.</div><div class="wiki-content"><br />
</div><div class="wiki-content">If, however, Product Management maintains constant two-way communication with the customer during a feature development and production period, changes are made with regard to customer expectations that ensure success. Product Management might include customers in the trade-off decision-making process and inform them of changing risks and other challenges. Unlike the previous scenario, customers can assess the situation and agree with the team that delivery of all five features within the specified period is unrealistic and that delivery of only three is acceptable. In this scenario, the delivery of three features now matches the customer's adjusted expectations, and both parties will consider the project a success.<br />
<div style="color: black; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; font-weight: normal; line-height: 13pt; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"></div><hr style="color: #cccccc; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; height: 1px; line-height: 13pt;" /><h3 style="color: #003366; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 15pt; font-weight: bold; line-height: normal; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 28px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><a href="" name="ProductManagementAdvocacyGroup-FunctionalAreas"></a>Functional Areas</h3><div style="color: black; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; font-weight: normal; line-height: 13pt; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"></div>The Product Managers are responsible for several functional areas, including Marketing/Corporate Communications, Business Analyst, and Product Planning.<br />
<hr style="color: #cccccc; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; height: 1px; line-height: 13pt;" /><h3 style="color: #003366; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 15pt; font-weight: bold; line-height: normal; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 28px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><a href="" name="ProductManagementAdvocacyGroup-Marketing/CorporateCommunications"></a>Marketing/Corporate Communications</h3><div style="color: black; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; font-weight: normal; line-height: 13pt; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"></div>This functional area is the process or technique of promoting, selling, and distributing a product, solution, or service. Nearly every solution needs to be introduced and promoted, even if it is a solution being rolled out internally to employees. When solution promotion is internal-facing, it is refered to as Corporate Communications.<br />
<div style="color: black; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; font-weight: normal; line-height: 13pt; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"></div>Whether it is called a marketing plan or a corporate communications plan, this plan needs to outline how to excite the target audience. After all, not everyone will welcome change; even if it is a new and improved solution. Typical promotional efforts on a project involve launch promotions, sustained promotions, and public relations. Promotional efforts run the gamut from sending out fliers and e-mail to full advertising campaigns.<br />
<h5 style="color: #003366; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 11pt; font-weight: bold; line-height: normal; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 22px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><a href="" name="ProductManagementAdvocacyGroup-KeyResponsibilities"></a>Key Responsibilities</h5><div style="color: black; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; font-weight: normal; line-height: 13pt; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"></div></div>This functional area and the others to follow have key responsibilities. Key responsibilities for this functional area include the following:<br />
<div class="wiki-content"><ul style="font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; line-height: 13pt; list-style-type: disc;"><li><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Marketing and public relations messages to excite and positively affect the target customer and users</span></li>
<li><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Understanding the competitive landscape</span></li>
<li><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Distribution channels so target customers easily acquire a solution</span></li>
<li><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">For packaged solutions, enabling customers to have a positive experience buying and using a solution</span></li>
</ul><h5 style="color: #003366; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 11pt; font-weight: bold; line-height: normal; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 22px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><a href="" name="ProductManagementAdvocacyGroup-KeyActivities"></a>Key Activities</h5><div style="color: black; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; font-weight: normal; line-height: 13pt; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"></div>Each functional area has a set of key activities to help uphold its responsibilities. Some activities are done throughout a project; some are done each iteration. Key activities for this functional area include the following:</div><div class="wiki-content"><br />
</div><div class="wiki-content"><ul style="font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; line-height: 13pt; list-style-type: disc;"><li><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Develop a plan to promote a solution</span></li>
<li><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Be able to highly differentiate a solution so it stands out from the competition</span></li>
<li><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Set up and prepare distribution channels</span></li>
</ul><hr style="color: #cccccc; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; height: 1px; line-height: 13pt;" /><h3 style="color: #003366; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 15pt; font-weight: bold; line-height: normal; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 28px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><a href="" name="ProductManagementAdvocacyGroup-BusinessAnalyst"></a>Business Analyst</h3><div style="color: black; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; font-weight: normal; line-height: 13pt; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"></div>A Business Analyst functional area works in conjunction with a sponsor(s) to gather, manage, and refine throughout the life cycle all the market information, all functional and operational requirements, all stakeholder expectations, and anything else that could affect the definition and delivery of a solution.</div><div class="wiki-content"><br />
</div><div class="wiki-content">To start, a Business Analyst team forms an initial vision and conceptual understanding of a solution, given insight of business needs and opportunities as well as the competitive landscape. As a solution vision, solution road map, and constraints are worked into high-level requirements, business analysts work with product planners (discussed next) to segment a solution into projects to deliver capability incrementally.<br />
<h5 style="color: #003366; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 11pt; font-weight: bold; line-height: normal; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 22px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><a href="" name="ProductManagementAdvocacyGroup-KeyResponsibilities"></a>Key Responsibilities</h5><ul style="font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; line-height: 13pt; list-style-type: disc;"><li><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Solution landscape</span></li>
<li><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Stakeholder expectations</span></li>
<li><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Quantifying a solution's return on investment (ROI)</span></li>
<li><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Sponsor relationship</span></li>
</ul><h5 style="color: #003366; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 11pt; font-weight: bold; line-height: normal; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 22px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><a href="" name="ProductManagementAdvocacyGroup-KeyActivities"></a>Key Activities</h5><ul style="font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; line-height: 13pt; list-style-type: disc;"><li><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Perform objective cost/benefit analyses to help communicate to the team a defined stack ranking of requirements and feature priority</span></li>
<li><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Assist sponsor's development of a business case</span></li>
<li><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Define and maintain business justification for a projectDefine and measure business value realization and metrics</span></li>
<li><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Manage customer expectations and communications</span></li>
<li><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Determine business metrics and success criteriaProvide requirements and feature trade-off decisions</span></li>
</ul><hr style="color: #cccccc; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; height: 1px; line-height: 13pt;" /><h3 style="color: #003366; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 15pt; font-weight: bold; line-height: normal; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 28px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><a href="" name="ProductManagementAdvocacyGroup-ProductPlanning"></a>Product Planning</h3><div style="color: black; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; font-weight: normal; line-height: 13pt; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"></div>As opposed to a Business Analyst functional area that is more externally focused, a Product Planning functional area works with the team on a tactical level, as depicted in the following figure. Product planners take a vision and conceptual solution and drive a delivery strategy.<br />
<div style="color: black; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; font-weight: normal; line-height: 13pt; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><br />
<span class="image-wrap" style="display: block; text-align: center;"><img src="http://symbyo.jira.com/wiki/download/attachments/1933434/Product_Managment_Functional_Areas.png?version=1&modificationDate=1249385405582" style="border-bottom-color: black; border-bottom-style: solid; border-bottom-width: 0px; border-left-color: black; border-left-style: solid; border-left-width: 0px; border-right-color: black; border-right-style: solid; border-right-width: 0px; border-top-color: black; border-top-style: solid; border-top-width: 0px;" /></span><br />
</div>As discussed, Symbyo software development methodology recommends that solutions be incrementally delivered through versioned releases. A release is a bundling of solution features and capabilities so that it can be shared either internally among the team or externally with stakeholders. A Product Planning functional area coordinates and manages versioned solution releases. A release can encompass one or more teams' efforts. For instance, a release might be made up of new features from some teams and updates from others with previously released features. This functional area coordinates with Product Management from each of the subteams to present an integrated solution version for release.<br />
<div style="color: black; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; font-weight: normal; line-height: 13pt; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"></div>Product planning entails understanding the requirements of a solution completely, including what the needs of the business are, how customers will use it, what support issues will be, and what alternatives are available. It also entails working with the team to agree upon prioritization of requirements, capabilities, and feature sets; issues; risks; and so forth.<br />
<h5 style="color: #003366; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 11pt; font-weight: bold; line-height: normal; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 22px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><a href="" name="ProductManagementAdvocacyGroup-KeyResponsibilities"></a>Key Responsibilities</h5><ul style="font-family: Arial, Helvetica, FreeSans, sans-serif; line-height: 13pt; list-style-type: disc;"><li style="font-size: 10pt; line-height: 13pt;"><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Shared project and solution vision</span></li>
<li style="font-size: 10pt; line-height: 13pt;"><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Working with the respective teams to deliver a solution version consistent with a solution road map</span></li>
<li style="font-size: 10pt; line-height: 13pt;"><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Being the authority on requirements and expectations associated with each release</span></li>
<li style="font-size: 10pt; line-height: 13pt;"><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Solution definition and solution definition process</span></li>
</ul><span class="Apple-style-span" style="color: #003366; font-family: Arial,Helvetica,FreeSans,sans-serif; font-size: 15px; font-weight: bold; line-height: 17px;">Key Activities</span><br />
<ul style="font-family: Arial, Helvetica, FreeSans, sans-serif; line-height: 13pt; list-style-type: disc;"><li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Stack-rank requirements and features for a solution and for each release</span></li>
<li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Balance and trade off requirements with project(s) constraints</span></li>
<li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Perform market research, market demand, competitive intelligence/analysis</span></li>
<li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Gather, analyze, and prioritize customer and business requirements</span></li>
<li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Perform release-level requirements and feature trade-off decisions</span></li>
<li style="font-size: 10pt; line-height: 13pt; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span class="Apple-style-span" style="font-family: Georgia,serif; font-size: 16px; line-height: normal;">Identify a multiversion release plan</span></li>
</ul><div style="font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; line-height: 13pt;"><br />
</div><div style="font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 10pt; line-height: 13pt;"></div><br />
Symbyo Is continuously looking for talented product managers to join our team, if you feel you have the qualification, experience and passion to excel in a product manager role in Symbyo Technologies, Then apply online through our careers section. <span class="Apple-style-span" style="line-height: 17px;"><a href="http://www.blogger.com/symbyo.com/careers/">www.symbyo.com/careers/</a></span></div><div class="pageSection" id="labels-section" style="clear: both; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17px; margin-bottom: 5px; margin-top: 40px;"><div class="labels-editor"><div class="content-column" id="labels-section-content" style="padding-left: 55px;"></div></div></div></div><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Symbyo Technologies, Software Outsourcinghttp://www.blogger.com/profile/16631045922375854226noreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-17768055108237213172011-06-01T21:44:00.000-07:002011-07-10T06:21:35.899-07:00Applying Agile Techniques to Software Architecture<div dir="ltr" style="text-align: left;" trbidi="on"><b>Introduction</b> <br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-CizqGhG83Rs/Tf319GsthWI/AAAAAAAAABo/wP5inXDSlVU/s1600/agile+process.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="180" src="http://4.bp.blogspot.com/-CizqGhG83Rs/Tf319GsthWI/AAAAAAAAABo/wP5inXDSlVU/s200/agile+process.jpg" width="200" /></a></div>The agile methodologies are getting widely accepted all over the world. However, there is still a lot of discussion and debate on how to apply those methodologies to the architectural space. Most conflicting issues arise between the ‘big design upfront – an approach that is strongly discouraged by the agile approach practitioners and the traditional approach to architectural design. In this post you will read on how you can achieve technical excellence, streamlined development practices, and a constant and ever-increasing flow of business by integrating the agile approach in to your software architecture. This can be achieved with a set of team dynamics, conceptual practices, and specific technologies that are proposed herein.<br />
<br />
<b>Architectural dynamic utilized in Agile teams</b> <br />
One of the 12 principles of the Agile Manifesto states that “the best architectures, requirements, and designs<i> emerge from self-organizing teams.”</i> This is something that is considered as a foundation here, especially with regard to the shared specialization. <br />
The architecture is an activity that is historically performed with emphasis on the early stages of a project. The agile development on the other hand, lays its focus on emergent design and iterative production. Thereby, it creates a series of interesting challenges down the road. <br />
The basic characteristic of the agile approach is that it believes in shared responsibility. Unlike the traditional approach wherein a software architect was considered wholly responsible for creating the software architecture and higher-level design, in case of the agile approach this responsibility of the software architect is diluted. In this approach, the software architecture is developed by the whole team. Hence, it helps in preserving its multi disciplinary nature. Now, that doesn’t mean the role of software architect is no longer considered important. It goes without saying that the software architect will still remain the person who will conceptualize the idea of the software architecture however, he will explain the design to the team members and they all will contribute in its development. The benefit here is that the entire team participates in understanding the implications of the design and continuously evaluates them. <br />
It is a fact that key considerations such as the modularity strategy, how communication is handled within and outside the application, and how data and services are accessed and abstracted are better analyzed when a team sits and discusses about them rather than an individual handling them all simultaneously. In this way, the team members contribute their suggestions, their fears and concerns. Hence, the probability of failure is reduced to a great extent. <br />
These challenges are usually tackled by holding regular meeting of the team members for architectural discussion and revision. These review and design meetings comprise a lot of white boarding and open talk. Also, it helps to have the most important guidelines permanently exposed in the meeting area. These could include diagrams, checklists or reference charts around the walls, and semi-permanent flip charts that can be used as posters.<br />
<br />
<b>Patterns and practices followed in Agile architecture</b> <br />
The big design approach leaves us with several inconveniences. To avoid this one of the most common approach suggested it “sashimi” approach. Here separate design for each part is not developed instead, small codes are developed with the intent to connect all the pieces and then the main functionality is constructed. This will give you the same end to end set up that you wanted. The objective is to do away with complexities of big building architectural components. Since there are repetitions of some of the processes become unnecessarily big and unmanageable. <br />
However one challenge that is faced with to replace this support system with architectural pieces is to define a decoupled API. At the outset developing the API becomes the most critical thing to do. For similar reasons it is advised to star with absolutely no implementation. Even if you use a third party component it is advised that you follow a similar practice. <br />
<b>Architectural Pattern</b> <br />
Concentric approach has also emerged as a most common approach for agile development of software for architecture. The first step is to analyze and develop technical vision of the desired solution. This technical vision enables you not only to compare your own progress but also to guide you as to what your subsequent action should be. Thus it is important to establish a logical continuity in your entire planning. The second step would be to decompose the entire step into as many small manageable steps as possible. This not only makes the job easier in terms of division of responsibility but also to check progress and to check whether the person to whom the responsibility was given has lived up to it or not. This also helps in adding up new functionality if needed. This helps us do away with the requirement of having to redo the entire program all over again. <br />
The next step is to describe each such decomposition in terms of architectural styles. This helps us make this decomposition more understandable to people who are not directly linked with the project. The trickiest part is to define the layers. The layers have to be so defined that they represent the decomposed components of the project. If they are clearly defined then it becomes easier for the person to whom the responsibility is entrusted to understand and execute the work better. This also makes it easier to distribute the work among teams so that development of each part can be closely monitored and handled. This also helps understand which a particular component is lagging. <br />
The next level is the packaging of the software to turn them into independent saleable software packages. This helps to turn them into independently recognizable software packages. <br />
The next step is to finally develop the program languages and introduce the same to the stake holders. <o:p></o:p><br />
However one should keep in their mind that all these different steps in the architecture can be undertaken in an independent basis as well. The latter would be in congruence with the needs and goals of the project!<o:p></o:p><br />
<b>Quality Attributes required in architecture<o:p></o:p></b><br />
It is a common aspect in the world of architecture of what are the aspects which one should consider in a system design. There are several qualities and attributes which are essential. In perspective of agility one should keep in mind the attributes which must be managed in view of the backlog of the product. The implementation should be done on an incremental basis. In specific terms it means the management of a mix of needs, both the quality attribute requirements as well as features. Interestingly, the several qualities attribute lead to a trade off decisions and analysis where the usual prioritization might not prove to be enough!<o:p></o:p><br />
<div class="MsoNormal" style="margin-bottom: 9.0pt;">The authors suggest that in order to manage quality attribute in an effective manner, one need to consider the latter as a goal whereas the requirements as a support system and user stories to the goal. It is important for the stories to have some normal acceptance criterion which re defined clearly. This is vital such that the tests that are implements can be neatly written out. For instance, some of the requirements are performance which need the resource usage and response time. </div><div class="MsoNormal" style="margin-bottom: 9.0pt;"><b>Validation of the architecture<o:p></o:p></b></div><div class="MsoNormal" style="margin-bottom: 9.0pt;">The validation and testing of the architecture are the last stage of this section. From the authors point of view there are automated quality-attribute requirements testing, test-driven development, environment-configuration management, automated integration testing, and application-configuration management and automated deployment. <o:p></o:p></div><div class="MsoNormal" style="margin-bottom: 9.0pt;">The authors are of the belief that interfaces should be defined as in the first section. Unit tests which can be executed should be used in the definitions. These specifications will have a dual role. Firstly they will safeguard for multi component and local refactoring and secondly they will be the point of entry for identifying defects in the reporting of the incident. The basic idea is that the implementation needs to be correct or changed in sync with the defect! However one should bear in mind that there are several changes in the architecture that will not be noticeable in unit tests!<o:p></o:p></div><div class="MsoNormal" style="margin-bottom: 9.0pt;">In order to have a good management of the changes which should exceed the contracts of unit tests, one needs automated tests. The latter is a must for quality attributes and integration. While automated tests are difficult to create, their results are superior. These tests need to be such that they have a lower frequency which is a result of their resource usage. </div><div class="MsoNormal" style="margin-bottom: 9.0pt;">Some of the examples include the following:</div><div class="MsoNormal" style="margin-left: .25in; mso-list: l0 level1 lfo1; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list .5in; text-indent: -.25in;"><span style="font-family: Symbol; font-size: 10pt;">·<span style="font: 7pt 'Times New Roman';"> </span></span><span dir="LTR"></span>Scalability: There is an acceptable amount of response time in the event of increase in system load. There is a planned capacity along with tool support which is a must for these tests. In this case both the server and client site needs to be kept in mind. The deployment also needs to be automated in the testing environment. </div><div class="MsoNormal" style="margin-left: .25in; mso-list: l0 level1 lfo1; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list .5in; text-indent: -.25in;"><span style="font-family: Symbol; font-size: 10pt;">·<span style="font: 7pt 'Times New Roman';"> </span></span><span dir="LTR"></span>Flexibility: The layers pattern needs to be instantiated. The tests need to be configured such that the acceptance needs to layer by layer, starting from the top layer only!</div><div class="MsoNormal" style="margin-left: .25in; mso-list: l0 level1 lfo1; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list .5in; text-indent: -.25in;"><span style="font-family: Symbol; font-size: 10pt;">·<span style="font: 7pt 'Times New Roman';"> </span></span><span dir="LTR"></span><o:p> </o:p></div><div class="MsoNormal" style="mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;">For the above to come true, one need to manage the configuration in two levels, one which is dependent on the environment and one is not. The automated deployment will be enabled in case of environment dependent configuration and focuses on the local and physical resource configuration! For the remaining configuration, there will be an issue that is the variability of the available functionality! <o:p></o:p></div><div class="MsoNormal" style="margin-bottom: 9.0pt;"><b style="mso-bidi-font-weight: normal;">Technologies and techniques<o:p></o:p></b></div><div class="MsoNormal" style="margin-bottom: 9.0pt;"><o:p> </o:p></div><div class="MsoNormal" style="margin-bottom: 9.0pt;">It is vital to use the appropriate techniques and technologies in order to achieve the needed discipline through automation. </div><div class="MsoNormal" style="margin-bottom: 9.0pt;">The agile world is one which has given more importance to human and their interactions rather than to tools and processes. in lieu of the above a helpful set of tools have been devised which make tedious and manual jobs away from individuals and make the execution frequent and fast. The latter is simple use to the constant feedback which is provided making it easier for human beings to act. </div><div class="MsoNormal" style="margin-bottom: 9.0pt;">In order to attain the first level of technology, it usually includes frameworks and regular testing tools. Some of the unit testing tools includes <i>x</i>Unit to Cucumber apart from others. There are others like Selenium which is functional testing tools apart from several others which have a host of technologies needed for stress and performance testing. All of these run successfully on a built server as well individually at varying frequencies.</div><div class="MsoNormal" style="margin-bottom: 9.0pt;">In a nutshell, while the basic development proactive is undertaken, it is supplemented with a specific unit test, stress level and acceptance to validate the architecture. There are style analysis, afferent and efferent coupling, cyclomatic complexity, code coverage statistics, lined of code per module and other such checks which were introduced in the second level. These tools are used in NDepend, StyleCop, FXCop, CheckStyle, JDepend, and Lattix among others. In the area of dynamic languages like Python, JavaScript and Ruby, there in an inherent problem in the implementation. However this should be filled up soon! </div><div class="MsoNormal" style="margin-bottom: 9.0pt;">The third step is about metrics involving maintainability and flexibility regarding the project life cycle. In this arena, Visual Studio Team System has made immense progress. </div><div class="MsoNormal" style="margin-bottom: 9.0pt;">It has been seen that a model needs to be in place for validation of a model of architecture. The important factor is for the automation of the process for the extraction of the required <st1:place st="on">Meta</st1:place> data which is needed to validate the references, module composition and code. In addition, the distinguishing aspect of the module or code view of the system, starting from the runtime view in the evaluation period is vital! Lastly, learning about the performance of levels of reverse engineering is also done. The final step in the process involves the configuration and deployment in the varying staging </div><div class="MsoNormal" style="margin-bottom: 9.0pt;">It is essential to have the project relevant and appropriate techniques in each fold and step of the main plan. The latter ensures that the controls are planted in the proper places with commencement of the project. </div><div class="MsoNormal" style="margin-bottom: 9.0pt;"><o:p> </o:p></div><div class="MsoNormal" style="margin-bottom: 9.0pt;"><b style="mso-bidi-font-weight: normal;">Conclusion<o:p></o:p></b></div><div class="MsoNormal" style="margin-bottom: 9.0pt;">Symbyo Technologies strongly belief that the consideration of the architecture is the most fundamental aspect which creates value to the <a href="http://www.symbyo.com/">software projects</a>. Additionally, the agile teams have immense techniques, tools and mechanics which are on offering for the software architecture society. Interestingly, these contributions have been considered one of the best in its area. It provides immense benefits to the users and enhances one’s results and project value! </div><div class="MsoNormal" style="margin-bottom: 9.0pt;"><br />
</div></div><br />
<a href="http://www.technorati.com/tags/Agile" rel="tag">Agile</a>,<a href="http://www.technorati.com/tags/Agile+Technologies" rel="tag">AgileTechnologies</a>, <a href="http://www.technorati.com/tags/Software" rel="tag">Software </a>,<a href="http://www.technorati.com/tags/Software+Architecture" rel="tag">Software Architecture</a><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Symbyo Technologies, Software Outsourcinghttp://www.blogger.com/profile/16631045922375854226noreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-32349661196790982702011-05-30T21:54:00.000-07:002011-07-10T06:21:58.760-07:00Technical Debt<div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><a href="http://4.bp.blogspot.com/-EokKsOxf1EA/Tf33DRUPQKI/AAAAAAAAABs/uqU9-JxSV50/s1600/Tech-Debt.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="153" src="http://4.bp.blogspot.com/-EokKsOxf1EA/Tf33DRUPQKI/AAAAAAAAABs/uqU9-JxSV50/s200/Tech-Debt.png" width="200" /></a><b>Technical Debt – What it means?<br />
</b><br />
According to Ward Cunningham, technical debt is a culmination of all those internal things in your software that you choose not to do but that can become a major problem in future if left undone. These little issues that are often postponed are not visibly prominent issues.<br />
<br />
The software program or the application might seem all perfect with high quality but in true sense, the application is all good superficially. These problems are hidden and only a proper scrutiny of the software system will help recognize them. While the Quality Assurance team (QA) might say that the application has quality and a few defects, the technical debt still prevails. If this technical debt is not managed or reduced at the right time, chances are that it will eventually increase the cost of writing/ maintaining the code. This will outweigh its benefit or value to the end consumer.<br />
<br />
Technical debt is more or less like a credit card that keeps on adding to the outstanding balance at a very high rate of interest. In case of technical debt however, the costs don’t indicate money but the time and efforts needed to work around the problems. In simpler terms, the more time the team takes to pay off the technical debt i.e. work around to solve the little underlying problems, the more the interest is accumulated in the form of additional workarounds. This will ultimately cause the business to suffer with higher costs.<br />
<br />
Truly speaking, the technical debt might not really involve money but it actually can cause financial losses. That’s because the time and effort the developers spend on cracking the code to solve the problem can be spent more productively to add value to the business. The codes are often quite complicated making it again very difficult to find the bugs. This time-consuming process leaves the developers with less time to work on something more valuable hence causing the business and the organization on a whole to suffer financially.<br />
<br />
<b>Why does Technical Debt get accumulated?<br />
</b><br />
In the initial phase, writing a code is quicker because the developers write codes without tidying up, without writing unit tests and without doing any Test Driven Development. Hence, the team churns out more number of stories in relatively less time. Writing software requires them to give a decent amount of time for it`s development. A software development process requires working on different levels. It involves addressing the problem as they show up in a case to case basis. However, the underlying problems don’t show up quickly. Doing the right thing, the right way takes more time, especially in the beginning.<br />
<br />
<b>Where does the Technical Debt come from?<br />
</b><br />
• <b>Inexperienced developers: </b>Software developer has to constantly upgrade his or her skill set depending on the market trends. This seldom happens. As a matter of fact, many developers write codes for languages like JAVA or C# or Ruby without having the basic knowledge of what a good Object Oriented Code is. As a result, they end up writing codes that are inappropriate or are typically meant for languages they are familiar with like Visual Basic, etc. The onus for this lies on the company too. Many a time’s companies in order to maximize their profits use code developers who are inexperienced i.e. cheap. This practise in turn effects the code and at the end the reputation of the company and hence must be avoided as much as possible.<br />
<div><br />
• <b>Deadline pressure:</b> The pressure of delivering the product within a stipulated time is often a reason for several little underlying problems go unnoticed. Due to their commitment to release the program or application of iteration on a specified date, the developers overlook minor errors and expedite things. These minor errors can in future become major ones causing the application to become unresponsive. Unfortunately, the management also supports the developers without realising that it could end up in high managerial costs.<br />
<div><br />
• <b>Untidy, hard-to-read code:</b> When the code that is initially written is not a tidy one, the next developer who works on it will also not feel compelled to tidy it up or write a clean code himself. This results in a small mess becoming bigger every time a new developer works on it.<br />
• <b>Specialisation:</b> When a code is a specialized one, the developers often back out even if the find that code is a bad one. One, they don’t feel qualified to work on that code and secondly, they don not want to take any extra effort of tidying up a specialized code.<br />
<div><br />
• <b>Over complication:</b> Software developers often tend to over complicate things in order to stay safe from any future problem. They try to visualize the problems that may arise and try to develop codes for such potential problems. In this way, they end up writing codes that go in an entirely different direction without giving them any benefit. Many a times, the code doesn’t really fit the need as it is for a problem that doesn’t even exist. Over design and over complication often takes extra time and effort without any use.<br />
<div><br />
• <b>Over simplification: </b>Contrary to poplar belief over simplification can be also a major cause for a software`s downfall. Software developers sometimes in order to avoid writing excess code language for a program sometimes make the program over simplified which can turn out be just as bad as the point given before this ‘over complication. Sometimes due to this over simplification the software fails to perform when set a little different set of parameters. Software must be flexible enough to be able to cope with at least a decent change of the kind of data. So it highly important that a kind of balance is maintained between the two above points which is actually essential for the success of any software.</div><div><br />
• <b>Bad design:</b> Some codes are simply designed poorly. Building on a poorly designed code or working on the code without tidying it up makes the problem even worse.<br />
<br />
<b>Finding a solution to the problem<br />
</b><br />
There is no one certain way to solve the problem. As a matter of fact, the solution will take several iterations. It is important to show a level of patience and adopt a multi-pronged approach to reach the solution. Some of the methods have been discussed in brief below.<br />
<br />
<b>Planks in the solution:<br />
</b><br />
1. The basic step to solve the problem is to first train the developers in the language that is to be used. Only a proper understanding of the language will help the software developers to write a code that is less prone to have any inherent problems. Also, in order to be successful, it is essential that the trained developers are tested and supported by the pros in that area so that the training results to be effective.<br />
2. The developers and the managers have to be informed about the current problems. Also, the impact of these problems on the business costs has to be ascertained in order to know the significance of the problems. This will clearly indicate the level of problem and the value of solving the problem. The management should also make it clear that it acknowledges the problem and is prepared to start paying off the technical debt that has inevitably arisen.<br />
3. The training sessions on the code smells, Refactoring, Unit Test, Test driven Development have to concisely deal with the inherent problems and aim at reaching a solution. A combination of classroom sessions, web based books and material will enhance the training.<br />
4. The software developers should be given some time (at least 2 hours a week) from their office hours to practice their skills. This practice should be on throw-away codes so that the developers can experiment and come up with new ideas of solving a problem. Time to practice and study is perhaps the best way to diagnose a problem and make the developers confident for solving it in real-time.<br />
5. Using tools such as static analysis, Unit test, continuous integration, and automated acceptance tests helps the teams find, reduce and measure their technical debt load. However, measuring this should not imply that the team will be punished or rewarded for the results. If that happens, even these figures can be manipulated and the end result will only be destructive for the Company.<br />
6. Developers who had undergone and successfully completed their training and also show a visibly higher level of proficiency in their skills should be rewarded. They could be given some token gifts instead of money as such things will give them some recognition and motivate others to develop.<br />
7. Bi-weekly meetings should be conducted over lunch to help the developers meet and discuss the various technical issues that they face. The lunch often helps in getting more attendance and the more the developers, the more technical issues will be solved. Also, people form the senior management should also randomly attend these meets to indicate the support of the management to the software developers.<br />
8. Lastly, a technical debt backlog should be maintained that has records of any technical debt that arises. Whenever a technical issue is reported that can’t be addressed immediately, the developer should be asked to write a Technical Debt card. This will help the Company track the Technical Debt and prioritize its work accordingly.<br />
<br />
<br />
As is clear from the above, every business has a situation that consists of a problem and an opportunity. The success of the organization hence, lies on how it deals with the problem and how it cashes in on the opportunity.<br />
<br />
<b>The Problem: </b>The crux lies in the technicalities of the codes that are developed by the software developers. The code bases of the projects are accumulating technical debt. This has made the entire system to slow down. This basic problem is costing the business financial losses as the valuable time and efforts of the developers is wasted in trying to fix the bugs that arise due to the technical debt.<br />
<br />
<b>The Opportunity:</b> With the technical debt becoming prominent, the company has a reason to improve the technical skills of its developers which will in turn help the company to develop new products and deals with the technical issues in-house.</div></div></div></div></div><a href="http://www.technorati.com/tags/Technical+Debt" rel="tag">Technical Debt </a>, <a href="http://www.technorati.com/tags/Software" rel="tag">Software</a>, <a href="http://www.technorati.com/tags/Inexperienced+developers" rel="tag">Inexperienced developers</a>, <a href="http://www.technorati.com/tags/Software+developers" rel="tag">Software developers</a>, <a href="http://www.technorati.com/tags/C#" rel="tag">C#</a></div><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Symbyo Technologies, Software Outsourcinghttp://www.blogger.com/profile/16631045922375854226noreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-67296711318848658872011-05-29T23:13:00.000-07:002011-07-10T06:22:14.494-07:00Is NFC the Future of Mobile Payment ?<div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><div style="text-align: left;">Last week, Google unveiled Google Wallet in a joint venture with Mastercard. The initiative will allow customers to pay for goods by waving their mobile phones at check-out terminals.</div><div><div><br />
</div><div>In the past few thousand years, the way we pay has changed just three times—from coins, to paper money, to plastic cards. Now many believe we are on the brink of the next big shit. Mobile Payment based on NFC Technology. But can NFC really become the future of mobile payment ?<br />
</div><img alt="" border="0" id="BLOGGER_PHOTO_ID_5612395747619772642" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq0SN_GyXm8d3IVIPzdHwfFP_guZ2PJDTRa4z2oYlPClSIubfTxPrHqVotKO6E1MX4bxmwJxpIYp-3tatL7qvcP41LJtifJ6LC8DCaxZQNq0QA4DDshHzC6bxnlwTB-gb-xJLJRkp4ifQ/s200/2.0_vision.png" style="cursor: hand; cursor: pointer; float: right; height: 125px; margin: 0 0 10px 10px; width: 200px;" /><br />
<div style="text-align: center;"><br />
</div><div>In order to be the De Facto standard of mobile payment, NFC would certainly have to overcome a few obstacles as well as stand up to challenges from other technologies in the field of mobile-payments. A major obstacle for NFC phones is that in order to function as a payment tool the merchants would need to upgrade their POS readers.</div><div><br />
</div><div>In New York and San Francisco some of the merchants like Macy’s, Subway and American Eagle Outfitters have done the necessary upgrades thus allowing their customers with Nexus S phone to make payments through phones in these cities. However NFC still faces a big challenge of convincing the phone manufacturers to put NFC chips in their phones. The manufacturers on their part would be skeptical about using NFC chips until more merchants upgrade their POS terminals to handle NFC payments. On the other hand even the retailers might not be open to the idea of spending more money on upgrades until more number of consumers begins to use NFC enabled phones.</div><div><br />
</div><div>There are one or more biometric technologies which might offer some kind of challenge to NFC. Few of leading companies in that field like Square are planning to offer a new system which enables customers to pay simply by stating their names. In order to avail this service you need to register with the merchant wherein you will have to provide your credit card details. However, when you enter a shop, all you need to do is to state your name in order to pay for your purchases. This concept can be extended in future, where you can make payments through MasterCard or Visa by registering your voice with them. With advanced voice recognition technologies available these days, it wouldn’t be completely farfetched to think that sometime in future it might be possible to make payments by simply stating your name, address and the purchase amount into the microphone at the sales counter which would verify your identity against your registered voiceprint. It could be extended, for added security, with a camera transmitting your image along with your voice for facial recognition.</div><div><br />
</div><div>Though NFC is surely gaining popularity as a payment device, it’s the users who will give the ultimate verdict on which technology will win in the long run. It will depend on what the customers find more user-friendly and convenient. With many other several tasks that the mobile phones already perform, Mobile use as payment device might just become another one of them.</div></div></div><a href="http://www.technorati.com/tags/NFC" rel="tag">NFC</a>,<a href="http://www.technorati.com/tags/Mobile+Payment" rel="tag">Mobile Payment</a>,<a href="http://www.technorati.com/tags/Google+Wallet" rel="tag">Google Wallet</a>,<a href="http://www.technorati.com/tags/NFC+phones" rel="tag">NFC phones</a>,<a href="http://www.technorati.com/tags/biometric+technologies" rel="tag">biometric technologies</a>,<a href="http://www.technorati.com/tags/Mobile+Payment" rel="tag">Mobile Payment</a></div><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Symbyo Technologies, Software Outsourcinghttp://www.blogger.com/profile/16631045922375854226noreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-79559326081736189922011-02-24T02:22:00.000-08:002011-07-10T06:23:39.455-07:00Using Styles, Themes, and Painters with LWUIT<div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpK8Nosh-V66OpTI9IsKrxH7FVhsc4UjB_-lExh3J-jTUiW7IkKhb1Pd8d8bKFGMz-ZQAd5qw6Tea1nnxSj64lvmFZesQlRLQJbSGZEs2UbEpk81HjqpgPRpmgE-7le0GwFYweif2ZCtVB/s1600/13.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"></a><br />
<div class="MsoNormal" style="margin-left: 0.5in; text-align: center;"><b><span style="font-family: Calibri,sans-serif;"><br />
<img alt="" border="0" id="BLOGGER_PHOTO_ID_5561616109541649394" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_a2YhEfXgeVA_RFrHimUK6wZeE2FQR1fVTGGIGXf-fAbJHcICnkQkrt-smHf3ScsqnNGZgT2AwWX1nvdew69NvaAnJnBkdrUJ_kMvCrBi8WCNyEjj0GCohZOd4jq7lMbQECkmwj8sRun2/s320/1.png" style="cursor: pointer; float: left; height: 93px; margin: 0pt 10px 10px 0pt; width: 113px;" /></span></b></div><div class="MsoNormal" style="margin-left: 0.5in;"><b><span style="font-family: Calibri,sans-serif;"><br />
</span></b></div><div class="MsoNormal" style="margin-left: 0.5in;"><b><span style="font-family: Calibri,sans-serif;"><br />
</span></b></div><div class="MsoNormal" style="margin-left: 0.5in;"><b><span style="font-family: Calibri,sans-serif;"><br />
</span></b></div><div class="MsoNormal" style="margin-left: 0.5in;"><b><span style="font-family: Calibri,sans-serif;"><br />
</span></b></div><div class="MsoNormal" style="margin-left: 0.5in;"><b><span style="font-family: Calibri,sans-serif;">Contents</span></b> </div><ul type="disc"><li class="MsoNormal" style="line-height: normal;">Style</li>
<li class="MsoNormal" style="line-height: normal;">A Style for Each State</li>
<li class="MsoNormal" style="line-height: normal;">Using Style</li>
<li class="MsoNormal" style="line-height: normal;">The Theme Creator</li>
<li class="MsoNormal" style="line-height: normal;">UIID</li>
<li class="MsoNormal" style="line-height: normal;">Spinner</li>
<li class="MsoNormal" style="line-height: normal;">Table</li>
<li class="MsoNormal" style="line-height: normal;">Conclusion</li>
<li class="MsoNormal" style="line-height: normal;">Resources</li>
</ul>Lightweight User Interface Toolkit (LWUIT) version 1.3, released in December 2009, consolidates the modifications over version 1.1 initiated in version 1.2 and incorporates some new ones too. It also introduces three new components -- Tree, Table and Spinner. The use of the Tree widget is demonstrated through the <i>LWUIT Demo</i> that comes with the LWUIT download bundle. In this article we examine the changes with respect to Style and go on to check out Table and Spinner.<br />
The demo applications have been developed on the Sprint Wireless Toolkit 3.3.2 (SWTK). Not only does this toolkit support LWUIT extremely well, it also has an interesting array of device emulators like those for HTC Touch and Samsung Instinct. If you intend to try out LWUIT, I would strongly suggest that you install the Sprint WTK on your computer.<br />
<h3>Style</h3>The idea behind <i>Style</i> is to centrally define the visual attributes for each widget (component). In addition to its physical design, such as its shape, the appearance of a widget can be defined in terms of a number of common features or attributes. In LWUIT 1.1 the settable attributes for a component were:<br />
<ul type="disc"><li class="MsoNormal" style="line-height: normal;">Background and foreground colors.</li>
<li class="MsoNormal" style="line-height: normal;">Fonts for writing text on it.</li>
<li class="MsoNormal" style="line-height: normal;">Background transparency.</li>
<li class="MsoNormal" style="line-height: normal;">Background image.</li>
<li class="MsoNormal" style="line-height: normal;">Margin and padding.</li>
<li class="MsoNormal" style="line-height: normal;">Background painters.</li>
<li class="MsoNormal" style="line-height: normal;">Border.</li>
</ul>The additional attributes defined under LWUIT 1.3 are:<br />
<ul type="disc"><li class="MsoNormal" style="line-height: normal;">Background type -- specifies whether the background has an image or a color gradient. An image can be tiled, scaled or aligned (unscaled with alignment). A gradient for background can be linear (vertical/horizontal) or radial.</li>
<li class="MsoNormal" style="line-height: normal;">Background alignment -- if an image (tiled or aligned) is used for the background, the alignment (top/bottom/left/right/center) is defined by this attribute.</li>
<li class="MsoNormal" style="line-height: normal;">Background gradient start and end colors.</li>
</ul>A <code><span style="font-size: 10pt;">Style</span></code> object holds all these attributes for each state of each component that is used in an application, and has appropriate accessor methods. In addition this class also has the ability to inform a registered listener when a style object associated with a given component is altered.<br />
<h3>A Style for Each State</h3>In the early days of LWUIT, that is up to version 1.1, there used to be just one <code><span style="font-size: 10pt;">Style</span></code> object for each widget to be displayed. This single <code><span style="font-size: 10pt;">Style</span></code> object had separate attributes corresponding to the different widget states. For example, the background color for the unselected (unfocused) state would be defined as <code><span style="font-size: 10pt;">bgColor</span></code> and that for the selected (focused) state as <code><span style="font-size: 10pt;">bgSelectionColor</span></code>. The code for setting these colors would look like this.<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //when the widget does not have focus<o:p></o:p></code></pre><pre><code> //the background will be red<o:p></o:p></code></pre><pre><code> myComponent.getStyle().setBgColor(0xff0000);<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //when the widget has focus<o:p></o:p></code></pre><pre><code> //the background will be blue<o:p></o:p></code></pre><pre><code> myComponent.getStyle().setBgSelectionColor(0x0000ff);<o:p></o:p></code></pre><pre><o:p> </o:p></pre>However, as of version 1.2, this has changed. Components now have distinct styles for each of their permissible states. Most components would have a <code><span style="font-size: 10pt;">selectedStyle</span></code> and an <code><span style="font-size: 10pt;">unselectedStyle</span></code>. Components like buttons and those that extend the <code><span style="font-size: 10pt;">Button</span></code> class will have an additional style corresponding to the <i>pressed</i> state -- the <code><span style="font-size: 10pt;">pressedStyle</span></code>. So, the above code sample will now look as follows.<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //when the widget does not have focus<o:p></o:p></code></pre><pre><code> //the background will be red<o:p></o:p></code></pre><pre><code> myComponent.getUnselectedStyle().setBgColor(0xff0000);<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //when the widget has focus<o:p></o:p></code></pre><pre><code> //the background will be blue<o:p></o:p></code></pre><pre><code> myComponent.getSelectedStyle().setBgColor(0x0000ff);<o:p></o:p></code></pre><pre><o:p> </o:p></pre>Note that we have used two different versions of the <i>getter</i> method -- one for each style. Actually, the <code><span style="font-size: 10pt;">Component</span></code> class has a <code><span style="font-size: 10pt;">getStyle</span></code> method too, which returns the appropriate style depending upon the state of the component. This capability leads to simpler coding especially for methods that render components.<br />
When a component is created, a default <code><span style="font-size: 10pt;">Style</span></code> object gets associated with it as its <code><span style="font-size: 10pt;">unselectedStyle</span></code>. The other styles are created when accessed for the first time through the corresponding <i>setter</i> or <i>getter</i> methods.<br />
There are several ways for setting and modifying attributes as shown in the following list.<br />
<ul type="disc"><li class="MsoNormal" style="line-height: normal;">By using the <code><span style="font-size: 10pt;">get*Style().set*</span></code> combination as above.</li>
<li class="MsoNormal" style="line-height: normal;">By creating a new style with the desired attributes and then invoking the <code><span style="font-size: 10pt;">set*Style</span></code> method to set the new style.</li>
<li class="MsoNormal" style="line-height: normal;">Style for an entire set of widgets can be set through the <code><span style="font-size: 10pt;">UIManager</span></code> instance. The relevant technique is</li>
</ul><pre style="margin-left: 0.5in; text-indent: -0.25in;"><code><span style="font-family: Symbol;">·<span style="font: 7pt 'Times New Roman';"> </span></span></code><span dir="LTR"></span><code><o:p> </o:p></code></pre><pre style="margin-left: 0.5in; text-indent: -0.25in;"><code><span style="font-family: Symbol;">·<span style="font: 7pt 'Times New Roman';"> </span></span></code><span dir="LTR"></span><code> //method for setting unselected style<o:p></o:p></code></pre><pre style="margin-left: 0.5in; text-indent: -0.25in;"><code><span style="font-family: Symbol;">·<span style="font: 7pt 'Times New Roman';"> </span></span></code><span dir="LTR"></span><code> UIManager.getInstance().setComponentStyle<o:p></o:p></code></pre><pre style="margin-left: 0.5in; text-indent: -0.25in;"><code><span style="font-family: Symbol;">·<span style="font: 7pt 'Times New Roman';"> </span></span></code><span dir="LTR"></span><code> (String id, Style style)<o:p></o:p></code></pre><pre style="margin-left: 0.5in; text-indent: -0.25in;"><code><span style="font-family: Symbol;">·<span style="font: 7pt 'Times New Roman';"> </span></span></code><span dir="LTR"></span><code><o:p> </o:p></code></pre><pre style="margin-left: 0.5in; text-indent: -0.25in;"><code><span style="font-family: Symbol;">·<span style="font: 7pt 'Times New Roman';"> </span></span></code><span dir="LTR"></span><code> //method for setting selected style<o:p></o:p></code></pre><pre style="margin-left: 0.5in; text-indent: -0.25in;"><code><span style="font-family: Symbol;">·<span style="font: 7pt 'Times New Roman';"> </span></span></code><span dir="LTR"></span><code> UIManager.getInstance().setComponentSelectedStyle<o:p></o:p></code></pre><pre style="margin-left: 0.5in; text-indent: -0.25in;"><code><span style="font-family: Symbol;">·<span style="font: 7pt 'Times New Roman';"> </span></span></code><span dir="LTR"></span><code> (String id, Style style)<o:p></o:p></code></pre><pre style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-family: Symbol;">·<span style="font: 7pt 'Times New Roman';"> </span></span><span dir="LTR"></span><o:p> </o:p></pre><div class="MsoNormal" style="margin-left: 0.5in;">However, currently this approach works for selected and unselected styles.</div><ul type="disc"><li class="MsoNormal" style="line-height: normal;">Through a Theme.</li>
</ul>In the following section we shall check out a simple demo application which shows how styling can be done under LWUIT 1.3.<br />
<h3><a href="http://www.blogger.com/post-edit.g?blogID=189574067630205411&postID=7955932608173618992&from=pencil" name="usingstyle">Using Style</a></h3>Our application will have a single form with three widgets and will look like the Figure 1:<br />
<br />
<br />
<span class="Apple-style-span" style="color: #0000ee;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5561616728079618242" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLq-IZzGcUundHTboMEhHwyRbcA0-0yYO_xOxw5Mz1zUMtlLMb-8rIwcYfbbqe8m49-rI5l3alE1WhSy1x8NABnnbUeeGyAlLXkAZ9jshiQepXRf-0XwLCAywK-g2Z7e707gkhmhbGmK7T/s320/2.png" style="cursor: pointer; float: left; height: 320px; margin: 0px 10px 10px 0px; width: 264px;" /></span><br />
<div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><br />
<i>Figure 1. Style Update Demo.</i><br />
The screenshot above shows a screen with two labels and one button. Labels, by default, cannot receive focus and the topmost widget is such a label. The second label has been explicitly made focusable as shown by the code snippet below.<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //create a label<o:p></o:p></code></pre><pre><code> Label focusLabel = new Label("Focusable");<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //and make it focusable<o:p></o:p></code></pre><pre><code> focusLabel.setFocusable(true);<o:p></o:p></code></pre><pre><o:p> </o:p></pre>In Figure 1 we see the second label in the selected state. The applicable style is set as follows:<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //modify default style to set attributes <o:p></o:p></code></pre><pre><code> //for selected state of focus label<o:p></o:p></code></pre><pre><code> focusLabel.getSelectedStyle().setBgColor(0x555555);<o:p></o:p></code></pre><pre><code> focusLabel.getSelectedStyle().setFont(font);<o:p></o:p></code></pre><pre><code> focusLabel.getSelectedStyle().setBorder<o:p></o:p></code></pre><pre><code> (Border.createBevelRaised());<o:p></o:p></code></pre><pre><o:p> </o:p></pre>The first label and the button are unselected and their appearances are styled through the same <code><span style="font-size: 10pt;">Style</span></code> object. This object has the following attributes:<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //create a common style for unselected state<o:p></o:p></code></pre><pre><code> Style unselStyle = new Style();<o:p></o:p></code></pre><pre><code> unselStyle.setFont(font);<o:p></o:p></code></pre><pre><code> unselStyle.setBgTransparency(64);<o:p></o:p></code></pre><pre><code> unselStyle.setFgColor(0xffc605);<o:p></o:p></code></pre><pre><code> unselStyle.setBorder(Border.createEtchedRaised());<o:p></o:p></code></pre><pre><o:p> </o:p></pre>This style is set as the unselected one for all labels by calling the <code><span style="font-size: 10pt;">setComponentStyle(String id, Style style)</span></code> method. This is shown below.<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //set unselected style for labels<o:p></o:p></code></pre><pre><code> UIManager.getInstance().setComponentStyle<o:p></o:p></code></pre><pre><code> ("Label", unselStyle);<o:p></o:p></code></pre><pre><o:p> </o:p></pre>The unselected style for the button is set in the following way using the same style object that is used for labels.<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //create button<o:p></o:p></code></pre><pre><code> Button button = new Button("Button");<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //set style for unselected state of button<o:p></o:p></code></pre><pre><code> button.setStyle(unselStyle);<o:p></o:p></code></pre><pre><o:p> </o:p></pre>Figure 2 shows the same screen as above with the button in the selected state.<br />
<br />
<br />
<span class="Apple-style-span" style="color: #0000ee;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5561617374466706050" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0tQSRAfG_I1ArFvsvU6uk98j8_BrWzaJYmDHHnXMKafsJ6uhfFDRoGUad6YXof1Ynb-76cuz33xfQVjJg5rBWQgUD4qPu_4h3vtq1tGb_eacpG62Z1KuwkG3mVEx2ZPWoZleiA71TEZUH/s320/3.png" style="cursor: pointer; float: left; height: 320px; margin: 0px 10px 10px 0px; width: 265px;" /></span><br />
<div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><br />
<i>Figure 2. The button is selected.</i><br />
We can see that both labels are unselected and their appearances are the same. The button, which has focus, looks just like <code><span style="font-size: 10pt;">focusLabel</span></code> in Figure 1. This is ensured by creating a style with attributes that have the same values that were used for the selected style of <code><span style="font-size: 10pt;">focusLabel</span></code>. This new style -- <code><span style="font-size: 10pt;">buttonSelStyle</span></code> -- is then installed as the selected style for the button.<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //create selected style for button<o:p></o:p></code></pre><pre><code> Style buttonSelStyle = new Style();<o:p></o:p></code></pre><pre><code> buttonSelStyle.setBgColor(0x555555);<o:p></o:p></code></pre><pre><code> buttonSelStyle.setFont(font);<o:p></o:p></code></pre><pre><code> buttonSelStyle.setBorder(Border.createBevelRaised());<o:p></o:p></code></pre><pre><code> ...<o:p></o:p></code></pre><pre><code> //set style for selected state of button<o:p></o:p></code></pre><pre><code> button.setSelectedStyle(buttonSelStyle);<o:p></o:p></code></pre><pre><o:p> </o:p></pre>In a similar manner we create and set a style for the pressed state of the button:<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //create pressed style for button<o:p></o:p></code></pre><pre><code> Style buttonPrStyle = new Style();<o:p></o:p></code></pre><pre><code> buttonPrStyle.setBgColor(0xff0055);<o:p></o:p></code></pre><pre><code> buttonPrStyle.setFont(font);<o:p></o:p></code></pre><pre><code> buttonPrStyle.setBgTransparency(127);<o:p></o:p></code></pre><pre><code> buttonPrStyle.setBorder(Border.createRoundBorder<o:p></o:p></code></pre><pre><code> (12, 5, 0xff0000));<o:p></o:p></code></pre><pre><code> ...<o:p></o:p></code></pre><pre><code> //set style for pressed state of button<o:p></o:p></code></pre><pre><code> button.setPressedStyle(buttonPrStyle);<o:p></o:p></code></pre><pre><o:p> </o:p></pre>The result of pressing the button can be seen in Figure 3 below.<br />
<br />
<br />
<span class="Apple-style-span" style="color: #0000ee;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5561617743512594658" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9FiWF7MMy7ah6X9K3JKip0koBMB2YTpGYj2w47DspzeRJBwymyIYGu14EAKQOU9hzKmiL8ZZ-mlJqTBRKzIXc4tuOHQajdPhtHNgLm2UgUhYFTkFlUUvX7iZyhHgNnEetFlupJZ0Ap8C5/s320/4.png" style="cursor: pointer; float: left; height: 320px; margin: 0px 10px 10px 0px; width: 263px;" /></span><br />
<div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><br />
<i>Figure 3. The button is pressed.</i><br />
In the demo application above, style attributes have been set programatically to show some fundamental aspects of styling. In real life applications, though, it would be advisable to apply themes.<br />
<h3>The Theme Creator</h3>In the beginning there was the <i>Resource Editor</i> -- a very handy tool for creating and editing resource files. In Decemeber 2008 it was renamed <i>LWUIT Designer</i>, and in the latest release it has become the <i>Theme Creator</i>. While the essential functionality remains the same, both the <i>LWUIT Designer 1.2</i> and the <i>Theme Creator</i> allow the creation of three distinct styles, as we can see in Figure 4.<br />
<br />
<br />
<span class="Apple-style-span" style="color: #0000ee;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5561618013958680306" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwN4dpYdI5zk1iOTy9Daar6ILIAEYXhncOZoIFSFlur4qoN1Yy4_skiDtF6jhUWs4VVlTd5jN9-DA0K66jgTyglG_2C1mKtS7vhTOB9FvLLc0rt1_jFxQBrJKIJGQTZFBLMnGncT71BbtY/s320/5.png" style="cursor: pointer; float: left; height: 284px; margin: 0px 10px 10px 0px; width: 320px;" /></span><br />
<div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><br />
<br />
<br />
<i>Figure 4. Creating a theme with three styles.</i><br />
The <i>Theme Creator</i> now provides support for SVG images too. This is shown in Figure 5.<br />
<br />
<br />
<span class="Apple-style-span" style="color: #0000ee;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5561618262363989746" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLUtlQq_vDcdFhiIfTzrh6PlnRuRotJQgu4zuWbHuqGbKPS-Z3opJcnvPpCMPCqY8ZZBWdcf_BHFvUBIcla4C0GFadlLuelcdGmk1OIMOMY4QK0WEG2cDvcmd07rfOfFKGE0ArCNNsmmtm/s320/6.png" style="cursor: pointer; float: left; height: 320px; margin: 0px 10px 10px 0px; width: 154px;" /></span><br />
<div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><i>Figure 5. SVG support.</i><br />
<h3>UIID</h3>Every component can have its own unique id which is used for styling as we have seen. All components in the library have their ids. When creating a custom component, a new id should be alloted. Sometimes, components are built up using existing ones and these constituent parts can have ids different from their original ones. Consider the case of a component that uses a label to form a part. If we want to give this part a distinct id for styling, the <code><span style="font-size: 10pt;">getUIID</span></code> method of <code><span style="font-size: 10pt;">Component</span></code> class would have had to be overridden in the days of LWUIT 1.1. A new method -- <code><span style="font-size: 10pt;">setUIID</span></code> -- was provided in LWUIT 1.2 to do the same thing in a simpler and more intuitive way. So now we can write:<br />
<pre><code><o:p> </o:p></code></pre><pre><code> Label newMyPart = new Label();<o:p></o:p></code></pre><pre><code> newMyPart.setUIID("NewMyPart");<o:p></o:p></code></pre><pre><o:p> </o:p></pre><h3>Spinner</h3>A spinner is similar to a combo box in the sense that it shows a single value from a list of values. However, spinner does not show a drop down list for selection. Instead the <i>up</i> or <i>down</i> key has to be used to scroll through the list. Also, a spinner can show only a date, time or numerical value. Figure 6 shows a form with two components: a button and a spinner. The button has been added to show how different styles take effect depending on whether the spinner has focus or not. Here the spinner is shown in the unselected state.<br />
<br />
<br />
<span class="Apple-style-span" style="color: #0000ee;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5561618548984671586" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTPFjVFda9TWMJlexU1PVfBhBAJfdRSB0RLJlKpPlt-gjT_6dGdVTgqgbsSdxTYI1GbuhGD0svnSLdCkB0X4SZnGupKBBOat8-_s2E3v6-c0t-h1HOBlKzXOY-6G15XjhAP-ddWkLNDD5n/s320/7.png" style="cursor: pointer; float: left; height: 320px; margin: 0px 10px 10px 0px; width: 263px;" /></span><br />
<div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span"></span><span class="Apple-style-span" style="color: #0000ee;"><br />
</span><a href="http://www.blogger.com/post-edit.g?blogID=189574067630205411&postID=7955932608173618992&from=pencil" name="ufs"><i>Figure 6. Spinner is unselected</i></a></div>The <code><span style="font-size: 10pt;">Spinner</span></code> class does not have an accessible constructor. One of the factory methods has to be used to get an instance of spinner. In this case we create a spinner to display time in twenty-four hour format showing hours, minutes and seconds. The method used is: <code><span style="font-size: 10pt;">createTime(int min, int max, int currentValue, int step, boolean twentyFourHours, boolean showSeconds)</span></code>. The first two parameters specify the minimum and maximum values for the list. The third parameter defines the value to be shown initially. The unit for all the three is seconds since midnight. The fourth is the difference between two successive values in seconds. The fifth and sixth parameters define the display format.<br />
The image on the right of the time display is called the <code><span style="font-size: 10pt;">spinnerHandle</span></code> and is meant to indicate that the display can <i>spin</i>. The following code snippet shows how the spinner is created and the <code><span style="font-size: 10pt;">spinnerHandle</span></code> is set. A word about the value initially shown in Figure 6 above: while creating the spinner instance, the value specified for initial display is 180, which corresponds to three minutes or, in the given format, 00:03:00. However, note that the step size has been specified as 40 which means 180 is not in the list. The time displayed corresponds to 160 which is the highest value not exceeding 180.<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //create spinner with seconds display<o:p></o:p></code></pre><pre><code> spinner = Spinner.createTime(0, 7200, 180, 40, true, true);<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //set image to visually indicate it is spinnable<o:p></o:p></code></pre><pre><code> try<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> spinner.setSpinnerHandle(Image.createImage("/handle.png"));<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><code> catch(java.io.IOException ioe)<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><o:p> </o:p></pre>In Figure 6 we see the spinner in the unselected state. There is a dark olive green background on which the numerical display is rendered in blue. The background represents the spinner container and its unselected appearance is set as follows:<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //affects look when spinner does not have focus<o:p></o:p></code></pre><pre><code> spinner.getUnselectedStyle().setBgColor(0x556b3f);<o:p></o:p></code></pre><pre><code> spinner.getUnselectedStyle().setBorder(Border.createBevelRaised());<o:p></o:p></code></pre><pre><o:p> </o:p></pre>The first step in setting style for the time display is to get the <code><span style="font-size: 10pt;">DefaultListCellRenderer</span></code> instance for the spinner. The style attributes can then be set as shown below.<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //create a font<o:p></o:p></code></pre><pre><code> Font font = Font.createSystemFont(Font.FACE_PROPORTIONAL,<o:p></o:p></code></pre><pre><code> Font.STYLE_BOLD,Font.SIZE_LARGE);<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> ...<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //affects look when spinner does not have focus<o:p></o:p></code></pre><pre><code> spinner.getUnselectedStyle().setBgColor(0x556b3f);<o:p></o:p></code></pre><pre><code> spinner.getUnselectedStyle().setBorder(Border.createBevelRaised());<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> ...<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //renderer for the cell containing display<o:p></o:p></code></pre><pre><code> DefaultListCellRenderer dlcr = <o:p></o:p></code></pre><pre><code> (DefaultListCellRenderer)spinner.getRenderer();<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //affects steady state look<o:p></o:p></code></pre><pre><code> dlcr.getSelectedStyle().setBgColor(0x0000ff);<o:p></o:p></code></pre><pre><code> dlcr.getSelectedStyle().setFgColor(0);<o:p></o:p></code></pre><pre><code> dlcr.getSelectedStyle().setFont(font);<o:p></o:p></code></pre><pre><code> dlcr.getSelectedStyle().setPadding(Component.RIGHT, 7);<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //affects look during scrolling<o:p></o:p></code></pre><pre><code> dlcr.getUnselectedStyle().setBgTransparency(0);<o:p></o:p></code></pre><pre><code> dlcr.getUnselectedStyle().setFgColor(0);<o:p></o:p></code></pre><pre><code> dlcr.getUnselectedStyle().setFont(font);<o:p></o:p></code></pre><pre><o:p> </o:p></pre>The code above also sets the renderer style for the unselected state. This style becomes effective when the spinner value scrolls. To see how that works, press the <i>down</i> key. Now, the spinner gets focus and its appearance changes as specified by the code below.<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //affects look when spinner has focus<o:p></o:p></code></pre><pre><code> spinner.getSelectedStyle().setBgColor(0x0000ff);<o:p></o:p></code></pre><pre><code> spinner.getSelectedStyle().setBorder<o:p></o:p></code></pre><pre><code> (Border.createRoundBorder(12, 5, 0xff0000));<o:p></o:p></code></pre><pre><o:p> </o:p></pre>The spinner now looks like what's shown in Figure 7.<br />
<br />
<br />
<span class="Apple-style-span" style="color: #0000ee;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5561618866523705458" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVyKLhWY4DNcp63CihbB15P9JBbfho8AA8-z8uyx7IWC-l12W1Uu_Yv9k_tLLk0HGXZ1dpi8Wpe2uM-0FmgHHd6ckjAepFZ4L2DE7GQ_o0taJUS9E8DmCQ40OgBKRV550hc_8MJkdI4qWC/s320/8.png" style="cursor: pointer; float: left; height: 320px; margin: 0px 10px 10px 0px; width: 264px;" /></span><br />
<div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span"></span><span class="Apple-style-span" style="color: #0000ee;"><br />
</span><i>Figure 7. Spinner is selected.</i></div>Although the spinner now has focus, it will not respond to the <i>up</i> or the <i>down</i> key. At this stage the scrolling keys will toggle focus between the spinner and the button. To direct the scrolling key events to control the spinner display, the <i>select</i> key has to be pressed while the spinner has focus. Generally speaking, the <i>select</i> key can be used to toggle the applicability of scrolling keys between a form itself and a component with focus contained in the form. The scrolling keys can now be used to sequentially change the time displayed.<br />
What remains now is to see how we can retrieve the value selected on the spinner. The demo does this in different ways. One way is through a command. We add the <i>Show</i> command to the form and, in the <code><span style="font-size: 10pt;">actionPerformed</span></code> method, call into the <code><span style="font-size: 10pt;">getValue</span></code> method of <code><span style="font-size: 10pt;">Spinner</span></code> class.<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //create and add 'Exit' command to the form<o:p></o:p></code></pre><pre><code> //the command id is 1<o:p></o:p></code></pre><pre><code> demoForm.addCommand(new Command("Exit", 1));<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //create and add command to show spinner value<o:p></o:p></code></pre><pre><code> //the command id is 2<o:p></o:p></code></pre><pre><code> demoForm.addCommand(new Command("Show", 2));<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //this MIDlet is the listener for the form's command<o:p></o:p></code></pre><pre><code> demoForm.setCommandListener(this);<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> ...<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //act on the commands and the click<o:p></o:p></code></pre><pre><code> public void actionPerformed(ActionEvent ae)<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> Command cmd = ae.getCommand();<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> if(cmd != null)<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> switch (cmd.getId())<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> //'Exit' command<o:p></o:p></code></pre><pre><code> case 1:<o:p></o:p></code></pre><pre><code> notifyDestroyed();<o:p></o:p></code></pre><pre><code> break;<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //'Show' command<o:p></o:p></code></pre><pre><code> case 2:<o:p></o:p></code></pre><pre><code> System.out.println("Value <o:p></o:p></code></pre><pre><code> shown through command : " <o:p></o:p></code></pre><pre><code> + spinner.getValue());<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> return;<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> ...<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><o:p> </o:p></pre><div class="MsoNormal">A second method is to register the MIDlet as the <code><span style="font-size: 10pt; line-height: 115%;">ActionListener</span></code> for the spinner. If we now click on the spinner, the <code><span style="font-size: 10pt; line-height: 115%;">actionPerformed</span></code> method of the MIDlet will be invoked. The necessary action can then be taken.</div><pre><code><o:p> </o:p></code></pre><pre><code> <o:p></o:p></code></pre><pre><code> //this MIDlet is the action listener for spinner<o:p></o:p></code></pre><pre><code> spinner.addActionListener(this);<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> ...<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //act on the commands and the click<o:p></o:p></code></pre><pre><code> public void actionPerformed(ActionEvent ae)<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> Command cmd = ae.getCommand();<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> if(cmd != null)<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> ...<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> return;<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> if(ae.getSource() == spinner)<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> System.out.println("Value shown on click : "<o:p></o:p></code></pre><pre><code> + spinner.getValue());<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><o:p> </o:p></pre>The third approach used in the demo is to add the MIDlet to the spinner as the <code><span style="font-size: 10pt;">SelectionListener</span></code>. For this technique to work, the MIDlet has to implement the <code><span style="font-size: 10pt;">SelectionListener</span></code> interface so that its <code><span style="font-size: 10pt;">selectionChanged</span></code> method is called whenever the spinner selection is changed.<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //this MIDlet is the selection listener for spinner<o:p></o:p></code></pre><pre><code> spinner.addSelectionListener(this);<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> ...<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> public void selectionChanged(int oldSelected, int newSelected)<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> if(oldSelected != newSelected)<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> ListModel model = spinner.getModel();<o:p></o:p></code></pre><pre><code> System.out.println("Selection changed from " + <o:p></o:p></code></pre><pre><code> model.getItemAt(oldSelected) + " to " + <o:p></o:p></code></pre><pre><code> model.getItemAt(newSelected));<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><o:p> </o:p></pre>When we click on a list, its selection changes, and this causes the <code><span style="font-size: 10pt;">selectionChanged</span></code> method of the registered <code><span style="font-size: 10pt;">SelectionListener</span></code> to be called in addition to the <code><span style="font-size: 10pt;">actionPerformed</span></code> method of its <code><span style="font-size: 10pt;">ActionListener</span></code>. As <code><span style="font-size: 10pt;">Spinner</span></code> is a subclass of <code><span style="font-size: 10pt;">List</span></code>, it behaves in a similar fashion and clicking on it results in the printing of the selection change message for the demo. For a spinner, however, we do not consider this to be a valid selection change since the value remains the same. The <code><span style="font-size: 10pt;">if</span></code> clause in the above code listing takes care of this issue. The resultant console printouts for all three approaches are shown in Figure 8.<br />
<br />
<br />
<span class="Apple-style-span" style="color: #0000ee;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5561619160891976882" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFAk7vM_snS6OsqgE1K9Nhxgc-MlrkSotFylM-gZB5ZDmKrIQGHR2Y7XIzOWiMm3_s2tZYIvwWNhyphenhyphen8iCLKf3F2LvNl_n6GzJy802KcZg6kCDP36Lt1KXosp6ULC0LT-cwkLZOorUkmMbDy/s320/9.png" style="cursor: pointer; float: left; height: 147px; margin: 0px 10px 10px 0px; width: 320px;" /></span><br />
<div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><br />
<i>Figure 8. Message printouts.</i><br />
<h3>Table</h3>A table displays information in the form of a grid. The topmost row describes the name of the data in each column. These are the <code><span style="font-size: 10pt;">Headers</span></code>. The rest of the table displays data and is comprised of <code><span style="font-size: 10pt;">Cells</span></code>. The headers are instances of <code><span style="font-size: 10pt;">Label</span></code> and are meant to be uneditable. The cells can be either editable or uneditable. Editable cells are instances of <code><span style="font-size: 10pt;">TextField</span></code> while uneditable cells are instances of <code><span style="font-size: 10pt;">Label</span></code>. However, <i>uneditable</i> does not mean <i>unmodifiable</i> as we shall see when we discuss the demo application.<br />
Figure 9 shows a table with 5 rows and 3 columns. The topmost row holds the headers. The rest of the rows hold cells that display data. Here we have two kinds of data: text in the leftmost column (column 0) and numbers in the other columns (columns 1 and 2).<br />
<br />
<br />
<span class="Apple-style-span" style="color: #0000ee;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5561619463332938722" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhWfkMzWQSj_zhgJfgu7HelqQgKPIoSt8G_Cn_l_OA3E14uXochMYm66nunraw2_faQk9MFzVUOdmXR2VXL7PUpHT55sLjtH_BJXtd0Zw_mQQKIY4zI9l8qRTMUgmZ1OiyDUCyNL99YExL/s320/10.png" style="cursor: pointer; float: left; height: 320px; margin: 0px 10px 10px 0px; width: 264px;" /></span><br />
<div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><br />
<i>Figure 9. A table.</i><br />
The contents of a table are determined by an underlying model -- the <i>table model</i>. LWUIT defines the <code><span style="font-size: 10pt;">TableModel</span></code> interface that must be implemented by a table model; the default implementation included in the library is the <code><span style="font-size: 10pt;">DefaultTableModel</span></code> class. So the first step in creating a table is to set up the model. This model is then passed as a parameter to the table constructor. The relevant code for our application is:<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //define headers<o:p></o:p></code></pre><pre><code> String[] columns = new String[] {"Items", "Good", "Scrap"};<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //define data<o:p></o:p></code></pre><pre><code> Object[][] data = new Object[][] {{"Plate-01", <o:p></o:p></code></pre><pre><code> new Integer(1605), new Integer(57)}, {"Plate-02", <o:p></o:p></code></pre><pre><code> new Integer(5001), new Integer(326)}, {"Coil-01", <o:p></o:p></code></pre><pre><code> new Integer(417), new Integer(124)}, {"Coil-02", <o:p></o:p></code></pre><pre><code> new Integer(451), new Integer(22)}};<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //create model with uneditable cells<o:p></o:p></code></pre><pre><code> //as specified by last parameter<o:p></o:p></code></pre><pre><code> //for editable cells last parameter must be 'true'<o:p></o:p></code></pre><pre><code> DefaultTableModel model = new DefaultTableModel(columns, <o:p></o:p></code></pre><pre><code> data, false);<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //create table<o:p></o:p></code></pre><pre><code> table = new Table(model);<o:p></o:p></code></pre><pre><o:p> </o:p></pre>The cells of our table are labels and the default alignment is <code><span style="font-size: 10pt;">Label.LEFT</span></code>. There is a method in the <code><span style="font-size: 10pt;">Table</span></code> class to set cell alignment -- <code><span style="font-size: 10pt;">setCellAlignment</span></code>. However, this is not a <i>static</i> method and works only for new cells created for an existing table. The default alignment for headers is <code><span style="font-size: 10pt;">Label.CENTER</span></code> To change the alignment of cells, we need to access each label that forms a cell and set its alignment. Another point to be noted is that, for some form layouts, the sizing of the last column may not work properly. We have used a kind of <i>rendering prototype</i> to ensure proper sizing. All this is shown in the code snippet below.<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //create a font<o:p></o:p></code></pre><pre><code> Font font = Font.createSystemFont(Font.FACE_PROPORTIONAL,<o:p></o:p></code></pre><pre><code> Font.STYLE_BOLD,Font.SIZE_LARGE);<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //width of 'rendering prototype'<o:p></o:p></code></pre><pre><code> int w = font.stringWidth("WWWW");<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> ...<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //does not affect alignment of cells already created as<o:p></o:p></code></pre><pre><code> //table is constructed with cells with default alignment<o:p></o:p></code></pre><pre><code> //works only for cells created later<o:p></o:p></code></pre><pre><code> //this happens, for example, if new data is set<o:p></o:p></code></pre><pre><code> table.setCellAlignment(Label.CENTER);<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> TableLayout layout = (TableLayout)table.getLayout();<o:p></o:p></code></pre><pre><code> Component c = null;<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //'getRowCount' does not take into account the header row<o:p></o:p></code></pre><pre><code> //so add 1 to get total number of rows<o:p></o:p></code></pre><pre><code> int rows = ((DefaultTableModel)table.getModel()).<o:p></o:p></code></pre><pre><code> getRowCount() + 1;<o:p></o:p></code></pre><pre><code> int cols = ((DefaultTableModel)table.getModel()).<o:p></o:p></code></pre><pre><code> getColumnCount();<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> for(int i = 0; i < rows; i++)<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> for(int j = 0; j < cols; j++)<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> //get the component for cell at<o:p></o:p></code></pre><pre><code> //specified row and column<o:p></o:p></code></pre><pre><code> c = layout.getComponentAt(i,j);<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> if(i == 0)<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> //set border for headers<o:p></o:p></code></pre><pre><code> c.getUnselectedStyle().setBorder<o:p></o:p></code></pre><pre><code> (Border.createLineBorder<o:p></o:p></code></pre><pre><code> (1, 0xff0000));<o:p></o:p></code></pre><pre><code> if(j == cols - 1)<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> //use prototype<o:p></o:p></code></pre><pre><code> //to size the last column<o:p></o:p></code></pre><pre><code> c.setPreferredSize(new Dimension(w, <o:p></o:p></code></pre><pre><code> c.getPreferredH()));<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><code> else<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> //necessary because cells were originally<o:p></o:p></code></pre><pre><code> //created with default (left) alignment<o:p></o:p></code></pre><pre><code> ((Label)c).setAlignment(Label.CENTER);<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><o:p> </o:p></pre>The header strings and the cell data are held within the table model. The <code><span style="font-size: 10pt;">TableModel</span></code> interface defines methods to access these variables. Note that there is only a <i>getter</i> method for the column names while there is a <i>getter</i> as well as a <i>setter</i> method for the cell values. The <i>Show</i> command on our demo form uses the <code><span style="font-size: 10pt;">getValueAt</span></code> method to print out a cell value on the console.<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //act on the commands<o:p></o:p></code></pre><pre><code> public void actionPerformed(ActionEvent ae)<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> Command cmd = ae.getCommand();<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> switch (cmd.getId())<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> ...<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //'Show' command<o:p></o:p></code></pre><pre><code> case 2:<o:p></o:p></code></pre><pre><code> //get the table model instance<o:p></o:p></code></pre><pre><code> DefaultTableModel dtm = <o:p></o:p></code></pre><pre><code> (DefaultTableModel)<o:p></o:p></code></pre><pre><code> table.getModel();<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //get the value at the specified cell<o:p></o:p></code></pre><pre><code> //use actual row number - 1 <o:p></o:p></code></pre><pre><code> //since actual first row is not for data<o:p></o:p></code></pre><pre><code> Object val = dtm.getValueAt(0, 2);<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //print value<o:p></o:p></code></pre><pre><code> System.out.println<o:p></o:p></code></pre><pre><code> ("Plate-01 Scrap : " + val);<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> ...<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><o:p> </o:p></pre>The printout is shown in Figure 10.<br />
<span class="Apple-style-span" style="color: #0000ee;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5561619670849107314" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjsj9Gsc_EkhUfB5f1BMN8nOu9O_FBwL-goMD36X9EV3xVyuK2gMiRxl4ImqQQllCJFYe28gnuP7CA9FjQVgET76-DrceAzr4cxc6TSPDkqBFoAoFmWuewgGOcxrpawK5vlkt6UG3YHDt0/s320/11.png" style="cursor: pointer; float: left; height: 170px; margin: 0px 10px 10px 0px; width: 320px;" /></span><br />
<div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span"></span><span class="Apple-style-span" style="color: #0000ee;"><br />
</span><i>Figure 10. Accessing cell data.</i></div>The <code><span style="font-size: 10pt;">setValueAt</span></code> method can be used to programatically change data in a cell -- even for uneditable cells. In our demo application the <i>Show</i> command is replaced with a <i>Modify</i> command which changes the data in the cell for <i>Plate-02 Scrap</i> from 326 to 750. The <code><span style="font-size: 10pt;">setValueAt</span></code> method leads to the creation of a new label to replace the existing one. As we have already set cell alignment to <code><span style="font-size: 10pt;">Label.CENTER</span></code>, the new value remains properly aligned.<br />
<pre><code><o:p> </o:p></code></pre><pre><code> //create and add command to show value<o:p></o:p></code></pre><pre><code> //the command id is 2<o:p></o:p></code></pre><pre><code> //demoForm.addCommand(new Command("Show", 2));<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //create and add command to change value<o:p></o:p></code></pre><pre><code> //the command id is 2<o:p></o:p></code></pre><pre><code> demoForm.addCommand(new Command("Modify", 2));<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> ...<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> ...<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //act on the commands<o:p></o:p></code></pre><pre><code> public void actionPerformed(ActionEvent ae)<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> Command cmd = ae.getCommand();<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> switch (cmd.getId())<o:p></o:p></code></pre><pre><code> {<o:p></o:p></code></pre><pre><code> //'Exit' command<o:p></o:p></code></pre><pre><code> case 1:<o:p></o:p></code></pre><pre><code> notifyDestroyed();<o:p></o:p></code></pre><pre><code> break;<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //'Show' command<o:p></o:p></code></pre><pre><code> /*case 2:<o:p></o:p></code></pre><pre><code> //get the table model instance<o:p></o:p></code></pre><pre><code> DefaultTableModel dtm = <o:p></o:p></code></pre><pre><code> (DefaultTableModel)<o:p></o:p></code></pre><pre><code> table.getModel();<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //get the value at the specified cell<o:p></o:p></code></pre><pre><code> //use actual row number - 1 <o:p></o:p></code></pre><pre><code> //since actual first row is not for data<o:p></o:p></code></pre><pre><code> Object val = dtm.getValueAt(0, 2);<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //print value<o:p></o:p></code></pre><pre><code> System.out.println<o:p></o:p></code></pre><pre><code> ("Plate-01 Scrap : " <o:p></o:p></code></pre><pre><code> + val);*/<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //'Modify' command<o:p></o:p></code></pre><pre><code> case 2:<o:p></o:p></code></pre><pre><code> //get the table model instance<o:p></o:p></code></pre><pre><code> DefaultTableModel dtm = <o:p></o:p></code></pre><pre><code> (DefaultTableModel)<o:p></o:p></code></pre><pre><code> table.getModel();<o:p></o:p></code></pre><pre><code><o:p> </o:p></code></pre><pre><code> //set the value at the specified cell<o:p></o:p></code></pre><pre><code> //use actual row number - 1 <o:p></o:p></code></pre><pre><code> //since actual first row is not for data<o:p></o:p></code></pre><pre><code> dtm.setValueAt(1, 2, new Integer(750));<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><code> }<o:p></o:p></code></pre><pre><o:p> </o:p></pre>In Figure 11 we can see the new value for <i>Plate-02 Scrap</i>.<br />
<br />
<br />
<span class="Apple-style-span" style="color: #0000ee;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5561619973708650098" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuw33Z2sif49_4RoNdUk8uhca2C46G7mqgHKAjlkdTGpsJ8leVs0yhseHbAeTcc52ucbQso-kb0DEXbXY8hP4wqG0Dzl4htVGDwLfKhmcJ87jn85CyUJ062rlD59sGZ0xs7wR8Ol199k6D/s320/12.png" style="cursor: pointer; float: left; height: 320px; margin: 0px 10px 10px 0px; width: 264px;" /></span><br />
<div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><i>Figure 11. Cell data modified.</i></div>In the demo application for table, the only styling done programmatically is for the set of borders for the headers. The rest of the styling has been defined in a theme. The theme file is shown below in Figure 12. A word of caution here. This theme file has been created by the <i>Theme Creator</i> that comes with LWUIT 1.3. The <i>Resource Editor</i> that comes with the SWTK is of an earlier vintage and will not be able to open this file.<br />
<span class="Apple-style-span" style="color: #0000ee;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5561620184926792482" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpK8Nosh-V66OpTI9IsKrxH7FVhsc4UjB_-lExh3J-jTUiW7IkKhb1Pd8d8bKFGMz-ZQAd5qw6Tea1nnxSj64lvmFZesQlRLQJbSGZEs2UbEpk81HjqpgPRpmgE-7le0GwFYweif2ZCtVB/s320/13.png" style="cursor: pointer; float: left; height: 239px; margin: 0px 10px 10px 0px; width: 320px;" /></span><br />
<div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span" style="color: #0000ee;"><br />
</span></div><div><span class="Apple-style-span"></span><span class="Apple-style-span" style="color: #0000ee;"><br />
</span><i>Figure 12. Theme file for the demo app.</i></div><h3>Conclusion</h3>We have seen how the approach to styling has been modified since LWUIT 1.1. We have also checked out the new <i>Theme Creator</i> and two new components that have been introduced in LWUIT 1.3. However, there are a number of interesting new features that have not been discussed here. These are listed in <i>What's new in This Release</i> in the LWUIT 1.3 download bundle.<br />
<h3>Resources</h3><ul type="disc"><li class="MsoNormal" style="line-height: normal;">src_codes.zip -- source code and resources for the demo applications.</li>
<li class="MsoNormal" style="line-height: normal;">LWUIT 1.1 for Java ME Developers -- useful for a detailed introduction to LWUIT basics as most of the fundamentals remain valid for LWUIT 1.3.</li>
<li class="MsoNormal" style="line-height: normal;">Lightweight User Interface Toolkit (LWUIT) project home -- has a link for source code and for download.</li>
<li class="MsoNormal" style="line-height: normal;">Shai Almog's blog on Java & LWUIT</li>
</ul><div class="MsoNormal"><o:p> </o:p></div><div class="MsoNormal"><b><br />
</b></div><div class="MsoNormal"><b>Source:</b> http://today.java.net/article/2010/04/19/using-styles-themes-and-painters-lwuit</div><div class="MsoNormal">----------------------------------------------------</div><div class="MsoNormal"><span class="Apple-style-span" style="font-size: small;">If you search for </span><a href="http://www.symbyo.com/"><span class="Apple-style-span" style="font-size: small;">Software outsourcing Company</span></a><span class="Apple-style-span" style="font-size: small;">,</span><span class="Heading2Char"><span style="color: black; font-family: Arial,sans-serif; line-height: 115%;"><span class="Apple-style-span" style="font-size: small;"> </span></span></span><span class="apple-style-span"><span style="color: black; font-family: Arial,sans-serif; line-height: 115%;"><span class="Apple-style-span" style="font-size: small;">Symbyo Right Sourcing™ is a unique approach to outsourcing that offers the best of both worlds by blending onsite, onshore and offshore resources and locations into one smooth</span></span><span style="color: black; font-family: Arial,sans-serif; line-height: 115%;"><span class="Apple-style-span" style="font-size: small;"> </span></span></span><a href="http://www.symbyo.com/Global-Delivery-Model/"><span class="Apple-style-span" style="font-size: small;">global delivery model</span></a><span class="apple-style-span"><span style="color: black; font-family: Arial,sans-serif; line-height: 115%;"><span class="Apple-style-span" style="font-size: small;">.</span></span></span></div><div class="MsoNormal"><span class="apple-style-span"><span style="color: black; font-family: Arial,sans-serif; line-height: 115%;"><span class="Apple-style-span" style="font-size: small;">Symbyo offers Oracle Consulting and Microsoft .NET Consulting services, </span></span></span><a href="http://www.symbyo.com/Centers-of-Excellence/oracle-Center-of-Excellence.aspx"><span class="Apple-style-span" style="font-size: small;">Offshore Oracle</span></a><span class="Apple-style-span" style="font-size: small;"> </span><span class="apple-style-span"><span style="color: black; font-family: Arial,sans-serif; line-height: 115%;"><span class="Apple-style-span" style="font-size: small;">outsourcing services and Microsoft .NET Development services and offshore </span></span></span><a href="http://www.symbyo.com/microsoft-dot-net/"><span class="Apple-style-span" style="font-size: small;">.Net outsourcing</span></a><span class="Apple-style-span" style="font-size: small;"> </span><span class="apple-style-span"><span style="color: black; font-family: Arial,sans-serif; line-height: 115%;"><span class="Apple-style-span" style="font-size: small;">services.</span></span><o:p></o:p></span></div><div class="MsoNormal"><o:p> </o:p></div><div class="MsoNormal"><o:p> </o:p></div></div><br />
<a href="http://www.technorati.com/tags/LWUIT" rel="tag">LWUIT</a>,<a href="http://www.technorati.com/tags/LWUIT+Style" rel="tag">LWUIT Style</a>,<a href="http://www.technorati.com/tags/LWUIT+Theme" rel="tag">LWUIT Theme</a>,<a href="http://www.technorati.com/tags/UIID" rel="tag">UIID</a>,<a href="http://www.technorati.com/tags/Spinner" rel="tag">Spinner</a></div><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-11684188498270178072011-01-24T02:17:00.000-08:002011-06-21T05:53:24.506-07:00Can I Use this Intent in Android?<div dir="ltr" style="text-align: left;" trbidi="on"><m:smallfrac m:val="off"> <m:dispdef> <m:lmargin m:val="0"> <m:rmargin m:val="0"> <m:defjc m:val="centerGroup"> <m:wrapindent m:val="1440"> <m:intlim m:val="subSup"> <m:narylim m:val="undOvr"> </m:narylim></m:intlim> </m:wrapindent> </m:defjc></m:rmargin></m:lmargin></m:dispdef></m:smallfrac><br>
<div class="MsoNormal" style="line-height: normal;"><br>
</div><div class="MsoNormal" style="line-height: normal;"><a href="http://3.bp.blogspot.com/-AJDRmYLkpKs/Tf33xyzw3nI/AAAAAAAAABw/mZeAroMspE8/s1600/8421.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="150" src="http://3.bp.blogspot.com/-AJDRmYLkpKs/Tf33xyzw3nI/AAAAAAAAABw/mZeAroMspE8/s200/8421.jpg" width="200"></a><span style="font-family: 'Times New Roman', serif; font-size: 12pt;">Android offers a very powerful and yet easy-to-use message type called an intents. You can use intents to turn applications into high-level libraries and make code modular and reusable. The Android Home screen and AnyCut applications, for instance, use intents extensively to create shortcuts.</span><br>
</div></div><a href="http://blog.symbyo.com/2011/01/can-i-use-this-intent-in-android.html#more">Read more »</a><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-189574067630205411.post-44141725372573270102011-01-13T01:47:00.000-08:002011-07-10T06:25:06.088-07:00Lwuit for blackberry and android<div dir="ltr" style="text-align: left;" trbidi="on"><div align="center" class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-140Xs1c0zzw/Tf34XoZHsVI/AAAAAAAAAB0/UkraQ0YpPfY/s1600/AndroidBlackberry_thumb1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="145" src="http://1.bp.blogspot.com/-140Xs1c0zzw/Tf34XoZHsVI/AAAAAAAAAB0/UkraQ0YpPfY/s200/AndroidBlackberry_thumb1.jpg" width="200" /></a></div><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 19px;"><b><br />
</b></span></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">This document is not supposed to be a guide for LWUIT</span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"> </span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">. I want to provide some information for interested LWUIT programmers to extend their reach to the BlackBerry and Android platforms. If you have never worked with these targets before, don't forget to read some of the available developer documentation. There is way too much important information to put into one place. But this document should help you by giving a working example and providing links to other resources along the way.</span><br />
</div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">I won't go into much detail on how to install and use the required software tools. Please read the documentation that comes with each software and search the Web, or ask for help in a forum. I assume that you already use an IDE like Netbeans or Eclipse. So you do not have to run the build scripts</span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"> </span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">from the command line and can just integrate them into your projects. To improve your efficiency you probably want to install a BlackBerry/Android plugin for your IDE. If you do that, you do not have to use the scripts that I provide here. But they can give you an idea about the build procedure.<o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">The ANT scripts copy all the source files to a separate directory and compile your application there. This allows you to use separate library-type projects within your IDE environment and use the scripts to put the pieces together.<o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">I have taken a sample application from the LWUIT blog</span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"> </span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">and modified it a little. First download the sample application sources and the build files</span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"> </span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">. The archive contains the application itself and two ANT</span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"> </span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">scripts, one for each platform. You still need to get the LWUIT sources</span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"> </span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">and the LWUIT implementations for BlackBerry and Android from the Subversion repositories</span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"> </span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">. You really should get up-to-date copies from the repository and not the LWUIT binaries.<o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="font-family: 'Times New Roman',serif; font-size: 12pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><b><span style="color: #2c2c2c; font-family: Verdana,sans-serif;"><span class="Apple-style-span" style="font-size: large;">Building for BlackBerry</span></span></b><b><span style="font-family: 'Times New Roman',serif;"><span class="Apple-style-span" style="font-size: large;"><o:p></o:p></span></span></b></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><b><span style="color: #2c2c2c; font-family: Verdana,sans-serif;"><span class="Apple-style-span" style="font-size: large;"><br />
</span></span></b></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="font-family: 'Times New Roman',serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">The LWUIT blog describes in detail how to build LWUIT applications for BlackBerry with Netbeans. That is a very nice step-by-step guide to get going with Netbeans and an alternative to the approach that I take here.</span><span style="font-family: 'Times New Roman',serif; font-size: 12pt;"><o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">Install first:<o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">Apache ANT<br />
bb-ant-tools</span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"> </span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
Antenna<br />
SUN WTK 2.5.x<br />
BlackBerry JDE 4.3 and 4.7<o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">There are two LWUIT implementations for BlackBerry right now. This ANT file uses the official implementation. The sources can be found in the BlackBerry subdirectory within the LWUIT Subversion repository</span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"> </span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">. I have my own implementation in the LWUIT-Incubator</span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"> </span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">that you could use, but you would have to do a few adjustments. In the long run there is going to be only the official one.<o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">The build file compiles your application for the BlackBerry Operating Systems version 4.3.0+ and for 4.7.0+. Read the BlackBerry developer documentation about BlackBerry OS versions and compatibility issues. The 4.7.0 build will run on touch screen and non-touch screen devices that run BB OS 4.7 or later.<o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">You need to configure the variables within the 'ADJUST THIS TO YOUR ENVIRONMENT' comments. And you need to adjust the 'getsources_430' and 'getsources_470' targets. These targets copy all the source and binary files from your project locations to a temporary directory. Make sure to copy the LWUIT sources, the LWUIT BlackBerry implementation sources and the application sources into one directory. The same has to be done for any binary files that you might need for your application.<o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">Finally run the 'buildblackberry' target to build the files. If you run the script from the commandline type:<br />
<i>ant -f build_blackberry.xml buildblackberry</i><o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">If everything works as expected you will end up with a lot of files in the 'bb_bin_430' and 'bb_bin_470' directories. You only need the ALX/COD file pair for installation using the BlackBerry Desktop Manager and the 'bb_bin_430/smallcod' and 'bb_bin_470/smallcod' directory contents for OTA installation.<o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">The ANT script does not include obfuscation and signing, but it can easily be added. Obfuscation might not be that important as the BlackBerry build process already provides some level of obfuscation.<o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">To see how the sample looks you can install it OTA on your BlackBerry by using the proper link below:<br />
For BB OS 4.3 and later: </span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt; line-height: 115%;">lwuitlist.jad</span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt; line-height: 115%;"> </span> </span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">(No touch screen support)<br />
For BB OS 4.7 and later: </span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt; line-height: 115%;">lwuitlist.jad</span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt; line-height: 115%;"> </span> </span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">(With touch screen support)<o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="font-family: 'Times New Roman',serif; font-size: 12pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><b><span style="color: #2c2c2c; font-family: Verdana,sans-serif;"><span class="Apple-style-span" style="font-size: large;"><br />
</span></span></b></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><b><span style="color: #2c2c2c; font-family: Verdana,sans-serif;"><span class="Apple-style-span" style="font-size: large;">Building for Android</span></span></b><b><span style="font-family: 'Times New Roman',serif;"><span class="Apple-style-span" style="font-size: large;"><o:p></o:p></span></span></b></div><div class="MsoNormal" style="margin-bottom: 0.0001pt;"><b><span style="color: #2c2c2c; font-family: Verdana,sans-serif;"><span class="Apple-style-span" style="font-size: large;"><br />
</span></span></b></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="font-family: 'Times New Roman',serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">Install first:<o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="font-family: 'Times New Roman',serif; font-size: 12pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">Apache ANT<br />
Android SDK 2.0 or later<o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">Note that signing your application for Android is mandatory. The good news is that it is free, you can use your own certificates.<o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">The ANT file builds your application for Android OS 1.5 and later. It should work on any future device, provided that you design your application to work with any resolution, touch screen or no touch screen, hardware keyboard or not, screen density, ... . LWUIT gives you the tools to do that, it's up to you to use them.<o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">Configure the variables within the 'ADJUST THIS TO YOUR ENVIRONMENT' comments. Additionally you need to adjust the 'getsources' target. This target should copy all the source and binary files from your project locations to a temporary directory. Copy the LWUIT sources, the LWUIT Android implementation sources and the application sources into one directory. The same has to be done for any binary files that you might need for your application.<o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">If you run the script from the commandline type:<br />
<i>ant -f build_android.xml buildandroid</i><o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">In the end you will have an APK file within your 'android_bin' directory that you can use to install on the emulator or on real devices.<o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">To see how the sample looks you can install it OTA on your Android device or emulator by using the link below:<br />
For Android OS 1.5 and later:</span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"> </span><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;">http://www.pader-sync.com/LWUITList.apk<o:p></o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><br />
</span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal" style="line-height: 12.75pt; margin-bottom: 0.0001pt;"><span style="color: #2c2c2c; font-family: Verdana,sans-serif; font-size: 9pt;"><o:p> </o:p></span></div><div class="MsoNormal"><b><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: medium;">Source:</span></span></b><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: medium;"> http://www.pader-sync.com/lwuit-for-blackberry-and-android.html</span></span></div><div class="MsoNormal"><span class="Apple-style-span" style="font-size: medium;">____________________________________________________________________</span></div><div class="MsoNormal"><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: medium;">If you need</span><span class="Apple-style-span" style="font-size: small;"> </span></span><a href="http://www.symbyo.com/"><span class="Apple-style-span" style="font-size: small;">Software outsourcing Company</span></a><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: medium;"> Contuct Us</span></span></div><div class="MsoNormal"><a href="http://www.symbyo.com/microsoft-dot-net/"><span class="Apple-style-span" style="font-size: small;">.net outsourcing</span></a></div><div class="MsoNormal"><a href="http://www.symbyo.com/PHP/"><span class="Apple-style-span" style="font-size: small;">PHP outsourcing</span></a></div><div class="MsoNormal"><span class="Apple-style-span" style="font-size: small;"><br />
</span></div></div><br />
<a href="http://www.technorati.com/tags/Lwuit" rel="tag">Lwuit</a>,<a href="http://www.technorati.com/tags/Lwuit+for+Android" rel="tag">Lwuit for Android</a>,<a href="http://www.technorati.com/tags/Lwuit+for+Android" rel="tag">Lwuit for Android</a>,<a href="http://www.technorati.com/tags/%20LWUIT+programmers" rel="tag"> LWUIT programmers</a>,<a href="http://www.technorati.com/tags/%20blackberry" rel="tag"> blackberry</a><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-53938096659221841952010-09-07T04:53:00.000-07:002011-07-10T06:25:27.589-07:00Oracle Taps Mark Hurd; Shares Higher<div dir="ltr" style="text-align: left;" trbidi="on"><b>Oracle</b><span class="TICKERFLAT">(ORCL)</span> named former <b>Hewlett-Packard </b><span class="TICKERFLAT">(HP)</span> CEO Mark Hurd as co-president, a month after Hurd quit HP because of a sexual harassment investigation.<br />
<br />
In premarket trading Tuesday, Oracle shares were trading at $23.24 after closing Friday at $22.92. There was no premarket activity for HP shares. <br />
Oracle CEO Larry Ellison came to Hurd's defense when the sexual harassment allegations first surfaced. In a press release Monday, he continued his praise for Hurd. <br />
"Mark did a brilliant job at HP and I expect he'll do even better at Oracle," Ellison said in a statement. "There is no executive in the IT world with more relevant experience than Mark. Oracle's future is engineering complete and integrated hardware and software systems for the enterprise. Mark pioneered the integration of hardware with software when Teradata was a part of NCR." <br />
Hurd will serve as a member of Oracle's board and will report to Ellison. <br />
Oracle also said Charles Phillips, who had been with the company for seven years, resigned his position as co-president. Safra Catz is staying at Oracle as a co-president.</div><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-30558483834690844932010-08-25T01:11:00.000-07:002011-07-10T06:25:54.383-07:00Windows DLL load hijacking exploits go wild<div dir="ltr" style="text-align: left;" trbidi="on"><span id="articleText"><span class="focusParagraph">Less than 24 hours after Microsoft said it couldn't patch Windows to fix a systemic problem, attack code appeared Tuesday to exploit the company's software.</span></span><br />
<span id="articleText"><span class="focusParagraph"><br />
</span><span id="midArticle_0"></span>Also on Tuesday, a security firm that's been researching the issue for the last nine months said 41 of Microsoft's own programs can be remotely exploited using DLL load hijacking, and named two of them.<br />
<span id="midArticle_1"></span>On Monday, Microsoft confirmed reports of unpatched -- or zero-day -- vulnerabilities in a large number of Windows programs, then published a tool it said would block known attacks. At the same time, the company said it would not patch Windows because doing so would cripple existing applications.<br />
<span id="midArticle_2"></span>Microsoft also declined to say whether any of its own applications contain bugs that attackers could exploit, saying only that it is investigating.<br />
<span id="midArticle_3"></span>Many Windows applications don't call code libraries -- dubbed "dynamic-link library," or "DLL" -- using the full pathname, but instead use only the filename, giving hackers wiggle room that they can then exploit by tricking the application into loading a malicious file with the same name as a required DLL.<br />
<span id="midArticle_4"></span>If attackers can dupe users into visiting malicious Web sites or remote shares, or get them to plug in a USB drive -- and in some cases con them into opening a file -- they can hijack the PC and plant malware on the machine.<br />
<span id="midArticle_5"></span>By Tuesday, at least four exploits of what some call "binary planting" attacks, others dub "DLL load hijacking" attacks, had been published to a well-known hacker site. Two of the exploits targeted Microsoft-made software, including PowerPoint 2010, the presentation maker in Office 2010, and Windows Live Mail, a free e-mail client bundled with Vista but available as a free download for Windows 7 customers.<br />
<span id="midArticle_6"></span>Other exploits aimed at leveraging DLL load hijacking bugs in uTorrent and Wireshark, a BitTorrent client and network protocol analyzer, respectively.<br />
<span id="midArticle_7"></span>At the same time, a Slovenian security company claimed that it reported bugs in two Microsoft-made programs last March.<br />
<span id="midArticle_8"></span>"We're going to publish a list of the vulnerable apps we found sometime soon," said Mitja Kolsek, the CEO of Acros Security. "However, since HD Moore's toolkit is already being used for finding vulnerable apps and at this point hundreds of good and bad guys already know about it, I can say that the two we fully-disclosed to Microsoft were in Windows Address Book/Windows Contacts and Windows Program Manager Group Converter.<br />
<span id="midArticle_9"></span>HD Moore is the American researcher who kicked off a small wave of DLL load hijacking reports last week when announced he had found 40 vulnerable Windows applications . On Monday, Moore published an auditing tool that others can use to detect vulnerable software. When combined with an exploit added that same day to Metasploit, the open-source hacking toolkit that Moore authored, the tool's results produce what he called a "point-and-shoot" attack .<br />
<span id="midArticle_10"></span>All four of the exploits that went public Tuesday appear to be based on Moore's Metasploit attack code.<br />
<span id="midArticle_11"></span>Although the Windows Address Book -- renamed Windows Contacts with the launch of Vista in 2007 -- may be familiar to users, Program Manager Group Converter is probably not, Kolsek admitted. But both can be exploited.<br />
<span id="midArticle_12"></span>"They're part of every Windows installation and are associated with certain file extensions, allowing for 'double-click-bang' remote attacks," Kolsek said. "To increase the likelihood of success, an attacker can create a shortcut with a PDF or Word document icon pointing to such files, which otherwise have different, less familiar icons."<br />
<span id="midArticle_13"></span>Contrary to Kolsek's claim, Program Manager Group Converter, a holdover from pre-Windows 95 days, is included with Windows XP, but not with Vista or Windows 7.<br />
<span id="midArticle_14"></span>Altogether, Acros uncovered 121 remote execution vulnerabilities in 41 different Microsoft applications, but reported details of only the pair in Address Book/Contacts and Program Manager Group Converter. The rest were left for Microsoft's own researchers to find, said Kolsek.<br />
<span id="midArticle_15"></span>Like a number of other companies, notably the French firm Vupen Security, Acros has decided that it will no longer report its vulnerability discoveries to vendors without compensation. "We've been giving them away for 10 years now," said Kolsek, "and it wasn't doing anything for us."<br />
<span id="midArticle_0"></span>In a long post to a new Acros blog , Kolsek added that there was no bad blood between his company and Microsoft over the former's refusal to identify 119 bugs in the latter's products. "It was a mere incompatibility of business interests," he said.<br />
<span id="midArticle_1"></span>Wireshark's lead developer, Gerald Combs, said today that a fix for the DLL load hijacking bug would be released in the next few days. Microsoft and BitTorrent, the firm responsible for uTorrent, did not reply to requests for comment about their patching plans.<br />
<span id="midArticle_2"></span>Gregg Keizer covers Microsoft, security issues, Apple, Web browsers and general technology breaking news for Computerworld. Follow Gregg on Twitter at @gkeizer or subscribe to Gregg's RSS feed . His e-mail address is gkeizer@ix.netcom.com .<br />
<span id="midArticle_3"></span>Read more about security in Computerworld's Security Topic Center.</span></div><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-189574067630205411.post-67600571694546145642010-08-24T01:13:00.000-07:002011-06-19T05:53:54.918-07:00Open source Qbo bot makes the jump to ROS, the open source robot OS<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9zVSDzbDFaqEE1LVA3fAAmv2Yki17-vwfstBF13eBcPcjjbAzS1o3ENDKBZaBTHU2qHTG6JRGTb_ghU30zvJ49vLvfNHpPdkvC_2jZFBmiLTuluNM2h-zZFTHjrT1E9d6V6o2u_6aBY8/s1600/qbo-full-20100521-250.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9zVSDzbDFaqEE1LVA3fAAmv2Yki17-vwfstBF13eBcPcjjbAzS1o3ENDKBZaBTHU2qHTG6JRGTb_ghU30zvJ49vLvfNHpPdkvC_2jZFBmiLTuluNM2h-zZFTHjrT1E9d6V6o2u_6aBY8/s320/qbo-full-20100521-250.jpg" width="226" /></a></div>While the Willow Garage-initiated ROS is designed to consolidate and accelerate robotics innovation for the long term, it's still a long ways from powering your robotic butler / life coach / best friend, so it's exciting to see it put to use in the here and now. The folks at Thecorpora, responsible for the Qbo open source robot project, have been busy converting Qbo's original Java API into ROS, and just announced they're at 99.9 percent completion of that task.<br />
<br />
That means the Qbo gets instant access to some of the fun development going on in ROS, like stacking all its cameras and ultrasonic sensors into a system for machine vision, or controlling the bot with a Wiimote or a PS3 controller. (There's a video after the break of the Wiimote in action). Don't think Qbo will be powerful enough for you? Willow Garage just announced that it's about to put its own ROS-powered PR2 bot on sale soon, after a few months of its (highly successful) PR2 Beta Program.<br />
<div style="text-align: center;"><object height="385" width="640"><param name="movie" value="http://www.youtube.com/v/dNAQqBfg2i8&color1=0xb1b1b1&color2=0xd0d0d0&hl=en_US&feature=player_embedded&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/dNAQqBfg2i8&color1=0xb1b1b1&color2=0xd0d0d0&hl=en_US&feature=player_embedded&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="385"></embed></object> </div></div><div class="blogger-post-footer">Symbyo Technologies is a Global offshore software development outsourcing company offering Asp.net Outsourcing, Oracle Outsourcing, Websphere consulting and Java Outsourcing services through our Global Delivery Model and Centers of Excellence.</div>Unknownnoreply@blogger.com0