Nokia N95 - Just because I’m cheap!

Some time ago, with a little help of TDI some time ago I’ve successfully switched all my outgoing calls to Voipdiscount, while at the same time moving my incoming calls’ number to mobile provider through a Sagem base station, all of this nicely integrated in a Linksys SPA3102 gateway in a way that a regular person grabbing a phone at my desk cannot realize that at the current moment it’s a hybrid not really having much in common with the POTS, they expect to be using. All of this effectively reducing the monthly phone spending to a negligible monthly fee, just in time when my eldest starts to spend hours on the phone - great!

Consequently, one of the main reasons behind my getting a WIFI enabled Nokia was to use Voip as the primary outgoing calls channel, so after we got (one for each of us TDI and me :) ) it was a mildly shocking experience when I discovered that Fring as a Voip solution is, to put it gently, seriously lacking in voice quality. At the same time I’ve found out that the Nokia seems to have SIP support built in, but up till today it seemed that there is no way to force it to work with Voipdiscount - the Voip provider that most of us in here (that actually switched to Voip at home) use. But that problem’s gone now. As of today the Nokia is officially a Voip solution of choice also for the Betamax services (the operator behind VoipDiscount, VoipStunt and about a dozen other services that simply put differ only by the site template, while effectively linking to one backbone).

Definitely for TDI’s benefit - but perhaps anyone else will find it useful as well… the configuration goes as follows:

  • Service Profile: IETF
  • Default access point: Your preferred wireless network
  • Public username: sip:[username]@voipdiscount.com
  • Use compression: No
  • Registration: When needed (use always on if you want it to stay connected all the time) Call type selection screenshot
  • Use security: No
  • Proxy server
    • Proxy server address: sip:sip.voipdiscount.com
    • Realm: voipdiscount.com
    • Username: your username
    • Password: your password
    • Allow loose routing: Yes
    • Transport type: Auto
    • Port: 5060
  • Registrar server
    • Registrar server address: sip:sip.voipdiscount.com
    • Realm: voipdiscount.com
    • Username: your username
    • Password: your password
    • Allow loose routing: Yes
    • Transport type: UDP
    • Port: 5060

And the best thing of all is the integration of the Voip within the phone, you pick your number like you usually would - either by typing it form the keypad or by selecting it from the address book, and THEN the phone asks you by which means you want to connect to your destination… BLISS!

 

Popularity: 49% [?]

Posted in GSM, Mobile, Nokia, Symbian
 Votes | Average: 0 out of 5 Votes | Average: 0 out of 5 Votes | Average: 0 out of 5 Votes | Average: 0 out of 5 Votes | Average: 0 out of 5 (No Ratings Yet)
Loading ... Loading ...
| 6 Comments »

Misadventures with Database Engine Tuning Advisor

I’ve been on a sole task today to improve a database performance of the project we’ve been working on. As much as I enjoyed the task there is one thing that costed me quite a bit of head scratching. Being a standard nerd I usually have about 20-30 applications running on my machine at a time, I didn’t immediately associated the error with the tuning advisor but rather assumed it’s one of my other 29 applications/servers/daemons/services in background did something stupid, probably even some of my code craving for a bit of attention, right? So I moved to tune the database on the server via remote desktop, but when I hit a wall there I’ve looked around for the solution and it looks like that it’s been known to MS for almost 2 years now.

Found it hilarious enough though to post it here though :)

“This indicates a bug in your application”, how vicious of them show a dialog like this to a developer. It’s not in MY code you bad thing you! It’s in YOUR code!

The solution or rather a workaround is available here. And NO, you don’t need to restart your computer after applying the change to the registry, just kill and restart Explorer and then start the Tuning advisor again. Make sure to restart the SQL Server Management Studio as well if you’re launching the tuning advisor form it, the setting is applied on app startup.

Popularity: 42% [?]

Posted in .Net Framework, Microsoft SqlServer, Software Development
 Votes | Average: 0 out of 5 Votes | Average: 0 out of 5 Votes | Average: 0 out of 5 Votes | Average: 0 out of 5 Votes | Average: 0 out of 5 (No Ratings Yet)
Loading ... Loading ...
| No Comments »

Is EpiServer a hard-shelled clam or what?

As much as I seem to be enjoying my trip with EpiServer there are some little things I don’t seem to appreciate all that much and I’m not quite sure how to work around some of them in an elegant way.

EpiServer has a fairly advanced way of dealing with properties but it also seems to be a bit tough on the developer whenever you try to do something more than just strictly using its API-s. One of the areas I don’t really enjoy is the dealing with the pages that are expired or generally unavailable for the user for various reasons.

In the project that we’ve been implementing recently we needed to store page ids for further reference in numerous places and although this generally works, accessing a page that’s been deleted, expired or not published yet, has proven to be a challenge and I can’t seem to be able to find an elegant solution around it.

For instance, we have a list of bloggers, that are stored in our faceted navigation with links to their pages, our system lists them and the links to their pages, should someone’s page be unpublished yet - we run into problems.

Another good sample of where this is needed is a list of pages (A multi-page property of sorts). There seems to be no implementation of a multi-page property in EpiServer and the only reasonable implementation that I’ve been able to find is available through EpiCode. The following is it deals with the pages going in or out of the system, which leads me to think that the only way of checking whether a page is available for me is to instantiate it with all the consequences of it:

