Internet Explorer 9 RTW - Available for Download: Experience a More Beautiful Web

15 martie 2011, 13:51 de skorpionking

Microsoft released the final general availability of Windows Internet Explorer 9 in 39 languages across the world. Download and experience it.

The best experience of the web is on Windows with Internet Explorer 9. IE9 redefines fast with a fully hardware-accelerated browser, harnessing the full power of the PC through Windows. IE9 delivers a clean, site-centric experience, putting the focus on your sites. People can use what Windows offers around the browser – for example, pinning sites to the taskbar just as they pin applications in Windows 7. IE9 delivers new protections from real-world threats to safety, privacy, and reliability that make it the world’s most trusted browser. With HTML5 at its core, IE9 enables a more interoperable web, so developers can write the same markup across browsers and the web.


This short video gives you a small sense of what Microsoft have been able to achieve as a company with the IE9 release. To learn more about what’s in IE9, and to start experiencing a more beautiful web please visit: http://beautyoftheweb.com

After you download, make your perfect Windows 7 taskbar with IE9. Pin Hotmail, MSN, and Bing or any favourite site you might have. Keep your favorite social, media, and content experiences one click away. Enjoy the web with IE9!


Here are 9 facts about IE9 that may surprise people:

1. IE9 is the fastest adopted beta in IE browser history. With over 40M downloads and a usage share on Windows 7 well over 2% globally, IE9 adoption has more than surpassed expectations.
2. IE9 is enterprise ready. IE9 is ready to go with your Windows 7 deployments.
3. IE9 has the fastest JavaScript engine in the industry. Script is one of many factors in performance. On a commonly used micro-benchmark, IE9’s improved JavaScript performance now holds the top spot in the industry, an improvement of almost 18 times from IE8.
4. IE9 is the only fully hardware-accelerated browser. All graphics, video and text in IE9 are hardware-accelerated. Microsoft re-architected IE9 to take full advantage of the Windows PC. IE9 was the first to introduce this concept and other browsers have been scrambling to catch-up. See the difference for yourself.
5. IE9 treats your favorite sites like apps. The site is the center of attention in IE9’s new frame. When you pin a site to the taskbar, your experience is even better. Over 250 of the world’s top sites have already taken advantage of Jump Lists, notifications, and thumbnail previews to make their sites more app-like. Web site publishers are seeing close to a 50% increase in engagement from their IE9 customers through pinned sites.
6. IE9 protects against 99% of socially-engineered malware. Malware is the #1 threat on the internet today. With Microsoft SmartScreen and the new SmartScreen application reputation feature in IE9, no other browser comes close in protecting consumers from these real-world threats. IE9 is 33 times better than Chrome and over 5 times better than Firefox.
7. IE9 is the only browser with integrated online tracking protection for consumers. Microsoft changed the browser and industry landscape with the introduction of IE9’s Tracking Protection, providing the only built-in browser solution protecting consumers today.
8. IE9 is leading with site-ready HTML5 support. IE9 is all in when it comes to delivering developers new standards-based capabilities with HTML5. Microsoft co-chairs the W3C HTML5 working group and during the IE9 release has contributed almost 6000 test cases to the W3C and international standards bodies. Currently, IE9 has the best conformance with W3C HTML5.
9. IE9 has had the strongest press in IE history.


Microsoft Announces Support of System on a Chip Architectures From Intel, AMD, and ARM for Next Version of Windows

6 ianuarie 2011, 16:19 de skorpionking

Microsoft Corp. today announced at 2011 International CES that the next version of Windows will support System on a Chip (SoC) architectures, including ARM-based systems from partners NVIDIA Corp., Qualcomm Inc. and Texas Instruments Inc. On the x86 architecture, Intel Corporation and AMD continue their work on low-power SoC designs that fully support Windows, including support for native x86 applications. SoC architectures will fuel significant innovation across the hardware spectrum when coupled with the depth and breadth of the Windows platform.

At today’s announcement, Microsoft demonstrated the next version of Windows running on new SoC platforms from Intel running on x86 architecture and from NVIDIA, Qualcomm and Texas Instruments on ARM architecture. The technology demonstration included Windows client support across a range of scenarios, such as hardware-accelerated graphics and media playback, hardware-accelerated Web browsing with the latest Microsoft Internet Explorer, USB device support, printing and other features customers have come to expect from their computing experience. Microsoft Office running natively on ARM was also shown as a demonstration of the potential of Windows platform capabilities on ARM architecture.

