Search Results

Search found 14236 results on 570 pages for 'times square'.

Page 43/570 | < Previous Page | 39 40 41 42 43 44 45 46 47 48 49 50  | Next Page >

  • Throttle connections to web service if load gets too high?

    - by Joseph Turian
    I have a web site that communicates via XMLRPC with an XMLRPC server web service. (The web service is written in Python using xmlrpclib.) I believe that xmlrpclib will block while it is handling one request. So if there are three users with an xmlrpclib request ahead of you, your response takes four times as long. How do I handle it if I receive too many XMLRPC requests and the web service gets bogged down and has slow response time? If I am getting slashdotted, my preferred behavior is that the first users get good response times and everyone else is told to come back later. I think this is superior to giving everyone terrible response times. How do I create this behavior? Is this called load-balancing? I am not actually balancing though, until I have multiple servers.

    Read the article

  • Why do strace/truss sometimes 'fix' stuck processes?

    - by Emmel
    Sometimes you have a stuck process that's been stuck for a while, and as soon as you go to poke at it with strace/truss just to see what's going on, it gets magically unstuck and continues to run! So from merely 'observing' these programs have some impact in the running of the stuck programs .. what's happening here? Did strace (I guess via ptrace(2)?) send a signal, causing the program to cease blocking, or such? I've seen this several times -- most recently on Linux RHEL 4 (and a Perl script mucking with processes and doing some network IO in that case), but in a few other contexts as well. Unfortunately, I can't reproduce this, as it times to happen ... in times of crisis. But my curiosity remains. :-) Any elucidation appreciated.

    Read the article

  • Windows 7 offline files - work temporarily offline even if network connection works

    - by Robert
    Sometimes I am connected via VPN to a network containing the server where files are stored which are cached by Windows offline files feature. Sometimes the connection works good and working this way is not a problem - on other times working is quite a pain because of high latency when working with the files in the Windows explorer. Is there an interactive way how a user (with admin permissions) can temporary suspend online usage of offline files? I already activated the "Transparent caching" group policy feature (Computer Configuration Policies Administrative Templates Networks Offline Files) with a network latency of 200msec but from my experience even if I get ping times to the file server of less than 40msec online usage is quite tenacious. Setting low latency times at this point causes the offline files often to toggle which makes problems with some applications working with several files and requires them to be consistent (like SVN client).

    Read the article

  • Can a Mini DisplayPort to HDMI cable support resolutions above 1920x1200?

    - by cnst
    Is it theoretically possible for a cheapo Mini DisplayPort to HDMI cable or adapter to support resolutions above 1920 × 1200, e.g. 2560 × 1440 (QHD)? Or is it always electrically-equivalent to a single-link DVI, and such resolutions above 1920×1200 are out of the question? From empirical evidence, I've tried out some rather expensive brand-name adapter from a local Apple dealer that was marked as HDMI 1.3 compliant with my mid-2013 MacBook Air (5000) and also with X230 (4000), and a QHD monitor, but was only getting a maximum of FHD resulution through such an arrangement.

    Read the article

  • Quick Books accounting software

    - by Randall Davis
    Using a square 17" lcd monitor, and setting the Monitor to display text in larger font than default, some of the pages in QB have the bottom 2 or 3 lines chopped off. QB support has no ideas for a different/larger monitor that would solve the problem for those of us with 50 something eyes. Seems like everyone is going to the widescreen format, but when we tried one on the QB stuff, it spreads out the page to the point that it is deformed...too wide. Does anybody make a new square screen monitor in 19, 20, or bigger that would solve this issue. we can't be the only ones experiencing this.

    Read the article

  • Customize autoindent settings in VIMRC file

    - by Shane Reustle
    I have autoindent enabled in my .vimrc file but have run into an annoying bug/feature. For example, when I'm tabbed in 3 times, and I hit return, the new line is also tabbed in 3 times. Then when I hit enter again, that new line is also indented 3 times, as it should. The problem occurs when I go back up to the previous line (the first of the 2 new lines). VIM automatically removes the whitespace because it saw it as an empty line. Is there a way to disable this from happening? I'd like to be able to back to coding like this: function test(){ <return> <return> } <up> <right> Thanks!

    Read the article

  • Is there a constraint-based scheduling/calendar application?

    - by wonsungi
    Is there a constraint-based scheduling/calendar application? This application would be used to coordinate multiple people's schedules. Two basic use cases: Multiple people need to schedule a time to meet together. Everyone is busy at different days/times. Each person enters blocks of days/times they cannot meet, and the application suggests the best times to meet given a desired time range. Multiple people need to use some common resources for a specific length of time (over some time span like a week), but the exact date/time does not matter. These people enter the resources and time needed, and the application suggests the best way to share these resources. This use case still accounts for people's blocks of busy time. I imagine this program would be graphical, but other interfaces would be acceptable. Also preferable if web-based/works on both PC's and Mac's, but PC-only/Mac-only solutions are acceptable.

    Read the article

  • How can I keep gnu screen from becoming unresponsive after losing my SSH connection?

    - by Mikey
    I use a VPN tunnel to connect to my work network and then SSH to connect to my work PC running cygwin. Once logged in I can attach to a screen session and everything works great. Now, after a while, I walk away from my computer and sooner or later, the VPN tunnel times out. The SSH connection on each end eventually times out and then I eventually come back to my computer to do some work. Theoretically, this should be a simple matter of just restarting the VPN, reconnecting via SSH, and then running "screen -r -d". However apparently when the sshd daemon times out on the cygwin PC, it leaves the screen session in some kind of hung state. I can reproduce a similar hung state by clicking the close box on a cygwin bash shell window while it's running a screen session. Is there any way to get the screen session to recover once this has happened, so that I don't lose anything?

    Read the article

  • Resize ntfs system partitions with GParted?

    - by ane
    Trying to resize 2 ntfs system and boot partitions (windows 2003 server) using GParted. Goal: Resize D: (/dev/sda1) to ~850G - this is the boot drive with D:\ntldr, boot.ini, etc. Resize C: (/dev/sda5) to 100G - this is the system drive with C:\windows Tried resizing /dev/sda5 first and got the chkdsk error shown in screenshot #2. (You must run chkdsk /f). Have already run chkdsk /f on C: multiple times with no bad sectors or errors found. Have also run multiple chkdsk /f's on the underlying hard disk multiple times and rebooted way more than a couple times with the same error. How do you force gparted to ignore this error and resize? I found there is --force option to ntfsresize but don't know how to get the GParted ISO live CD to use it. How do you move the unallocated space so an extra ~750G is to the right of /dev/sda1 (D:), and an extra 10G to the right of /dev/sda5 (C:)

    Read the article

  • Visual Studio 2010 Graphic Artifacts

    - by jonathan
    This problem started happening to me once I installed SP1 onto my Windows 7 Ultimate install. When changing between tabs, or even just hovering my mouse over buttons, VS2010 starts artifacting. It's bad enough where I often times can't see any of the code I'm working on. Sometimes just the button the mouse is over will go black, and other times the entire code panel will turn a black and grey pattern. This problem only happens with Visual Studio 2010 (2008 works fine). The problem remained when I upgraded Visual Studio to SP1. I've also uninstalled and reinstalled Visual Studio and the graphics drivers several times now, and I'm about ready to reinstall Windows 7, but I figured I'd ask for suggestions first. Google, as well as searching through Stack Exchange, did not turn up anything useful.

    Read the article

  • Excel: Look up function for combinations of cells in a single column

    - by Rebecca
    I'm looking to find the number of times a certain combination of values appears in a single column, I was hoping to do this in Excel but I'm starting to think it may not be possible. As an example, I have a list that looks like a longer vertical version of this: F1 F3 F2 F4 F1 F3 F4 F1 F3 F4 F1 F3 F4 And I want to know how many times a specific order (say F1 F3 F4) occurs, in this example 3 times (in my case the lookup sequences are 8 cells long). Is there a way to run over the whole column and identify the instances where this combination of cells occurs? I'm running Excel 2008 for Mac. Many thanks!

    Read the article

  • Windows 7 Won't connect to Wireless Router too far away (but still have 3 bars)

    - by Kerry
    I have found this problem a couple of times. Windows 7 with Intel AGN 5100 won't connect to a WPA2-PSK router when it's too far away. Both times I've had this happen I was in a foreign country (London and Stockholm), and both times I was upstairs while the router was downstairs. Now, it still has 2-3 bars when looking at local WiFi, but I get the "will not connect" error, and debugging doesn't help at all (it doesn't know what's wrong). I went downstairs and it connected immediately (but I need to be able to have it upstairs). My Android Cell Phone and iPad were able to connect upstairs just fine. Any suggestions?

    Read the article

  • nslookup returning different results

    - by Sterno
    I'm having a problem with my machine. A site that I used to be able to access is no longer being found. After running nslookup, I notice that about 9 times out of 10 it returns a specific IP which times out if I ping it, but about 1 in 10 times it returns a different IP which works when I ping it. I've even tried adding an option parameter into nslookup to hit different DNS servers (such as Google's public DNS) and am getting the same result. Any idea what would cause the IP returned by DNS lookup to change back and forth like that?

    Read the article

  • Photoshop changes colors when moved to a different monitor

    - by Jason
    This Yahoo! answers question pretty much sums up my predicament. Unfortunately I haven't really found an actual answer. Here's a screen shot of what happens when I place Photoshop between my monitors. Imagine that the left side of my laptop is the right square and the yellow is the right side of my monitor. When I move the program to one side fully or the other, it takes on the corresponding color. Obviously the color on the right is correct and Photoshop is changing the color of the image when it moves to my external monitor. Also notice how none of the tools or anything are different colors, just the actual image itself. How do I fix this? EDIT You may also notice that the color palette in the left corner is showing that yellow tinge. I didn't actually pick that yellow color, it's supposed to be showing the grey on the left that I used to fill in the square.

    Read the article

  • How to sort time column by value instead of alphabetically

    - by Turch
    I'm creating a pivot table by connecting to an SSAS tabular model (Data - From Other Sources - From Analysis Services) . The model has a "time" column that I want to sort by. The default (database) sorting is earliest to latest: When I click the triangle next to 'Row Labels' and select "Sort A to Z", I get alphabetically sorted times: How can I get the times to sort by time? Changing the number format from "General" to "Time" does nothing. The times aren't stored as text either - the data type of the column in the SSAS model is Auto (Date)

    Read the article

  • Stop a Windows XP taskbar item from blinking forever

    - by EMP
    In Windows XP when an application that doesn't currently have the focus wants to attract the user's attention its Taskbar item blinks. Often it blinks 3 times and then stops, which is fine. However, sometimes it just keeps blinking forever. An example of that is Firefox with a new JavaScript confirmation dialog. This is really annoying if I don't want to switch to that application just now - I basically cannot focus on anything else because of this stupid blinking thing distracting me! How do I force all apps to blink only 3 times (or X times) and then stop?

    Read the article

  • What will Time Machine do when

    - by Joel Budgor
    When Time Machine says "I will delete the oldest files first" does it mean this literally. Here is a theoretical example. Source Drive: 300 GB, consisting of 1 280 GB file and a 1 GB file. Backup Drive: 300 GB The initial backup will backup both files, using 281 GB. If I modify the 1 GB file 21 times, what will Time machine do when I run out of room on the backup drive; Delete the original 280 GB because it is the oldest file or delete the oldest version of the file I have modified 21 times. I hope it would delete the oldest version of the file I have modified 21 times, but I want to be sure. Thanks, Joel Budgor

    Read the article

  • In Word 2010, how can I insert a control that updates a document property when the content is edited?

    - by michielvoo
    In Word 2010 you can insert document properties from the Insert ribbon. For example: Insert > Text > Quick Parts > Document Property > Subject If you do this a control will be added with the following placeholder text: [Subject] Notice the square brackets around the word Subject. These square brackets are not present in the placeholder text for manually inserted controls (which can be inserted using the Developer ribbon). When a user opens the document, replaces the placeholder text with his own text, the document metadata is updated. This behavior is different from a field which can only be updated by first updating the metadata. Unfortunately the range of document properties that can be added to the document is limited, and I would like to add other (custom) properties this way as well. How can I manually insert a control that will update document metadata with the content entered in the control?

    Read the article

  • How much faster is a 64bit CPU than 32bit CPU? [closed]

    - by W.N.
    I just need the result in theory. I'm not an expert in computer architecture, just a software developer. Most of my friends think 64bit-CPU is 2 times faster than 32bit-CPU. But I think 64-CPU is 2 ^ 2 = 4 times faster than 32bit-CPU (in theory). Which is the right answer to this question? And, if there were 128bit-CPU, how many times would it faster than a 32bit-CPU? PS: I searched with Google, and found a link that referred to benchmarks that supported my answer. I've seen a benchmark where 64bit was 4x faster but that was with a particular encryption where the extra registers available made the difference

    Read the article

  • Delphi: Using Enumerators to filter TList<T: class> by class type?

    - by afrazier
    Okay, this might be confusing. What I'm trying to do is use an enumerator to only return certain items in a generic list based on class type. Given the following hierarchy: type TShapeClass = class of TShape; TShape = class(TObject) private FId: Integer; public function ToString: string; override; property Id: Integer read FId write FId; end; TCircle = class(TShape) private FDiameter: Integer; public property Diameter: Integer read FDiameter write FDiameter; end; TSquare = class(TShape) private FSideLength: Integer; public property SideLength: Integer read FSideLength write FSideLength; end; TShapeList = class(TObjectList<TShape>) end; How can I extend TShapeList such that I can do something similar to the following: procedure Foo; var ShapeList: TShapeList; Shape: TShape; Circle: TCircle; Square: TSquare; begin // Create ShapeList and fill with TCircles and TSquares for Circle in ShapeList<TCircle> do begin // do something with each TCircle in ShapeList end; for Square in ShapeList<TSquare> do begin // do something with each TSquare in ShapeList end; for Shape in ShapeList<TShape> do begin // do something with every object in TShapeList end; end; I've tried extending TShapeList using an adapted version of Primoz Gabrijelcic's bit on Parameterized Enumerators using a factory record as follows: type TShapeList = class(TObjectList<TShape>) public type TShapeFilterEnumerator<T: TShape> = record private FShapeList: TShapeList; FClass: TShapeClass; FIndex: Integer; function GetCurrent: T; public constructor Create(ShapeList: TShapeList); function MoveNext: Boolean; property Current: T read GetCurrent; end; TShapeFilterFactory<T: TShape> = record private FShapeList: TShapeList; public constructor Create(ShapeList: TShapeList); function GetEnumerator: TShapeFilterEnumerator<T>; end; function FilteredEnumerator<T: TShape>: TShapeFilterFactory<T>; end; Then I modified Foo to be: procedure Foo; var ShapeList: TShapeList; Shape: TShape; Circle: TCircle; Square: TSquare; begin // Create ShapeList and fill with TCircles and TSquares for Circle in ShapeList.FilteredEnumerator<TCircle> do begin // do something with each TCircle in ShapeList end; for Square in ShapeList.FilteredEnumerator<TSquare> do begin // do something with each TSquare in ShapeList end; for Shape in ShapeList.FilteredEnumerator<TShape> do begin // do something with every object in TShapeList end; end; However, Delphi 2010 is throwing an error when I try to compile Foo about Incompatible types: TCircle and TShape. If I comment out the TCircle loop, then I get a similar error about TSquare. If I comment the TSquare loop out as well, the code compiles and works. Well, it works in the sense that it enumerates every object since they all descend from TShape. The strange thing is that the line number that the compiler indicates is 2 lines beyond the end of my file. In my demo project, it indicated line 177, but there's only 175 lines. Is there any way to make this work? I'd like to be able to assign to Circle directly without going through any typecasts or checking in my for loop itself.

    Read the article

  • Plotting points so that they do not overlap if they have the same co-ordinates

    - by betamax
    Hi everyone, I have a function that takes longitude and latitude and converts it to x and y to be plotted. The conversion to X and Y is working fine and that is not what I have the problem with. I want to ensure that two points are not plotted in the same place. In one set of results there are about 30 on top of each other (because they have the same latitude and longitude), this number could be a lot larger. At the moment I am trying to achieve this by moving points to the left, right, top or bottom of the point to make a square. Once a square made up of points has been drawn, then moving to the next row on and drawing another square of points around the previous square. The code is Javascript but it is very generic so I guess it's slightly irrelevant. My code is as follows: var prevLong, prevLat, rand = 1, line = 1, spread = 8, i = 0; function plot_points(long, lat){ // CODE HERE TO CONVERT long and lat into x and y // System to not overlap the points if((prevLat == lat) && (prevLong == long)) { if(rand==1) { x += spread*line; } else if(rand==2) { x -= spread*line; } else if(rand==3) { y += spread*line; } else if(rand==4) { y -= spread*line; } else if(rand==5) { x += spread*line; y += spread*line; } else if(rand==6) { x -= spread*line; y -= spread*line; } else if(rand==7) { x += spread*line; y -= spread*line; } else if(rand==8) { x -= spread*line; y += spread*line; // x = double } else if(rand==9) { x += spread*line; y += spread; } else if(rand==10) { x += spread; y += spread*line; } else if(rand==11) { x -= spread*line; y -= spread; } else if(rand==12) { x -= spread; y -= spread*line; } else if(rand==13) { x += spread*line; y -= spread; } else if(rand==14) { x += spread; y -= spread*line; } else if(rand==15) { x += spread*line; y -= spread; } else if(rand==16) { x += spread; y -= spread*line; } else if(rand==17) { x -= spread*line; y += spread; } else if(rand==18) { x -= spread; y += spread*line; } else if(rand==19) { x -= spread*line; y += spread; } else if(rand==20) { x -= spread; y += spread*line; } if(rand == 20) {rand = 1; line++; } else { rand++; } i++ } else { line = 1; i = 0; } prevLat = latitude; prevLong = longitude; return [x,y]; } This is the output: It isn't working correctly and I don't even know if I am approaching the problem in a correct way at all. Has anyone had to do this before? What method would you suggest?

    Read the article

  • Termite colony simulator using java

    - by ashii
    hi everyone, i hve to design a simulator that will maintain an environment, which consists of a collection of patches arranged in a rectangular grid of arbitrary size. Each patch contains zero or more wood chips. A patch may be occupied by one or more termites or predators, which are mobile entities that live within the world and behave according to simple rules. A TERMITE can pick up a wood chip from the patch that it is currently on, or drop a wood chip that it is carrying. Termites travel around the grid by moving randomly from their current patch to a neighbouring patch, in one of four possible directions. New termites may hatch from eggs, and this is simulated by the appearance of a new termite at a random patch within the environment. A PREDATOR moves in a similar way to termites, and if a predator moves onto a patch that is occupied by a termite, then the predator eats the termite. At initialization, the termites, predators, and wood chips are distributed randomly in the environment. Simulation then proceeds in a loop, and the new state of the environment is obtained at each iteration. i have designed the arena using jpanel but im not able to randomnly place wood,termite and predator in that arena. can any one help me out?? my code for the arena is as following: 01 import java.awt.*; 02 import javax.swing.*; 03 04 public class Arena extends JPanel 05 { 06 private static final int Rows = 8; 07 private static final int Cols = 8; 08 public void paint(Graphics g) 09 { 10 Dimension d = this.getSize(); 11 // don't draw both sets of squares, when you can draw one 12 // fill in the entire thing with one color 13 g.setColor(Color.WHITE); 14 // make the background 15 g.fillRect(0,0,d.width,d.height); 16 // draw only black 17 g.setColor(Color.BLACK); 18 // pick a square size based on the smallest dimension 19 int sqsize = ((d.width<d.height) ? d.width/Cols : d.height/Rows); 20 // loop for rows 21 for (int row=0; row<Rows; row++) 22 { 23 int y = row*sqsize; // y stays same for entire row, set here 24 int x = (row%2)*sqsize; // x starts at 0 or one square in 25 for (int i=0; i<Cols/2; i++) 26 { 27 // you will only be drawing half the squares per row 28 // draw square 29 g.fillRect(x,y,sqsize,sqsize); 30 // move two square sizes over 31 x += sqsize*2; 32 } 33 } 34 35 } 36 37 38 39 public void update(Graphics g) { paint(g); } 40 41 42 43 public static void main (String[] args) 44 { 45 46 JFrame frame = new JFrame("Arena"); 47 frame.setSize(600,400); 48 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 49 frame.setContentPane(new Arena()); 50 frame.setVisible(true); 51 } 52 53 }

    Read the article

  • Change Data Capture Webinar

    I am going to be doing a webinar with our friends at Attunity on Change Data Capture.  Attunity have a good story around this technology and you can use it in your SSIS loads to great effect. Join Attunity and Konesans/SQLIS for a Webinar on 17 September Space is limited. Reserve your Webinar seat now at: https://www1.gotomeeting.com/register/693735512 Want increased efficiency and real-time speed when conducting ETL loads? Need lower implementation costs while minimizing system impact? Learn how change data capture (CDC) technologies can reduce ETL load times. Allan Mitchell, Principal Consultant at Konesans and SQLServer MVP specialising in ETL, will explain CDC concepts and benefits and how CDC can dramatically reduce ETL load times. Ian Archibald, Pre-Sales Director EMEA for Attunity, will present and demonstrate Attunity's award-winning Oracle-CDC for SSIS, a fully-integrated SSIS solution for designing, deploying and managing Oracle CDC processes. Title: Change Data Capture - Reducing ETL Load Times Date: Thursday, September 17, 2009 Time: 10:00 AM - 11:00 AM BST ABOUT THE SPEAKERS: Allan Mitchell is the joint owner of Konesans Ltd, a UK based consultancy specializing in SQL Server, and most importantly SQL Server Integration Services. Having been working with SQL Server from 6.5 onwards, he has extensive experience in many aspects of SQL Server, but now focuses on the BI suite of tools. He is a SQL Server MVP, a frequent poster on the MS SSIS/DTS newsgroups, and runs the sqldts.com and sqlis.com resource sites. Ian Archibald, Attunity Pre-Sales Director EMEA, has worked in Attunity’s UK Office for 17 years. An expert in Attunity solutions, Ian has extensive knowledge of Attunity’s products and data integration & CDC technologies. After registering you will receive a confirmation email containing information about joining the Webinar. System Requirements PC-based attendees Required: Windows® 2000, XP Home, XP Pro, 2003 Server, Vista Macintosh®-based attendees Required: Mac OS® X 10.4 (Tiger®) or newer

    Read the article

  • Change Data Capture Webinar

    I am going to be doing a webinar with our friends at Attunity on Change Data Capture.  Attunity have a good story around this technology and you can use it in your SSIS loads to great effect. Join Attunity and Konesans/SQLIS for a Webinar on 17 September Space is limited. Reserve your Webinar seat now at: https://www1.gotomeeting.com/register/693735512 Want increased efficiency and real-time speed when conducting ETL loads? Need lower implementation costs while minimizing system impact? Learn how change data capture (CDC) technologies can reduce ETL load times. Allan Mitchell, Principal Consultant at Konesans and SQLServer MVP specialising in ETL, will explain CDC concepts and benefits and how CDC can dramatically reduce ETL load times. Ian Archibald, Pre-Sales Director EMEA for Attunity, will present and demonstrate Attunity's award-winning Oracle-CDC for SSIS, a fully-integrated SSIS solution for designing, deploying and managing Oracle CDC processes. Title: Change Data Capture - Reducing ETL Load Times Date: Thursday, September 17, 2009 Time: 10:00 AM - 11:00 AM BST ABOUT THE SPEAKERS: Allan Mitchell is the joint owner of Konesans Ltd, a UK based consultancy specializing in SQL Server, and most importantly SQL Server Integration Services. Having been working with SQL Server from 6.5 onwards, he has extensive experience in many aspects of SQL Server, but now focuses on the BI suite of tools. He is a SQL Server MVP, a frequent poster on the MS SSIS/DTS newsgroups, and runs the sqldts.com and sqlis.com resource sites. Ian Archibald, Attunity Pre-Sales Director EMEA, has worked in Attunity’s UK Office for 17 years. An expert in Attunity solutions, Ian has extensive knowledge of Attunity’s products and data integration & CDC technologies. After registering you will receive a confirmation email containing information about joining the Webinar. System Requirements PC-based attendees Required: Windows® 2000, XP Home, XP Pro, 2003 Server, Vista Macintosh®-based attendees Required: Mac OS® X 10.4 (Tiger®) or newer

    Read the article

  • Time Warp

    - by Jesse
    It’s no secret that daylight savings time can wreak havoc on systems that rely heavily on dates. The system I work on is centered around recording dates and times, so naturally my co-workers and I have seen our fair share of date-related bugs. From time to time, however, we come across something that we haven’t seen before. A few weeks ago the following error message started showing up in our logs: “The supplied DateTime represents an invalid time. For example, when the clock is adjusted forward, any time in the period that is skipped is invalid.” This seemed very cryptic, especially since it was coming from areas of our application that are typically only concerned with capturing date-only (no explicit time component) from the user, like reports that take a “start date” and “end date” parameter. For these types of parameters we just leave off the time component when capturing the date values, so midnight is used as a “placeholder” time. How is midnight an “invalid time”? Globalization Is Hard Over the last couple of years our software has been rolled out to users in several countries outside of the United States, including Brazil. Brazil begins and ends daylight savings time at midnight on pre-determined days of the year. On October 16, 2011 at midnight many areas in Brazil began observing daylight savings time at which time their clocks were set forward one hour. This means that at the instant it became midnight on October 16, it actually became 1:00 AM, so any time between 12:00 AM and 12:59:59 AM never actually happened. Because we store all date values in the database in UTC, always adjust any “local” dates provided by a user to UTC before using them as filters in a query. The error we saw was thrown by .NET when trying to convert the Brazilian local time of 2011-10-16 12:00 AM to UTC since that local time never actually existed. We hadn’t experienced this same issue with any of our US customers because the daylight savings time changes in the US occur at 2:00 AM which doesn’t conflict with our “placeholder” time of midnight. Detecting Invalid Times In .NET you might use code similar to the following for converting a local time to UTC: var localDate = new DateTime(2011, 10, 16); //2011-10-16 @ midnight const string timeZoneId = "E. South America Standard Time"; //Windows system timezone Id for "Brasilia" timezone. var localTimeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId); var convertedDate = TimeZoneInfo.ConvertTimeToUtc(localDate, localTimeZone); The code above throws the “invalid time” exception referenced above. We could try to detect whether or not the local time is invalid with something like this: var localDate = new DateTime(2011, 10, 16); //2011-10-16 @ midnight const string timeZoneId = "E. South America Standard Time"; //Windows system timezone Id for "Brasilia" timezone. var localTimeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId); if (localTimeZone.IsInvalidTime(localDate)) localDate = localDate.AddHours(1); var convertedDate = TimeZoneInfo.ConvertTimeToUtc(localDate, localTimeZone); This code works in this particular scenario, but it hardly seems robust. It also does nothing to address the issue that can arise when dealing with the ambiguous times that fall around the end of daylight savings. When we roll the clocks back an hour they record the same hour on the same day twice in a row. To continue on with our Brazil example, on February 19, 2012 at 12:00 AM, it will immediately become February 18, 2012 at 11:00 PM all over again. In this scenario, how should we interpret February 18, 2011 11:30 PM? Enter Noda Time I heard about Noda Time, the .NET port of the Java library Joda Time, a little while back and filed it away in the back of my mind under the “sounds-like-it-might-be-useful-someday” category.  Let’s see how we might deal with the issue of invalid and ambiguous local times using Noda Time (note that as of this writing the samples below will only work using the latest code available from the Noda Time repo on Google Code. The NuGet package version 0.1.0 published 2011-08-19 will incorrectly report unambiguous times as being ambiguous) : var localDateTime = new LocalDateTime(2011, 10, 16, 0, 0); const string timeZoneId = "Brazil/East"; var timezone = DateTimeZone.ForId(timeZoneId); var localDateTimeMaping = timezone.MapLocalDateTime(localDateTime); ZonedDateTime unambiguousLocalDateTime; switch (localDateTimeMaping.Type) { case ZoneLocalMapping.ResultType.Unambiguous: unambiguousLocalDateTime = localDateTimeMaping.UnambiguousMapping; break; case ZoneLocalMapping.ResultType.Ambiguous: unambiguousLocalDateTime = localDateTimeMaping.EarlierMapping; break; case ZoneLocalMapping.ResultType.Skipped: unambiguousLocalDateTime = new ZonedDateTime( localDateTimeMaping.ZoneIntervalAfterTransition.Start, timezone); break; default: throw new InvalidOperationException(string.Format("Unexpected mapping result type: {0}", localDateTimeMaping.Type)); } var convertedDateTime = unambiguousLocalDateTime.ToInstant().ToDateTimeUtc(); Let’s break this sample down: I’m using the Noda Time ‘LocalDateTime’ object to represent the local date and time. I’ve provided the year, month, day, hour, and minute (zeros for the hour and minute here represent midnight). You can think of a ‘LocalDateTime’ as an “invalidated” date and time; there is no information available about the time zone that this date and time belong to, so Noda Time can’t make any guarantees about its ambiguity. The ‘timeZoneId’ in this sample is different than the ones above. In order to use the .NET TimeZoneInfo class we need to provide Windows time zone ids. Noda Time expects an Olson (tz / zoneinfo) time zone identifier and does not currently offer any means of mapping the Windows time zones to their Olson counterparts, though project owner Jon Skeet has said that some sort of mapping will be publicly accessible at some point in the future. I’m making use of the Noda Time ‘DateTimeZone.MapLocalDateTime’ method to disambiguate the original local date time value. This method returns an instance of the Noda Time object ‘ZoneLocalMapping’ containing information about the provided local date time maps to the provided time zone.  The disambiguated local date and time value will be stored in the ‘unambiguousLocalDateTime’ variable as an instance of the Noda Time ‘ZonedDateTime’ object. An instance of this object represents a completely unambiguous point in time and is comprised of a local date and time, a time zone, and an offset from UTC. Instances of ZonedDateTime can only be created from within the Noda Time assembly (the constructor is ‘internal’) to ensure to callers that each instance represents an unambiguous point in time. The value of the ‘unambiguousLocalDateTime’ might vary depending upon the ‘ResultType’ returned by the ‘MapLocalDateTime’ method. There are three possible outcomes: If the provided local date time is unambiguous in the provided time zone I can immediately set the ‘unambiguousLocalDateTime’ variable from the ‘Unambiguous Mapping’ property of the mapping returned by the ‘MapLocalDateTime’ method. If the provided local date time is ambiguous in the provided time zone (i.e. it falls in an hour that was repeated when moving clocks backward from Daylight Savings to Standard Time), I can use the ‘EarlierMapping’ property to get the earlier of the two possible local dates to define the unambiguous local date and time that I need. I could have also opted to use the ‘LaterMapping’ property in this case, or even returned an error and asked the user to specify the proper choice. The important thing to note here is that as the programmer I’ve been forced to deal with what appears to be an ambiguous date and time. If the provided local date time represents a skipped time (i.e. it falls in an hour that was skipped when moving clocks forward from Standard Time to Daylight Savings Time),  I have access to the time intervals that fell immediately before and immediately after the point in time that caused my date to be skipped. In this case I have opted to disambiguate my local date and time by moving it forward to the beginning of the interval immediately following the skipped period. Again, I could opt to use the end of the interval immediately preceding the skipped period, or raise an error depending on the needs of the application. The point of this code is to convert a local date and time to a UTC date and time for use in a SQL Server database, so the final ‘convertedDate’  variable (typed as a plain old .NET DateTime) has its value set from a Noda Time ‘Instant’. An 'Instant’ represents a number of ticks since 1970-01-01 at midnight (Unix epoch) and can easily be converted to a .NET DateTime in the UTC time zone using the ‘ToDateTimeUtc()’ method. This sample is admittedly contrived and could certainly use some refactoring, but I think it captures the general approach needed to take a local date and time and convert it to UTC with Noda Time. At first glance it might seem that Noda Time makes this “simple” code more complicated and verbose because it forces you to explicitly deal with the local date disambiguation, but I feel that the length and complexity of the Noda Time sample is proportionate to the complexity of the problem. Using TimeZoneInfo leaves you susceptible to overlooking ambiguous and skipped times that could result in run-time errors or (even worse) run-time data corruption in the form of a local date and time being adjusted to UTC incorrectly. I should point out that this research is my first look at Noda Time and I know that I’ve only scratched the surface of its full capabilities. I also think it’s safe to say that it’s still beta software for the time being so I’m not rushing out to use it production systems just yet, but I will definitely be tinkering with it more and keeping an eye on it as it progresses.

    Read the article

< Previous Page | 39 40 41 42 43 44 45 46 47 48 49 50  | Next Page >