<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-12418853</id><updated>2026-06-05T13:01:55.340+05:00</updated><category term="Linux"/><category term="Ubuntu"/><category term="Proxy"/><category term="Red Hat"/><category term="Virtualization"/><category term="Windows"/><category term="Educational Software"/><category term="Firefox"/><category term="FreeBSD"/><category term="Information Technology"/><category term="MySQL"/><category term="Operating System"/><category term="PHP"/><category term="Python"/><category term="UML"/><category term="Virtual Machine"/><category term="WebServers"/><category term="regular expression"/><category term="Apache"/><category term="Assembly Language"/><category term="Battery Life"/><category term="CMS"/><category term="Class Diagrams"/><category term="Cloud Computing"/><category term="Company"/><category term="Containers"/><category term="Content Management System"/><category term="Dell"/><category term="Desktop Sharing"/><category term="Docker"/><category term="Drupal"/><category term="EE"/><category term="Edubuntu"/><category term="Educational Games"/><category term="Energy"/><category term="Enterprise Edition"/><category term="Evolution"/><category term="GNOME"/><category term="Gentoo"/><category term="Hibernate"/><category term="Installation"/><category term="Java"/><category term="Joomla"/><category term="KDE"/><category term="Kubernetes"/><category term="LAMP"/><category term="LISP"/><category term="LTSP"/><category term="Latex"/><category term="Linux Editor"/><category term="MULTICS"/><category term="Multivariate Distribution"/><category term="Normal Distribution"/><category term="Numerical Computation"/><category term="Octave"/><category term="Performance"/><category term="Probability"/><category term="Programming"/><category term="Publishing"/><category term="SVN"/><category term="System Programming"/><category term="Terminal"/><category term="Tex"/><category term="Umbrello"/><category term="Unix"/><category term="Update Manager"/><category term="VMware Player"/><category term="Visio"/><category term="Vostro 1500"/><category term="Web Hosting"/><category term="Wireless"/><category term="emacs"/><category term="explode"/><category term="grep"/><category term="repository"/><category term="string parsing"/><title type='text'>Zahid&#39;s OpenMinded Tech</title><subtitle type='html'>Exploring the intersection of Linux systems and Artificial Intelligence. &lt;br&gt;Tutorials, tips, and insights for the open-minded developer.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>44</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-12418853.post-7317009525316056897</id><published>2026-05-09T15:13:00.000+05:00</published><updated>2026-05-09T15:13:37.194+05:00</updated><title type='text'>React’s Latest Avatar</title><content type='html'>&lt;p&gt;The story of modern frontend development cannot be told without talking about &lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;React&lt;/span&gt;. More than just a JavaScript library, React fundamentally changed how developers think about user interfaces. It introduced concepts that became industry standards, inspired competing frameworks, and eventually evolved into a massive ecosystem that powers much of today’s web.&lt;/p&gt;&lt;div class=&quot;&quot; data-is-intersecting=&quot;true&quot; data-turn-id-container=&quot;request-WEB:48734f10-2ccb-4926-b8ed-ffca638eab1b-27&quot;&gt;&lt;section class=&quot;text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&amp;amp;:has([data-writing-block])&amp;gt;*]:pointer-events-auto R6Vx5W_threadScrollVars scroll-mb-[calc(var(--scroll-root-safe-area-inset-bottom,0px)+var(--thread-response-height))] scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]&quot; data-scroll-anchor=&quot;false&quot; data-testid=&quot;conversation-turn-4&quot; data-turn-id=&quot;request-WEB:48734f10-2ccb-4926-b8ed-ffca638eab1b-27&quot; data-turn=&quot;assistant&quot; dir=&quot;auto&quot;&gt;&lt;div class=&quot;text-base my-auto mx-auto [--thread-content-margin:var(--thread-content-margin-xs,calc(var(--spacing)*4))] @w-sm/main:[--thread-content-margin:var(--thread-content-margin-sm,calc(var(--spacing)*6))] @w-lg/main:[--thread-content-margin:var(--thread-content-margin-lg,calc(var(--spacing)*16))] px-(--thread-content-margin)&quot;&gt;&lt;div class=&quot;[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn&quot;&gt;&lt;div class=&quot;flex max-w-full flex-col gap-4 grow&quot;&gt;&lt;div class=&quot;min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal outline-none keyboard-focused:focus-ring [.text-message+&amp;amp;]:mt-1&quot; data-message-author-role=&quot;assistant&quot; data-message-id=&quot;286563a9-223d-4bcb-9641-ec857ec81bba&quot; data-message-model-slug=&quot;gpt-5-5&quot; dir=&quot;auto&quot;&gt;&lt;div class=&quot;flex w-full flex-col gap-1 empty:hidden&quot;&gt;&lt;div class=&quot;markdown prose dark:prose-invert wrap-break-word w-full light markdown-new-styling&quot;&gt;
&lt;p data-end=&quot;562&quot; data-start=&quot;419&quot;&gt;But like every technology revolution, React went through phases: rise, dominance, overload, reinvention, and evolution into its newest avatar.&lt;/p&gt;
&lt;hr data-end=&quot;567&quot; data-start=&quot;564&quot; /&gt;
&lt;h2 data-end=&quot;590&quot; data-section-id=&quot;1rdymoh&quot; data-start=&quot;569&quot;&gt;The Birth of React&lt;/h2&gt;
&lt;p data-end=&quot;860&quot; data-start=&quot;592&quot;&gt;Before React arrived in 2013, frontend development was messy and difficult to scale. Most developers relied heavily on jQuery and direct DOM manipulation. As web applications became larger and more interactive, maintaining complex UI logic became increasingly painful. Inside &lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;Meta&lt;/span&gt;, engineers faced the same problem. They needed a better way to build dynamic interfaces that updated efficiently and remained maintainable as applications grew.&lt;/p&gt;
&lt;p data-end=&quot;1103&quot; data-start=&quot;1069&quot;&gt;That led to the creation of React.&lt;/p&gt;
&lt;p data-end=&quot;1154&quot; data-start=&quot;1105&quot;&gt;React introduced a simple but revolutionary idea:&lt;/p&gt;
&lt;blockquote data-end=&quot;1232&quot; data-start=&quot;1156&quot;&gt;
&lt;p data-end=&quot;1232&quot; data-start=&quot;1158&quot;&gt;The UI should automatically update whenever the application state changes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;1413&quot; data-start=&quot;1234&quot;&gt;Instead of manually manipulating HTML elements, developers could describe how the interface should look for a given state, and React would handle updating the browser efficiently.&lt;/p&gt;
&lt;p data-end=&quot;1459&quot; data-start=&quot;1415&quot;&gt;This was a major shift in frontend thinking.&lt;/p&gt;
&lt;hr data-end=&quot;1464&quot; data-start=&quot;1461&quot; /&gt;
&lt;h2 data-end=&quot;1498&quot; data-section-id=&quot;fv4qsa&quot; data-start=&quot;1466&quot;&gt;Components Changed Everything&lt;/h2&gt;
&lt;p data-end=&quot;1574&quot; data-start=&quot;1500&quot;&gt;One of React’s biggest innovations was the concept of reusable components. Before React, UI code was often fragmented across templates, controllers, and scripts. React unified everything into self-contained components. A button could now be written once and reused anywhere in the application. This component-based architecture quickly became the future of frontend development. Soon, almost every major framework adopted similar ideas:&lt;/p&gt;
&lt;ul data-end=&quot;2190&quot; data-start=&quot;1942&quot;&gt;
&lt;li data-end=&quot;2014&quot; data-section-id=&quot;pjs2gq&quot; data-start=&quot;1942&quot;&gt;
&lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;Angular&lt;/span&gt; embraced component architecture.
&lt;/li&gt;
&lt;li data-end=&quot;2095&quot; data-section-id=&quot;l8ow1u&quot; data-start=&quot;2015&quot;&gt;
&lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;Vue.js&lt;/span&gt; refined the concept with simpler syntax.
&lt;/li&gt;
&lt;li data-end=&quot;2190&quot; data-section-id=&quot;1j46r5m&quot; data-start=&quot;2096&quot;&gt;
&lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;Svelte&lt;/span&gt; pushed the model further by removing runtime overhead.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2267&quot; data-start=&quot;2192&quot;&gt;React became the trendsetter that influenced the entire frontend ecosystem.&lt;/p&gt;
&lt;hr data-end=&quot;2272&quot; data-start=&quot;2269&quot; /&gt;
&lt;h2 data-end=&quot;2305&quot; data-section-id=&quot;1o8tz7g&quot; data-start=&quot;2274&quot;&gt;The Rise of State Management&lt;/h2&gt;
&lt;p data-end=&quot;2393&quot; data-start=&quot;2307&quot;&gt;As applications became more complex, managing data across components became difficult.&lt;/p&gt;
&lt;p data-end=&quot;2564&quot; data-start=&quot;2395&quot;&gt;React initially handled state locally within components, which worked well for smaller applications. But larger apps needed centralized and predictable state management.&lt;/p&gt;
&lt;p data-end=&quot;2628&quot; data-start=&quot;2566&quot;&gt;This led to the rise of &lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;Redux&lt;/span&gt;.&lt;/p&gt;
&lt;p data-end=&quot;2647&quot; data-start=&quot;2630&quot;&gt;Redux introduced:&lt;/p&gt;
&lt;ul data-end=&quot;2751&quot; data-start=&quot;2648&quot;&gt;
&lt;li data-end=&quot;2671&quot; data-section-id=&quot;1ozt1xj&quot; data-start=&quot;2648&quot;&gt;
a single global store
&lt;/li&gt;
&lt;li data-end=&quot;2697&quot; data-section-id=&quot;8nfl6n&quot; data-start=&quot;2672&quot;&gt;
immutable state updates
&lt;/li&gt;
&lt;li data-end=&quot;2720&quot; data-section-id=&quot;1ykijgv&quot; data-start=&quot;2698&quot;&gt;
reducers and actions
&lt;/li&gt;
&lt;li data-end=&quot;2751&quot; data-section-id=&quot;n3s53&quot; data-start=&quot;2721&quot;&gt;
predictable application flow
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2839&quot; data-start=&quot;2753&quot;&gt;For several years, Redux became almost synonymous with professional React development. It brought structure and debugging power, but it also introduced significant complexity.&lt;/p&gt;
&lt;hr data-end=&quot;2934&quot; data-start=&quot;2931&quot; /&gt;
&lt;h2 data-end=&quot;2968&quot; data-section-id=&quot;1micxzx&quot; data-start=&quot;2936&quot;&gt;The Era of JavaScript Fatigue&lt;/h2&gt;
&lt;p data-end=&quot;3028&quot; data-start=&quot;2970&quot;&gt;Around 2017–2020, the React ecosystem became overwhelming.&lt;/p&gt;
&lt;p data-end=&quot;3097&quot; data-start=&quot;3030&quot;&gt;Developers no longer used “just React.” Instead, they often needed:&lt;/p&gt;
&lt;ul data-end=&quot;3240&quot; data-start=&quot;3098&quot;&gt;
&lt;li data-end=&quot;3105&quot; data-section-id=&quot;179haax&quot; data-start=&quot;3098&quot;&gt;
React
&lt;/li&gt;
&lt;li data-end=&quot;3113&quot; data-section-id=&quot;179h5va&quot; data-start=&quot;3106&quot;&gt;
Redux
&lt;/li&gt;
&lt;li data-end=&quot;3128&quot; data-section-id=&quot;h9kepu&quot; data-start=&quot;3114&quot;&gt;
React Router
&lt;/li&gt;
&lt;li data-end=&quot;3138&quot; data-section-id=&quot;5lx7j5&quot; data-start=&quot;3129&quot;&gt;
Webpack
&lt;/li&gt;
&lt;li data-end=&quot;3146&quot; data-section-id=&quot;16y3crk&quot; data-start=&quot;3139&quot;&gt;
Babel
&lt;/li&gt;
&lt;li data-end=&quot;3159&quot; data-section-id=&quot;3kl673&quot; data-start=&quot;3147&quot;&gt;
TypeScript
&lt;/li&gt;
&lt;li data-end=&quot;3167&quot; data-section-id=&quot;16oi7js&quot; data-start=&quot;3160&quot;&gt;
Hooks
&lt;/li&gt;
&lt;li data-end=&quot;3189&quot; data-section-id=&quot;1j7pulo&quot; data-start=&quot;3168&quot;&gt;
CSS-in-JS libraries
&lt;/li&gt;
&lt;li data-end=&quot;3210&quot; data-section-id=&quot;ic5rf5&quot; data-start=&quot;3190&quot;&gt;
testing frameworks
&lt;/li&gt;
&lt;li data-end=&quot;3240&quot; data-section-id=&quot;hk9e2o&quot; data-start=&quot;3211&quot;&gt;
state management middleware
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;3334&quot; data-start=&quot;3242&quot;&gt;A simple project suddenly required dozens of decisions before writing actual business logic. This period became known as “JavaScript fatigue.” React itself was still powerful, but the ecosystem had grown too fragmented and complicated. Many developers began looking for alternatives.&lt;/p&gt;
&lt;hr data-end=&quot;3533&quot; data-start=&quot;3530&quot; /&gt;
&lt;h2 data-end=&quot;3571&quot; data-section-id=&quot;1uucvou&quot; data-start=&quot;3535&quot;&gt;VueJS and the Simplicity Movement&lt;/h2&gt;
&lt;p data-end=&quot;3658&quot; data-start=&quot;3573&quot;&gt;During this period, &lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;Vue.js&lt;/span&gt; gained enormous popularity.&lt;/p&gt;
&lt;p data-end=&quot;3720&quot; data-start=&quot;3660&quot;&gt;Vue adopted many of React’s successful ideas while offering:&lt;/p&gt;
&lt;ul data-end=&quot;3802&quot; data-start=&quot;3721&quot;&gt;
&lt;li data-end=&quot;3737&quot; data-section-id=&quot;1l7t9x9&quot; data-start=&quot;3721&quot;&gt;
simpler syntax
&lt;/li&gt;
&lt;li data-end=&quot;3761&quot; data-section-id=&quot;4ufepu&quot; data-start=&quot;3738&quot;&gt;
easier learning curve
&lt;/li&gt;
&lt;li data-end=&quot;3783&quot; data-section-id=&quot;16sh4hq&quot; data-start=&quot;3762&quot;&gt;
built-in reactivity
&lt;/li&gt;
&lt;li data-end=&quot;3802&quot; data-section-id=&quot;1brdieq&quot; data-start=&quot;3784&quot;&gt;
less boilerplate
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;3895&quot; data-start=&quot;3804&quot;&gt;Vue demonstrated that developers wanted simplicity and productivity as much as flexibility. React inspired Vue architecturally, but Vue also influenced the broader frontend ecosystem by encouraging simpler developer experiences.&lt;/p&gt;
&lt;hr data-end=&quot;4038&quot; data-start=&quot;4035&quot; /&gt;
&lt;h2 data-end=&quot;4064&quot; data-section-id=&quot;1c3ntek&quot; data-start=&quot;4040&quot; style=&quot;text-align: left;&quot;&gt;Next.js Revives React&lt;/h2&gt;
&lt;p data-end=&quot;4143&quot; data-start=&quot;4066&quot;&gt;The true revival of React came through &lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;Next.js&lt;/span&gt;.&lt;/p&gt;
&lt;p data-end=&quot;4243&quot; data-start=&quot;4145&quot;&gt;React was originally designed only as a UI library. It intentionally avoided handling things like:&lt;/p&gt;
&lt;ul data-end=&quot;4335&quot; data-start=&quot;4244&quot;&gt;
&lt;li data-end=&quot;4253&quot; data-section-id=&quot;bsvbck&quot; data-start=&quot;4244&quot;&gt;
routing
&lt;/li&gt;
&lt;li data-end=&quot;4277&quot; data-section-id=&quot;vvowj5&quot; data-start=&quot;4254&quot;&gt;
server-side rendering
&lt;/li&gt;
&lt;li data-end=&quot;4283&quot; data-section-id=&quot;1o4r69&quot; data-start=&quot;4278&quot;&gt;
SEO
&lt;/li&gt;
&lt;li data-end=&quot;4298&quot; data-section-id=&quot;ogclun&quot; data-start=&quot;4284&quot;&gt;
API handling
&lt;/li&gt;
&lt;li data-end=&quot;4311&quot; data-section-id=&quot;h9riep&quot; data-start=&quot;4299&quot;&gt;
deployment
&lt;/li&gt;
&lt;li data-end=&quot;4335&quot; data-section-id=&quot;d7hz3b&quot; data-start=&quot;4312&quot;&gt;
application structure
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;4410&quot; data-start=&quot;4337&quot;&gt;Next.js solved these problems by turning React into a complete framework.&lt;/p&gt;
&lt;p data-end=&quot;4426&quot; data-start=&quot;4412&quot;&gt;It introduced:&lt;/p&gt;
&lt;ul data-end=&quot;4562&quot; data-start=&quot;4427&quot;&gt;
&lt;li data-end=&quot;4447&quot; data-section-id=&quot;exdt2m&quot; data-start=&quot;4427&quot;&gt;
file-based routing
&lt;/li&gt;
&lt;li data-end=&quot;4471&quot; data-section-id=&quot;vvowj5&quot; data-start=&quot;4448&quot;&gt;
server-side rendering
&lt;/li&gt;
&lt;li data-end=&quot;4496&quot; data-section-id=&quot;8p2rj1&quot; data-start=&quot;4472&quot;&gt;
static site generation
&lt;/li&gt;
&lt;li data-end=&quot;4509&quot; data-section-id=&quot;1b985p6&quot; data-start=&quot;4497&quot;&gt;
API routes
&lt;/li&gt;
&lt;li data-end=&quot;4530&quot; data-section-id=&quot;1foanji&quot; data-start=&quot;4510&quot;&gt;
image optimization
&lt;/li&gt;
&lt;li data-end=&quot;4562&quot; data-section-id=&quot;1iofx7f&quot; data-start=&quot;4531&quot;&gt;
built-in performance features
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;4610&quot; data-start=&quot;4564&quot;&gt;Most importantly, it reduced decision fatigue. Developers no longer had to manually configure everything from scratch. This transformed React development completely. Today, many developers no longer build “React apps.” They build “Next.js apps.”&lt;/p&gt;
&lt;hr data-end=&quot;4817&quot; data-start=&quot;4814&quot; /&gt;
&lt;h2 data-end=&quot;4843&quot; data-section-id=&quot;1q5fcf8&quot; data-start=&quot;4819&quot;&gt;React’s Latest Avatar&lt;/h2&gt;
&lt;p data-end=&quot;4887&quot; data-start=&quot;4845&quot;&gt;Modern React now exists in multiple forms.&lt;/p&gt;
&lt;h3 data-end=&quot;4906&quot; data-section-id=&quot;1ecaiie&quot; data-start=&quot;4889&quot;&gt;Vanilla React&lt;/h3&gt;
&lt;p data-end=&quot;4971&quot; data-start=&quot;4908&quot;&gt;Pure &lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;React&lt;/span&gt; is still useful for:&lt;/p&gt;
&lt;ul data-end=&quot;5038&quot; data-start=&quot;4972&quot;&gt;
&lt;li data-end=&quot;4984&quot; data-section-id=&quot;10x8ovz&quot; data-start=&quot;4972&quot;&gt;
dashboards
&lt;/li&gt;
&lt;li data-end=&quot;4994&quot; data-section-id=&quot;3y4d93&quot; data-start=&quot;4985&quot;&gt;
widgets
&lt;/li&gt;
&lt;li data-end=&quot;5011&quot; data-section-id=&quot;1biamkk&quot; data-start=&quot;4995&quot;&gt;
internal tools
&lt;/li&gt;
&lt;li data-end=&quot;5038&quot; data-section-id=&quot;7goj33&quot; data-start=&quot;5012&quot;&gt;
lightweight applications
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;5132&quot; data-start=&quot;5040&quot;&gt;It offers flexibility and full control, but developers must assemble many pieces themselves.&lt;/p&gt;
&lt;hr data-end=&quot;5137&quot; data-start=&quot;5134&quot; /&gt;
&lt;h3 data-end=&quot;5177&quot; data-section-id=&quot;ztyyy0&quot; data-start=&quot;5139&quot;&gt;Next.js: The Dominant Modern Form&lt;/h3&gt;
&lt;p data-end=&quot;5268&quot; data-start=&quot;5179&quot;&gt;&lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;Next.js&lt;/span&gt; has become the most widely adopted React framework. It provides:&lt;/p&gt;
&lt;ul data-end=&quot;5404&quot; data-start=&quot;5283&quot;&gt;
&lt;li data-end=&quot;5306&quot; data-section-id=&quot;yy50b8&quot; data-start=&quot;5283&quot;&gt;
excellent performance
&lt;/li&gt;
&lt;li data-end=&quot;5325&quot; data-section-id=&quot;g527k7&quot; data-start=&quot;5307&quot;&gt;
server rendering
&lt;/li&gt;
&lt;li data-end=&quot;5349&quot; data-section-id=&quot;1zgwei&quot; data-start=&quot;5326&quot;&gt;
scalable architecture
&lt;/li&gt;
&lt;li data-end=&quot;5377&quot; data-section-id=&quot;13aq6d1&quot; data-start=&quot;5350&quot;&gt;
production-ready defaults
&lt;/li&gt;
&lt;li data-end=&quot;5404&quot; data-section-id=&quot;8ooltk&quot; data-start=&quot;5378&quot;&gt;
strong ecosystem support
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;5500&quot; data-start=&quot;5406&quot;&gt;For large modern applications, Next.js is currently considered the primary evolution of React.&lt;/p&gt;
&lt;hr data-end=&quot;5505&quot; data-start=&quot;5502&quot; /&gt;
&lt;h3 data-end=&quot;5543&quot; data-section-id=&quot;tf0por&quot; data-start=&quot;5507&quot;&gt;Remix: A Web-Native Alternative&lt;/h3&gt;
&lt;p data-end=&quot;5616&quot; data-start=&quot;5545&quot;&gt;&lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;Remix&lt;/span&gt; offers another modern approach. It focuses heavily on:&lt;/p&gt;
&lt;ul data-end=&quot;5732&quot; data-start=&quot;5641&quot;&gt;
&lt;li data-end=&quot;5656&quot; data-section-id=&quot;1pk3t8w&quot; data-start=&quot;5641&quot;&gt;
web standards
&lt;/li&gt;
&lt;li data-end=&quot;5681&quot; data-section-id=&quot;sopq5s&quot; data-start=&quot;5657&quot;&gt;
server-first rendering
&lt;/li&gt;
&lt;li data-end=&quot;5707&quot; data-section-id=&quot;k80ul3&quot; data-start=&quot;5682&quot;&gt;
progressive enhancement
&lt;/li&gt;
&lt;li data-end=&quot;5732&quot; data-section-id=&quot;cbyt47&quot; data-start=&quot;5708&quot;&gt;
efficient data loading
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;5852&quot; data-start=&quot;5734&quot;&gt;Many developers appreciate Remix for simplifying concepts that became overly abstract in traditional React ecosystems.&lt;/p&gt;
&lt;hr data-end=&quot;5857&quot; data-start=&quot;5854&quot; /&gt;
&lt;h3 data-end=&quot;5895&quot; data-section-id=&quot;17xvdt4&quot; data-start=&quot;5859&quot;&gt;Server Components and the Future&lt;/h3&gt;
&lt;p data-end=&quot;5983&quot; data-start=&quot;5897&quot;&gt;React is now moving toward server-driven architecture through React Server Components. This approach allows parts of the UI to render on the server instead of entirely in the browser. The future React application increasingly combines:&lt;/p&gt;
&lt;ul data-end=&quot;6198&quot; data-start=&quot;6135&quot;&gt;
&lt;li data-end=&quot;6153&quot; data-section-id=&quot;g527k7&quot; data-start=&quot;6135&quot;&gt;
server rendering
&lt;/li&gt;
&lt;li data-end=&quot;6170&quot; data-section-id=&quot;15wq5cr&quot; data-start=&quot;6154&quot;&gt;
edge computing
&lt;/li&gt;
&lt;li data-end=&quot;6198&quot; data-section-id=&quot;6v0s7i&quot; data-start=&quot;6171&quot;&gt;
client-side interactivity
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;6289&quot; data-start=&quot;6200&quot;&gt;React is evolving beyond being just a frontend library into a broader rendering platform.&lt;/p&gt;
&lt;hr data-end=&quot;6294&quot; data-start=&quot;6291&quot; /&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;So, What Is the Best Avatar Today?&lt;/h2&gt;
&lt;p data-end=&quot;6393&quot; data-start=&quot;6334&quot;&gt;The answer depends on the project and developer priorities.&lt;/p&gt;
&lt;h3 data-end=&quot;6426&quot; data-section-id=&quot;yqpq9d&quot; data-start=&quot;6395&quot;&gt;Choose Next.js if you want:&lt;/h3&gt;
&lt;ul data-end=&quot;6536&quot; data-start=&quot;6427&quot;&gt;
&lt;li data-end=&quot;6458&quot; data-section-id=&quot;1ciefnl&quot; data-start=&quot;6427&quot;&gt;
enterprise-scale applications
&lt;/li&gt;
&lt;li data-end=&quot;6477&quot; data-section-id=&quot;g3o1f4&quot; data-start=&quot;6459&quot;&gt;
SEO optimization
&lt;/li&gt;
&lt;li data-end=&quot;6509&quot; data-section-id=&quot;10saxqw&quot; data-start=&quot;6478&quot;&gt;
production-ready architecture
&lt;/li&gt;
&lt;li data-end=&quot;6536&quot; data-section-id=&quot;8ooltk&quot; data-start=&quot;6510&quot;&gt;
strong ecosystem support
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;6567&quot; data-section-id=&quot;1gqhj6m&quot; data-start=&quot;6538&quot;&gt;Choose VueJS if you want:&lt;/h3&gt;
&lt;ul data-end=&quot;6635&quot; data-start=&quot;6568&quot;&gt;
&lt;li data-end=&quot;6580&quot; data-section-id=&quot;1awaswd&quot; data-start=&quot;6568&quot;&gt;
simplicity
&lt;/li&gt;
&lt;li data-end=&quot;6604&quot; data-section-id=&quot;1oyifp8&quot; data-start=&quot;6581&quot;&gt;
faster learning curve
&lt;/li&gt;
&lt;li data-end=&quot;6635&quot; data-section-id=&quot;1kf90vk&quot; data-start=&quot;6605&quot;&gt;
elegant developer experience
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;6667&quot; data-section-id=&quot;18ndiyk&quot; data-start=&quot;6637&quot;&gt;Choose Svelte if you want:&lt;/h3&gt;
&lt;ul data-end=&quot;6753&quot; data-start=&quot;6668&quot;&gt;
&lt;li data-end=&quot;6689&quot; data-section-id=&quot;1g8lpnc&quot; data-start=&quot;6668&quot;&gt;
maximum performance
&lt;/li&gt;
&lt;li data-end=&quot;6716&quot; data-section-id=&quot;1cr4zpt&quot; data-start=&quot;6690&quot;&gt;
minimal runtime overhead
&lt;/li&gt;
&lt;li data-end=&quot;6753&quot; data-section-id=&quot;11im6sd&quot; data-start=&quot;6717&quot;&gt;
modern compiler-based architecture
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;6792&quot; data-section-id=&quot;1lnxi5t&quot; data-start=&quot;6755&quot;&gt;Choose Vanilla React if you want:&lt;/h3&gt;
&lt;ul data-end=&quot;6872&quot; data-start=&quot;6793&quot;&gt;
&lt;li data-end=&quot;6815&quot; data-section-id=&quot;1n63hoc&quot; data-start=&quot;6793&quot;&gt;
complete flexibility
&lt;/li&gt;
&lt;li data-end=&quot;6840&quot; data-section-id=&quot;5hzfvx&quot; data-start=&quot;6816&quot;&gt;
lightweight UI control
&lt;/li&gt;
&lt;li data-end=&quot;6872&quot; data-section-id=&quot;1bpb2y5&quot; data-start=&quot;6841&quot;&gt;
custom architecture decisions
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;6877&quot; data-start=&quot;6874&quot; /&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;Final Thoughts&lt;/h2&gt;
&lt;p data-end=&quot;6960&quot; data-start=&quot;6897&quot;&gt;React’s biggest contribution was not simply Virtual DOM or JSX.&lt;/p&gt;
&lt;p data-end=&quot;7029&quot; data-start=&quot;6962&quot;&gt;Its real impact was changing how developers think about interfaces.&lt;/p&gt;
&lt;p data-end=&quot;7044&quot; data-start=&quot;7031&quot;&gt;Before React:&lt;/p&gt;
&lt;ul data-end=&quot;7091&quot; data-start=&quot;7045&quot;&gt;
&lt;li data-end=&quot;7091&quot; data-section-id=&quot;hjauq3&quot; data-start=&quot;7045&quot;&gt;
developers manually manipulated UI elements.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;7105&quot; data-start=&quot;7093&quot;&gt;After React:&lt;/p&gt;
&lt;ul data-end=&quot;7161&quot; data-start=&quot;7106&quot;&gt;
&lt;li data-end=&quot;7161&quot; data-section-id=&quot;1tvg16e&quot; data-start=&quot;7106&quot;&gt;
developers described UI declaratively based on state.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;7234&quot; data-start=&quot;7163&quot;&gt;Almost every modern frontend framework today carries React’s influence:&lt;/p&gt;
&lt;ul data-end=&quot;7322&quot; data-start=&quot;7235&quot;&gt;
&lt;li data-end=&quot;7256&quot; data-section-id=&quot;1265627&quot; data-start=&quot;7235&quot;&gt;
reusable components
&lt;/li&gt;
&lt;li data-end=&quot;7278&quot; data-section-id=&quot;16jh679&quot; data-start=&quot;7257&quot;&gt;
reactive interfaces
&lt;/li&gt;
&lt;li data-end=&quot;7302&quot; data-section-id=&quot;1td3w7k&quot; data-start=&quot;7279&quot;&gt;
declarative rendering
&lt;/li&gt;
&lt;li data-end=&quot;7322&quot; data-section-id=&quot;17nocbw&quot; data-start=&quot;7303&quot;&gt;
one-way data flow
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;7417&quot; data-start=&quot;7324&quot;&gt;Even frameworks competing against React are often responding to ideas React introduced first. That is why React remains one of the most influential technologies in web development history. Its latest avatar is no longer just a library. It is an ecosystem powered by frameworks like &lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;Next.js&lt;/span&gt;, inspired by the simplicity of &lt;span class=&quot;hover:entity-accent entity-underline inline cursor-pointer align-baseline&quot;&gt;Vue.js&lt;/span&gt;, and evolving toward a future driven by server-side intelligence and distributed rendering.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/7317009525316056897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/7317009525316056897' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/7317009525316056897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/7317009525316056897'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2026/05/reacts-latest-avatar.html' title='React’s Latest Avatar'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-7419763871028563088</id><published>2026-04-27T17:19:00.002+05:00</published><updated>2026-04-27T17:19:33.819+05:00</updated><title type='text'>Why LaTeX Is Still Good (or Not) in 2026 for Students</title><content type='html'>&lt;p&gt;If you’ve ever written a math assignment, research paper, or thesis, chances are you’ve heard of LaTeX. But in 2026, when AI tools, Google Docs, and modern writing apps dominate, the question is more relevant than ever:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is LaTeX still worth learning for students?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The answer isn’t a simple yes or no. It depends on what you study, how you work, and what you value. Let’s break it down.&lt;/p&gt;