Windows will continue its industry-leading support across the widest possible set of devices, delivering the breadth and choice that customers demand. Intel and AMD continue to evolve and improve the x86 platforms, including new low-power systems, and advance new designs such as the recently announced 2nd Generation Intel® Core™ processor family and AMD’s Fusion accelerated processing units (APUs). NVIDIA, Qualcomm and Texas Instruments are joining Microsoft to provide ARM-based designs for the first time.

“With today’s announcement, we’re showing the flexibility and resiliency of Windows through the power of software and a commitment to world-class engineering. We continue to evolve Windows to deliver the functionality customers demand across the widest variety of hardware platforms and form factors,” said Steven Sinofsky, president of the Windows and Windows Live Division at Microsoft.

Microsoft executives Steven Sinofsky, President, Windows and Windows Live Division, and Mike Angiulo, Corporate Vice President, Windows Planning, Hardware and PC Ecosystem, demonstrate new and upcoming Windows-based PCs at the Consumer Electronics Show (CES) in Las Vegas, NV. Jan. 5, 2011.


SoC architectures consolidate the major components of a computing device onto a single package of silicon. This consolidation enables smaller, thinner devices while reducing the amount of power required for the device, increasing battery life and making possible always-on and always-connected functionality. With support of SoC in the next version of the Windows client, Microsoft is enabling industry partners to design and deliver the widest range of hardware ever.


Microsoft Press free eBooks

27 octombrie 2010, 14:55 de skorpionking

From Microsoft Press web site, here’s a list of some of Microsoft Press free eBooks:

 

Free eBook: Moving to Microsoft Visual Studio 2010 (10 chapters by Patrice Pelland, Pascal Paré, and Ken Haines)

Free eBook: Introducing Microsoft SQL Server 2008 R2 (10 chapters by Ross Mistry and Stacia Misner)

Free eBook: Programming Windows Phone 7 Series (DRAFT Preview) (6 chapters by Charles Petzold)

Free eBook: Petzold’s Programming Windows Phone 7 (Special Excerpt 2) (newer than the eBook above; 11 chapters by Charles Petzold)

Free eBook: Own Your Future: Update Your Skills with Resources and Career Ideas from Microsoft (8 chapters by Katherine Murray)

Free eBook: Understanding Microsoft Virtualization Solutions (Second Edition) (6 chapters by Mitch Tulloch)

Free eBook: First Look Microsoft Office 2010 (14 chapters by Katherine Murray)

Free eBook: Windows 7 troubleshooting tips (short eBook by Mitch Tulloch)

Free eBook: Introducing Windows Server 2008 R2 (9 chapters by Charlie Russel and Craig Zacker)

Free eBook: Deploying Windows 7, Essential Guidance (10 chapters from the Windows 7 Resource Kit and 6 TechNet articles)


BlogEngine.NET 1.6

19 martie 2010, 15:51 de skorpionking

A fost lansata versiunea BlogEngine.NET 1.6 la inceputul lunii februarie. Upgrade-ul a durat 30 minute, inclusiv backup si upload pe site.

"For those who receive a steady dose of comment spam (and who doesn't!), a new powerful Comment Management and Comment Spam Filtering infrastruture has been added in version 1.6.  Comments across all posts can be viewed, edited, deleted or approved in one convenient area.  Comments can still be manually moderated, but now moderation can be automated by running comments thru remote or local comment spam validation services.  Anyone can easily build new comment spam filters and plug them into BlogEngine.NET.  It's just as simple as adding custom Extensions and Widgets is.

The other notable feature in version 1.6 is support for multiple widget zones.  You can now place widgets anywhere on your site, and even move widgets from one zone to another."


Windows 7 se lanseaza azi

22 octombrie 2009, 09:33 de skorpionking

Windows 7 se lanseaza azi oficial pentru toti utilizatorii. Se poate instala direct (clean install) sau face upgrade de la Windows 7. Printre noutati, pe langa faptul ca e mai performant, mai sigur, mai stabil, as mentiona: bara de activitati, liste rapide, cautarea windows, gestionarea dispozitivelor, a retelelor, grupuri de domiciliu, backup, bitlocker, touch, suport 64 biti, etc. Pentru o lista completa vizitati pagina Windows 7.

