BlackBerry gets free international calls Comments

The Register - Jun 29, '07 5:09am

EQO service uses local minutes and data instead

Internet phone service specialist EQO has added BlackBerry to the list of around 400 handsets that it says can now make local-rate or free international calls - without using Wi-Fi or VOIP to the handset. Users also get cheap text messaging and free access to all the popular IM services, the company said.…

Be the first to comment this (no registration)

LINQ to SQL (Part 3 - Querying our Database) Comments

ASP.NET Weblogs by ScottGu - Jun 29, '07 4:11am

Last month I started a blog post series covering LINQ to SQL.  LINQ to SQL is a built-in O/RM (object relational mapping) framework that ships in the .NET Framework 3.5 release, and which enables you to easily model relational databases using .NET classes.  You can then use LINQ expressions to query the database with them, as well as update/insert/delete data from it.

Below are the first two parts of my LINQ to SQL series:

In today's blog post I'll be going into more detail on how to use the data model we created in the Part 2 post, and show how to use it to query data within an ASP.NET project.

Northwind Database Modeled using LINQ to SQL

In Part 2 of this series I walked through how to create a LINQ to SQL class model using the LINQ to SQL designer that is built-into VS 2008.  Below is the class model that we created for the Northwind sample database:

Retrieving Products

Once we have defined our data model classes above, we can easily query and retrieve data from our database.  LINQ to SQL enables you to do this by writing LINQ syntax queries against the NorthwindDataContext class that we created using the LINQ to SQL designer above.

For example, to retrieve and iterate over a sequence of Product objects I could write code like below:

In the query above I have used a "where" clause in my LINQ syntax query to only return those products within a specific category.  I am using the CategoryID of the Product to perform the filter.

One of the nice things above LINQ to SQL is that I have a lot of flexibility in how I query my data, and I can take advantage of the associations I've setup when modeling my LINQ to SQL data classes to perform richer and more natural queries against the database.  For example, I could modify the query to filter by the product's CategoryName instead of its CategoryID by writing my LINQ query like so:

Notice above how I'm using the "Category" property that is on each of the Product objects to filter by the CategoryName of the Category that the Product belongs to.  This property was automatically created for us by LINQ to SQL because we modeled the Category and Product classes as having a many to one relationship with each other in the database.

For another simple example of using our data model's association relationships within queries, we could write the below LINQ query to retrieve only those products that have had 5 or more orders placed for them:

Notice above how we are using the "OrderDetails" collection that LINQ to SQL has created for us on each Product class (because of the 1 to many relationship we modeled in the LINQ to SQL designer).

Visualizing LINQ to SQL Queries in the Debugger

Object relational mappers like LINQ to SQL handle automatically creating and executing the appropriate SQL code for you when you perform a query or update against their object model. 

One of the biggest concerns/fears that developers new to ORMs have is "but what SQL code is it actually executing?"  One of the really nice things about LINQ to SQL is that it makes it super easy to see exactly what SQL code it is executing when you run your application within the debugger.

Starting with Beta2 of Visual Studio 2008 you can use a new LINQ to SQL visualizer plug-in to easily see (and test out) any LINQ to SQL query expression.  Simply set a breakpoint and then hover over a LINQ to SQL query and click the magnify glass to pull up its expression visualizer within the debugger:

This will then bring up a dialog that shows you the exact SQL that LINQ to SQL will use when executing the query to retrieve the Product objects:

If you press the "Execute" button within this dialog it will allow you to evaluate the SQL directly within the debugger and see the exact data results returned from the database:

This obviously makes it super easy to see precisely what SQL query logic LINQ to SQL is doing for you.  Note that you can optionally override the raw SQL that LINQ to SQL executes in cases where you want to change it - although in 98% of scenarios I think you'll find that the SQL code that LINQ to SQL executes is really, really good.

Databinding LINQ to SQL Queries to ASP.NET Controls

LINQ queries return results that implement the IEnumerable interface - which is also an interface that ASP.NET server controls support to databind object.  What this means is that you can databind the results of any LINQ, LINQ to SQL, or LINQ to XML query to any ASP.NET control.