&lt;hr&gt;

&lt;h2&gt;What Makes LaTeX Different?&lt;/h2&gt;

&lt;p&gt;LaTeX isn’t like Word or Google Docs. Instead of formatting text visually, you write code that describes the structure of your document.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;\section{Introduction}
This is your content.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;LaTeX then handles formatting automatically headings, spacing, numbering, and more.&lt;/p&gt;

&lt;hr&gt;

&lt;h2&gt;Why LaTeX Is Still Good in 2026&lt;/h2&gt;

&lt;h3&gt;1. Unmatched for Math and Science&lt;/h3&gt;
&lt;p&gt;If you&#39;re studying mathematics, physics, engineering, or computer science, LaTeX is still one of the best tools available.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;\[
E = mc^2
\]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Writing equations is cleaner and more professional compared to standard word processors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For STEM students, LaTeX is often expected.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;2. Professional, Publication-Quality Output&lt;/h3&gt;
&lt;p&gt;LaTeX produces documents that look polished by default:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Perfect spacing&lt;/li&gt;
  &lt;li&gt;Clean typography&lt;/li&gt;
  &lt;li&gt;Consistent formatting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is especially useful for research papers, dissertations, and academic submissions.&lt;/p&gt;

&lt;h3&gt;3. Handles Large Documents Effortlessly&lt;/h3&gt;
&lt;p&gt;LaTeX is ideal for long documents like theses and reports. It offers:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Automatic table of contents&lt;/li&gt;
  &lt;li&gt;Cross-referencing&lt;/li&gt;
  &lt;li&gt;Easy navigation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don’t have to manually fix formatting when content changes.&lt;/p&gt;