Microsoft: Windows 7 Home

Windows 7 is available worldwide starting today to everyone!

Here is a brief overview of the most important new features:


·          Windows 7 is more than impressive with its new, intuitive user interface that is more convenient for users and as such, makes working with a PC even easier and faster.

·          More input options, for example using Multi-Touch – operation for touch-sensitive screens with several fingers at the same time.

·          Using the HomeGroup several users can link up quickly to access files, music, photos and videos – regardless of where these have been saved.

·          It also provides more options for personalizing and creating individualized Desktops.


.NET 60 seconds code : using ADO.NET Synchronization Services 1.0

1 iulie 2009, 14:08 de skorpionking

The online/offline scenarios are a piece of cake right now thanks to the Microsoft ADO.NET Synchronization Services and SQL Server Compact Edition. Also SQL 2008 Server Express Edition can be used for these scenarios instead of SQL Server Compact Edition.

All you have to do is to download the framework (samples are available here) and open Visual Studio, create a windows application and now, let's add a new item to the project, "Local Data Cache".

What this is going to do is create a local SQL CE database that will be used by the client application, and we will eventually write the code to sync up this database with our master database, for selected tables. The best part of the Sync framework is its support for Visual Studio 2008. It provides a nice wizard for the whole set up, making our life a lot easier.

As soon as you click the "Add" button, the next screen pops up, which will be used to set up your local cached database. On the screen, select "Server Connection". Now, if you have previously used the Windows Forms application, you may already have a SQL connection setup, like in my case; otherwise, click the New button and create the connection string for your master SQL Server. For this example, I will use our favorite "Northwind"  database. Now that you have given your server connection information, the wizard creates a client connection. This is nothing but a new SQL CE database that you have just created. Also, now that the wizard is aware of the server database, it will allow you to add the tables to be cached. Click the "Add" button on the left bottom of the screen.

Select the tables that you would like to cache on the client side. Now, remember, you do not want to select all the tables as it's not practical to cache the whole master database on the client machine, as usually, the client machines in such cases as laptops, tablets, and PDAs may not have enough storage. In the above scenario, I have selected three tables. On the right side of the screen, you will get some more setting options. In most cases, you would like to keep them to the default settings.

The first option asks you what data you want to download. new and incremental changes are done only after the first synchronization. Also, the sync framework is going to add two new columns to your tables to keep track of the last update and new inserts. You can choose existing columns if you are already tracking it. Also, it will create a history table named TABLENAME_Tombstone. This is used to keep track of deleted rows. With SQL Server 2008, you would not need either of them, as SQL Server has standard change tracking. So, with SQL Server 2008, it will not add any additional columns or a tombstone table.

Select "OK", and "OK" on the first wizard screen. This will create a local cached database with the tables you selected. On the first wizard screen, you also have options to select the server and the client project location. In an N tier application, you can select your server and client application to be different. You can optionally select to create synchronization components for the client only or the server only. By default, it's the client and the server.

After hitting OK on this screen, the wizard will create a local database (.sdf); in our case, it created Northwind.sdf. It will then ask you to select tables to be added to your dataset. This will allow easy creation of the grid on the form with a typed dataset.

You can open the dataset and add some more tables from the Server Explorer, but those tables will not be cached on the client machine. They will be available to use in the application, but the application will go back to the server each time those tables are accessed. Now, go back to your form and open your data sources (show the data sources under the Data menu). Select the Customers table and select the DataGridView, and drag the table on the form. This should add the GridView to the form with all the navigation controls. I really like this part of the design, just drag and drop and you are ready to go.

In order to activate the sync process, we will add the button to the grid's tab strip. Usually, you will have a service running in the background that will check for network availability, and if its available, it will initiate the sync process. We will try to keep it simple, and will call the sync process on the click of a button.

Double click the button, and add the code to sync the databases. Now, it's just three lines of code, and out of those, two lines have been provided right in the wizard.

Me.NorthwindDataSet.Employee.Merge(CustomersTableAdapter.GetData())