For example, we could declare an <asp:gridview> control in a .aspx page like so:

I could then databind the result of the LINQ to SQL query we wrote before to the GridView like so:

This will then generate a page that looks like below:

Shaping our Query Results

Right now when we are evaluating our product query, we are retrieving by default all of the column data needed to populate the Product entity classes. 

For example, this query to retrieve products:

Results in all of this data being returned:

 

Often we only want to return a subset of the data about each product.  We can use the new data shaping features that LINQ and the new C# and VB compilers support to indicate that we only want a subset of the data by modifying our LINQ to SQL query like so:

This will result in only this data subset being returned from our database (as seen via our debug visualizer):

What is cool about LINQ to SQL is that I can take full advantage of my data model class associations when shaping my data.  This enables me to express really useful (and very efficient) data queries.  For example, the below query retrieves the ID and Name from the Product entity, the total number of orders that have been made for the Product, and then sums up the total revenue value of each of the Product's orders:

The expression to the right of the "Revenue" property above is an example of using the "Sum" extension method provided by LINQ.  It takes a Lambda expression that returns the value of each product order item as an argument. 

LINQ to SQL is smart and is able to convert the above LINQ expression to the below SQL when it is evaluated (as seen via our debug visualizer):

The above SQL causes all of the NumOrders and Revenue value computations to be done inside the SQL server, and results in only the below data being retrieved from the database (making it really fast):

We can then databind the result sequence against our GridView control to generate pretty UI:

BTW - in case you were wondering, you do get full intellisense within VS 2008 when writing these types of LINQ shaping queries:

In the example above I'm declaring an anonymous type that uses object initialization to shape and define the result structure.  What is really cool is that VS 2008 provides full intellisense, compilation checking, and refactoring support when working against these anonymous result sequences as well:

 

Paging our Query Results

One of the common needs in web scenarios is to be able to efficiently build data paging UI.  LINQ provides built-in support for two extension methods that make this both easy and efficient - the Skip() and Take() methods.

We can use the Skip() and Take() methods below to indicate that we only want to return 10 product objects - starting at an initial product row that we specify as a parameter argument:

Note above how I did not add the Skip() and Take() operator on the initial products query declaration - but instead added it later to the query (when binding it to my GridView datasource).  People often ask me "but doesn't this mean that the query first grabs all the data from the database and then does the paging in the middle tier (which is bad)?"  No.  The reason is that LINQ uses a deferred execution model - which means that the query doesn't actually execute until you try and iterate over the results. 

One of the benefits of this deferred execution model is that it enables you to nicely compose queries across multiple code statements (which improves code readability).  It also enables you to compose queries out of other queries - which enables some very flexible query composition and re-use scenarios.

Once I have the BindProduct() method defined above, I can write the code below in my page to retrieve the starting index from the querystring and cause the products to be paged and displayed in the gridview:

This will then give us a products page, filtered to list only those products with more than 5 orders, showing dynamically computed product data, and which is pageable via a querystring argument:

Note: When working against SQL 2005, LINQ to SQL will use the ROW_NUMBER() SQL function to perform all of the data paging logic in the database.  This ensures that only the 10 rows of data we want in the current page view are returned from the database when we execute the above code:

This makes it efficient and easy to page over large data sequences.

Summary

Hopefully the above walkthrough provides a good overview of some of the cool data query opportunities that LINQ to SQL provides.  To learn more about LINQ expressions and the new language syntax supported by the C# and VB compilers with VS 2008, please read these earlier posts of mine:

In my next post in this LINQ to SQL series I'll cover how we can cleanly add validation logic to our data model classes, and demonstrate how we can use it to encapsulate business logic that executes every time we update, insert, or delete our data.  I'll then cover more advanced lazy and eager loading query scenarios, how to use the new <asp:LINQDataSource> control to support declarative databinding of ASP.NET controls, optimistic concurrency error resolution, and more.

Hope this helps,