&lt;h3&gt;4. Better Citation Management&lt;/h3&gt;
&lt;p&gt;With tools like BibTeX, LaTeX makes referencing simple and efficient. You can:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Add a reference once&lt;/li&gt;
  &lt;li&gt;Reuse it throughout your document&lt;/li&gt;
  &lt;li&gt;Automatically format citations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modern tools can even generate citations from links or DOIs.&lt;/p&gt;

&lt;h3&gt;5. AI Has Made LaTeX Easier&lt;/h3&gt;
&lt;p&gt;In 2026, AI tools can:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Convert plain text into LaTeX&lt;/li&gt;
  &lt;li&gt;Fix syntax errors instantly&lt;/li&gt;
  &lt;li&gt;Suggest formatting and structure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This has significantly reduced the learning curve.&lt;/p&gt;

&lt;hr&gt;

&lt;h2&gt;Why LaTeX Might NOT Be Worth It&lt;/h2&gt;

&lt;h3&gt;1. Steeper Learning Curve&lt;/h3&gt;
&lt;p&gt;Even with AI, LaTeX still requires learning syntax and structure, which can take time.&lt;/p&gt;

&lt;h3&gt;2. Slower for Quick Assignments&lt;/h3&gt;
&lt;p&gt;For short essays or quick tasks, tools like Word or Google Docs are often faster and easier to use.&lt;/p&gt;

&lt;h3&gt;3. Collaboration Can Be Limited&lt;/h3&gt;
&lt;p&gt;Not everyone uses LaTeX, which can make group projects more difficult compared to shared document tools.&lt;/p&gt;

&lt;h3&gt;4. Not Ideal for Creative Layouts&lt;/h3&gt;
&lt;p&gt;LaTeX is designed for structured documents, not visual or design-heavy content.&lt;/p&gt;

&lt;hr&gt;

&lt;h2&gt;When Students SHOULD Use LaTeX&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Studying technical subjects (math, CS, engineering, physics)&lt;/li&gt;
  &lt;li&gt;Writing research papers regularly&lt;/li&gt;
  &lt;li&gt;Working on a thesis or dissertation&lt;/li&gt;
  &lt;li&gt;Needing precise formatting and citations&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;When Students Should Skip It&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Writing short or simple assignments&lt;/li&gt;
  &lt;li&gt;Preferring visual editing tools&lt;/li&gt;
  &lt;li&gt;Working on collaborative non-technical projects&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h2&gt;The Verdict: Is LaTeX Still Worth It in 2026?&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Yes, but not for everyone.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;LaTeX remains powerful and relevant, especially for technical students. With AI and modern tools, it’s now easier than ever to use.&lt;/p&gt;

&lt;p&gt;For general writing, however, simpler tools may be more practical.&lt;/p&gt;

&lt;hr&gt;

&lt;h2&gt;Final Thoughts&lt;/h2&gt;

&lt;p&gt;LaTeX isn’t outdated, it’s specialized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LaTeX = precision, structure, professionalism&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Word/Docs = speed, simplicity, convenience&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The best approach is simple: use the right tool for the right task.&lt;/p&gt;

&lt;hr&gt;

&lt;h2&gt;FAQ&lt;/h2&gt;

&lt;h3&gt;Is LaTeX still used in universities?&lt;/h3&gt;
&lt;p&gt;Yes, especially in STEM and research fields.&lt;/p&gt;

&lt;h3&gt;Can beginners learn LaTeX in 2026?&lt;/h3&gt;
&lt;p&gt;Yes. AI tools have made it much easier to learn.&lt;/p&gt;

&lt;h3&gt;Should I learn LaTeX as a student?&lt;/h3&gt;
&lt;p&gt;If you&#39;re in a technical field, it’s highly recommended. Otherwise, it’s optional.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/7419763871028563088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/7419763871028563088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/7419763871028563088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/7419763871028563088'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2026/04/why-latex-is-still-good-or-not-in-2026.html' title='Why LaTeX Is Still Good (or Not) in 2026 for Students'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-1680080914961153908</id><published>2026-04-16T02:01:00.000+05:00</published><updated>2026-04-16T02:01:14.798+05:00</updated><title type='text'>Regex in JavaScript: A Beautiful Nightmare</title><content type='html'>&lt;p&gt;As if regular expressions were not hard enough, using them with probably the most beautiful yet mysteriously complicated language—JavaScript—is really a tour de force.&lt;/p&gt;

&lt;p&gt;JavaScript is a language with a massive fan base, almost like Apple. It has many elegant features and even has a very popular book, &lt;i&gt;JavaScript: The Good Parts&lt;/i&gt; by Douglas Crockford, which showcases some of the best aspects of the language. But as anyone who has spent time with it knows, JavaScript also has a personality—quirky, flexible, and occasionally baffling.&lt;/p&gt;

&lt;p&gt;And when you mix that personality with regular expressions, you get something that can either feel like magic… or like deciphering an ancient script.&lt;/p&gt;

&lt;h3&gt;The Allure of Regular Expressions&lt;/h3&gt;

&lt;p&gt;Regular expressions (regex) are one of those tools that feel incredibly powerful once they “click.” They allow you to:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Validate input (emails, passwords, URLs)&lt;/li&gt;
  &lt;li&gt;Extract patterns from text&lt;/li&gt;
  &lt;li&gt;Perform complex search-and-replace operations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In theory, regex offers a concise and elegant way to describe patterns. In practice, it often looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;/^(?=.*[A-Z])(?=.*\d)[A-Za-z\d]{8,}$/&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To the uninitiated, that might as well be hieroglyphics.&lt;/p&gt;

&lt;h3&gt;JavaScript’s Flavor of Regex&lt;/h3&gt;

&lt;p&gt;JavaScript doesn’t just implement regex—it gives it its own twist.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Literal syntax: &lt;code&gt;/pattern/flags&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Methods like &lt;code&gt;.test()&lt;/code&gt; and &lt;code&gt;.exec()&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;String helpers like &lt;code&gt;.match()&lt;/code&gt;, &lt;code&gt;.replace()&lt;/code&gt;, &lt;code&gt;.search()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;&lt;code&gt;const regex = /hello/i;
regex.test(&quot;Hello world&quot;); // true&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Simple enough. But things escalate quickly.&lt;/p&gt;

&lt;h3&gt;Where Things Get Complicated&lt;/h3&gt;

&lt;h4&gt;1. Escaping Hell&lt;/h4&gt;

&lt;p&gt;JavaScript strings already use escape characters. Regex also uses escape characters. Combine them, and you get double the confusion.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;const regex = new RegExp(&quot;\\\\d+&quot;);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Why &lt;code&gt;\\\\d&lt;/code&gt; instead of &lt;code&gt;\\d&lt;/code&gt;? Because one level is for the string, and the other is for the regex engine.&lt;/p&gt;

&lt;h4&gt;2. Regex Flags&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;g&lt;/code&gt; — global (find all matches)&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;i&lt;/code&gt; — ignore case&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;m&lt;/code&gt; — multiline&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;y&lt;/code&gt; — sticky (lesser known)&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;&lt;code&gt;const str = &quot;test test&quot;;
const regex = /test/g;

str.match(regex); // [&quot;test&quot;, &quot;test&quot;]&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Flags can subtly change how your regex behaves, especially when combined.&lt;/p&gt;

&lt;h4&gt;3. Stateful Regex (Yes, Really)&lt;/h4&gt;

&lt;p&gt;One of JavaScript’s strangest quirks: regex can be stateful.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;const regex = /test/g;

regex.test(&quot;test&quot;); // true
regex.test(&quot;test&quot;); // false&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This happens because the regex remembers its last position using &lt;code&gt;lastIndex&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;4. Lookaheads and Lookbehinds&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;/(?&amp;lt;=\$)\d+/&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This matches numbers preceded by a dollar sign. Powerful—but not exactly beginner-friendly.&lt;/p&gt;

&lt;h3&gt;The Beauty Beneath the Chaos&lt;/h3&gt;

&lt;p&gt;Despite all this complexity, there’s something undeniably satisfying about regex in JavaScript.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;You replace dozens of lines of code with one expression&lt;/li&gt;
  &lt;li&gt;You solve problems declaratively&lt;/li&gt;
  &lt;li&gt;You gain a reusable, cross-language skill&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s like solving a puzzle—frustrating at first, but deeply rewarding once you crack it.&lt;/p&gt;

&lt;h3&gt;When Not to Use Regex&lt;/h3&gt;

&lt;p&gt;Just because you can use regex doesn’t mean you should.&lt;/p&gt;

&lt;p&gt;Avoid it when:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The pattern becomes unreadable&lt;/li&gt;
  &lt;li&gt;Maintainability matters&lt;/li&gt;
  &lt;li&gt;A simple string method would work&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;&lt;code&gt;// Hard to read
str.match(/some extremely complex unreadable pattern/);