And that's it, your first occasionally connected WinForms application is ready to run. Browse through the data on the client side. Now, make some changes to the data on the server. The data on the client is still old as we have not initiated the sync process. Click the Sync button and your client gets updated with new data. Now, try changing the data on the client and see if it is reflected on the server. It wont as, by default, the sync works unidirectional. But again, they have made it real easy to change it to bidirectional. All you have to do is right click LocalDataCache1.sync, and select View Code. You will see the SyncAgent class; just add the following code:

Partial Public Class LocalDataCache1SyncAgent
    Private Sub OnInitialized()
        Me.Customers.SyncDirection = _
           Microsoft.Synchronization.Data.SyncDirection.Bidirectional
    End Sub
End Class

And now, your application should sync up in both directions. Try changing some data on the client side, click the "Save" button on the tool bar, and then click the Sync button. Data on the server should reflect the changes done on the client side; but wait, have we got us in trouble by allowing bidirectional sync? What happens if both the client and the server update the same record, how will it work? Again, the framework at your rescue. All such conflicts raise an ApplyChangesFailed event for the server sync provider, which you can do by implementing a partial class for your server sync provider. Below is a sample of how to do it.

By default, the changes from the server are overwritten on the client. You can change that logic to say that in the case of ApplyChangesFailed, force changes from the client to be over written to the server.

Partial Class LocalDataCache1ServerSyncProvider

    Private Sub LocalDataCache1ServerSyncProvider_ApplyChangeFailed _
            (ByVal sender As Object, _
            ByVal e As Microsoft.Synchronization.Data.ApplyChangeFailedEventArgs) _
            Handles Me.ApplyChangeFailed
        e.Action = Microsoft.Synchronization.Data.ApplyAction.RetryWithForceWrite
    End Sub
End Class

In this case the changes from client are always written to the server. Again this may not be a practical solution as in most case you may want to do some kind of validations before accepting either client or server changes. And the best part is that even that's easy to implement. All you do is take the client changes and server changes and apply your business rule.

Private Sub LocalDataCache1ServerSyncProvider_ApplyChangeFailed _
        (ByVal sender As Object, _
        ByVal e As Microsoft.Synchronization.Data.ApplyChangeFailedEventArgs) _
        Handles Me.ApplyChangeFailed

    Dim clientChanges As DataTable = e.Conflict.ClientChange
    Dim serverChanges As DataTable = e.Conflict.ServerChange

    If (clientChanges.Rows(0)("ModifiedDate") > _
              serverChanges.Rows(0)("ModifiedDate") Then
        e.Action = _
          Microsoft.Synchronization.Data.ApplyAction.RetryWithForceWrite
    End If
End Sub

The complete code, in C#, a bit modified (with BackgroundWorker) can be downloaded from here: NorthwindSync.zip (92,70 kb)

Happy programming :-)


Visual Basic 6.0 string operations performance - faster string concatenation

1 iulie 2009, 13:27 de skorpionking

Hi all, who thought that VB 6.0 is dead? Recently I had to optimize a VB 6.0 LOB application and a problem was that strings operations are very slow in Visual Basic 6.0 .Unfortunately, many of the string functions are not optimized for speed. This is why VB6 apps may run slower than necessary. Fortunately, you can overcome many of the speed limitations by clever coding.  The followin tips are based on Visual Basic 6.0 and variable-length strings. They're most useful with string-intensive programs that read, parse or manipulate large amounts of text. The performance gains from using these techniques are significant if you're executing the calls thousands or hundreds of thousands of times. If you're just occasionally writing and reading a few strings outside of loops, these tips won't help you much.

Perhaps the biggest bottleneck is that VB makes copies of the string data when doing some of the operations. Even when you're just reading strings (and not planning to make any modifications), you can easily end up making a large number of copies. The copying costs you time if string processing is an intensive part of your program. Another reason is that some of the widely used functions are implemented in a non-straightforward way. They may be doing more work than what is required for your task. Fortunately, you can often replace an advanced functions with a simpler and faster alternative.

For example, concatenating strings with & may be slow if you do it very often. The following class, let' say cFastStringConcatenation, speeds up the things very good:

Option Explicit On

Private Const BUFFER_CHUNK_SIZE As Integer = 15000 ' or you can play with this value and set it according to your needs

Private sBuffer As String
Private lOffset As Long

Public Sub ReInit()
    sBuffer = ""
    lOffset = 0
End Sub

