tag:blogger.com,1999:blog-20166646476612351982024-03-13T12:11:55.468-07:00GhostOnNetworkScattered pieces of myself, on network.Anonymoushttp://www.blogger.com/profile/01677319513862742822noreply@blogger.comBlogger11125tag:blogger.com,1999:blog-2016664647661235198.post-82865825169158218102014-11-23T17:32:00.001-08:002016-02-25T01:24:55.725-08:00libspatialite problem with Django on OS XI have no idea how it comes, using GeoDjango on OS X is a kind of pain in ass, especially when it's about spatialite. It has got better and better - it's better at least rather than the time you should install all related package manually. Finally, our awesome friend Homebrew became to be able to handle most of these cumbersome works, but I should say - it's very close.<br />
<br />
You can face this error message when you're trying to make GIS Django application on OS X:<br />
<br />
<blockquote class="tr_bq">
Unable to load the SpatiaLite library extension "/usr/local/lib/libspatialite.dylib"</blockquote>
<br />
If you install libspatialite 4.2.0 package by using Homebrew, then it installs libspatialite.dylib and mod_spatialite.dylib into its library path. When django.contrib.gis.db.backends.spatialite is used as a database backend, I'm not sure what happens on extension loading logic of sqlite3, it tries to find `sqlite3_spatialite_init` symbol from libspatialite.dylib. But that symbol dwells in mod_spatialite.dylib, so it fails. You can adjust this by adding SPATIALITE_LIBRARY_PATH to settings.py file:<br />
<br />
<blockquote class="tr_bq">
SPATIALITE_LIBRARY_PATH='/usr/local/lib/mod_spatialite.dylib'</blockquote>
<br />
For sure, it can vary with the library path. Real path would be /usr/local/Cellar/libspatialite/x.x.x/lib/. (x.x.x is version number)Anonymoushttp://www.blogger.com/profile/01677319513862742822noreply@blogger.com0tag:blogger.com,1999:blog-2016664647661235198.post-65661074700986835252014-11-19T22:56:00.004-08:002016-02-25T01:24:55.720-08:00Testing C10M on a Host with Tornado<div>
<blockquote class="tr_bq">
Here's my code that I've used, wanna share it with pleasure :)<br />
<a href="https://github.com/kenial/tornado-test-c10m" target="_blank">https://github.com/kenial/tornado-test-c10m</a>. </blockquote>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Recently, I've tried to make out to test >1M concurrent connections on my PC, by using Tornado (FYI, <a href="http://www.tornadoweb.org/" target="_blank">Tornado</a> is Python based web framework that supports both TCP / WebSocket connections). As you know, there has been a lot of <a href="http://en.wikipedia.org/wiki/C10k_problem" target="_blank">C10K problem</a> discussions, so you can easily find out articles about tuning of network and performance. (just try to google 'linux c10k tuning,' then you gonna get) Here are few useful links for me to get comprehension about C10K tuning :</span><br />
<br />
<blockquote class="tr_bq">
- The C10K problem<br />
<a href="http://www.kegel.com/c10k.html">http://www.kegel.com/c10k.html</a></blockquote>
<blockquote class="tr_bq">
- Performance Tuning the Network Stack on Mac OS X Part 2<br />
<a href="https://rolande.wordpress.com/2014/05/17/performance-tuning-the-network-stack-on-mac-os-x-part-2/">https://rolande.wordpress.com/2014/05/17/performance-tuning-the-network-stack-on-mac-os-x-part-2/</a> </blockquote>
<blockquote class="tr_bq">
- Linux TCP/IP tuning for scalability<br />
<a href="http://www.lognormal.com/blog/2012/09/27/linux-tcpip-tuning/">http://www.lognormal.com/blog/2012/09/27/linux-tcpip-tuning/</a></blockquote>
<blockquote class="tr_bq">
- RED HAT ENTERPRISE LINUX 7 PERFORMANCE TUNING GUIDE (CentOS compatible)<br />
<a href="https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Performance_Tuning_Guide/index.html">https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Performance_Tuning_Guide/index.html</a> </blockquote>
<blockquote class="tr_bq">
- The C10M(!) problem<br />
<a href="http://c10m.robertgraham.com/p/manifesto.html">http://c10m.robertgraham.com/p/manifesto.html</a></blockquote>
<br />
<br />
A caveat here, it requires really vast memory. There is also a trick for >65K connections on loopback network. By using local address and remote address, OS identifies a socket. If you have multiple clients connect to your server that listens 8080 port, created sockets will be as followings:<br />
<br class="Apple-interchange-newline" />
<div style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21.6000003814697px; text-align: justify;">
</div>
<br />
<table style="-webkit-text-stroke-width: 0px; background-color: white; border-collapse: collapse; color: #333333; font-family: Verdana; font-size: 12px; letter-spacing: normal; line-height: 21.6000003814697px; margin-left: 0px; orphans: auto; table-layout: fixed; text-align: justify; text-indent: 0px; text-transform: none; widows: auto; width: 561px; word-spacing: 0px;"><tbody>
<tr><td data-en-overlay-id="2" style="border: 1px solid rgb(219, 219, 219); margin: 0px; padding: 10px; width: 260px;"><div style="margin: 0px; text-align: center;">
local address</div>
</td><td style="border: 1px solid rgb(219, 219, 219); margin: 0px; padding: 10px; width: 259px;"><div style="margin: 0px; text-align: center;">
remote address</div>
</td></tr>
<tr><td style="border: 1px solid rgb(219, 219, 219); margin: 0px; padding: 10px; width: 260px;"><div style="margin: 0px; text-align: center;">
192.168.0.10:20001</div>
</td><td style="border: 1px solid rgb(219, 219, 219); margin: 0px; padding: 10px; width: 259px;"><div style="margin: 0px; text-align: center;">
192.168.0.10:8080</div>
</td></tr>
<tr><td style="border: 1px solid rgb(219, 219, 219); margin: 0px; padding: 10px; width: 260px;"><div style="margin: 0px; text-align: center;">
192.168.0.10:20002</div>
</td><td style="border: 1px solid rgb(219, 219, 219); margin: 0px; padding: 10px; width: 259px;"><div style="margin: 0px; text-align: center;">
192.168.0.10:8080</div>
</td></tr>
<tr><td style="border: 1px solid rgb(219, 219, 219); margin: 0px; padding: 10px; width: 260px;"><div style="margin: 0px; text-align: center;">
192.168.0.10:20003</div>
</td><td style="border: 1px solid rgb(219, 219, 219); margin: 0px; padding: 10px; width: 259px;"><div style="margin: 0px; text-align: center;">
192.168.0.10:8080</div>
</td></tr>
<tr><td style="border: 1px solid rgb(219, 219, 219); margin: 0px; padding: 10px; width: 260px;"><div style="margin: 0px; text-align: center;">
192.168.0.10:20004</div>
</td><td style="border: 1px solid rgb(219, 219, 219); margin: 0px; padding: 10px; width: 259px;"><div style="margin: 0px; text-align: center;">
192.168.0.10:8080</div>
</td></tr>
</tbody></table>
<br />
But range of local ports are between 0~65,535, so you can make 65K connections at maximum with one server port, even in an ideal case. In fact, the number could be less.<br />
<br />
This could be resolved by letting server listens to multiple ports, like this:<br />
<br />
<br />
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #333333; font-family: Verdana; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 21.6000003814697px; orphans: auto; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
</div>
<br />
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #333333; font-family: Verdana; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 21.6000003814697px; orphans: auto; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<table style="-webkit-text-stroke-width: 0px; background-color: white; border-collapse: collapse; color: #333333; font-family: Verdana; font-size: 12px; letter-spacing: normal; line-height: 21.6000003814697px; margin-left: 0px; orphans: auto; table-layout: fixed; text-align: justify; text-indent: 0px; text-transform: none; widows: auto; width: 561px; word-spacing: 0px;"><tbody>
<tr><td data-en-overlay-id="2" style="border: 1px solid rgb(219, 219, 219); padding: 10px; width: 260px;"><div style="margin: 0px; text-align: center;">
local address</div>
</td><td style="border: 1px solid rgb(219, 219, 219); padding: 10px; width: 259px;"><div style="margin: 0px; text-align: center;">
remote address</div>
</td></tr>
<tr><td style="border: 1px solid rgb(219, 219, 219); padding: 10px; width: 260px;"><div style="margin: 0px; text-align: center;">
192.168.0.10:20001</div>
</td><td style="border: 1px solid rgb(219, 219, 219); padding: 10px; width: 259px;"><div style="margin: 0px; text-align: center;">
192.168.0.10:8080</div>
</td></tr>
<tr><td style="border: 1px solid rgb(219, 219, 219); padding: 10px; width: 260px;"><div style="margin: 0px; text-align: center;">
192.168.0.10:20001</div>
</td><td style="border: 1px solid rgb(219, 219, 219); padding: 10px; width: 259px;"><div style="margin: 0px; text-align: center;">
192.168.0.10:<i><b>8081</b></i></div>
</td></tr>
<tr><td style="border: 1px solid rgb(219, 219, 219); padding: 10px; width: 260px;"><div style="margin: 0px; text-align: center;">
192.168.0.10:20002</div>
</td><td style="border: 1px solid rgb(219, 219, 219); padding: 10px; width: 259px;"><div style="margin: 0px; text-align: center;">
192.168.0.10:8080</div>
</td></tr>
<tr><td style="border: 1px solid rgb(219, 219, 219); padding: 10px; width: 260px;"><div style="margin: 0px; text-align: center;">
192.168.0.10:20002</div>
</td><td style="border: 1px solid rgb(219, 219, 219); padding: 10px; width: 259px;"><div style="margin: 0px; text-align: center;">
192.168.0.10:<i><b>8081</b></i></div>
</td></tr>
</tbody></table>
</div>
<br />
As above, if your server listens to multiple ports, then we can have multiple sockets that has a same local address and different remote addresses. With 200 listening ports and 50K local ports, it ends up with 200 * 50,000 = 10,000,000 (10M) connections! (FYI, you can assign multiple IPs instead of multiple listening ports, but it's little cumbersome - you have to do it manually, and need to restore them on some day)<br />
<br />
<blockquote class="tr_bq">
One caveat more: this works on Ubuntu Server 14.10 (my development environment is) for sure, but not for OS X Yosemite. I'm not sure for the reason, but according to result of netstat, sockets on Yosemite seem to be identified by only local address. There no duplicates amongst local addresses as long as I looked into.</blockquote>
<br />
<br />
Okay, last but not least, here's the result:<br />
<br />
- The host that runs test code is Ubuntu Server 14.10, which hosted by Amazon EC2's r3.4xlarge instance that has 122GiB memory.<br />
<br />
- 10.5KB per TCP conn, 15.5KB per WebSocket conn.<br />
<br />
- If 1M connections, it will be 21GiB for TCP connections and 31GiB for WebSocket connections. <br />
(211GiB for 10M!)<br />
<br />
- PyPy is helpful for performance, especially in establishing connections.<br />
<br /></div>
<div style="background-color: white; clear: none; color: #333333; float: none; font-family: Verdana; font-size: 12px; line-height: 21.6000003814697px; padding-bottom: 0px !important; padding-top: 0px !important; text-align: center;">
<span class="imageblock" style="display: inline-block; height: auto; width: 600px;"><img src="http://cfile22.uf.tistory.com/image/260EE338546D7B00286A42" height="440" style="border: 0px; cursor: pointer;" width="600" /></span></div>
<div style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21.6000003814697px; padding-bottom: 0px !important; padding-top: 0px !important; text-align: justify;">
<br /></div>
<div style="background-color: white; clear: none; color: #333333; float: none; font-family: Verdana; font-size: 12px; line-height: 21.6000003814697px; padding-bottom: 0px !important; padding-top: 0px !important; text-align: center;">
<span class="imageblock" style="display: inline-block; height: auto; width: 600px;"><img src="http://cfile10.uf.tistory.com/image/241C9F38546D7B041B01D5" height="437" style="border: 0px; cursor: pointer;" width="600" /></span></div>
<div>
<span class="imageblock" style="display: inline-block; height: auto; width: 600px;"><br /></span></div>
Anonymoushttp://www.blogger.com/profile/01677319513862742822noreply@blogger.com0tag:blogger.com,1999:blog-2016664647661235198.post-8079519512989340322013-07-26T17:44:00.001-07:002016-02-25T01:24:55.723-08:00Idea: location-based minisite for smartphoneThis is an idea about the application of <a href="http://blog.fountainproject.com/post/56221577920/faq-mug-and-sam" target="_blank"><b>Mug and Sam</b></a>.<br />
<br />
While "Minisite" refers to a sort of websites which contains information about one specific product or subject, but in this context, minisite represents just a site that contains little amount of contents. If trying to write "location-based minisite" more detail, that means "location-based discoverable minisite in proximity". Mug and Sam are a sort of file sharing tool that is location-based, Sam has a role of host. Mug can discover nearby Sam, and access to files that are shared by Sam.<br />
<br />
<br />
<br />
I am imaging that local businesses such as stores and restaurants use Sam as this location-based minisite. For example, a little photo exhibition at a cafe, and photos are accessible by customers' smartphones or tablets when they visit the cafe only. I know a cafe's owner who loves a travel, and had ever seen photos are on his cafe's wall. A little space was needed for even this little exhibition, if he utilized Sam then the space might not be required.<br />
<br />
How would it works? Look at this (they're from my album, at Lake Louise) :<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/PgeGMh80alI?rel=0" style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;" width="560"></iframe><span style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;"></span><br />
<div style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; padding-bottom: 0px !important; padding-top: 0px !important; text-align: justify;">
<br /></div>
<br />
<br />
Above one is relevant to images, but audios or videos can be provided with:<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/to8MP_BMj3Y?rel=0" style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;" width="560"></iframe><br />
<div>
<br /></div>
<div>
<span style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;"></span><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/V490-SR-f5A?rel=0" style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;" width="560"></iframe><span style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;"></span><br />
<br />
<br />
If a document is needed, that is, at a information center or a conference, PDF would be fit:<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/-GKgkpMlA7E?rel=0" style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;" width="560"></iframe><span style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;"></span><br />
<div style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; padding-bottom: 0px !important; padding-top: 0px !important; text-align: justify;">
<br /></div>
<br />
<br />
As you see, Mug is basically designed for sharing media files, but you can configure it accessing any web resources:<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/o7VlydVPdeM?rel=0" style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;" width="560"></iframe><span style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;"></span><br />
<div style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; padding-bottom: 0px !important; padding-top: 0px !important; text-align: justify;">
<br /></div>
On above, Mug is accessing Wikipedia page, but it is possible to configured to redirect a certain web site of a store. The benefit is, customers that visit the store can access to a webpage without inputting URL into web browser directly.<br />
<br />
<br />
<br />
Currently, mega internet services are doing business based on their proprietary information that is collected only for itself and by itself. Lots of services - search engine, portal, map service, review site and so forth - have influenced to local business unilaterally.<br />
<br />
But I believe IT technology can also help local business to face to this situation in some ways, like providing location-based minisite with unique user experience. And for that purpose, I'm in considering what features are needed additionally to these applications.<br />
<br />
Any suggestions?<br />
<br />
<br />
<br />
- Refer to <a href="http://www.fountainproject.com/info"><b>http://www.fountainproject.com/info</b></a> for detail information.</div>
Anonymoushttp://www.blogger.com/profile/01677319513862742822noreply@blogger.com0tag:blogger.com,1999:blog-2016664647661235198.post-10439617776073391852013-06-28T02:13:00.003-07:002016-02-25T01:24:55.706-08:00Mug and Sam, implementations from Fountain Project are released.link: <a href="http://blog.fountainproject.com/post/54057159608/ready-to-go-with">http://blog.fountainproject.com/post/54057159608/ready-to-go-with</a><br />
<br />
I have been working on a sort of file/media sharing tool, which is location-based service. File sharing & location, yes, they're applications that similar to <a href="http://bu.mp/" target="_blank">Bump</a>. But basically, this applications don't require to 'Bump' at least. Once you run it, it just works to find out shared file nearby.<br />
<br />
If you're interested in location based file sharing, just look over them. URL of web site is http://www.fountainproject.com<br />
<br />
<br />
Thanks!<br />
<br />Anonymoushttp://www.blogger.com/profile/01677319513862742822noreply@blogger.com0tag:blogger.com,1999:blog-2016664647661235198.post-87238976480125985582012-12-13T11:25:00.001-08:002016-02-25T01:24:55.728-08:00Portable Django & Python for Mac OS X<br />
Recently, I’m working on python-host program. Under the hood, that program hosts python binary, and the django development server works as HTTP API server on python environment. Although it’s not optimized, but useful enough for my purpose.<br />
<br />
There’s other projects about this (like as <a href="https://code.djangoproject.com/wiki/DjangoOnAStick">DjangoOnAStick</a> and <a href="http://www.portablepython.com/">Portable Python</a>), however, they don’t provide for OS X version and < Python 2.7 versions. So I made up my mind to create something new. (this is based on python 2.7 and django 1.4)<br />
<br />
Okay, refer to this URL : <a href="https://bitbucket.org/kenial/portable-django" title="https://bitbucket.org/kenial/portable-django">https://bitbucket.org/kenial/portable-django</a><br />
<br />
There is shell script(also known batch file on Windows) ready. Use it like this:<br />
<br />
<img alt="Usage" src="https://bitbucket.org/kenial/portable-django/downloads/usage_portable_django.png" /><br />
<br />
Easy, huh?Anonymoushttp://www.blogger.com/profile/01677319513862742822noreply@blogger.com0tag:blogger.com,1999:blog-2016664647661235198.post-42573144142330716932012-11-02T01:34:00.000-07:002016-08-16T10:45:01.512-07:00Bookshelf template: Personal book list management on Google Apps Spreadsheet<span style="background-color: white; color: #333333; font-family: verdana; font-size: 12px; line-height: 21px; text-align: justify;">* “Bookshelf template” shared link:</span><br />
<div style="text-align: justify;">
<span style="color: #333333; font-family: "verdana";"><span style="font-size: 12px; line-height: 21px;"><a href="https://docs.google.com/spreadsheets/d/1pVoT6l1HdRkN3aPMKAmuNVEqJg4izxTW_vzECIOzavo/edit?usp=sharing">https://docs.google.com/spreadsheets/d/1pVoT6l1HdRkN3aPMKAmuNVEqJg4izxTW_vzECIOzavo/edit?usp=sharing</a></span></span><span style="color: #333333; font-family: "verdana"; font-size: 12px; line-height: 21px;"> </span></div>
<div style="text-align: justify;">
<br /></div>
<br />
A friend of me wrote on SNS that she bought a desktop app managing personal book list. As I saw it then thought that ‘Oh I need this one too’ and was considering to buy one in a minute. But, well, I decided to implement it on my own. Features are simple. Input ISBN, book title, or author’s name, and then just run the script. So that the script will find information of the books from Google Books API, and paste them on a sheet. If you need additional fields, just add them as well as need.<br />
<br />
<img src="//i.imgur.com/S8gT5y9.gif" />
<br />
<br />
How to use: input a part of book information like this and run the script (click 'Get book information from Google Books API' menu), the sheet will be filled out with information of the books.<br />
<br />
I was just trying to enhance my Google Apps Script skill, but if you need this, use freely : )Anonymoushttp://www.blogger.com/profile/01677319513862742822noreply@blogger.com0tag:blogger.com,1999:blog-2016664647661235198.post-5078215668427826642012-09-07T18:14:00.000-07:002016-02-25T01:24:55.717-08:00Execute a terminal command on a Cocoa application* refer to <a href="http://stackoverflow.com/questions/412562/execute-a-terminal-command-from-a-cocoa-app/12310154#12310154">http://stackoverflow.com/questions/412562/execute-a-terminal-command-from-a-cocoa-app/12310154#12310154</a><br />
<br />
In order to write an cocoa application that can start/stop webserver embedded within, I needed some method could run terminal commands. One user(thanks kent!) suggested to use /bin/sh to run shell script file – and you might know, /bin/sh utility can run a line of command instead of script file with –c option. With NSTask and /bin/sh, I made some method to run a shell command by line:<br />
<pre class="lang-c prettyprint" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: #eeeeee; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; letter-spacing: normal; line-height: 18px; margin: 0px 0px 10px; max-height: 600px; orphans: 2; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; text-align: left; text-indent: 0px; text-transform: none; vertical-align: baseline; widows: 2; width: auto; word-spacing: 0px;"><code style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="typ" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: #2b91af;"><span style="font-size: 10.5pt;">NSString</span></span></span><span style="font-size: 10.5pt;"><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">*</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">runCommand</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="typ" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: #2b91af;">NSString</span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">*</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">commandToRun</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span></span></span></span><span style="font-size: 10.5pt;"><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="background-color: #eeeeee; font-family: Consolas;">{</span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="typ" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: #2b91af;">NSTask</span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">*</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">task</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">;</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> task </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">=</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[[</span><span class="typ" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: #2b91af;">NSTask</span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> alloc</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> init</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">];</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">task setLaunchPath</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">@</span><span class="str" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: maroon;">"/bin/sh"</span></span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">];</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="typ" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: #2b91af;">NSArray</span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">*</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">arguments </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">=</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="typ" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: #2b91af;">NSArray</span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> arrayWithObjects</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">@</span><span class="str" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: maroon;">"-c"</span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">,</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="typ" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: #2b91af;">NSString</span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> stringWithFormat</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:@</span><span class="str" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: maroon;">"%@"</span></span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">,</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> commandToRun</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">],</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> nil</span></span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="background-color: #eeeeee; font-family: Consolas;">];</span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="typ" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: #2b91af;">NSLog</span></span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(@</span><span class="str" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: maroon;">"run command: %@"</span></span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">,</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">commandToRun</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">);</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">task setArguments</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> arguments</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">];</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="typ" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: #2b91af;">NSPipe</span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">*</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">pipe</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">;</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> pipe </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">=</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="typ" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: #2b91af;">NSPipe</span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> pipe</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">];</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">task setStandardOutput</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> pipe</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">];</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="typ" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: #2b91af;">NSFileHandle</span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">*</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">file</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">;</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> file </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">=</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">pipe fileHandleForReading</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">];</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">task launch</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">];</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="typ" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: #2b91af;">NSData</span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">*</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">data</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">;</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> data </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">=</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">file readDataToEndOfFile</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">];</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="typ" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: #2b91af;">NSString</span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">*</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">output</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">;</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> output </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">=</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[[</span><span class="typ" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: #2b91af;">NSString</span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> alloc</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> initWithData</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> data encoding</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> NSUTF8StringEncoding</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">];</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
<span style="background-color: #eeeeee; font-family: Consolas;"> </span></span><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="kwd" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: darkblue;">return</span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> output</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">;</span></span></span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span></span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="font-family: Consolas;"><span style="background-color: #eeeeee; font-size: 10.5pt;">}</span></span></span></code></pre>
<br />
<br />
<br />
<br />
<br />
Using above method, you can write a code to run a line of terminal shell command like this:<br />
<br />
<br />
<pre class="lang-c prettyprint" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: #eeeeee; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; letter-spacing: normal; line-height: 18px; margin: 0px 0px 10px; max-height: 600px; orphans: 2; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; text-align: left; text-indent: 0px; text-transform: none; vertical-align: baseline; widows: 2; width: auto; word-spacing: 0px;"><code style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="font-family: Consolas;"><span style="background-color: #eeeeee;"><span class="typ" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: #2b91af;"><span style="font-size: 10.5pt;">NSString</span></span></span><span style="font-size: 10.5pt;"><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">*</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">output </span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">=</span><span class="pln" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> runCommand</span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(@</span><span class="str" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="color: maroon;">"ps -A | grep mysql"</span></span></span><span class="pun" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="font-size: 10.5pt;">);</span></span></span></span></code></pre>
Anonymoushttp://www.blogger.com/profile/01677319513862742822noreply@blogger.com0tag:blogger.com,1999:blog-2016664647661235198.post-87867992915135626052012-08-24T23:16:00.001-07:002016-02-25T01:24:55.730-08:00What is a DEVELOPER to App Store, Google Play, and Windows Phone Marketplace?<br />
<div style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; padding-bottom: 0px !important; padding-top: 0px !important; text-align: justify;">
I found out something interesting, when I was adding vary app stores' developer links(show app list of certain developer) on my resume. It was a piece of URL path of the link - my app store developer links are following:</div>
<div style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; padding-bottom: 0px !important; padding-top: 0px !important; text-align: justify;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; padding-bottom: 0px !important; padding-top: 0px !important; text-align: justify;">
</div>
<div class="p1" style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; padding-bottom: 0px !important; padding-top: 0px !important; text-align: justify;">
</div>
<div class="p1" style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; padding-bottom: 0px !important; padding-top: 0px !important; text-align: justify;">
<span class="s1">- iTunes App Store apps : <a href="http://itunes.apple.com/us/artist/kenial/id319803312" style="color: #c45050; text-decoration: none;"><span class="s2">http://itunes.apple.com/us/artist/kenial/id319803312</span></a><br />- Google Play apps : <a href="https://play.google.com/store/apps/developer?id=Kenial" style="color: #c45050; text-decoration: none;"><span class="s2">https://play.google.com/store/apps/developer?id=Kenial</span></a><br />- WP Marketplace apps : <span class="s2"><a href="http://www.windowsphone.com/en-US/publishers/Kenial" style="color: #c45050; text-decoration: none;">http://www.windowsphone.com/en-US/publishers/Kenial</a></span></span></div>
<div class="p1" style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; padding-bottom: 0px !important; padding-top: 0px !important; text-align: justify;">
<span class="s1"><br /></span></div>
<div class="p1" style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; padding-bottom: 0px !important; padding-top: 0px !important; text-align: justify;">
<span class="s1">You see what, Prior to 'kenial', and come up with something as I do. Yeah, there is </span><b>artist</b> prior to 'kenial' on App Store, in case of Google Play there is <b>developer</b>, in case of Windows Phone Marketplace, <b>publishers</b>.</div>
<div class="p1" style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; padding-bottom: 0px !important; padding-top: 0px !important; text-align: justify;">
<span class="s1"><br /><span id="callbacknestkenialtistorycom8842343" style="float: right; height: 1px; width: 1px;"><embed allowscriptaccess="always" enablecontextmenu="false" flashvars="&callbackId=kenialtistorycom8842343&host=http://kenial.tistory.com&embedCodeSrc=http%3A%2F%2Fkenial.tistory.com%2Fplugin%2FCallBack_bootstrapper%3F%26src%3Dhttp%3A%2F%2Fs1.daumcdn.net%2Fcfs.tistory%2Fv%2F0%2Fblog%2Fplugins%2FCallBack%2Fcallback%26id%3D884%26callbackId%3Dkenialtistorycom8842343%26destDocId%3Dcallbacknestkenialtistorycom8842343%26host%3Dhttp%3A%2F%2Fkenial.tistory.com%26float%3Dleft" height="1" id="bootstrapperkenialtistorycom8842343" src="http://kenial.tistory.com/plugin/CallBack_bootstrapperSrc?nil_profile=tistory&nil_type=copied_post" swliveconnect="true" type="application/x-shockwave-flash" width="1" wmode="transparent"></embed></span></span></div>
<div class="p1" style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; padding-bottom: 0px !important; padding-top: 0px !important; text-align: justify;">
Okay, now you have some idea about what a developer is for, in terms of each app store master : )</div>
<div class="p1" style="background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; padding-bottom: 0px !important; padding-top: 0px !important; text-align: justify;">
<br /></div>
Anonymoushttp://www.blogger.com/profile/01677319513862742822noreply@blogger.com0tag:blogger.com,1999:blog-2016664647661235198.post-90235191865877929382012-08-20T08:30:00.000-07:002016-02-25T01:24:55.733-08:00Amazon EC2 network latency test<div>
<br /></div>
<br />
<div style="color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;">
Last March, I've tried to upload BITNA service(sort of web service for smartphone app) on world-wide Amazon EC2 servers. In that process, for checking latency, I wrote a memo regards ping latency and HTTP latency(specific page that returns kind of 'hello world'). Certainly, it's not pretty precise time and based on Korea's network environment, but I believe that you might need this data for your reference.</div>
<div style="color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;">
<br /></div>
<div style="color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;">
GAE(HTTP) is HTTP request/response latency, and others are ping request/response latency. (unit is ms) Surely, GAE means Google App Engine. This result shows HTTP latency is pretty much, as compared to ping latency.</div>
<div style="color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;">
<br /></div>
<div style="color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;">
<br /></div>
<div style="color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;">
</div>
<table border="1" cellpadding="2" cellspacing="0" style="color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify; width: 500px;"><tbody>
<tr><td valign="top" width="113"><div align="right">
to</div>
from</td><td valign="top" width="83">GAE</td><td valign="top" width="80">GAE(HTTP)</td><td valign="top" width="103">Site A*</td><td valign="top" width="119">Site B**</td></tr>
<tr><td valign="top" width="113">EC2(Oregon)</td><td valign="top" width="83">20~30</td><td valign="top" width="80">118~</td><td valign="top" width="103">228~</td><td valign="top" width="119">179~</td></tr>
<tr><td valign="top" width="113">EC2(Singapore)</td><td valign="top" width="83">9~15</td><td valign="top" width="80">261~</td><td valign="top" width="103">116~</td><td valign="top" width="119">122~</td></tr>
<tr><td valign="top" width="113">EC2(Tokyo)</td><td valign="top" width="83">32~34</td><td valign="top" width="80">254~</td><td valign="top" width="103">48~</td><td valign="top" width="119">52~</td></tr>
<tr><td valign="top" width="113">EC2(Ireland)</td><td valign="top" width="83">21</td><td valign="top" width="80">117~</td><td valign="top" width="103">380~</td><td valign="top" width="119">313~</td></tr>
<tr><td valign="top" width="113">EC2(Virginia)</td><td valign="top" width="83">2~4</td><td valign="top" width="80">16~</td><td valign="top" width="103">200~</td><td valign="top" width="119">240~</td></tr>
<tr><td valign="top" width="113">*** KT wibro</td><td valign="top" width="83">130~190</td><td valign="top" width="80">320~</td><td valign="top" width="103">88~</td><td valign="top" width="119">95~</td></tr>
<tr><td valign="top" width="113">*** KT 3G</td><td valign="top" width="83">300~</td><td valign="top" width="80">380~</td><td valign="top" width="103"></td><td valign="top" width="119"></td></tr>
<tr><td valign="top" width="113">Cable Internet****</td><td valign="top" width="88">45~52</td><td valign="top" width="93">280~</td><td valign="top" width="121"></td><td valign="top" width="144"></td></tr>
</tbody></table>
<div style="color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;">
</div>
<div style="color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;">
* web-hosting type site in Korea</div>
<div style="color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;">
** virtual host type site in Korea</div>
<div style="color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;">
*** KT wibro and KT 3G are mobile internet service of Korean company KT.</div>
<div style="color: #333333; font-family: Verdana; font-size: 12px; line-height: 21px; text-align: justify;">
**** Cable network ISP in Seoul, Korea</div>
Anonymoushttp://www.blogger.com/profile/01677319513862742822noreply@blogger.com0tag:blogger.com,1999:blog-2016664647661235198.post-38512648593141436082012-08-05T00:12:00.001-07:002016-02-25T01:24:55.712-08:00Django 1.4 for Android (only dev. runserver!)<p> </p> <p>I’m writing this post because of this interesting article: <br />(I’m sorry that it’s written in Korean)</p> <blockquote> <p>[기고]약정 벗은 안드로이드, 서버가 되다…'서품폰' <br /><a href="http://www.zdnet.co.kr/column/column_view.asp?artice_id=20120518070549">http://www.zdnet.co.kr/column/column_view.asp?artice_id=20120518070549</a></p> </blockquote> <p>This article, which explains how to make a old android phone into simple server with web2py and ubuntu blahblah, concluded that the post’s author couldn’t set up Django on Android. I can’t understand why – you know, Django doesn’t depend on a bunch of ‘native’ python packages as I know(in other words, Django consists of pure python source files). If python is configured correctly, Django goes well as well, I guess.</p> <p>Yes, my Django doesn’t go such a fastidious way.</p> <p align="center"> </p> <p align="center"><img alt="케냘님의 미투포토" src="http://me2daythumb.phinf.naver.net/20120612_284/kenial_1339460916680vOnz3_JPEG/kenial_6169815345686509901.jpg?type=w500" /></p> <p> </p> <p>… So spent half a day, finally I got working Django 1.4 on Android – the working feature is mere runserver thing yet. Whatsoever, with more efforts, I believe that it’s going to be able to set up Django with other web server program. Will mod_wsgi be excutable on Android? hmm…</p> <p>However, here’s my work:</p> <blockquote> <p>※ Note: Target device is Motorola <a href="http://androidcheck.com/specs/Motorola/GLAM/" target="_blank">MOTOGLAM</a>, rooted and Android Froyo (2.2) installed.</p> <p><b>※ Note: The Android is unlike a typical Linux environment, the packages that can be installed in are limited. Django on Android  has such limitation as well. It’s hard to install the packages for Django(e.g. south, celery …), even sometimes impossible it is. So, just for fun, okay?</b></p> </blockquote> <p> </p> <p> </p> <hr /> <p align="center"><strong><font size="5">Django 1.4 for Android <br />(only dev. runserver!)</font></strong></p> <p> </p> <p>First, you have to install few apps.</p> <p>Some can be installed through Google Play, and others sholud be installed manually by using apk package. Heck, you don’t know about apk? DON’T DO THIS. Headache might overwhelm you.</p> <p>The following apps being on Google Play:</p> <p> </p> <p><strong>- File Manager</strong></p> <p>This is for installing apk or in case deleting some file manually. I’m using ES File Explorer as file manager.</p> <p><img src="http://lh6.ggpht.com/-ec2AYuGMy5A/UB4c1nghS3I/AAAAAAAAAC8/ZQKOxFtWq-c/device-2012-07-26-1606153.png?imgmax=800" width="200" height="356" /></p> <p> </p> <p><strong><strike>- Terminal Emulator</strike></strong></p> <p><strike>Virtual terminal for Android. If you don’t wanna root your phone, I guess there are some ways to do this, can you type all of tedious strings with Android’s virtual keyboard? Forget it. Use SSH, for your precious soul. <br /> <br /> <br /></strike></p> <p><strong>  </strong></p> <p><strong>- SSHDroid</strong></p> <p>A sort of ssh deamon for Android. It makes basic unix workspace for you with some utilities which don’t exist on Android.</p> <p><img src="http://lh3.ggpht.com/-1HTGlCtHeic/UB4c1ydRi5I/AAAAAAAAADE/6dp37HWcFJ4/device-2012-07-26-1606553.png?imgmax=800" width="200" height="356" /></p> <p>Launching SSHDroid, you can check the device’s IP address. And password for connection is configurable on SSHDroid’s menu. (You might change this)</p> <p> </p> <p> </p> <p> </p> <p>The following apps are what you should install using apk manually:</p> <p> </p> <p> </p> <p><strong>- Rooting tool</strong></p> <p>This work might be done without rooting, but I have no idea on this. I guess it’s real hell without rooting, just do this. You can find vary tools for your Android – and it depends on what device is and what Android OS version is. So I omitted rooting things here.</p> <p>If your device is rooted, run SSHDroid on your device,</p> <p><img src="http://lh6.ggpht.com/-M4fJqf3Fxp4/UB4c2K3XeXI/AAAAAAAAADM/WEUVJaJZP3k/device-2012-07-26-1445269.png?imgmax=800" width="200" height="356" /></p> <p>confirm that you could connect to your device through ssh. If you’re mac user, you could use default terminal program. In case of windows user, you could use ssh client program such a putty. According to above image, 10.0.0.14 is IP address of Android device. If ssh connected, you see messages like these:</p> <blockquote> <p>Kenials-MBA:~ kenial$ ssh root@10.0.0.14 <br /> <br />The authenticity of host '10.0.0.14 (10.0.0.14)' can't be established. <br />RSA key fingerprint is f7:97:44:c3:ab:49:42:14:db:ec:f2:e2:b8:ae:62:74. <br />Are you sure you want to continue connecting (yes/no)? yes <br />Warning: Permanently added '10.0.0.14' (RSA) to the list of known hosts. <br />SSHDroid <br />Use 'root' on rooted devices otherwise any username works <br />Default password is 'admin' <br />root@10.0.0.14's password:</p> <p>/data/data/berserker.android.apps.sshdroid/home # </p> </blockquote> <p> </p> <p> </p> <p><strong>- SL4A (Scripting Layer for Android) </strong><a href="http://code.google.com/p/android-scripting/"><strong>http://code.google.com/p/android-scripting/</strong></a><strong> <br />- P4A (Python for Android) </strong><a href="http://code.google.com/p/python-for-android/"><strong>http://code.google.com/p/python-for-android/</strong></a></p> <p>You guess what, from these names? These guys make your Android device to execute Python script on it, easily. Django is a web framework written in python, so python environment to run is needed.</p> <p>Connecting to your device through ssh, install them(I downloaded thme at /mnt/sdcard/_apk)</p> <blockquote> <p>cd /mnt/sdcard/_apk <br />wget http://android-scripting.googlecode.com/files/sl4a_r6.apk <br />wget http://python-for-android.googlecode.com/files/PythonForAndroid_r6.apk <br />su <br />pm install sl4a_r6.apk <br />pm install PythonForAndroid_r6.apk</p> </blockquote> <p> </p> <p>Then, check your apps installed, SL4A and Python for Android.</p> <p><img src="http://lh3.ggpht.com/-lDFOBXanaMM/UB4c2jgmWSI/AAAAAAAAADU/Zyrb11mL2Qw/device-2012-07-26-1641313.png?imgmax=800" width="200" height="356" /></p> <p> </p> <p>Runs Python for Android app, then tap Install button to install modules:</p> <p><img src="http://lh6.ggpht.com/-465-00vbo3c/UB4c2wvsXbI/AAAAAAAAADc/HBB4iyLwLEI/device-2012-07-26-1704053.png?imgmax=800" width="200" height="356" />  <img src="http://lh4.ggpht.com/-xFSTi3qbfEc/UB4c3Tb0d-I/AAAAAAAAADk/-Znukba5NmE/device-2012-07-26-1706203.png?imgmax=800" width="200" height="356" /></p> <p> </p> <p>If the installation done, run SL4A  app and execute helloworld.py script to check python works correctly.</p> <p> </p> <p><strong>- Edit .profile</strong></p> <p>This .profile script is for configuration of python environment. In terminal(or ssh client), type following commands to edit .profile:</p> <blockquote> <p>cd <br />vi .profile</p> </blockquote> <p> </p> <p>The content of .profile file:</p> <blockquote> <p>PATH=/data/data/berserker.android.apps.sshdroid/home/bin:$PATH <br />export PATH <br />export EXTERNAL_STORAGE=/mnt/sdcard                                                                                                                                                                                                  <br />export LANG=en <br />PYTHONPATH=/mnt/sdcard/com.googlecode.pythonforandroid/extras/python <br />PYTHONPATH=$PYTHONPATH:/data/data/com.googlecode.pythonforandroid/files/python/lib <br />PYTHONPATH=$PYTHONPATH:/data/data/com.googlecode.pythonforandroid/files/python/lib/python2.6/lib-dynload <br />export PYTHONPATH <br />export TEMP=/mnt/sdcard/com.googlecode.pythonforandroid/extras/python/tmp <br />export PYTHON_EGG_CACHE=$TEMP <br />export PYTHONHOME=/data/data/com.googlecode.pythonforandroid/files/python <br />export LD_LIBRARY_PATH=/data/data/com.googlecode.pythonforandroid/files/python/lib</p> <p># create /usr path for django-admin.py <br />if [ ! -d /usr/bin ]; <br />then <br />     mount -o remount,rw / <br />     mkdir /usr <br />     ln /data/data/berserker.android.apps.sshdroid/home/bin /usr/bin –s <br />fi <br />sh  </p> </blockquote> <p> </p> <p>Save the file and quit. Then type (or just reconnect to device): </p> <blockquote> <p>sh .profile</p> </blockquote> <p> </p> <p>Link python to sshdroid’s default path:</p> <blockquote> <p>ln /data/data/com.googlecode.pythonforandroid/files/python/bin/python /data/data/berserker.android.apps.sshdroid/home/bin/python <br />ln /data/data/com.googlecode.pythonforandroid/files/python/bin/python /data/data/berserker.android.apps.sshdroid/home/bin/python2.6</p> </blockquote> <p> </p> <p>Try to run python interpreter. If works, you see the result:</p> <p><img src="http://lh6.ggpht.com/-K6kiAXX1FXE/UB4c3s3FQHI/AAAAAAAAADs/R0imd3oqBB8/Screen-shot-2012-07-26-at-5.14.04-PM%25255B1%25255D.png?imgmax=800" width="489" height="262" /></p> <p> </p> <p> </p> <p><strong>- Django installation</strong></p> <p>Now (finally!!), it’s time to install Django.</p> <p>Go /mnt/sdcard/_apk path, download Django 1.4 package file, unzip it, copy the ‘django’ folder to python’s library folder. (Time to unzip could take a long time, just copy unzipped folder from PC directly into sdcard, if you want)</p> <blockquote> <p>cd /mnt/sdcard/_apk <br />wget <a href="http://www.djangoproject.com/m/releases/1.4/Django-1.4.tar.gz">http://www.djangoproject.com/m/releases/1.4/Django-1.4.tar.gz</a> <br />tar xzvf Django-1.4.tar.gz <br />cd Django-1.4 <br />cp -r django /data/data/com.googlecode.pythonforandroid/files/python/lib/python2.6/lib-dynload/django     # instead of 'python setup.py install' <br />ln /data/data/com.googlecode.pythonforandroid/files/python/lib/python2.6/lib-dynload/django/bin/django-admin.py /data/data/berserker.android.apps.sshdroid/home/bin/django-admin.py</p> </blockquote> <p>Here is one what you remember: In most cases, you can’t install python package using general setup.py script on Android. Android OS doesn’t have various developer’s tools, for example, like gcc, so you need to copy django folder into lib-dynload folder by hand. Then python could load Django modules from lib-dynload folder, using by p4a.</p> <p style="margin-left: 2em">* You can also let this Django folder go to site-packages folder, which is more general for pythonic package. But site-packages of P4A is on sdcard path, might cause slow performance(it depends on what your device is). So I copied it to lib-dynload folder under /data path.</p> <p>ln command will link django-admin.py to SSHDroid’s PATH enviroment variable, and you can django-admin.py on anywhere path.</p> <p> </p> <p><strong></strong></p> <p><strong>- Create django project</strong></p> <p>Wanna take a bite? Go ahead:</p> <blockquote> <p>cd /mnt/sdcard <br />django-admin.py startproject django_first <br />cd django_first <br />python manage.py runserver 0.0.0.0:8000</p> </blockquote> <p> </p> <p>Check it out running:</p> <p><img src="http://lh5.ggpht.com/-p3XZDSSMe3Y/UB4c36K7qEI/AAAAAAAAAD0/rvJSuJXS2Y8/Screen-shot-2012-07-26-at-5.56.04-PM%25255B1%25255D.png?imgmax=800" width="489" height="363" /></p> <p> </p> <p>And bring it on:</p> <p><img src="http://lh6.ggpht.com/-m4b3vaaY9iA/UB4c4UH28FI/AAAAAAAAAD4/8ODexuC2MJg/Screen-shot-2012-07-26-at-2.32.22-PM.png?imgmax=800" width="492" height="429" /></p> <p> </p> <p>Done! : )</p> Anonymoushttp://www.blogger.com/profile/01677319513862742822noreply@blogger.com2tag:blogger.com,1999:blog-2016664647661235198.post-2965241733650276102012-08-04T19:30:00.001-07:002016-02-25T01:24:55.709-08:00First post, anyway<p>It would be good, as possible, to write a flawless post for the very first one. But the first thing is not for perfection. </p> <p>Anyway, it could be the foundation for it. I wish it could be.</p> Anonymoushttp://www.blogger.com/profile/01677319513862742822noreply@blogger.com0