// Clearer
str.split(&quot; &quot;).filter(word =&amp;gt; word.length &amp;gt; 3);&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Practical Tips&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Prefer regex literals over constructors&lt;/li&gt;
  &lt;li&gt;Break complex patterns into parts&lt;/li&gt;
  &lt;li&gt;Add comments explaining intent&lt;/li&gt;
  &lt;li&gt;Test incrementally&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;&lt;code&gt;const passwordRegex = /^(?=.*[A-Z])(?=.*\d).{8,}$/;
// At least one uppercase, one digit, minimum 8 characters&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Final Thoughts&lt;/h3&gt;

&lt;p&gt;JavaScript and regular expressions are both powerful in their own right. Together, they form a combination that is equal parts elegance and chaos.&lt;/p&gt;

&lt;p&gt;JavaScript gives you flexibility. Regex gives you expressive power. But with that comes a trade-off: readability, maintainability, and sometimes your sanity.&lt;/p&gt;

&lt;p&gt;And yet, developers keep coming back—not because it’s easy, but because when it works, it feels like magic.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;That’s the paradox: regex in JavaScript is both a nightmare and a masterpiece.&lt;/b&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/1680080914961153908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/1680080914961153908' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/1680080914961153908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/1680080914961153908'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2019/09/regular-expressions-in-javascript.html' title='Regex in JavaScript: A Beautiful Nightmare'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-6800445251389444189</id><published>2017-10-18T21:11:00.001+05:00</published><updated>2017-10-18T21:11:35.414+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Containers"/><category scheme="http://www.blogger.com/atom/ns#" term="Docker"/><category scheme="http://www.blogger.com/atom/ns#" term="Kubernetes"/><title type='text'>Kubernetes : The genie in a text file</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
The fact that a container resides inside a text file was sufficiently awesome. Looking at the way orchestration is done via the Kubernetes has a feeling that its a miracle and yes the miracle has made the giant give in and Lo &amp;amp; Behold ....&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;a href=&quot;https://techcrunch.com/2017/10/17/docker-gives-into-invevitable-and-offers-native-kubernetes-support/&quot;&gt;Docker gives into inevitable and offers native Kubernetes support&lt;/a&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
It was not inevitable as the news refers to but it was really hard work at Kubernetes and already most of the big guns have given up (or joined hands with Kubernetes). The following news item show.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://techcrunch.com/2017/09/20/kubernetes-gains-momentum-as-big-name-vendors-join-cloud-native-computing-foundation/&quot;&gt;Kubernetes gains momentum as big name vendors join cloud native computing foundation&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Platinum Members : Microsoft, AWS, CISCO, CoreOS, DellTechnologies, Fujitsu, Google, Huawei, IBM, Intel, Joyent, NEOSPHERE, ORACLE, Pivotal, Redhat, Samsung, SAP, VMWare and Finally Docker.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The above &lt;a href=&quot;https://www.cncf.io/about/members/&quot;&gt;list&lt;/a&gt;&amp;nbsp;shows that there is quite a bit of back story to the &#39;inevitable&#39;.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Happy Days for k8s and loving it totally.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/6800445251389444189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/6800445251389444189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/6800445251389444189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/6800445251389444189'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2017/10/kubernetes-genie-in-text-file.html' title='Kubernetes : The genie in a text file'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-6867977430152470922</id><published>2017-10-16T00:31:00.001+05:00</published><updated>2017-10-16T00:31:44.834+05:00</updated><title type='text'>TIL : Never change and push code directly on GitHub site</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Never ever do this even if its as mundane and harmless as a few changes in the README.&lt;br /&gt;
&lt;br /&gt;
Your customers will suffer because they are not as aware of the code as you are and they follow README much more diligently than you do.&lt;br /&gt;
&lt;br /&gt;
Another lesson learnt is that never ever do it on master branch. Also create a sub branch and work on it. Keep your most recent working code in master. This is another mistake I made while I preach the same to others I did not practice it myself.&lt;br /&gt;
&lt;br /&gt;
The above cost me hours of fixing and a lot of client disgruntlement.&amp;nbsp;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/6867977430152470922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/6867977430152470922' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/6867977430152470922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/6867977430152470922'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2017/10/til-never-change-and-push-code-directly.html' title='TIL : Never change and push code directly on GitHub site'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-7451961418772110914</id><published>2017-10-04T17:55:00.002+05:00</published><updated>2017-10-04T18:05:36.755+05:00</updated><title type='text'>APIs with a postman</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
I never realised that a postman would be worth so much. However while recently working with lots of APIs in parallel and in the process developing another one. It struck me and stuck with me the importance of a tool as handy as &lt;a href=&quot;https://www.getpostman.com/&quot;&gt;postman&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I was firm believer of using CURL scripts to test APIs and incorporating tests into the API development would be the best way. However postman awed and shocked me by its ease of use and wonderful interface.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Next stop .... How to handle load balancing and load testing.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/7451961418772110914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/7451961418772110914' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/7451961418772110914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/7451961418772110914'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2017/10/apis-with-postman.html' title='APIs with a postman'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-8875598190090339288</id><published>2012-10-08T22:09:00.001+05:00</published><updated>2012-10-08T22:10:39.039+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Class Diagrams"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><category scheme="http://www.blogger.com/atom/ns#" term="UML"/><title type='text'>Exploring Pyreverse UML</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Installing &lt;a href=&quot;http://pypi.python.org/pypi/pylint&quot;&gt;pylint &lt;/a&gt;for python came with an extra package called pyreverse. This wonderful little package gave ability to create class diagrams from python code. Simply writing the following code produced the png files of class diagrams.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
$pyreverse -o png *&amp;nbsp;&lt;/blockquote&gt;
&lt;br /&gt;
This would create png files which can be used for documentation as well as design review meeting. A very handy tool which won the day for us.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/8875598190090339288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/8875598190090339288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/8875598190090339288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/8875598190090339288'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2012/10/exploring-pyreverse-uml.html' title='Exploring Pyreverse UML'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-2997274670247911696</id><published>2011-02-14T22:18:00.001+05:00</published><updated>2011-02-14T22:21:47.385+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Dell"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="Vostro 1500"/><category scheme="http://www.blogger.com/atom/ns#" term="Wireless"/><title type='text'>Getting Wireless Up on Ubuntu 10.10  DELL VOSTRO 1500</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;After long long hours of searching and head scratching the following two-step process helped in getting the wireless up and running on Dell Vostro&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Step 1: Flash BIOS&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Go to the &lt;a href=&quot;http://support.dell.com/support/downloads/download.aspx?c=us&amp;amp;l=en&amp;amp;s=gen&amp;amp;releaseid=R184570&amp;amp;SystemID=VOS_N_1500&amp;amp;servicetag=&amp;amp;os=BIOSA&amp;amp;osl=en&amp;amp;deviceid=14974&amp;amp;devlib=0&amp;amp;typecnt=0&amp;amp;vercnt=5&amp;amp;catid=-1&amp;amp;impid=-1&amp;amp;formatcnt=0&amp;amp;libid=1&amp;amp;typeid=-1&amp;amp;dateid=-1&amp;amp;formatid=-1&amp;amp;source=-1&amp;amp;fileid=252223&quot;&gt;link &lt;/a&gt;and flash the bios according to latest.&lt;br /&gt;
Simply download the file and install the program and reboot.&lt;br /&gt;
This would enable the wlan in Ubuntu.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Step 2: Update Driver&lt;/span&gt;&lt;br /&gt;
Update the wireless driver using the following command. &lt;br /&gt;
&lt;blockquote&gt;$ sudo apt-get update&lt;/blockquote&gt;&lt;blockquote&gt;$ sudo apt-get install bcmwl-kernel-source&lt;/blockquote&gt;This should be done and after a reboot the Wireless should be up and running.&lt;br /&gt;
&lt;br /&gt;
Immense help for this was taken from &lt;a href=&quot;http://support.dell.com/support/downloads/download.aspx?c=us&amp;amp;l=en&amp;amp;s=gen&amp;amp;releaseid=R184570&amp;amp;SystemID=VOS_N_1500&amp;amp;servicetag=&amp;amp;os=BIOSA&amp;amp;osl=en&amp;amp;deviceid=14974&amp;amp;devlib=0&amp;amp;typecnt=0&amp;amp;vercnt=5&amp;amp;catid=-1&amp;amp;impid=-1&amp;amp;formatcnt=0&amp;amp;libid=1&amp;amp;typeid=-1&amp;amp;dateid=-1&amp;amp;formatid=-1&amp;amp;source=-1&amp;amp;fileid=252223&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://ubuntu-ky.ubuntuforums.org/showthread.php?p=9232072&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/2997274670247911696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/2997274670247911696' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/2997274670247911696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/2997274670247911696'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2011/02/getting-wireless-up-on-ubuntu-1004-dell.html' title='Getting Wireless Up on Ubuntu 10.10  DELL VOSTRO 1500'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-7586530704940990247</id><published>2011-02-14T16:02:00.000+05:00</published><updated>2011-02-14T16:02:36.666+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Installation"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>Twofolds Joy of using Ubuntu</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Frequent inhibitors to migrating to Ubuntu are what if something goes wrong, where will my windows go, what if I don&#39;t get everything working and topmost is I have only one partition what to do now don&#39;t wish to risk any partition magicians. A quick fix to all this rests in using Windows-based Ubuntu Installer (Wubi). If something goes wrong you don&#39;t lose windows, hard disk space and top of all your patience with Linux-derivatives.&lt;br /&gt;
&lt;br /&gt;
All it takes is the following simple steps&lt;br /&gt;
&lt;br /&gt;
1. Go to the &lt;a href=&quot;http://www.ubuntu.com/desktop/get-ubuntu/windows-installer&quot;&gt;Ubuntu Windows Installer Link&lt;/a&gt;&lt;br /&gt;
2. Let the 1.4 MB or so file to download and then install click.&lt;br /&gt;
3. Then let the application take charge while it asks for minimal information like username and password.&lt;br /&gt;
4. Boom after a couple of restarts and long download (700+ MB)you will have a copy of Ubuntu lying alongside windows harmless.&lt;br /&gt;
5. If you encounter some hiccups then its best to go to the windows and ask around google and then apply the fixes. This is the fun part that such hiccups no longer are fatal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Best of luck Happy Hunting Ubuntu&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/7586530704940990247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/7586530704940990247' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/7586530704940990247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/7586530704940990247'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2011/02/twofolds-joy-of-using-ubuntu.html' title='Twofolds Joy of using Ubuntu'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-422617104601624335</id><published>2010-11-01T22:01:00.001+05:00</published><updated>2010-11-01T22:06:25.883+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Proxy"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="Update Manager"/><title type='text'>Ubuntu Update Manager&#39;s Proxy does not change when system proxy is changed</title><content type='html'>All efforts to change the Update Manager&#39;s proxy come to a grinding halt without any solution. The reason for this fallout is that the proxy is &quot;hidden&quot; at a very safe location. Ubuntu Update Manager&#39;s proxy does not change after changing the system-wide proxy or proxy of synaptic program. The reason is that it uses the apt-get&#39;s proxy settings. Which can be amended by looking at the /etc/apt/apt.conf file. This file contains the information about proxy servers.&lt;br /&gt;
&lt;blockquote&gt;Acquire::http::proxy &quot;http://ProxyServerAddress:ProxyServerPort/&quot;;&lt;/blockquote&gt;&lt;blockquote&gt;Acquire::ftp::proxy &quot;ftp://ProxyServerAddress: ProxyServerPort/&quot;;&lt;/blockquote&gt;&lt;div&gt;This information can be amended to gain direct access to the internet or if the need is to change to a different proxy server.&amp;nbsp;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/422617104601624335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/422617104601624335' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/422617104601624335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/422617104601624335'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2010/11/ubuntu-update-managers-proxy-does-not.html' title='Ubuntu Update Manager&#39;s Proxy does not change when system proxy is changed'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-8646532923117865359</id><published>2010-10-30T11:25:00.000+05:00</published><updated>2010-10-30T11:25:21.246+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="repository"/><category scheme="http://www.blogger.com/atom/ns#" term="SVN"/><title type='text'>The easiest SVN tutorial ever</title><content type='html'>Browsing through the Internet its extremely difficult to find&amp;nbsp; the subversion(svn) commands in an instance and be productive immediately. So here is the step by step list of instructions which can be followed to accomplish the most common tasks of svn.&lt;br /&gt;
&lt;br /&gt;
We would use the project on Sourceforge named Dr. Java as an example.&lt;br /&gt;
&lt;br /&gt;
If the project is already there and you wish to CHECKOUT some code to view here is the command.&lt;br /&gt;
&lt;blockquote&gt;$svn co https://drjava.svn.sourceforge.net/svnroot/drjava drjava&lt;/blockquote&gt;Now if you wish to add new file to the svn repository the command is very simple. For example if you wish to add the text file readme.&lt;br /&gt;
&lt;blockquote&gt;$svn add README_TEXT&lt;/blockquote&gt;The above command will not add it to the server but add it to the schedule. If you wish to view current status of additions, deletions that are scheduled you could use the command&lt;br /&gt;
&lt;blockquote&gt;$svn status&lt;/blockquote&gt;And finally if you are satisfied simple do the following and the commit will be done meaning all the changes will now be part of the repository and a new version will be assigned. REMEMBER adding/ deleting/ changing code in a repository requires permissions. Therefore you might be prompted for passwords during the process. &lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt; $svn commit &lt;/blockquote&gt;This is all the information that you need to get past the basic svn commands and concentrate on your project.&lt;br /&gt;
&lt;br /&gt;
Now that you have gone through one cycle it would be easier to use the following command to explore other features of svn.&lt;br /&gt;
&lt;blockquote&gt;$svn help&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/8646532923117865359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/8646532923117865359' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/8646532923117865359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/8646532923117865359'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2010/10/easiest-svn-tutorial-ever.html' title='The easiest SVN tutorial ever'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-8043786633902718249</id><published>2010-10-26T23:25:00.000+05:00</published><updated>2010-10-26T23:25:36.737+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="MySQL"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>MySQL quickest way to look at databases</title><content type='html'>Looking for MySQL&#39;s administration tool is a task. Installing and configuring PHPMyAdmin would take Apache, php and then successful configuration. Then what to do to look at the tables, databases in the fastest possible way to look at tables and execute queries.&lt;br /&gt;
&lt;blockquote&gt;$ mysql -u username -p &lt;/blockquote&gt;the command will prompt for a password&lt;br /&gt;
&lt;blockquote&gt;mysql&amp;gt; Show databases;&lt;br /&gt;
mysql&amp;gt; show tables;&lt;/blockquote&gt;&amp;nbsp;The above two commands are extremely useful when one wants to look at the databases installed and tables in individual databases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example to look at users tables in database drupal the following commands will suffice.&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
mysql&amp;gt; use&amp;nbsp; drupal6;&lt;br /&gt;
mysql&amp;gt; select * from users;&lt;/blockquote&gt;&lt;br /&gt;
These commands can be used in both Linux and Windows and are very handy and dont require much to do.</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/8043786633902718249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/8043786633902718249' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/8043786633902718249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/8043786633902718249'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2010/10/mysql-quickest-way-to-look-at-databases.html' title='MySQL quickest way to look at databases'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-9133906876162815370</id><published>2010-10-26T14:21:00.000+05:00</published><updated>2010-10-26T14:21:54.641+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="explode"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><category scheme="http://www.blogger.com/atom/ns#" term="regular expression"/><category scheme="http://www.blogger.com/atom/ns#" term="string parsing"/><title type='text'>PHP Issue :: preg_split instead of explode function</title><content type='html'>If the need is to parse a string and extract the words. Then its advisable to use preg_split instead of using the explode function.&lt;br /&gt;
&lt;br /&gt;
Code follows :&lt;br /&gt;
&lt;blockquote&gt;&lt;blockquote&gt;preg_split (&quot;/\s+/&quot;,$textInput); &lt;/blockquote&gt;&lt;/blockquote&gt;where the first argument is the regular expression for finding one or more spaces and the second argument is the input text.&lt;br /&gt;
&lt;br /&gt;
This option works far better than the explode(&quot; &quot;, $textInput).</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/9133906876162815370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/9133906876162815370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/9133906876162815370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/9133906876162815370'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2010/10/php-issue-pregsplit-instead-of-explode.html' title='PHP Issue :: preg_split instead of explode function'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-1518471255772873765</id><published>2010-09-21T21:05:00.000+05:00</published><updated>2010-09-21T21:05:29.736+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CMS"/><category scheme="http://www.blogger.com/atom/ns#" term="Content Management System"/><category scheme="http://www.blogger.com/atom/ns#" term="Drupal"/><category scheme="http://www.blogger.com/atom/ns#" term="Joomla"/><category scheme="http://www.blogger.com/atom/ns#" term="WebServers"/><title type='text'>Judging the Joomla Jungle  ::  The Premier CMS</title><content type='html'>First experience of using a comprehensive Content Management System (CMS) was Drupal way back some years ago. Before that content management meant either using Front Page or direct FTP of the webpages. Despite &quot;hearing&quot; a lot of good reviews about Joomla never really got the time to explore it. &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;First Steps&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
The first steps towards installing Joomla in&amp;nbsp;Linux are the usual for web servers. Install &lt;a href=&quot;http://zahidirfan.blogspot.com/2010/03/linux-lamp-raising-jinn-and-exorcising.html&quot;&gt;LAMP &lt;/a&gt;(Linux, Apache, MySQL and PHP).&amp;nbsp; After testing LAMP&#39;s successful installation proceed with the following.&lt;br /&gt;
&lt;br /&gt;
Download Joomla from the &lt;a href=&quot;http://www.joomla.org/download.html&quot;&gt;website&lt;/a&gt; and follow the instructions given in INSTALL.PHP file in the main folder. Copying the instructions from the php file verbatim here. Copy the folder into www directory of Apache. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;{verbatim copy starts&lt;/b&gt;}&lt;br /&gt;
First, you must create a new database for your Joomla! site e.g.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ mysqladmin -u db_user -p create Joomla&lt;/blockquote&gt;MySQL will prompt for the &#39;db_user&#39; database password and then create the initial database files.&amp;nbsp; Next you must login and set the access database rights e.g.&lt;br /&gt;
&lt;blockquote&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ mysql -u db_user -p&lt;/blockquote&gt;Again, you will be asked for the &#39;db_user&#39; database password.&amp;nbsp; At the&amp;nbsp;MySQL prompt, enter following command:&lt;br /&gt;
&lt;blockquote&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GRANT ALL PRIVILEGES ON Joomla.*&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TO nobody@localhost IDENTIFIED BY &#39;password&#39;;&lt;/blockquote&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; where:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;Joomla&#39; is the name of your database&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;nobody@localhost&#39; is the userid of your webserver MySQL account&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;password&#39; is the password required to log in as the MySQL user&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; If successful, MySQL will reply with&lt;br /&gt;
&lt;blockquote&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Query OK, 0 rows affected&lt;/blockquote&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; to activate the new permissions you must enter the command&lt;br /&gt;
&lt;blockquote&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; flush privileges;&lt;/blockquote&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; and then enter &#39;\q&#39; to exit MySQL.&lt;br /&gt;
&amp;nbsp;Alternatively you can use your web control panel or phpMyAdmin to create a database for Joomla.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;{verbatim copy ends}&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
So once the installation was complete simply go to the http://localhost/joomla (depending on where you stored the joomla in the apache directory. This would launch the web installer and answering a couple of simple questions results in the installation of Joomla.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Ooops where are my other databases !!!!&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Having installed and worked on Joomla I realized that my other databases have been lost. Moreover the admin password has been lost. So I had to recover the&amp;nbsp; password again via the &lt;a href=&quot;http://www.cyberciti.biz/tips/recover-mysql-root-password.html&quot;&gt;instruction given here. &lt;/a&gt;This glitch created&amp;nbsp; a lot of headache but finally after recovery of the admin password. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Using the CMS&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
The result of this installation procedure was a sleek joomla content management system. Its extremely easy to get started and actually use via the admin panel by going to the http://localhost/jooomla/administrator.&lt;br /&gt;
The whole website can be managed through a set of menus and control panel. There is the template manager which helps in installation of new templates as well as edit/ preview/ apply templates. The other important aspect is easy maintenance of posts. The CMS is nice although it takes time to figure out the whole concepts. In contrast to Drupal (which was really easy to manage via the web interface of admininstrator account) Joomla lacks a bit of such flexibility. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Next Steps&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
The next steps is installation of themes and extensions. In this regard the following seems attractive and worthy of exploration.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Financial Extensions&lt;/li&gt;
&lt;li&gt;Site Analytics&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/1518471255772873765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/1518471255772873765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/1518471255772873765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/1518471255772873765'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2010/09/judging-joomla-jungle-premier-cms.html' title='Judging the Joomla Jungle  ::  The Premier CMS'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-4806542367784461674</id><published>2010-08-17T03:13:00.000+05:00</published><updated>2010-08-17T03:13:34.370+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Multivariate Distribution"/><category scheme="http://www.blogger.com/atom/ns#" term="Normal Distribution"/><category scheme="http://www.blogger.com/atom/ns#" term="Numerical Computation"/><category scheme="http://www.blogger.com/atom/ns#" term="Octave"/><category scheme="http://www.blogger.com/atom/ns#" term="Probability"/><title type='text'>Learning Probability via Octave</title><content type='html'>Probability is a subject which brings everyone sleepless nights. Octave,   the MATLAB clone or for some MATLAB wanna-be . &lt;a href=&quot;http://www.octave.org/&quot;&gt;GNU Octave is a high-level language,   primarily intended for numerical computations.&lt;/a&gt; The best way to learn   octave is to take a difficult task (or goal) and then start using it.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Octave Basics&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Octave can be installed   using the following command in Ubuntu.&lt;br /&gt;
&lt;blockquote&gt;$ sudo apt-get   install octave&lt;/blockquote&gt;Once installed octave can be  invoked  via the command.&lt;br /&gt;
&lt;blockquote&gt;$ octave &lt;/blockquote&gt;Its   best to understand the modus operandi of Octave. Like lists   are the primary data structures in LISP Language. In octave vectors are   at the core.&amp;nbsp; Vectors are used to store information, manipulate   information via vector algebra and display data still using 2D/3D   graphics. Applications of octave are huge but we will use probability as   a starting point and see how we can learn better probability using the   computational and graphical features of octave.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Uniform Probability Distribution&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Uncertainty of events can be modeled using concepts of probability. If a set of events is equally   likely to occur then we say that the events have equal or uniform   probability of happening. &lt;br /&gt;
The first step towards developing a   mathematical model for probability is to map real-life events to random   variables (in our case the random variables will take on values from   real numbers). Thus we say that instead of using real-life events we   will refer to values 1, 2, 3, 4, .... when talking about events (e.g., Sun   rise, Sun Set etc.). Lets use the example of a dice having six faces   each one marked with number 1, 2, 3, 4, 5 and 6 respectively. The events   of getting a particular face after rolling the dice are getting face   marked by either One, Two, Three, Four, Five or Six. Since we cannot say   with certainty&amp;nbsp; which face will come up on&amp;nbsp; roll of&amp;nbsp; dice. We say   that x which is a random variable which takes on values {1, 2, 3, 4,  5,  6} corresponding to the aforementioned events. &lt;br /&gt;
Now this   information can be stored as a vector x = [1 2 3 4 5 6] and so lets see   the corresponding command in octave by simply typing x=[1 2 3 4 5 6].&lt;br /&gt;
&lt;blockquote&gt;octave:1&amp;gt;   x=[1 2 3 4 5 6]&lt;br /&gt;
x =&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp; 6&lt;/blockquote&gt;The   following values x = and followed by 1 2 3 4 5 6, shows the value   stored in the vector x. This display can be avoided by placing a   semi-colon (;) at the end of the command. Now that we have declared a   variable named x with values lets see how octave stores it. This can be   achieved anytime by writing the command whos on the command line of   octave.&lt;br /&gt;
&lt;blockquote&gt;octave:2&amp;gt; whos&lt;br /&gt;
Variables in the  current scope:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Attr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  Size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bytes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Class&lt;br /&gt;
&amp;nbsp; ==== ====&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  ====&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =====&amp;nbsp; ===== &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  ans&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1x30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  char&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; x&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1x6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  48&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  double&lt;/blockquote&gt;The size of variable x is 1x6 which means that  its a vector (matrix)  of size 1 row and 6 columns, with 48 bytes  needed to store it while the  class of variables in double.&lt;br /&gt;
&lt;br /&gt;
Now  lets see what is the probability of getting a particular face. Since all the faces of the dice have an equal probability  of  showing up hence the probability of getting a 1 is equal to the   probability of getting 2, 3, 4, 5 or 6. Therefore in our model the   probability given by p(x) = 1/6 {where 6 represents the total number of   possibilities}. Now lets calculate the probability of the events using octave.&lt;br /&gt;
&lt;blockquote&gt;octave:3&amp;gt; px=1/6*ones(1,6)&lt;br /&gt;
px =&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.16667&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.16667&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.16667&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.16667&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.16667&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.16667&lt;/blockquote&gt;Here in the above code we have used the function ones which helps to declare a vector of size 1x6 and initialize it with ones. We simply multiply it with 1/6 to get 0.16667 in all the elements. In order to check what is the probability of event 3 simply write the following command.&lt;br /&gt;
&lt;blockquote&gt;octave:4&amp;gt; px(3)&lt;br /&gt;
ans =&amp;nbsp; 0.16667&lt;/blockquote&gt;Similarly for all the other events.&amp;nbsp; This was simple because we used the simplest possible probability model. &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Normal Probability Distribution&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Moving further lets move to a more &quot;realistic&quot; probability model. Normal Probability Distribution is a very practical to model most situations. Special thanks to Guillaume Riflet&#39;s &lt;a href=&quot;http://point.pt/%7Eguillaume/latex/latexiframe.html&quot;&gt;website&lt;/a&gt; for the equations in this article.&lt;br /&gt;
&lt;div style=&quot;text-align: center; width: 100%;&quot;&gt;&lt;img alt=&quot; f(x) = \tfrac{1}{\sqrt{2\pi\sigma^2}}\; e^{ -\frac{(x-\mu)^2}{2\sigma^2} }

            &quot; src=&quot;http://www.mathtran.org/cgi-bin/mathtran?D=3;tex=%20f%28x%29%20%3D%20%5Ctfrac%7B1%7D%7B%5Csqrt%7B2%5Cpi%5Csigma%5E2%7D%7D%5C%3B%20e%5E%7B%20-%5Cfrac%7B%28x-%5Cmu%29%5E2%7D%7B2%5Csigma%5E2%7D%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20&quot; /&gt;&lt;/div&gt;Trying out this equation in octave gives the following resulting. Now using the same number of events x=[1 2 3 4 5 6]. The mean (mu)=3.5 and variance(sigma)=1.&lt;br /&gt;
