Showing posts with label to. Show all posts
Showing posts with label to. Show all posts

Saturday, 29 July 2017

Creating libraries and linking to libraries in Vala

Creating libraries and linking to libraries in Vala


This is an example of how to create a library in vala, and how to access it using several different methods. This example includes:
  1. A shared library written in vala, including
    • shared object (.so), and how to install it
    • headers (.h), and
    • bindings (.vapi)
  2. A command-line tool that uses the library by direct-linking
  3. A dbus server that uses the library by direct linking
    • makes the library available to other dbus-aware applications
    • self-terminating process after use (not a daemon)
  4. A command-line tool that uses the library via dbus and the dbus-server.

The first half of the example is based on the official vala tutorial library example,
I have added dbus connectivity and a bit more explanation that I found helpful.





1) Create an empty directory. These steps create a lot of files!

 $ mkdir test_library
$ cd test_library



2) Create the library. Save this file as libtest.vala:

// BEGIN
public class MyLib : Object {

public string hello() {
return "Hello World from MyLib";
}

public int sum(int x, int y) {
return x + y;
}
}
// END



3) Create the .c, .h (C header), and .vapi (vala binding) files:
 -C --ccode Output C code instead of compiled
-H --header=file Output C header file
--library=name Assign name to library
--vapi Assign name to vapi file
-b --basedir=dir Use dir as the base source dir (For me, this is unnecessary)

$ valac -C -H libtest.h --library libtest libtest.vala --basedir ./



4) Compile the library using:

 -shared Create a .so shared object
-fPIC Position Independent Code (PIC) suitable for use in a shared library
$(pkg-config --cflags gobject-2.0)
Output: -I/usr/include/glib-2.0
-I/usr/lib/i386-linux-gnu/glib-2.0/include
-o filename Output filename

$ gcc -shared -fPIC -o libtest.so $(pkg-config --cflags --libs gobject-2.0) libtest.c



5) Create the command-line application that uses the library by linking.
   Save this file as hello.vala:

// BEGIN
void main() {
var test = new MyLib();

// MyLib hello()
stdout.printf("%s ", test.hello());

// MyLib sum()
int x = 4, y = 5;
stdout.printf("The sum of %d and %d is %d ", x, y, test.sum(x, y));
}
// END




6) Compile the command-line application.
Using vala, there need to be TWO links:
  • The vala link to a .vapi file (in this example, test.vapi)
  • The gcc link to a C library (in this example, -X -ltest to add libtest.so)

 - The vala link to a .vapi file (in this example, test.vapi)
- The gcc link to a C library (in this example, -X -ltest to add libtest.so)

-X --Xcc=-I. Pass the -I. (include current directory) to gcc.
GCC will look for shared libraries in the current directory first
-X --Xcc=-L. Pass the -L. (add current directory to search path) to gcc.
-X --Xcc=-ltest Link library "libtest" which we just created in the current directory.

If we had the libtest.so in the local directory, we could use:

$ valac -X -I. -X -L. -X -ltest -o hello hello.vala libtest.vapi



7) Test the command-line application that uses the library:
The library is in the local directory (uninstalled):

 $ LD_LIBRARY_PATH=$PWD ./hello
Hello World from MyLib
The sum of 4 and 5 is 9



8) We cannot easily use the local library for dbus.
So install the library to the expected location.
Copy the library to /usr/lib using:

 $ sudo cp libtest.so /usr/lib/



9) Test the (installed) command-line application:

 $ ./hello
Hello World from MyLib
The sum of 4 and 5 is 9



10) Create the dbus server that uses the library.
A server listens for requests from other applications. This server acts as a gateway: It translates other application requests for library methods into a library call, and then sends the response back across dbus to the original requestor.

Save this file as dbus_server.vala:

// BEGIN
// Source: https://live.gnome.org/Vala/DBusServerSample#Server

[DBus (name = "org.example.Demo")] // dbus interface name
public class DemoServer : Object {

/* Functions that access the library on the Demo interface
* Note the LACK of in the return strings.
* Vala automatically mangles my_function_name into the
* standard Dbus camelcase MyFunctionName
* So a function is "hello()" here, but "Hello" on Dbus
*/
public string sum () {
var test = new MyLib();
int x = 4, y = 5;
return "The sum of %d and %d is %d".printf( x, y, test.sum(x, y));
// Note the LACK of in the return strings
}

public string hello () {
var test = new MyLib();
return "%s".printf( test.hello());
}

}

[DBus (name = "org.example.DemoError")]
public errordomain DemoError { SOME_ERROR }

/* Dbus functions */
void on_bus_aquired (DBusConnection conn) {
try {
string path = "/org/example/demo";
conn.register_object (path, new DemoServer ());
} catch (IOError e) {
stderr.printf ("Could not register service "); }
}

