tag:blogger.com,1999:blog-25341326734889225992024-03-05T13:37:09.021-08:00Horn Clausesometimes our thoughts can be useful to othersRagu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.comBlogger28125tag:blogger.com,1999:blog-2534132673488922599.post-12666944097204388382018-09-11T12:27:00.001-07:002018-09-11T12:27:22.823-07:00Objective neurological reality behind subjective Indian Ragas<div dir="ltr" style="text-align: left;" trbidi="on">
<h3 class="post-title entry-title" itemprop="name" style="background-color: #fefdfa; color: #d52a33; font-family: Georgia, Utopia, "Palatino Linotype", Palatino, serif; font-size: 22px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: normal; line-height: normal; margin: 0px; position: relative;">
<br /></h3>
<div class="post-header" style="background-color: #fefdfa; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 1.6; margin: 0px 0px 1em;">
<div class="post-header-line-1">
</div>
</div>
<div class="post-body entry-content" id="post-body-3223777005953046784" itemprop="description articleBody" style="background-color: #fefdfa; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 1.4; position: relative; width: 586px;">
<div dir="ltr" trbidi="on">
Anyone who is a natural singer or taught himself singing will know, there is some reality behind melodies. Melodies are not random. They always behave in certain ways. These colours of melodies are called Raga in Indian music. Raga is a very ancient and well-developed concept. There is more to it than singing it. Some 4 or more years ago this occurred to me and I described what I termed as the Neurological Reality to a friend who is an expert in neuroscience.<br /><br />The set of related melodies that have some very similar character form, a kind of memory in the brain. This I am certain. This can form because of in my opinion based on the very primal neural networks that are related to basic human emotions and our innate ability to vocalize them. Laugh, cry, giggle, sadness anger and other emotions vocalised by us follow a basic musical note pattern. This neural networks can be expanded by simulating the intensity of those emotions, exposure to more melodies and deliberate training etc. Until we reach the limits of our neural networks so formed, we, in my opinion, continue to vocalize "correctly" i.e something that is close to or exactly a Raga/Jaati. When we exceed it, we may be "lost" or may not follow Raga correctly. Yet, the basic emotional ability continues to guide where the Raga goes in some way even though the ability may vary.<br /><br />Therefore the Ragas are a neurological reality. They are directly represented by a set of memories not just in the representation of emotion but also in the form of muscle memory of the vocal chord and other muscles involved. We are roughly looking at a complex network with several pathways that networks emotion, muscle control program, breathing, rhythm and possibly more. a version of this network roughly maps to a raga of which there may be several (how these physically work is for investigation). This is like a terrain on which we walk where we tend to go in a set path. We may slip here and there but if we are careful can go on a physical trough. This trough is a Raga. This is the basis for raga and our ability to stick to one and create more as we become capable of complex emotions and our ability to vocalize them. </div>
</div>
</div>
Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-34486762458118684442018-09-11T12:23:00.001-07:002018-09-11T12:23:00.630-07:00What are numbers? Part-1<div dir="ltr" style="text-align: left;" trbidi="on">
<h3 class="post-title entry-title" itemprop="name" style="background-color: #fefdfa; color: #d52a33; font-family: Georgia, Utopia, "Palatino Linotype", Palatino, serif; font-size: 22px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: normal; line-height: normal; margin: 0px; position: relative;">
What are numbers? Part-1</h3>
<div class="post-header" style="background-color: #fefdfa; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 1.6; margin: 0px 0px 1em;">
<div class="post-header-line-1">
</div>
</div>
<div class="post-body entry-content" id="post-body-7122851393376272536" itemprop="description articleBody" style="background-color: #fefdfa; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 1.4; position: relative; width: 586px;">
<div dir="ltr" trbidi="on">
This is not something I have chosen to write to show I think philosophy or 'larger questions of life' etc. I am merely sharing some confusion and discomfort I have with my understanding of numbers. To me, understanding numbers is a scientific problem and is important. I say so with some resolve because <i><b>I think, numbers as we know today are incomplete.</b></i> So throwing out my current understanding will follow. You will see how scientific or otherwise, it is.<br /><br />I will take two practical approaches to understanding numbers. I am not interested in whether the number is a concept or a thing etc. What numbers <b><i>do,</i></b> explains a lot more. So the two approaches are:<br /><ol>
<li style="margin: 0px 0px 0.25em; padding: 0px;">Enumerate what property numbers help denote.</li>
<li style="margin: 0px 0px 0.25em; padding: 0px;">Assume numbers are incomplete and verify if consequences explain inabilities of numbers as we know today. </li>
</ol>
<div>
<b>What do numbers help denote?</b></div>
<div>
Numbers help <b><i>count</i></b>. What does 0.75 Mango mean then? Numbers help <b><i>measure</i></b> size. Note that both counting and measuring are not relative, that is independent of what is being measured or counted (relative to itself). Measuring weight, length etc are relative to how much 1 Kg is or 1 cm is. For example, measuring the weight of a thing is nothing but counting how many 1 Kgs equal weight of that thing. It goes similarly for length etc and other measurements relative to a unit. We then see that <b><i>count</i></b> and <b style="font-style: italic;">measure </b>have attributes: they may be excessive(+ve) or lacking (-ve). Let us call it <b><i>presence</i></b>. What about 22/7 ? Anything 22 can not be split into 7 equal parts. So these irrational numbers have no independent existence or meaning but there is nothing irrational about them - just a wrong name. These irrational numbers acquire meaning only when there is a possibility of converting them to a rational number eventually. For example, cos(pi/3) = 0.5 has a meaning. Thus, irrational numbers denote an <b style="font-style: italic;">approximate measure</b> that can be used in the further calculation without loss of precision. For example, 22/7 or <i><b>pi</b></i> tells us that, <b>"Look, you can never count in units of its radius the perimeter of a circle precisely, but you can </b><b><b>approximate</b>". </b>Fair enough? </div>
<div>
<br /></div>
<div>
So far we have the following things numbers can inherently denote:</div>
<div>
<ol>
<li style="margin: 0px 0px 0.25em; padding: 0px;">count</li>
<li style="margin: 0px 0px 0.25em; padding: 0px;">measure</li>
<li style="margin: 0px 0px 0.25em; padding: 0px;">indicate presence</li>
<li style="margin: 0px 0px 0.25em; padding: 0px;">approximate measure</li>
</ol>
<div>
Wait a second, doesn't number denote<i> angles? </i>No, they don't! It is how we define the unit <i>degree </i>that gives 90 a meaning that it is the angle. 90 otherwise is just a count.</div>
<div>
<br /></div>
<div>
That brings us to imaginary and complex numbers. I think mathematicians just misnamed them using their <i>'imagination'</i> and <i>'complexity'. </i>These should have been called <b style="font-style: italic;">Rombers </b><span style="font-style: italic;">(pun)</span><b style="font-style: italic;">! </b>Multiplying by <b style="font-style: italic;">i </b>actually denotes <i style="font-weight: bold;">rotation, </i>where<i style="font-weight: bold;"> i</i><i style="font-weight: bold;"> </i>is a dimension<i>.</i><i> </i>So far we know numbers are two dimensional. Are we sure? We do not know. Some have proved that there are no three dimensional numbers. But I do think it is correct to think numbers have dimensions, although numbers, to me, inherently denote something independent of our interpretation.</div>
<div>
<br /></div>
<div>
Now, we can think about what else can numbers denote. Are there things numbers denote yet we do not know? I believe so. That we can see in Part-2 when I have some concrete thoughts.<br /><br />Note on 21 Jan 2014: The explanation of numbers except the imaginary are my own notably the irrational numbers and original as well. Today I realised I am not first to come up with such explanation for real numbers.</div>
</div>
</div>
</div>
</div>
Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-45104202121539576502017-03-28T08:04:00.003-07:002017-03-28T08:17:04.154-07:00How to find the public IP of your linux node without using an external DNS server<div dir="ltr" style="text-align: left;" trbidi="on">
Without much ado:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;"><i>#!/bin/bash</i></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><i>#Get the public IP for the network in use</i></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><i>#This IP will be accessible through this gateway if the gateway is open to the Internet accessible from the Internet as well</i></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><i><br /></i></span> <span style="font-family: "courier new" , "courier" , monospace;"><i>#Get the gateway address</i></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><i><b>gatewayIP=`ip route | grep default | awk '{print $3}'`</b></i></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><i><br /></i></span> <span style="font-family: "courier new" , "courier" , monospace;"><i>#Find the public IP for the network</i></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><i><b>ip route get $gatewayIP | awk '{print $5}'</b></i></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><i><br /></i></span> <span style="font-family: "courier new" , "courier" , monospace;"><i>#If you want to know the public IP open to the Internet you can do</i></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><i>#<b>ip route get 10.0.136.116 | awk '{print $5}'</b> #10.0.136.116 is an IBM nameserver</i></span><br />
<br />
<br />
The idea is to use the Gateway of your network to find the IP accessible from your network. i.e public to your network. If the Gateway is open to the Internet that will be the public IP in general as well.<br />
<br />
Regards<br />
Ragu<br />
<br />
<br /></div>
Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-67433076326814386842016-12-14T05:40:00.003-08:002016-12-15T22:42:42.302-08:00How to setup FREE HTTPS for your website -- including a free CA certificate<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: center;">
<div style="text-align: center;">
**GET YOUR SETTINGS REVIEWED BY AN EXPERT BEFORE YOU GO LIVE**</div>
</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjSyMPaZq910hsTC2EHGcgGgiuZIN8NFdbvX_kYU2vFO2MPtFSaDLlBwaoArx52iuUn3adhbz9GmtC88S-PhWzCipIANdBX4gqVRFFMt9Tw9Jk7Iio38u-fN12LRm4fB3zOuuT9SukGOnG/s1600/How+to+SETUP+HTTPS+for+your+website+%25281%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjSyMPaZq910hsTC2EHGcgGgiuZIN8NFdbvX_kYU2vFO2MPtFSaDLlBwaoArx52iuUn3adhbz9GmtC88S-PhWzCipIANdBX4gqVRFFMt9Tw9Jk7Iio38u-fN12LRm4fB3zOuuT9SukGOnG/s400/How+to+SETUP+HTTPS+for+your+website+%25281%2529.png" width="282" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: large;">You will find a lot of information in bits and pieces all over the Internet, too much technical jargon peppered all over. If you do not know how https works, do not worry. It is not hard to setup https. Lets say the https setup encrypts stuff between browser and the website and move on to set up https for your website. The keys are a couple of files needed to encrypt your website and these keys need to be signed by CA or the certificate authority in order for browsers to recognise that traffic is properly encrypted. I will use nginx web server and centos7 operating system to show how https can be setup. If you use a different webserver like apache or os like ubuntu look up corresponding instructions elsewhere. So here go the steps:</span></div>
<div style="text-align: justify;">
<span style="font-size: large;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-size: large;"><b><i>1. Get a free CA signed certificate</i></b></span></div>
<div style="text-align: justify;">
<span style="font-size: large;"><b><i>2. Update your web server to use the certificates and enable https</i></b></span></div>
<div style="text-align: justify;">
<span style="font-size: large;"><b><i>3. Setup certificate renewal and optimize and secure your https website</i></b></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: x-large;"><b>1. Get a free CA signed certificate</b></span></div>
<div style="text-align: justify;">
<span style="font-size: large;">Yes! you can get free CA certificate which is valid for 90 days and setup auto renewal. </span><span style="font-size: large;">You can get the certificate here or even better use a tool to validate your domain and copy keys to your host.</span></div>
<div style="text-align: justify;">
<span style="font-size: large;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-size: large;">So you can use this which generates the letsencrypt key for you https://www.sslforfree.com/ or you can use:</span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"><i>sudo yum install certbot</i></span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"><i>certbot certonly --webroot -w /usr/share/nginx/html -d example.com -d www.example.com</i></span></div>
<br />
<div style="text-align: justify;">
<span style="font-size: large;">where<span style="font-family: "times" , "times new roman" , serif;"> /usr/share/nginx/html is the folder where your website sits. If your website is in a different folder change all occurrence of /usr/share/nginx/html</span> with the correct folder path. <span style="font-family: "times" , "times new roman" , serif;">example.com id your website name.</span></span></div>
<span style="font-size: large;"><br /></span>
<br />
<div style="text-align: justify;">
<span style="font-size: large;"><span style="font-family: "times" , "times new roman" , serif;">You may endup with a host validation error. This could be because your server isnt setup to allow access to some folders that certbot requires. Add the following to /etc/nginx/nginx.conf file after (below) existing "location / {</span><span style="font-family: "times" , "times new roman" , serif;">}"</span></span></div>
<br />
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;">location ^~ /.well-known/acme-challenge/ {</span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> default_type "text/plain";</span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> root /usr/share/nginx/html;</span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;">}</span></div>
<br />
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">You may have to create /usr/share/nginx/html/.well-known/acme-challenge</span></div>
<span style="font-size: large;"><br /></span>
<br />
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">Then do the following to load new settings and rerun certbot command above (with your changes). </span></div>
<div style="text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;"><span style="font-size: large;">nginx -s reload</span> </span></div>
<br />
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif;">The output will be bunch of files:</span></div>
<div style="text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;">[root@li851-111 nginx]# ls /etc/letsencrypt/live/example.com</span></div>
<div style="text-align: justify;">
<span style="font-size: large;"><span style="font-family: "courier new" , "courier" , monospace;">cert.pem chain.pem fullchain.pem privkey.pem</span><span style="font-family: "times" , "times new roman" , serif;"> </span></span></div>
<span style="font-size: large;"><br /></span>
<br />
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">Now you have the CA certified files. </span></div>
<br />
<div style="text-align: justify;">
<span style="font-size: x-large;"><b>2. Update your web server to use the certificates and enable HTTPS</b></span></div>
<div style="text-align: justify;">
<span style="font-size: large;">Now that you have the certificates, you can start enabling https for your website. Uncomment the TLS section of the /etc/nginx/nginx.conf after the line: # Settings for a TLS enabled server.</span></div>
<div style="text-align: justify;">
<span style="font-size: large;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-size: large;">The setting looks something similar to below: you should add your key path to <span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;">ssl_certificate </span><span style="font-family: "courier new" , "courier" , monospace;">and</span><span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;"> </span><span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;">ssl_certificate_key</span></span></div>
<br />
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"># Settings for a TLS enabled server.</span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> server {</span></div>
<span style="font-size: large;"><br /></span>
<br />
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> listen 443 ssl http2 default_server;</span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> listen [::]:443 ssl http2 default_server;</span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> server_name _;</span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> root /usr/share/nginx/html;</span></div>
<span style="font-size: large;"><span style="font-size: medium;"><br /></span> </span><br />
<div style="text-align: left;">
<div style="text-align: left;">
<span style="font-size: large;"><span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;"> </span><span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;">ssl on;</span> <span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;"> </span></span></div>
<div style="text-align: left;">
<span style="font-size: large;"><span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;">ssl_certificate "/etc/letsencrypt/live/example.com/cert.pem";</span></span></div>
</div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> ssl_certificate_key "/etc/letsencrypt/live/example.com/privkey.pem";</span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> ssl_session_cache shared:SSL:20m;</span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> ssl_session_timeout 120m;</span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> ssl_ciphers HIGH:!aNULL:!MD5;</span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> ssl_prefer_server_ciphers on;</span></div>
<span style="font-size: large;"><br /></span>
<br />
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> # Load configuration files for the default server block.</span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> include /etc/nginx/default.d/*.conf;</span></div>
<span style="font-size: large;"><br /></span>
<br />
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> location / {</span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> }</span></div>
<span style="font-size: large;"><br /></span>
<br />
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> error_page 404 /404.html;</span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> location = /40x.html {</span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> }</span></div>
<span style="font-size: large;"><br /></span>
<br />
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> error_page 500 502 503 504 /50x.html;</span></div>
<span style="font-size: large;"><br /></span>
<br />
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> location = /50x.html {</span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> }</span></div>
<div style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> }</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: large;">Then reload the web server: <span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;">nginx -s reload</span></span></div>
<br />
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: x-large;"><b>3. Setup certificate renewal and optimize and secure your https website</b></span></div>
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">The certbot tool can request a renewal. So all we need to do is to setup a cron job to request renewal every 3 months (90 days) as letsencrypt certificates expire after 90 days. You can replace 13 in below command by current date -1 so the renew happens on 89th day. </span></div>
<span style="font-size: large;"><br /></span>
<br />
<div style="text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;">certbot 0 0 13 * * certbot renew --quiet renew</span></div>
<span style="font-size: large;"><br /></span>
<br />
<div style="text-align: justify;">
<span style="font-size: large;"><span style="font-family: "times" , "times new roman" , serif;">Now follow the steps here to either optimize redirect http to https or disable it: https://bjornjohansen.no/redirect-to-https-with-nginx and </span>https://bjornjohansen.no/optimizing-https-nginx</span></div>
<span style="font-size: large;"><br /></span>
<br />
<div style="text-align: justify;">
<span style="font-size: large;"><span style="font-family: "times" , "times new roman" , serif;">Now try </span><span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;">https://example.com</span></span></div>
<br />
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif;">References:</span></div>
<ol style="text-align: left;">
<li style="text-align: justify;">https://certbot.eff.org/#centosrhel7-nginx</li>
<li style="text-align: justify;">https://community.letsencrypt.org/t/how-to-nginx-configuration-to-enable-acme-challenge-support-on-all-http-virtual-hosts/5622</li>
<li style="text-align: justify;">https://www.nginx.com/blog/nginx-https-101-ssl-basics-getting-started/</li>
<li style="text-align: justify;">https://www.digicert.com/ssl-certificate-installation-nginx.htm</li>
<li style="text-align: justify;">https://bjornjohansen.no/optimizing-https-nginx</li>
<li style="text-align: justify;">https://letsencrypt.org/</li>
</ol>
</div>
Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-72783022096355791152016-03-31T09:24:00.001-07:002016-12-15T22:40:24.031-08:00Pageant for Mac - Using Jump Server on Mac<div dir="ltr" style="text-align: left;" trbidi="on">
If you use putty on windows, you probably used pageant to store multiple keys, ssh to jump server and then ssh to your work machine. If you ended up on Mac for some reason and you have a production situation, there is no reason to panic. Mac systems have Keychain - a software that manages your keys including ssh keys. There are 3 steps to use it for <i>jumping</i>.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio-_jkJUpWvp-dpj7MJzQu31ezYRX7buHbQty17j68k3wAWxJ7lSh0TwDaebGF64Jdd8wFYQUxTJXS1aNrGYtQFJjZfGPQsumPSgl98QoYDhdnaiV_7HHhWWDkF5jLr-J4quWz0DLUE7C3/s1600/Multiple+ssh+keys+on+Macno+pageant-+use+Keychain+and+ssh+-A.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio-_jkJUpWvp-dpj7MJzQu31ezYRX7buHbQty17j68k3wAWxJ7lSh0TwDaebGF64Jdd8wFYQUxTJXS1aNrGYtQFJjZfGPQsumPSgl98QoYDhdnaiV_7HHhWWDkF5jLr-J4quWz0DLUE7C3/s640/Multiple+ssh+keys+on+Macno+pageant-+use+Keychain+and+ssh+-A.png" width="640" /></a></div>
<br />
<div style="text-align: left;">
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
1. Add your ssh keys to Keychain.</div>
2. Create an ssh config file to access jump terminal<br />
3. Agent forwarding<br />
<h2 style="text-align: left;">
1. Adding keys</h2>
If you had ppk/putty keys you need to convert them. If you have ssh keys then you can add them without converting. I had puttygen on my mac. If you were using Windows machine, you can convert ppk keys to ssh key on Windows and then add on Mac.<br />
<div class="p1">
<span class="s1"> </span></div>
<div class="p1">
<span class="s1"><br /></span> <span class="s1">I had two keys - if you have only one that is fine.</span></div>
<div class="p1">
<span class="s1" style="font-family: "courier new" , "courier" , monospace;">puttygen user_rsa.ppk -O private-openssh -o user_rsa.key</span></div>
<div class="p1">
<span class="s1" style="font-family: "courier new" , "courier" , monospace;"> </span></div>
<div class="p1">
<span class="s1" style="font-family: "courier new" , "courier" , monospace;">puttygen jump.ppk -O private-openssh -o jump.key</span></div>
<div class="p1">
<span class="s1"><br /></span> <span class="s1">If a window pops up then DO NOT hit generate key. </span><br />
<span class="s1">1. Load your private key and then </span><br />
<span class="s1">2. Go to Conversions tab and export open ssh key. Save as jump.key whatever </span></div>
<div class="p1">
3. Copy the key to your mac and do the below:<br />
<br />
<span class="s1" style="font-family: "courier new" , "courier" , monospace;">ssh-add -K /Users/raguk/Documents/access/user_rsa.key</span></div>
<div class="p1">
</div>
<div class="p1">
<span class="s1" style="font-family: "courier new" , "courier" , monospace;">ssh-add -K /Users/raguk/Documents/access/jump.key</span></div>
<h2 style="text-align: left;">
2. Create an ssh config file.</h2>
Create the ~/.ssh folder if you do not have one.<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">raguk$ cd ~/.ssh</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">raguk$ cat config</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span> <span style="font-family: "courier new" , "courier" , monospace;">Host jump</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Hostname <ip address="" hostname=""></ip></span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Port 12345</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">User raguk</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">IdentityFile /Users/raguk/Documents/access/jump.key</span><br />
<span style="color: red; font-family: "courier new" , "courier" , monospace;">ForwardAgent yes</span><br />
<h2 style="text-align: left;">
3. Agent forwarding</h2>
You have already done it in the last step. The last red line on the config file is crucial. You can now<br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span> <span style="font-family: "courier new" , "courier" , monospace;">laptop>ssh jump</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">server1>ssh server2</span><br />
<br />
Remember not to store the keys on jump server. That defeats the purpose of using a jump server. ssh -A will also do the agent forwarding. Happy jumping.<br />
<br /></div>
Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-41806084640348049812016-02-26T17:42:00.003-08:002016-02-26T17:43:54.654-08:00jstut<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="https://www.blogger.com/goog_741094164"><br /></a>
<a href="https://github.com/raguks/jstut">https://github.com/raguks/jstut</a><br />
<br />
<a href="https://github.com/raguks/jstut" target="_blank"><img border="0" height="224" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsUIDyVS24VIF7Fqd3S5oyrl1gAEqAU9eb49if9vtV9N7Vuy0ijwI46fgqXsw-6jGSFnL4yYebRNDW5ErkhE7NsaWzf6RJLOA-yKtkCD_DaNmAz1JTgY2ps5jWTGiA5kkWpKrtMRxpXF0t/s640/jstut.png" width="640" /></a></div>
Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-18172661408668986762015-10-18T20:37:00.001-07:002017-03-28T08:16:01.552-07:00Installing Ubuntu and Fixing Boot, Software Centre Issues<div dir="ltr" style="text-align: left;" trbidi="on">
Installing Ubuntu 12.04<br />
===============<br />
As long as you do not choose to screw your windows partition explicitly default installation should work fine. The problems starts later on however! I trust you on this part and proceed further directly to problems.<br />
<br />
Boot Problems<br />
===========<br />
The grandchildren of linux have the same old boot loader problems that their grandmother RedHat 2-6.0x had! What happens is you will not see an option to boot to Linux, stuff directly goes to Windows or whatever else you have on you computer.<br />
<br />
Ctrl+Alt+T<br />
sudo grub-install /dev/sda<br />
<br />
Hit enter the problem should now be solved.<br />
<br />
Software Centre<br />
===========<br />
The Canadian server seems to be sleeping so you may get this error.<br />
<br />
Error<br />
=====<br />
W:Failed to fetch http://ca.archive.ubuntu.com/ubuntu/dists/precise/Release.gpg Unable to connect to ca.archive.ubuntu.com:http:<br />
E:Some index files failed to download. They have been ignored, or old ones used instead.<br />
<br />
Open Software Centre and choose Edit -> Software Sources and select Other hit the Best Server option and accept when Ubuntu finds you the best server.<br />
<br />
Now<br />
Ctrl+Alt+T<br />
sudo apt-get update<br />
<br />
This will update your software stuff and you should be good to go from there.<br />
<br />
For some graphic card drivers can bring the red screen of death! You can do:<br />
Ctrl+Alt+F1 to go to the command window, login and then<br />
<br />
sudo service start lightdm<br />
<br />
(If this doesnt work - you may have to uninstall the driver -- askubuntu is your friend)<br />
<br />
Have fun.<br />
<br /></div>
Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-68682877939109686262015-09-21T07:21:00.000-07:002015-09-21T07:22:50.176-07:00Perl Script to find intersection of lines in two files<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: "Courier New", Courier, monospace;">#!/usr/bin/perl</span><br />
<span style="font-family: "Courier New", Courier, monospace;">#/* Author : ~rAGU () */<br /># /*Descripation: A script to find the intersection set of the lines in two text files */<br /># /* when one of the file is a subset of the other */<br /># /* finsec.pl */<br /># 2004</span><br />
<span style="font-family: "Courier New", Courier, monospace;"><br />open(SET, @ARGV[0]);<br />$isInSubset = 0;<br />$count = 0;<br /><br />while ($lineInSet = )<br />{<br /> chop($lineInSet);<br /><br /> #$lineInSet = ~s / ^ \s * (.* ? )\ s * $ / $1 / ;<br /> $count++;<br /> $counts = 0;<br /><br /> open(SUBSET, @ARGV[1]);<br /><br /> while ($lineInSubset = )<br /> {<br /> $counts++;<br /> chop($lineInSubset);<br /> #$lineInSubset = ~s / ^ \s * (.* ? )\ s * $ / $1 / ;<br /><br /> if ($lineInSet eq $lineInSubset)<br /> {<br /> $isInSubset = 1;<br /> }<br /><br /> }#End subset loop close(SUBSET);<br /><br /> if ($isInSubset == 0)<br /> {<br /> #chop($lineInSet);<br /> print "$lineInSet";<br /> }<br /> $isInSubset = 0;<br /><br />}#End of set loop<br /><br />close(SET);# /* End of the program */</span></div>
Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-44022675529107363022014-10-27T09:22:00.003-07:002017-03-28T09:22:58.005-07:00Using Regular Expressions for Program Transformation<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I have been investigating the problem of practical code transformation to deal with small changes that have to be made across a large collection of programs in <i>different programming languages</i>. So the problem is not to transform a program entirely but doing small transformations to a large set of programs that too when we have C, Perl, Java etc source programs in that set. This has practical application in software development, code refactoring and testing. A lot of cost savings in software testing is possible if test the suits are well maintained and are automagically transformed using some method. I used a method and<a href="https://priorart.ip.com/IPCOM/000218905"> published findings on ip.com</a> which is rather a full system explanation of what I described <a href="http://hornclause.blogspot.ca/2011/03/search-and-replace-by-parsing-nested.html">here in 2011</a> There are some interesting obstacles to transforming programs. I will try to explain as well as understand some of them through this post.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
When we want to transform a set of programs in different languages what we are dealing with is a bunch of Context Free Grammars (CFG) implemented using syntax symbols that are a result of 'wild' imagination of authors (wild characters can not be domesticated that is!). The transformation therefore, has to deal with two things: 1) CFG 2) syntax symbols. It is not obvious, but I have worked out after some effort and intuition that best chance to modify these programs is only through full knowledge of each of these CFGs and their syntax. However, we can make some complex changes of practical <a href="https://priorart.ip.com/IPCOM/000218905" target="_blank">importance without their knowledge</a> using Regular Expressions (RE).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Regular expressions are nothing but a representation of Finite Automata (FA). From the knowledge of Formal Languages, we know that not all CFGs have corresponding REs. Therefore even partial CFG parsing using REs may be impossible depending on the portion of CFG we are looking to transform. In other words, regex alone can not make some modifications no matter how small the change is. For programmers this would mean, there will always be mismatches for some REs when used across multiple programs (same language). <span style="color: #fff2cc;"><i><b style="background-color: #444444;">The problem of coming up with a RE to always match patterns across programming languages or in single programming language defined by CFG is not solvable.</b></i></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
It is also tempting to think that, using some specially designed syntax symbols, modification of a program using RE may be possible. Unfortunately as long as what we use is RE we can not modify a language defined by CFG no matter what syntax symbols we use. <span style="color: blue;"><i><b>The problem lies in the grammar, not syntax symbols.</b></i></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
As stated earlier, we can still make many meaningful and useful changes to programs across languages. We used two heuristic approaches successfully (very!):</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
1) Identify if what needs to be modified (portion) across the programs is an FA. If it is, write a regular expression to modify it. This will not fully succeed because syntax symbols of various languages may make it impossible to identify an FA. Thus this as well will work partially.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
2) Identify a subset of CFG that can be matched easily using a set of REs and custom parsing. This can be used to modify the subset of CFG across programs and languages again partially.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
If we learn to make better use of successful transformation we can achieve a lot of practical advantages and save labour. For idealists, a plugin can be implemented for all languages in question to program the compiler front end to do the transformation for us. I have written a small interpreter that can accept instructions on what to change in a program. I have called it the Test Mutation Language.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ragu Kattinakere</div>
</div>
Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com2tag:blogger.com,1999:blog-2534132673488922599.post-91894940151739993372011-10-07T14:57:00.000-07:002011-10-07T14:57:08.173-07:00#Perl recursive file listing in dir with a pattern in name<div dir="ltr" style="text-align: left;" trbidi="on">Modified:<br />
<br />
use File::Find; <br />
<br />
#Recursive file find with a pattern in name<br />
find( sub{<br />
/.*NODE.*\.CAT.*/si && -f $_ and push @bkpfiles, $File::Find::name;<br />
#-d $_ and push @dirs, $File::Find::name;<br />
}, $dir );<br />
<br />
due to: <a href="http://www.perlmonks.org/?node_id=416961">sh1tn</a></div>Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-14510884249025061162011-08-12T15:21:00.000-07:002011-08-12T15:21:06.901-07:00nohup and hist need some care before use<div dir="ltr" style="text-align: left;" trbidi="on">I mean you can not do something like:<br />
<br />
nohup r prep; something&<br />
<br />
nohup: cannot run command `hist': No such file or directory<br />
<br />
Well we could run this provided we eval r something.</div>Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-2533772040505493872011-05-20T06:49:00.000-07:002015-09-21T07:28:50.466-07:00rsh2/rsh Permission Denied<div dir="ltr" style="text-align: left;" trbidi="on">
Even when everything is set right there could be "Permission Denied" error. .rhosts has all the entries etc.<br />
Then check the permission on .rhosts file:<br />
<br />
<pre>chmod 644 on users .rhosts file</pre>
<pre></pre>
</div>
Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-58835319146258775982011-03-11T08:16:00.000-08:002011-03-14T15:19:27.733-07:00Search and replace by parsing nested clause across multilines using recursive regex<div dir="ltr" style="text-align: left;" trbidi="on"> Let me start with the answer. The answer is:<br />
<br />
<pre>perl -p -i -e 'undef $/;$re = qr/\((?:[^()]*|(??{$re}))*\)/;s/(create\s+table</pre><pre>\s+.[a-z,A-Z,0-9,.]*\s*$re)\s*(?!SPARSIFY)/$1 SPARSIFY /gis' test/*
</pre><br />
Now the question and story behind it: <br />
Transforming existing code can be bit tricky and less useful sometimes. But at other times it can literally save our jobs! Here is a typical scenario:<br />
<br />
FuncName ("Hell brakes $heck if(blah (blah(blah(".<br />
"blah(blah))blah)))", Heaven);<br />
<br />
If the above function is called million times at different places and you want to change that crazy looking nested structure inside a function argument what will you do ? Ok, you can slurp the file to a scalar as in here:<br />
http://www.modernperlbooks.com/mt/2009/08/a-one-line-slurp-in-perl-5.html. Then use the recursive regexp idiom:<br />
<br />
$re = qr/\((?:[^()]*|(??{$re}))*\)/;<br />
$input_scalar =~ s/(Hell\s+brakes\s+.[a-z,A-Z,0-9|.]*\s+if\s*$re)\s*(?!HELLIFY)/$1 HELLIFY /gis;<br />
<br />
The $re grabs everything in the nested brackets (note you can not to this with regular regex). The rest is search replace as usual with some Look-Around and grouping. Depends on what you want to do. I wanted to append a string after the nested clause ended.<br />
<br />
You already know the short answer! The long answer is below.<br />
<br />
Have fun! <br />
<div style="font-family: "Courier New",Courier,monospace;"><br />
</div><div style="font-family: "Courier New",Courier,monospace;">sub searchReplaceAcrossLines()<br />
{<br />
my @files =dir/*; # Read all files in a dir</div><div style="font-family: "Courier New",Courier,monospace;"> my $input_scalar;<span style="font-family: "Courier New",Courier,monospace;"> </span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-family: "Courier New",Courier,monospace;"> my @input_array;</span><span style="font-family: "Courier New",Courier,monospace;"> </span></div><div style="font-family: "Courier New",Courier,monospace;"><span style="font-family: "Courier New",Courier,monospace;"> my $holdTerminator = $/;</span><span style="font-family: "Courier New",Courier,monospace;"> </span></div><span style="font-family: "Courier New",Courier,monospace;"> </span><br />
<span style="font-family: "Courier New",Courier,monospace;"> # Multiline search. Can use instead: undef $*=1;</span><span style="font-family: "Courier New",Courier,monospace;"> </span><br />
<span style="font-family: "Courier New",Courier,monospace;"> undef $/;</span><span style="font-family: "Courier New",Courier,monospace;"></span><br />
<dir *=""><span style="font-family: "Courier New",Courier,monospace;"> #Process each file in the dir</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> foreach $file (@files) { # Process each file</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> </span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> # Read the file</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> open(FILE,"$file") or die;</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> @input_array=<file></file></span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> close(FILE);</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> $input_scalar=join("",@input_array);</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> </span><br style="font-family: "Courier New",Courier,monospace;" /> <b style="font-family: "Courier New",Courier,monospace;">#An example</b><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">my $re; # A recursive regular expression for everything in brackets</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> # Do your substitution here.</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> $re = qr/\((?:[^()]*|(??{$re}))*\)/;</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> $input_scalar =~ s/(Hell\s+table\s+.[a-z,A-Z,0-9]*\s*$re)\s*(?!READONLY)/$1 READONLY /gis;</span><br style="font-family: "Courier New",Courier,monospace;" /><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> # Write to file</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> open(OUTPUT,">$file") or die;</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> print(OUTPUT $input_scalar);</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> close(OUTPUT);</span><br style="font-family: "Courier New",Courier,monospace;" /><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> print $file . "\n";</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">} #End for</span><br style="font-family: "Courier New",Courier,monospace;" /><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">$/ = $holdTerminator; #Restore</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">print "Search replace complete \n";</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">return 0;</span><span style="font-family: "Courier New",Courier,monospace;"> </span></dir><dir *=""><span style="font-family: "Courier New",Courier,monospace;">} /end sub</span></dir><dir *=""><span style="font-family: "Courier New",Courier,monospace;">One can shorten, optimize etc. But this does what is needed at the moment.</span></dir><dir *=""><span style="font-family: "Courier New",Courier,monospace;"> dprofpp<br />
Total Elapsed Time = 0.019919 Seconds<br />
User+System Time = 0.019919 Seconds<br />
Exclusive Times<br />
%Time ExclSec CumulS #Calls sec/call Csec/c Name<br />
50.2 0.010 0.010 2 0.0050 0.0050 main::BEGIN<br />
50.2 0.010 0.010 1 0.0100 0.0099 main::<b>searchReplaceAcrossLines</b><br />
0.00 0.000 0.000 1 0.0000 0.0000 File::Glob::GLOB_BRACE<br />
0.00 0.000 0.000 1 0.0000 0.0000 File::Glob::GLOB_NOMAGIC<br />
0.00 0.000 0.000 1 0.0000 0.0000 File::Glob::GLOB_QUOTE<br />
0.00 0.000 0.000 1 0.0000 0.0000 File::Glob::GLOB_TILDE<br />
0.00 0.000 0.000 1 0.0000 0.0000 File::Glob::GLOB_ALPHASORT<br />
0.00 - -0.000 1 - - DynaLoader::dl_load_file<br />
0.00 - -0.000 1 - - DynaLoader::dl_undef_symbols<br />
0.00 - -0.000 1 - - DynaLoader::dl_find_symbol<br />
0.00 - -0.000 1 - - DynaLoader::dl_install_xsub<br />
0.00 - -0.000 1 - - File::Glob::bootstrap<br />
0.00 - -0.000 1 - - File::Glob::doglob<br />
0.00 - -0.000 1 - - warnings::import<br />
0.00 - -0.000 1 - - warnings::BEGIN</span></dir><dir *=""><span style="font-family: "Courier New",Courier,monospace;"> </span></dir><dir *=""><span style="font-family: "Courier New",Courier,monospace;">Here is how profiling works: <a href="http://www.perl.com/pub/2004/06/25/profiling.html">http://www.perl.com/pub/2004/06/25/profiling.html</a></span></dir><dir *=""><span style="font-family: "Courier New",Courier,monospace;"><br />
</span></dir></div>Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-55953169102099268832010-08-18T13:51:00.000-07:002011-02-23T07:18:24.313-08:00Relational XML<div dir="ltr" style="text-align: left;" trbidi="on">Why use hierarchical data model with relational databases? That is the story of XML in relational databases. Why can't XML be used to define data relations? So I looked around if it existed.<br />
<br />
This dude has <a href="http://www.google.ca/url?sa=t&source=web&cd=5&ved=0CC4QFjAE&url=http%3A%2F%2Fgeekswithblogs.net%2Frebelgeekz%2Farchive%2F2005%2F02%2F03%2F21854.aspx&ei=VUdsTNuANsH6lwfEnuDqAQ&usg=AFQjCNEhC24rd1CNUOoyX4sCOvYGIhIBUg&sig2=cgrRrltRmVsF3QmeEKRP9Q">an idea</a>.<br />
<br />
Then came the boss with <a href="http://www.exchangenetwork.net/dev_schema/schemadesigntype.pdf">lotsa more ideii</a> !<br />
<br />
<br />
<br />
Right on!</div>Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-48866493127633958282010-04-03T04:38:00.000-07:002010-04-04T12:26:28.187-07:00C# .NET Application deploymentI am not overly familiar with this stuff. As I try to figure out. Images added to resources should be specified using relative path. If you try Visual Studio is smart enough to suggest.<br />
<br />
So the Source filed in the Property tab should like<br />
<br />
/YakshaTala;component/Resources/kanlogo.png<br />
<br />
YakshaTala is the root folder<br />
Resources is the sub folder<br />
<br />
The rest about deployment soon...<br />
It appears this is a common problem. The solution is here<br />
<a href="http://geekrick.blogspot.com/2008/08/frustrating-net-framework-sp1-issue.html">http://geekrick.blogspot.com/2008/08/frustrating-net-framework-sp1-issue.html</a><br />
and in<a href="http://social.msdn.microsoft.com/Forums/en-US/vssetup/thread/d3c1991a-9353-43f0-be82-2dacedc1ceba"> many other places</a>.Best way is to google the error message deleting application specific part in the error message. I am able to install my app.Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-46218590806810467052009-12-04T13:37:00.000-08:002009-12-04T13:37:29.885-08:00What ailes file systemsFile systems have a single region of failure: the table. Corruption of allocation table renders all data waste. Such corruption reduces the problem of finding files in to the known problem of non trivial 'string comparison/search'.<br />
<br />
Go write a software to find the file headers in a DVD. We can write one but only if someone can lend a computer that can compute it before I am dead!<br />
<br />
So we need an idea that does away single region of failure.Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-86210817577035864802009-09-03T10:11:00.000-07:002009-09-03T10:17:32.373-07:00Elements of Abstractions - Computation as simulation of modelsLet us define 'abstraction' as 'hiding' for the purpose of this post. A 'level of abstraction' therefore is amount of hiding details of a particular kind. Elements are in a sense different 'kinds' of 'bricks' that build a level of abstraction.<br /><br />...moreRagu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-42746251862766036752009-06-15T06:52:00.000-07:002015-09-21T10:58:07.595-07:00Questions?<div dir="ltr" style="text-align: left;" trbidi="on">
Questions can be crazy! Look at interviewers on TV. They create so much trouble with simple questions and put good guys in trouble even if everything they said and did was right! Why and how? The trick is in questions they ask.<br />
<br />
Questions can be incorrect. What question implies could be out right wrong. More cunning is the warrant of what is implied in a question being wrong. It is hidden so deep that question looks all right. Yet something is odd about it!<br />
<br />
It occurred to me that we should study what can be called Interrogative Calculus? Propositional and other calculi do not cover logic of questions because questions are not propositions. However, questions are part of everyday logic and propositional calculus can not represent . We therefore need a formal system that can account for questions. I dug to see if there was some research on this topic. Sure, there is. It appears that there is a proposal <a href="http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=3BFE34D28627B9E56F5CF6608251ACCA?doi=10.1.1.43.2320&rep=rep1&type=pdf">here.: : in 2001</a>. I am only 9 years behind! A lot of improvement ; It used to be 20 years! But it is not clear how sound the proposal is. There is definitely some scope.</div>
Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-57907409204106378402008-10-04T17:27:00.000-07:002008-10-04T17:28:18.798-07:00Get a domain name for your urlwww.dot.tk is a cool idea that gets a domain name for URLs.<br />Try it. It works for me!<br /><br />www.thoughtslot.tkRagu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-31514893465335611512008-09-23T09:32:00.001-07:002008-09-23T09:32:58.813-07:00iClock<a href="http://thoughtslot.blogspot.com/2008/09/personica.html">http://thoughtslot.blogspot.com/2008/09/personica.html</a>Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-20045653709090594282008-09-16T08:11:00.000-07:002008-09-16T12:21:53.433-07:00Navigation History TreeI always wanted a feature in all kinds of exploratory software utilities: navigation history. Isn't that obvious? Apparently not to firefox or Ie or even the I Suffer !<br /><br />But someone thought about it; way before I did! A Bob from <a href="http://blog.logos.com/archives/2005/09/navigation_hist.html">somewhere</a> thought long ago when I was still learning how to use Multi-ICE, about the need for such a tree. Opera and Konqueror were supposed to have it. I have not seen them!<br /><br />Got some time? Write a firefox plugin. What say? So I begin here! My <a href="http://ragu.ks.googlepages.com/hejjeh.xpi"></a><a href="http://ragu.ks.googlepages.com/hejjeh.xpi">ಹೆಜ್ಜೆ ೦.೯ ಆಟ</a> plugin (hejjeh 0.9 alpha)! Will tell ya when it is ready.Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com1tag:blogger.com,1999:blog-2534132673488922599.post-34621615863774533502008-09-15T19:11:00.001-07:002008-09-15T19:11:46.976-07:00Why $?The variables in Perl and bash scripts need a $ behind their ass. Why do we need $ in a free stuff like Perl? Let me know if you have an intelligent answer or atleast a solution :)Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-2532867681721953792008-08-19T12:54:00.000-07:002016-02-26T17:46:54.015-08:00How developers think<div dir="ltr" style="text-align: left;" trbidi="on">
<div align="center">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibTiENcfHqeb89XVBATosPaYovRwzDUA6pQavH9mQuBlyh1M2rj5Li_Tj_W6tF6YgppUH1o1Kk4Z57Kq0XHiaHN-_Rt4p0GGkym1-xqtjAze8MjoZmz9LId4RA7CykhmzYTv6X2v897_l8/s1600-h/pissoff.PNG"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5236321283694783682" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibTiENcfHqeb89XVBATosPaYovRwzDUA6pQavH9mQuBlyh1M2rj5Li_Tj_W6tF6YgppUH1o1Kk4Z57Kq0XHiaHN-_Rt4p0GGkym1-xqtjAze8MjoZmz9LId4RA7CykhmzYTv6X2v897_l8/s400/pissoff.PNG" style="cursor: hand;" /></a></div>
</div>
Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-82366601981177691332008-08-10T21:59:00.000-07:002008-08-10T22:11:40.221-07:00INDOS<div style="text-align: justify;">Instant Distributed Operating System.<br />------------------------------------------<br />Why should computers take a minute to boot (start) while a much cheaper Dvd player can sing instantly? A TV, tape recorder, you name it, they start working the moment they are powered on. One pays lot of money and yet computers tale anywhere between a minute to ten depending on your fate and its own speed.<br /><br />An engineer will quickly tell you that, "BIOS.. POST...", hold it. I do not care. All we want is a thing we can use to, "do stuff". That explains the need for "Instant".<br /><br />I have two laptops and a mobile phone. They are always out of sync. Let us forget ubiquitous computing for a while. We need to deel with these multiple devices to make them data location and interface invariant. I'll leave it at that. Fill in the blanks please.<br /><br />Drivers are not OSs' business. We need a slim OS that just does what its name says, 'operate the system'!<br /><br />Indos by the way is the Greek name for the river Indus (Sindhu).<br /></div>Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com0tag:blogger.com,1999:blog-2534132673488922599.post-61053468292057876832008-08-03T07:30:00.001-07:002008-08-03T07:42:07.692-07:00How To Manage Contacts in Outlook<div style="text-align: justify;">Sun's ceo calls it Lookout! But many use it including me. Managing contacts in Outlook is tricky. Here are few things I do when I move.<br /><br />By default all email ids are recorded in a file called Outlook.NK2 which is, by generocity of Microsoft, hidden. These are used to auto fill when we type an emil id. These are not stored in the address book. Its default location is:<br />C:\Documents and Settings\<span style="font-weight: bold;"><username></span>\<span style="font-weight: bold;">Application Data</span>\Microsoft\Outlook\Outlook.NK2<br /><br /><username> is your user login id on the computer.<br /><span style="font-weight: bold;"><br />Application Data </span>is a folder that is hidden from view. Go to Tools->View and select Show Hidden files.<br /><br />When I move, I copy/backup this file. When I setup outlook on new machine, I zimbly copy the backup file to the default location in the new machine. Address book is a sacred thing. Mine is mostly empty! To manage autofill email address we can use a freeware availale online. It is called <a href="http://www.nirsoft.net/utils/outlook_nk2_autocomplete.html">NK2View (Download).</a><br /><br /></div>Ragu Kattinakerehttp://www.blogger.com/profile/17043138095700145552noreply@blogger.com1