&lt;blockquote&gt;octave:5&amp;gt; mu=3.5; sigma=1;&lt;br /&gt;
octave:6&amp;gt;&amp;nbsp;  fx=(1/sqrt(2*pi*sigma^2)*exp(-(x-mu).^2/(2*sigma^2)));&lt;/blockquote&gt;&lt;blockquote&gt;fx =&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; 0.017528&amp;nbsp;&amp;nbsp; 0.129518&amp;nbsp;&amp;nbsp; 0.352065&amp;nbsp;&amp;nbsp; 0.352065&amp;nbsp;&amp;nbsp; 0.129518&amp;nbsp;&amp;nbsp; 0.017528&lt;/blockquote&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYIlmxFcV8e59rgXyO1R_xbNh4lMzsWLgCTRJW0_KYloehpALoPZ5wI2o4iQKgkIPMuC2Ah1IS_OdzvmilnyCrE0D-bm4cS3zzBGRGGdGluNOpe7Vs-E7L2nIDyDqToRZBFslp6g/s1600/Plot-1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;322&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYIlmxFcV8e59rgXyO1R_xbNh4lMzsWLgCTRJW0_KYloehpALoPZ5wI2o4iQKgkIPMuC2Ah1IS_OdzvmilnyCrE0D-bm4cS3zzBGRGGdGluNOpe7Vs-E7L2nIDyDqToRZBFslp6g/s400/Plot-1.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Since the mean was selected to be 3.5 therefore we can see that the probability of 3 and 4 are maximum here while the probability decreases as we move away from 3.5 on either side. Now this is the classical &quot;bell shaped&quot; or Gaussian&amp;nbsp; curve. This does not look clear because we took only 6 data points to plot the curve we can improve the points by using the following code and the resulting graph is shown.  &lt;br /&gt;
&lt;blockquote&gt;octave:8&amp;gt; x=[1:0.1:6];&lt;br /&gt;
octave:9&amp;gt;&amp;nbsp; fx=(1/sqrt(2*pi*sigma^2)*exp(-(x-mu).^2/(2*sigma^2)));&lt;br /&gt;
octave:10&amp;gt; plot(x,fx)&lt;/blockquote&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjo22OYnY0tFHYgXprXdM2wdkIffk-ezreBcsS1emNffTIILVl1cgv9VdiuaszstmZYLh4o7P_Ns2PnGIE7JUc297y7RqXAVFI__GzvpEpW-rFl3SCwFAXBtzIfMW6co2JaoR129w/s1600/Plot-2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;322&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjo22OYnY0tFHYgXprXdM2wdkIffk-ezreBcsS1emNffTIILVl1cgv9VdiuaszstmZYLh4o7P_Ns2PnGIE7JUc297y7RqXAVFI__GzvpEpW-rFl3SCwFAXBtzIfMW6co2JaoR129w/s400/Plot-2.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Now that the data points have been increased the graph is much more  smooth and looks like a bell shaped curve and the probability is now  really maximum at point 3.5 as should be since mu (mean)=3.5.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Multivariate Probability Distribution&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
In order to generate further interest now lets look at multivariate normal distribution. The following equation gives us the multivariate normal distribution here the x and mu are d-dimensional vectors defining the multidimensional event and means while sigma is the co-variance matrix.&lt;br /&gt;
&lt;div style=&quot;text-align: center; width: 100%;&quot;&gt;&lt;br /&gt;
&lt;img alt=&quot;p(x)=\frac{1}{(2\pi)^{k/2}|\Sigma|^{1/2}}\, e^{ -\frac{1}{2}(x-\mu)&#39;\Sigma^{-1}(x-\mu) }

            &quot; src=&quot;http://www.mathtran.org/cgi-bin/mathtran?D=3;tex=p%28x%29%3D%5Cfrac%7B1%7D%7B%282%5Cpi%29%5E%7Bk/2%7D%7C%5CSigma%7C%5E%7B1/2%7D%7D%5C%2C%20e%5E%7B%20-%5Cfrac%7B1%7D%7B2%7D%28x-%5Cmu%29%27%5CSigma%5E%7B-1%7D%28x-%5Cmu%29%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20&quot; /&gt;&lt;/div&gt;The above equation requires further constructs like for-loop to be implemented in Octave lets use the example given at &lt;a href=&quot;http://commons.wikimedia.org/wiki/File:Multivariate_Gaussian.png&quot;&gt;wiki&lt;/a&gt; to learn.&lt;br /&gt;
&lt;blockquote&gt;octave:10&amp;gt; mu=[40, 60]; sigma=[100, 30; 30, 140]; octave:39&amp;gt; isigma = inv(sigma); &lt;br /&gt;
octave:11&amp;gt; detsigma = det(sigma);&lt;br /&gt;
octave:12&amp;gt; coeff = 1/(2*pi*sqrt(detsigma));&lt;br /&gt;
octave:13&amp;gt; for i=1:100&lt;br /&gt;
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for j=1:100&lt;br /&gt;
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x = [i;j];&lt;br /&gt;
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xm = x - mu;&lt;br /&gt;
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p(i,j) = exp(-0.5*xm&#39;*isigma*xm);&lt;br /&gt;
&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end &lt;br /&gt;
&amp;gt; end&lt;br /&gt;
octave:14&amp;gt; p=p*coeff;&lt;br /&gt;
octave:15&amp;gt; [X,Y]=meshgrid(1:100,1:100);&lt;br /&gt;
octave:16&amp;gt; surf(X,Y,p);&lt;/blockquote&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBlxv7aavNKfAep0ra8lS2JXK6z9vbKU6mOY1jHEc6QNdZkdWG4N-NdYF-eIKeBSpqh9JDx2QZkHFGLnR99UOMNTKFdjKm8USACiCxd1ZL1k0LhjzHFDv1fRcmvfVwv_i5p6SCuw/s1600/Plot-3.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;235&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBlxv7aavNKfAep0ra8lS2JXK6z9vbKU6mOY1jHEc6QNdZkdWG4N-NdYF-eIKeBSpqh9JDx2QZkHFGLnR99UOMNTKFdjKm8USACiCxd1ZL1k0LhjzHFDv1fRcmvfVwv_i5p6SCuw/s400/Plot-3.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
The plot above is a 3-D graph of the multivariate normal probability distribution of p(x,y) depending on two variables x and y. The above methodology helps us learn probability in a fun manner as well as get familiar with octave&#39;s computational and graphical features.</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/4806542367784461674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/4806542367784461674' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/4806542367784461674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/4806542367784461674'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2010/08/learning-probability-via-octave.html' title='Learning Probability via Octave'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYIlmxFcV8e59rgXyO1R_xbNh4lMzsWLgCTRJW0_KYloehpALoPZ5wI2o4iQKgkIPMuC2Ah1IS_OdzvmilnyCrE0D-bm4cS3zzBGRGGdGluNOpe7Vs-E7L2nIDyDqToRZBFslp6g/s72-c/Plot-1.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-6497535627452159632</id><published>2010-07-02T03:18:00.001+05:00</published><updated>2010-07-02T03:19:48.328+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Company"/><category scheme="http://www.blogger.com/atom/ns#" term="Information Technology"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Hosting"/><title type='text'>Best web hosting companies :: A futile search without a plan and execution</title><content type='html'>Web hosting services is a thriving business  and new services keeps propping almost daily. Now with every new choice  new questions need to be asked. Which web hosting service should I go  for? The answer to this question does not lie in any search engine  queries but rather lies in a plan. In order to determine the best web  hosting companies one needs to have a plan and an execution map.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Plan Phase&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
Selection of web hosting service is  easier if answers to the following questions can be determined.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Why do we need a web hosting service?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;What is the goal of the website? &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;What will be our needs in the next three years?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Which departments in the company are planning to use  the website in the next few years?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Is our company&#39;s business uniform enough to warrant a  company-wide website?&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;How much is the  company willing to invest? What is the expected budget of this endeavor?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Expected automation needs of the company in the next three  years? Calenders, Emails other needs.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Maximum  number of users(departments) who will upload data on the website  expected?&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;The importance of these  questions varies from company to company but every company must  ponder over more or less each of these questions. This helps in  preparing a map for searching the best web hosting company for our  purposes.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Execution Phase&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
After  pondering over each of these questions we need to heed to the following points which will filter out and help focus.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;b&gt;1. Throwing money at it wont make the problems go away.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Every one is interested in offering a service at a cost. Don&#39;t get lured by low costs solutions or for that matter overly priced solutions. Look before you leap. Expensive solutions not necessarily mean stable and robust solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;b&gt;2. Linux is the best&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Yes, Linux is the best but is it best for you depends on the environment in your enterprise. If Windows and Microsoft are the name of the game in the organization then choosing Linux for website hosting might be counter productive in that it would not fit in with the software being used currently e.g. MS Project, MS Office, MS Exchange Server, MS Email Clients like Outlook. The difference in prices between Linux and Windows web hosting services does not warrant putting all the investment already done in Microsoft software to disuse.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;b&gt;3. My cousin&#39;s company gives the lowest rates&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Avoid falling into buying service on referrals which are not based on purely business terms. If someone refers to a company whose only &#39;positive&#39; point is that its owned by the referrer&#39;s relative than this is probably a huge drawback instead of an advantage. One might not be able to fully negotiate the terms and in the event of problems really push the company to provide support.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;b&gt;4. My web hosting company performs really well&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Avoid giving contract to a company just because it works well for someone else. The reason is that your company&#39;s needs might be completely orthogonal to the other party.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;b&gt;5. Traffic does not matter at all&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Give proper attention to the traffic caps in the hosting plans. Never fall for the trap that your traffic needs six months from now will remain the same as they are today. Websites have a strange pattern of jumping from &amp;nbsp;single digit hits to hundreds (or at times thousands) of hits per day.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Future Decisions&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Once a web hosting plan has been selected and the website has been deployed. Its imperative to perform monitoring of the website as much as possible. It helps in avoiding problems as well as planning growth of the website. A first step could be registering the website with analytics service providers. Google analytics is one example of such a service. Second step is to get the website report from Alexa. The third optional step could be to buy monitoring software like one developed by Hubspot.&amp;nbsp;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/6497535627452159632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/6497535627452159632' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/6497535627452159632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/6497535627452159632'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2010/07/best-web-hosting-companies-futile.html' title='Best web hosting companies :: A futile search without a plan and execution'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-1161947233362372231</id><published>2010-07-02T02:55:00.000+05:00</published><updated>2010-07-02T02:55:11.740+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Operating System"/><category scheme="http://www.blogger.com/atom/ns#" term="System Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Why Operating Systems Programming is so difficult?</title><content type='html'>The character of operating system programming has remained more or  less constant over the years. That is a polite way of saying that it is  still as scary as ever. Why it is so? Complex system requires complex  programming methods and this goes against the spirit of the dictum &quot;Good  programs are easier to understand and develop&quot;. So can we conclude that  system programming being done is bad programming. Or the programmers  are not following best practices and all the elaborate methods created  to ease programming. Or they are still dealing with a lot of legacy  code. Looking at the output &quot;they&quot; are the best talent. Probably its the  fact that they are good that they create something so brilliant that  nobody can fathom or appreciate. The reality needs to be explored.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Times, &#39;Times New Roman&#39;, serif;&quot;&gt;System Programming&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Times, &#39;Times New Roman&#39;, serif;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
So what exactly is  operating system programming. Is it really something different from  regular programming or its just a subset of programming. System  Programming in contrast to application programming is directed towards  hardware/system programming while Application Programming deals with  creating software which interact with the user. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Sources of Complexity&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
The complexity in the  dealing with systems programming language amongst others is due to the  following reasons.&lt;br /&gt;
&lt;br /&gt;
1. Legacy&lt;br /&gt;
2. Diversity &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;b&gt;Legacy&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Legacy code is very hard to get away with in application programming but when it comes to Systems Programming. Legacy code is EXTREMELY hard to get away. Since the legacy code has been written with an extremely large investment of time and also due to scarcity of expertise available so it is more feasible to use legacy code instead of re-inventing the wheel.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Diversity of Hardware&lt;/b&gt;&lt;br /&gt;
This is the other problem which leads to complicated code. Hardware diversity needs to be catered by system programmers as compared to application programmers who have the luxury of using interfaces (provided by system programmers) to hardware.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;How to get over it&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;There is no short cut to success in the system programming domain. One has to go through the&amp;nbsp;rigor&amp;nbsp;of learning the issue. An easier way could be using the input-output model. Input output model is a way of getting reducing the code&#39;s complexity and focusing on inputs and outputs of the given algorithm/ function. This helps in first understanding the basic goals before diving deeper into the code.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Another familiar method is to develop state diagrams. This methodology requires a little more skill than the previous method but can be extremely helpful in figuring out complicated code.&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/1161947233362372231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/1161947233362372231' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/1161947233362372231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/1161947233362372231'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2010/07/why-operating-systems-programming-is-so.html' title='Why Operating Systems Programming is so difficult?'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-4593642102030639284</id><published>2010-05-06T02:05:00.001+05:00</published><updated>2010-05-06T02:11:57.615+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Red Hat"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="Umbrello"/><category scheme="http://www.blogger.com/atom/ns#" term="UML"/><category scheme="http://www.blogger.com/atom/ns#" term="Visio"/><title type='text'>Harnessing UML in Ubuntu</title><content type='html'>Software development was never easy. Software design became extremely difficult with the explosive growth of computers and Internet. Let me accept that I was never a fan of UML. I always believed that software development is an art and the design process is more of an inspiration than a mechanical process of finding nouns and verbs. Patterns, well I thought they were probably the worst creativity-repellents possible. So I was always lousy with UML until I realized that this aversion was compounded due to using MS Visio. Visio probably is the worst place to go to develop UML diagrams. My faith in Visio was developed while using the minimal project management tools&amp;nbsp; (during undergraduate studies) so when it came to doing UML I simply went ahead and used Visio for Software Design. &lt;br /&gt;
&lt;br /&gt;
Not until 2007 did I come out of the dark ages when I used umbrello for the first time. Then i came to realize that the true worth of a UML Drawing tool. The way in which all the diagrams were integrated gave a sense of connection. While in Visio it was always like drawing a redundant diagram be it class diagram or interaction diagram. However with&amp;nbsp; umbrello this is&amp;nbsp; not the case. The model that is defined in one diagram can be used in the other diagram. This functionality is emphasized by the code-generation facility. Although I personally did not like to use this facility but its a handy tool specially when dealing with very large projects. The fact that umbrello supports code-generation in many languages adds to the tool-box of the designer.&lt;br /&gt;
&lt;br /&gt;
How to install umbrello in Ubuntu? &lt;br /&gt;
&lt;blockquote&gt;$ sudo apt-get install umbrello&lt;/blockquote&gt;Once installed the program is available in Applications--&amp;gt; Programming menu.</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/4593642102030639284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/4593642102030639284' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/4593642102030639284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/4593642102030639284'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2010/05/harnessing-uml-in-ubuntu.html' title='Harnessing UML in Ubuntu'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-2488454082404332753</id><published>2010-04-07T02:15:00.001+05:00</published><updated>2010-05-02T17:24:49.440+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Operating System"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><category scheme="http://www.blogger.com/atom/ns#" term="Red Hat"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Overcoming Python in Ubuntu 9.10</title><content type='html'>Python&#39;s rise to power is imminent by claims that Python alongside PHP/ Perl is the &quot;P&quot; in LAMP. This is equivalent to knighthood amongst geeks. &lt;br /&gt;
&lt;br /&gt;
Python fascinates developers who are very much conscious about productivity. The first step is to ensure Python is installed so here is the command to do so in Ubuntu 9.10. (Most likely it would already be installed). &lt;br /&gt;
&lt;blockquote&gt;$ sudo apt-get install python&amp;nbsp; &lt;/blockquote&gt;The first step to testing a language is to write a hello world program.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Hello World Program&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
Python&#39;s manner of saying hello world to the world is different. Go to terminal and write the following command to invoke python.&lt;br /&gt;
&lt;blockquote&gt;$ python&lt;/blockquote&gt;Once inside the shell. Type print &quot;hello world&quot; and the output hello world will appear.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&amp;gt;&amp;gt;&amp;gt; print &quot;hello world&quot;&lt;br /&gt;
hello world&lt;/blockquote&gt;Another way of saying hello from the Python world is via creating a text file and writing the same in it and then saving it say &quot;helloworld.py&quot; and then on the command prompt executing the following statement.&lt;br /&gt;
&lt;blockquote&gt;$ python helloworld.py &lt;/blockquote&gt;Or to write the following in the interactive shell. (Please note that .py is not written)&lt;br /&gt;
&lt;blockquote&gt;&amp;gt;&amp;gt;&amp;gt;import helloworld&lt;/blockquote&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;The Next Step Forward &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
A very easy but powerful command can be used is called &quot;subprocess&quot;. This helps in executing the shell commands. This simply executes the &quot;df -h&quot; command. The format is to first import the subprocess and then &lt;br /&gt;
&lt;blockquote&gt;&amp;gt;&amp;gt;&amp;gt; import subprocess&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; subprocess.call([&quot;df&quot;,&quot;-h&quot;])&lt;br /&gt;
Filesystem&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Size&amp;nbsp; Used Avail Use% Mounted on&lt;br /&gt;
/dev/sda1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1299.4G&amp;nbsp; 5.0G&amp;nbsp; 4.0G&amp;nbsp; 56% /&lt;br /&gt;
udev&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 490M&amp;nbsp; 228K&amp;nbsp; 490M&amp;nbsp;&amp;nbsp; 1% /dev&lt;/blockquote&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Functions in Python&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Lets take a leap here and write a recursive function so that our imagination is tested and concepts build on sound footing. Write the following code in a text file and name it factorial.py&lt;br /&gt;
&lt;blockquote&gt;&amp;nbsp;def fact(n):&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if n==1:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else :&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return fact(n-1)*n&lt;/blockquote&gt;Notice how similar it is to the factorial code written in any other C-lookalike language. The keyword def indicates the start of a function. Now execute the code in the interactive shell using the following commands.&lt;br /&gt;
&lt;blockquote&gt;Examples include finding 2!, 10! and 4! respectively &lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import factorial &lt;/blockquote&gt;&lt;br /&gt;
&lt;blockquote&gt;&amp;gt;&amp;gt;&amp;gt; factorial.fact(2)&lt;br /&gt;
2&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; factorial.fact(10)&lt;br /&gt;
3628800&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; factorial.fact(4)&lt;br /&gt;
24&lt;/blockquote&gt;Now lets write another function but this time its not recursive rather its iterative version of Fibonacci Serics. Write the following in a text file and save as fibonnaci.py. Notice how multiple assignments and increments are being performed. &lt;br /&gt;
&lt;blockquote&gt;def fib(n):&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a, b = 0, 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while b &amp;lt; n:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print b,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a,b = b, a+b&lt;/blockquote&gt;Execute the function in the interactive shell using the following commands.&lt;br /&gt;
&lt;blockquote&gt;&amp;gt;&amp;gt;&amp;gt; import fibonnaci&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; fibonnaci.fib(10)&lt;br /&gt;
1 1 2 3 5 8&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; fibonnaci.fib(100)&lt;br /&gt;
1 1 2 3 5 8 13 21 34 55 89 &lt;/blockquote&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Object-Oriented Python&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Python being a very clean language also helps one to define classes in a sleek manner. Write the following in a text file and save as PrintName.py&lt;br /&gt;
&lt;blockquote&gt;class NameClass :&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myFirstName, myLastName = &quot;Alexia&quot;, &quot;Candella&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def printName(self):&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print self.myFirstName &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print self.myLastName&lt;/blockquote&gt;Now write the following in the interactive shell to test not only the class method but also to create the instance of the class.&lt;i&gt;{Notice that PrintName is the name of the module loaded. Hence required to create instance of the class NameClass}&lt;/i&gt;&lt;br /&gt;
&lt;blockquote&gt;&amp;gt;&amp;gt;&amp;gt; import PrintName&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; x=PrintName.NameClass()&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; x.printName()&lt;br /&gt;
Alexia&lt;br /&gt;
Candella&lt;/blockquote&gt;&lt;br /&gt;
Its believed that after doing this little exercise the python language has been overcome. Now the next part is to move on and do some serious stuff. This can be accomplished by using the tools of the language and combining to solve the problems and learning the language along the way. A very good reference is available &lt;a href=&quot;http://docs.python.org/tutorial&quot;&gt;here&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/2488454082404332753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/2488454082404332753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/2488454082404332753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/2488454082404332753'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2010/04/overcoming-python-in-ubuntu-910.html' title='Overcoming Python in Ubuntu 9.10'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-3058340300102212857</id><published>2010-03-25T02:22:00.002+05:00</published><updated>2010-05-02T17:25:20.938+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="EE"/><category scheme="http://www.blogger.com/atom/ns#" term="Enterprise Edition"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="Red Hat"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Experimenting Java Enterprise Edition (EE) SDK 6 on Ubuntu Linux</title><content type='html'>&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Installations&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Soon after downloading the Java EE on Ubuntu machine through the &lt;a href=&quot;http://java.sun.com/javaee/downloads/index.jsp&quot;&gt;website&lt;/a&gt; the file (~48 MB) called java_ee_sdk-6-web-unix.sh. An attempt to run the shell script resulted in the following error.&lt;br /&gt;
&lt;blockquote style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;Could not locate a suitable Java runtime.&lt;br /&gt;
Please ensure that you have Java 6 or newer installed on your system&lt;br /&gt;
and accessible in your PATH or by setting JAVA_HOME&lt;/blockquote&gt;This requires installation of Java 6 by using the following command (another roughly 55 MB).&lt;br /&gt;
&lt;blockquote&gt;&lt;span style=&quot;color: blue; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;$ sudo apt-get install sun-java6-jdk&lt;/span&gt;&lt;/blockquote&gt;Now going back to the Java EE installation through the following command.&lt;br /&gt;
&lt;blockquote&gt;&lt;span style=&quot;color: blue; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;$ sh java_ee_sdk-6-web-unix.sh &lt;/span&gt;&lt;/blockquote&gt;Going through the clicks (one has to only write the password for admin account and the proxy if any). Rest of the information is filled in by default.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Verifying Installation&lt;/b&gt;&lt;/span&gt; &lt;br /&gt;
Now go to the web browser and type the following in the address box.&lt;br /&gt;
&lt;blockquote style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;http://localhost:4848&lt;/span&gt;&lt;/blockquote&gt;If you changed the value of admin control panel port. Please replace 4848 with the port number you specified during installation. This would open the administration control panel (shown below) and demand user name and password. Please put the username/ password which were set during installation. &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN-76xfUttzGS3okHX9KNKiXb9yhfdDqehqDzO0Jyd-dhcIVYPgMRRkhMLxZTPNI_WDDaOZxVMt3wkyz7bRWFlhJCX6wwjNLKJg8L31kW5fOLM6kkbSyXxdqKAoScddVxUN5vvdA/s1600/GlassFishAdmin.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN-76xfUttzGS3okHX9KNKiXb9yhfdDqehqDzO0Jyd-dhcIVYPgMRRkhMLxZTPNI_WDDaOZxVMt3wkyz7bRWFlhJCX6wwjNLKJg8L31kW5fOLM6kkbSyXxdqKAoScddVxUN5vvdA/s400/GlassFishAdmin.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;br /&gt;
After the username and password has been entered the following window will appear.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzBuyrfCE8q2FfFulQMwYod6muy5U_Am2YYF-6RquNie8aDXV39lmPMJ4AEdGN5cRtv8YtaDAq3LXvBgCzs0u7qqGKSM16ZQ9e5ATUt85UMsOioJlCkr6ay9aCVLJxf-OrCjvKUQ/s1600/GlassFishAdminPanel.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzBuyrfCE8q2FfFulQMwYod6muy5U_Am2YYF-6RquNie8aDXV39lmPMJ4AEdGN5cRtv8YtaDAq3LXvBgCzs0u7qqGKSM16ZQ9e5ATUt85UMsOioJlCkr6ay9aCVLJxf-OrCjvKUQ/s320/GlassFishAdminPanel.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Deploying Sample Application&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Download the application hello.war from the website &lt;a href=&quot;https://glassfish.dev.java.net/downloads/quickstart/hello.war&quot;&gt;here&lt;/a&gt;. Click on Applications on the tree on the right side and click the button deploy and then point to the path where the hello.war was downloaded.&lt;br /&gt;
&lt;br /&gt;
Then write the following in the address box of the web browser and write your name in the box and click submit. &lt;br /&gt;
&lt;br /&gt;
http://localhost:8080/hello/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following output will appear hence showing that the Java EE 6 has not only been installed but also working.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnJegCDTt4HGAvgYEeTF0GZ6I1p3dPDZXMGZXRlGv6lLAsZocY4JPwLkpzRKItCzZ9E-gYwbmMQ-XXe2jcCeeleWlYS6DA2D1PNp8-45ViRyycgjIwiAo7xZC-f7Cix4unZu66Sw/s1600/GlassFishHello.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnJegCDTt4HGAvgYEeTF0GZ6I1p3dPDZXMGZXRlGv6lLAsZocY4JPwLkpzRKItCzZ9E-gYwbmMQ-XXe2jcCeeleWlYS6DA2D1PNp8-45ViRyycgjIwiAo7xZC-f7Cix4unZu66Sw/s400/GlassFishHello.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
The next step is to develop applications using the Java EE standard. This requires knowledge of EJB, Components, three tier architecture and advanced java programming.</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/3058340300102212857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/3058340300102212857' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/3058340300102212857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/3058340300102212857'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2010/03/experimenting-java-enterprise-edition.html' title='Experimenting Java Enterprise Edition (EE) SDK 6 on Ubuntu Linux'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN-76xfUttzGS3okHX9KNKiXb9yhfdDqehqDzO0Jyd-dhcIVYPgMRRkhMLxZTPNI_WDDaOZxVMt3wkyz7bRWFlhJCX6wwjNLKJg8L31kW5fOLM6kkbSyXxdqKAoScddVxUN5vvdA/s72-c/GlassFishAdmin.JPG" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-5717872391874566790</id><published>2010-03-22T20:51:00.000+05:00</published><updated>2010-03-22T20:51:14.275+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Computing"/><category scheme="http://www.blogger.com/atom/ns#" term="Energy"/><category scheme="http://www.blogger.com/atom/ns#" term="Information Technology"/><category scheme="http://www.blogger.com/atom/ns#" term="Virtualization"/><title type='text'>Virtualization :: Old wine in new bottles</title><content type='html'>Virtualization dates back to the introduction of CP/CMS later renamed IBM VM-370. VM-370 provided two key ingredients. Multiprogramming and extended machine with better interface with the hardware[1]. The recent interest in Virtualization came on the back drop of energy conservation and providing services to users. The explosive growth of the needs of internet and data centers has fueled this renewed interest in Virtualization. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Virtualization Software&lt;/b&gt;&lt;br /&gt;
Already have experimented with a virtual machine player &lt;a href=&quot;http://www.vmware.com/products/player/&quot;&gt;VMware Player&lt;/a&gt; marketed by VMware Inc. Using this we installed FreeBSD, Ubuntu, Gentoo on top of Windows XP.&lt;br /&gt;
&lt;br /&gt;
Whats the next step towards Virtualization? Hypervisor? Hypervisors are of two basic types. Type one are those which provide direct interface between the Guest OS and the hardware. While the type two hypervisor has a host OS onto which the virtualization software is installed and then the guest OS is installed. VMware ESX and GSX are examples of type 1 and type 2 hypervisors.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Benefits&lt;/b&gt;&lt;br /&gt;
So what exactly does Virtualization achieve? The increasing needs of users demanded setting up servers for individual applications. Email Server, Web Server, Internet Server, Print Server, File Server and many more servers are routinely installed and maintained by IT departments in large organizations. Now with the advent of superior hardware the needs of the users can be served by using only one machine with all these server applications running on it. This is generally not possible due to limitations/ requirements of using different OS for different applications. So its better to use hypervisors and install as many applications as possible over a set of hardware. This is not only energy efficient but due to hypervisors as easy to maintain as the each individual servers.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Drawbacks&lt;/b&gt;&lt;br /&gt;
The primary drawback is performance issues. Maintenance could also prop up as a problem (which it tended originally solved) but separate machines might be better from Maintenance. Another issue is security.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Genuine breakthrough or simply old wine in new bottles&lt;/b&gt;&lt;br /&gt;
Virtualization&lt;b&gt; &lt;/b&gt;is one of the few ideas which came back from the dead and took the world by storm. Its importance is gaining due to another technology. Cloud Computing is getting more and more pervasive and this has helped virtualization gain more strength and appeal. Clouds of applications can be maintained by using virtualization like never before. Calling it old win in a new bottles will be a little bit too simplistic. Although on the face of it, virtualization does borrow from the good old VM/370 but with the advent of internet and cloud computing its given the old wine a very nice taste. Application like &lt;a href=&quot;http://www.vmware.com/products/vsphere/&quot;&gt;VMware vSphere &lt;/a&gt;for data center virtualization are changing the meaning of virtualization. Amazon&#39;s Elastic Cloud Compute (EC2) enables users to rent out computers to run applications using virtualization as a building block to create the EC2.&amp;nbsp; Grid Computing, an effort where (even geographically) diverse machines come together and try to solve a single task, is defined by Plaszczak/Wellner as &quot;the technology that enables resource  virtualization, on-demand provisioning, and service (resource) sharing  between organizations.&quot;[3].&lt;br /&gt;
&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
A very nice but pretty detailed and long introduction is available &lt;a href=&quot;http://www.infoq.com/articles/virtualization-intro&quot;&gt;here&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;References&lt;/b&gt;&lt;br /&gt;
[1] Tanenbaum, A. S., &quot;Modern Operating Systems&quot;, Third Edition, 2008&lt;br /&gt;
[2] http://www.infoq.com/articles/virtualization-intro&lt;br /&gt;
[3]  P Plaszczak, R Wellner, &lt;i&gt;Grid computing&lt;/i&gt;, 2005, Elsevier/Morgan  Kaufmann, San Francisco</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/5717872391874566790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/5717872391874566790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/5717872391874566790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/5717872391874566790'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2010/03/virtualization-old-wine-in-new-bottles.html' title='Virtualization :: Old wine in new bottles'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-572510182545631537</id><published>2010-03-08T12:42:00.000+05:00</published><updated>2010-03-08T12:42:03.894+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Firefox"/><category scheme="http://www.blogger.com/atom/ns#" term="GNOME"/><category scheme="http://www.blogger.com/atom/ns#" term="KDE"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Proxy"/><category scheme="http://www.blogger.com/atom/ns#" term="Terminal"/><title type='text'>How and where should I change proxy settings in Linux?</title><content type='html'>&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;b style=&quot;color: red;&quot;&gt;PLEASE  NOTE THAT IF YOU ARE USING DIRECT CONNECTION TO THE INTERNET THEN THE  FOLLOWING POST DOES NOT APPLY. TRYING TO SET THE SETTINGS MAY LEAD TO  DISRUPTIONS / DISCONNECTION FROM THE INTERNET.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
How  and where should I change proxy settings in Linux? This is a most  frequent question posed by newbie (and not so new) Linux users ? This  mountain can be scaled in three steps.&lt;br /&gt;
&lt;h2&gt;Step 1 Using proxy to get &lt;i&gt;simply&lt;/i&gt;  connected to the internet&lt;/h2&gt;Just change proxy setting in Firefox  and/ or browser of your choice and start using internet. Ignore the rest  of urges of Linux to get updates etc and life will be cool and simple.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Of course life cannot continue to be so simple. One has  to after all install programs etc. &lt;br /&gt;
&lt;h2&gt; &lt;/h2&gt;&lt;h2&gt;Step 2 Adding proxy for system-wide settings&lt;br /&gt;
&lt;/h2&gt;Now the next step is to setup proxy for &quot;system-wide&quot; setting.  If using GNOME got to the System-&amp;gt; Preferences -&amp;gt; Network Proxy.  Typical settings could be ip address/ host name of the proxy server and  port name (typically 8080).&amp;nbsp; Click system-wide settings button and then  authenticate by the root password. This would add system-wide system  proxy settings and ability to use package managers and instant  messengers.&lt;br /&gt;
&lt;h2&gt;Step 3 Adding proxy to the terminal&lt;/h2&gt;Reading  through the manuals/ howtos  (including those on this blog) the  sudo apt-get install (or yum or other variants of package install  commands) frequently need proxy settings. The proxy settings can be  setup via the following command sequence.&lt;br /&gt;
&lt;br /&gt;
Edit your  .bashrc file present in home directory in your favorite editor. Here vi  is used for demonstration. &lt;br /&gt;
&lt;blockquote&gt;$ vi .bashrc&lt;/blockquote&gt;Go  to the end and add the following please note # indicates comments its  healthy practice to write comments so that later we know why we wrote  the particular lines.&lt;br /&gt;
&lt;blockquote&gt;# Proxy settings&lt;br /&gt;
export  http_proxy=&quot;http://MY_PROXY_IP_OR_HOST:MY_PROXY_PORT&quot;&lt;br /&gt;
export  ftp_proxy=&quot;http://MY_PROXY_IP_OR_HOST:MY_PROXY_PORT&quot;&lt;/blockquote&gt;&lt;br /&gt;
Please  ensure to replace MY_PROXY_IP_OR_HOST by the proxy server ip or host  name and MY_PROXY_PORT by port number (typically 8080). &lt;br /&gt;
&lt;br /&gt;
Close  the terminal and start again. Test out by writing export in the command  line and it should be followed by a long list and at the end you should  find.&lt;br /&gt;
&lt;br /&gt;
declare -x http_proxy=&quot;http://MY_PROXY_IP_OR_HOST:MY_PROXY_PORT&quot;&lt;br /&gt;
declare -x ftp_proxy=&quot;http://MY_PROXY_IP_OR_HOST:MY_PROXY_PORT&quot;&lt;br /&gt;
&lt;h2&gt;  &lt;/h2&gt;{Please note the MY_PROXY_IP _OR_HOST and PROXY_PORT will be  replaced by the ip/ host name and port number you specify earlier}&lt;br /&gt;
&lt;br /&gt;
A simple test whether the settings have been done is by the  following command (if available). It should open the command line  browser and open google&#39;s webpage. &lt;br /&gt;
&lt;blockquote&gt;$ w3m  www.google.com&lt;/blockquote&gt;&lt;br /&gt;
Now the apt-get install and  other commands requiring connection to internet via proxy should work.</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/572510182545631537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/572510182545631537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/572510182545631537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/572510182545631537'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2010/03/how-and-where-should-i-change-proxy.html' title='How and where should I change proxy settings in Linux?'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-9103985538734254905</id><published>2010-03-01T00:03:00.004+05:00</published><updated>2010-03-01T09:22:55.151+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apache"/><category scheme="http://www.blogger.com/atom/ns#" term="LAMP"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="MySQL"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><category scheme="http://www.blogger.com/atom/ns#" term="WebServers"/><title type='text'>Linux LAMP raising jinn and exorcising demons</title><content type='html'>In the early nineties Linux was a hobby, which in &lt;a href=&quot;http://www.linux.org/people/linus_post.html&quot;&gt;the words of Linus &lt;em&gt;Torvalds&lt;/em&gt; &lt;/a&gt;might never be professional like GNU. It took off and shook the foundations of empires aspiring to bleed every penny by selling server operating system. The contributions of open source community have caused severe headache for software companies. Apache Foundation is one such name. How much does it cost to setup a web server? Around the cost of a LAMP, compare this with the cost of aptly named vamp or is it WAMP?&amp;nbsp; What jinn did the lamp raise? What changes did it trigger? A very simple question is how come Ethernet and Networks were around in the seventies but it took just a couple of years after Linux for Internet to raise it head? The answers to all these questions is there was no LAMP earlier.&lt;br /&gt;
&lt;br /&gt;
LAMP stands for Linux Apache MySQL PHP (Python / Perl).&amp;nbsp; This is open source combination which gives a head start to web development environment. LAMPs have been around for not very long but the LAMP was developed gradually. First came Linux and then after couple of years it was Apache, followed by MySQL and PHP. Apache web server became the default choice because number one it was open source (and free) and secondly it integrated pretty well with Linux. Just imagine telling a windows user that the configurations of Apache can be done via httpd.conf file. Now first question asked by the window&#39;s user is ok http is understandable but what is the “d” and secondly what is .conf extension? So the integration of Apache into windows as a service is pretty much artificial and although it works ok but Linux &amp;amp; Apache go together.&lt;br /&gt;
&lt;br /&gt;
Next comes MySQL. MySQLis open source (and free). So that makes it the choice for database and its whole organization and architecture seamlessly fits into the Linux frame of mind. Just imagine having web interface for database management and then using ports to access databases. Windows does not deal in ports (until very late).&lt;br /&gt;
&lt;br /&gt;
Now PHP is a completely scripting language which looks somewhat like C. Again C and scripts rings&amp;nbsp; Linux/Unix bells. PHP created circa 1995 so were Apache and MySQL. Internet boomed and growth quadrupled ever since. &lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://lwn.net/Articles/189186/&quot;&gt;This article&lt;/a&gt;&amp;nbsp; also deals with similar subject and associated history.</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/9103985538734254905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/9103985538734254905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/9103985538734254905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/9103985538734254905'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2010/03/linux-lamp-raising-jinn-and-exorcising.html' title='Linux LAMP raising jinn and exorcising demons'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-5427040879909959489</id><published>2010-02-24T11:51:00.000+05:00</published><updated>2010-02-24T11:51:57.252+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="emacs"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="LISP"/><title type='text'>The LISP-end of the computing</title><content type='html'>LISP never introduced until very late in school and that too in the form of ONE slide (yes true) one slide. So what is it in LISP that deserves so little concern. Looking at MIT OCW lectures it seems to be THE language of choice. So whats lisp infact? LISP (LISt Processing) is a language where the primary data structure is list and modus operandi is list operations. &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Step 1:&amp;nbsp; Installation&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Installation of lisp on aptitude based package manager (like Debian/ Ubuntu) can be achieved by the following command.&lt;br /&gt;
&lt;blockquote&gt;&amp;nbsp;$ sudo apt-get&amp;nbsp; install clisp&lt;/blockquote&gt;Alongside this its recommended to install the HTML version of the book&amp;nbsp; Common Lisp the language, 2nd Edition by Guy L. Steele Jr. &lt;br /&gt;
&lt;blockquote&gt;$ sudo apt-get install cltl &lt;/blockquote&gt;The book is installed in the /usr/share/doc/cltl/clm/index.html. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Step 2: Testing LISP functionality&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
Soon after installation clisp can be tested for functionality. The following sequence of commands test the lisp environment.&lt;br /&gt;
&amp;nbsp;To start clisp&lt;br /&gt;
&lt;blockquote&gt;$ clisp&lt;/blockquote&gt;Try out the lisp-expression to add 2 and 2 the result is in the second line.&amp;nbsp; &lt;br /&gt;
&lt;blockquote&gt;[1]&amp;gt; (+ 2 2)&lt;br /&gt;
4&lt;/blockquote&gt;Build on more complex lists.&amp;nbsp; The following expression is lisp way of (1*2)+ 6.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;[2]&amp;gt; (+ (* 1 2) 6)&lt;br /&gt;
8&lt;/blockquote&gt;Now with the increase in comfort and confidence that lisp is installed and functional. Assigning values to variables is done via the following command&lt;br /&gt;
&lt;blockquote&gt;[3]&amp;gt; (setq a 10)&lt;br /&gt;
10&lt;/blockquote&gt;For an extremely simple loop using the print command to print hello world five times.&lt;br /&gt;
&lt;blockquote&gt;[4]&amp;gt; (do ((x 1 (+ x 1))) ((&amp;gt; x 5)) (print &quot;hello world&quot;))&lt;br /&gt;
&lt;br /&gt;
&quot;hello world&quot; &lt;br /&gt;
&quot;hello world&quot; &lt;br /&gt;
&quot;hello world&quot; &lt;br /&gt;
&quot;hello world&quot; &lt;br /&gt;
&quot;hello world&quot; &lt;br /&gt;
NIL&lt;/blockquote&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Step 3: Doing something more than &quot;hello world&quot; &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Having done with assignments and control structures. The next thing is procedures / functions. LISP supports functions via the keyword defun. &lt;br /&gt;
&lt;blockquote&gt;[5]&amp;gt; (defun increment (x) (+ x 1))&lt;br /&gt;
INCREMENT&lt;br /&gt;
[6]&amp;gt; (increment 10)&lt;br /&gt;
11&lt;/blockquote&gt;&amp;nbsp;The line 5 defines the function named increment which essentially has one argument and one line in which the argument is incremented by one. The line 6 calls the function increment with the argument passed as second member of the list.&lt;br /&gt;
&lt;br /&gt;
The following code finds the square of a variable x. &lt;br /&gt;
&lt;blockquote&gt;(defun square(x) (x*x))&lt;br /&gt;
(setq x 10)&lt;br /&gt;
(square x)&lt;/blockquote&gt;Exploration of LISP on emacs is another really interesting topic which needs a dedicated post.</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/5427040879909959489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/5427040879909959489' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/5427040879909959489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/5427040879909959489'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2010/02/lisp-end-of-computing.html' title='The LISP-end of the computing'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12418853.post-3710404613334572298</id><published>2010-02-24T11:44:00.000+05:00</published><updated>2010-02-24T11:44:07.394+05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Battery Life"/><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Performance"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>Why hibernating Linux might be a great idea</title><content type='html'>Why hibernating Linux might be a great idea? What supports the idea? There are basically two reasons that support this idea. One Linux has traditionally lived up to the billing as premium server class operating system.&amp;nbsp; Secondly it might strange but Windows has performed much better on Laptop using hibernate option than desktops. The former is a direct evidence support the convention while latter is circumstantial evidence. Since Windows is performing better in spite of it’s not so glorious record otherwise. So Linux can be expected to perform better than Windows because of its better history. The conjecture that server’s better performance can be attributed to the lesser frequent restarts needs to be further investigated but for now we could assume it to be true. Therefore its important to start setting up the hibernate option in the Operating System (be it Windows or Linux on laptop or a desktop). Its very good for the battery life too.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Steps for initiating hibernate inUbuntu Linux (Karmic 9.10)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Ubuntu click on your user name on the task bar and select &quot;Hibernate&quot; from the menu. &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Steps for initiating hibernate in Windows&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;XP Operating System the option can be &lt;/span&gt;accessed by clicking Control Panel --&amp;gt; Power Options --&amp;gt; Selecting the tab Hibernate. Click the box next to Enable Hibernate (it would be checked by a tick mark). Next go to Advanced Tab and select actions to perform when the lid of the portable computer is closed , Power button is pressed or standby button is pressed.</content><link rel='replies' type='application/atom+xml' href='http://zahidirfan.blogspot.com/feeds/3710404613334572298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/12418853/3710404613334572298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/3710404613334572298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12418853/posts/default/3710404613334572298'/><link rel='alternate' type='text/html' href='http://zahidirfan.blogspot.com/2010/02/why-hibernating-linux-might-be-great.html' title='Why hibernating Linux might be a great idea'/><author><name>Zahid Irfan</name><uri>http://www.blogger.com/profile/05600816176020222306</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>