<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0UHRno-eCp7ImA9WhRbEUU.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501</id><updated>2012-02-02T14:20:37.450+02:00</updated><category term="mobile" /><category term="gnustep" /><category term="JPA" /><category term="jspx" /><category term="stdio" /><category term="Arabic" /><category term="encoding" /><category term="web" /><category term="ArrayList" /><category term="bug" /><category term="hex" /><category term="Hibernate" /><category term="conversion" /><category term="gwt" /><category term="UI" /><category term="functions" /><category term="Windows" /><category term="KRun" /><category term="algorithms" /><category term="M$" /><category term="jar" /><category term="binary" /><category term="library" /><category term="HTTP" /><category term="objective-c" /><category term="EJB" /><category term="pointers" /><category term="bytecode" /><category term="make" /><category term="css" /><category term="httputil" /><category term="js" /><category term="society" /><category term="shift" /><category term="bits" /><category term="wc" /><category term="eclipse" /><category term="basics" /><category term="toplink" /><category term="servlet-lifecycle" /><category term="xml" /><category term="Struts" /><category term="threads" /><category term="jsf" /><category term="java" /><category term="xs" /><category term="authentication" /><category term="JAXP" /><category term="arrays" /><category term="thougts" /><category term="security" /><category term="lib_taglib" /><category term="IO" /><category term="streams" /><category term="bash" /><category term="mutable" /><category term="J2EE Patterns" /><category term="oracle" /><category term="العيد" /><category term="c" /><category term="socket" /><category term="xcode" /><category term="iPhone" /><category term="Firefox" /><category term="C for Java" /><category term="Datasource" /><category term="General Programming Topics" /><category term="unix-c" /><category term="Tree" /><category term="linking" /><category term="glib" /><category term="Qt" /><category term="asp.net" /><category term="static lib" /><category term="sobat" /><category term="fun" /><category term="J2EE" /><category term="json" /><category term="svn" /><category term="Serialization" /><category term="protability" /><category term="smauth" /><category term="reflection" /><category term="JSP/Servlet" /><category term="strange" /><category term="oas" /><category term="proxy" /><category term="javascript" /><category term="cross-site" /><category term="memory-management" /><category term="dynamic" /><category term="perl" /><category term="function pointer" /><category term="paging" /><category term="github" /><category term="infix" /><category term="gnome" /><category term="C++" /><category term="string" /><category term="nextstep" /><category term="الجيش" /><category term="mingw" /><category term="specs" /><category term="scop" /><category term="Chrome" /><category term="shell" /><category term="url-encoding" /><category term="CGI" /><category term="Implementation patterns" /><category term="callbacks" /><category term="bluecurve" /><category term="database" /><category term="lazy loading" /><category term="apache" /><category term="linux" /><category term="tricks" /><category term="jna" /><category term="XMLEncoder" /><category term="cgywin" /><category term="sorting" /><category term="gtk" /><category term="mini-httpd" /><category term="xslt" /><category term="googlecode" /><category term="JDBC" /><category term="oc4j" /><category term="asm" /><category term="wikipedia" /><category term="stack" /><category term="c stdlib" /><category term="objective-c for java" /><category term="Kamous" /><category term="cdt" /><category term="sql" /><category term="JPQL" /><category term="binary search" /><category term="orm" /><category term="dictionary" /><category term="gcc" /><category term="quotes" /><category term="IE" /><category term="datastructure" /><category term="stringutil" /><title>To Be Creative</title><subtitle type="html">&lt;center&gt;&lt;strong&gt;&lt;b&gt;
Programming is just a matter of thinking... if You have a good mind, then you are a good programmer... &lt;br&gt;For me, all the programming languages are just tools that is used by your mind
 &lt;/b&gt; &lt;/strong&gt; &lt;/center&gt;</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://m-hewedy.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>175</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/OpensourceGeek" /><feedburner:info uri="opensourcegeek" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DkECQXg7fip7ImA9WhRUGUs.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-3996639122389869889</id><published>2012-01-31T01:02:00.001+02:00</published><updated>2012-01-31T01:04:20.606+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-31T01:04:20.606+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JSP/Servlet" /><category scheme="http://www.blogger.com/atom/ns#" term="threads" /><category scheme="http://www.blogger.com/atom/ns#" term="specs" /><title>Servlets and thread safty</title><content type="html">From Servlet 2.4 specs:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: yellow; font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;SRV.2.3.3.3&lt;/span&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Thread Safety&lt;/span&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Implementations of the request and response objects are not guaranteed to be thread&lt;/span&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;safe. This means that they should only be used within the scope of the request han-&lt;/span&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;dling thread.&lt;/span&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;References to the request and response objects should not be given to objects&lt;/span&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;executing in other threads as the resulting behavior may be nondeterministic. If&lt;/span&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;the thread created by the application uses the container-managed objects, such as&lt;/span&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;the request or response object, those objects must be accessed only within the&lt;/span&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;servlet’s service life cycle and such thread itself should have a life cycle within&lt;/span&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;the life cycle of the servlet’s service method because accessing those objects&lt;/span&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;after the service method ends may cause undeterministic problems. Be aware&lt;/span&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;that the request and response objects are not thread safe. If those objects were&lt;/span&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;accessed in the multiple threads, the access should be synchronized or be done&lt;/span&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;through the wrapper to add the thread safety, for instance, synchronizing the call&lt;/span&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;of the methods to access the request attribute, or using a local output stream for&lt;/span&gt;&lt;br style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;the response object within a thread.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-3996639122389869889?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fTcGYue7C4iXpai9UKUSelqv96A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fTcGYue7C4iXpai9UKUSelqv96A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fTcGYue7C4iXpai9UKUSelqv96A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fTcGYue7C4iXpai9UKUSelqv96A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/gOzomVz9MyE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/3996639122389869889/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=3996639122389869889" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/3996639122389869889?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/3996639122389869889?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/gOzomVz9MyE/servlets-and-thread-safty.html" title="Servlets and thread safty" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2012/01/servlets-and-thread-safty.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQCQn48eyp7ImA9WhRUGUs.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-384410174168879804</id><published>2012-01-31T00:59:00.002+02:00</published><updated>2012-01-31T00:59:23.073+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-31T00:59:23.073+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="JSP/Servlet" /><category scheme="http://www.blogger.com/atom/ns#" term="servlet-lifecycle" /><category scheme="http://www.blogger.com/atom/ns#" term="specs" /><title>When the destroy method gets called in the Servlet?</title><content type="html">&lt;b&gt;It is an implementation-depended, nobody knows!&lt;/b&gt;

&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;SRV.2.3.4
End of Service
The servlet container is not required to keep a servlet loaded for any particular
period of time. A servlet instance may be kept active in a servlet container for a
period of milliseconds, for the lifetime of the servlet container (which could be a
number of days, months, or years), or any amount of time in between.
When the servlet container determines that a servlet should be removed from
service, it calls the destroy method of the Servlet interface to allow the servlet to
release any resources it is using and save any persistent state. For example, the
container may do this when it wants to conserve memory resources, or when it is
being shut down.
Before the servlet container calls the destroy method, it must allow any
threads that are currently running in the service method of the servlet to complete
execution, or exceed a server-defined time limit.
Once the destroy method is called on a servlet instance, the container may
not route other requests to that instance of the servlet. If the container needs to
enable the servlet again, it must do so with a new instance of the servlet’s class.
After the destroy method completes, the servlet container must release the
servlet instance so that it is eligible for garbage collection.

&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Source Servelt-2.4 specs document&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-384410174168879804?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RqK8drcME_dFtbFz8m5xZDyx6HM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RqK8drcME_dFtbFz8m5xZDyx6HM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RqK8drcME_dFtbFz8m5xZDyx6HM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RqK8drcME_dFtbFz8m5xZDyx6HM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/BwWcl1Z_hoM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/384410174168879804/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=384410174168879804" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/384410174168879804?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/384410174168879804?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/BwWcl1Z_hoM/when-destroy-method-gets-called-in.html" title="When the destroy method gets called in the Servlet?" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2012/01/when-destroy-method-gets-called-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUDRX0_fSp7ImA9WhRUGUs.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-4137006238886096569</id><published>2012-01-31T00:41:00.000+02:00</published><updated>2012-01-31T00:41:14.345+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-31T00:41:14.345+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="js" /><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="json" /><title>How easy to parse JSON in JS</title><content type="html">It is that easy!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;var myObj = eval(&amp;quot;obj={'name':'ali', 'age':'20'}&amp;quot;);

document.write (myObj.name + ' ' + myObj.age);