Scott

Be the first to comment this (no registration)

MySpace Likely To Open Platform To 3rd Party Developers Comments

TechCrunch by Duncan Riley - Jun 29, '07 4:13am
MySpace founder Chris DeWolfe has indicated that MySpace will likely open its platform to 3rd party developers, according to a report at FT.com The move will see MySpace following in the footsteps of Facebook; Facebook’s wildly popular F8 release has seen in excess of 1000 additional applications made available to Facebook users and has driven enormous [...]
Be the first to comment this (no registration)

Delphi to Finally Support .NET 2.0 Comments

InfoQ Personalized Feed for Unregistered User - Registered to upgrade! - Jun 29, '07 1:46am
In a roadmap posted on the CodeGear site, it has been announced that Delphi.NET will be upgraded to the .NET 2.0 framework. This is a major step for the platform that until recently was thought abandoned.
Be the first to comment this (no registration)

IPhone launch day arrives (AP) Comments

Yahoo! News: Technology News - Jun 29, '07 9:51am

A person waiting in line for the new iPhone takes a nap in front of the Apple store on Fifth Avenue in New York, Thursday, June 28, 2007.  The iPhone will be on sale starting tomorrow, Friday, at 6 p.m.   (AP Photo/Seth Wenig)AP - After six months of unprecedented hype, thousands of people Friday will get their hands on the iPhone, the new cell phone that Apple Inc. is banking on to become its third core business next to its moneymaking iPod players and Macintosh computers.


Be the first to comment this (no registration)

Django: Python Framework Comments

O'Reilly Radar by Brady Forrest - Jun 28, '07 8:55pm
Django, the Python web-application framework, now has its own gallery site. Djangosites now has 159 sites listed. To be listed the site must have been made with Django. You can view sites by rating, comment, and latest. Djangosites also...
Be the first to comment this (no registration)

Visto to offer Exchange, Notes e-mail on iPhone Comments

InfoWorld: Top News by Nancy_Gohring@idg.com (Nancy Gohring) - Jun 28, '07 7:46pm

(InfoWorld) - Push e-mail provider Visto says it will be able to send enterprise e-mail to iPhones starting later this year.

Microsoft Exchange and Lotus Domino e-mail users will be able to send and receive messages on the iPhone, either as an individual user or on a corporatewide basis. Apple's much-hyped iPhone goes on sale on Friday.

Individual users will download an application to their PCs. As e-mail messages arrive, that application transfers them from the PC to Visto's network operation center and then on to the user's iPhone. Users will automatically receive the e-mail in the standard client software that comes with the iPhone, said Haniff Somani, vice president and chief architect at Visto.

Users must leave the PC on for the e-mail messages to reach their iPhone. To set up the service, a user will enter Visto's server address into the IMAP application on the phone, he said. IMAP is a standard messaging protocol.

An enterprise could also buy server software that would push e-mail out to all the iPhone users in the company in a process that works in a similar way to the PC application.

Early reviewers of the iPhone have written that users will be able to receive Exchange e-mails on the phone, but Somani pointed out some reasons that might not be a popular idea at enterprises. In order to push Exchange e-mail to the iPhone directly, IT administrators would have to open a hole in their firewall that allows the IMAP data to flow back and forth, he said. That can be dangerous because it opens a door to potentially malicious activities.

Analysts agreed. "IMAP is not something they want to open up," said Ken Dulaney, an analyst at Gartner. "Most enterprises, when they hear that, say 'There's no way I'm doing that.'"

In addition, the direct IMAP services usually have poor performance, he said.

With Visto's service, the enterprise doesn't have to open the IMAP port because the Visto server resides behind the firewall, Somani said.

Ideally, Apple would license Microsoft's ActiveSync in order to support Exchange e-mail on the phones in a more robust and secure way, Dulaney said. That's how Nokia, for example, supports push e-mail to certain devices, he said.

He suggests that enterprises may be wary of the Visto offering because Visto is associated with mobile operator-based services and enterprises don't always trust operators with such services. In this case, Visto is hosting the network operations center itself but must still work with AT&T, which has said it will enable IMAP in its network for the service, Visto said.