' use this to initialize the string with a value
Public Sub SetString(ByRef Source As String)
    sBuffer = Source & String(BUFFER_CHUNK_SIZE, 0)
    lOffset = Len(source)
End Sub

' this function returns the value of the string in the buffer
Public Function GetString() As String
    GetString = Left(sBuffer, lOffset)
End Function

' this function is used to concatenate a new string into the buffer
Public Sub Concat(ByRef NewString As String)
    Dim lNewStrLen As Long

    lNewStrLen = Len(NewString)

    'Allocate more space in buffer if needed
    If (lOffset + lNewStrLen) >= Len(sBuffer) Then
        If lNewStrLen > lOffset Then
            sBuffer = sBuffer & String$(lNewStrLen, 0)
        Else
            sBuffer = sBuffer & String$(BUFFER_CHUNK_SIZE, 0)
        End If
    End If

    Mid(sBuffer, lOffset + 1, lNewStrLen) = NewString
    lOffset = lOffset + lNewStrLen
End Sub 

Some other tips:

  • don't compare with empty string like this If str = "" Then but If  Len(str) = 0 is much faster
  • Replace is not fast so if you are not sure that the string will be replaced each time, but only 50% of the times, check first with InStr
  • InStrRev is very slow, also StrConv and CStr are very slow.
  • Binary comparison vbBinaryCompare is faster then vbTextCompare
  • when you need to compare characters, use Asc(W)/Chr(W) like this If AscW(Mid$(Text$, index)) = 65 Then
  • avoid Like and StrConv if possible

Here are some other usefull links:

Happy programming :-) and watch out, the old dinosaur VB 6 ain't yet dead :-)


Ce e nou in ASP.NET 4 si Web development in Visual Studio 2010

4 iunie 2009, 13:18 de skorpionking

Web-ul este plin deja cu ceea ce va aduce ASP.NET 4.0 dar acest document este unul f bun si aduce multe exemple care pot fi incercate imediat, recomand sa il cititi si sa incercati imediat examplele de acolo!

Mai mult control asupra cum arata ClientID intr-o Web Form

ASP.NET 4.0 aduce o schimbare in felul in care se genereaza id-urile pentru controalele dintr-o forma web, de exemplu se poate ramane la forma veche generata automat ctl09_list45_whatever99 sau poti sa faci ID-ul mai previzibil, mai usor de gasit.  De exemplu, aici avem un ListView (contine elemente ol/li) cu emisiuni TV. Utilizeaza jQuery pentru sortare si asp:ListView are niste atribute noi, cum ar fi ClientIDRowSuffix si ClientIDMode. Lista e populata utilizand o sursa de date de tipul ObjectDataSource si ClientID va fi generat cotinand un sufix luat de la ID-ul obiectului Television. 

Routing (rutarea) si Web Forms

Dupa cum probabil stiti deja, System.Web.Routing joaca un rol semnificativ in ASP.NET MVC si in .NET 3.5 SP1. In .NET 4.0 este si mai usor sa utilizam rutarea chiar si in Web forms. De exemplu:

Aici setez o ruta astef lincat /Products/SomeCategory directeaza spre /Products.aspx, o pagina ASPX web forms. Parametrul Category este RouteParameter si valoarea lui poate fi determinata usor si utilizata. System.Web.UI.Page are acum un parametru RouteData sau se referi direct in markupl ASPX direct prin intermediul la  RouteValues:

sau prin intermediul unui obiect DataSource via <RouteParameter>:

Se pare ca va exista si o extensie de rutare GetUrlForRoute, in Beta 2, ca si una IgnoreRoute. In principiu aceste metod vor face utilizarea rutarii in forme web f usoara. Asta va fi usor si frumos si pentru aplicatii hybrid WebForms/MVC.

AJAX

 AJAX 4 aduce niste chestii dragute, mai ales in parte de Client Template. Este posibil o data-binding bi-directionala, 2 ways, utilizand doar JavaScript. De exemplu, acest template isi ia datele utilizand JSON DataService de la customers.svc. Uitandu-va la JavaScript, remarcati ca se a fost creat un DataContext , 2 DataViews care utilizeaza "customer-template" si elementele HTML din "customer-template"  si creeaza o legatura intre ele.

Apoi prin intermediul evenimentelor live din JQuery datele se pot salva in dataContext. Schimbarile care au fost facute in partea de client sunt marcate automat si apoi trimise inapoi via JSON si comise/persistate. Remarcati source: si target: in apelul $create() de mai sus care stabileste relatia master/Detail dintre customers si customer(singular).

