Blogs

News

Favorite Posts

ctodx

Discussions, news and rants from the CTO of Developer Express, Julian M Bucknall

October 2009 - Posts

  • Sneak peek: More fun with colors and themes in WPF

         

    Last week I published a blog post showing off our new color scheme customization dialog in WPF, with only a single example: blue to pink.

    Well, Mike, our lead graphics designer, positively chortled with glee, locked himself in the office for 30 minutes with the app (and it was his turn to fill the coffee maker as well) and came out with these. I think their naming took longer than creating them. I present them with no comment, apart from saying they possibly still need some tweaks.

    However, I just have to say that these new examples are a direct reflection of just how easy it is to use the color scheme customization dialog. Especially if you're Mike.

    Rainy:

    rainy

    Dark Side:

    dark-side

    Lilian (very similar to our WinForms skin of the same name):

    like-lilian 

    Soft Green:

    soft-green

    Old Windows:

    old-win

    Windows Se7en:

    w7

  • Sneak Peek: Drag-n-drop, dialogs, more formats with the rich text editor in WinForms

         

    Part of a series on the new features appearing in DXperience v2009.3. This time around let's delve into the myriad new features of the XtraRichEdit control. This is going to be a long one, sorry in advance for taxing your broadband connection...

    First on the (alphabetical) list is drag and drop. We'll start off with an animated GIF showing drag-and-drop working from within the control. It works just as you'd expect: select some text, click within the selection and, without releasing the mouse button, drag the text to a new position and drop it there.

    DragNDrop

    Next up in the same vein is dragging files into a rich text editor. First in this set of examples is dragging an OpenOffice file:

    DargDropODT

    Second is dragging an RTF file:

    DargDropRTF

    And last, but not least, dragging a DOCX file.

    DragDropDocx

    Of course, drag-and-drop wouldn't be complete unless we could drag and drop rich text from, oh, say, Microsoft Word?

    DragNDropWord01

    DragNDropWord02 

    DragNDropWord03 

    Now if you'd been paying attention there with the drag-and-drop images you'd have noticed something new, so this formal announcement won't be a surprise: we now support the OpenOffice format:

    OpenDocument

    Another format we've added support for is the WordprocessingML format (a.k.a. the Word 2003 XML format):

    WordProcessingML

    Third on our big list of new features are some essential standard dialogs. (And surely it goes without saying that all the new dialogs use the current application skin.) First up is the standard bullets and numbering dialog:

    bullets and numbering form

    Of course, you really want the ability to customize the bullets:

    customize bulleted form

    And the numbered list as well:

    customize numbered form

    On the twelfth day of DevExpress Christmas, Rachel gave me the chance to win a 12 month subscription for DXperience Universal so I can get all of my 12 Christmas wishes: http://is.gd/5hkp2

    Having done those two, we also added the ability to customize the numbered levels used in outlines:

    customize outline numbered form 

    Another standard dialog I've been waiting for is the Insert Symbol dialog (warning: we threw in a gratuitous Comic Sans reference in the image):

    insert symbol - 1

    insert symbol - 2

    Fourth in our big list of features is something else you may have spotted already: support for hyperlinks. This comes with its own standard Edit Hyperlink form:

    hyperlink_edit_form

    Once you have a hyperlink in your document, you can hover over it and get a standard tooltip. Also the context menu shows editing actions you can make with a hyperlink:

    hyperlink_tooltip_context_menu

    A very nifty hyperlink-related feature we added is the ability to run a "macro" as the target of a link. A picture is worth a thousand words (and an animated one at least double that): here clicking on the hyperlink ">>Deadline Date<<" shows a form that allows the user to set a date. The result of that form replaces the hyperlink text.

    RichEditHyperlinkMac

    Finally, another feature you should have noticed by now if you are already a user of our WinForms rich text editor: rulers. Note the rulers support showing and adding margins, indents, and tabs.

    Ruler121

    Ruler21 

    As you have seen, some remarkable new features for the XtraRichEdit control for v2009.3.

  • Sneak Peek: custom tooltips with ASP.NET scheduler

         

    This is part of a series of blog posts in the new features in DXperience v2009.3. This time it's the turn of our ASPxScheduler control.

    We've added the ability to create custom tooltips with ASPxScheduler. Here's an animated GIF showing the feature in action, creating and deleting an appointment.

    CustomTooltip

    On the second day of DevExpress Christmas, Rachel announced the name of a new WPF control

  • Using the .NET 4 Client Profile

         

    With beta 2 of Visual Studio 2010 and .NET 4 came a lot more information about the ".NET Client Profile". This is an (admittedly large) subset of the full .NET Framework that targets "desktop client" applications. Because it's a subset, it's by definition smaller than the full thing and so would appear to be more palatable a download for those Windows PCs that don't have a copy of .NET 4 (which at launch will be everybody, of course). The .NET 4 Client Profile will be downloaded onto people's PCs using Windows Update.

    PlasticBlocks So, the pros are simple: smaller download; if you chain to the .NET installer in your installer, a smaller overall installer; by reducing the set of functionality in the client profile, a smaller possible attack surface; er and that's pretty much it. Shorter version: it's more compact.

    The cons? Well, if you create a desktop client (a WinForms or a WPF app), you will have another step to go through, another decision to make, in your design and implementation: which profile does your app target? The client profile or the full framework? By default, VS2010 will create a new project to target the client profile and not the full framework (unless it's a Class Library, in which case you'll be targeting the full framework). Note that I said project there and not solution. It seems it's valid to have mixed-profile solutions, although Microsoft do warn of possible build errors and/or run-time errors if you do so.

    If a user runs an application compiled for the full framework on a PC with only the client profile installed, they will get a dialog prompting them to download the full .NET framework. If an application compiled for the client profile runs on a PC with the full framework installed, it just works. If the application targets the client profile, but a class library within targets the full framework, and it is run on a client profile PC, you'll get an exception. Welcome to more "works on my machine" fun.

    So what's not in the client profile? What's been taken out? Developer-oriented code (design-time stuff especially); the Oracle client (it's being deprecated anyway); the design time libraries for EF and ADO.NET Data Services; ASP.NET; ASP.NET AJAX; Workflow rules integration; WF3 and WF3.5. Of course, having seen that list, you won't be surprised to learn that you'll be developing in VS2010 using the full framework; no .NET Framework "lite" for us developers.

    Sounds fairly innocuous right? As Microsoft put it, "most" client desktop apps should function perfectly well with the reduced functionality of the .NET 4 Client Profile. I would tend to agree; however, we've already found problems with that broad statement.

    Let's take a look. In essence, if nothing changed in .NET 4 between now and release (that is, the client profile functionality doesn't change, or we don't rewrite some of our assemblies), the way it stands at the moment you would be forced to target the full framework with your app that uses DevExpress components and controls. There are three main reasons:

    • We use System.Design.dll for some run-time related code, mostly related to attributes for serialization, type converters, localization, and the like. We use serialization all over the place to serialize information in charts, reports, bars, ribbons, what have you. This particular limitation is not too difficult to get around.
    • We use System.Web.dll. Before you wonder why on earth anyone would use web-related things in a client desktop app, consider this. We use common assemblies that span platforms (indeed, I was celebrating the fact in a recent blog post) and for the ASP.NET side, we use System.Web. In fact there's one type in particular we use a lot in these common assemblies: PersistenceMode.
    • Another use for System.Web.dll is in our export functionality in XtraReports, in particular the export to HTML. Rather than write our own classes, we've reused the ones in System.Web.dll. You know: reuse rather than copy/paste.

    Now, of course, these limitations can be circumvented by writing new code and modifying what's there. However, in doing so, we would necessarily break a lot of customer code. A lot. Also, there's no possible way for us to split and maintain our codebase in two parts, one for VS2005/2008 and the other for VS2010 and later. That way madness lies.

    In conclusion: at present we're investigating the issues that we see with .NET 4's Client Profile and how we can best mitigate them. I have a question for you though: would you prefer writing desktop apps that targeted the Client Profile (and therefore must have "client profile ready" controls), or do you not care in the slightest?

    (For more information on the .NET 4 Client Profile, see this blog post.)

  • Sneak peek: Fun with colors and themes in WPF

         

    On the eleventh day of DevExpress Christmas, The XtraRichEdit Team gave me drag and drop functionality! We know that creating a new theme or skin is a very long-winded and tedious process, even with a skin editor such as the one we provide with our WinForms controls. But, generally, you don't want to create a brand new theme, you just want to take a theme that you already have and then just tweak the colors, say from a predominantly blue color to a green one or a pinkish one. Well, the WPF guys as part of their general work in providing themes for our WPF controls have come up with a rather nifty little tool for doing exactly that. It has been enabled in most of our WPF demos, so you'll be able to see it in action once you get v2009.3.

    Here's an image of the tool itself. At the moment it's called the Color Scheme Customization Dialog, but that's a little unwieldy for a name and we may change it by the time we ship.

    ColorSchemeCustomizationDialog

    At the moment, it's only activated for the Office 2007 Blue theme. Here's an example of it in use. First I'll show the standard Office 2007 Blue theme in the DXGrid demo:

    DefaultOffice2007Blue

    And a quick spin of the color wheel later, a pink version:

    ModifiedOffice2007BlueScheme(Pink)

    Kazaam!

    PDC 2009 sponsor logo

  • DevExpress Newsletter 13: Message from the CTO

         

    Reprinting my Message from the CTO from the twelfth newsletter so that you may comment on my thoughts. Am I prescient or just nuts?

    Commoditization

    After the rather controversial topic of the last newsletter's Message, I promised Joe Hendricks, one of our DXperience Universal customers, on Twitter that I would talk about orange juice this time around.

    OJ choices When you go to the supermarket wanting to buy orange juice, what sways your selection of which one to buy? After all, not to put too fine a point on it, orange juice is just orange juice.

    Perhaps it's the brand you always buy. Perhaps you go for the one with lots of pulp, or the one with none at all. Perhaps you just choose the cheapest. Perhaps you peruse the label to see if it was reconstituted or not. Perhaps you like the added calcium variety. Perhaps you tried them all at one point in a blind tasting, and now just go for the one you liked the best. Perhaps you prefer a carton, or a bottle, be it plastic or glass. Perhaps you go for the ultra expensive juice that was fresh-squeezed on the farm during the dawn hours, with the dew still beading on the fruit.

    My point is that orange juice is a commodity. One juice is very much like another, so there are other considerations you take into account before you buy. I'd venture to say that it's the same with buying UI controls: they are also commodities.

    When you buy a control, say a grid, you are not just buying any old grid, you have other considerations. After all, grids are all pretty similar, when push comes to shove. So, you also consider things like your familiarity with the vendor, how long they've been in business, how often they issue updates, the documentation (in all the forms it exists), how well the technical support team deal with your questions, how open the vendor is, the ease with which you understand the API and the design, the ease with which your users enjoy using the control and find it intuitive, how flexible the design is, and so on. Maybe it's performance, or the "weight" of the grid rendered in a web page, or the availability of the source code, or a particular feature that makes you decide on a particular one.

    At DevExpress, we understand this situation clearly. That's why we not only try and create the best controls you've ever seen or used (biased, me?), but we also spend a lot of time on the supporting "infrastructure" for the controls: our support team, our documentation, our videos, our skins/themes, our regular updates and upgrades, our community efforts, our desire to make software development fun, DXSquad, our evangelists, our management team, and so on. You get all of that for free when you buy any of our controls.

    So, next time you need some orange juice, try DXperience.

    After I wrote this, I suddenly thought that the same thing also applies to software like iPhone apps. You want a kid's game for the iPhone? There are a bazillion of them: they are in every way a commodity. Which do you choose? The rating? Recommendation from a friend? The vendor? And so on, so forth.

    So, do you write commodity software? What do you do to make your software stand out from everyone else's in the same market?

    PDC 2009 sponsor logo

  • Drive-by vulnerability for Firefox users with the .NET Framework Assistant

         

    Great. Way back in August 2008, I mentioned that the .NET Framework 3.5 SP1 would install a plug-in into Firefox called the .NET Framework Assistant.

    Well it turns out it has a security vulnerability in a "drive-by and you're infected" scenario. The vulnerability uses a modified XBAP (XAML Browser Application) as the attack vector. It seems that Microsoft fixed IE during their Patch Tuesday this week, but apparently the problem is also present in the .NET Framework Assistant, which they didn't patch. ZDNet's story about it is here.

    So, Firefox fans: disable the .NET Framework Assistant now (Tools | Add-ons | Extensions | Microsoft .NET Framework Assistant | Disable). I've just done it for both my machines.

    PDC 2009 sponsor logo

  • Sneak peek: enhancements for charts in WPF in v2009.3

         

    The Charts team hit code freeze this week, ready for v2009.3, so we now know for certain what is going to be in the release. Consequently, feast your eyes on these new features for DXCharts for WPF.

    Firstly, we have titles for the axes in both 2D and 3D charts. Here's a 3D stacked area chart showing such a title on the y-axis, the values axis.

    axistitle 

    Next up, we've added custom draw capabilities. To see this, here's an unadorned bar chart:

    customdrawoff

    Now we'll color the bars according as to whether the bar height is less than 1.0, between 1.0 and 2.0, or greater than 2.0:

    customdrawon

    Note we're also changing the bar label as well.

    The third feature is support for empty points within a series (that is, data points with no values). Here's an area chart in 2D, with both the "Entertainment" and "Travel" series missing some data points:

    emptypoints1

    And here's a 3D area chart showing similar data:

    emptypoints2

    Fourth, we've added a Date/Time scale for the y-axis, the values axis. This example has the values axis displayed horizontally:

    valuedatetimescale

    On the tenth day of DevExpress Christmas, I had fun with colors and themes in WPF with Julian Finally, we've added the series point Tag property. This works in a similar way to the same feature in XtraCharts: you write a handler for the CustomDrawSeriesPoint event and the eventargs has the SeriesPoint object, whose Tag property you can now set. Here's an example, showing the legend being more informative than the x-axis labels.

    tagproperty

    Stay tuned for more sneak peeks over the coming days and weeks.

    PDC 2009 sponsor logo

  • Another Aussie for DXSquad: @aussiealf

         

    DXSquad is our team of proven developers who are gracious enough to help us and our customers on our forums and in the wider DevExpress community. It's a rare honor to be invited into the ranks. (I'm not a member, for example, that's how difficult it can be to get in. Oliver, though, was a member but was forced to resign. We don't like to talk about it.)

    Today we invited Michael Proctor (aka @aussiealf on Twitter) to join DXSquad and he was swayed enough by the tin DXSquad badge (free shipping to mainland USA) to say yes. If you've not heard of him, it's because you don't frequent the XPO forum; for if you did, you'd know him extremely well.

    Welcome, Michael!

    PDC 2009 sponsor logo

  • Bad code is good for you

         

    OK, admit it. You've got an RSS subscription to The Daily WTF. Part of The Daily WTF's self-applied remit is the CodeSOD section (Code Snippet of the Day) whose premise is simple: developers enjoy a jolly good laugh at seeing someone else's badly written code. We read it with our fingers crossed, fervently muttering under our breath that we hope that one of our colleagues didn't just send up something we wrote last month. Even though some of the posts there ring false to me (no one can be that dumb, surely?), there's just enough posts that ring true that you continue to read and laugh.

    Of course we have all written bad code. The only person I'm sure hasn't is Donald Knuth, and that's only because he used to send out checks for $2.56 to everyone who discovered a bug. (I will note that the bug discoverers just used to frame said checks and hang them on the wall rather than cashing them. I certainly would have. Notice as well that I've never dared emulate him.) Bear with me when I say bad code is nonetheless good for you; I'll explain. 

    Apart from being clichéd, the saying "you learn from your mistakes" holds a metric tonne of truth. Think back to when you wrote an appalling bit of code. Yes, I'll agree the deadline was tight, or you were meeting that rather pretty young lady (or gentleman) from Accounting for drinks that evening, or your kids needed taking to practice, but, no matter what the excuse, you laid down some rather nasty code. Remember what happened when the inevitable bug report was posted? You investigated and saw with some horror what you had managed to write in that moment of distraction. If you're like me, you'd have broken out into a sweat and uttered WTF, uncompressed. Perhaps you were able to cover it up in layers of updates to the version control system, but almost certainly there would remain a record in the bug tracking system and then you would have had to walk past people in the hallway who would fall silent from their conversations and watch as you shuffled by.

    But I bet you never wrote code like that again.

    Here's another aphorism you'll recognize: you learn by doing. You can read all the books and blogs about TDD (test-driven development) and understand that it can help you write better software, but you won't viscerally "get it" until you actually practice what it says. Until that point, it's merely an interesting thought experiment. But I wonder how many mistakes you'll endure before you speculate about whether a test suite that you maintain and run regularly could actually save your bacon. And once you have a unit test suite, you'll be adding tests to it all the time. Your code will get better because it's being tested constantly. You'll be able to refactor whenever you want with the knowledge that your tests will cover you. You'll avoid the mistakes you've made previously, possibly making other, different ones that you'll be able to fix more quickly. 

    You see, we do have that need for bad code. It is only through bad code that we recognize that we need and should use better tools, algorithms, and methodologies. Bad software is everywhere; it permeates the applications we use every day, it irritates the heck out of us. But it forces us, as developers, to exert ourselves to write better code, better than that — time for another initialism, I think — POS software over there.

    Most of all, though, it takes bad code to help us appreciate good code and gives us a good laugh into the bargain.

  • DevExpress Newsletter 12: Message from the CTO

         

    Reprinting my Message from the CTO from the twelfth newsletter so that you may comment on my thoughts. Am I prescient or just nuts?

    Licensing

    Recently, I published a blog post about our licensing policies, and it turned out to be well received and widely read. But there was one question I did not cover: why licensing in the first place? In particular, why have this sentence in the EULA at all? "All SOFTWARE COMPONENT PRODUCT(S) is licensed, not sold." Why don't you own our software product after purchase?

    The easy way out is to say we do it because everyone else does, but that doesn't get to the nub of the problem. In essence, it's a legal requirement. When you purchase a washing machine, say, the laws of your country or state determine what you can expect from your purchase: that is does what it's supposed to, that it has a warranty, that the warranty covers certain things for a certain time, etc. Indeed, the credit card you used to make the purchase also comes with laws and expectations governing its use.

    The same goes for software; however, with software (mainly because of the ease of duplication and distribution and because of its flexibility) there must be a legal document to which you must agree that defines what you can do with it. This legal document is usually known as the EULA (End-User License Agreement) and covers your usage of the software, where and how often you can install it, whether you can distribute it or not, any warranty you may get (almost certainly none at all), the support policies, the responsibilities of the supplier and the user, definitions of intellectual property (IP) rights and copyright, and so on, so forth.

    Because of the IP/copyright angle, even free open source software has a license to which you must agree (for example, I use the MIT license for my own code I make available for free). Caveat downloader.

    In essence, without a license, software would be so expensive no one would be able to afford it.

    We all work in the software industry, and so I doubt we even think any more about the fact we never own the software we buy, so I was surprised when I actually got this question by email one day (and this message text is roughly the answer I gave).

    (Aside: I must thank Odi Kosmatos of Xceed Software for the "so expensive" quote he sent as a tweet. Thanks, Odi.)

  • Sneak peek: New report designer for DevExpress' reports library

         

    Andrew, team lead for our reports group, sent me a screenshot of the new end-user report designer for XtraReports v2009.3. As he puts it: it has the look of a page editor, with a lot less visual noise. I certainly can't wait to start using it.

    designer-v2-3

    Of course, since the end-user report designer is exactly the same as the one in Visual Studio, this is the one you'll be using after v2009.3.

    On the eighth day of DevExpress Christmas, The Progress Bar blog gave me news of the DXPivotGrid for WPF

  • DevExpress products and Mono (part 1 - WinForms)

         

    Recently I took it upon myself to do some testing with our products and Mono. We've been asked often in the past about Mono compatibility, and given the recent release of — and excitement about — MonoTouch, the number of these questions have increased.

    The first trial I did was with our WinForms controls, because I was fairly certain it would be a fairly simple conclusion and as it happened my experiment validated my guess.

    First things first, though. Although Mono does have complete support for creating WinForms applications, there is a big issue in my view, especially when you consider third-party controls. Suppose you're targeting Mac OSX and by happenstance our WinForms controls work in Mono. You write a WinForms app with XtraGrid and XtraBars and the rest, deploy it, and... it just looks like a Windows app running on a Mac. It looks wrong, it doesn't fit in. You might get away with it in the corporate environment but, for the wider Mac audience, you'd be laughed out of court. Far better would be to have a set of WinForms controls that look like native Mac controls. And that, of course, we don't have (although you could get close with our McSkin I suppose Smile).

    Onto the actual test. The Mono Project have this nifty program that analyzes your application and assemblies for possible problems when running under Mono. It's called MoMA, the Mono Migration Analyzer. I downloaded it and ran it on our big demo for XtraGrid, in the belief that I might as well go for broke. That's me all over: put it all on red.

    image

    Firstly, cool, everything we use in .NET is present in Mono and I'm particularly glad we don't have any methods that throw NotImplementedException. Obviously, we provide you with fully implemented classes in our products. That's a relief.

    The second item there is the warning I was most definitely expecting: the P/Invoke problem. This particular application (and the assemblies it uses) uses 23 P/Invokes.

    A reminder. A P/Invoke (Platform Invoke) is the .NET term for a routine in a native DLL that you call from within managed code. The DLL, in most cases, is part of native Windows: we don't go for writing our own native DLLs for our .NET products. Here's a couple of examples of such a routine (taken from XtraBars):

    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern IntPtr GetFocus();
    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern IntPtr SetFocus(HandleRef hWnd);

    Here the P/Invokes are getting references to the GetFocus() and SetFocus() routines from user32.dll, a pretty important DLL in Windows.

    The issue with P/Invokes and Mono is that these native Windows system DLLs do not exist in other operating systems. Sure, other OSes are likely to have something functionally similar, but they won't be in a DLL called user32.dll, and even if they had similar names, they might have different signatures. We'll come back to this in a moment.

    Let's take a look at the P/Invokes in this particular application:

    image

    I'd have to say there's nothing particularly out of the ordinary here. Most of the P/Invokes we use are out of user32.dll and deal with the keyboard and mouse.

    Actually I suppose you could argue that we've got references to certain Windows routines all over the place, and that we should aggregate them into some DXNativeWindows assembly and reuse that. I won't argue, and in fact, if we were to fully support Mono, that's essentially what we would have to do. Once we'd done that, it should be then be easier to implement and provide DXNativeMacOSX and DXNativeLinux assemblies as well, for deployment on those platforms.

    For interest, here's the detail for the final warning item:

    image

    Some of these might be cause for concern ("useEmbeddedColorManagement isn't supported"? Qué?), but I admit to not having done too much research on them as yet so I don't know how difficult they'd be to work around. The P/Invokes are a bigger problem to my mind.

    Now we're at the end of this particular post, I'd have to say, given my results, our providing WinForms Mono support for every possible platform is going to be very low priority. Providing WinForms Mono for a specific platform (say, Mac OSX) is more of a possibility, apart from the problem I mentioned early on: Our controls were designed and implemented to look good on Windows. I'm going to guess we would have a fairly heavy-duty bit of design work to make them look good on the Mac, and that's before we factor in the work we need to do to research and implement the Mac OSX equivalents to the Windows routines we're using.

    Unfortunately, given the other opportunities we have to tackle on our main platform, it's unlikely we'd be devoting resources to this project in the near to middle future. The opportunity cost is just too high at the present time.

    Next time: ASP.NET.

  • Sneak peek: New improvements to 3D charts in v2009.3

         

    (UPDATE: Man, my notes suck. These images are from XtraCharts, not DXCharts for WPF. Sigh.)

    Damon, the lead of our charting team, finally relented after I'd pestered him for a while and sent me some screenshots of some new 3D bar series views that will be appearing in DXCharts for WPF XtraCharts. They're all stacked bar views, and the images show off the different bar models. These will be appearing in v2009.3 in November/December.

    The box model:

    box 

    The conical model:

    Cone

    The cylindrical model:

    Cylinder

    Finally, the pyramidal model:

    Pyramide

    It's well worth clicking on each and looking at the large image. The attention to detail they've demonstrated is incredible.

    Of course, this is not the only new stuff to appear in our charting products. Stay tuned for more sneak peeks.

    On the fifth day of DevExpress Christmas, the XtraReports team gave me snap lines

More from DevExpress
Live Chat
Have a pre-sales question?
Need assistance with your evaluation?
We are here to help.
Chat is one of the many ways you can contact members of the DevExpress Team. We are available Monday-Friday between 8:30am and 5:00pm Pacific Time.
If you need additional product information, require pre-sales assistance, or want help with your order, write to us at info@devexpress.com or call us at
+1 (818) 844-3383.