Tuesday, July 3, 2018

Highlight Embedded Code on your html page

Copy following in the head section

1234<link rel="stylesheet"
      href="http://cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.12.0/build/styles/default.min.css">
<script src="http://cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.12.0/build/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>

The code that needs highlighting should be in the following form,

12345<pre class="language"><code>
...
code
...
</code></pre>

Thursday, June 28, 2018

OpenCV V4l2 using Gstreamer

OpenCV V4l2 using Gstreamer

resize window

12cv2.namedWindow("visiondemo",cv2.WINDOW_FULLSCREEN)
cv2.resizeWindow('visiondemo', 1920,1080)

set fps

123cap.set(cv2.CAP_PROP_FRAME_WIDTH,1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,1080)
cap.set(cv2.CAP_PROP_FPS,30)

Setup Video

Normal Setup

1cap = cv2.VideoCapture("v4l2src device=/dev/video0 ! appsink")

JPEG Setup

1cap = cv2.VideoCapture("v4l2src device=/dev/video0 do-timestamp=true ! image/jpeg, width=1920, height=1080, framerate=30/1 ! jpegdec ! videoconvert ! appsink")

TEE Setup

1cap = cv2.VideoCapture("v4l2src device=/dev/video0 do-timestamp=true ! image/jpeg, width=1920, height=1080, framerate=30/1 ! jpegdec ! tee name=t ! queue ! videoconvert ! appsink t. ! queue ! videoconvert ! videoscale ! videorate ! video/x-raw,width=640,height=480,framerate=15/1 ! v4l2sink device=/dev/video2")

Play Video

123456789101112cap = cv2.VideoCapture("v4l2src device=/dev/video0 ! appsink")

while True:
  ret, image = cap.read()
  if ret == True:
    print("capture not working")
    break
    
  key = cv2.waitKey(1)
  if (key & 0xFF) == ord('q'):
    break
    

Friday, June 22, 2018

How to add get keys for ubuntu repo in another distribution

add

deb [trusted=yes] http://archive.ubuntu.com/ubuntu trusty universe

to /etc/apt/sources.list

do apt-get update

It will complain about non existing public key. Take not of the PUB_KEY and now execute following,


apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <PUB_KEY>

This should add the key for the said repository.

Now you can execute following at it should work without any errors.

sudo apt-get update

Saturday, December 19, 2015

Use your DSLR Camera as a Webcam on Ubuntu

It is not uncommon that you have a DSLR and you wonder that it would be awesome if you can use it as a webcam. Have video calls with your family and friends using your high definition DSLR camera. Recording videos directly from your DSLR camera into your computer or us it for live view.

I was trying to do the same thing and searched over the internet, found some software that can do that but are not free and/or won't work on my Linux machine.

But recently found another way of achieving it. Basically making my DSLR work as a capture device, that is /dev/video*.

To do that you need a utility named gphoto2. First you have to check whether your camera is in the supported list of cameras, For that go through the list of supported cameras here.

I have a Canon EOS 100D, which is in the list, so it works for me.

Now attach your camera with your machine using the USB cable, and execute the following command in the terminal (linux shell).

gphoto2 --abilities

This should show you the camera name and abilities and other information, this shows that your camera is detected.

Now to the next step,

You need "v4l2loopback kernel module" to make a virtual device in /dev/video* for your camera. This can be installed by executing the following command,

sudo apt-get install v4l2loopback-utils

If all goes without any error, you can execute the following command to make a virtual camera device for your DSLR connect to the machine.

modprobe v4l2loopback

gphoto2 --capture-movie --stdout | gst-launch-0.10 videotestsrc ! v4l2sink device=/dev/video1

Now you can use this new device /dev/video1 as your webcam.

For Example you can configure Skype to use this as a Video device for video calls.

Monday, November 30, 2015

Fix Urdu font rendering in Chrome in ubuntu 14.04

You might have faced a problem in Ubuntu using chrome when you visit a website that has text in Urdu and it doesn't render properly. Mostly the letter "Ří" is not rendered and connected correctly with other letters.

Now font rendering is a very complex process which involves (but not limited to) positioning (pen algorithm), layout and Bidirectional text processing. The problem mentioned above is related to layout and seems like some layout information in the font being used is wrong or missing.

Now this is very annoying and becomes very difficult, and sometimes you even feel like that you are deciphering an encoded text by analysing the broken Urdu text.

This can be easily fixed by first installing a proper Urdu font by executing the following command,

sudo apt-get install fonts-nafees

After installing this you have to change the standard font in your browser. Ubuntu by default uses the font "Abyssinica SIL".

To change the font go to Chrome settings, in settings search field search for "Web Content" and client on "Customize Fonts".

Now change the Standard font to "Nafees". This  should correct the rendering of Urdu text in chrome.

This problem only occurs in the websites which do not explicitly specify the font that they want to use.

Sunday, July 5, 2009

Crash Log Symbols

A few days ago my application got rejected from AppStore :(

What they sent me was a crash log. It had a bad access exception and stack traces of a couple of threads. But the poor thing about all this was that there were no symbols in the stack traces. There were only addresses of the methods :S


I google'd this problem alot and found that there is a script named symbolicatecrash at this path:

/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneRemoteDevice.xcodeplugin/Contents/Resources/

If you have the .dSYM and .app file of the build you sent to Apple, you can use these two files two generate the symbols in the crashlogs.

Fortunately I had those files and I used that script but the result was that only iPhone classes were symbolicated.

I google'd the problem again and found that there is something wrong with the script. By some searching on the internet i was able to find the correct script. Its in perl language.

using that script i was successfully able to generate symbols of the crash logs.

You can do it like this (Assume your application name is pingpong):

1. Copy the .dSYM , .app , the perl script in any folder.
2. open terminal and go to that folder.
3. Execute command:

perl symbolicatecrash.pl pingpong.crash pingpong.dSYM pingpong.app > sym_pingpong.crash


After the successful execution of this command your symbolicated crash log will be sym_pingpong.crash


You can get the script from this link:

http://gist.github.com/131425


Sami

Sunday, June 14, 2009

How to write your Operating System

Hi,

I was just thinking of sharing my experience of Operating System implementation. So here it is. here i will tell you the steps to implement your Operating System from scratch.

It will be a small kernel implementation. It will boot and you can run small programs on it. This kernel will run on intel x86 machine.

Tools:

. DJGPP compiler.
. Virtual machine, I will use Bochs.


MainProgram:

we will start from a main function. This function will be called when our operating system starts.
In this function you will disable interrupts.
In this function you will initialize the PIC to make first IRQ aligned with int 30 so that it does not mix up with int 1,2 and onwards.

now you are setup. you can check and execute any helloworld programs here.

you are ready to move to the next steps.

Memory Initialization:

When you boot using the grub loader you will be given the start and end address of your kernel.
Now here you have to implement the memory management. first you have to mark all the memory frames as not used. you will use 1 bit per each frame. Allocate byte array equal to:

size = memory /(4096*8)

where 4096 is page size.

This is your frame state array. initialize it with 0 which means all your memory is free. Now mark the frames that fall in your kernel start and end address equal to one to keep record that these frames are already used.


to be continued..