Template-ul client este similar cu cel server, se pot utiliza expresii care sa determine aplicarea conditionala a CSS asupra elementelor HTML:

Acelasi lucru se poate face si declarativ fara a fi nevoie sa se scrie deloc JavaScript. Totul arata astfel:

rezultatul fiind acelasi in ambele cazuri:

 

 AJAX 4.0 poate fi utilizat nu numai Visual Studio 2010 Beta ci si in Visual Studio 2008 cu .NET 3.5 SP1, toate sunt pe CodePlex  ASP.NET 4 Ajax Preview.

Deocamdata ASP.NET MVC nu e inclus in VS2010 Beta 1, dar va fi inclus in versiunea finala. Phil explica pe blogul sau de ce.

O sursa foarte buna de informatii e si blogul lui Scott Hanselman.

Happy programming!

 


Visual Studio 2010 and .NET Framework 4.0 features - first look

4 iunie 2009, 12:20 de skorpionking

Visual Studio 2010 and the .NET Framework 4.0 are really nice, they make simply many things simplier, like moving data around with ADO.NET DataServices is easy, binding with client templates is easy, there's F# if you need it, the "dynamic" keyword if you need it, Silverlight's already installed, oh, and the parallel stuff will make you go crazy, in a goof way :-) Here's a general outline of a small part of the goodness broght to .NET Dev world by the Visual Studio 2010 and .NET Framework:

  • New Shell, new File|New, new Extensions Manager
  • Lots of focus on "Code First" (TDD-friendly, etc)
  • Office and COM Interop that is actually fun to do.
  • Automatic Properties for VB, no more "_" for multi-line, inline subs, collection initializers
  • C# gets the dynamic keyword
  • F# is included out of the box
  • WPF Databinding in the Designer
  • Silverlight included out of the box
  • Piles of HTML Snippets for non-designer people
  • Better JavaScript Intellisense
  • MSBuild for C++
  • UML for VS Team Architecture
  • TFS Branch and Changeset visualizers
  • Parallel computing
  • Workflow speedup, new designer
  • SharePoint tooling

 JasonZ has a great post with piles of details and a metric crapload of screenshots. Definitely take some minutes and check out his very detailed post. Happy programming :-)


Visual Studio 2010 Beta - primele impresii

4 iunie 2009, 10:42 de skorpionking

In sfarsit dupa un proiect cam agitat am timp sa scriu si eu mai mult pe blog :-) De curand se poate downloada versiunea Beta a noului Visual Studio 2010, nume de cod "Rosario". Recomand dezvoltatorilor de aplicatii .NET sa il descarce, instaleze si incerce intr-o masina virtuala. Visual Studio 2010 aduce cateva noutati inovatoare, dintre care as enumera:

Interfata utilizator

  • este imbunatatita, folosind tehnologia WPF

  • gestionare documentelor si a ferestrelor este imbunatatita

  • outlining - sagetile (glyhps) fac visible/invizibile zonele de cod (code blocks), culorile indica schimbarile din cod

  • acum se pot scrie diferite extensii pt Visual Studio 2010 si se pot controla f usor prin Extensions Manager

Dezvoltare aplicatii Web (voi da detalii mai multe intr-o alta postare):

  • engine Javascript si Intellisense performant si conform standardelor
  • OneClick Web Deployment
  • Silverlight este complet integrat

Dezvoltare aplicatii Cloud (Windows Azure):

  • template-uri pt proiecte in C# si VB.NET
  • tooluri pentr configurare, debugging, creare de pachete, deployment si instalarea pachetelor

De asemenea a fost imbunatatita dezvoltarea proiectelor de baze de date, pe langa SQL Server fiind suportate acum si IBM DB2 si Oracle. Importante sunt si inovatiile pentru dezvoltarea aplicatiilor ce folosesc parallel programming cat si suportul imbunatatit pentru un Application Lifecycle Management complet.

Aici gasiti mai multe informatii si exemple despre Visual Studio 2010 si .NET Framework 4.0, cod, documentatie, web cast-uri, tot ce aveti nevoie ca sa stiti despre noile technologii, navigati pe site-ul MSDN! Have fun :-)