&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-4137006238886096569?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/M6FvrbkU-lTolWInxggAsACDRro/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M6FvrbkU-lTolWInxggAsACDRro/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/M6FvrbkU-lTolWInxggAsACDRro/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M6FvrbkU-lTolWInxggAsACDRro/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/wF0R_xM5r_w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/4137006238886096569/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=4137006238886096569" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/4137006238886096569?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/4137006238886096569?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/wF0R_xM5r_w/how-easy-to-parse-json-in-js.html" title="How easy to parse JSON in JS" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2012/01/how-easy-to-parse-json-in-js.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEMQn84eip7ImA9WhRUGUg.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-5428523716335212534</id><published>2012-01-30T23:06:00.002+02:00</published><updated>2012-01-30T23:08:03.132+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-30T23:08:03.132+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="js" /><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="url-encoding" /><title>Always encode the return URL</title><content type="html">Sometimes, we need to put some url as a parameter in the page url, example:&lt;br /&gt;
&lt;br /&gt;
https://open.login.yahoo.com/openid/yrp/signin?returnUrl=http%3A%2F%2Fmail.yahoo.com&amp;amp;rpcrumb=TzwDznuzRzH&amp;amp;.src=ym&lt;br /&gt;
&lt;br /&gt;
The value of parameter "returnUrl" is an encoded url (http%3A%2F%2Fmail.yahoo.com)&lt;br /&gt;
&lt;br /&gt;
So, whenever you want to put a URL as a parameter, you have to URL encode it.&lt;br /&gt;
&lt;br /&gt;
(you can use JS function encodeUrlComponenet&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-5428523716335212534?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ObQkGduZFnj7QdfKOAqDX3k9HiM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ObQkGduZFnj7QdfKOAqDX3k9HiM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ObQkGduZFnj7QdfKOAqDX3k9HiM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ObQkGduZFnj7QdfKOAqDX3k9HiM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/y1ocXC-1GGs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/5428523716335212534/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=5428523716335212534" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/5428523716335212534?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/5428523716335212534?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/y1ocXC-1GGs/always-encode-return-url.html" title="Always encode the return URL" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2012/01/always-encode-return-url.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4ER3o_cSp7ImA9WhRbEUU.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-3511604466881665055</id><published>2012-01-30T14:39:00.001+02:00</published><updated>2012-02-02T13:58:26.449+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-02T13:58:26.449+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sql" /><category scheme="http://www.blogger.com/atom/ns#" term="paging" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title>Paging in Oracle</title><content type="html">To do paging in oracle, the best way is to use:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;
SELECT * FROM
(
    SELECT a.*, rownum r__
    FROM
    (
        SELECT * FROM ORDERS WHERE CustomerID LIKE 'A%'
        ORDER BY OrderDate DESC, ShippingDate DESC
    ) a
    WHERE rownum &amp;lt; ((pageNumber * pageSize) + 1 )
)
WHERE r__ &amp;gt;= (((pageNumber-1) * pageSize) + 1)

&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Source:&amp;nbsp;&lt;a href="http://stackoverflow.com/questions/241622/paging-with-oracle#241643" target="_blank"&gt;http://stackoverflow.com/questions/241622/paging-with-oracle#241643&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-3511604466881665055?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8bIRWgzT7Osly576kJ2iUfO37l4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8bIRWgzT7Osly576kJ2iUfO37l4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8bIRWgzT7Osly576kJ2iUfO37l4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8bIRWgzT7Osly576kJ2iUfO37l4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/9GU4_TE2wxw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/3511604466881665055/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=3511604466881665055" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/3511604466881665055?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/3511604466881665055?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/9GU4_TE2wxw/paging-in-oracle.html" title="Paging in Oracle" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2012/01/paging-in-oracle.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUFSX06eyp7ImA9WhRUE00.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-771480508724594205</id><published>2012-01-23T09:20:00.000+02:00</published><updated>2012-01-23T09:20:18.313+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-23T09:20:18.313+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="wikipedia" /><category scheme="http://www.blogger.com/atom/ns#" term="quotes" /><category scheme="http://www.blogger.com/atom/ns#" term="functions" /><title>First-class Functions</title><content type="html">In &lt;a href="http://en.wikipedia.org/wiki/Computer_science" title="Computer science"&gt;computer science&lt;/a&gt;, a &lt;a href="http://en.wikipedia.org/wiki/Programming_language" title="Programming language"&gt;programming language&lt;/a&gt; is said to have &lt;b&gt;first-class functions&lt;/b&gt; if it treats &lt;a class="mw-redirect" href="http://en.wikipedia.org/wiki/Function_%28programming%29" title="Function (programming)"&gt;functions&lt;/a&gt; as &lt;a class="mw-redirect" href="http://en.wikipedia.org/wiki/First-class_object" title="First-class object"&gt;first-class objects&lt;/a&gt;.
 Specifically, this means that the language supports passing functions 
as arguments to other functions, returning them as the values from other
 functions, and assigning them to variables or storing them in data 
structures.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-771480508724594205?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MiQ8d9OdMNAHG7NddLcllYhB2i0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MiQ8d9OdMNAHG7NddLcllYhB2i0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MiQ8d9OdMNAHG7NddLcllYhB2i0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MiQ8d9OdMNAHG7NddLcllYhB2i0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/3-hMF1L1qw8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/771480508724594205/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=771480508724594205" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/771480508724594205?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/771480508724594205?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/3-hMF1L1qw8/first-class-functions.html" title="First-class Functions" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2012/01/first-class-functions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQBQH4yfip7ImA9WhRUEUg.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-2541394659449663515</id><published>2012-01-21T17:05:00.001+02:00</published><updated>2012-01-21T17:05:51.096+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-21T17:05:51.096+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="iPhone" /><category scheme="http://www.blogger.com/atom/ns#" term="smauth" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><category scheme="http://www.blogger.com/atom/ns#" term="googlecode" /><category scheme="http://www.blogger.com/atom/ns#" term="authentication" /><title>SMAuth, Simple Mobile Authentication</title><content type="html">&lt;br /&gt;
&lt;div style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 1.25em; max-width: 64em;"&gt;
SMAuth is a simple mobile (and desktop) apps authentication schema. SMAuth is most suitable to run over HTTPS.&lt;/div&gt;
&lt;div style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 1.25em; max-width: 64em;"&gt;
The whole idea here is to keep the client out of persisting the username/password and instead persist a token that will expire.&lt;/div&gt;
&lt;div style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 1.25em; max-width: 64em;"&gt;
SMAuth is more suitable for Mobile and Desktop applications where the Resource owner (who know the username/password) is the client himself.&lt;/div&gt;
&lt;div style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 1.25em; max-width: 64em;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 1.25em; max-width: 64em;"&gt;
Learn More:&amp;nbsp;&lt;a href="http://code.google.com/p/smauth/" style="background-color: transparent;"&gt;http://code.google.com/p/smauth/&lt;/a&gt;&lt;/div&gt;
&lt;div style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 1.25em; max-width: 64em;"&gt;
code:&amp;nbsp;&lt;a href="https://smauth.googlecode.com/svn/trunk/"&gt;https://smauth.googlecode.com/svn/trunk/&lt;/a&gt;&lt;/div&gt;
&lt;div style="background-color: white; font-family: arial, sans-serif; font-size: 13px; line-height: 1.25em; max-width: 64em;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-2541394659449663515?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vrO9bnNo1G-wLOEfYYtAQ5S8T0s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vrO9bnNo1G-wLOEfYYtAQ5S8T0s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vrO9bnNo1G-wLOEfYYtAQ5S8T0s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vrO9bnNo1G-wLOEfYYtAQ5S8T0s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/LD7QcO-WrMU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/2541394659449663515/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=2541394659449663515" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/2541394659449663515?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/2541394659449663515?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/LD7QcO-WrMU/smauth-simple-mobile-authentication.html" title="SMAuth, Simple Mobile Authentication" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2012/01/smauth-simple-mobile-authentication.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMCQ3o9fCp7ImA9WhRVF0k.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-7117924268729427606</id><published>2012-01-16T21:51:00.000+02:00</published><updated>2012-01-16T21:51:02.464+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-16T21:51:02.464+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="oas" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="JPA" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title>The names of the primary key fields must correspond</title><content type="html">I've faced some&amp;nbsp;JPA&amp;nbsp;Error (deployment-time error) which is:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;The names of the primary key fields or properties in the primary key class [class FooBarPK] and those of the entity bean class [class FooBar] must correspond and their types must be the same. Also, ensure that you have specified id elements for the corresponding attributes in XML and/or an @Id on the corresponding fields or properties of the entity class.&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The error appears when deploying some JPA project in Oracle App Server.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I've this entity:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;@Entity
@IdClass(FooBarPK.class)
public class FooBar implements Serializable {
    
    private static final long serialVersionUID = 1L;
    

    @Id
    private Long id1;
    @Id
    private Long id2;
    
    //...
}

//And this is the PK class 

public class NewParaPK implements Serializable 
{
    private static final long serialVersionUID = 1L;

    private Long id1;
    private Long id2;
}

&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
I wonder, why this happen...&lt;br /&gt;
&lt;br /&gt;
I found this line:&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;private static final long serialVersionUID = 1L;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
In the PK Class who cases the problem!&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-7117924268729427606?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/n47shABSb8--hFB7VtHwV3E_nQU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n47shABSb8--hFB7VtHwV3E_nQU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/n47shABSb8--hFB7VtHwV3E_nQU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n47shABSb8--hFB7VtHwV3E_nQU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/lv14eFEkZRU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/7117924268729427606/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=7117924268729427606" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/7117924268729427606?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/7117924268729427606?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/lv14eFEkZRU/names-of-primary-key-fields-must.html" title="The names of the primary key fields must correspond" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2012/01/names-of-primary-key-fields-must.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcHRHg7eyp7ImA9WhRUGU4.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-6439761571877285590</id><published>2012-01-15T01:19:00.001+02:00</published><updated>2012-01-30T16:33:55.603+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-30T16:33:55.603+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="unix-c" /><category scheme="http://www.blogger.com/atom/ns#" term="c" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><category scheme="http://www.blogger.com/atom/ns#" term="basics" /><title>Returning array from function in C</title><content type="html">I've here very intersting discussion about the best and common ways to return an array from a function..&lt;br /&gt;
&lt;br /&gt;
Some solutions to use output parameter and copy the value of the array into the value of this output parameter array.&lt;br /&gt;
Other solution to pass an array and use it inside the function.&lt;br /&gt;
 &lt;br /&gt;
Others to allocate the array inside the function and return refrence to it, but the caller have to free it once done.&lt;br /&gt;
&lt;br /&gt;
Others to return a struct contains this pointer...&lt;br /&gt;
&lt;br /&gt;
Please enjoy; &lt;a href="http://stackoverflow.com/questions/8865982/return-array-from-function-in-c" target="_blank"&gt;stackoverflow.com/questions/8865982/return-array-from-function-in-c&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-6439761571877285590?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FKtASrt6LX1NCaYB47ijj0St2Gg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FKtASrt6LX1NCaYB47ijj0St2Gg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FKtASrt6LX1NCaYB47ijj0St2Gg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FKtASrt6LX1NCaYB47ijj0St2Gg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/3Xk_s18-1Lg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/6439761571877285590/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=6439761571877285590" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/6439761571877285590?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/6439761571877285590?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/3Xk_s18-1Lg/returning-array-from-function-in-c.html" title="Returning array from function in C" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2012/01/returning-array-from-function-in-c.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkANRXcyeyp7ImA9WhRVFUU.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-3651471325103014499</id><published>2012-01-15T00:39:00.000+02:00</published><updated>2012-01-15T00:39:54.993+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-15T00:39:54.993+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gcc" /><category scheme="http://www.blogger.com/atom/ns#" term="c" /><title>Get base, simple, non-acurate function</title><content type="html">I've wrote a function to get a number string in some arbitrary bases.&lt;br /&gt;
&lt;br /&gt;
I claim that this function is not accurate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here's the source code:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;string.h&amp;gt;

void getBase(int num, int base, char* string);
char numbers[] = {'0', '1', '2', '3',
                  '4', '5', '6', '7',
                  '8', '9', 'A', 'B',
                  'C', 'D', 'E', 'F'};

int
main (int argc, char *argv[])
{
    char str[32];

    getBase(2, 2, str);
    printf("%s\n", str);

    getBase(255, 16, str);
    printf("%s\n", str);


    getBase(769878, 10, str);
    printf("%s\n", str);


    return 0;
}

void getBase(int n, int b, char* str)
{
    const size_t SIZE = 32;
    char arr[32+1]={0}; int digits=SIZE, i;
    char* ptr = arr;
    while (n &amp;gt; 0)
    {
        int t = n%b;
        n/=b;
        arr[--digits] = numbers[t];
    }
    while ( *ptr == '\0') ptr++;

    strcpy(str, ptr);
}

&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-3651471325103014499?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-yzQCmNYCRF7zQbN37jOm1OfyQA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-yzQCmNYCRF7zQbN37jOm1OfyQA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-yzQCmNYCRF7zQbN37jOm1OfyQA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-yzQCmNYCRF7zQbN37jOm1OfyQA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/ipD0JG6K9NE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/3651471325103014499/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=3651471325103014499" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/3651471325103014499?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/3651471325103014499?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/ipD0JG6K9NE/get-base-simple-non-acurate-function.html" title="Get base, simple, non-acurate function" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2012/01/get-base-simple-non-acurate-function.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UCQ3o_eip7ImA9WhRVEk0.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-2340154714169932571</id><published>2012-01-10T16:21:00.000+02:00</published><updated>2012-01-10T16:21:02.442+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-10T16:21:02.442+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><category scheme="http://www.blogger.com/atom/ns#" term="oracle" /><title>Oracle Encoding functions</title><content type="html">Salam,&lt;br /&gt;
&lt;br /&gt;
Actually I am not&amp;nbsp;interested&amp;nbsp;in Oracle DB programming, but I use it some times so, I'll list here two handy functions that I use.&lt;br /&gt;
&lt;br /&gt;
To get character ASCII code, use:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
select ascii('a') from dual&lt;/blockquote&gt;
&lt;br /&gt;
To get the character from a code page (according to DB local encoding), use:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
select chr(176) from dual&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-2340154714169932571?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6BmhvXM28B_qBQJNlrD21QrVedA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6BmhvXM28B_qBQJNlrD21QrVedA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6BmhvXM28B_qBQJNlrD21QrVedA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6BmhvXM28B_qBQJNlrD21QrVedA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/quPmko38jJM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/2340154714169932571/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=2340154714169932571" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/2340154714169932571?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/2340154714169932571?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/quPmko38jJM/oracle-encoding-functions.html" title="Oracle Encoding functions" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2012/01/oracle-encoding-functions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYAQXo7eyp7ImA9WhRWFE8.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-659325675648902422</id><published>2012-01-01T16:28:00.001+02:00</published><updated>2012-01-01T16:29:00.403+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-01T16:29:00.403+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><title>create constant object in Java</title><content type="html">I've wondered if I can create a constant object in Java? I don't mean a constant reference (which achieved by final keyword) or a class whose all of its instances are constants (a.k.a immutable objects).&lt;br /&gt;
&lt;br /&gt;
I've asked a question in SO and got a staisified answers ..&lt;br /&gt;
&lt;a href="http://stackoverflow.com/questions/8408871/create-constant-object-in-java" target="_blank"&gt;Please have a look&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-659325675648902422?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5ukCySEmpKkcIVW21gqD70W9mCk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5ukCySEmpKkcIVW21gqD70W9mCk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5ukCySEmpKkcIVW21gqD70W9mCk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5ukCySEmpKkcIVW21gqD70W9mCk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/uIMW9XhwKWg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/659325675648902422/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=659325675648902422" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/659325675648902422?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/659325675648902422?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/uIMW9XhwKWg/create-constant-object-in-java.html" title="create constant object in Java" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2012/01/create-constant-object-in-java.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUER3c_fCp7ImA9WhRXGEw.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-3873097505888763772</id><published>2011-12-25T14:51:00.003+02:00</published><updated>2011-12-25T15:03:26.944+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-25T15:03:26.944+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><title>Zipping in Java</title><content type="html">&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Zipper
{

    public static byte[] zip(String[] names, byte[][] data) throws IOException
    {
        if (names == null || data == null || names.length == 0 || names.length &lt; data.length)
     throw new IllegalArgumentException("Arguemnts are null or empty or names less than data");

        ByteArrayOutputStream outZipStream = new ByteArrayOutputStream();
        ZipOutputStream out = new ZipOutputStream(outZipStream);

        int l = data.length;
        for (int i=0; i &amp;lt; l; i++)
        {
            out.putNextEntry(new ZipEntry(names[i]));
            out.write(data[i]);
            out.closeEntry();
        }

        out.close();

        return outZipStream.toByteArray();
    }


    public static void main(String[] args) throws IOException
    {
        byte[] file1Data = &amp;quot;File 1 content&amp;quot;.getBytes(&amp;quot;UTF-8&amp;quot;);
        byte[] file2Data = &amp;quot;File 2 content&amp;quot;.getBytes(&amp;quot;UTF-8&amp;quot;);

        byte[] zippedData = zip (new String[] {&amp;quot;file1.txt&amp;quot;, &amp;quot;file2.txt&amp;quot;}, new byte[][] {file1Data, file2Data});

        FileOutputStream fileOutputStream = new FileOutputStream(&amp;quot;test.zip&amp;quot;);
        fileOutputStream.write(zippedData);
        fileOutputStream.close();
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-3873097505888763772?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/F0GTmFakgqgchj6LZ7lAVcStvgI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F0GTmFakgqgchj6LZ7lAVcStvgI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/F0GTmFakgqgchj6LZ7lAVcStvgI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F0GTmFakgqgchj6LZ7lAVcStvgI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/EZmfh98pCNU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/3873097505888763772/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=3873097505888763772" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/3873097505888763772?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/3873097505888763772?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/EZmfh98pCNU/zipping-in-java.html" title="Zipping in Java" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2011/12/zipping-in-java.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4GQno-fip7ImA9WhRbEUU.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-8102164768789660244</id><published>2011-12-20T09:16:00.001+02:00</published><updated>2012-02-02T14:15:23.456+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-02T14:15:23.456+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="lib_taglib" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>tagEditor, sample program utilize TagLib</title><content type="html">&lt;a href="http://m-hewedy.blogspot.com/2011/12/taglib-awesome-library-to-edit-id3.html"&gt;In a recent post&lt;/a&gt;, I'v talked about TagLib.&lt;br /&gt;
&lt;br /&gt;
And Now here's a full functional program:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;script src="https://gist.github.com/1500627.js?file=tagEditor.cc"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-8102164768789660244?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vnOMLu4mBCbR2KyFCfDiIcEQzNA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vnOMLu4mBCbR2KyFCfDiIcEQzNA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vnOMLu4mBCbR2KyFCfDiIcEQzNA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vnOMLu4mBCbR2KyFCfDiIcEQzNA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/R55uayEeJDo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/8102164768789660244/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=8102164768789660244" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/8102164768789660244?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/8102164768789660244?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/R55uayEeJDo/tageditor-sample-program-utilize-taglib.html" title="tagEditor, sample program utilize TagLib" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2011/12/tageditor-sample-program-utilize-taglib.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8NQX05fSp7ImA9WhRbEUU.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-52877863187981086</id><published>2011-12-19T22:01:00.000+02:00</published><updated>2012-02-02T14:14:50.325+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-02T14:14:50.325+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="lib_taglib" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>TagLib, an awesome library to edit ID3 metadata</title><content type="html">Recently, I have some MP3 files that contains its ID3 data in Arabic (I think either WINDOWS-1256 or ISO-8859-6 formats), the formats that cannot be read by &lt;a href="http://en.wikipedia.org/wiki/Rhythmbox"&gt;Rhythmbox.&lt;/a&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
So, I have either edit in source of Rhythmbox (which is a better solution), or find a library to enable me to re-write these metadata.&lt;br /&gt;
&lt;br /&gt;
I went with solution #2, I have do some search and found &lt;a href="http://developer.kde.org/%7Ewheeler/taglib.html"&gt;TagLib&lt;/a&gt;, a very awesome KDE library that makes this task very easy.

Building the library was a straightforward task, I can say it is the first lib that I can build from source in my life .) .&lt;br /&gt;
&lt;br /&gt;
Example:

&lt;script src="https://gist.github.com/1498608.js?file=tagLibSample.cc"&gt;
&lt;/script&gt;

To compile and run:
&lt;br /&gt;
&lt;blockquote&gt;
$cc -o taglibClient taglibClient.cc -ltag &lt;br /&gt;
$./taglibClient &lt;br /&gt;
Fairouz&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-52877863187981086?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6zuOsqJ0kPCPD9680wwdcr-11lg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6zuOsqJ0kPCPD9680wwdcr-11lg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6zuOsqJ0kPCPD9680wwdcr-11lg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6zuOsqJ0kPCPD9680wwdcr-11lg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/y-HUNPVR1x8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/52877863187981086/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=52877863187981086" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/52877863187981086?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/52877863187981086?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/y-HUNPVR1x8/taglib-awesome-library-to-edit-id3.html" title="TagLib, an awesome library to edit ID3 metadata" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2011/12/taglib-awesome-library-to-edit-id3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04GQns8fCp7ImA9WhRTE0k.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-4698162733283005681</id><published>2011-11-03T20:40:00.001+02:00</published><updated>2011-11-03T20:45:23.574+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-03T20:45:23.574+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>Type range in c++ by example</title><content type="html">&lt;script src="https://gist.github.com/1337384.js?file=gistfile1.cpp"&gt;
&lt;/script&gt;

Output:&lt;br /&gt;
&amp;nbsp;Wrong Value                   -1&lt;br /&gt;
Correct Value          2147483647&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-4698162733283005681?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qXiCgNxJzI7Q-weh4cKFYIVsAFw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qXiCgNxJzI7Q-weh4cKFYIVsAFw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qXiCgNxJzI7Q-weh4cKFYIVsAFw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qXiCgNxJzI7Q-weh4cKFYIVsAFw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/uUpTfw5ZoKw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/4698162733283005681/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=4698162733283005681" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/4698162733283005681?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/4698162733283005681?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/uUpTfw5ZoKw/type-range-in-c-by-example.html" title="Type range in c++ by example" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2011/11/type-range-in-c-by-example.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMGRH08cSp7ImA9WhdbEEU.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-1649065092991477663</id><published>2011-10-08T15:20:00.000+02:00</published><updated>2011-10-08T15:27:05.379+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-08T15:27:05.379+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="iPhone" /><category scheme="http://www.blogger.com/atom/ns#" term="UI" /><category scheme="http://www.blogger.com/atom/ns#" term="objective-c" /><title>The easier way to create Tabbed Bar in iPhone</title><content type="html">I see the easier way to create a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;UITabBar&lt;/span&gt; in iPhone, is through the&amp;nbsp;Controller.&lt;br /&gt;
&lt;br /&gt;
Only create the View yourself, if you want to customize it, otherwise, don't go that way!&lt;br /&gt;
&lt;br /&gt;
Suppose we have a button that we click to open a TabBar with two &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;UITabBarItem&lt;/span&gt;s, as usual , we push the next controller to the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;UINavigationConroller&lt;/span&gt; ... but this time we will push a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;UITabBarController&lt;/span&gt;..&lt;br /&gt;
&lt;br /&gt;
Here's the code with inline comments:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;

&lt;script src="https://gist.github.com/1272278.js?file=gistfile1.m"&gt;&lt;/script&gt;

References:&lt;br /&gt;
&lt;a href="http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UITabBarController_Class/Reference/Reference.html#//apple_ref/occ/cl/UITabBarController"&gt;http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UITabBarController_Class/Reference/Reference.html#//apple_ref/occ/cl/UITabBarController&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-CNkPNEp15vE/TpBPUHLTR_I/AAAAAAAAAMs/OrZPILY64w8/s1600/tab.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="320" width="166" src="http://2.bp.blogspot.com/-CNkPNEp15vE/TpBPUHLTR_I/AAAAAAAAAMs/OrZPILY64w8/s320/tab.png" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-1649065092991477663?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XyTzvr3re3A_YKMysrrJIl8VLC4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XyTzvr3re3A_YKMysrrJIl8VLC4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XyTzvr3re3A_YKMysrrJIl8VLC4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XyTzvr3re3A_YKMysrrJIl8VLC4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/t6lJq9RR2hc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/1649065092991477663/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=1649065092991477663" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/1649065092991477663?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/1649065092991477663?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/t6lJq9RR2hc/easier-way-to-create-tabbed-bar-in.html" title="The easier way to create Tabbed Bar in iPhone" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-CNkPNEp15vE/TpBPUHLTR_I/AAAAAAAAAMs/OrZPILY64w8/s72-c/tab.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2011/10/easier-way-to-create-tabbed-bar-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQGRn0_cCp7ImA9WhdUGUo.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-390087472877395994</id><published>2011-10-07T11:03:00.000+02:00</published><updated>2011-10-07T11:05:27.348+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-07T11:05:27.348+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="library" /><category scheme="http://www.blogger.com/atom/ns#" term="github" /><category scheme="http://www.blogger.com/atom/ns#" term="objective-c" /><title>ObjectMapper an Objective-c lib to map data structure into user-objects</title><content type="html">I was working on iPhone project and I needed to consume data from some JSON service.&lt;br /&gt;
&lt;br /&gt;
I've tried to find some library to convert returned JSON String into my own custom objects... but I didn't.&lt;br /&gt;
&lt;br /&gt;
Most popular JSON libraries (JSONKit, SBJson, etc ..) just convert JSON String into Objective-c data structures (NSDictionary, NSArray).

So I decided to write a lib to convert from NSDictionary and NSAarry into my own custom-objects.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://github.com/MuhammadHewedy/ObjectMapper"&gt;ObjectMapper&lt;/a&gt; [&lt;a href="https://github.com/MuhammadHewedy/ObjectMapper"&gt;https://github.com/MuhammadHewedy/ObjectMapper&lt;/a&gt;] is a project used to convert NSDictaionry to Custom user objects. It can used with JSON parsing libraries (JSONKit, SBJSON, etc) to convert the returned NSDictionary and NSArray into custom user objects&lt;br /&gt;
&lt;br /&gt;
Example usage:&lt;br /&gt;
&lt;script src="https://gist.github.com/1269799.js?file=gistfile1.m"&gt;
&lt;/script&gt;

&lt;br /&gt;
Complete Example project found here : &lt;a href="https://github.com/MuhammadHewedy/ObjectMapper/tree/master/ObjectMapperTester"&gt;https://github.com/MuhammadHewedy/ObjectMapper/tree/master/ObjectMapperTester&lt;/a&gt;&lt;br /&gt;
Good luck!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-390087472877395994?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Tnu7yNPea6ZShzR0bZVnCNCKGGY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Tnu7yNPea6ZShzR0bZVnCNCKGGY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Tnu7yNPea6ZShzR0bZVnCNCKGGY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Tnu7yNPea6ZShzR0bZVnCNCKGGY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/jsDe_hNmys8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/390087472877395994/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=390087472877395994" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/390087472877395994?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/390087472877395994?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/jsDe_hNmys8/objectmapper-objective-c-lib-to-map.html" title="ObjectMapper an Objective-c lib to map data structure into user-objects" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2011/10/objectmapper-objective-c-lib-to-map.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEMQX0zfip7ImA9WhdUFU0.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-1891672953563588550</id><published>2011-10-01T21:59:00.000+02:00</published><updated>2011-10-01T22:24:40.386+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-01T22:24:40.386+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="xcode" /><category scheme="http://www.blogger.com/atom/ns#" term="callbacks" /><category scheme="http://www.blogger.com/atom/ns#" term="objective-c" /><title>Centralize your NSURLConnection code while using Async connections</title><content type="html">We should use Aysnc calls when dealing with NSURLConnections.

May articles illustrate why we should do that, among them is this one &lt;a href="http://www.cocoabyss.com/foundation/nsurlconnection-synchronous-asynchronous/"&gt;The truth about synchronous NSURLConnection&lt;/a&gt;. Also see my question on &lt;a href="http://stackoverflow.com/questions/7612755/is-there-any-issue-if-i-used-sync-connections-in-iphone/7612785"&gt;SO&lt;/a&gt;.

But We want also to have our "Communicate" code grouped somewhere not to be implemented by all of our classes in the project.

This post is talking about how to solve this issue.. Thanks to &lt;a href="http://stackoverflow.com/users/803787/alisoftware"&gt;AliSoftware&lt;/a&gt; .

Well, We will have some Utility class the doing the connection and handle the data for us.. but what will we do when we got the data from the server? we should call some method on the caller class (in cases, it is a ViewContoller).. so we should send the target class and the selector to be called when the connection done receiving data.

So, Here's the code (quick and dirty) for the URLCaller class:

&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;
&lt;pre class="code"&gt;&lt;span class="lineNumber"&gt;  1. &lt;/span&gt;
&lt;span class="lineNumber"&gt;  2. &lt;/span&gt;&lt;span class="preprocessor"&gt;#import&lt;/span&gt; &lt;span class="string"&gt;&amp;lt;Foundation/Foundation.h&amp;gt;&lt;/span&gt;
&lt;span class="lineNumber"&gt;  3. &lt;/span&gt;
&lt;span class="lineNumber"&gt;  4. &lt;/span&gt;@interface URLCaller : NSObject
&lt;span class="lineNumber"&gt;  5. &lt;/span&gt;{
&lt;span class="lineNumber"&gt;  6. &lt;/span&gt;    NSMutableData* data;
&lt;span class="lineNumber"&gt;  7. &lt;/span&gt;    NSObject* target;
&lt;span class="lineNumber"&gt;  8. &lt;/span&gt;    SEL selector;
&lt;span class="lineNumber"&gt;  9. &lt;/span&gt;}
&lt;span class="lineNumber"&gt; 10. &lt;/span&gt;@&lt;span class="keyword"&gt;property&lt;/span&gt; (nonatomic, retain) NSMutableData* data;
&lt;span class="lineNumber"&gt; 11. &lt;/span&gt;@&lt;span class="keyword"&gt;property&lt;/span&gt; (nonatomic, retain) NSObject* target;
&lt;span class="lineNumber"&gt; 12. &lt;/span&gt;@&lt;span class="keyword"&gt;property&lt;/span&gt; (nonatomic) SEL selector;
&lt;span class="lineNumber"&gt; 13. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 14. &lt;/span&gt;-(id) initWithTarget:(NSObject*) target selector:(SEL)selector;
&lt;span class="lineNumber"&gt; 15. &lt;/span&gt;-(&lt;span class="keyword"&gt;void&lt;/span&gt;) call:(NSString*) url;
&lt;span class="lineNumber"&gt; 16. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 17. &lt;/span&gt;@end
&lt;span class="lineNumber"&gt; 18. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 19. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 20. &lt;/span&gt;&lt;span class="preprocessor"&gt;#import&lt;/span&gt; &lt;span class="string"&gt;"URLCaller.h"&lt;/span&gt;
&lt;span class="lineNumber"&gt; 21. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 22. &lt;/span&gt;@implementation URLCaller
&lt;span class="lineNumber"&gt; 23. &lt;/span&gt;@synthesize data, target, selector;
&lt;span class="lineNumber"&gt; 24. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 25. &lt;/span&gt;-(id) initWithTarget:(NSObject*) _target selector:(SEL)_selector
&lt;span class="lineNumber"&gt; 26. &lt;/span&gt;{
&lt;span class="lineNumber"&gt; 27. &lt;/span&gt;    &lt;span class="keyword"&gt;if&lt;/span&gt; (self = [super init])
&lt;span class="lineNumber"&gt; 28. &lt;/span&gt;    {
&lt;span class="lineNumber"&gt; 29. &lt;/span&gt;        self.target = _target;
&lt;span class="lineNumber"&gt; 30. &lt;/span&gt;        self.selector = _selector;
&lt;span class="lineNumber"&gt; 31. &lt;/span&gt;    }
&lt;span class="lineNumber"&gt; 32. &lt;/span&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; self;
&lt;span class="lineNumber"&gt; 33. &lt;/span&gt;}
&lt;span class="lineNumber"&gt; 34. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 35. &lt;/span&gt;-(&lt;span class="keyword"&gt;void&lt;/span&gt;) call:(NSString*) url
&lt;span class="lineNumber"&gt; 36. &lt;/span&gt;{
&lt;span class="lineNumber"&gt; 37. &lt;/span&gt;    NSURLConnection* connection = [[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]] &lt;span class="keyword"&gt;delegate&lt;/span&gt;:self];
&lt;span class="lineNumber"&gt; 38. &lt;/span&gt;    [connection release];
&lt;span class="lineNumber"&gt; 39. &lt;/span&gt;}
&lt;span class="lineNumber"&gt; 40. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 41. &lt;/span&gt;&lt;span class="preprocessor"&gt;#pragma&lt;/span&gt; mark - NSURLConnection deleages
&lt;span class="lineNumber"&gt; 42. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 43. &lt;/span&gt;-(&lt;span class="keyword"&gt;void&lt;/span&gt;)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response
&lt;span class="lineNumber"&gt; 44. &lt;/span&gt;{
&lt;span class="lineNumber"&gt; 45. &lt;/span&gt;    data = [[NSMutableData alloc] init]; &lt;span class="comment"&gt;// _data being an ivar&lt;/span&gt;
&lt;span class="lineNumber"&gt; 46. &lt;/span&gt;}
&lt;span class="lineNumber"&gt; 47. &lt;/span&gt;-(&lt;span class="keyword"&gt;void&lt;/span&gt;)connection:(NSURLConnection*)connection didReceiveData:(NSData*)_data
&lt;span class="lineNumber"&gt; 48. &lt;/span&gt;{
&lt;span class="lineNumber"&gt; 49. &lt;/span&gt;    [self.data appendData:_data];
&lt;span class="lineNumber"&gt; 50. &lt;/span&gt;}
&lt;span class="lineNumber"&gt; 51. &lt;/span&gt;-(&lt;span class="keyword"&gt;void&lt;/span&gt;)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error
&lt;span class="lineNumber"&gt; 52. &lt;/span&gt;{
&lt;span class="lineNumber"&gt; 53. &lt;/span&gt;    &lt;span class="comment"&gt;// Handle the error properly&lt;/span&gt;
&lt;span class="lineNumber"&gt; 54. &lt;/span&gt;}
&lt;span class="lineNumber"&gt; 55. &lt;/span&gt;-(&lt;span class="keyword"&gt;void&lt;/span&gt;)connectionDidFinishLoading:(NSURLConnection*)connection
&lt;span class="lineNumber"&gt; 56. &lt;/span&gt;{
&lt;span class="lineNumber"&gt; 57. &lt;/span&gt;    NSString* stringData = [[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]autorelease];
&lt;span class="lineNumber"&gt; 58. &lt;/span&gt;    [target performSelector:selector withObject:stringData];
&lt;span class="lineNumber"&gt; 59. &lt;/span&gt;}
&lt;span class="lineNumber"&gt; 60. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 61. &lt;/span&gt;- (&lt;span class="keyword"&gt;void&lt;/span&gt;)dealloc 
&lt;span class="lineNumber"&gt; 62. &lt;/span&gt;{
&lt;span class="lineNumber"&gt; 63. &lt;/span&gt;    [target release];
&lt;span class="lineNumber"&gt; 64. &lt;/span&gt;    [data release];
&lt;span class="lineNumber"&gt; 65. &lt;/span&gt;    [super dealloc];
&lt;span class="lineNumber"&gt; 66. &lt;/span&gt;}
&lt;span class="lineNumber"&gt; 67. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 68. &lt;/span&gt;@end
&lt;/pre&gt;

And in the caller class (in my case is a ViewController), we will use the URLCaller class:


&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;
&lt;pre class="code"&gt;&lt;span class="lineNumber"&gt;  1. &lt;/span&gt;
&lt;span class="lineNumber"&gt;  2. &lt;/span&gt;-(IBAction)getDataFromServer:(id)sender
&lt;span class="lineNumber"&gt;  3. &lt;/span&gt;{
&lt;span class="lineNumber"&gt;  4. &lt;/span&gt;    URLCaller* caller = [[URLCaller alloc]initWithTarget:self selector:@selector(setTextViewContents:)];
&lt;span class="lineNumber"&gt;  5. &lt;/span&gt;    [caller call:@&lt;span class="string"&gt;"http://search.twitter.com/search.json?q=Muhammad"&lt;/span&gt;];
&lt;span class="lineNumber"&gt;  6. &lt;/span&gt;    [caller release];
&lt;span class="lineNumber"&gt;  7. &lt;/span&gt;}
&lt;span class="lineNumber"&gt;  8. &lt;/span&gt;
&lt;span class="lineNumber"&gt;  9. &lt;/span&gt;&lt;span class="comment"&gt;// this will got called when the data returned from the server&lt;/span&gt;
&lt;span class="lineNumber"&gt; 10. &lt;/span&gt;-(&lt;span class="keyword"&gt;void&lt;/span&gt;) setTextViewContents:(NSString*) contents
&lt;span class="lineNumber"&gt; 11. &lt;/span&gt;{
&lt;span class="lineNumber"&gt; 12. &lt;/span&gt;    text.text = contents;
&lt;span class="lineNumber"&gt; 13. &lt;/span&gt;}
&lt;/pre&gt;

You can get the project source code from &lt;a href="https://docs.google.com/viewer?a=v&amp;pid=explorer&amp;chrome=true&amp;srcid=0B2Xkd4v63U2mMjg3NDY3ZDMtNmM0Yy00N2M5LWE0Y2ItZjVkNmM4NDFkNjMz&amp;hl=en_US"&gt;here &lt;/a&gt;


Very important notice is that, the application will never got freeze while the data is being transferred, and this is what we wants!

&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-1891672953563588550?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0tpSM5j2KB8xdngXGSzXOn9p4YA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0tpSM5j2KB8xdngXGSzXOn9p4YA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0tpSM5j2KB8xdngXGSzXOn9p4YA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0tpSM5j2KB8xdngXGSzXOn9p4YA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/RD5i5VcLYFY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/1891672953563588550/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=1891672953563588550" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/1891672953563588550?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/1891672953563588550?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/RD5i5VcLYFY/centralize-your-nsurlconnection-code.html" title="Centralize your NSURLConnection code while using Async connections" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2011/10/centralize-your-nsurlconnection-code.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAFRHg7fSp7ImA9WhdVE0k.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-6968862659565168790</id><published>2011-09-18T00:30:00.000+02:00</published><updated>2011-09-18T14:08:35.605+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-18T14:08:35.605+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="library" /><category scheme="http://www.blogger.com/atom/ns#" term="gnustep" /><category scheme="http://www.blogger.com/atom/ns#" term="static lib" /><category scheme="http://www.blogger.com/atom/ns#" term="objective-c" /><title>Building and installing NSJSONSerialization on gnustep to parse JSON data</title><content type="html">I was &lt;a href="http://stackoverflow.com/questions/7449159/json-parser-for-gnustep-runtime-objective-c-1-0/7457221#7457221"&gt;seeking &lt;/a&gt;for a JSON Parser for Objective-c on gnustep runtime..&lt;br /&gt;
Thanks to &lt;a href="http://stackoverflow.com/users/456851/sudo-rm-rf"&gt;sudo rm -rf &lt;/a&gt; he directed me to use the source code from &lt;a href="http://svn.gna.org/svn/gnustep/libs/base/trunk/Source/NSJSONSerialization.m"&gt;gnustep repository&lt;/a&gt; .&lt;br /&gt;
&lt;br /&gt;
I got the source code for Three Files&amp;nbsp;&lt;code&gt;&lt;a href="http://svn.gna.org/svn/gnustep/libs/base/trunk/Headers/Foundation/NSJSONSerialization.h"&gt;NSJSONSerialization.h,&lt;/a&gt; &lt;a href="http://svn.gna.org/svn/gnustep/libs/base/trunk/Source/NSJSONSerialization.m"&gt;NSJSONSerialization.m&lt;/a&gt; &lt;/code&gt; and &lt;code&gt;&lt;a href="http://svn.gna.org/svn/gnustep/libs/base/trunk/Source/GSFastEnumeration.h"&gt; GSFastEnumeration.h&lt;/a&gt;&lt;/code&gt;, although not worked directly, I've did very small modifications
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Steps to use:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: #f3f3f3;"&gt;Note: Steps below are executed on Mingw and should be used with little or no modifications on Linux.&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&amp;nbsp;Go and download the archive that contains the modified Three files from &lt;a href="https://docs.google.com/leaf?id=0B2Xkd4v63U2mMmNhZWM3YTItZmVmYy00NDlmLTg1ZTktZmI4YjFmYTA5MWZi&amp;amp;hl=en_US"&gt;here&lt;/a&gt;. &lt;br /&gt; put them into a directory say in your home folder with the following path: &lt;code&gt;~/objc/json&lt;/code&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&lt;span class="Apple-style-span" style="background-color: #fff2cc;"&gt;cd ~/objc/json&lt;/span&gt; &lt;/code&gt; and issue the following command to build the files:
&lt;br /&gt;&lt;code style="background-color: #fff2cc;"&gt;
gcc -c `gnustep-config --objc-flags` *.m &lt;/code&gt;
&lt;br /&gt;
If no errors reported, this means the build process succeed. and the object file has been generated.
&lt;/li&gt;
&lt;li&gt;
Now let's put this files inside the gnustep installation, to do so, mv the the .h files &lt;code&gt;NSJSONSerialization.h&lt;/code&gt; and &lt;code&gt;GSFastEnumeration.h&lt;/code&gt; to &lt;code&gt;/GNUstep/System/Library/Headers/Foundation&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;
Now let's &lt;a href="http://m-hewedy.blogspot.com/2011/02/how-to-write-static-library-in-linux.html"&gt;create a static library&lt;/a&gt;&amp;nbsp;and put it inside gnustep libraries path:
&lt;br /&gt;Use the following command:
&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: #fff2cc;"&gt;&lt;code&gt;ar q libNSJSONSerialization.a NSJSONSerialization.o&lt;/code&gt;
&lt;/span&gt;
Then move the generated &lt;code&gt;libNSJSONSerialization.a&lt;/code&gt; file to&amp;nbsp;&lt;code&gt;/GNUstep/System/Library/Libraries/&lt;/code&gt; 
&lt;/li&gt;
&lt;/ol&gt;
&lt;span class="Apple-style-span" style="background-color: #eeeeee;"&gt;Note that, we now copied &lt;i&gt;two&lt;/i&gt; &lt;b&gt;.h&lt;/b&gt; files and &lt;i&gt;one&lt;/i&gt; &lt;b&gt;.a&lt;/b&gt; file into gnustep installation directories.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: #f3f3f3;"&gt;You now safe to remove all the directory &lt;code&gt;~/objc/json&lt;/code&gt; and all of its contents.
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Now You are done installing the &lt;code&gt;NSJSONSerialization&lt;/code&gt; as a static lib into gnustep.&lt;br /&gt;
&lt;br /&gt;
Now let's write a test program. Now create a brand new directory into your home&amp;nbsp;directory&amp;nbsp;say &lt;code style="background-color: white;"&gt;~/objc/json_test&lt;/code&gt;&amp;nbsp;and create a file named &lt;code&gt;json_main.m&lt;/code&gt; in this directory.&lt;br /&gt;
Put the following code in it:

&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span class="lineNumber"&gt;  1. &lt;/span&gt;&lt;span class="preprocessor"&gt;#import&lt;/span&gt; &lt;span class="string"&gt;&amp;lt;Foundation/Foundation.h&amp;gt;&lt;/span&gt;
&lt;span class="lineNumber"&gt;  2. &lt;/span&gt;&lt;span class="preprocessor"&gt;#import&lt;/span&gt; &lt;span class="string"&gt;&amp;lt;Foundation/NSJSONSerialization.h&amp;gt;&lt;/span&gt;
&lt;span class="lineNumber"&gt;  3. &lt;/span&gt;
&lt;span class="lineNumber"&gt;  4. &lt;/span&gt;&lt;span class="keyword"&gt;int&lt;/span&gt; main(&lt;span class="keyword"&gt;void&lt;/span&gt;)
&lt;span class="lineNumber"&gt;  5. &lt;/span&gt;{
&lt;span class="lineNumber"&gt;  6. &lt;/span&gt;    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc]init];
&lt;span class="lineNumber"&gt;  7. &lt;/span&gt;
&lt;span class="lineNumber"&gt;  8. &lt;/span&gt;    NSDictionary* dictionary = [NSDictionary dictionaryWithObjects:
&lt;span class="lineNumber"&gt;  9. &lt;/span&gt;                [NSArray arrayWithObjects: @&lt;span class="string"&gt;"Muhammad"&lt;/span&gt;, @&lt;span class="string"&gt;"26"&lt;/span&gt;, @&lt;span class="string"&gt;"2011"&lt;/span&gt;, @&lt;span class="string"&gt;"Cairo, Egypt"&lt;/span&gt;, 
&lt;span class="lineNumber"&gt; 10. &lt;/span&gt;                [NSArray arrayWithObjects: @&lt;span class="string"&gt;"Arabic"&lt;/span&gt;, @&lt;span class="string"&gt;"English"&lt;/span&gt;, nil] , nil]
&lt;span class="lineNumber"&gt; 11. &lt;/span&gt;                                                            forKeys: 
&lt;span class="lineNumber"&gt; 12. &lt;/span&gt;                [NSArray arrayWithObjects: @&lt;span class="string"&gt;"name"&lt;/span&gt;, @&lt;span class="string"&gt;"age"&lt;/span&gt;, @&lt;span class="string"&gt;"year"&lt;/span&gt;, @&lt;span class="string"&gt;"address"&lt;/span&gt;, @&lt;span class="string"&gt;"language"&lt;/span&gt;, nil]];
&lt;span class="lineNumber"&gt; 13. &lt;/span&gt;    NSError* error;
&lt;span class="lineNumber"&gt; 14. &lt;/span&gt;    NSData* data = [NSJSONSerialization dataWithJSONObject: dictionary
&lt;span class="lineNumber"&gt; 15. &lt;/span&gt;                options:NSJSONWritingPrettyPrinted
&lt;span class="lineNumber"&gt; 16. &lt;/span&gt;                error: &amp;amp;error];
&lt;span class="lineNumber"&gt; 17. &lt;/span&gt;    &lt;span class="keyword"&gt;if&lt;/span&gt; (error)
&lt;span class="lineNumber"&gt; 18. &lt;/span&gt;    {
&lt;span class="lineNumber"&gt; 19. &lt;/span&gt;        NSLog(@&lt;span class="string"&gt;"ERROR %@"&lt;/span&gt;, error);
&lt;span class="lineNumber"&gt; 20. &lt;/span&gt;    }&lt;span class="keyword"&gt;else&lt;/span&gt;
&lt;span class="lineNumber"&gt; 21. &lt;/span&gt;    {
&lt;span class="lineNumber"&gt; 22. &lt;/span&gt;        NSString* jsonString = [[NSString alloc] initWithData: data 
&lt;span class="lineNumber"&gt; 23. &lt;/span&gt;                                        encoding: NSASCIIStringEncoding];
&lt;span class="lineNumber"&gt; 24. &lt;/span&gt;        NSLog(@&lt;span class="string"&gt;"%@"&lt;/span&gt;, jsonString);
&lt;span class="lineNumber"&gt; 25. &lt;/span&gt;                    
&lt;span class="lineNumber"&gt; 26. &lt;/span&gt;        [jsonString release];        
&lt;span class="lineNumber"&gt; 27. &lt;/span&gt;    }
&lt;span class="lineNumber"&gt; 28. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 29. &lt;/span&gt;    [pool release];
&lt;span class="lineNumber"&gt; 30. &lt;/span&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; 0;
&lt;span class="lineNumber"&gt; 31. &lt;/span&gt;}
&lt;/pre&gt;
Now use the following command to compile it:&lt;br /&gt;
&lt;code style="background-color: #fff2cc;"&gt;
 gcc `gnustep-config --objc-flags` *.m  -L /GNUstep/System/Library/Libraries -lNSJSONSerialization -lobjc -lgnustep-base&amp;nbsp;&lt;/code&gt;&lt;br /&gt;