Starting late in the third quarter, Visto plans to offer a beta version of the service that will be free to use for 60 days. iPhone users can register their interest in the beta on Visto's site. Visto isn't yet saying how much it will charge for service.

Visto typically requires users to download a small application on their phones that improves the speed with which they get mail and consumes less data than IMAP, Somani said. However, Apple is only allowing third-party applications for the iPhone that are browser-based, so companies like Visto can't write software that can be loaded onto the phones.

In April, a source at AT&T said the operator was planning to support the iPhone from a billing and customer support perspective for enterprise customers. However, an FAQ recently posted to AT&T's Web site says the iPhone will only be available to consumer accounts.

Be the first to comment this (no registration)

Is Linux heading for civil war? Comments

DesktopLinux.com - Jun 29, '07 11:32am
Opinion -- Microsoft's partnership with Novell got a lot of people in the open-source community fired up. Since then, Microsoft's Linux deals with Linspire and Xandros have just thrown gasoline on the fire.
Be the first to comment this (no registration)

MySpace again under phishing attack Comments

InfoWorld: Top News by Robert_McMillan@idg.com (Robert McMillan) - Jun 28, '07 4:01pm

(InfoWorld) - Phishers have been using compromised MySpace.com accounts to attack unsuspecting Web surfers, security experts said Thursday.

The attack is thought to have infected several thousand PCs according to reports from ISPs, said Johannes Ullrich, chief research officer for the SANS Institute. Ullrich has documented the issue on the SANS Internet Storm Center blog.

Lawrence Baldwin, chief forensics officer with security vendor MyNetWatchman, discovered the threat Tuesday, and The Washington Post reported on it late Wednesday.

Criminals have managed to install fake navigation bars on the top of MySpace.com user profile pages that, when clicked, lead to malicious computers that attempt to infect the victim's computer. The attack uses several known Internet Explorer flaws that have been fixed, so users who have installed the latest Microsoft patches are not at risk, security experts said.

The code was installed on "maybe a few dozen," MySpace.com pages, most of which have been removed by administrators at the social-networking site, Ullrich said. MySpace.com representatives did not respond to requests for comment on Thursday.

Two components comprise the attack. It attempts to install malicious botnet software on victims' computers, and it uses these infected computers to try to steal MySpace credentials in a phishing attack.

Computers that are compromised by the attack become infected with malicious botnet software known as "flux bot," which makes them unwitting participants in the phishing scam. After the malicious Web site attempts to install the flux bot code, it then presents victims with a fake MySpace.com login page, which tries to extract their MySpace.com user name and password.

Baldwin allowed one of his test computers to be infected with flux bot and found that attackers were remarkably successful at stealing passwords. "I operated as a flux node for about 12 hours and did a full audit of all the traffic coming into my machine. I was probably getting close to 60 MySpace users an hour surfing to my flux node. And at least a quarter of those actually gave up their credentials."

Baldwin estimates that the attackers were using another 200 compromised flux bot machines in their attack.

Because MySpace.com allows users to install their own HTML code and is visited by such a large number of technically unsophisticated users, it has become an attractive target for these types of attacks.

Last December, hackers created a worm that quickly spread across MySpace.com, stealing user names and passwords. That worm exploited a flaw in Apple's QuickTime media player.

Be the first to comment this (no registration)

Change Routes Faster in Google Maps Comments

Google Operating System by Ionut Alex Chitu - Jun 28, '07 4:09pm
Google Maps lets you set intermediary points in your route and automatically adjusts the directions to the new conditions. You just have to drag the blue line to change its shape.

For example, after getting the directions from Mountain View to Palo Alto, I could change the route to pass through Stanford.

Another way to create complex routes is to add destinations in the sidebar and use drag and drop to change their order.




{ Thanks, Chris. }
Be the first to comment this (no registration)
© 2007 · wiredb.com · All trademarks are properties of their respective owners.