void main () {
GLib.MainLoop loop = new GLib.MainLoop ();
GLib.TimeoutSource time = new TimeoutSource(3000); // 3 sec
GLib.BusType bus = BusType.SESSION;
string destination = "org.example.demo";
GLib.BusNameOwnerFlags flags = BusNameOwnerFlags.NONE;

Bus.own_name ( bus, destination, flags,
on_bus_aquired,
() => {},
() => stderr.printf ("Could not aquire name "));

// Use timeout to quit the loop and exit the program
time.set_callback( () => { loop.quit(); return false; });
time.attach( loop.get_context() ); // Attach timeout to loop

loop.run (); // Listen for dbus connections

}
// END



11) Compile the dbus server:
 Dbus requires the gio package (--pkg gio-2.0)
-X --Xcc=-I. Pass the -I. (include current directory) to gcc.
GCC will look for shared libraries in the current directory first
-X --Xcc=-L. Pass the -L. (add current directory to search path) to gcc.
-X --Xcc=-ltest Link library "libtest" which we just created in the current directory.

Since the library is installed, we can ignore those local directory flags:

$ valac --pkg gio-2.0 -X -ltest dbus_server.vala libtest.vapi



12) Create a dbus .service file, so dbus knows how to find our new dbus_server.
Save this file as dbus.service. Your third line will vary - use the real path:

// BEGIN

[D-BUS Service]

Name=org.example.demo

Exec=/home/me/vala/library/dbus_server

// END



13) Install the dbus service file:

 $ sudo cp dbus.service /usr/share/dbus-1/services/org.example.demo.service



14) Test the dbus server using an existing command-line application, dbus-send.
This is a command-line application using the library via dbus, using dbus_server for its intended purpose as a gatetay.

The sender is different each time because dbus-send creates a new process and connection each time it is used.
The destination is different because the server terminates after 3 seconds.

 $ dbus-send --session --type=method_call --print-reply 
--dest="org.example.demo" /org/example/demo org.example.Demo.Hello
method return sender=:1.3173 -> dest=:1.3172 reply_serial=2
string "Hello World from MyLib"

$ dbus-send --session --type=method_call --print-reply
--dest="org.example.demo" /org/example/demo org.example.Demo.Sum
method return sender=:1.3175 -> dest=:1.3174 reply_serial=2
string "The sum of 4 and 5 is 9"


15) Clean up:
Remove the dbus service file:
Remove the test library from /usr/lib

 $ sudo rm /usr/share/dbus-1/services/org.example.demo.service
$ sudo rm /usr/lib/libtest.so
{ Read More }


Tuesday, 25 July 2017

Converting mp4 to mp3 in Ubuntu

Converting mp4 to mp3 in Ubuntu



Converting mp4 files to mp3 can easily be done via the terminal. First install ffmpeg and the necessary codecs by typing:

sudo apt-get install libav-sudo apt-get install ffmpeg libavcodec-extra-52
sudo apt-get update
sudo apt-get install ffmpeg libavcodec-extra-53
Than you can convert your file via:
ffmpeg -v 5 -y -i inputfile.mp4 -acodec libmp3lame -ac 2 -ab 192k outputfile.mp3

For example go to the video folder and convert your file like this:
cd Videos
ffmpeg -v 5 -y -i writelikethewind.mp4 -acodec libmp3lame -ac 2 -ab 192k writelikethewind.mp3

This should look something like this:

Note that I use ls to get a listing of alle the files in the current directory.

Also read my article on converting between different video format.
{ Read More }


Convert odd CDimages to ISO

Convert odd CDimages to ISO


If you want to burn CD images to CD usually you use the ISO format.
However, there are other formats containing raw date of an CD image.
These formats are NRG, IMG, CUE/BIN and MDF.

to convert these images to ISo you need to install software thats found in the universe and multiverse repository. These software programs are command line programms. If youre not comfortable with it, its not for you.

To enable this repository navigate to [System] > [Administration] > [Software Sources] on the applications menu.

Enter your superuser password.

The software sources window should appear. Enable the "Community maintained open source software (universe)" and "Software restricted by copyright or legal issues (multiverse)" option.

Now you have the universe/multiverse repositories enabled!


to install the software needed for the conversion install these packages:
bchunk (CUE/BIN to ISO),
ccd2iso (IMG to ISO),
mdf2iso (MDF to ISO),
nrg2iso (NRG to ISO),

so open a terminal and type:
sudo apt-get install bchunk ccd2iso mdf2iso nrg2iso

enter your password and there you go.

Heres what to do to convert from...
open a terminal, go to the folder where the file is located (using the cd command) and type one of the following commands:

