tag:blogger.com,1999:blog-43700817712737837922024-03-13T21:42:26.098+05:30My experiments with LinuxMy blog on Linux and programming. Covers Linux, VoIP, C, mysql, php and everything else that I come across while tinkering with my Linux boxes.Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.comBlogger135125tag:blogger.com,1999:blog-4370081771273783792.post-24617286572154432502018-05-16T15:41:00.000+05:302018-05-16T15:41:45.812+05:30Pre-processor token concatenation that involves operators<div dir="ltr" style="text-align: left;" trbidi="on">
Recently encountered this problem<br />
<br />
<blockquote class="tr_bq">
#define call_fn(var) myfn(mystruct->var)<br />call_fn(size)</blockquote>
<br />
This resulted in an error. (Use gcc -E only to do pre-processing)<br />
<br />
<blockquote class="tr_bq">
error: pasting "->" and "size" does not give a valid preprocessing token<br /> #define call_fn(var) myfn(mystruct->##var)</blockquote>
<div>
<br /></div>
<div>
Had to search this a bit to find the reason. The reasons that I found are summarized below.</div>
<div>
<br /></div>
<div>
<ul style="text-align: left;">
<li>Result of token concatenation should result in a single valid token.</li>
<ul>
<li>Here, mystruct->size (the result of operation) is not s single token. It is actually 3 tokens: "mystruct", "->" and "size"</li>
</ul>
<li>gcc is more stringent than VC++ in evaluating this. So, something that works on VC++ might not work here</li>
</ul>
<div>
So, what is the solution?</div>
</div>
<div>
<br /></div>
<div>
Imaging you had to do an add macro. What would you have done?</div>
<div>
<br /></div>
<blockquote class="tr_bq">
#define ADD(a,b) (a+b)</blockquote>
<div>
<br /></div>
<div>
As I understand, the same principle applies here. This is what I need to do</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<blockquote class="tr_bq">
#define call_fn(var) myfn(mystruct->var)<br />call_fn(size)</blockquote>
This will give the expected result: (Use gcc -E only to do pre-processing)<br />
<br />
<blockquote class="tr_bq">
myfn(mystruct->size)</blockquote>
<br />
</div>
</div>
Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-69485772160207803152017-08-21T00:02:00.001+05:302017-08-21T00:16:07.593+05:30Using selenium to clean-up gmail<div dir="ltr" style="text-align: left;" trbidi="on">
Posting a quick piece of code to delete large number of mails from Gmail...
<br />
<pre>import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("https://mail.google.com/")
elem = driver.find_element_by_id("identifierId")
elem.clear()
elem.send_keys("YourEmailId@gmail.com")
elem = driver.find_element_by_id("identifierNext")
elem.click()
elem = driver.find_element_by_name("password")
#elem.clear()
elem.send_keys("YourPassword")
elem.send_keys(Keys.RETURN)
elem = driver.find_element_by_name("q")
#elem.clear()
elem.send_keys("label:YourLabel")
elem.send_keys(Keys.RETURN)
for x in range(1,50):
elem = driver.find_element_by_xpath("//div[@id=':rr']/div/span/div")
elem.click()
time.sleep(5)
elem = driver.find_element_by_xpath("//div[@id=':5']/div[2]/div/div/div/div/div[2]/div[3]/div/div")
elem.click()
time.sleep(5)
</pre>
<br />
Now the story:<br />
I had a large number of mails coming from a specific mailing group. I had created a label and rule label these mails with that label in Gmail. Today, when I opened Gmail, I found that I had used almost 100% of my storage. I first wrote an google app script to fix this issue. However, I soon came across the script invocation limitations set by google. So, I installed selenium for python, got the chromedriver and put it in the path and wrote the above script. Wonder where I got stuff like "//div[@id=':5']/div[2]/div/div/div/div/div[2]/div[3]/div/div"? I was trying to use selenium ide with FireFox. Though the IDE did not work, it gave me such useful info as above.<br />
<br />
<b>Steps:</b><br />
0. Install python<br />
1. Install selenium bindings for python (pip install selenium)<br />
2. Install selenium driver for your browser (Download and extract to some folder. Then add that folder to your PATH)<br />
3. Write this script (Use inspect element option in chrome, firefox selenium ide etc to know the elements that you want to manipulate)<br />
4. Debug, fix issues and have fun!<br />
<b><br /></b>
<b>Here are some useful links:</b><br />
1. http://selenium-python.readthedocs.io/installation.html<br />
2. https://sites.google.com/a/chromium.org/chromedriver/downloads<br />
3. http://selenium-python.readthedocs.io/getting-started.html<br />
4. http://www.seleniumhq.org/projects/ide/<br />
5. http://selenium-python.readthedocs.io/navigating.html<br />
6. https://stackoverflow.com/questions/17533024/how-to-set-selenium-python-webdriver-default-timeout<br />
7. https://www.tutorialspoint.com/python/time_sleep.htm<br />
<br />
Note: You will have to go to trash after a while and click on empty trash.</div>
Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-4483487902199330712017-05-22T00:19:00.001+05:302017-05-22T00:19:51.746+05:30Throwing in F25 into a machine running W10<div dir="ltr" style="text-align: left;" trbidi="on">
Well, I did this today. I was on W10+Ubuntu 16.04 combo till now. Unfortunately for me, my Ubuntu was unaware of my HP240 hardware drivers. I went completely offline as both my wireless, ethernet, and BT were not recognized by Ubuntu. On top of that, I could not find cdc_ether drivers to tether using my mobile. After some struggle with trying different kernels, I decided to try F25. I used F25 media writer for windows. The first issue was that the link provided in Fedora download page does not have latest writer. https://getfedora.org/en/workstation/download/ points media writer version 4.0.8 which crashed before starting after installation. But, you get the <a href="https://github.com/MartinBriza/MediaWriter/releases" target="_blank">latest from here</a> and it will work (4.1.0 worked for me).<br />
<br />
I used a 16 GB driver and after I booted to this drive, I installed fedora on my Ubuntu partition after deleting it. However, the installer cried out about not having GPT partition for boot loader. I just told it not to install a boot loader. I was hoping that I could get it installed after the OS is installed.<br />
<br />
After OS was installed, I booted to HDD. It was stuck at grub. It will not proceed beyond that point as I have destroyed Ubuntu partitions and grub was looking for those partitions. All I got was a recovery shell of grub. I booted again to F25 USB stick installation. Did a chroot to newly created partition and tried almost all that was told <a href="https://fedoraproject.org/wiki/GRUB_2#Updating_GRUB_2_configuration_on_UEFI_systems" target="_blank">here</a>. No way. Error after error. My Sunday was getting spoiled. Just reminded me of those golden words about Sendmail....<br />
<br />
I was getting disturbed. Decided to take a sure to work shortcut. Did the following.<br />
<br />
<ol style="text-align: left;">
<li>Went and bought another 32 GB pen drive</li>
<li>Again booted to USB Linux image and downloaded Windows 10 dvd from Microsoft site and wrote it to a DVD. (No, I did not have to use this.)</li>
<li>Took a back-up of MBR to pen drive</li>
<li>Installed syslinux and recovered MBR (I was skeptical about effectiveness of doing this for W10 as it was suggested for every version of windows except Windows 10)</li>
<li>After that step, my machine was able to boot to Windows (Hurray... a tiny step close to normalcy)</li>
<li>Deleted the partitions in new 16 GB pen drive and also all Linux partitions from HDD</li>
<li>Started the install to HDD process and selected both sda and sdc (pen drive) as target for installations</li>
<li>Set pen drive as boot device and gave installer control over making partitions. It did a very good job by creating boot and EFI folders on pen driver and swap space and root on free space available in sda.</li>
<li>Installation was complete and I removed all external drives and booted the device to Windows </li>
<li>Later I plugged in the pen drive and viola, and the device boots to Linux</li>
</ol>
<div>
I will take some time later and figure out how to avoid the pen drive. But till then, I have a working laptop that has both W10 and F25</div>
<br />
<br /></div>
Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-4976024800938654692017-03-29T00:40:00.001+05:302017-03-29T00:40:28.419+05:30Is JIO doctoring speed tests?<p dir="ltr">Well, it was only last week when one of my friend showed me the speed test app of jio reported over a few mbps as the download speed where as the app by TRAI showed the speed as 0.05mbps. </p>
<p dir="ltr">Today, I noticed something bizarre. I was watching youtube videos and suddenly speed went down and the videos started buffering. In a few seconds, i got a message from jio pay. I understood what happened and without checking the message, I opened the settings and changed mobile data to my vodafone sim. However, after a few minutes, i realized that it was close to 12am when it happened. So, at 12.03, I switched back to JIO only to find my videos still buffering. Now comes the fun part...</p>
<p dir="ltr">I opened the TRAI speed test app and checked the speed. It was showing 3.88 and 5.82 mbps for download and upload respectively. Something must be wrong. I checked youtube again. No change! It was buffering as before. I had half a mind to call up JIO guys and ask them why is youtube buffering at 3.88 mbps?</p>
<p dir="ltr">Anyway, before I did that, I opened the sms that i had got from JIO pay and checked its contents. Wow! It had news for me!</p>
<p dir="ltr">1. JIO does not restore your speeds at 12am. They do it at 2am<br>
2. Till 2am my speed will be 128kbps</p>
<p dir="ltr">Now the mystery: If my speed was throttled at 128kbps, how did TRAI app read 3.88mbps? I believe this is a clear indication of the fact that JIO is doctoring the speed test results! </p>
Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-83255760654598383252016-11-25T19:36:00.001+05:302016-11-25T19:36:10.522+05:30Streamer<p dir="ltr">This is some quick notes on cross compiling xawtv. I had to get a webcam working on an embedded device this week and after not getting much success with a simple v4l app, (derived from simplewebcam android app's native library), I decided to cross compile xawtv. The only interesting part was the streamer console application.</p>
<p dir="ltr">I cross compiled this for arm. There was not much support for cross compilation as far as I could see. </p>
<p dir="ltr">XawTv depended on libv4l for which I had to compile v4l utils. This in turn needed libjpeg support. SourceForge gave me version 6 of libjpeg which had issues with libtool while cross compiling. Eventually I built version 9 which was obtained from some other location. To get the library, i had to use --enable-shared flag at the time of configuring. Then I compiled v4l utils. All this was done by setting LDFLAGS, CFLAGS and CXXFLAGS appropriately. As I remember, compiling v4l utils needed -Wl,-rpath-link=path_to_jpeglib in compiled flags.</p>
<p dir="ltr">There was some code that needed x11 libraries and I just commented them using # if 0. Another point to note is that output goes to .lib for these packages.</p>
<p dir="ltr">Now, for xawtv, I set the compiler and linker flags and configured using --host option to indicate that it is a cross compilation. However, I ran into problems as LDFLAGS was not honoured. After a long struggle, I figured out that flag was called DLFLAGS or something similar in Makefile. I set that to my current LDFLAGS value. Things went fine to some extend and I got streamer compiled. However, I was getting many warnings and errors since the build kept looking at /usr/include though I was cross compiling. Using -nostdinc only worsened the pain as I had to then use -I flag for each standard include folder and sub folders. So, I gave up on that and looked at what was causing the error. I could see that among many warnings there was only one error. It was related to FD_XXX macros of select. </p>
<p dir="ltr">Though I first ignored all these and decided to use only streamer (which was already compiled at this stage), my happiness was short lives as I found that the streamer used libng and the plugins present inside that folder.</p>
<p dir="ltr">I then commented many places where select appeared. However, same was appearing in v4l drivers. There alone I replaced select with Poll. My streamer and drivers were now ready. But, while running, streamer was not able to load drivers due to some unresolved symbols in drivers. </p>
<p dir="ltr">After a feel in entire source code, I found that they were present in libng and I only had a static library for libng. At this point, a word about makefiles in xawtv. The top folder has main Makefile. It then had Subdir.mk in each sub-folder which is included by main make file. Quick look at Subdir.mk Will give one a good idea about how to build an application/library. After seeing the objects that go into libng.a, I wrote a simple make file to get a corresponding .so file (arm-xxx-gcc -fPIC -shared needed.o -o libng.so). Then I wrote a similar make file for streamer and used this so to build streamer. (Streamer was using .a earlier). Then I copied the streamer and new libng.so to target.</p>
<p dir="ltr">Viola! "./streamer -o image.ppm -D v4l2" gave me my first image and I ended my day's work after seeing it via ppm2tiff. Well, I was really refreshing to see the same old mundane scenes via that image :)</p>
Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-53109538879466213322016-10-19T23:58:00.000+05:302016-10-20T02:13:48.722+05:30Android logging<div dir="ltr" style="text-align: left;" trbidi="on">
I was looking at building a framework for logging which is expected to be platform independent. However, truth is that it cannot be really platform independent. If I say that all processes send the log to the logging framework using IPC and stop there, I will not be doing justice to the job of defining the architecture. I need to see what type of IPC is better for our QAs. (Here the main quality attribute that we consider is performance).<br />
<br />
Now comes another problem. If I evaluate the IPC for one of the platform (custom made Linux) against IPC that in Android, (two of the five or six platforms that I need to consider) it might so happen that IPC mechanism chosen for Linux is not available under Android. So, I eventually decided to go bit deeper and look at the details of IPC mechanisms available in Android.<br />
<br />
It was not that easy to understand the whole framework in a short duration. However, the following page was really helpful.<br />
<br />
http://elinux.org/Android_Logging_System<br />
<br />
So, every application uses a library function and writes to some buffers in kernel. I checked the corresponding code. Lets start with Log.java<br />
<br />
The file is present in frameworks/base/core/java/android/util/Log.java<br />
No magic seems to be happening there. It just calls corresponding native function println_native<br />
println_native is in frameworks/base/core/jni/android_util_Log.cpp. However, the real work happens in __android_log_buf_write which is inside system/core/liblog/logd_write.c (or logd_write_kern.c depending on compile time flag). It calls write_to_log which is a function pointer which very intelligently implements a singleton.<br />
<br />
Let us look at logd_write.c first:<br />
At first write_to_log is set to __write_to_log_init which calls __write_to_log_initialize. Which opens a file "/dev/pmsg0" and a Unix socket /dev/scoket/logdw. The pointer is then modified to point to __write_to_log_daemon and subsequent calls reach that function.<br />
<br />
<will continue="" later=""></will>In this function (__write_to_log_daemon), the log is written to both the socket and the device. We will first see what happens to socket.<br />
<br />
The listener is in system/core/logd/LogListener.cpp. However, this class extends SocketListener. The real work is done in SocketListener::runListener. The socket is read for each client here. It took me a while to find out how the generic SocketListener class passes data to LogListener. SocketListener class has a virtual function onDataAvailable(SocketClient *c) which is implemented by LogListener. When the SocketListener finds that there is data to be read from the socket, it calls the onDataAvailable function which maps to corresponding function of LogListener class.<br />
<br />
What happens in LogListener::onDataAvailable?<br />
The message is read and it is put into a LogBuffer. It also informs the reader when a new message arrives. All the connected clients can now get the data from the reader.<br />
<br />
Apps-->Log-->/dev/socket/logdw-->LogListener-->LogBuffer-->LogReader-->/dev/socket/logdr-->Clients of log reader!<br />
<br />
Well, I will update the log what happens to /dev/pmsg0 later. Time to sleep. Anyway, my takeaway from this is that I can safely use unix sockets for IPC in both Android and Linux without bothering much about performance and my code might be portable across these two platforms if I take a little bit of care.<br />
<br />
Note: I have looked at Anroid 6.0.1 source to get this information.</div>
Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-42728971431239839782016-09-21T22:00:00.001+05:302016-09-21T22:00:20.269+05:30Getting back to blogging<div dir="ltr" style="text-align: left;" trbidi="on">
For a long time I was not blogging anything. However, recently I had to study Lucene for some project and I also started work on a application that is being developed on Linux. This made me think that I should also restart this blog. As part of the new application that I am working on, I have started learning python and I will post more about it later. I have lot of things planned for future. On the Linux front, I am looking at getting a test machine setup and spend sometime on some of the industry standard software (mainly from Apache software foundation).<br />
<br />
I will take sometime, but, I will surely restart these blogs!</div>
Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-47671241563864977642014-05-11T23:10:00.000+05:302014-05-11T23:10:24.373+05:30Win7 access point<div dir="ltr" style="text-align: left;" trbidi="on">
OK, this time, its slightly different. It is not about Linux, but about windows 7. I was looking into building an application for <a href="https://developer.getpebble.com/" target="_blank">pebble watch</a> and while reading about their <a href="https://cloudpebble.net/" target="_blank">cloud IDE</a>, I came to know that I need to have both development PC and the Android phone need to be on same wifi network. However, my wifi router was dead long back and I was managing using ad-hoc networks between my laptops. (Well, I had taken over my wife's old laptop after I bought a new one for her and it was running win-7. Since display was dead for that laptop, I have hooked a LCD monitor to it and it was working as my wifi router in adhoc mode)<br />
<br />
Now, it was definite that I need an AP at home and thought about buying one. Each one costed more than 1.5K INR or more. And, I had the bad experience of wifi on my D-Link DSL-2730U dying within 3 months of buying it. Actually, it did not die... but, the its dc adapter did and after a few months from replacing the original adapter with a local made one, I noticed that whole device kept rebooting if wifi was on. When the frequency of rebooting became really unbearable, I decided to move to my ad-hoc network. So, the bottom line is, even if I spent 1.5K, there is nothing that I can do for adapter which is not covered under warranty and so, I decided against buying it.<br />
<br />
I then read about having the access point setup on the win7 machine. It was much easier than I thought. After a bit of searching on google, I came up with the following solution.<br />
<br />
<br />
<ul style="text-align: left;">
<li>Start the command prompt as admin user (type cmd in search box and when cmd appears on top, right click and select run as)</li>
<li>The bellow commands will create an AP</li>
<ul>
<li>netsh wlan set hostednetwork mode=allow "ssid=YourNwkName" "key=0Your1Secret3Key" keyUsage=persistent</li>
<li>netsh wlan start hostednetwork</li>
</ul>
<li>Change SSID and KEY as per your choice</li>
<li>You can see the new virtual WIFI port and set it properties at the same location where you see the normal network adaptors. (Start -> run -> type "ncpa.cpl" sans quotes -> enter)</li>
<li>Right click on the adapter that is connected to internet and select properties</li>
<li>Select the sharing tab, enable it and select the home network as the newly created network</li>
<li>Windows will move home network to some vague IP address block that is not so common. You may change it by editing the IPv4 properties of that network</li>
<li>Install a dhcp server and configure it</li>
<ul>
<li>I used the server from http://www.dhcpserver.de/</li>
<li>The setup is explained at http://www.dhcpserver.de/dhcpsetup.htm</li>
<li>However, I have briefly explained some points to take care below</li>
<li>It comes with a firewall, setup the firewall to allow access</li>
</ul>
</ul>
<div>
<br /></div>
<div>
Test your network and be satisfied that things work as expected. Now comes the interesting part. How do I turn on this stuff at start-up? Again came google to the rescue :)</div>
<div>
<br /></div>
<div>
<ul style="text-align: left;">
<li>Create a batch file to create and start hosted network (I saved it as startap.bat)</li>
<li>Add dhcp server startup also to it. Final script will look something like below</li>
</ul>
<blockquote class="tr_bq">
<blockquote class="tr_bq">
<span style="font-family: Arial, Helvetica, sans-serif;"><i>netsh wlan set hostednetwork mode=allow "ssid=YourNwkName" "key=0Your1Secret3Key" keyUsage=persistent</i></span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: Arial, Helvetica, sans-serif;"><i>netsh wlan start hostednetwork</i></span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: Arial, Helvetica, sans-serif;"><i>D:\dhcpserv\dhcpsrv.exe -ini D:\dhcpserv\dhcpsrv.ini -start</i></span></blockquote>
</blockquote>
<ul style="text-align: left;">
<li>Download and install nssm and the batch script as a startup service to windows</li>
<ul>
<li>I created a run.bat which contained the following line and executed it as administrator by right clicking it</li>
<ul>
<li>D:\dhcpserv\nssm-2.21.1\nssm-2.21.1\win32\nssm.exe install apsrv</li>
</ul>
<li>The above action will bring up a GUI and you can select bash script created in previous step (startap.bat) as the command to run</li>
</ul>
<li>In your scripts, change the paths as per where you have installed dhcpsrv, </li>
</ul>
</div>
<div>
Now a bit about dhcp configuration</div>
<div>
<ol style="text-align: left;">
<li>Set dns server and gateway</li>
<li>Do remember to turn on firewall</li>
<li>Save the configuration</li>
</ol>
<div>
(I wanted add a few screenshots... but now I am too sleepy...)</div>
</div>
</div>
Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-73378998958192957652014-03-04T21:55:00.000+05:302014-03-04T21:55:14.064+05:30The price war...<div dir="ltr" style="text-align: left;" trbidi="on">
<blockquote class="tr_bq">
<span style="background-color: white; color: #333333; font-family: 'Open Sans', sans-serif; font-size: 20px; line-height: 36px;">Vishal Tripathi, an analyst at Gartner reportedly believes that the Windows brand still resonates with people. “If people have an option to get a Windows tablet at price that is similar to an Android tablet, they will likely pick it. A low-cost Windows tablet is not going to shake the market but it will help Microsoft gain some consumers who will otherwise go to Android,” he said.</span></blockquote>
http://tech.firstpost.com/news-analysis/microsoft-releasing-rs-10000-windows-tablets-mid-year-take-android-219367.html<br />
<br />
Well, I do not agree to that. Free is FREE. 15 != 0. But, the fact that is really going to go against them is that, people will not pick windows just because there is an option! If that was the case, they should have already been picking up windows mobiles from Nokia. But, they are not doing it!<br />
<br />
Reason? Customers have gone more tech savy and they understand what they are getting. They spent 80% of their time in apps. MS has a store with 10^5 apps or a little more. On Android, they have about 10^6 apps. About 10 times more!<br />
<br />
Of course, people have not forgotten name of MS yet. But, they are more familiar with the name of Android when it comes to phones and tablets. The killer apps on any MS OS are office apps. If they are not going to play that trump card by making office dirt cheap, it will be difficult to make people forget about Android.<br />
<br />
Again, in past we have seen Amazon, Nokia etc forking Android. Can it happen in case of any MS OS?<br />
<br />
So, the bottom line is, MS cannot win by simply reducing the price of OS. They have to catch up on apps, reduce the cost of office suite and learn from Android about how to force your bitter most enemy to come to you for this survival and then help him to survive :) The last point lets you survive in a fiercely competitive market irrespective of whether you win or your opponent wins eventually. Last at least is something that MS can never do. They are good at closing windows to people, but Android has none to close. </div>
Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-84281174426337324652013-11-08T08:04:00.003+05:302013-11-08T08:04:28.103+05:30OpenCV<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
I am back again. Don't know how long I will stay. But, I want to try something with opencv. Eventually this will happen in ARM platform. However, I am starting with my old laptop running ubuntu.<br />
<br />
Step-1: Compiling opencv<br />
<ol style="text-align: left;">
<li>Download opencv from http://opencv.org/downloads.html</li>
<li>Create a folder where you are going to build this and untar the files there (I did it in /host/opencv. This created opencv-2.4.6.1 folder inside above directory) </li>
<li>For detailed installation steps, you can visit http://docs.opencv.org/doc/tutorials/introduction/linux_install/linux_install.html</li>
<li>I did not have cmake installed. Installed it using command "sudo apt-get install cmake""</li>
<li>I also ran "sudo apt-get update", "sudo apt-get install libgtk2.0-dev" and "sudo apt-get install ffmpeg" </li>
<li>Created 2 folder scripts and release</li>
<ol>
<li>/host/opencv/scripts -> A folder for my build script</li>
<li>/host/opencv/release -> A folder for saving my release binaries</li>
</ol>
<li>Created my build.sh in scripts folder. It is pasted below</li>
</ol>
<blockquote class="tr_bq">
<pre>BUILD_DIR=$PWD/../release/
SRC_DIR=$PWD/../opencv-2.4.6.1/
cd ${BUILD_DIR}
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ${SRC_DIR}
make -j 6</pre>
</blockquote>
</div>
Once you do the above steps, run build.sh and then once the build is successfully completed, enter the release folder and execute "sudo make install".<br />
This will install your built binaries to /usr/local. This is only building OpenCV. I will talk about building a program using this in another post.<br />
<div>
<ol style="text-align: left;">
<li> </li>
</ol>
</div>
</div>
Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-88939309270490487202011-08-29T21:34:00.000+05:302011-08-29T21:34:24.717+05:30Moving to wordpress<div dir="ltr" style="text-align: left;" trbidi="on">I revamped <a href="http://www.blogger.com/">my homepage</a> by moving it to a hosting provider and migrating to joomla. Fortunetly or unfortunately, Joomla has very good plugins for wordpress and not for blogspot. These plugins allow me to post at my wordpress blog while updates will be made available instantaneously at my home page. I have pulled all the content from flyingtux.blogspot.com to yetanothertux.wordpress.com. Do continue to visit me at<br />
<br />
<a href="http://yetanothertux.wordpress.com/">http://yetanothertux.wordpress.com</a><br />
<a href="http://sarin.net.in/">http://sarin.net.in</a></div>Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-74275258762455884342011-06-24T12:40:00.000+05:302011-06-24T12:40:39.867+05:30QT keyboard events<div dir="ltr" style="text-align: left;" trbidi="on">I am here to make a quick post. I searched for this at many places but could not get the exact solutions. Every message I could read sounded cryptic.<br />
<br />
Scenario:<br />
I want to generate fake keyboard events and send to QWebView class.<br />
<br />
Solution:<br />
Extend this class to have <a href="http://doc.qt.nokia.com/latest/signalsandslots.html">slots for signals</a>. Connect it to a signal that can pass an ascii character.<br />
<br />
Issue:<br />
Keyboard does not have 'a' and 'A'. It only has an 'A'. That means, I cannot directly send any lower case characters using the event (Which is not correct)<br />
<br />
Solution:<br />
The solution is simple. The constructor of QKeyEvent can take QString as one of its argument. The signature is as follows:<br />
<br />
<table class="alignedsummary"><tbody>
<tr></tr>
<tr><td class="memItemRight bottomAlign"><b><a href="http://doc.qt.nokia.com/latest/qkeyevent.html#QKeyEvent">QKeyEvent</a></b> ( Type <i>type</i>, int <i>key</i>, Qt::KeyboardModifiers <i>modifiers</i>, const QString & <i>text</i> = QString(), bool <i>autorep</i> = false, ushort <i>count</i> = 1 )</td></tr>
</tbody></table><br />
<br />
<br />
<br />
<br />
Even if we don't pass the QString, it will work. However, by passing the QString, we can control exactly what will be displayed.<br />
This is how I create my QKeyEvent:<br />
<br />
<br />
void MyWebView::rcvKeys(int k)<br />
{<br />
<br />
char str[2];<br />
str[0]=k;<br />
str[1]='\0';<br />
<br />
QKeyEvent *k=new QKeyEvent(QEvent::KeyPress,k,Qt::NoModifier,QtString(str),false,0)<br />
<br />
//-----------Pass it to postevent etc<br />
}<br />
} <br />
</div>Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com1tag:blogger.com,1999:blog-4370081771273783792.post-26486584253383749092011-04-24T21:50:00.001+05:302011-04-24T21:58:46.635+05:30Google fined USD 5 million for using patented code in Linux kernel<div dir="ltr" style="text-align: left;" trbidi="on"><br />
<a href="http://www.bbc.co.uk/news/technology-13168296">http://www.bbc.co.uk/news/technology-13168296</a><br />
<br />
Very interesting news. I am still not really sure if this is part of mainline. However, considering the fact that the holder was able to analyse the code and ascertain that it was there in the Google's server's kernel indicates it was surely there on the public domain whether it was a custom piece of code written by Google engineers or not. This is surely something very interesting thing to happen and it would be very interesting to see if Google takes it beyond district court and what exactly happens to this case at the end<br />
<br />
/. link: <a href="http://linux.slashdot.org/story/11/04/21/2140249/Google-Loses-Bedrock-Suit-All-Linux-May-Infringe">http://linux.slashdot.org/story/11/04/21/2140249/Google-Loses-Bedrock-Suit-All-Linux-May-Infringe</a> </div>Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-13896799148914786702011-04-13T17:39:00.000+05:302011-04-13T17:39:32.927+05:30Build error on Android rowboat<div dir="ltr" style="text-align: left;" trbidi="on">I was building the code for TI omap3evm and I found that on FC14, I was getting the error from the make file of kernel. It told "Mixed implicit and normal rules". On a bit of googling, I found http://www.mail-archive.com/bug-make@gnu.org/msg06220.html<br />
<br />
The file "hardware/ti/sgx/GFX_Linux_KM/eurasiacon/build/linux/omap3630_android/kbuild/../../kbuild/Makefile.kbuild" need to be modified as follows:<br />
<br />
Change "all %:" to<br />
all:<br />
(Build command)<br />
%::<br />
(Build command)</div>Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-12914498935637451732011-03-06T00:25:00.000+05:302011-03-06T00:25:09.549+05:30Fips opessl<div dir="ltr" style="text-align: left;" trbidi="on"><a href="http://olex.openlogic.com/packages/opensslfips">http://olex.openlogic.com/packages/opensslfips</a><br />
<br />
I was cross compiling this. The strangest thing about this is that it cannot be cross compiled. Because, they generate programs, <b>run them</b>, get signature from the programs and use that signature to compile them again!<br />
<br />
I did that by little bit effort. What I am now looking at is the possibility of having it compiled inside qemu. Anyway, this is what I did<br />
1. Configure for linux-ppc with compiler, prefix and ranlib specified during this step<br />
2. Find and replace ar using powerpc ar in all makefiles<br />
3. Make and when it breaks during sha1 calculation, replace the binary that does sha1 caculation with an x86 equivalent and complete this step<br />
4. Make again and when it tries to execute openssl/tests, replace the necessary statements in fipsld with read function and supply the signatures for each program after taking them to target and running them there once<br />
Well, another issue that I noticed with this package is that it does not behave well with parallel builds. I will post here again if I can compile this in Qemu. I am planning to use FC12 ARM/PPC for this.</div>Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-59024253978396243872011-02-19T21:09:00.000+05:302011-02-19T21:09:44.455+05:30Middle men<div dir="ltr" style="text-align: left;" trbidi="on"><a href="http://www.pcworld.com/article/219776/rim_nokia_docomo_dodge_googles_dumb_pipe_menace.html">http://www.pcworld.com/article/219776/rim_nokia_docomo_dodge_googles_dumb_pipe_menace.html</a><br />
<br />
OK, losers consortium has taken shape. But, what are they driving at? The whole discussion is centered around how to enable the service provider to be the middle man and extort money from poor end user. With what face is Nokia and RIM going to face end customers now? A smart phone today costs 20-30k (INR). After taking such huge amounts from end customer, they want to create means for the letting the service provider loot the customer! Shame on them.<br />
<br />
May be your service provider is subsidizing your phone. However, that reminds me about the phones (LG-LSI110) that Reliance used to sell for 3K! I am pretty much sure that it didn't have electronics and plastics worth even Rs. 1000. However, the phone came with the note that its cost is 10K and it is owned by Reliance. This was about 7 years back. I doubt there will be any change today. Anyway, would you prefer to get a smart phone at a subsidized cost when you pretty well know that this amount will be recovered from you through monopolistic practices of the service provider?<br />
<br />
Well, I recently used a Galaxy tab to download and test an application (<a href="http://code.google.com/p/zxing/">ZXing</a>). The ability to customize your smart phone by pushing an apk to it after enabling USB debugging was probably the only reason needed for paying 30K for that device. Well, Nokia, go back and make some good Android phones and I will buy them (Yes, I would prefer to buy android from Nokia over any other vendor) when they become available.</div>Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-58694208005112470802011-01-30T02:33:00.000+05:302011-01-30T02:33:09.318+05:30Mozilla Dash<div dir="ltr" style="text-align: left;" trbidi="on">I am on FF 4 beta 10 and I installed <a href="http://mozillalabs.com/prospector/2011/01/26/towards-browse-based-browsing-with-home-dash/">this addon</a>. It was highly hyped at many sites. However, it was a bit of disappointment.<br />
Why?<br />
<br />
<ul style="text-align: left;"><li>It is not intuitive enough</li>
<ul><li>Even after being a heavy internet user, I had to struggle to get back my tabs</li>
</ul><li>It does not show the url</li>
<ul><li>This might be a good thing that you can search and find links. But, how do I make sure that the search result is correct and I am on the expected link? This is a problem especially when I am on sites that do financial transactions. </li>
</ul><li>The UI was not up to the mark. I could see that the fonts of menu items were cut at bottom half</li>
</ul><div>Well, so, whats good about it? Its still experimental. We can hope that it will get improved :)</div></div>Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-38795852562585971832011-01-24T11:23:00.000+05:302011-01-24T11:23:40.672+05:30.PHONY<div dir="ltr" style="text-align: left;" trbidi="on">For a long time, I used to look at .PHONY targets in makefiles and wonder how useful those targets were. Today, I found the usefulness while playing with prelink (more on prelink later).<br />
<br />
I created the following files and folders while doing this:<br />
<br />
<blockquote>[root@sarin prelink]#ls -l<br />
total 20<br />
drwxr-xr-x 2 root root 4096 2011-01-24 11:14 bin<br />
drwxr-xr-x 2 root root 4096 2011-01-24 11:14 lib<br />
-rw-r--r-- 1 root root 57 2011-01-24 10:41 libutil.c<br />
-rw-r--r-- 1 root root 273 2011-01-24 11:14 Makefile<br />
-rw-r--r-- 1 root root 343 2011-01-24 10:56 prelink.c<br />
[root@sarin prelink]#cat Makefile<br />
all: bin<br />
<br />
lib: libutil.c<br />
gcc -shared -Wl,-soname,libutil.so -o lib/libutil.so libutil.c<br />
<br />
bin: lib prelink.c<br />
gcc -L/root/c/prelink/lib prelink.c -Wl,-rpath,lib -lpthread -lutil -o bin/prog<br />
<br />
clean:<br />
rm -f lib/libutil.so bin/prog</blockquote><br />
Now, I did a make clean and did a make. Nothing happened. I got the message that "make: Nothing to be done for `all'.". If you notice, in the make file, target all had a dependency on 'bin'. Target 'bin' was dependent on target 'lib'. So, I was expecting that lib will be built first and then bin. But, It did not even try to build bin (I verified this by putting an echo in bin). After a long struggle, I found the reason.<br />
<br />
As you can see, 'bin' and 'lib' were the names of two folders inside the current directory. So, make assumed that targets 'bin' and 'lib' where those folders. As these sub-folders were already present in the current folder, it assumed that there is nothing to be done for target all.<br />
<br />
This is the issue that .PHONY target fixes. It clearly tells make to avoid looking at files and folders for these names. I added the following line to the top of the makefile.<br />
<br />
<blockquote>.PHONY: all bin lib</blockquote>Thats it, I was able to compile the program using my makefile!</div>Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-26420782713956124702011-01-21T14:02:00.000+05:302011-01-21T14:02:46.242+05:30Kernel oops<div dir="ltr" style="text-align: left;" trbidi="on">I had to look into a kernel oops recently. This was produced on a ARM machine. It was relatively easy to understand this message. These messages have become much more simple to analyse these days. I am making this quick post to remember one register: LR<br />
<br />
LR: This register holds the address to which PC will be set to once you hit return. This simply means, this is the caller of the function where the trouble occurred.<br />
<br />
The point where failure happened can be seen by looking at PC. Also, SP points at the current stack location. When I scrolled down, I could see some good back tracing information too.</div>Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-40943921704099147932011-01-13T17:30:00.002+05:302011-01-18T09:10:03.625+05:30plymouthI have been looking for the source of rhgb and I was not able to find this source. Today, I somehow wanted to find this out and spent some time with yum. Eventually I found that this comes with plymouth (for Fedora-12). I am yet to find out how these two are related. I could see this:<br />
<br />
1. There is a /usr/share/plymouth folder<br />
2. The themes are present in this folder<br />
3. There is a default.plymouth file which tells which is the default theme<br />
4. plymouth uses png files to create animation<br />
5. There is a text theme that can be (seems to be) altered easily by changing the ply-text-display.c (Needs to verify this)<br />
<br />
Well, more on this after I play with this a bit more. :)<br />
<br />
Update-1: Plymouth starts from initrd itself. So, modifying the stuff on the root file system will not help much. It has to go to initrd. I was able to change default.plymouth link in initrd and change from charge theme to text theme without much issue.<br />
Update-2: While working with initrd, I found that fedora is now using darcut instead of old initrd. Will write about it later when I get some time to study it.<br />
<br />
Update:<br />
I tried modifying and recompiling the plymouth (version 0.8.0) and tried it on Fedora 12. The file that was modified was <i>ply-text-progress-bar.c</i>. The file can be found in <i>src/libplybootsplash</i> folder inside the plymouth package. I changed two functions <i>get_os_string</i> and <i>ply_text_progress_bar_draw</i>. The first function is very custom made function to read /etc/system-release file and get the OS name and version (Fedora 12). So, though modifying /etc/system-release might work in general, it is simpler to modify the function itself. The second function decides the colors of the progress bar and also the background and foreground color of the OS string. I modified the colors there so that the effect can be seen easily. <br />
<br />
The code was compiled and I found that the o/p is present in <i>src/libplybootsplash/.libs/libplybootsplash.so.2.0.0</i>. This was copied to /usr/lib of initrd and I recreated initrd using this command<br />
<i>find . | cpio -H newc -o > ../ply-test.img</i>. Later I gziped it and moved it to /boot (<i>gzip -9 ply-test.img && mv ply-test.img.gz /boot/ply-test.img</i>). I also modified grub config to create a new entry with this initrd. Once I rebooted, I could see the changes in the plymouth screen.<br />
<br />
I am currently thinking if I should use this or I should use some graphical theme. May be changing a few functions, I can change the logic of drawing this progress bar and draw some other pattern. But, for changing a graphical theme, I may only have to change the images and that might have a better effect too. Anyway, plymouth seems to be in control and I will now move to something else. I want to revisit the qemu as I found that it is taking about 10 times more resources compared to vmware. I will see if using the qemu from android project gives me any advantage or not.Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-10585567111616804932011-01-07T17:32:00.001+05:302011-01-10T11:13:03.158+05:30Compiling qemu on windowsI started doing this today by following <a href="http://lassauge.free.fr/qemu/">this page</a>. However, I was always getting this error that config-all-devices.mak not found. I googled and found some patches. However, something told me that this is not a patch issue. So, I decided to look again and then saw this funny message <b>"-uThe system cannot find the file specified."</b><br />
<br />
This was actually getting caused due to incorrect sort being used. I had the windows programs in my path and a 'which sort' clearly told me what was going wrong.<br />
<blockquote><br />
bash-3.2$ which sort<br />
/c/WINDOWS/system32/sort</blockquote>A change in path declaration fixed this issue<br />
<br />
<span style="font-family: "Courier New"; font-size: 9pt;">PATH=/home/lassauge/MyDocuments/Qemu/libusb-win32-device-bin-0.1.12.2/bin:$PATH CFLAGS="-O4 -march=i686" \</span><br />
<br />
<span style="font-family: "Courier New"; font-size: 9pt;">to</span><br />
<br />
<span style="font-family: "Courier New"; font-size: 9pt;">PATH=../libusb-win32-device-bin-0.1.12.2/bin:/usr/bin:$PATH CFLAGS="-O4 -march=i686" \</span><span style="font-family: "Courier New"; font-size: 9pt;"> </span><br />
<br />
<span style="font-family: "Courier New"; font-size: 9pt;"></span>Anyway, I have not completed the build. Currently I am getting some usb library related errors. Will update this post once I completely compile this.<br />
<br />
Edit:<br />
<br />
Completed this build. Though the above fix removed the error, it did not create the proper config-all-devices.mak. So, I had to manually create this by running the appropriate command<br />
<br />
<b> cat i386-softmmu/config-devices.mak | grep =y | sort -u > config-all-devices.mak</b><br />
<br />
Again, I got the error that isa vga device was not created. So, again, I manually entered the vga-isa.so as a dependency for target "all" in the Makefile.hw.<br />
Also, it did not pickup the usb library include folders correctly. To fix this, I added the following to config-host.mak<br />
<b>CFLAGS=-O2 -g -O4 -march=i686 -I../libusb-win32-device-bin-0.1.12.2/include</b><br />
<br />
Another issue was the fmod libraries needed absolute path. I changed that also in the configure script. However, usb libraries worked fine with relative path from qemu folder. I think, fmod would have got linked from a sub-folder inside qemu where as the usb lib would have got used from the qemu folder itself. Anyway, I am running the qemu compiled my me :)Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-22713449936272845522011-01-06T14:54:00.000+05:302011-01-06T14:54:50.470+05:30CES 2011Smart phones -- read Androids :) --, tablets are ruling CES 2011.<br />
<br />
<a href="http://twitter.com/search?q=%23ces">http://twitter.com/search?q=%23ces</a><br />
<br />
Not that easy to watch it, hundreds of updates are coming per minute.Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-45357872528040974102010-12-18T08:44:00.000+05:302010-12-18T08:44:41.787+05:30fossdotinI was watching #fossdotin till late into the night yesterday. I usually don't like/do social networking much. But, I could not resist this one. The channel showed a mixture of energy, enthusiasm, nostalgia and anguish. Kudos to all those who have made this happen.<br />
<br />
Though I left early yesterday, I don't feel bad about it. There was surely a certain pleasure about being able to create that electrified environment in my mind sitting all alone in my room with my eyes glued to monitor and fossdotin channel on twitter. Such thought streams are usually far from the imperfections of reality and hence stronger and sweeter. <br />
<br />
I saw the picture of team FOSS.IN in one of the tweets. My immediate thought was "most of them are kids". But, what they have achieved is tremendous. Probably the reason why they could achieve all these was that they were "kids" - People with Free and Open minds. Hats off to the this team and their leader who is now really proven to be "Atul". <br />
<br />
I saw a few tweets about rekindling FOSS.IN again next year. I think that should only be done with the full consent of Atul Chitnis. This person has become the hero of the event and hijacking the event from him (for whatever reason it may be) is simply going to be cruel. After all, you can start your own FOSS event. Isn't that what the "Free as in Freedom" signifies?Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-84038789547984301422010-12-17T18:40:00.002+05:302010-12-22T10:16:34.209+05:30QEMU/ARM hands-on (FOSS.IN)<a href="https://github.com/tuxdna/arm-experiments">https://github.com/tuxdna/arm-experiments</a> (<span style="font-size: x-small;"><i>Saleem Ansari</i></span>)<br />
<br />
This was the most interesting and useful session that I had in entire FOSS.IN. Above site will give details. However, I guess, there are some issues with instructions. For example, the kernel link is broken. But, it will work if you remove the .af from the url. Also, the image did not load the rootfs. I tried ext2fs instead of cpio and gzip and that loaded the image. Also, rcS is not present at the site. I wrote that from memory. Again, I seem to have missed something there. It fails with the message that "could not open initial console". I guess /dev/ttyX stuff might be missing. Will try to fix that later and post back here once I do that. Anyway, this was a enlightening talk and it now gives me enough confidence to try my own rootfs on different architecture. Many thanks to the presenter.<br />
<br />
Update:<br />
I fixed this stuff. For those who are interested, I am listing the important changes<br />
0. The correct link for kernel is: http://www.kernel.org/pub/linux/kernel/v2.6/testing/v2.6.24/linux-2.6.24-rc7.tar.gz<br />
0.1 May be this was not needed. But, I did create a symlink from busybox to /init. Also, it only worked when I did a static build of busybox<br />
1. Some device inodes were missing. Created /dev/{null,console,tty,tty0,tty1,tty2,tty3,tty4,tty5}<br />
2. Created /etc/init.d/rcS and made it executable<br />
<blockquote>#!/bin/sh<br />
mount -t proc proc /proc<br />
mount -t sysfs sys /sys<br />
/sbin/mdev -s</blockquote>3. Most important of all, EABI support needs to be turned on in kernel. Else, nothing will work. Turn it on before compiling the kernel <br />
4. The filesystem cannot be cpio. May be it can still work with a kernel config change. However, I tried with ext2fs and it worked perfectly well<br />
4.1 To create a ext2fs,<br />
<blockquote>dd if=/dev/zero of=root.fs bs=1M count=4<br />
(As a side note, if you refer to the commands given in the above link, you will see bs=1. That is very slow)<br />
<br />
mkfs -t ext2 root.fs<br />
(Press 'y' for the question about root.fs not being a real device)<br />
<br />
mkdir rootfs<br />
mount -o loop root.fs rootfs<br />
(Mount your new filesystem somewhere so that you can copy the contents to it)<br />
<br />
cd $ROOTFS_PATH<br />
(go to where your rootfs is)<br />
<br />
tar c * | tar x -C /path/to/rootfs<br />
(copy the contents to new your new filesystem)<br />
<br />
umount /path/to/rootfs<br />
(Now you can start using your root.fs just like rootfs.cpio.gz as described in the link at the top of this post and continue from mkimage part)</blockquote>Thats all! you will have a bootable setup. I am thinking of creating a small script that will automate all these. Will post it here if I ever do that.<br />
Update: I did make a script. Unfortunately, I was in office and our security policy does not allow me to upload that. Its like magic, u run it, have a coffee and when you come back, you will see qemu running your own small Linux image :)Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0tag:blogger.com,1999:blog-4370081771273783792.post-88454322100506441652010-12-17T17:58:00.001+05:302010-12-17T18:03:31.195+05:30mediawiki (FOSS.IN miniconf)Today I attended a miniconf on mediawiki that took place on the sidelines of FOSS.IN. It was a very interesting talk by Erik Moeller. During the talk Erik kept making notes using etherpad (http://eiximenis.wikimedia.org/MediaWikiNotes). I have copied them below. It was really amazing to know about the kind of effort that goes into making these things happen (which sadly the user community, that includes me, takes for granted). It was also nice to know about a bunch of allied technologies and a number of new enhancements that are coming to mediawiki. I was really fascinated by the new enhanced editor and I downloaded and installed the svn trunk when the talk was on to get a feel of the interface. I will be soon upgrading the wiki at office.<br />
<br />
-------------------------------------------------------------------------------<br />
<div class="" id="magicdomid2"><span class="author-g-rceu9k9tamo59z122zd1 b"><b>Mediawiki Workshop</b></span><span class="author-g-ancemev9xoj6n534"> 2010</span><span class="author-g-rceu9k9tamo59z122zd1"> </span><span class="author-g-rceu9k9tamo59z122zd1 i"><i> </i></span></div><div class="" id="magicdomid3"><span class="author-g-rceu9k9tamo59z122zd1 i"><i>Erik Moeller </i></span></div><div class="" id="magicdomid4"><span class="author-g-ancemev9xoj6n534 i"><i>FOSS.IN 2010</i></span><span class="author-g-rceu9k9tamo59z122zd1 i"><i> </i></span></div><div class="" id="magicdomid5"><span class="author-g-rceu9k9tamo59z122zd1 i"><i>[Miniconf]</i></span></div><div class="" id="magicdomid6"><br />
</div><div class="" id="magicdomid7"><span class="author-g-hz122z5f8y5xferynted">Mailing list for developers: </span><span class="author-g-hz122z5f8y5xferynted url"><a href="http://lists.wikimedia.org/mailman/listinfo/wikitech-l">http://lists.wikimedia.org/mailman/listinfo/wikitech-l</a></span></div><div class="" id="magicdomid8"><span class="author-g-hz122z5f8y5xferynted">Manual about how to write a MediaWiki extension: </span><span class="author-g-hz122z5f8y5xferynted url"><a href="http://www.mediawiki.org/wiki/Manual:Extensions">http://www.mediawiki.org/wiki/Manual:Extensions</a></span></div><div class="" id="magicdomid9"><span class="author-g-hz122z5f8y5xferynted">Subversion check-out instructions: </span><span class=" url"><a href="http://www.mediawiki.org/wiki/Subversion">http://www.mediawiki.org/wiki/Subversion</a></span></div><div class="" id="magicdomid10"><span class="author-g-hz122z5f8y5xferynted">Get commit access: </span><span class="author-g-hz122z5f8y5xferynted url"><a href="http://www.mediawiki.org/wiki/Commit_accesss">http://www.mediawiki.org/wiki/Commit_accesss</a></span></div><div class="" id="magicdomid11"><span class="author-g-hz122z5f8y5xferynted">Wikimedia configuration files for MediaWiki:</span><span class="author-g-6f87lii1jutbqjde"> </span><span class=" url"><a href="http://noc.wikimedia.org/conf/">http://noc.wikimedia.org/conf/</a></span><span class=""> </span></div><div class="" id="magicdomid12"><span class="author-g-hz122z5f8y5xferynted">Wikipedia's configurations: </span><span class=" url"><a href="http://en.wikipedia.org/wiki/Special:Version">http://en.wikipedia.org/wiki/Special:Version</a></span><span class=""> </span></div><div class="" id="magicdomid13"><span class="author-g-hz122z5f8y5xferynted">IRC: irc.freenode.net #mediawiki #wikimedia-tech</span></div><div class="" id="magicdomid14"><br />
</div><div class="" id="magicdomid15"><span class=" url"><a href="http://dbpedia.org/">http://dbpedia.org</a></span><span class=""> DBPedia - extract info from Wikipedia</span></div><div class="" id="magicdomid16"><br />
</div><div class="" id="magicdomid17"><span class="">SPARQL - RDF extraction for DBPedia</span></div><div class="" id="magicdomid18"><br />
</div><div class="" id="magicdomid19"><span class=" url"><a href="http://semantic-mediawiki.org/">http://semantic-mediawiki.org</a></span><span class=""> Semantic Media Wiki - semantic storage for MediaWiki</span></div><div class="" id="magicdomid20"><span class="">example:bases wiki </span><span class=" url"><a href="http://baseswiki.org/">http://baseswiki.org</a></span></div><div class="" id="magicdomid21"><br />
</div><div class="" id="magicdomid22"><span class=" url"><a href="http://baseswiki.org/">http://baseswiki.org</a></span><span class=""> Info about non-judicial grievance mechanisms</span></div><div class="" id="magicdomid23"><br />
</div><div class="" id="magicdomid24"><span class=" url"><a href="http://svn.wikimedia.org/">http://svn.wikimedia.org/</a></span><span class=""> Wikimedia Subversion Repository</span></div><div class="" id="magicdomid25"><br />
</div><div class="" id="magicdomid26"><br />
</div><div class="" id="magicdomid27"><span class="">how to enable the new toolbar of wikipedia in my mediawiki? </span><span class="author-g-aviklgv7q6b7ou8l">WikiEditor extension is the answer and it works if we change the user preference.</span></div><div class="" id="magicdomid28"><br />
</div><div class="" id="magicdomid29"><span class="">browser toolbar: Go to </span><span class=" url"><a href="https://addons.mozilla.org/firefox/addon/6401">https://addons.mozilla.org/firefox/addon/6401</a></span><span class=""> click add to Firefox and then after 5 secs.addon is installed.</span></div><div class="" id="magicdomid30"><br />
</div><div class="" id="magicdomid31"><span class=" url"><a href="http://en.wikipedia.org/wiki/Main_Page/?useskin=monobook">http://en.wikipedia.org/wiki/Main_Page/?useskin=monobook</a></span><span class=""> : old theme of wikipedia (new version: Vector)</span></div><div class="" id="magicdomid32"><br />
</div><div class="" id="magicdomid33"><span class=" url"><a href="http://www.wikia.com/">http://www.wikia.com</a></span><span class=""> -wysiwyg ediing </span></div><div class="" id="magicdomid34"><br />
</div><div class="" id="magicdomid35"><span class=" url"><a href="http://www.wikia.com/Special:LandingPage?uselang=">http://www.wikia.com/Special:LandingPage?uselang=</a></span></div><div class="" id="magicdomid36"><br />
</div><div class="" id="magicdomid37"><span class=" url"><a href="http://harrypotter.wikia.com/wiki/Main_Page">http://harrypotter.wikia.com/wiki/Main_Page</a></span></div><div class="" id="magicdomid38"><br />
</div><div class="" id="magicdomid39"><span class=" url"><a href="http://uncyclopedia.wikia.org/">http://uncyclopedia.wikia.org</a></span><span class=""> : the sarcastic wikipedia</span></div><div class="" id="magicdomid40"><br />
</div><div class="" id="magicdomid41"><span class=" url"><a href="http://svn.wikia-code.com/">http://svn.wikia-code.com/</a></span></div><div class="" id="magicdomid42"><br />
</div><div class="" id="magicdomid43"><span class=" url"><a href="http://www.dbpedia.org/UseCases">http://www.dbpedia.org/UseCases</a></span></div><div class="" id="magicdomid44"><br />
</div><div class="" id="magicdomid45"><span class=" url"><a href="http://atlas.gnowledge.org/">http://atlas.gnowledge.org</a></span></div><div class="" id="magicdomid46"><br />
</div><div class="" id="magicdomid47"><span class="">View Your Mind - a better alternative for mind mapping than freemind perhaps</span></div><div class="" id="magicdomid48"><br />
</div><div class="" id="magicdomid49"><span class=" url"><a href="http://en.wikipedia.org/wiki/Wikipedia:Community_Portal/Opentask">http://en.wikipedia.org/wiki/Wikipedia:Community_Portal/Opentask</a></span><span class=""> </span></div><div class="" id="magicdomid50"><br />
</div><div class="" id="magicdomid51"><span class=" url"><a href="http://en.wikipedia.org/wiki/Wikipedia:WikiProject">http://en.wikipedia.org/wiki/Wikipedia:WikiProject</a></span></div><div class="" id="magicdomid52"><br />
</div><div class="" id="magicdomid53"><span class=" url"><a href="http://outreach.wikimedia.org/wiki/Bookshelf/">http://outreach.wikimedia.org/wiki/Bookshelf/</a></span></div><div class="" id="magicdomid54"><br />
</div><div class="" id="magicdomid55"><span class=" url"><a href="http://en.wikipedia.org/wiki/Wikipedia:WikiProject_Screencast">http://en.wikipedia.org/wiki/Wikipedia:WikiProject_Screencast</a></span></div><div class="" id="magicdomid56"><br />
</div><div class="" id="magicdomid57"><span class=" url"><a href="http://en.wikipedia.org/wiki/Wikipedia:Notability">http://en.wikipedia.org/wiki/Wikipedia:Notability</a></span></div><div class="" id="magicdomid58"><br />
</div><div class="" id="magicdomid59"><span class=" url"><a href="http://en.wikipedia.org/wiki/Wikipedia:BLP">http://en.wikipedia.org/wiki/Wikipedia:BLP</a></span><span class=""> -- Biographies Guidelines</span></div><div class="" id="magicdomid60"><br />
</div><div class="" id="magicdomid61"><span class=" url"><a href="http://en.wikipedia.org/wiki/Wikipedia:Tools">http://en.wikipedia.org/wiki/Wikipedia:Tools</a></span></div><div class="" id="magicdomid62"><br />
</div><div class="" id="magicdomid63"><span class="author-g-ydlqufnporurbbli url"><a href="http://en.wikipedia.org/wiki/Wikipedia:Twinkle">http://en.wikipedia.org/wiki/Wikipedia:Twinkle</a></span><span class="author-g-ydlqufnporurbbli"> - tool for friendly reverts</span></div><div class="" id="magicdomid64"><br />
</div><div class="" id="magicdomid65"><span class="author-g-hz122z5f8y5xferynted url"><a href="http://grouplens.org/">http://grouplens.org/</a></span><span class="author-g-rceu9k9tamo59z122zd1"> conducts research on user interaction </span></div><div class="" id="magicdomid66"><br />
</div><div class="" id="magicdomid67"><span class="author-g-epct33oz122z7kwq5cyg url"><a href="http://en.m.wikipedia.org/">http://en.</a></span><span class="author-g-aviklgv7q6b7ou8l url"><a href="http://en.m.wikipedia.org/">m.wikipedia.org</a></span><span class="author-g-aviklgv7q6b7ou8l"> </span><span class="author-g-s8vhth958rejr110"> -</span><span class="author-g-aviklgv7q6b7ou8l"> Mobile version</span></div><div class="" id="magicdomid68"><br />
</div><div class="" id="magicdomid69"><span class="author-g-hz122z5f8y5xferynted url"><a href="http://commons.wikimedia.org/wiki/Special:UploadWizard">http://commons.wikimedia.org/wiki/Special:UploadWizard</a></span><span class="author-g-aviklgv7q6b7ou8l"> - do login first!</span></div><div class="" id="magicdomid70"><br />
</div><div class="" id="magicdomid71"><span class="author-g-hz122z5f8y5xferynted url"><a href="http://strategy.wikimedia.org/wiki/Proposal:Media_review">http://strategy.wikimedia.org/wiki/Proposal:Media_review</a></span></div><div class="" id="magicdomid72"><br />
</div><div class="" id="magicdomid73"><span class="author-g-hz122z5f8y5xferynted url"><a href="http://wikibhasha.com/">http://wikibhasha.</a></span><span class="author-g-aviklgv7q6b7ou8l url"><a href="http://wikibhasha.com/">com/</a></span><span class="author-g-rceu9k9tamo59z122zd1"> a conversion utility where articles may be easily converted into indic languages</span></div><div class="" id="magicdomid74"><br />
</div><div class="" id="magicdomid75"><span class="author-g-ancemev9xoj6n534 url"><a href="http://www.openstreetmap.org/">http://www.openstreetmap.org/</a></span><span class="author-g-rceu9k9tamo59z122zd1"> an open source map( edit and contribute :) )</span></div><div class="" id="magicdomid76"><br />
</div><div class="" id="magicdomid77"><span class="author-g-vsrvcikm5935wz122z3v url"><a href="http://liquidthreads.labs.wikimedia.org/wiki/Talk:LiquidThreads_testing">http://liquidthreads.labs.wikimedia.org/wiki/Talk:LiquidThreads_testing</a></span></div><div class="" id="magicdomid78"><br />
</div><div class="" id="magicdomid79"><span class="author-g-hz122z5f8y5xferynted url"><a href="http://en.wikipedia.org/wiki/Wikipedia:Pending_changes">http://en.wikipedia.org/wiki/Wikipedia:Pending_changes</a></span></div><div class="" id="magicdomid80"><br />
</div><div class="" id="magicdomid81"><span class="author-g-aviklgv7q6b7ou8l url"><a href="http://translatewiki.net/">http://translatewiki.net</a></span><span class="author-g-aviklgv7q6b7ou8l"> - localizatio</span><span class="author-g-k8qn7wg89o275kad">i</span><span class="author-g-aviklgv7q6b7ou8l">n</span><span class="author-g-s8vhth958rejr110"> </span><span class="author-g-s8vhth958rejr110 i"><i>translation communities, language communities, and free and open source projects.</i></span></div><div class="" id="magicdomid82"><br />
</div><div class="" id="magicdomid83"><span class="author-g-aviklgv7q6b7ou8l url"><a href="http://stats.wikimedia.org/">http://stats.wikimedia.org</a></span><span class="author-g-s8vhth958rejr110"> --</span></div><div class="" id="magicdomid84"><br />
</div><div class="" id="magicdomid85"><span class="author-g-aviklgv7q6b7ou8l url"><a href="http://download.wikipedia.org/">http://download.wikipedia.org</a></span></div><div class="" id="magicdomid86"><br />
</div><div class="" id="magicdomid87"><span class="author-g-p0qmuuu2v0k24874 url"><a href="http://www.openwebanalytics.com/">http://www.openwebanalytics.com/</a></span><span class="author-g-p0qmuuu2v0k24874"> alternate to google analytics</span></div><div class="" id="magicdomid88"><br />
</div>Sarinhttp://www.blogger.com/profile/17369660249919680383noreply@blogger.com0