Search Results

Search found 24106 results on 965 pages for 'usb key'.

Page 193/965 | < Previous Page | 189 190 191 192 193 194 195 196 197 198 199 200  | Next Page >

  • [Ubuntu] How can i log-in to Ubuntu using USB-serial console (rs232) ?

    - by marc
    Welcome, How can enable remote terminal login into Ubuntu 9.10 using usb-serial terminal ? I got created device ttyUSB0 and i want allow to log-in using hyper-terminal. I found some resources but they are related to real! hardware rs232 ports, i can't find any information about USB converter. Right now i have established connection between that usb-serial port and my laptop (i can send text writing to port cp sometext.txt /dev/ttyUSB0 and read using hyperterminal). Any idea ? Regards

    Read the article

  • Android USB driver v2 vs v3? V3 doesnt see moto droid in device chooser?!?

    - by BobG
    I can see my adp2 in ddms device chooser, but cant see Dave's droid. (used to be able to before updating to usb v3!). Can some smart person diff the inf files from usb v2 and v3 and see if they dropped the droid by mistake when they added the nexus? I can't think of any other reason why I cant see the droid in the device chooser. USB debug turned on, same debuggable app that runs on the 1.6 adp2. I'd like to be able to see the 2.1 device even if it has a red x by it!

    Read the article

  • Recommended ways to install USB drivers with a Visual Studio 2005 Setup Project?

    - by tjmoore
    I need to install a USB driver with an application, and I'm using a Visual Studio 2005 Setup Project to create the installer. The driver only needs to be installed sufficient enough so that when the USB device is plugged in, Windows will go off doing it's "installing device" routine and do the rest of the job. It would be okay also to have the setup finish and then the user connects the device when required with the driver install completing then. However the user shouldn't be prompted to find a driver location. The USB drivers I have are available either as plain .sys / .inf files, or as a full installer (.msi together with a setup.exe wrapper). The full installer deals with combinations of operating systems and languages, but the application is for internal use and I can limit the target OS to Windows XP. Would it be better just to run the available installer via a custom action, or to install via the .inf file somehow (I'm not sure how to do that)?

    Read the article

  • Getting input from keyboard

    - by SAMIR BHOGAYTA
    When you type on the keyboard the keystrokes go to a particular application, the active application. The active application receives the input from the keyboard. This means the application has input focus. There are two events for a key on a keyboard, when the key is pressed and when it is released. No it's not a single event as you might expect if you have no prior programming experience, in shooter games for example when you keep the forward key pressed (KeyDown) the player goes forward, and when it isn't pressed (KeyUp) the player stays put. The event that occurs when the key is pressed is called KeyPress. It occurs between KeyDown and KeyUp, and therefore acts similar to KeyDown. Similar to the way we handle OnPaint and other events we also handle the OnKeyDown event (because we want the event to occur when the key is pressed and not when it is released) by overriding it. Try the code below and test it. You will understand the role of each property. protected override void OnKeyDown(KeyEventArgs keyEvent) { // Gets the key code lblKeyCode.Text = "KeyCode: " + keyEvent.KeyCode.ToString(); // Gets the key data; recognizes combination of keys lblKeyData.Text = "KeyData: " + keyEvent.KeyData.ToString(); // Integer representation of KeyData lblKeyValue.Text = "KeyValue: " + keyEvent.KeyValue.ToString(); // Returns true if Alt is pressed lblAlt.Text = "Alt: " + keyEvent.Alt.ToString(); // Returns true if Ctrl is pressed lblCtrl.Text = "Ctrl: " + keyEvent.Control.ToString(); // Returns true if Shift is pressed lblShift.Text = "Shift: " + keyEvent.Shift.ToString(); } How do I find out when the user presses a specific key? As you probably imagine, this will be easily accomplished using 'if'. if (keyEvent.KeyCode == Keys.A) { MessageBox.Show("'A' was pressed."); } Probably most beginners would be tempted to do this: if (keyEvent.KeyCode == "A") .... which is definitely incorrect because we can't compare System.Windows.Forms.Keys to a string. Also note that in the example we are using 'keyEvent.KeyCode', that means that even if we have other shift keys pressed (Alt, Ctrl, Shift, Windows...) simultaneous with A, the if condition returns true because it doesn't recognize key combinations. If we want to ignore key combinations (Alt+A, Ctrl+Shift+A), etc. we need to use 'keyEvent.KeyData' of course: if (keyEvent.KeyData == Keys.A) { MessageBox.Show("'A', and only A, was pressed."); } When you right click on a file in Windows Explorer and you have the Shift key pressed you get the additional 'Open with...' item in the menu. This and many others are cases when you need to use the mouse button together with the keyboard. The following code will change the background color of the form only if the form is clicked while the Ctrl key on the keyboard is pressed. If the Ctrl key is unpressed and the form is clicked nothing happens. private void Form1_Click(object sender, System.EventArgs e) { Keys modKey = Control.ModifierKeys; if(modKey == Keys.Control) { this.BackColor = Color.Yellow; } } If you have further questions feel free to ask them and also check the following pages at MSDN: KeyUp Event KeyPress Event KeyDown Event

    Read the article

  • Hide GRUB2 menu UNLESS you hold down Shift key: how to make this happen?

    - by Shasteriskt
    I have a Ubuntu - Windows 7 dual-boot set-up, and I would like to have it that my laptop would boot up Windows 7 unless I press down the Shift key right after boot and bring up the Grub2 menu from which I can choose Ubuntu. I researched on Grub2 and options for etc/default/grub and I have tried playing around with combinations with the GRUB_TIMEOUT and GRUB_HIDDEN_TIMEOUT values, but to no avail. I tried setting the GRUB_HIDDEN_TIMEOUT higher than the GRUB_TIMEOUT thinking that both countdown start simultaneously, but no - GRUB_TIMEOUT only starts after the other is done. Is this behavior achievable? If so, how?

    Read the article

  • Is is OK to use a non-primary key as the id in a rails resource?

    - by nPn
    I am getting ready to set up a resource for some new api calls to my rails application. I am planning on calling the resource devices ie resources :devices This is going to represent a android mobile devices I know this will get me routes such as GET devices/:id In most cases :id would be an integer representing the primary key, and in the controller we would use :id as such: GET devices/1 @device = Device.find(params[:id]) In this case I would like to use :id as the google_cloud_messaging_reg_id So I would like to have requests like this: GET devices/some_long_gcm_id and then in the controller , just us params[:id] to look up the device by the gcm registration id. This seem more natural, since the device will know it's gcm id rather than it's rails integer id. Are there any reasons I should avoid doing this?

    Read the article

  • USB MFP print server that works with Windows x64?

    - by hangy
    Right now, we are using the Longshine LCS-MFP101-2 to connect to our MFP device (printer/scanner combo) over LAN. However, the required driver (RMVUSB, Remote Virtual USB) cannot be installed on 64 bit Windows operating systems such as Windows XP x64 or Windows 7 x64. Since the distributor lists the product as "phased out", I do not expect any updated 64 bit drivers any time soon. :/ Because of that, I am searching for a relatively cheap SOHO MFP print server (1 USB port should be enough) which can be used with 32 bit and 64 bit versions of Windows. Do you have any ideas or recommendations? Thanks!

    Read the article

  • Is it possible to change the mount point used for external USB devices from /media to something else under GNOME?

    - by slm
    I'm using CentOS 5.x and am trying to change the mount point that get's used when I insert a USB thumb drive or external USB drive. They're showing up under /media/KINGSTON for example. I'd like to change this so that they show up under /external/KINGSTON for example. If you must know my reasons for asking this, I have a domain where they're already using /media for something else and it would be more work to move this domain's automount from /media to something else. I'm trying to explore all my options before I decide on a path forward. Thanks!

    Read the article

  • How to remove a partition on a USB drive?

    - by Nathan Long
    I got a free promotional USB stick that I want to format for my own purposes. When I inserted it, it automatically opened a browser and launched a web site. I have since disabled autoplay on this computer so that nothing launches when the stick is inserted. But it still shows up as two separate drives, and one of them is a "CD Drive" that I can't format. How can a USB stick contain a "CD Drive?" And more to the point, how can I remove this partition using Windows XP or Ubuntu? Update I previously asked for an XP solution, but finding none, I have tried Ubuntu, also without success. Gparted doesn't see the "CD" portion as a device at all, and from bash, any chmod changes I try tell me that the file system is read-only. Any ideas?

    Read the article

  • Stop external USB keyboard repeating key presses on Vista.

    - by dommer
    We have an infuriating problem with a (Vista/Dell) laptop. When an external (Logitech) USB keyboard is attached to it, it regularly starts repeating key presses. When the user recently deleted an Outlook message, it deleted them all! When typing a message, suddenly it will start repeating the last keypress about 30 times (it varies). It's not a mechanical issue. We've switched the keyboard out four times. Even tried a brand new one one. Every time it's the same. Also, the keyboard works fine on other machines. The problem doesn't arise when the laptop's own keyboard is used - even if the external USB keyboard is still attached. I'm stumped? Any ideas. Not using an external keyboard isn't an option due to our health and safety policy (...don't ask...).

    Read the article

  • Raspberry Pi: mvoe home & var folders to USB HDD?

    - by doni49
    I have a Raspberry Pi running raspian. I've installed Apache2, PHP & MySQL. Apache & MySQL are both configured to use sub-directories of /var. I'd like to use a directory on my USB HDD instead of my SD card. I'd also like to move the /home directory to the USB HDD. I'd like to avoid re-partioning my HDD if possible. I thought maybe I could use a symlink to tell raspian that /var is really at /media/USBHDD1/var and /home is really at /media/USBHDD1/home. I tried it last night but couldn't get it to work.

    Read the article

  • RAID0 array of USB 2 disks, both connected to a single hub. Any benefit?

    - by Josh
    I have two unused USB 2 drives. I wanted to stripe them in a RAID0 configuration for fast disk access for virtual machines. (I find running a VMware virtual machine off a USB2 drive to be painfully slow. Especially Windows Vista) If I have both USB drives attached to the same USB2 hub, will that negate any benefit I gain by creating a RAID0 array? That is to say, is the speed of USB2 the limiting factor or is the speed of the drives? Would I get better performance by attaching one or both drives directly to my computer?

    Read the article

  • I have nice headphones. Need a wireless USB microphone so I don't have to switch to a headset to make a call

    - by mattalexx
    Right now, I have a pair of Sennheiser HD595 headphones. They are plugged into a DAC/headphone amp. I spend all day listening to music through them and they sound awesome. Then, for making calls, I have a wireless USB headset from Logitech. Problem is, I can't make calls when I'm wearing my Sennheisers but I wouldn't want to listen to music all day using the Logitech headset. So I spend my day switching in between. So the question is, how can I make calls while wearing the headphones of my choice? One thing I thought of is a wireless USB microphone that I can clip to the Sennheisers. So I'd wear the Sennheisers with this mic all day and ditch the Logitech headset. But it doesn't look like anyone makes a microphone like this. By the way, I would love if the solution didn't transmit the sound of my clacky keyboard or noisy wood flooring.

    Read the article

  • Trying to get a PC to boot off a bootable SD card that is inside an USB attached Android device.

    - by Cyril
    First, I'd like to make myself look less a madman than I may have appeared to be. I wanted to have a bootable USB stick with me at all times, but it's less convenient because it's an extra object and it's easier to lose, forget etc. Then I thought, I have an Android phone, and it has a micro SD in it; perfect. Not all PC's can boot off a card reader, but the phone itself is a card reader when attached as a disk drive. Or at least so I thought. Turns out that my netbook BIOS (tested on Asus eeePC) refuses to see it as an external harddrive; it only recognizes it as a generic USB device and doesn't offer an option to boot from it. The device has a name "Android phone" or smth, so it seems to me that it doesn't work as a "pure" card reader, and instead still manifests itself as a phone. Can it be somehow overridden?

    Read the article

  • replace windows xp with ubuntu no usb boot option and no cd?

    - by kristian nissen
    I have an old laptop running windows xp, I want to replace it with the latest version of ubuntu. The problem is that the laptop does not support boot from usb - I checked the BIOS but the option is not working, I tried http://www.pendrivelinux.com/testing-your-system-for-usb-boot-compatibility/ but with no luck. I also tried burning the iso on a dvd but the burn process keeps failing. What options do I have? Isn't it possible to install ubuntu somehow by downloading it and replacing it with the current OS?

    Read the article

  • Do virtual machines perform better on the host HDD or USB drive?

    - by Jeremy Ricketts
    The question I'm asking is kind of general, and I'll give more specifics about my specific setup. Here's the main question though: Do virtual machines generally perform better on the host HDD or is it better to operate them from an external disk? My specific setup: A Macbook Pro with a nearly full internal SATA drive that spins at 7200. On this system I'm running large programs like Photoshop and some other RAM-intense applications. I've dedicated 2 of my 8 gigs of RAM to my VMware Fusion virtual machine, which runs Windows 7 and Visual Studio, sits on the same drive. When that thing boots up, my system really starts crawling. I have an external USB (specifics of that drive are here) which I'm thinking about moving the VM to. Obviously a USB drive is slower than my internal HDD, but maybe having two operating systems using the same disk is WORSE than putting one of them on a separate (albiet slower) disk. This a bad idea?

    Read the article

  • PS/2 mouse and USB keyboard combination with Windows 7 isn't possible?

    - by B. Roland
    I have a PS/2 keyboard, and a PS/2 mouse - I'm using an Ubuntu/Win7 (x86) combo. Yesterday I replaced the keyboard with a new USB one. Until a restart everything was fine, but after it, the cursor couldn't be moved. I opened the device manager, and it displayed Code 10 - This device will not start. If I place my PS/2 keyboard back, restart, then the mouse will work fine. I tried the USB keyboard, PS/2 mouse combo in Ubuntu, and it works there - so it is a Windows-only problem. I downloaded the mouse's driver (it's a Netscroll 200 Laser) - nothing changed. Please help me! Thanks!

    Read the article

  • USB MFP print server that works with Windows x64?

    - by hangy
    Right now, we are using the Longshine LCS-MFP101-2 to connect to our MFP device (printer/scanner combo) over LAN. However, the required driver (RMVUSB, Remote Virtual USB) cannot be installed on 64 bit Windows operating systems such as Windows XP x64 or Windows 7 x64. Since the distributor lists the product as "phased out", I do not expect any updated 64 bit drivers any time soon. :/ Because of that, I am searching for a relatively cheap SOHO MFP print server (1 USB port should be enough) which can be used with 32 bit and 64 bit versions of Windows. Do you have any ideas or recommendations? Thanks!

    Read the article

  • Debian crashed, file system is read-only and cannot backup - How Do I find/mount a USB drive?

    - by Spiros
    We have a Debian server (vm's) here at work and the server crashed after a power failure. I can only boot the system in maintenance mode, and the whole file system is set to read only. I can run fsck though maintenance mode, however I would like to get a backup of some files before I do. Problem: I cannot access the net since there is no network connectivity in maintenance mode, and for some reason I try to add a USB flash drive to the computer but I can't find it through the console. Question: how to you find/mount a usb drive on Debian? I have tried several resources from the internet but nothing worked. Is there any other way I could get a backup of my files? I cannot start networking since the filesystem is set to read only. Any help would be appreciated.

    Read the article

  • Why does booting from a 64 bit Win 8 USB install work on a 32 bit laptop?

    - by Arabella
    I upgraded a 64 bit Windows 7 laptop to Windows 8 through the Upgrade Assistant, creating a bootable USB without any problems. I installed it successfully. Before I purchased an upgrade for my 32 bit Windows 7 laptop, I decided to boot from the USB with the 64 bit ISO to see what happened. The Windows 8 install screen came up with all the options. Should it not have detected that the laptop is 32 bit and therefore the install should have given an error? I cancelled the install before it did anything, but now I want to know if I need to download the iso again after purchasing the upgrade on my 32 bit laptop? I've read the answers to this question, which confirms what is said in this article - a 32 or 64 bit iso will be downloaded depending on the hardware of the computer you are upgrading. If that is the case, then why did it boot into the install screen?

    Read the article

  • Can i connect my modem's ethernet and usb slot to two computers simultaneously??

    - by Rajasekar
    I have NETGEAR BROADBAND MODEM. I had a desktop and laptop. I had connected internet to dekstop by using Ehternet slot on my modem to my ethernet slot on my Desktop. I need internet connection on my Laptop too. There is another slot in modem which can be connect using USB cable. Whether i can connect the laptop with that USB slot in my modem and use both the computer's internet? whether it will work??

    Read the article

  • Why my backup to USB Drive is too slow?

    - by Jonas
    I have tried several backup solutions for my data and none of them was good enough. I basically want to make a copy of my files to an attached USB Drive from time to time. I don't mind starting my backups manually, since the USB Drive is not always connected. My problem is that my data contains a lot of files (a huge amount), so backing up takes forever (more than 20 hours). Using "rsync" an other similar solutions is not working because the I/O needed to check the file for changes takes longer than the time to actually copy it. Any suggestions?

    Read the article

  • Can I move files from a laptop hard drive with a corrupt sector to a USB hard drive?

    - by Corey
    I have a hard drive that is on its way out and won't boot to Windows 7. The Windows partition takes up the whole disk. I thought I would try to recover some recent files that hadn't been backed up. Assuming the files are recoverable, how can I explore the drive that has the corrupt sector and transfer files to a USB hard drive? If it helps, the laptop is able to see the USB drive when choosing a boot order. Some searching lead me to WinPE 3.0, part of the Windows Automated Install Kit. Is that a method?

    Read the article

  • Node.js Adventure - Storage Services and Service Runtime

    - by Shaun
    When I described on how to host a Node.js application on Windows Azure, one of questions might be raised about how to consume the vary Windows Azure services, such as the storage, service bus, access control, etc.. Interact with windows azure services is available in Node.js through the Windows Azure Node.js SDK, which is a module available in NPM. In this post I would like to describe on how to use Windows Azure Storage (a.k.a. WAS) as well as the service runtime.   Consume Windows Azure Storage Let’s firstly have a look on how to consume WAS through Node.js. As we know in the previous post we can host Node.js application on Windows Azure Web Site (a.k.a. WAWS) as well as Windows Azure Cloud Service (a.k.a. WACS). In theory, WAWS is also built on top of WACS worker roles with some more features. Hence in this post I will only demonstrate for hosting in WACS worker role. The Node.js code can be used when consuming WAS when hosted on WAWS. But since there’s no roles in WAWS, the code for consuming service runtime mentioned in the next section cannot be used for WAWS node application. We can use the solution that I created in my last post. Alternatively we can create a new windows azure project in Visual Studio with a worker role, add the “node.exe” and “index.js” and install “express” and “node-sqlserver” modules, make all files as “Copy always”. In order to use windows azure services we need to have Windows Azure Node.js SDK, as knows as a module named “azure” which can be installed through NPM. Once we downloaded and installed, we need to include them in our worker role project and make them as “Copy always”. You can use my “Copy all always” tool mentioned in my last post to update the currently worker role project file. You can also find the source code of this tool here. The source code of Windows Azure SDK for Node.js can be found in its GitHub page. It contains two parts. One is a CLI tool which provides a cross platform command line package for Mac and Linux to manage WAWS and Windows Azure Virtual Machines (a.k.a. WAVM). The other is a library for managing and consuming vary windows azure services includes tables, blobs, queues, service bus and the service runtime. I will not cover all of them but will only demonstrate on how to use tables and service runtime information in this post. You can find the full document of this SDK here. Back to Visual Studio and open the “index.js”, let’s continue our application from the last post, which was working against Windows Azure SQL Database (a.k.a. WASD). The code should looks like this. 1: var express = require("express"); 2: var sql = require("node-sqlserver"); 3:  4: var connectionString = "Driver={SQL Server Native Client 10.0};Server=tcp:ac6271ya9e.database.windows.net,1433;Database=synctile;Uid=shaunxu@ac6271ya9e;Pwd={PASSWORD};Encrypt=yes;Connection Timeout=30;"; 5: var port = 80; 6:  7: var app = express(); 8:  9: app.configure(function () { 10: app.use(express.bodyParser()); 11: }); 12:  13: app.get("/", function (req, res) { 14: sql.open(connectionString, function (err, conn) { 15: if (err) { 16: console.log(err); 17: res.send(500, "Cannot open connection."); 18: } 19: else { 20: conn.queryRaw("SELECT * FROM [Resource]", function (err, results) { 21: if (err) { 22: console.log(err); 23: res.send(500, "Cannot retrieve records."); 24: } 25: else { 26: res.json(results); 27: } 28: }); 29: } 30: }); 31: }); 32:  33: app.get("/text/:key/:culture", function (req, res) { 34: sql.open(connectionString, function (err, conn) { 35: if (err) { 36: console.log(err); 37: res.send(500, "Cannot open connection."); 38: } 39: else { 40: var key = req.params.key; 41: var culture = req.params.culture; 42: var command = "SELECT * FROM [Resource] WHERE [Key] = '" + key + "' AND [Culture] = '" + culture + "'"; 43: conn.queryRaw(command, function (err, results) { 44: if (err) { 45: console.log(err); 46: res.send(500, "Cannot retrieve records."); 47: } 48: else { 49: res.json(results); 50: } 51: }); 52: } 53: }); 54: }); 55:  56: app.get("/sproc/:key/:culture", function (req, res) { 57: sql.open(connectionString, function (err, conn) { 58: if (err) { 59: console.log(err); 60: res.send(500, "Cannot open connection."); 61: } 62: else { 63: var key = req.params.key; 64: var culture = req.params.culture; 65: var command = "EXEC GetItem '" + key + "', '" + culture + "'"; 66: conn.queryRaw(command, function (err, results) { 67: if (err) { 68: console.log(err); 69: res.send(500, "Cannot retrieve records."); 70: } 71: else { 72: res.json(results); 73: } 74: }); 75: } 76: }); 77: }); 78:  79: app.post("/new", function (req, res) { 80: var key = req.body.key; 81: var culture = req.body.culture; 82: var val = req.body.val; 83:  84: sql.open(connectionString, function (err, conn) { 85: if (err) { 86: console.log(err); 87: res.send(500, "Cannot open connection."); 88: } 89: else { 90: var command = "INSERT INTO [Resource] VALUES ('" + key + "', '" + culture + "', N'" + val + "')"; 91: conn.queryRaw(command, function (err, results) { 92: if (err) { 93: console.log(err); 94: res.send(500, "Cannot retrieve records."); 95: } 96: else { 97: res.send(200, "Inserted Successful"); 98: } 99: }); 100: } 101: }); 102: }); 103:  104: app.listen(port); Now let’s create a new function, copy the records from WASD to table service. 1. Delete the table named “resource”. 2. Create a new table named “resource”. These 2 steps ensures that we have an empty table. 3. Load all records from the “resource” table in WASD. 4. For each records loaded from WASD, insert them into the table one by one. 5. Prompt to user when finished. In order to use table service we need the storage account and key, which can be found from the developer portal. Just select the storage account and click the Manage Keys button. Then create two local variants in our Node.js application for the storage account name and key. Since we need to use WAS we need to import the azure module. Also I created another variant stored the table name. In order to work with table service I need to create the storage client for table service. This is very similar as the Windows Azure SDK for .NET. As the code below I created a new variant named “client” and use “createTableService”, specified my storage account name and key. 1: var azure = require("azure"); 2: var storageAccountName = "synctile"; 3: var storageAccountKey = "/cOy9L7xysXOgPYU9FjDvjrRAhaMX/5tnOpcjqloPNDJYucbgTy7MOrAW7CbUg6PjaDdmyl+6pkwUnKETsPVNw=="; 4: var tableName = "resource"; 5: var client = azure.createTableService(storageAccountName, storageAccountKey); Now create a new function for URL “/was/init” so that we can trigger it through browser. Then in this function we will firstly load all records from WASD. 1: app.get("/was/init", function (req, res) { 2: // load all records from windows azure sql database 3: sql.open(connectionString, function (err, conn) { 4: if (err) { 5: console.log(err); 6: res.send(500, "Cannot open connection."); 7: } 8: else { 9: conn.queryRaw("SELECT * FROM [Resource]", function (err, results) { 10: if (err) { 11: console.log(err); 12: res.send(500, "Cannot retrieve records."); 13: } 14: else { 15: if (results.rows.length > 0) { 16: // begin to transform the records into table service 17: } 18: } 19: }); 20: } 21: }); 22: }); When we succeed loaded all records we can start to transform them into table service. First I need to recreate the table in table service. This can be done by deleting and creating the table through table client I had just created previously. 1: app.get("/was/init", function (req, res) { 2: // load all records from windows azure sql database 3: sql.open(connectionString, function (err, conn) { 4: if (err) { 5: console.log(err); 6: res.send(500, "Cannot open connection."); 7: } 8: else { 9: conn.queryRaw("SELECT * FROM [Resource]", function (err, results) { 10: if (err) { 11: console.log(err); 12: res.send(500, "Cannot retrieve records."); 13: } 14: else { 15: if (results.rows.length > 0) { 16: // begin to transform the records into table service 17: // recreate the table named 'resource' 18: client.deleteTable(tableName, function (error) { 19: client.createTableIfNotExists(tableName, function (error) { 20: if (error) { 21: error["target"] = "createTableIfNotExists"; 22: res.send(500, error); 23: } 24: else { 25: // transform the records 26: } 27: }); 28: }); 29: } 30: } 31: }); 32: } 33: }); 34: }); As you can see, the azure SDK provide its methods in callback pattern. In fact, almost all modules in Node.js use the callback pattern. For example, when I deleted a table I invoked “deleteTable” method, provided the name of the table and a callback function which will be performed when the table had been deleted or failed. Underlying, the azure module will perform the table deletion operation in POSIX async threads pool asynchronously. And once it’s done the callback function will be performed. This is the reason we need to nest the table creation code inside the deletion function. If we perform the table creation code after the deletion code then they will be invoked in parallel. Next, for each records in WASD I created an entity and then insert into the table service. Finally I send the response to the browser. Can you find a bug in the code below? I will describe it later in this post. 1: app.get("/was/init", function (req, res) { 2: // load all records from windows azure sql database 3: sql.open(connectionString, function (err, conn) { 4: if (err) { 5: console.log(err); 6: res.send(500, "Cannot open connection."); 7: } 8: else { 9: conn.queryRaw("SELECT * FROM [Resource]", function (err, results) { 10: if (err) { 11: console.log(err); 12: res.send(500, "Cannot retrieve records."); 13: } 14: else { 15: if (results.rows.length > 0) { 16: // begin to transform the records into table service 17: // recreate the table named 'resource' 18: client.deleteTable(tableName, function (error) { 19: client.createTableIfNotExists(tableName, function (error) { 20: if (error) { 21: error["target"] = "createTableIfNotExists"; 22: res.send(500, error); 23: } 24: else { 25: // transform the records 26: for (var i = 0; i < results.rows.length; i++) { 27: var entity = { 28: "PartitionKey": results.rows[i][1], 29: "RowKey": results.rows[i][0], 30: "Value": results.rows[i][2] 31: }; 32: client.insertEntity(tableName, entity, function (error) { 33: if (error) { 34: error["target"] = "insertEntity"; 35: res.send(500, error); 36: } 37: else { 38: console.log("entity inserted"); 39: } 40: }); 41: } 42: // send the 43: console.log("all done"); 44: res.send(200, "All done!"); 45: } 46: }); 47: }); 48: } 49: } 50: }); 51: } 52: }); 53: }); Now we can publish it to the cloud and have a try. But normally we’d better test it at the local emulator first. In Node.js SDK there are three build-in properties which provides the account name, key and host address for local storage emulator. We can use them to initialize our table service client. We also need to change the SQL connection string to let it use my local database. The code will be changed as below. 1: // windows azure sql database 2: //var connectionString = "Driver={SQL Server Native Client 10.0};Server=tcp:ac6271ya9e.database.windows.net,1433;Database=synctile;Uid=shaunxu@ac6271ya9e;Pwd=eszqu94XZY;Encrypt=yes;Connection Timeout=30;"; 3: // sql server 4: var connectionString = "Driver={SQL Server Native Client 11.0};Server={.};Database={Caspar};Trusted_Connection={Yes};"; 5:  6: var azure = require("azure"); 7: var storageAccountName = "synctile"; 8: var storageAccountKey = "/cOy9L7xysXOgPYU9FjDvjrRAhaMX/5tnOpcjqloPNDJYucbgTy7MOrAW7CbUg6PjaDdmyl+6pkwUnKETsPVNw=="; 9: var tableName = "resource"; 10: // windows azure storage 11: //var client = azure.createTableService(storageAccountName, storageAccountKey); 12: // local storage emulator 13: var client = azure.createTableService(azure.ServiceClient.DEVSTORE_STORAGE_ACCOUNT, azure.ServiceClient.DEVSTORE_STORAGE_ACCESS_KEY, azure.ServiceClient.DEVSTORE_TABLE_HOST); Now let’s run the application and navigate to “localhost:12345/was/init” as I hosted it on port 12345. We can find it transformed the data from my local database to local table service. Everything looks fine. But there is a bug in my code. If we have a look on the Node.js command window we will find that it sent response before all records had been inserted, which is not what I expected. The reason is that, as I mentioned before, Node.js perform all IO operations in non-blocking model. When we inserted the records we executed the table service insert method in parallel, and the operation of sending response was also executed in parallel, even though I wrote it at the end of my logic. The correct logic should be, when all entities had been copied to table service with no error, then I will send response to the browser, otherwise I should send error message to the browser. To do so I need to import another module named “async”, which helps us to coordinate our asynchronous code. Install the module and import it at the beginning of the code. Then we can use its “forEach” method for the asynchronous code of inserting table entities. The first argument of “forEach” is the array that will be performed. The second argument is the operation for each items in the array. And the third argument will be invoked then all items had been performed or any errors occurred. Here we can send our response to browser. 1: app.get("/was/init", function (req, res) { 2: // load all records from windows azure sql database 3: sql.open(connectionString, function (err, conn) { 4: if (err) { 5: console.log(err); 6: res.send(500, "Cannot open connection."); 7: } 8: else { 9: conn.queryRaw("SELECT * FROM [Resource]", function (err, results) { 10: if (err) { 11: console.log(err); 12: res.send(500, "Cannot retrieve records."); 13: } 14: else { 15: if (results.rows.length > 0) { 16: // begin to transform the records into table service 17: // recreate the table named 'resource' 18: client.deleteTable(tableName, function (error) { 19: client.createTableIfNotExists(tableName, function (error) { 20: if (error) { 21: error["target"] = "createTableIfNotExists"; 22: res.send(500, error); 23: } 24: else { 25: async.forEach(results.rows, 26: // transform the records 27: function (row, callback) { 28: var entity = { 29: "PartitionKey": row[1], 30: "RowKey": row[0], 31: "Value": row[2] 32: }; 33: client.insertEntity(tableName, entity, function (error) { 34: if (error) { 35: callback(error); 36: } 37: else { 38: console.log("entity inserted."); 39: callback(null); 40: } 41: }); 42: }, 43: // send reponse 44: function (error) { 45: if (error) { 46: error["target"] = "insertEntity"; 47: res.send(500, error); 48: } 49: else { 50: console.log("all done"); 51: res.send(200, "All done!"); 52: } 53: } 54: ); 55: } 56: }); 57: }); 58: } 59: } 60: }); 61: } 62: }); 63: }); Run it locally and now we can find the response was sent after all entities had been inserted. Query entities against table service is simple as well. Just use the “queryEntity” method from the table service client and providing the partition key and row key. We can also provide a complex query criteria as well, for example the code here. In the code below I queried an entity by the partition key and row key, and return the proper localization value in response. 1: app.get("/was/:key/:culture", function (req, res) { 2: var key = req.params.key; 3: var culture = req.params.culture; 4: client.queryEntity(tableName, culture, key, function (error, entity) { 5: if (error) { 6: res.send(500, error); 7: } 8: else { 9: res.json(entity); 10: } 11: }); 12: }); And then tested it on local emulator. Finally if we want to publish this application to the cloud we should change the database connection string and storage account. For more information about how to consume blob and queue service, as well as the service bus please refer to the MSDN page.   Consume Service Runtime As I mentioned above, before we published our application to the cloud we need to change the connection string and account information in our code. But if you had played with WACS you should have known that the service runtime provides the ability to retrieve configuration settings, endpoints and local resource information at runtime. Which means we can have these values defined in CSCFG and CSDEF files and then the runtime should be able to retrieve the proper values. For example we can add some role settings though the property window of the role, specify the connection string and storage account for cloud and local. And the can also use the endpoint which defined in role environment to our Node.js application. In Node.js SDK we can get an object from “azure.RoleEnvironment”, which provides the functionalities to retrieve the configuration settings and endpoints, etc.. In the code below I defined the connection string variants and then use the SDK to retrieve and initialize the table client. 1: var connectionString = ""; 2: var storageAccountName = ""; 3: var storageAccountKey = ""; 4: var tableName = ""; 5: var client; 6:  7: azure.RoleEnvironment.getConfigurationSettings(function (error, settings) { 8: if (error) { 9: console.log("ERROR: getConfigurationSettings"); 10: console.log(JSON.stringify(error)); 11: } 12: else { 13: console.log(JSON.stringify(settings)); 14: connectionString = settings["SqlConnectionString"]; 15: storageAccountName = settings["StorageAccountName"]; 16: storageAccountKey = settings["StorageAccountKey"]; 17: tableName = settings["TableName"]; 18:  19: console.log("connectionString = %s", connectionString); 20: console.log("storageAccountName = %s", storageAccountName); 21: console.log("storageAccountKey = %s", storageAccountKey); 22: console.log("tableName = %s", tableName); 23:  24: client = azure.createTableService(storageAccountName, storageAccountKey); 25: } 26: }); In this way we don’t need to amend the code for the configurations between local and cloud environment since the service runtime will take care of it. At the end of the code we will listen the application on the port retrieved from SDK as well. 1: azure.RoleEnvironment.getCurrentRoleInstance(function (error, instance) { 2: if (error) { 3: console.log("ERROR: getCurrentRoleInstance"); 4: console.log(JSON.stringify(error)); 5: } 6: else { 7: console.log(JSON.stringify(instance)); 8: if (instance["endpoints"] && instance["endpoints"]["nodejs"]) { 9: var endpoint = instance["endpoints"]["nodejs"]; 10: app.listen(endpoint["port"]); 11: } 12: else { 13: app.listen(8080); 14: } 15: } 16: }); But if we tested the application right now we will find that it cannot retrieve any values from service runtime. This is because by default, the entry point of this role was defined to the worker role class. In windows azure environment the service runtime will open a named pipeline to the entry point instance, so that it can connect to the runtime and retrieve values. But in this case, since the entry point was worker role and the Node.js was opened inside the role, the named pipeline was established between our worker role class and service runtime, so our Node.js application cannot use it. To fix this problem we need to open the CSDEF file under the azure project, add a new element named Runtime. Then add an element named EntryPoint which specify the Node.js command line. So that the Node.js application will have the connection to service runtime, then it’s able to read the configurations. Start the Node.js at local emulator we can find it retrieved the connections, storage account for local. And if we publish our application to azure then it works with WASD and storage service through the configurations for cloud.   Summary In this post I demonstrated how to use Windows Azure SDK for Node.js to interact with storage service, especially the table service. I also demonstrated on how to use WACS service runtime, how to retrieve the configuration settings and the endpoint information. And in order to make the service runtime available to my Node.js application I need to create an entry point element in CSDEF file and set “node.exe” as the entry point. I used five posts to introduce and demonstrate on how to run a Node.js application on Windows platform, how to use Windows Azure Web Site and Windows Azure Cloud Service worker role to host our Node.js application. I also described how to work with other services provided by Windows Azure platform through Windows Azure SDK for Node.js. Node.js is a very new and young network application platform. But since it’s very simple and easy to learn and deploy, as well as, it utilizes single thread non-blocking IO model, Node.js became more and more popular on web application and web service development especially for those IO sensitive projects. And as Node.js is very good at scaling-out, it’s more useful on cloud computing platform. Use Node.js on Windows platform is new, too. The modules for SQL database and Windows Azure SDK are still under development and enhancement. It doesn’t support SQL parameter in “node-sqlserver”. It does support using storage connection string to create the storage client in “azure”. But Microsoft is working on make them easier to use, working on add more features and functionalities.   PS, you can download the source code here. You can download the source code of my “Copy all always” tool here.   Hope this helps, Shaun All documents and related graphics, codes are provided "AS IS" without warranty of any kind. Copyright © Shaun Ziyan Xu. This work is licensed under the Creative Commons License.

    Read the article

< Previous Page | 189 190 191 192 193 194 195 196 197 198 199 200  | Next Page >