IMG to ISO: ccd2iso filename.img filename.iso
MDF to ISO: mdf2iso filename.mdf filename.iso
NRG to ISO: nrg2iso filename.nrg filename.iso
CUE/BIN to ISO: bchunk filename.bin filename.cue filename.iso
{ Read More }


Thursday, 20 July 2017

Converting a space delimited file to tab delimited

Converting a space delimited file to tab delimited


try this one liner
       cat file | tr
 
{ Read More }


Converting Ekam to C 0x

Converting Ekam to C 0x


I converted Ekam to C++0x. As always, all code is at:

http://code.google.com/p/ekam/

Note that Ekam now requires a C++0x compiler. Namely, it needs GCC 4.6, which is not officially released yet. I didnt have much trouble compiling and using the latest snapshot, but I realize that it is probably more work than most people want to do. Hopefully 4.6 will be officially released soon.

Introduction

When writing Ekam, with no company style guide to stop me, I have found myself developing a very specific and unique style of C++ programming with a heavy reliance on RAII. Some features of this style:

  • I never use operator new directly (much less malloc()), but instead use a wrapper which initializes an OwnedPtr. This class is like scoped_ptr in that it wraps a pointer and automatically deletes it when the OwnedPtr is destroyed. However, unlike scope_ptr, there is no way to release a pointer from an OwnedPtr except by transferring it to another OwnedPtr. Thus, the only way that an object pointed to by an OwnedPtr could ever be leaked (i.e. become unreachable without being reclaimed) is if you constructed an OwnedPtr cycle. This is actually quite hard to do by accident -- much harder than creating a cycle of regular pointers.
  • Ekam is heavily event-driven. Any function call which starts an asynchronous operation returns an OwnedPtr<AsyncOperation>. Deleting this object cancels the operation.
  • All OS handles (e.g. file descriptors) are wrapped in objects that automatically close them.

These features turn out to work extremely well together.

A common problem in multi-tasking C++ code (whether based on threads or events) is that cancellation is very difficult. Typically, an asynchronous operation calls some callback at some future time, and the caller is expected to ensure that the callbacks context is still valid at the time that it is called. If youre lucky, the operation can be canceled by calling some separate cancel() function. However, its often the case that this function simply causes the callback to complete sooner, because its considered too easy to leak memory if an expected callback is never called. So, you still have to wait for the callback.

So what happens if you really just want to kill off an entire large, complex chunk of your program all at once? It turns out this is something I need to do in Ekam. If a build action is in progress and one of its inputs changes, the action should be immediately halted. But actions can involve arbitrary code that can get fairly complex. What can Ekam do about it?

Well, with the style Ive been using, cancellation is actually quite easy. Because all allocated objects must be anchored to another object via an OwnedPtr, if you delete a high-level object, you can be pretty sure that all the objects underneath will be cleanly deleted. And because asychronous operations are themselves represented using objects, and deleting those objects cancel the corresponding operations, its nearly impossible to accidentally leave an operation running after its context has been deleted.

Problem: OwnedPtr transferral

So what does this have to do with C++0x? Well, there are some parts of my style that turn out to be a bit awkward.

Transferring an OwnedPtr to another OwnedPtr looked like this:

 OwnedPtr<MyObject> ptr1, ptr2; //... ptr1.adopt(&ptr2); 

Looks fine, but this means that the way to pass ownership into a function call is by passing a pointer to an OwnedPtr, getting a little weird:

 void Foo::takeOwnership(OwnedPtr<Bar>* barToAdopt) { this->bar.adopt(barToAdopt); } ... Foo foo; OwnedPtr<Bar> bar; ... foo.takeOwnership(&bar); 

Returning an OwnedPtr is even more awkward:

 void Foo::releaseOwnership(OwnedPtr<Bar>* output) { output->adopt(&this->bar); } ... OwnedPtr<Bar> bar; foo.releaseOwnership(&bar); bar->doSomething(); 

Furthermore, the way to allocate an owned object was through a method of OwnedPtr itself, which was kind of weird to call:

 OwnedPtr<Bar> bar; bar.allocate(constructorParam1, constructorParam2); foo.takeOwnership(&bar); 

This turned out to be particularly ugly when allocating a subclass:

 OwnedPtr<BarSub> barSub; barSub.allocate(constructorParam1, constructorParam2); OwnedPtr<Bar> bar; bar.adopt(&barSub); foo.takeOwnership(&bar); 

So I made a shortcut for that:

 OwnedPtr<Bar> bar; bar.allocateSubclass<BarSub>( constructorParam1, constructorParam2); foo.takeOwnership(&bar); 

Still, dealing with OwnedPtrs remained difficult. They just didnt flow right with the rest of the language.

Rvalue references

