Search Results

Search found 19796 results on 792 pages for 'bit twiddler'.

Page 336/792 | < Previous Page | 332 333 334 335 336 337 338 339 340 341 342 343  | Next Page >

  • Computer Science Degree or Computer Engineering Degree?

    - by Paul
    Hello everyone, I'm 23 years old living in Italy and this year I will be getting my high school diploma. I'm interested in pursuing a collage degree and work in the IT field. At the moment I'm self teaching myself Java (I also know python, html, css and mysql). I'm also learning about algorithms and OO design. I'm curious how important a college degree is for me, considering my age and if there is a big difference between computer science and computer engineer. There is a computer science university where I currently live but not a computer engineer one. For some reason universities that offer computer engineering courses are only in bigger cities such as Milan, Bologna, Roma. Cost wise, it would be cheaper for me to study near home at a computer science school. Career wise, would a computer engineering university offer me more work opportunities instead of a computer science degree ? Is it easier transiting from CS to CEN or vice-versa? I'm not exactly sure what type of job I want to pursue in the future since I'm still a bit undecided but definitely not system/network administrator, database administrator, game developer.

    Read the article

  • How can I get a scheduled task to run for a user regardless of which computer the user is logged onto?

    - by Ernst
    I've got a scheduled task that needs to run for a user at a specific time. However, the user sometimes logs onto one machine, the next day onto another, then next week onto yet another. At some pint during the day, the user might have to log onto another machine. How do I get the scheduled task to run regardless of which computer the user is using? I could of course create the task on all computers, but that seems a bit overkill. Running a script on log on (or a group policy) to create the task doesn't seem a good method either. Any ideas? Basically I want the scheduled task to be defined on the user instead of on the computer. If in the end I need to choose between the two options above, which is best?

    Read the article

  • error while loading shared libraries; cannot open shared object file: No such file or directory

    - by glitchyme
    The program evince complains that it can't find libfreetype.so.6; however I clearly have the file and its included in my LD_LIBRARY_PATH; furthermore I have another program which uses libfreetype6 and is able to run just fine. What's going on here? jbud@jb-pc ~> evince evince: error while loading shared libraries: libfreetype.so.6: cannot open shared object file: No such file or directory jbud@jb-pc ~> ldd /usr/bin/evince | grep freetype libfreetype.so.6 => /usr/local/lib/libfreetype.so.6 (0x00007f912179d000) jbud@jb-pc ~> file /usr/local/lib/libfreetype.so.6 /usr/local/lib/libfreetype.so.6: symbolic link to `libfreetype.so.6.11.1' jbud@jb-pc ~> file /usr/local/lib/libfreetype.so.6.11.1 /usr/local/lib/libfreetype.so.6.11.1: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x21a4b8005e0c9a42af001b35fb984f4e25efc71c, not stripped jbud@jb-pc ~> echo $LD_LIBRARY_PATH /usr/lib/:/usr/lib64/:/usr/lib/x86_64-linux-gnu/:/usr/local/lib/ jbud@jb-pc ~> ldd jdrive/jstuff/work/personal/noengine/client | grep freetype libfreetype.so.6 => /usr/local/lib/libfreetype.so.6 (0x00007feb5ac89000)

    Read the article

  • Mac Websharing Off but Process Running

    - by benedict_w
    I have my mac setup to use php / mysql / apache via macports. Recently it has gone a bit pear shaped: it seems that the local mac versions of apache and mysql are running blocking the macports services: (48)Address already in use: make_sock: could not bind to address [::]:80 (48)Address already in use: make_sock: could not bind to address [::]:443 Web sharing in System preferences is off - How can I properly disable it? I tried turning it on an off again in System Preferences but it would not changed from off to on. Also if I kill the process it starts running again.

    Read the article

  • Media Temple-like hosting services?

    - by antonpug
    I have a couple of wordpress sites which do not get much traffic now, but I plan on expanding to something like a 1000-2000visits/day in a year or two. Media Temple has some really nice offerings, but their Wordpress plan is 20/month...which is a little too much, seeing as at this point my site is more of a hobby than a money making machine. I currently host with HostGator (just switched from GodaddyiPageBluehost). All these cheaper/pop hosting services are okay, but it would be nice to find something a little bit more "premium", but at a lower cost than MT. Anyone know anything worth looking at?

    Read the article

  • Passwords in WP7

    - by Richard Jones
    I’ve been trying to protect password entry boxes in Windows Phone 7 (on the emulator) SilverLight supports inputscopes to achieve just this. Peter Foot blogged about this too.  http://mobileworld.appamundi.com/blogs/peterfoot/archive/2010/03/22/windows-phone-7-input.aspx?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+PeterFoot+%28Peter+Foot%29 It seems that password inputscope doesn’t quite work yet, please don’t pull your hair out like I just did..   This is the code I was using. <TextBox Height="31" HorizontalAlignment="Left" Margin="240,99,0,0" Name="tbuser" Text="" VerticalAlignment="Top" Width="181" TabIndex="1" >                <TextBox.InputScope>                    <InputScope>                        <InputScope.Names>                            <InputScopeName NameValue="TelephoneNumber"/>                        </InputScope.Names>                    </InputScope>                </TextBox.InputScope>            </TextBox>   Other inputscopes like Telephonenumber work great.  Thought I would blog this to save you from a small bit of pain.

    Read the article

  • "Show In Finder" won't open a new finder window

    - by Gavin Miller
    The "Show In Finder" action isn't working on Mac OS X Mountain Lion. The problem has just started to occur all the time, before it was a bit sporadic, but now it happens all the time. Things that don't work: In the chrome Downloads page clicking any of the "Show in Finder" links. Right clicking a file in XCode and choosing "Show in Finder" Things that work: open . in terminal command-n after command tabbing to Finder. Things I've tried to fix the issue: Opt - Right Click finder in the dock and relauching Restarting my computer Anybody ever experienced this issue?

    Read the article

  • How to stabilize PCIe sound card in its card slot?

    - by Josh
    I have a Soundblaster Recon 3d Fatal1ty sound card and randomly every once in a while my computer won't recognize it. I am almost 100% sure it is something to do with its PCIe slot. After I turn off the computer and just wiggle the card a bit, the computer recognizes the card once I restart. I can't really try it in the other PCIe slot because the video card gets in the way. It is a Biostar TA970XE motherboard. I don't know if it is something to do with the pins on the actual card or if it is something to do with the slot. I couldn't find any related issues about this card on Google. Is there anything I can do to help secure the card in its slot so that my computer will recognize it? Any help is appreciated.

    Read the article

  • Feed Reader's - Looking for some suggestions

    - by bryan_ruiz
    I am doing my best to make it a point to keep an eye on some blogs of people in my industry, and am looking for a good feed reader. I use chrome. I live in chrome, and if I am not in Chrome, I am using xterm. Yet, I do get my tweets in Pidgin and do all my talking discussion from that. Maybe it makes sense to integrate something in that? I see web feed readers as a bit too distant to make good use of it (eg, have to open a page, and less 'in your face'). Although, I am a big fan of google stuff and use google apps and google voice and google cals and google docs, etc.. So how is feedburner? I like to preserver time. It'd be interesting if I could read my feeds offline on my laptop or ChromeOS CR-48 with offline websites? Well, would love to hear what you guys are doing and suggest.

    Read the article

  • Python or Ruby for freelance?

    - by Sophia
    Hello, I'm Sophia. I have an interest in self-learning either Python, or Ruby. The primary reason for my interest is to make my life more stable by having freelance work = $. It seems that programming offers a way for me to escape my condition of poverty (I'm on the edge of homelessness right now) while at the same time making it possible for me to go to uni. I intend on being a math/philosophy major. I have messed with Python a little bit in the past, but it didn't click super well. The people who say I should choose Python say as much because it is considered a good first language/teaching language, and that it is general-purpose. The people who say I should choose Ruby point out that I'm a very right-brained thinker, and having multiple ways to do something will make it much easier for me to write good code. So, basically, I'm starting this thread as a dialog with people who know more than I do, as an attempt to make the decision. :-) I've thought about asking this in stackoverflow, but they're much more strict about closing threads than here, and I'm sort of worried my thread will be closed. :/ TL;DR Python or Ruby for freelance work opportunities ($) as a first language? Additional question (if anyone cares to answer): I have a personal feeling that if I devote myself to learning, I'd be worth hiring for a project in about 8 weeks of work. I base this on a conservative estimate of my intellectual capacities, as well as possessing motivation to improve my life. Is my estimate necessarily inaccurate? random tidbit: I'm in Portland, OR I'll answer questions that are asked of me, if I can help the accuracy and insight contained within the dialog.

    Read the article

  • How to quickly empty a very full recycle bin?

    - by Pekka
    I have deleted about half a million files from a folder, and didn't think to press Shift in order to delete them completely straight away. Now they're clogging my recycle bin, and Windows claims it will take 4 hours to empty it - it claims to do about 68 files per second. Is there some magic or an alternative method that can speed this up? Bounty - I'm starting a bounty. The files are still in my bin, as there was no pressing need to get rid of them and this way, I can try out the suggestions presented. I am, however, looking for a way that does not include hard-deleting the contents of the RECYCLER folder - I'm sure that would work, but it feels a bit unclean to me.

    Read the article

  • Adjusting the column height of a Word 2007 Mail Merge on every page?

    - by leeand00
    I've been doing mail merges lately and we use labels that aren't listed in the default MS Word settings: I tried measuring them out and here is what I got: Despite measuring them they don't seem to fit, and I always end up having to adjust the heights so that they print correctly. When I do this and I have 24 pages or so of labels I have to adjust each page individually and it all gets a bit annoying. So I was wondering if anyone had the proper measurements (since mine didn't work) or if maybe someone knew how to adjust the height of the columns of every page in exactly the same way to avoid using more labels.

    Read the article

  • SAN typical MTBF

    - by Adrian K
    We're using a SAN on a project at work, and there's a bit of debate around the fact that's technically it's a Single Point of Failure. No one seems to have any hard data. The SAN in question is a single physical box, but with internal redundant components (sorry - not sure3 what level of RAID it has, but I can find out). What's the tyopical MTBF for a SAN? The PM has it down on the projects risk register as "Quite Common' - I've never heard of a SAN going down, but I don't jhave any stats to show how likely it really is. Does anyone have any helpful info?

    Read the article

  • Increase application performance on Amazon AWS

    - by Honus Wagner
    I've got a client with an MVC v1 (.NET) application running on a micro instance. On this instance, I've got .NET, IIS 7.5, and MS SQL Server 2008 running to handle the application. The client has reported that it is taking nearly 10 seconds to process each request. Even loading the initial login page takes about that long, then logging in takes that long, etc etc. The currently running instance specs are as follows: 615 MB RAM Intel Xenon CPU E5430 @ 2.66GHz 2.78 GHz 64-Bit Is the memory availability the issue? or is it the processing power? I forsee two options: Change to a larget instance Set up a 2-tier architecture with two micro instances Which of these will give the application better performance? Thanks in advance.

    Read the article

  • Connection issues with Linksys WRT54GL / Tomato

    - by Phoshi
    So I recently purchased a new router, and decided to put Tomato on it for some of the fancy features, like graphs. Only problem is, now I've installed it I can't connect to the internet any more! What I've done so far is plug the router in, connect to it wirelessly, and upgrade the firmware to the right version for my router. This went swimmingly, the router restarted, and everything's Tomatoey. Except it won't, now, connect to the internet, and I'm entirely unsure what I've missed. My old router was a BT Homehub, my ISP is BT (British Telecommunications). I'm a bit lost, this is the first time I've done any of this 3rd party firmware stuff.

    Read the article

  • How to set WAN side buffers for WRT54GL running Tomato Firmware

    - by Vickash
    I've recently set up a machine running m0n0wall to try and fight buffer bloat and do some traffic shaping. It was more convenient (geographically speaking) to connect the cable modem directly to my old WRT54GL, then pass everything to the m0n0wall machine and have that do the real routing work. It took a bit of work, but it's working pretty well. I have a cable connection. I have m0n0wall set up to utilize only 90% of the specified speed of my subscription, which is fine. But I've noticed that at certain times of the day (possibly when my true bandwidth drops below that 90%), there's more latency if the connection is used heavily, and traffic shaping doesn't seem to work as well. I suspect this is caused by the buffers on the WRT54GL still being unnecessarily large. If the connection is working as expected, they won't get filled, but in times of reduced bandwidth they would. Does anyone know the command I need to execute, on the WRT54GL running Tomato Firmware, to reduce the buffers on the WAN interface to the minimum size possible?

    Read the article

  • Microsoft word slow switching and safe mode

    - by huggie
    I don't know what I did, but recently when I opened Microsoft Word document, I experienced very slow app switch between it and other applications. When I start Word in Word's safe mode (as described here http://wordprocessing.about.com/od/troubleshootin1/qt/safemode.htm ), the issue disappears. Now I don't know where to find out which plugins were loaded that's causing the problem. Or where the normal.dot is if that's the problem. I'm on Windows 7 64 bit. Thanks.

    Read the article

  • Restoring WordPress EC2 instance from snapshot results in 403 Forbidden error

    - by Eric Matthew Turano
    This problem has been perplexing me for weeks now. Here's how the issue goes: Launch Amazon Linux 64-bit instance, successfully install WordPress, and site is active w/ no issues Create snapshot of the instance's root volume Shut down instance Create volume from snapshot, attach to instance, and reboot instance Associate Elastic IP with instance Once that's done and I try logging onto the site, I am redirected to myurl.com/wp-admin/install.php and greeted with this message: Forbidden: You don't have permission to access /wp-admin/install.php on this server. Apache/2.2.25 (Amazon) Server at www.myurl.com Port 80 Port 80 is open on the inbound security group settings, so that's not the issue. Keep in mind all I am doing is merely creating a new volume and attaching it to the same instance, and this issue comes up. What am I doing wrong, and how can I create a complete backup of my instance without this error occuring?

    Read the article

  • Oracle parameter array binding from c# executed parallel and serial on different servers

    - by redir_dev_nut
    I have two Oracle 9i 64 bit servers, dev and prod. Calling a procedure from a c# app with parameter array binding, prod executes the procedure simultaneously for each value in the parameter array, but dev executes for each value serially. So, if the sproc does: select count(*) into cnt from mytable where id = 123; if cnt = 0 then insert into mytable (id) values (123); end if; Assuming the table initially does not have an id = 123 row. Dev gets cnt = 0 for the first array parameter value, then 1 for each of the subsequent. Prod gets cnt = 0 for all array parameter values and inserts id 123 for each. Is this a configuration difference, an illusion due to speed difference, something else?

    Read the article

  • Does the "security" repository provides anything not found in the "updates" repository?

    - by netvope
    For the limited number of package I looked at (e.g. apache), I found that the package version in the updates repository is always newer than or equal to the version available in the security repository (provided that they exist). This gives me the impression that all security patches posted to the security repository are also posted to the updates repository. If this is true, I can remove all <release_name>-security entries in my apt sources.list and the <release_name>-updates entries will still give me the security patches. This will speed up apt-get update quite a bit. The best documentation I can found regarding the repositories is on the community help page "Important Security Updates (raring-security)". Patches for security vulnerabilities in Ubuntu packages. They are managed by the Ubuntu Security Team and are designed to change the behavior of the package as little as possible -- in fact, the minimum required to resolve the security problem. As a result, they tend to be very low-risk to apply and all users are urged to apply security updates. "Recommended Updates (raring-updates)". Updates for serious bugs in Ubuntu packaging that do not affect the security of the system. However, it does not mention whether the updates repository also includes everything in the security repository. Can anyone confirm (or disconfirm) this?

    Read the article

  • Unable to enter ubuntu after reboot PC; showing black screen with lots of weire words

    - by Phoenix Wei
    I use Wubi to install Ubuntu 12.04 on my Windows 7 system. My PC is Acer Aspire S5-391 with a 64-bit operating system. After I finish installing Wubi on Windows I reboot my PC as told by the instruction. Then I got a black screen with the following words shown: [[BGave up waiting for root device. Common Problems: -Boot args (cat/proc/cmdline) -Check rootdelay=(did the system wait long enough?) -check root=(did the system wait for the right device?) -Missing modules(cat/proc/modules; ls/dev) ALERT! /dev/disk/by-uuid/928E20128E1FEE0B does not exist. Dropping to a shell! BusyBox v1.18.5(ubuntu 1:1.18.5-1ubuntu4)built-in shell (ash) Enter 'help' for a list of built-in commands. (intramfs) _ I don't know how to deal with this but force my PC to shut down. I can still successfully enter Windows. But everytime I try to enter unbuntu, it shows the above words.......

    Read the article

  • "No bootable device - insert boot disk" after restart on Ubuntu 10.04 b1 update

    - by anjanesh
    I was making an update on my Ubuntu 10.04 beta1 64-bit PC when, after reboot I get PXE-E61: Mediaa test failure, check cable PXE-M0F: Exiting Intel Boot Agent. No bootable device - insert boot disk and press any key How did my boot record disappear ? BIOS Boot Boot Menu Type : Normal Boot Device Priority : <CD/DVD-ROM Drive> <Hard Disk Drive> <Floppy Drive> <Ethernet> Hard Driver Order : No Hard Disk Drive CD/DVD ROM Drive Order : <PT-TSSTcorp CDDV> Removable Drive Order : No Removable Drive Boot to Optical Devices : <Enable> Boot to Removable Devices : <Enable> Boot to Network : <Enable> USB Boot : <Enable>

    Read the article

  • Is there a way communicate or measure levels of abstraction?

    - by hydroparadise
    I'll be the first to say that this question is a bit... out there. But here are a couple questions I bear in mind : Is abstraction continuous or discrete? Is there a single unit of abstraction? But I'm not sure those questions are truly answerable or even really makes sence. My naive answer would be something along the lines of abitrarily discrete but not necescarily having a single unit measure. Here's what I mean... Take a Black Labrador; an abstraction that could be made is that a Black Lab is a type of animal. [Animal]<--[Black Lab] A Black Lab is also a type of Dog. [Dog]<--[Black Lab] One way to establish a degree of abstraction is by comparing the two the abstractions. We could say that [Animal] is more abstract than [Dog] in respect to a Black Lab. It just so happens [Animal] can also be used as an abstraction of [Dog] So, we might end up with something like [Animal]<--[Dog]<--[Black Lab] With the model above, one might be inclined to say that there's two hops of abstraction to get from [Black Lab] to [Animal]. But you can't exactly tell somebody they need one level abstraction and reasonalby expect they will come up with [Dog] given they aren't explicity given the options above. If I needed to tell someobody in a single email that they needed an abstract class with out knowing what that abstract class is, is there a way to communaticate a degree of abstraction such that they might end up on Dog instead of Animal? As a side note, what area of study might this type of analysis fall under?

    Read the article

  • Folder redirection save times are awful slow

    - by wbmeu
    I recently set up folder redirection for Documents on Server 2008, but it's painfully slow at the moment. My users are all using Visual Studio 2010, and a save takes 20-30 seconds (whereas it used to take 2 seconds locally). I understand this is because they are being saved to the server, and that takes time (though I did think it would be faster over a gigabit link, with servers on the same network). I enabled offline files on the share, set the option to All files or folders, and enabled Optimize for performance. I thought that this would pull all the files down locally (which I think it did), allow local editing of said files, synchronizing them quietly in the background from time to time (which it does not do - saves right to the share). Is there any way I can speed this process up a bit? Any other tweaks I can do?

    Read the article

  • C#: Why Decorate When You Can Intercept

    - by James Michael Hare
    We've all heard of the old Decorator Design Pattern (here) or used it at one time or another either directly or indirectly.  A decorator is a class that wraps a given abstract class or interface and presents the same (or a superset) public interface but "decorated" with additional functionality.   As a really simplistic example, consider the System.IO.BufferedStream, it itself is a descendent of System.IO.Stream and wraps the given stream with buffering logic while still presenting System.IO.Stream's public interface:   1: Stream buffStream = new BufferedStream(rawStream); Now, let's take a look at a custom-code example.  Let's say that we have a class in our data access layer that retrieves a list of products from a database:  1: // a class that handles our CRUD operations for products 2: public class ProductDao 3: { 4: ... 5:  6: // a method that would retrieve all available products 7: public IEnumerable<Product> GetAvailableProducts() 8: { 9: var results = new List<Product>(); 10:  11: // must create the connection 12: using (var con = _factory.CreateConnection()) 13: { 14: con.ConnectionString = _productsConnectionString; 15: con.Open(); 16:  17: // create the command 18: using (var cmd = _factory.CreateCommand()) 19: { 20: cmd.Connection = con; 21: cmd.CommandText = _getAllProductsStoredProc; 22: cmd.CommandType = CommandType.StoredProcedure; 23:  24: // get a reader and pass back all results 25: using (var reader = cmd.ExecuteReader()) 26: { 27: while(reader.Read()) 28: { 29: results.Add(new Product 30: { 31: Name = reader["product_name"].ToString(), 32: ... 33: }); 34: } 35: } 36: } 37: }            38:  39: return results; 40: } 41: } Yes, you could use EF or any myriad other choices for this sort of thing, but the germaine point is that you have some operation that takes a non-trivial amount of time.  What if, during the production day I notice that my application is performing slowly and I want to see how much of that slowness is in the query versus my code.  Well, I could easily wrap the logic block in a System.Diagnostics.Stopwatch and log the results to log4net or other logging flavor of choice: 1:     // a class that handles our CRUD operations for products 2:     public class ProductDao 3:     { 4:         private static readonly ILog _log = LogManager.GetLogger(typeof(ProductDao)); 5:         ... 6:         7:         // a method that would retrieve all available products 8:         public IEnumerable<Product> GetAvailableProducts() 9:         { 10:             var results = new List<Product>(); 11:             var timer = Stopwatch.StartNew(); 12:             13:             // must create the connection 14:             using (var con = _factory.CreateConnection()) 15:             { 16:                 con.ConnectionString = _productsConnectionString; 17:                 18:                 // and all that other DB code... 19:                 ... 20:             } 21:             22:             timer.Stop(); 23:             24:             if (timer.ElapsedMilliseconds > 5000) 25:             { 26:                 _log.WarnFormat("Long query in GetAvailableProducts() took {0} ms", 27:                     timer.ElapsedMillseconds); 28:             } 29:             30:             return results; 31:         } 32:     } In my eye, this is very ugly.  It violates Single Responsibility Principle (SRP), which says that a class should only ever have one responsibility, where responsibility is often defined as a reason to change.  This class (and in particular this method) has two reasons to change: If the method of retrieving products changes. If the method of logging changes. Well, we could “simplify” this using the Decorator Design Pattern (here).  If we followed the pattern to the letter, we'd need to create a base decorator that implements the DAOs public interface and forwards to the wrapped instance.  So let's assume we break out the ProductDAO interface into IProductDAO using your refactoring tool of choice (Resharper is great for this). Now, ProductDao will implement IProductDao and get rid of all logging logic: 1:     public class ProductDao : IProductDao 2:     { 3:         // this reverts back to original version except for the interface added 4:     } 5:  And we create the base Decorator that also implements the interface and forwards all calls: 1:     public class ProductDaoDecorator : IProductDao 2:     { 3:         private readonly IProductDao _wrappedDao; 4:         5:         // constructor takes the dao to wrap 6:         public ProductDaoDecorator(IProductDao wrappedDao) 7:         { 8:             _wrappedDao = wrappedDao; 9:         } 10:         11:         ... 12:         13:         // and then all methods just forward their calls 14:         public IEnumerable<Product> GetAvailableProducts() 15:         { 16:             return _wrappedDao.GetAvailableProducts(); 17:         } 18:     } This defines our base decorator, then we can create decorators that add items of interest, and for any methods we don't decorate, we'll get the default behavior which just forwards the call to the wrapper in the base decorator: 1:     public class TimedThresholdProductDaoDecorator : ProductDaoDecorator 2:     { 3:         private static readonly ILog _log = LogManager.GetLogger(typeof(TimedThresholdProductDaoDecorator)); 4:         5:         public TimedThresholdProductDaoDecorator(IProductDao wrappedDao) : 6:             base(wrappedDao) 7:         { 8:         } 9:         10:         ... 11:         12:         public IEnumerable<Product> GetAvailableProducts() 13:         { 14:             var timer = Stopwatch.StartNew(); 15:             16:             var results = _wrapped.GetAvailableProducts(); 17:             18:             timer.Stop(); 19:             20:             if (timer.ElapsedMilliseconds > 5000) 21:             { 22:                 _log.WarnFormat("Long query in GetAvailableProducts() took {0} ms", 23:                     timer.ElapsedMillseconds); 24:             } 25:             26:             return results; 27:         } 28:     } Well, it's a bit better.  Now the logging is in its own class, and the database logic is in its own class.  But we've essentially multiplied the number of classes.  We now have 3 classes and one interface!  Now if you want to do that same logging decorating on all your DAOs, imagine the code bloat!  Sure, you can simplify and avoid creating the base decorator, or chuck it all and just inherit directly.  But regardless all of these have the problem of tying the logging logic into the code itself. Enter the Interceptors.  Things like this to me are a perfect example of when it's good to write an Interceptor using your class library of choice.  Sure, you could design your own perfectly generic decorator with delegates and all that, but personally I'm a big fan of Castle's Dynamic Proxy (here) which is actually used by many projects including Moq. What DynamicProxy allows you to do is intercept calls into any object by wrapping it with a proxy on the fly that intercepts the method and allows you to add functionality.  Essentially, the code would now look like this using DynamicProxy: 1: // Note: I like hiding DynamicProxy behind the scenes so users 2: // don't have to explicitly add reference to Castle's libraries. 3: public static class TimeThresholdInterceptor 4: { 5: // Our logging handle 6: private static readonly ILog _log = LogManager.GetLogger(typeof(TimeThresholdInterceptor)); 7:  8: // Handle to Castle's proxy generator 9: private static readonly ProxyGenerator _generator = new ProxyGenerator(); 10:  11: // generic form for those who prefer it 12: public static object Create<TInterface>(object target, TimeSpan threshold) 13: { 14: return Create(typeof(TInterface), target, threshold); 15: } 16:  17: // Form that uses type instead 18: public static object Create(Type interfaceType, object target, TimeSpan threshold) 19: { 20: return _generator.CreateInterfaceProxyWithTarget(interfaceType, target, 21: new TimedThreshold(threshold, level)); 22: } 23:  24: // The interceptor that is created to intercept the interface calls. 25: // Hidden as a private inner class so not exposing Castle libraries. 26: private class TimedThreshold : IInterceptor 27: { 28: // The threshold as a positive timespan that triggers a log message. 29: private readonly TimeSpan _threshold; 30:  31: // interceptor constructor 32: public TimedThreshold(TimeSpan threshold) 33: { 34: _threshold = threshold; 35: } 36:  37: // Intercept functor for each method invokation 38: public void Intercept(IInvocation invocation) 39: { 40: // time the method invocation 41: var timer = Stopwatch.StartNew(); 42:  43: // the Castle magic that tells the method to go ahead 44: invocation.Proceed(); 45:  46: timer.Stop(); 47:  48: // check if threshold is exceeded 49: if (timer.Elapsed > _threshold) 50: { 51: _log.WarnFormat("Long execution in {0} took {1} ms", 52: invocation.Method.Name, 53: timer.ElapsedMillseconds); 54: } 55: } 56: } 57: } Yes, it's a bit longer, but notice that: This class ONLY deals with logging long method calls, no DAO interface leftovers. This class can be used to time ANY class that has an interface or virtual methods. Personally, I like to wrap and hide the usage of DynamicProxy and IInterceptor so that anyone who uses this class doesn't need to know to add a Castle library reference.  As far as they are concerned, they're using my interceptor.  If I change to a new library if a better one comes along, they're insulated. Now, all we have to do to use this is to tell it to wrap our ProductDao and it does the rest: 1: // wraps a new ProductDao with a timing interceptor with a threshold of 5 seconds 2: IProductDao dao = TimeThresholdInterceptor.Create<IProductDao>(new ProductDao(), 5000); Automatic decoration of all methods!  You can even refine the proxy so that it only intercepts certain methods. This is ideal for so many things.  These are just some of the interceptors we've dreamed up and use: Log parameters and returns of methods to XML for auditing. Block invocations to methods and return default value (stubbing). Throw exception if certain methods are called (good for blocking access to deprecated methods). Log entrance and exit of a method and the duration. Log a message if a method takes more than a given time threshold to execute. Whether you use DynamicProxy or some other technology, I hope you see the benefits this adds.  Does it completely eliminate all need for the Decorator pattern?  No, there may still be cases where you want to decorate a particular class with functionality that doesn't apply to the world at large. But for all those cases where you are using Decorator to add functionality that's truly generic.  I strongly suggest you give this a try!

    Read the article

< Previous Page | 332 333 334 335 336 337 338 339 340 341 342 343  | Next Page >