// get the page with error handling for // access denied or deleted page try { PageData page = Global.EPDataFactory.GetPage(pageref); isExternalLink = (page.StaticLinkURL != multipageLinkItem.Url); if (page != null && isExternalLink == false) _selectedPages.Add(page); } catch (PageNotFoundException notFoundEx) { // We should not add the page if it // does not exist } catch (EPiServer.Core.AccessDeniedException accessDeniedEx) { // User is not allowed to see page, skip it } catch (Exception ex) { // The page could not be loaded, for some other // reason. System.Diagnostics.Debug.Write(“Page could not be loaded: “ + pageref.ToString(), “PropertyMultiPage”); }

What I do not like about this part (of an otherwise remarkable piece) of code is that exceptions are not supposed to be the driving force of the program flow. But in this case they seem to have been forced to do it. It’s like I had to open a file to check its size or whether it even exists.

I can see why the system will not let me visit the page if I’m not allowed to do it as a user, but the fact that the API frowns at me whenever I even try to instantiate it just to check its existence or my rights to it has proven to be quite problematic. After all a user is not supposed to see a login screen in the list of pages, but rather when he/she enters a page that he/she no no rights to. Better yet, give me a way to check whether I even can access it.

Is there one already? Has anyone heard? Did anyone see?

Popularity: 63% [?]

The great missing feature of EPiServer

As we’ve been debating with Steve in the EpiCode IRC channel (Come on, join us there! You know you want it!) a few days ago, probably one of the biggest missing features in EPiServer is multi-page property.

Yes there seems to be a fairly robust implementation of a similar functionality on EpiCode however it’s got 2 serious drawbacks:

  1. adding a great number of consecutive pages is a tedious process
  2. it’s not native to EPiServer, meaning - if I use it in my module that I would like to distribute later I need to put the control there. Short of potential licensing issues, this introduces an unnecessary complication level for such distributable modules

Another big issue with the page selecting dialog - apart form being unable to select multiple pages is its inability to root it anywhere outside the original EPiServer repository root. This really limits its quality in terms of re-using of its functionality to be able to use it for selecting of a limited set of pages.

I really wish I could have a clear API for it like I can use the Windows Forms  Open/Save Dialog in desktop applications. I mean seriously - I thought it was impossible that in a product as well thought out as EPiServer something as basic would be missing - there must be something out there to do it, right? WRONG. I looked all around the EPiServer code assemblies and short of re-coding the dialog form grounds up, all I have been able to dig out was a way to re-use the a part of the favorites functionality of the dialog.

You might find a way to reuse the following piece of code. If you put this in your .ASP :

Read the rest of this entry »

Popularity: 68% [?]

Posted in ASP.NET, EPiServer, Software Development, Web applications
2 Votes | Average: 5 out of 52 Votes | Average: 5 out of 52 Votes | Average: 5 out of 52 Votes | Average: 5 out of 52 Votes | Average: 5 out of 5 (2 votes, average: 5 out of 5)
Loading ... Loading ...
| 5 Comments »

Database-based paged EPiServer searches

Searches paged in the database have posed a problem in SQL Server at least prior to version 2005. I’ve found some solution to the problem on the net but they were so cludgy that I would never really put anything like that in a production server. I hope the following will shed some light on how they work in general by using in in EPiServer context.

Theoretically in EPiServer you can pull the pages that match the criteria from the database with EPiServer.Global.EPDataFactory.FindPagesWithCriteria() into the PageList but that seemed to be imposing a strong performance penalty with increased number of pages meeting the criteria. Since this search is sometimes done even multiple times on a page request in our project we needed something better.

Read the rest of this entry »

Popularity: 48% [?]

Posted in EPiServer, Microsoft SqlServer, Web applications
 Votes | Average: 0 out of 5 Votes | Average: 0 out of 5 Votes | Average: 0 out of 5 Votes | Average: 0 out of 5 Votes | Average: 0 out of 5 (No Ratings Yet)
Loading ... Loading ...
| 2 Comments »

Our friends at EPiServer AB has just let us know that they are in need of EPiServer CMS specialists that might be looking forward to working with them directly, so if you’re an EPiServer professional and meet the requirements specified on the recruitment page give them a shout!

If you’re not already familiar with EPiServer you’re probably not going to make it this round, but then again I suggest you start looking at it now. EPiServer AB is a really dynamic company recently expanding aggresively on the international markets - and rightly so. EPiServer is deserving every credit it can get. I can say that my journey with it so far has been really smooth and I’ve enjoyed every bit of it. So if you’re not up to it, get ready for the next round, in the mean time, grab yourself a login - download a copy of the documentation from the Knowledge Center, a demo license and join us on the Developer Forum.

It’s a great bunch, really fun to work with.

Popularity: 44% [?]

Posted in Blogging, EPiServer, Software Development, Web applications
2 Votes | Average: 3 out of 52 Votes | Average: 3 out of 52 Votes | Average: 3 out of 52 Votes | Average: 3 out of 52 Votes | Average: 3 out of 5 (2 votes, average: 3 out of 5)
Loading ... Loading ...
| No Comments »