Microsoft Vs Mac Vs Linux
Microsoft Vs Mac Vs Linux

Tech Debate: Linux Vs. Windows
There are many heated debates and arguments in the world of computers and technology these days. Some of these debates have been around since the computers first became popular amongst average, everyday people. Issues like choosing a Mac or a PC, or choosing an Apple operating system or a Windows operating system have been highly debated for years – and there have even been a recent line of commercials that brings this argument right into your own living room. However, one of the newest arguments involves a relatively little-know, but highly powerful operating system known as Linux. And the exact question is what one is better – Linux or Windows?
Well, the answer is not a simple and quick one, by any means. There are many things that you need to take into consideration when trying to make the decision between running Linux on your PC or running Windows – and this article attempts to help educate you on the topic, so that you can make a better decision for yourself regarding Linux vs. Windows.
The first thing to consider is your PC gaming life. If you are always playing the hottest new game, you probably want to stick with Windows. Because it is by far the most popular computer operating system available today, more games and applications are developed for Windows than any other platform. And while you may be able to run most Windows-based games on a computer that is running Linux, it’s not a guarantee that every single game in your collection will work. That is why if you are a computer gamer by any means, you will definitely want to pick Windows over Linux.
However, being the most popular operating system has a down side too, as Windows users are well aware of. Because more people use Windows on their home computer than any other operating system, malicious computer users and computer hackers target Windows-based computers far more than any other computer. There are thousands upon thousands of different viruses that may affect your Windows machine – with Linux, however, this simply is not the case. Computer hackers are not going to spend the amount of time that it takes to try and develop a virus for Linux, when it is so easy to make one for Windows. So if security is your main concern for your home computer, without a doubt Linux is the way to go.
Because Linux is an open source operating system however, it has gained quite a bit of popularity lately. What this means is that all of the ordinary users of Linux are free to play around with the operating system and develop their own programs and applications. And as this becomes more and more commonplace, you never quite know what Linux might come out with next. Indeed, it might be even better than anything Windows has to offer. And if you are already running a Linux operating system on your home computer, you will be a step ahead of most users who are still using Microsoft Windows on their machines. Ultimately, the choice is yours – though each system does have its advantages and disadvantages.
For more information on computer servers, visit http://www.managedserversolutions.com/
About the Author
Openoffice vs Microsoft Excel..?
Hi,
I often need to plot quick graphs..Currently I use Excel for it..
but I don't feel quite good about it..
My copy of Excel that I use currently is pirated..
I installed Open Office , but either the interface is different or may be all the fns are not even available.
Would sbdy pl give insights into how does openoffice compare with microsoft office? and what about the file compatibility..?
What office package does Linux use?
What about Mac?
Thanks
Hi,
Microsoft Office is a Macintosh application that was ported to Windows many years ago so that Windows users could use it, too. Microsoft sells Office for Windows and Mac. A new Mac version (Office 2008) will be released January 15.
OpenOffice is a competing product made by Sun Microsystems. They tried to sell it against Microsoft Office, but people just weren't all that excited about it, so Sun decided to give their money-losing dog away so as to hurt Microsoft's sales and made it open source to get free developer support from the open source community. OpenOffice can open and save in Microsoft's file format.
OpenOffice is available both Mac and Windows (not sure about LINUX). Graphs you make in OpenOffice will often look different in Microsoft Office, and vice-versa even if you save them in Microsoft Office format. If sharing your files with Microsoft Office users is important, I'd recommend you purchase the Microsoft brand. You can purchase just Excel as a stand-alone if you don't want the entire Office suite.
On the other hand if you just need to make the graphs and print them and use them only on your own computer then OpenOffice will be just fine for you. If you share the graphs with other OpenOffice users they will be fine, too.
There is a major difference in the user interfaces of Microsoft Office for Windows, Microsoft Office for Mac, and OpenOffice. The best user interface (GUI) in my opinion is Office 2004 on the Mac. The worst is office 2007 on Windows. OpenOffice looks a lot like Microsoft Office version 5, which some people hated but I kinda liked it so I think it's OK.
If you ever decide you want to get into advanced features that involve automation, programming, or using databases with your graphs, then Excel is the only way to go. OpenOffice's visual basic is mostly broken, and OpenOffice does not have a Structured Query Language (SQL) GUI (Graphical User Interface) at all, but Excel does. There are thousands of Excel add-ins, but I doubt many will work in OpenOffice due to the broken VBA.
-Jim Gordon
Microsoft Mac MVP
MVPs are independent and do not work for Microsoft
http://mvp.support.microsoft.com/
Microsoft Vs Mac Vs Linux
Mac vs Windows vs Linux: Every OS Sucks!
Writing plugins for RDesktop
Written by:
Sergey Yakimenko,
Senior Software Developer of Driver Team,
Apriorit Inc, http://www.apriorit.com
Contents
About this article: when it’s worth reading
Rdesktop. RDP protocol
Writing plugins to rdesktop: using OOP patch
From principles to code
Client part: plugin
Client part: rdesktop
Server part
The end
About this article: when it’s worth reading
This article was mostly written for Linux developers. The article gives a method of writing out-of-process plugins to open source software – i.e., plugins that will work as a part of the software but will run in another process, so their code may stay closed.
Generally there’s no need to use the method expounded in this text. Rdesktop is free software and you can always just modify its sources in any way you need. Though, this would mean that you should make your code open as well, because this is what GPL license requires. If you don’t want this though, keep reading and you’ll learn how to avoid the GPL requirement and to write a plugin which code will be closed but work as a part of Rdesktop code.
You may also want to read this just to know something interesting about:
- RDP protocol
- Rdesktop – an open-source RDP client
- a simple way of inter-process communication on *nix systems.
Let's get started.
Rdesktop. RDP protocol.
This is for those who don’t know what it is all about. Remote Desktop Protocol (RDP) is a proprietary protocol developed by Microsoft, which concerns providing a user with a graphical interface to another computer. This is very handy – you can work on another computer sitting at your desktop with almost no differences in appearance and performance (of course, if you have a good network connection – hi-speed, with small latency, and so on and so forth). There’re RDP clients for almost all operating systems – Windows, Linux, Mac OS, and all of them use RDP protocol to connect to an RDP server – a remote host that you want to work with. In 2008 Microsoft opened RDP specifications, now they are available at their site: http://msdn.microsoft.com/en-us/library/cc216513(PROT.10).aspx.
Rdesktop is an open source client for Windows Terminal Services. It currently runs on most UNIX based platforms with the X Window System. It supports most of the basic RDP protocol features, and many protocol extensions, including audio redirection, clipboard, local file system and local devices redirection. Rdesktop is released under the GNU Public License (GPL).
Just like many other *nix programs, Rdesktop is a command-line application. It has a lot of various input parameters that configure a remote session – user credentials, server address, desktop dimensions, color depth; also description of local devices that are to be redirected to the remote computer – comports, printers, sound, disks.
On parsing its command line and starting a session to a remote host, rdesktop enters an endless loop in which it reads incoming data i.e., the data sent by server, and sends some data to server in response. The connection with server is made via so-called virtual channels. Microsoft has a floor:
"Virtual channels are software extensions that can be used to add functional enhancements to a Remote Desktop Services application. Examples of functional enhancements might include: support for special types of hardware, audio, or other additions to the core functionality provided by the Remote Desktop Services Remote Desktop Protocol (RDP - http://msdn.microsoft.com/en-us/library/aa383015(VS.85).aspx). The RDP protocol provides multiplexed management of multiple virtual channels.
A virtual channel application has two parts, a client-side component and a server-side component. The server-side component is an executable program running on the Remote Desktop Session Host (RD Session Host) server. The client-side component is a DLL that must be loaded into memory on the client computer when the Remote Desktop Connection (RDC) client program runs.
Virtual channels can add functional enhancements to a Remote Desktop Connection (RDC) client, independent of the RDP protocol. With virtual channel support, new features can be added without having to update the client or server software, or the RDP protocol."
So, virtual channels are just a way of how two endpoints – a client and a server programs, for instance – can connect to each other independently of the lower-layer protocol. In Remote Desktop Services the protocol is RDP, but it can be any other on the assumption of that it would provide similar capabilities.
Writing plugins to rdesktop: using OOP patch
As it was mentioned above, you can always just modify rdesktop sources to add or change needed functionality. There's another way, though – if you don't want to open you changes code to everybody, you can create a separate program that will work as an rdesktop add-in.
There is a patch that makes the virtual channel capability in rdesktop visible to the third parties – i.e., make it possible to create and work with additional virtual channels which handlers are implemented as separate programs. The patch is mainly written by Simon Guerrero. You can get the patch here: Sourceforge.net (http://sourceforge.net/tracker/index.php?func=detail&aid=1472969&group_id=24366&atid=381349 - the detailed description on the page is outdated - it concerns the old version of the patch, and doesn't reflect its current state. It is just useless). After being upgraded with this patch, rdesktop gets an additional “redirection (-r)” parameter - '-r addin'. The full format of the parameter is:
-r addin:<channelname>:</path/to/executable>[:arg1[:arg2:]...]
where
<channelname> - name of the desired virtual channel; </path/to/executable> - path to the VC handler; [:arg1[:arg2:]...] - optional parameters passed to the handler by rdesktop.
A few words about the VC handler. When rdesktop creates the handler process and the corresponding virtual channel, it connects the VC output to the process's standard input (stdin), and vice versa – it's standard output (stdout) is connected to the VC's input. The optional parameters are passed to the process as command-line parameters. So, the only thing the handler should do is to read incoming VC data from the stdin and to write outgoing VC data to stdout. Very simple and clear scheme; below it is described in more detail.
From principles to code
Okay, this is how it works. The code is not that elegant, but it works and does what is needed. So, let's take a look:
Client part: plugin
When plugin starts, it knows that it has been run by rdesktop, and its stdout and stdin are connected to the virtual channel input and output. So plugin just runs an endless loop in which it reads data from the VC and sends some data in response when it's needed. It also sets a SIGUSR1 signal handler, so that rdesktop can terminate plugin task correctly. When rdesktop will disconnect from the remote computer, it will send SIGUSR1 to all plugins, and plugins on receiving SIGUSR1 should stop working:
static int g_end_flag = 0; // rdesktop sends us a close event by sending sigusr1 void sigusr1_handler(int signum) { g_end_flag = 1; } // we're launched by rdesktop with the following parameters: // 1) our ends of read and write pipes that connects us to rdesktop // are passed as stdin and stdout; // 2) all parameters are passed via argv[] int main(int argc, char **argv) { char *data = NULL; unsigned long datalen = 0; int pipe_to_read = -1; int pipe_to_write = -1; int i; // set up the SIGUSR1 handler struct sigaction sa; sa.sa_handler = sigusr1_handler; sigaction(SIGUSR1, &sa, NULL); pipe_to_write = dup(STDOUT_FILENO); pipe_to_read = dup(STDIN_FILENO); while (!g_end_flag) { ssize_t bytes_read = read(pipe_to_read, &datalen, sizeof(unsigned long)); if (g_end_flag) break; if (bytes_read <= 0) { perror("pipe read"); break; } data = malloc (datalen); ssize_t all_read = 0; do { bytes_read = read(pipe_to_read, data + all_read, datalen - all_read); all_read += bytes_read; } while (bytes_read > 0 && all_read < datalen && !g_end_flag); // just send the received data back if (bytes_read > 0) { write(pipe_to_write, &datalen, sizeof(unsigned long)); write(pipe_to_write, data, datalen); } free(data); data = NULL; } end:
if (data != NULL) free(data); close(pipe_to_read); close(pipe_to_write); return 0; }
Client part: rdesktop
When rdesktop finds an '-r addin' parameter,
case 'r': if (str_startswith(optarg, "addin")) { it initializes the add-in, and add it to the list of add-ins: init_external_addin(addin_name, addin_path, p, &addin_data[addin_count]); if (addin_data[addin_count].pid != 0) { addin_count++; }
In the add-in init function rdesktop prepares add-in parameters, creates its process and connects it to the pipes:
void init_external_addin(char *addin_name, char *addin_path, char *args, ADDIN_DATA *addin_data) { char *p; char *current_arg; char *argv[256]; char argv_buffer[256][256]; int i; int readpipe[2],writepipe[2]; pid_t child; /* Initialize addin structure */ memset(addin_data, 0, sizeof(ADDIN_DATA)); /* Go through the list of args, adding each one to argv */ argv[0] = addin_path; i = 1; p=current_arg=args; while (current_arg != 0 && current_arg[0] != " ") { p=next_arg(p, ":");; if (p != 0 && *p != " ") *(p - 1) = " "; strcpy(argv_buffer[i], current_arg); argv[i]=argv_buffer[i]; i++; current_arg=p; } argv[i] = NULL; /* Create pipes */ if (pipe(readpipe) < 0 || pipe(writepipe) < 0) { perror("pipes for addin"); return; } /* Fork process */ if ((child = fork()) < 0) { perror("fork for addin"); return; } /* Child */ if (child == 0) { /* Set stdin and stdout of child to relevant pipe ends */ dup2(writepipe[0],0); dup2(readpipe[1],1); /* Close all fds as they are not needed now */ close(readpipe[0]); close(readpipe[1]); close(writepipe[0]); close(writepipe[1]); execvp((char *)argv[0], (char **)argv); perror("Error executing child"); _exit(128); } else { strcpy(addin_data->name, addin_name); /* Close child end fd"s */ close(readpipe[1]); close(writepipe[0]); addin_data->pipe_read=readpipe[0]; addin_data->pipe_write=writepipe[1]; addin_data->vchannel=channel_register(addin_name, CHANNEL_OPTION_INITIALIZED | CHANNEL_OPTION_ENCRYPT_RDP | CHANNEL_OPTION_COMPRESS_RDP, addin_callback); if (!addin_data->vchannel) { perror("Channel register failed"); return; } else addin_data->pid=child; } }
The addin_callback() function is called whenever some data are received from the add-in VC:
/* Generic callback for delivering data to third party add-ins */ void addin_callback(STREAM s, char *name) { pid_t pid; int pipe_read; int pipe_write; uint32 blocksize; /* s->p is the start and s->end is the end plus 1 */ blocksize = s->end - s->p; /* look up for the add-in by the VC name */ lookup_addin(name, &pid, &pipe_read, &pipe_write); if (!pid) perror("Can"t locate addin"); else { /* Prepend the block with the block size so that the add-in can identify blocks */ write(pipe_write, &blocksize, sizeof(uint32)); write(pipe_write, s->p, blocksize); } }
Data from add-in are read by adding the add-in pipe end to the set of file descriptors
/* Add the add-in pipes to the set of file descriptors */ void addin_add_fds(int *n, fd_set * rfds) { extern ADDIN_DATA addin_data[]; extern int addin_count; int i; for (i = 0; i < addin_count; i++) { FD_SET(addin_data[i].pipe_read, rfds); *n = MAX(*n, addin_data[i].pipe_read); } }
and then select()"ing with the set:
select(n, &rfds, &wfds, NULL, &tv);
The descriptors are checked in an endless loop.
/* Check the add-in pipes for data to write */ void addin_check_fds(fd_set * rfds) { extern ADDIN_DATA addin_data[]; extern int addin_count; int i; char buffer[1024]; ssize_t bytes_read; STREAM s; for (i = 0; i < addin_count; i++) { if (FD_ISSET(addin_data[i].pipe_read, rfds)) { bytes_read = read(addin_data[i].pipe_read, buffer, 1024); if (bytes_read > 0) { /* write to appropriate vc */ s = channel_init(addin_data[i].vchannel, bytes_read); memcpy(s->p, buffer, bytes_read); s->p += bytes_read; s->end = s->p; channel_send(s, addin_data[i].vchannel); } } } }
Server part
On the server side you should open a corresponding virtual channel and wait for the request from the client. You can find an example on the patch page: example - http://sourceforge.net/tracker/download.php?group_id=24366&atid=381349&file_id=313601&aid=1472969.
The end
Okay, that is all. Hope this information was useful. You can use this method not only for rdesktop, but for other programs as well – every time when you want to write a closed-source add-in to some program which code you can modify.
So, good luck!
About the Author
Apriorit is the providers of the professional consulting and software development services in the knowledge-intensive scopes.
One of the key values of Apriorit's specialists is knowledge generation and sharing of experience.
Learn more about Apriorit and its experience at Apriorit Official site
|
|
Medialink - Wireless N Router - 802.11n - 150 Mbps - 2.4 Ghz - NEW Design w/ Internal Antenna $40.95 Medialink - Wireless N Broadband Router - 150 Mbps - 2.4 Ghz - 802.11nThis router is the perfect solution for adding a wireless network to your home or business. It fully complies with wireless standards and is guaranteed to work with any manufacturer's 2.4Ghz wireless adapter and most manufacturers' DSL/Cable modem. (May not be compatible with some Satellite modems including HughesNet)Specificati... |
|
|
Logitech HD Pro Webcam C910 $99.99 Logitech C910 Webcam 960-000597 Web Cameras... |
|
|
Logitech Wireless Desktop MK320 Keyboard $22.99 Logitech Wireless Desktop MK320 Keyboard & Pointing Device Kit 920-002836 Keyboard & Mouse Combos... |
|
|
The Sims 3: Showtime - Limited Edition $39.99 The Sims 3 Showtime PC... |
|
|
The Sims 3: Hidden Springs $16.87 The Sims 3 Hidden Springs PC... |
|
|
You Need A Budget (YNAB) - Personal Finance Software $59.00 Praised across the internet as hands-down the "best budgeting software", You Need A Budget (YNAB) cuts to the chase with your finances. The software focuses you on the foundation of your finances: the Budget. Experience has shown that when your budget is intact, and functioning correctly, everything else takes care of itself (the bills are paid on time, retirement contributions are made, and unnec... |
|
|
Microsoft Windows Home Server 2011 Unleashed (3rd Edition) $26.41 Covers the newest version of WHS! This is the most comprehensive, practical, and useful guide to the brand-new version of Windows Home Server 2011. Paul McFedries doesn’t just cover all facets of running Windows Home Server: He shows how to use it to simplify everything from file sharing to media streaming, backup to security. With real-world examples, McFedries guides you through us... |
|
|
Cross-Platform .NET Development: Using Mono, Portable.NET, and Microsoft .NET $19.91 .NET is not just for Windows anymore! This unprecedented book examines the advantages of building portable, cross-platform.NET code. Even if you are only vaguely familiar with .NET, with the aid of this book, you'll quickly learn how to run .NET code on different platforms. You may run code among the Linux, Unix, Mac OS X, and Windows platforms. And you'll get to choose among Mono (for Linux), Por... |
|
|
Logitech Gamepad F310 $19.99 The Logitech 940-000110 Gamepad F310 features button customization, multiple controller configurations, printable gaming profiles.... |
|
|
Logitech Rumble Gamepad F510 $29.99 The Logitech 940-000106 Rumble Gamepad 510 is the ultimate precision instrument, whether you're going for the tackle, the kill, the gold, or the finish line. The comfortable rubber grips keep you at the top of your game for hours of play. It also features familiar button layout... |
Microsoft Vs Mac Vs Linux