[The inclusion for the libraries should be exactly in this order]&lt;br /&gt;
&lt;br /&gt;
Now run:&lt;br /&gt;
&lt;code&gt;
$ a.exe&lt;br /&gt;
2011-09-18 01:35:49.726 a[5696] {&lt;br /&gt;
"language": [&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "Arabic",&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "English"&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ],&lt;br /&gt;
"year": "2011",&lt;br /&gt;
"name": "Muhammad",&lt;br /&gt;
"age": "26",&lt;br /&gt;
"address": "Cairo, Egypt"&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;
&lt;br /&gt;
Congratulations! you can use gnustep to parse json data. 
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: #f3f3f3;"&gt;Disclaimer: This article is distributed in the hope that it will be useful, but without any warranty. Use it on your own.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-6968862659565168790?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/g7LnJbany9NaRlwPFtiOVtSRcaE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/g7LnJbany9NaRlwPFtiOVtSRcaE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/g7LnJbany9NaRlwPFtiOVtSRcaE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/g7LnJbany9NaRlwPFtiOVtSRcaE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/WG0SiTgBzeA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/6968862659565168790/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=6968862659565168790" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/6968862659565168790?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/6968862659565168790?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/WG0SiTgBzeA/building-and-installing.html" title="Building and installing NSJSONSerialization on gnustep to parse JSON data" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2011/09/building-and-installing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cNRHc-fCp7ImA9WhdWGUg.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-2410623509162830163</id><published>2011-09-13T23:57:00.000+02:00</published><updated>2011-09-13T23:58:15.954+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-13T23:58:15.954+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="objective-c" /><title>NSData wraps array of bytes (8bits) so beware when use it</title><content type="html">SA,

Objc NSData object wraps array of bytes so you should send the size parameter properly..

suppose you want to wrap an array of a custom struct Emp.. you have to specify the size of the Array as number of bytes as following:

sizeof(StructType)* array_length

See the following example carefully:

&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;
&lt;pre class="code"&gt;&lt;span class="lineNumber"&gt;  1. &lt;/span&gt;&lt;span class="preprocessor"&gt;#import&lt;/span&gt; &lt;span class="string"&gt;&amp;lt;Foundation/Foundation.h&amp;gt;&lt;/span&gt;
&lt;span class="lineNumber"&gt;  2. &lt;/span&gt;
&lt;span class="lineNumber"&gt;  3. &lt;/span&gt;&lt;span class="keyword"&gt;int&lt;/span&gt; main(&lt;span class="keyword"&gt;void&lt;/span&gt;)
&lt;span class="lineNumber"&gt;  4. &lt;/span&gt;{
&lt;span class="lineNumber"&gt;  5. &lt;/span&gt;
&lt;span class="lineNumber"&gt;  6. &lt;/span&gt;    NSAutoreleasePool* pool = [NSAutoreleasePool &lt;span class="keyword"&gt;new&lt;/span&gt;];
&lt;span class="lineNumber"&gt;  7. &lt;/span&gt;
&lt;span class="lineNumber"&gt;  8. &lt;/span&gt;    &lt;span class="keyword"&gt;typedef&lt;/span&gt; &lt;span class="keyword"&gt;struct&lt;/span&gt;
&lt;span class="lineNumber"&gt;  9. &lt;/span&gt;    {
&lt;span class="lineNumber"&gt; 10. &lt;/span&gt;        &lt;span class="keyword"&gt;char&lt;/span&gt;* name;
&lt;span class="lineNumber"&gt; 11. &lt;/span&gt;        &lt;span class="keyword"&gt;int&lt;/span&gt;   hiredate;
&lt;span class="lineNumber"&gt; 12. &lt;/span&gt;    }Emp;
&lt;span class="lineNumber"&gt; 13. &lt;/span&gt;    
&lt;span class="lineNumber"&gt; 14. &lt;/span&gt;    Emp emps[] = {{&lt;span class="string"&gt;"Mouhammad"&lt;/span&gt;, 2010}, {&lt;span class="string"&gt;"Moutaz"&lt;/span&gt;, 2010}, {&lt;span class="string"&gt;"Ahmad"&lt;/span&gt;, 2010}};
&lt;span class="lineNumber"&gt; 15. &lt;/span&gt;    
&lt;span class="lineNumber"&gt; 16. &lt;/span&gt;    NSData* data = [NSData dataWithBytes : emps length: &lt;span class="keyword"&gt;sizeof&lt;/span&gt;(Emp) * 3 ];    &lt;span class="comment"&gt;// here we specify the number of BYTES to be holded&lt;/span&gt;
&lt;span class="lineNumber"&gt; 17. &lt;/span&gt;    
&lt;span class="lineNumber"&gt; 18. &lt;/span&gt;    Emp* newEmps = [data bytes];
&lt;span class="lineNumber"&gt; 19. &lt;/span&gt;    &lt;span class="keyword"&gt;int&lt;/span&gt; count = [data length]/ &lt;span class="keyword"&gt;sizeof&lt;/span&gt;(Emp);            &lt;span class="comment"&gt;// here we go the number of bytes holded, &lt;/span&gt;
&lt;span class="lineNumber"&gt; 20. &lt;/span&gt;                                            &lt;span class="comment"&gt;//watch the division of the total number of bytes&lt;/span&gt;
&lt;span class="lineNumber"&gt; 21. &lt;/span&gt;                                            &lt;span class="comment"&gt;// over the size of each struct element&lt;/span&gt;
&lt;span class="lineNumber"&gt; 22. &lt;/span&gt;    
&lt;span class="lineNumber"&gt; 23. &lt;/span&gt;    &lt;span class="keyword"&gt;int&lt;/span&gt; i=0;
&lt;span class="lineNumber"&gt; 24. &lt;/span&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (; i&amp;lt; count; i++)
&lt;span class="lineNumber"&gt; 25. &lt;/span&gt;    {
&lt;span class="lineNumber"&gt; 26. &lt;/span&gt;        Emp e = *newEmps;
&lt;span class="lineNumber"&gt; 27. &lt;/span&gt;        NSLog(@&lt;span class="string"&gt;"%s %i"&lt;/span&gt;, e.name, e.hiredate);
&lt;span class="lineNumber"&gt; 28. &lt;/span&gt;        newEmps++;
&lt;span class="lineNumber"&gt; 29. &lt;/span&gt;    }
&lt;span class="lineNumber"&gt; 30. &lt;/span&gt;    
&lt;span class="lineNumber"&gt; 31. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 32. &lt;/span&gt;    [pool release];
&lt;span class="lineNumber"&gt; 33. &lt;/span&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; 0;
&lt;span class="lineNumber"&gt; 34. &lt;/span&gt;}
&lt;/pre&gt;

 &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-2410623509162830163?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NEOHSfqVyy8Jq85RRmq1JFLaXeA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NEOHSfqVyy8Jq85RRmq1JFLaXeA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NEOHSfqVyy8Jq85RRmq1JFLaXeA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NEOHSfqVyy8Jq85RRmq1JFLaXeA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/4MlYQfhDmDg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/2410623509162830163/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=2410623509162830163" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/2410623509162830163?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/2410623509162830163?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/4MlYQfhDmDg/nsdata-wraps-array-of-bytes-8bits-so.html" title="NSData wraps array of bytes (8bits) so beware when use it" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2011/09/nsdata-wraps-array-of-bytes-8bits-so.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcMQXw-eSp7ImA9WhdWGEs.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-5257884997355642526</id><published>2011-09-12T23:47:00.003+02:00</published><updated>2011-09-12T23:48:00.251+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-12T23:48:00.251+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="objective-c" /><title>The power of Objective-c categories.. add category for NSData object</title><content type="html">Categories is a very powerful feature in objective-c.. we will show how to use it to overrides the function "description" of the NSData object in the following example:

&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;
&lt;pre class="code"&gt;&lt;span class="preprocessor"&gt;#import&lt;/span&gt; &lt;span class="string"&gt;&amp;lt;Foundation/Foundation.h&amp;gt;&lt;/span&gt;
&lt;span class="preprocessor"&gt;#import&lt;/span&gt; &lt;span class="string"&gt;"../../mem.h"&lt;/span&gt;

@interface NSDate(description)
-(NSString*) description;
@end

@implementation NSData(description)
-(NSString*) description
{
    &lt;span class="keyword"&gt;int&lt;/span&gt; len = [self length];
    &lt;span class="keyword"&gt;char&lt;/span&gt; buff[len];
    [self getBytes: buff];
    
    NSMutableString* ret = [NSMutableString string];
    
    &lt;span class="keyword"&gt;int&lt;/span&gt; i;
    &lt;span class="keyword"&gt;for&lt;/span&gt; (i=0; i &amp;lt; len; i++)
        [ret appendFormat: @&lt;span class="string"&gt;"%i "&lt;/span&gt;, buff[i] ];
    
    &lt;span class="keyword"&gt;return&lt;/span&gt; ret;
}
@end

&lt;span class="keyword"&gt;int&lt;/span&gt; main(&lt;span class="keyword"&gt;void&lt;/span&gt;)
{
    POOL;
    &lt;span class="keyword"&gt;char&lt;/span&gt; arr[]= {10, 20, 30};
    
    NSData* data = [NSData dataWithBytes:arr length: &lt;span class="keyword"&gt;sizeof&lt;/span&gt;(arr)/&lt;span class="keyword"&gt;sizeof&lt;/span&gt;(&lt;span class="keyword"&gt;char&lt;/span&gt;)];
    
    NSLog(@&lt;span class="string"&gt;"%@"&lt;/span&gt;, [data description]);

    _POOL;
    &lt;span class="keyword"&gt;return&lt;/span&gt; 0;
}
&lt;/pre&gt;

Note, POOL and _POOL are two macros defined in "../../mem.h" as follow:

#define POOL NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]
#define _POOL [pool drain]

&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-5257884997355642526?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KGkB_faLjXXRrE0Xr0L6D9e8q5M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KGkB_faLjXXRrE0Xr0L6D9e8q5M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KGkB_faLjXXRrE0Xr0L6D9e8q5M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KGkB_faLjXXRrE0Xr0L6D9e8q5M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/38HXsqYF9dw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/5257884997355642526/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=5257884997355642526" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/5257884997355642526?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/5257884997355642526?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/38HXsqYF9dw/power-of-objective-c-categories-add.html" title="The power of Objective-c categories.. add category for NSData object" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2011/09/power-of-objective-c-categories-add.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UMQX88fCp7ImA9WhdWGEw.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-1143435573601657892</id><published>2011-09-12T11:20:00.001+02:00</published><updated>2011-09-12T11:21:20.174+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-12T11:21:20.174+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="memory-management" /><category scheme="http://www.blogger.com/atom/ns#" term="c" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><category scheme="http://www.blogger.com/atom/ns#" term="objective-c" /><title>How to determine the amount of memory required by my char* in struct?</title><content type="html">Suppose you have the following C struct:
&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;
&lt;pre class="code"&gt;&lt;span class="lineNumber"&gt;  1. &lt;/span&gt;&lt;span class="keyword"&gt;typedef&lt;/span&gt; &lt;span class="keyword"&gt;struct&lt;/span&gt;
&lt;span class="lineNumber"&gt;  2. &lt;/span&gt;{
&lt;span class="lineNumber"&gt;  3. &lt;/span&gt;    &lt;span class="keyword"&gt;char&lt;/span&gt;* name;
&lt;span class="lineNumber"&gt;  4. &lt;/span&gt;}Emp;
&lt;/pre&gt;

I asked in &lt;a href="http://stackoverflow.com/questions/7385436/how-to-determine-the-amount-of-memory-required-by-my-char"&gt;SO &lt;/a&gt;on how to determine the amount of memory to allocate to the char* struct member. and the answer was to use lazy/delayed allocation as of:

&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;
&lt;pre class="code"&gt;&lt;span class="lineNumber"&gt;  1. &lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt; setName(Emp* emp, &lt;span class="keyword"&gt;char&lt;/span&gt;* newName)
&lt;span class="lineNumber"&gt;  2. &lt;/span&gt;{
&lt;span class="lineNumber"&gt;  3. &lt;/span&gt;    free(emp-&amp;gt;name);
&lt;span class="lineNumber"&gt;  4. &lt;/span&gt;    emp-&amp;gt;name = malloc(strlen(newName) + 1);
&lt;span class="lineNumber"&gt;  5. &lt;/span&gt;    strcpy(emp-&amp;gt;name, newName);
&lt;span class="lineNumber"&gt;  6. &lt;/span&gt;}
&lt;/pre&gt;
(It seems to me to be the same idea used for Objective-C, the setter is release the previous pointer and then retain (in C to copy) the parameter pointer.

So, the whole program will be:

&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;
&lt;pre class="code"&gt;&lt;span class="lineNumber"&gt;  1. &lt;/span&gt;&lt;span class="preprocessor"&gt;#include&lt;/span&gt; &lt;span class="string"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;
&lt;span class="lineNumber"&gt;  2. &lt;/span&gt;&lt;span class="preprocessor"&gt;#include&lt;/span&gt; &lt;span class="string"&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;
&lt;span class="lineNumber"&gt;  3. &lt;/span&gt;&lt;span class="preprocessor"&gt;#include&lt;/span&gt; &lt;span class="string"&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;
&lt;span class="lineNumber"&gt;  4. &lt;/span&gt;
&lt;span class="lineNumber"&gt;  5. &lt;/span&gt;&lt;span class="keyword"&gt;typedef&lt;/span&gt; &lt;span class="keyword"&gt;struct&lt;/span&gt;
&lt;span class="lineNumber"&gt;  6. &lt;/span&gt;{
&lt;span class="lineNumber"&gt;  7. &lt;/span&gt;    &lt;span class="keyword"&gt;char&lt;/span&gt;* name;
&lt;span class="lineNumber"&gt;  8. &lt;/span&gt;}Emp;
&lt;span class="lineNumber"&gt;  9. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 10. &lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt; init(Emp** emp)
&lt;span class="lineNumber"&gt; 11. &lt;/span&gt;{
&lt;span class="lineNumber"&gt; 12. &lt;/span&gt;    *emp = malloc(&lt;span class="keyword"&gt;sizeof&lt;/span&gt;(Emp));
&lt;span class="lineNumber"&gt; 13. &lt;/span&gt;    (*emp)-&amp;gt;name = NULL;
&lt;span class="lineNumber"&gt; 14. &lt;/span&gt;    (*emp)-&amp;gt;name = malloc(&lt;span class="keyword"&gt;sizeof&lt;/span&gt;(&lt;span class="keyword"&gt;char&lt;/span&gt;*));
&lt;span class="lineNumber"&gt; 15. &lt;/span&gt;}
&lt;span class="lineNumber"&gt; 16. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 17. &lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt; release(Emp** emp)
&lt;span class="lineNumber"&gt; 18. &lt;/span&gt;{
&lt;span class="lineNumber"&gt; 19. &lt;/span&gt;    free((*emp)-&amp;gt;name);
&lt;span class="lineNumber"&gt; 20. &lt;/span&gt;    free(*emp);
&lt;span class="lineNumber"&gt; 21. &lt;/span&gt;}
&lt;span class="lineNumber"&gt; 22. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 23. &lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt; setName(Emp* emp, &lt;span class="keyword"&gt;char&lt;/span&gt;* newName)
&lt;span class="lineNumber"&gt; 24. &lt;/span&gt;{
&lt;span class="lineNumber"&gt; 25. &lt;/span&gt;    free(emp-&amp;gt;name);
&lt;span class="lineNumber"&gt; 26. &lt;/span&gt;    emp-&amp;gt;name = malloc(strlen(newName) + 1);
&lt;span class="lineNumber"&gt; 27. &lt;/span&gt;    strcpy(emp-&amp;gt;name, newName);
&lt;span class="lineNumber"&gt; 28. &lt;/span&gt;}
&lt;span class="lineNumber"&gt; 29. &lt;/span&gt;&lt;span class="keyword"&gt;char&lt;/span&gt;* getName(Emp* emp)
&lt;span class="lineNumber"&gt; 30. &lt;/span&gt;{
&lt;span class="lineNumber"&gt; 31. &lt;/span&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; emp-&amp;gt;name;
&lt;span class="lineNumber"&gt; 32. &lt;/span&gt;}
&lt;span class="lineNumber"&gt; 33. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 34. &lt;/span&gt;&lt;span class="keyword"&gt;int&lt;/span&gt; main(&lt;span class="keyword"&gt;void&lt;/span&gt;)
&lt;span class="lineNumber"&gt; 35. &lt;/span&gt;{
&lt;span class="lineNumber"&gt; 36. &lt;/span&gt;    Emp* emp;
&lt;span class="lineNumber"&gt; 37. &lt;/span&gt;    init(&amp;amp;emp);
&lt;span class="lineNumber"&gt; 38. &lt;/span&gt;    setName(emp, &lt;span class="string"&gt;"Muhammad                              Abdullah"&lt;/span&gt;);
&lt;span class="lineNumber"&gt; 39. &lt;/span&gt;    printf(&lt;span class="string"&gt;"%s"&lt;/span&gt;, getName(emp));
&lt;span class="lineNumber"&gt; 40. &lt;/span&gt;    release(&amp;amp;emp);
&lt;span class="lineNumber"&gt; 41. &lt;/span&gt;    
&lt;span class="lineNumber"&gt; 42. &lt;/span&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; 0;
&lt;span class="lineNumber"&gt; 43. &lt;/span&gt;}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-1143435573601657892?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hXqerRFaYyR-DXipxSb9MwRgzRw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hXqerRFaYyR-DXipxSb9MwRgzRw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hXqerRFaYyR-DXipxSb9MwRgzRw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hXqerRFaYyR-DXipxSb9MwRgzRw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/tUhlzLq-9Ls" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/1143435573601657892/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=1143435573601657892" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/1143435573601657892?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/1143435573601657892?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/tUhlzLq-9Ls/how-to-determine-amount-of-memory.html" title="How to determine the amount of memory required by my char* in struct?" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2011/09/how-to-determine-amount-of-memory.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQFRXw6eip7ImA9WhdWF0o.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-8540120937278229900</id><published>2011-09-11T23:25:00.000+02:00</published><updated>2011-09-11T23:25:14.212+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-11T23:25:14.212+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="memory-management" /><category scheme="http://www.blogger.com/atom/ns#" term="objective-c" /><title>What if you forgot to deallocate reserved memory in your objective-c (c/c++) programs?</title><content type="html">The worst thing ever that I usually do is to forget to deallocates memory for objects I create when working with non-garbage collector languages (like C/C++/Objective C)

So, That If I didn't de-allocate the memory .. what in that??

Actually it is a disaster ...

Watch this example:

&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;
&lt;pre class="code"&gt;&lt;span class="lineNumber"&gt;  1. &lt;/span&gt;&lt;span class="preprocessor"&gt;#import&lt;/span&gt; &lt;span class="string"&gt;&amp;lt;Foundation/Foundation.h&amp;gt;&lt;/span&gt;
&lt;span class="lineNumber"&gt;  2. &lt;/span&gt;
&lt;span class="lineNumber"&gt;  3. &lt;/span&gt;&lt;span class="keyword"&gt;int&lt;/span&gt; main(&lt;span class="keyword"&gt;void&lt;/span&gt;)
&lt;span class="lineNumber"&gt;  4. &lt;/span&gt;{
&lt;span class="lineNumber"&gt;  5. &lt;/span&gt;    &lt;span class="keyword"&gt;long&lt;/span&gt; &lt;span class="keyword"&gt;long&lt;/span&gt; i;
&lt;span class="lineNumber"&gt;  6. &lt;/span&gt;    &lt;span class="keyword"&gt;for&lt;/span&gt; (i=0; i &amp;lt; 100000000000000; i++)
&lt;span class="lineNumber"&gt;  7. &lt;/span&gt;    {
&lt;span class="lineNumber"&gt;  8. &lt;/span&gt;        NSString* string = [[NSString alloc] initWithString :@&lt;span class="string"&gt;"string"&lt;/span&gt;];
&lt;span class="lineNumber"&gt;  9. &lt;/span&gt;        &lt;span class="comment"&gt;//[string release];&lt;/span&gt;
&lt;span class="lineNumber"&gt; 10. &lt;/span&gt;    }
&lt;span class="lineNumber"&gt; 11. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 12. &lt;/span&gt;    [NSThread sleepForTimeInterval: 5];
&lt;span class="lineNumber"&gt; 13. &lt;/span&gt;    
&lt;span class="lineNumber"&gt; 14. &lt;/span&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; 0;
&lt;span class="lineNumber"&gt; 15. &lt;/span&gt;}
&lt;/pre&gt;

Then compile and run with GNUstep, the memory used by the program reaches 2 GB (I've 4 GB of RAM), and then the program terminates printing:
&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;
&lt;pre class="code"&gt;Virtual memory exhausted

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

&lt;/pre&gt;

Remember, each time you enter a block of code (method for example) and allocate the miss to deallocate the memory you allocate will add this to the RAM and will not remove..finally you may find your program get crashed because it uses too much memory !
 &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-8540120937278229900?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/N9dtRn95SMyciMBSo3Smb26y3Qo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/N9dtRn95SMyciMBSo3Smb26y3Qo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/N9dtRn95SMyciMBSo3Smb26y3Qo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/N9dtRn95SMyciMBSo3Smb26y3Qo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/tChVIhYfdMM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/8540120937278229900/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=8540120937278229900" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/8540120937278229900?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/8540120937278229900?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/tChVIhYfdMM/what-if-you-forgot-to-deallocate.html" title="What if you forgot to deallocate reserved memory in your objective-c (c/c++) programs?" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2011/09/what-if-you-forgot-to-deallocate.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMHSHsyeip7ImA9WhdWFko.&quot;"><id>tag:blogger.com,1999:blog-798619670957236501.post-4376243020079300520</id><published>2011-09-10T19:09:00.000+02:00</published><updated>2011-09-10T19:40:39.592+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-10T19:40:39.592+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="objective-c" /><title>Wrappers in Objective-c</title><content type="html">&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;
&lt;pre class="code"&gt;&lt;span class="lineNumber"&gt;  1. &lt;/span&gt;&lt;span class="comment"&gt;//string_2_primtiives.m&lt;/span&gt;
&lt;span class="lineNumber"&gt;  2. &lt;/span&gt;#import &amp;lt;Foundation/Foundation.h&amp;gt;
&lt;span class="lineNumber"&gt;  3. &lt;/span&gt;
&lt;span class="lineNumber"&gt;  4. &lt;/span&gt;&lt;span class="comment"&gt;/**
&lt;span class="lineNumber"&gt;  5. &lt;/span&gt;*    You can convert the following to each other
&lt;span class="lineNumber"&gt;  6. &lt;/span&gt;*    NSNumber &amp;lt;=&amp;gt; primitives &amp;lt;=&amp;gt; NSString 
&lt;span class="lineNumber"&gt;  7. &lt;/span&gt;*/&lt;/span&gt;
&lt;span class="lineNumber"&gt;  8. &lt;/span&gt;
&lt;span class="lineNumber"&gt;  9. &lt;/span&gt;&lt;span class="keyword"&gt;int&lt;/span&gt; main(&lt;span class="keyword"&gt;void&lt;/span&gt;)
&lt;span class="lineNumber"&gt; 10. &lt;/span&gt;{
&lt;span class="lineNumber"&gt; 11. &lt;/span&gt;    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
&lt;span class="lineNumber"&gt; 12. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 13. &lt;/span&gt;    &lt;span class="comment"&gt;//1- primitives =&amp;gt; NSNumber&lt;/span&gt;
&lt;span class="lineNumber"&gt; 14. &lt;/span&gt;    NSNumber* intNum = [NSNumber numberWithInteger: 20];
&lt;span class="lineNumber"&gt; 15. &lt;/span&gt;    NSNumber* floatNum = [NSNumber numberWithFloat: 25.325];
&lt;span class="lineNumber"&gt; 16. &lt;/span&gt;    
&lt;span class="lineNumber"&gt; 17. &lt;/span&gt;    NSLog(&lt;span class="string"&gt;@"%@ %@"&lt;/span&gt;, intNum, floatNum);
&lt;span class="lineNumber"&gt; 18. &lt;/span&gt;    
&lt;span class="lineNumber"&gt; 19. &lt;/span&gt;    &lt;span class="comment"&gt;// 2- NSNumber =&amp;gt; primitives:&lt;/span&gt;
&lt;span class="lineNumber"&gt; 20. &lt;/span&gt;    &lt;span class="keyword"&gt;int&lt;/span&gt; x = [intNum intValue];
&lt;span class="lineNumber"&gt; 21. &lt;/span&gt;    &lt;span class="keyword"&gt;float&lt;/span&gt; f = [floatNum floatValue];
&lt;span class="lineNumber"&gt; 22. &lt;/span&gt;    &lt;span class="comment"&gt;// also, we can convert nay number object (regards of which value it contains) to any primitives type&lt;/span&gt;
&lt;span class="lineNumber"&gt; 23. &lt;/span&gt;    &lt;span class="comment"&gt;//, and the standard C casting rules will be applied:&lt;/span&gt;
&lt;span class="lineNumber"&gt; 24. &lt;/span&gt;    &lt;span class="keyword"&gt;int&lt;/span&gt; x2 = [floatNum intValue];
&lt;span class="lineNumber"&gt; 25. &lt;/span&gt;    
&lt;span class="lineNumber"&gt; 26. &lt;/span&gt;    NSLog(&lt;span class="string"&gt;@"%d %g %d"&lt;/span&gt;, x, f, x2);
&lt;span class="lineNumber"&gt; 27. &lt;/span&gt;    
&lt;span class="lineNumber"&gt; 28. &lt;/span&gt;    &lt;span class="comment"&gt;// 3- primitives =&amp;gt; NSString:&lt;/span&gt;
&lt;span class="lineNumber"&gt; 29. &lt;/span&gt;    NSString* &lt;span class="keyword"&gt;string&lt;/span&gt; = [NSString stringWithFormat: &lt;span class="string"&gt;@"%d"&lt;/span&gt;,x];
&lt;span class="lineNumber"&gt; 30. &lt;/span&gt;    NSLog(&lt;span class="string"&gt;@"%@"&lt;/span&gt;, &lt;span class="keyword"&gt;string&lt;/span&gt;);
&lt;span class="lineNumber"&gt; 31. &lt;/span&gt;    
&lt;span class="lineNumber"&gt; 32. &lt;/span&gt;    &lt;span class="comment"&gt;// 4- NSString = &amp;gt; primitives:&lt;/span&gt;
&lt;span class="lineNumber"&gt; 33. &lt;/span&gt;    &lt;span class="keyword"&gt;int&lt;/span&gt; i = [&lt;span class="string"&gt;@"1"&lt;/span&gt; intValue];
&lt;span class="lineNumber"&gt; 34. &lt;/span&gt;    &lt;span class="keyword"&gt;float&lt;/span&gt; g = [&lt;span class="string"&gt;@"13.4"&lt;/span&gt; floatValue];
&lt;span class="lineNumber"&gt; 35. &lt;/span&gt;    &lt;span class="keyword"&gt;int&lt;/span&gt; i2 = [&lt;span class="string"&gt;@"13.4"&lt;/span&gt; intValue];
&lt;span class="lineNumber"&gt; 36. &lt;/span&gt;    
&lt;span class="lineNumber"&gt; 37. &lt;/span&gt;    NSLog(&lt;span class="string"&gt;@"%d %g %d"&lt;/span&gt;, i, g, i2);
&lt;span class="lineNumber"&gt; 38. &lt;/span&gt;    
&lt;span class="lineNumber"&gt; 39. &lt;/span&gt;    &lt;span class="comment"&gt;// 5- NSNumber =&amp;gt; NSString&lt;/span&gt;
&lt;span class="lineNumber"&gt; 40. &lt;/span&gt;    NSString* str = [NSString stringWithFormat:&lt;span class="string"&gt;@"%@"&lt;/span&gt;, [NSNumber numberWithBool:20]];
&lt;span class="lineNumber"&gt; 41. &lt;/span&gt;    NSLog(&lt;span class="string"&gt;@"%@"&lt;/span&gt;, str);
&lt;span class="lineNumber"&gt; 42. &lt;/span&gt;    
&lt;span class="lineNumber"&gt; 43. &lt;/span&gt;    &lt;span class="comment"&gt;// 6- NSString =&amp;gt; NSNumber &lt;/span&gt;
&lt;span class="lineNumber"&gt; 44. &lt;/span&gt;    NSNumber* charNum = [NSNumber numberWithChar: [&lt;span class="string"&gt;@"20"&lt;/span&gt; intValue]];
&lt;span class="lineNumber"&gt; 45. &lt;/span&gt;    NSLog(&lt;span class="string"&gt;@"%@"&lt;/span&gt;, charNum);
&lt;span class="lineNumber"&gt; 46. &lt;/span&gt;    
&lt;span class="lineNumber"&gt; 47. &lt;/span&gt;    [pool release];
&lt;span class="lineNumber"&gt; 48. &lt;/span&gt;    &lt;span class="keyword"&gt;return&lt;/span&gt; 0;
&lt;span class="lineNumber"&gt; 49. &lt;/span&gt;}
&lt;span class="lineNumber"&gt; 50. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 51. &lt;/span&gt;&lt;span class="comment"&gt;/** output:
&lt;span class="lineNumber"&gt; 52. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 53. &lt;/span&gt;20 25.325
&lt;span class="lineNumber"&gt; 54. &lt;/span&gt;20 25.325 25
&lt;span class="lineNumber"&gt; 55. &lt;/span&gt;20
&lt;span class="lineNumber"&gt; 56. &lt;/span&gt;1 13.4 13
&lt;span class="lineNumber"&gt; 57. &lt;/span&gt;1
&lt;span class="lineNumber"&gt; 58. &lt;/span&gt;20
&lt;span class="lineNumber"&gt; 59. &lt;/span&gt;
&lt;span class="lineNumber"&gt; 60. &lt;/span&gt;*/&lt;/span&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/798619670957236501-4376243020079300520?l=m-hewedy.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gRzYyWADc_bMe3EsUFbIQ1PsroY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gRzYyWADc_bMe3EsUFbIQ1PsroY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gRzYyWADc_bMe3EsUFbIQ1PsroY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gRzYyWADc_bMe3EsUFbIQ1PsroY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OpensourceGeek/~4/fdpAS0aJGfA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://m-hewedy.blogspot.com/feeds/4376243020079300520/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=798619670957236501&amp;postID=4376243020079300520" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/4376243020079300520?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/798619670957236501/posts/default/4376243020079300520?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OpensourceGeek/~3/fdpAS0aJGfA/wrappers-in-objective-c.html" title="Wrappers in Objective-c" /><author><name>Moh Abdullah</name><uri>https://profiles.google.com/117491584027635695452</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Dq6Ia--VstM/AAAAAAAAAAI/AAAAAAAAAMY/lgQJt5cdZ3Q/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://m-hewedy.blogspot.com/2011/09/wrappers-in-objective-c.html</feedburner:origLink></entry></feed>