This is all solved by C++0xs new "rvalue references" feature. When a function takes an "rvalue reference" as a parameter, it only accepts references to values which are safe to clobber, either because the value is an unnamed temporary (which will be destroyed immediately when the function returns) or because the caller has explicitly indicated that its OK to clobber the value.

Most of the literature on rvalue references talks about how they can be used to avoid unnecessary copies and to implement "perfect forwarding". These are nice, but what I really want is to implement a type that can only be moved, not copied. OwnedPtrs explicitly prohibit copying, since this would lead to double-deletion. However, moving an OwnedPtr is perfectly safe. By implementing move semantics using rvalue references, I was able to make it possible to pass OwnedPtrs around using natural syntax, without any risk of unexpected ownership stealing (as with the old auto_ptr).

Now the code samples look like this:

 // Transferring ownership. OwnedPtr<MyObject> ptr1, ptr2; ... ptr1 = ptr2.release(); // Passing ownership to a method. void Foo::takeOwnership(OwnedPtr<Bar> bar) { this->bar = bar.release(); } ... Foo foo; OwnedPtr<Bar> bar; ... foo.takeOwnership(bar.release()); // Returning ownership from a method. OwnedPtr<Bar> Foo::releaseOwnership() { return this->bar.release(); } ... OwnedPtr<Bar> bar = foo.releaseOwnership(); bar->doSomething(); // Allocating an object. OwnedPtr<Bar> bar = newOwned<Bar>( constructorParam1, constructorParam2); // Allocating a subclass. OwnedPtr<Bar> bar = newOwned<BarSub>( constructorParam1, constructorParam2); 

So much nicer! Notice that the release() method is always used in contexts where ownership is being transfered away from a named OwnedPtr. This makes it very clear what is going on and avoids accidents. Notice also that release() is NOT needed if the OwnedPtr is an unnamed temporary, which allows complex expressions to be written relatively naturally.

Problem: Callbacks

While working better than typical callback-based systems, my style for asynchronous operations in Ekam was still fundamentally based on callbacks. This typically involved a lot of boilerplate. For example, here is some code to implement an asynchronous read, based on the EventManager interface which provides asynchronous notification of readability:

 class ReadCallback { public: virtual ~ReadCallback(); virtual void done(size_t actual); virtual void error(int number); }; OwnedPtr<AsyncOperation> readAsync( EventManager* eventManager, int fd, void* buffer, size_t size, ReadCallback* callback) { class ReadOperation: public EventManager::IoCallback, public AsyncOperation { public: ReadOperation(int fd, void* buffer, size_t size, ReadCallback* callback) : fd(fd), buffer(buffer), size(size), callback(callback) {} ~ReadOperation() {} OwnedPtr<AsyncOperation> inner; // implements IoCallback virtual void ready() { ssize_t n = read(fd, buffer, size); if (n < 0) { callback->error(errno); } else { callback->done(n); } } private: int fd; void* buffer; size_t size; ReadCallback* callback; } OwnedPtr<ReadOperation> result = newOwned<ReadOperation>( fd, buffer, size, callback); result.inner = eventManager->onReadable(fd, result.get()); return result.release(); } 

Thats a lot of code to do something pretty trivial. Additionally, the fact that callbacks transfer control from lower-level objects to higher-level ones causes some problems:

  • Exceptions cant be used, because they would propagate in the wrong direction.
  • When the callback returns, the calling object may have been destroyed. Detecting this situation is hard, and delaying destruction if needed is harder. Most callback callers are lucky enough not to have anything else to do after the call, but this isnt always the case.

C++0x introduces lambdas. Using them, I implemented E-style promises. Heres what the new code looks like:

 Promise<size_t> readAsync( EventManager* eventManager, int fd, void* buffer, size_t size) { return eventManager->when(eventManager->onReadable(fd))( [=](Void) -> size_t { ssize_t n = read(fd, buffer, size); if (n < 0) { throw OsError("read", errno); } else { return n; } }); } 

Isnt that pretty? It does all the same things as the previous code sample, but with so much less code. Heres another example which calls the above:

 Promise<size_t> readPromise = readAsync( eventManager, fd, buffer, size); Promise<void> pendingOp = eventManager->when(readPromise)( [=](size_t actual) { // Copy to stdout. write(STDOUT_FILENO, buffer, actual); }, [](MaybeException error) { try { // Force exception to be rethrown. error.get(); } catch (const OsError& e) { fprintf(stderr, "%s ", e.what()); } }) 

Some points:

  • The return value of when() is another promise, for the result of the lambda.
  • The lambda can return another promise instead of a value. In this case the new promise will replace the old one.
  • You can pass multiple promises to when(). The lambda will be called when all have completed.
  • If you give two lambdas to when(), the second one is called in case of exceptions. Otherwise, exceptions simply propagate to the lambda returned by when().
  • Promise callbacks are never executed synchronously; they always go through an event queue. Therefore, the body of a promise callback can delete objcets without worrying that they are in use up the stack.
  • when() takes ownership of all of its arguments (using rvalue reference "move" semantics). You can actually pass things other than promises to it; they will simply be passed through to the callback. This is useful for making sure state required by the callback is not destroyed in the meantime.
  • If you destroy a promise without passing it to when(), whatever asynchronous operation it was bound to is canceled. Even if the promise was already fulfilled and the callback is simply sitting on the event queue, it will be removed and will never be called.

Having refactored all of my code to use promises, I do find them quite a bit easier to use. For example, it turns out that much of the complication in using Linuxs inotify interface, which I whined about a few months ago, completely went away when I started using promises, because I didnt need to worry about callbacks interfering with each other.

Conclusion

C++ is still a horribly over-complicated language, and C++0x only makes that worse. The implementation of promises is a ridiculous mess of template magic that is pretty inscrutable. However, for those who deeply understand C++, C++0x provides some very powerful features. Im pretty happy with the results.

{ Read More }


Wednesday, 19 July 2017

Cross Ange Tenshi to Ryuu no Rondo EPS 1 24 Sub Indonesia

Cross Ange Tenshi to Ryuu no Rondo EPS 1 24 Sub Indonesia



Information

Type: TV
Episodes: 25
Status: Currently Airing
Aired: Oct 5, 2014 to ?
Producers: Sunrise
Genres: Action, Sci-Fi
Duration: 23 min. per episode
Rating: R - 17+ (violence & profanity)

Synopsis

Karena manusia memperoleh teknologi yang hampir mirip dengan sihir yang di sebut �Mana�, manusia mampu menaklukan semua peperangan, kelaparan, polusi dan masalah lain di bumi sehingga bumi telah memperoleh perdamaian yang lengkap.

Putri pertama dari Misurugi Empire, Angelize yang seharusnya memakai mahkota. Namun dia terkejut saat mengetahui dia adalah Norma. �Norma� adalah keadaan tidak dapat menggunakan mana. Kemudian dia mengisolasi dirinya disebuah pulau terpencil.

Apa yang menunggunya adalah sebuah pertemuan dengan sekelompok gadis norma, gadis yang hanya tahu pertempuran dan menghabiskan hari-hari mereka naik senjata robot humanoid yang disebut �Barameiru� dan berburu naga raksasa yang datang dari dimensi lain untuk menyerang.

Download

Episode 01
3GP : [RDF] / [TF]
MP4 : [RDF] / [TF]
Episode 02
3GP : [RDF] / [TF]
MP4 : [RDF] / [TF]
Episode 03
3GP : [UC]
MP4 : [UC]
Episode 04
3GP : [UC]
MP4 : [UC]
Episode 05
3GP : [UC]
MP4 : [UC]
Episode 06
3GP : [UC]
MP4 : [UC]
Episode 07
3GP : [SF]
MP4 : [SF]
Episode 08
3GP : [UC]
MP4 : [UC]
Episode 09
3GP : [UC]
MP4 : [UC]
Episode 10
3GP : [UC]
MP4 : [UC]
Episode 11
3GP : [UC]
MP4 : [UC]
Episode 12
3GP : [UC]
MP4 : [UC]
Episode 13
3GP : [UC]
MP4 : [UC]
Episode 14
3GP : [UC]
MP4 : [UC]
Episode 15
3GP : [TF] / [SF]
MP4 : [TF] / [SF]
Episode 16
3GP : [UC]
MP4 : [UC]
Episode 17
3GP : [UC]
MP4 : [UC]
Episode 18
3GP : [UC]
MP4 : [UC]
Episode 19
3GP : [UC]
MP4 : [UC]
Episode 20
3GP : [UC]
MP4 : [UC]
Episode 21
3GP : [UC]
MP4 : [UC]
Episode 22
3GP : [UC]
MP4 : [UC]
Episode 23
3GP : [UC]
MP4 : [UC]
Episode 24
3GP : [UC]
MP4 : [UC]
{ Read More }


Friday, 14 July 2017

Copy your Facebook albums to Google picasa

Copy your Facebook albums to Google picasa





I recently wanted to backup all my favorite photo albums from Facebook to picasa, but I found this task to be a tedious one.
So I later found this website named Move2Picasa.com which lets you connect to your Facebook account, after which all your Facebook photos and albums will automatically be migrated over to Google�s Picasa service along with sans captions, comments and whatnot.

It admittedly took a couple of hours for me to get my Facebook photos transferred, but for people who don�t mind the wait and would like to move only their photos to Picasa / Google Photos, this is a more than adequate solution.
Evidently, the more photos you (and others) migrate, the longer the wait. Another caveat: it�s all or nothing � you can�t transfer specific photos or albums at this point.

Needless to say, once your photos are in Picasa, sharing them with Circles (or the world) on Google�s brand new social networking service, Google+, can be done in a snap.
{ Read More }


Wednesday, 12 July 2017

Converting Enum to List

Converting Enum to List


Method :



Usage :

{ Read More }


Monday, 10 July 2017

Create a shortcut to lock a PC in Vista

Create a shortcut to lock a PC in Vista


Slice steps off your system log-off routine by putting a log-off shortcut on your desktop.

Start by right-clicking an empty space on the desktop and then selecting New shortcut. In the space below Type the location of the item, type in rundll32.exe user32.DLL, LockWorkStation (remember to watch your spacing and case).

Finally, create a clever name for the icon besides the default "rundll32"�how about "Lock PC"? Then click the shortcut to lock your computer with ease.
{ Read More }


Thursday, 6 July 2017

Cron to be deprecated in favor of Upstart in Ubuntu

Cron to be deprecated in favor of Upstart in Ubuntu


Ubuntus Upstart is an init daemon replacement, quite analagous to OS Xs launchd. Launchd also replaced cron on OS X - and upstart plans to replace cron on Ubuntu. No telling when, but all my cron jobs will need to be reformatted.

Update: Sept 2011. Three years later and still waiting...

{ Read More }


Wednesday, 5 July 2017

Convert ovg to wmv or avi

Convert ovg to wmv or avi



Converting ovg to wmv or avi or visa-versa can be a tedious task. Here are a few softwares that are tested by me and are sure to work on Ubuntu and other Linux O/S distro�s.



OVG TO AVI OR WMV:


WinFF is a GUI for the command line video converter, FFMPEG. It will convert most any video file that FFmpeg will convert. WinFF does multiple files in multiple formats at one time. You can for example convert mpegs, flvs, and movs, all into avis all at once. WinFF is available for Windows 95, 98 , ME, NT, XP, VISTA, and Debian, Ubuntu, Redhat based GNU/Linux distributions. WinFF is available in Brazillian Portuguese, Bulgarian, Chinese Tradditional, Danish, English, French, German, Italian, Polish, Portuguese, Spanish, and Turkish.


WinFF is open source and cross platform written in Free Pascal and Lazarus. WinFF is published under the GNU public license. WinFF is published without any warranty or suitability for any purpose.
Written by Matthew Weatherford and Ian Stoffberg.
Debian and Ubuntu Package Maintainer: Paul Gevers
Gmaq and Jnavas for their presets.
Thanks to: Chris Bidmead for scripting ideas. Neil Hinton for 95/98/ME Compatibility.
Translators:
  • German translation by Kai Evers.
  • Bulgarian translation by Simeon Uzunov.
  • French Translation by Choplair.
  • Italian translation by Roberto Calamante.
  • Turkish translation by Emre Erkan.
  • Polish translation by Marcin Trybus.
  • Dutch translation by Roger Gabriels.
  • Portuguese translation by Louis Torrao.
  • Brazilan Portuguese translation by Nighto.
  • Spanish translation by Victor Paesa.
  • Traditional Chinese translation by Chung Yu.
  • Serbian Translation by Predrag Tomasevic
  • Norwegian Bokm�l Translation by Ellen Rohaan 
Here�s the download page: Winff




WMV or AVI to OVG:



 This is a master piece for converting wmv or avi or any other video format to ovg jus select the file and output directory and click on go its that easy.

Download the file from here: VFFF








Join me on: www.facebook.com/solancer

{ Read More }


Tuesday, 4 July 2017

Corning to introduce Antimicrobial Gorilla Glass Video

Corning to introduce Antimicrobial Gorilla Glass Video


The great smartphone revolution which kick-started with the introduction of iPhone in 2007 wouldnt have happened without Cornings scratch-proof Gorilla glass technology. Most flagship smartphones today, be it Android or iOS based, has the latest Gorilla glass as one of its most important component. A Day Made of Glass was an incredibly popular video by Corning back in 2012 which looked into the future of display technology.

Antimicrobial Gorilla Glass technology by Corning

Corning to introduce Antimicrobial Gorilla Glass technology
Antimicrobial Corning Gorilla Glass is formulated with antimicrobial properties to protect touch surfaces from odor and stain causing bacteria. According to the company, the technology is designed to work continuously and will last the lifetime of the device.


Related Video
  • Beware: "Glassy" Future Ahead [Video]
{ Read More }


Sunday, 25 June 2017

Create desktop file to see freespace

Create desktop file to see freespace


You need gnome terminal to create editable profile.

Open terminal and run

df -h

to see free space and identify the name of your system partition.

Lets say your system partition is /devsda5.

Then, create a desktop file with the content:

[Desktop Entry]
Name=Show free spacce
Comment=Show free space
Exec=gnome-terminal --window-with-profile=new1 -e "df -h /dev/sda5"
Icon=gnome-disks
Terminal=false
Type=Application
StartupNotify=true
Categories=GNOME;GTK;Settings;HardwareSettings;X-GNOME-Settings-Panel;System;

Save it to usr/share/applications and make it executable. Now you can run it from search.

To see space on all partitions, just use this line:

 Exec=gnome-terminal --window-with-profile=new1 -e "df -h"
{ Read More }


Countdown to Extinction

Countdown to Extinction


With some uncashed birthday money I purchased Megadeths Countdown to Extinction. This was one of my favorite albums for a very long time, and I am greatly enjoying this epic metal album.
{ Read More }


Friday, 23 June 2017

created the sql user but able to login without password

created the sql user but able to login without password


mysql_secure_installation




answer the following yes and next time you login with sql user, it wont allow empty password.


Reload privilege tables now? [Y/n] Y
 ... Success!
{ Read More }


Tuesday, 20 June 2017

CONVERT STRING TO INTEGER OBJECTIVE C by Little

CONVERT STRING TO INTEGER OBJECTIVE C by Little


Name:String To Integer Objective C Converter
File size:25 MB
Date added:November 20, 2013
Price:Free
Operating system:Windows XP/Vista/7/8
Total downloads:1046
Downloads last week:87
Product ranking:★★★★★










She was advised by him to come back at once. Could you tell me the way? I wonder who started that rumor. I wish I had been there with you. Take anything you want. When is the next flight to Delhi? He really likes traveling a lot. I want an MP3 player! You are in favour of ... arent you? Will she get well soon?
String To Integer Objective C Converter: - My mother asked me not to feed the dog until after we had all eaten.
- I have one brother.
- I have to go to the police station.
- I have a cold now.
- Something must have happened to him on the way.
- There was a light rain yesterday.
- Oh, really? Thank you. That would help a lot.
- What is Ken eating?
- They might be taller than you.
- CONVERT STRING TO INTEGER OBJECTIVE C
- Lets take a trip.
She bit him. Could you draw a map for me? She devoted herself to him. How is your dad? Did you have a fight with Ken? That is an old camera. Dont throw garbage away here. Can I have your number please? She handed him a book. Show me how to do it, please.






String To Integer Objective C Converter charts






String To Integer Objective C Converter location




String To Integer Objective C Converter google search
String To Integer Objective C Converter ask google support
String To Integer Objective C Converter chrome extensions
String To Integer Objective C Converter for android
String To Integer Objective C Converter videos
String To Integer Objective C Converter twitter search
String To Integer Objective C Converter wiki
String To Integer Objective C Converter photos


String To Integer Objective C Converter world






String To Integer Objective C Converter youtube videos






String To Integer Objective C Converter bing photo search




String To Integer Objective C Converter, Inc. 80176 Fayetteville Street, North Carolina 4009 - USA, CA 28309 Tel: 436-320-3968 - Fax 348-370-3915 E-mail:Jeffery_Little@gmail.com
String To Integer Objective C Converter address




String To Integer Objective C Converter


String To Integer Objective C Converter world
{ Read More }


Sunday, 18 June 2017

Copy Files to XBMC Live with sFTP and FileZilla

Copy Files to XBMC Live with sFTP and FileZilla


Here is a quick guide to connecting to XBMC Live via sFTP using FileZilla.  This will enable you to copy files to and from your XBMC Live installation.  By default XBMC Live installs an SSH server so you dont need to do any configuration on the actual XBMC box.

First you need to install FileZilla, if you are on Ubuntu just search for it in the Software Center or if you are using OSX or Windows you can download it here.

Next you need the IP address of your XBMC box, you can find this out by going to Settings->System Info->Summary



Now you have the IP address of your XBMC box open FileZilla and enter the following settings:

Host: your XBMC box IP address
Username: the username you chose during XBMC installation
Password: the password you chose during XBMC installation
Port: 22



*NOTE: if you did not do a HDD install of XBMC Live and are running it off a memory stick use the default XBMC Live credentials.
Username: xbmc
Password: xbmc

You can now easily copy files to and from you XBMC Live box.
{ Read More }


Thursday, 15 June 2017

Crontab UI easy and safe way to manage your crontab files

Crontab UI easy and safe way to manage your crontab files


Editing the plain text crontab is error prone for managing jobs, e.g., adding jobs, deleting jobs, or pausing jobs. A small mistake can easily bring down all the jobs and might cost you a lot of time. With Crontab UI, it is very easy to manage crontab.




Here are the key features of Crontab UI:

1. Easy Setup
2. Safe adding, deleting or pausing jobs. Easy to maintain hundreds of jobs.
3. Backup your crontabs.
4. Export crontab and deploy on other machines without much hassle.
5. Error log support

Fork me on Github

Setup

You have to setup crontab-ui on all the machines on which you want to manage crontab. Note that while running Crontab UI, you have to be on the same user as that of the crontab.

npm install crontab-ui
crontab-ui

Adding, deleting, pausing and resuming jobs.

Once setup Crontab UI provides you with a web interface using which you can manage all the jobs without much hassle.



Backup and restore crontab

Keep backups of your crontab in case you mess up.



Export and import crontab on multiple instances of Crontab UI.


If you want to run the same jobs on multiple machines simply export from one instance and import the same on the other. No SSH, No copy paste!


But make sure to take a backup before importing.

See when the job is going to run next.



Separate error log support for every job





These are some of the things I am planning to add in the future


1. Run jobs as different user in one place.
2. Profiling jobs.
3. Importing from existing crontab file.

Contribute

Fork Crontab UI and contribute to it. Pull requests are encouraged.




{ Read More }


Saturday, 10 June 2017

Converting very old file formats to a more modern file format wot WPMacAPP on your Mac running 10 11

Converting very old file formats to a more modern file format wot WPMacAPP on your Mac running 10 11


I�ll cut to the chase here. If you use a current Mac with OS X 10.11.x and you want to convert a bunch of old Word 5.1a for Mac or WordPerfect 2.x for Mac files into a Word 97-2004 .doc file that Word 2016 can read, then you need to download WPMacApp from Edward Mendelson�s Website, wpdos.org.

You go here to get to the page on WPDOS.org with the specific WordPerfect on Mac information. This site covers just about every instance of WordPerfect, Wordperfect for DOS in particular, on MS-DOS, Windows, Macintosh, and Linux. So you could get lost. Just look at the top for links to the various pages on the site.�

READ THE INSTRUCTIONS MR. MENDELSON HAS POSTED ABOUT USING THIS APPLICATION WITH OS X. YOU HAVE TO MAKE TEMPORARY CHANGES TO THE SECURITY SETTINGS BEFORE IT WORKS.�

This page does not have a big obvious icon for you to click on to download this app. The link is the second item down on a bulleted list. It says in bold text Download the disk image file�(Warning: About 530 MB)


Please Look here for WPMacAPP

Mr. Mendelson� has included WordPerfect for Mac 1.05, WordPerfect for Mac 2.1, WordPerfect for Mac 3.5, and WordPerfect for Macintosh 3.5e,� and WordPerfect Works for Macintosh 1.2 and the Envoy app, which competed with Adobe Acrobat.

That covers it for WordPerfect for Mac apps. As for Word for Mac, he includes an installation of Word for Mac 5.1a. Look in the Applications folder on the WPMac HD volume.�

You�ll also find MacLink Plus 11, which can convert a wide range of documents and images that you may have on your system and didn�t know what to do with. Archaic WordStar files? MacLink Plus can convert it into Word 97-2004 format. Old images files in ZSoft .pcx format? Again, MacLink Plus can convert it into JPEG or PNG format or GIF format, which your Mac�s Preview app can read.�

Finally, can you install Appleworks 6 from your old iMac G3 CDs? Yes, you can.�

Just copy the installer app, about 27 mega bytes in size, over to your /Users/<Username>/Documents folder. From there, copy the installer over to the WPMac HD virtual hard drive icon in the upper right-hand corner of the window from the Unix virtual hard drive icon.

The Unix icon is really just a link to the folder on your Mac chosen by WPMacApp to serve as the conduit between your emulated old Mac and your physical new Mac.�

Appleworks 6 installed. WPMacAPP quit upon finishing installation. I restated. After rebuilding the desktop, all is fine. Using the already installed MacLink Plus 11, I can import and export in a wide variety of formats.�

That�s my brief introduction to reading very old file formats on your Mac through the use of WPMacApp. Go at it! And Donate to Mr. Mendelson if you use some of his work. He�ll appreciate it.�

Tom Briant

Editor, MacValley Blog

{ Read More }


Wednesday, 7 June 2017

Copy A File From Localhost to Remotehost

Copy A File From Localhost to Remotehost



DESCRIPTION:
  • Consider we want to copy test.txt file from local machine(192.168.1.10) to remote  machine(192.168.2.5)
  • We need to use scp(secure copy) command to establish above need
  • For this you want the root password of the remote host.

COMMAND:

    scp <source file> <remote username>@<remote ipaddress>:<dest path with file name>

    example:
    scp test.txt root@192.168.2.5:/home/user/Desktop/test.txt
  • It will ask the remote machine password to enter
  • Now file will successfully copy to remote machine 



{ Read More }