Search Results

Search found 7053 results on 283 pages for 'body'.

Page 178/283 | < Previous Page | 174 175 176 177 178 179 180 181 182 183 184 185  | Next Page >

  • failed to use mutt to send mail to company mailbox

    - by Acewind
    I'm using mutt&postfix on CentOS 6.2: mutt-1.5.20-2.20091214hg736b6a.el6_1.1.x86_64 postfix-2.6.6-2.2.el6_1.x86_64 When I try to send mail to my company mailbox, I receive an error: mutt -s "test" [email protected] < /home/mail.txt error from postfix: : host out1.ourcompany.com[10.30.17.100] said: 555 Syntax error (in reply to MAIL FROM command) Then I try to use service sendmail as SMTP server, but also failed: **----- The following addresses had permanent fatal errors ----- (reason: 555 Syntax error) ----- Transcript of session follows ----- ... while talking to out1.ourcompany.com.: MAIL From: SIZE=667 <<< 555 Syntax error 554 5.0.0 Service unavailable** Any body can tell me why? Thanks!!!! I can make sure DNS is OK, and I set realname "root@myserver" in /etc/Muttrc

    Read the article

  • Filtering semi-solicited spam

    - by Ketil
    While traditional UCE (get rich quick, enlarge your body parts, Nigerian barristers) are handled adequately, I'm still receiving a lot of not quite unsolicited spam. This is typically from commercial services forwarding "invites" from my "friends" and then "reminding" me of their services. Typical offenders are Facebook, Linkedin, dropbox, bebox, etc etc. (Of course, none of these services provide any way of opting out, except possibly by registering, which they will then take as an invitation to stuff your mailbox with even more crap) What is a good way to deal with these? I can of course junk them using procmail, but is it a better idea to e.g. bounce them, or at least send a reply informing the sender (and "friend") that I am not interested in their service nor their spam. Any solutions to this?

    Read the article

  • X200 Tablet notebook won't start after BIOS Update

    - by THEn
    I have LENOVO X200 Tablet and I ran the BIOS Update and the computer won't start after the BIOS update. When I ran the BIOS update utility it ran everything fine and asked to restart the computer but it wont start screen is blank. I unplugged the power and took of the battery and put them back and still not starting. Now it has [Power On] indicator light on and screen is not starting. I tried pressing F1 button while trying to start the computer but it doesn't do react to anything. Please help how I can start my Tablet. The update utility is http://support.lenovo.com/en_US/downloads/detail.page?LegacyDocID=MIGR-70651 Does any body know if X200 have any kind of hardware switch to reset the BIOS or any thing? What would be the best way to fix my BIOS? Thank you.

    Read the article

  • How to have Jetty redirect http to https

    - by Noel Kennedy
    I want to redirect all requests for http to https using Jetty (6.1.24). For some reason (my ignorance) this is eluding me. This is what I have: <New id="redirect" class="org.mortbay.jetty.handler.rewrite.RedirectPatternRule"> <Set name="pattern">http://foobar.com/*</Set> <Set name="location">https://foobar.com</Set> </New> In response I get 200 - ok, and the body is the page over http, ie the redirect doesn't occur.

    Read the article

  • Email is not sending when the script is running by CRON

    - by Adam Blok
    I wrote the simple backup bash script and at the end of it, it's sending an email to me that backup is ready. Everything works perfect when I run this script from terminal (root), but when the script is running by CRON, email is not sending :-/. #!/bin/sh filename=$(date +%d-%m-%Y) backup_dir="/mnt/backup/" email_from_name="BACKUP" email_to="my@email" email_subject="Backup is ready" email_body_file="/tmp/backup-email-body.txt" tar czf "$backup_dir$filename.tgz" "/home/www" echo "Subject: $email_subject" > $email_body_file ls $backup_dir -sh >> $email_body_file sendmail -F $email_from_name -t $email_to < $email_body_file

    Read the article

  • asterisk incoming/miss call notification (to skype)

    - by tike
    My environment: Centos 5.6, Asterisk with freepbx , skype i.e.sends message with parameter skype.sh skype_user message. Now i wanted to send skype notification so that my asterisk server notification are sent to skype rather than email (or to both skype and email). I know, there is voicemail.conf, voicemail_general and vm_email.inc, which has these body created. vm_email.inc emailbody=${VM_NAME},\n\nThere is a new voicemail in mailbox ${VM_MAILBOX} But i dont see where is something like "mail" command. What my thought to do is: instead of saying "mailcmd" pass system ( /path/to/script) and it would simply send message as rest is already configured. Any suggestion where i could run script rather than sending email Or Executing script on every incoming call, so that i could send as notification on every call over the Skype. (however, ultimate goal is to achieve miss call notification or voice mail notification over Skype.)

    Read the article

  • Outlook Replies with Inline Comments

    - by BillN
    I have a user who uses Word as his e-mail editor. Often when replying to an e-mail, he'll insert his comments into the body of the original e-mail. Since he is using Word as the editor, these show as [User Name] Comment Text in a contrasting color. However, some users see the comments in their Outlook, and others do not. I've tried Selecting/DeSelecting Word as the e-mail editor on the recipients, and it does not seem to make a difference. We are using Exchange 2007 with Outlook 2003 and Outlook 2007 clients along with a few Entourage Clients. There does not seem to be a pattern related to which client is used, but Entourage seems to be more likely to have the problem. TIA, Bill

    Read the article

  • I want to remove all images from my word document without losing the data formatting

    - by Chella
    Can any body help me, in this regard. I just want to remove all the images in my word document. I have about 365 pages document, in which there are images in almost all pages. I can not delete one by one. I can save it in .txt format but I will lose the formatting of the data. Is there any other way to get this. any help would be greatly appreciated. Thanks in advance. Let me know if you people need more clarification on this.

    Read the article

  • script to test mail server

    - by WebDude
    Ever since a windows update that took down my IIS6 mail server a few weeks back, I've been really paranoid about my mail server working. So every time I run a windows update I fire up command prompt and send myself a quick test mail. Like so: > telnet localhost 25 > helo domain.com > mail from: [email protected] > rcpt to: [email protected] > data some random body to mail myself . This is a realy great way to test my mail server, but it's a pain in the neck to do quickly. Is there anyway i can run this in a batch script or something as a quick test? I've tried a bat file but this just waits after i call telnet I've also explored if telnet accepts any input files and it does not seem to. What's the best way to do this?

    Read the article

  • My gmail password hacked in Firefox?

    - by ellockie
    While writing a message using Firefox suddenly my gmail login details, including password, were pasted into the body of my message at the current cursor position and in the browser's find field (whole password and a bit of email address in the latter). I don't store my passwords in the browser nor in any of it's addons, although I keep it in one of Chrome's extensions. I don't use whole email address to login, only the user name, so it's very strange and worrying. I must admit I clicked some suspicious link the same day (by checking the root of the domain first), but I quickly closed that page and after that I haven't used that password. Both Avira and Spybot didn't detect anything. What was it and what can I do to make sure my browser is safe?

    Read the article

  • How to make a non-root user to use chown for any user group files?

    - by user1877716
    I would like to make a user super powerful, with almost all root rights but unable to touch a the root user (to change the password of the root). My goal is to user "B" to manage my web server. The problem is user B need to able to run the chown and chmod commands on some files belonging to other users. I tried to put B in root group or use visudo, but it's not enough. I'm working an Centos 6 system. If some body have ideas!

    Read the article

  • Why Java applicaiton is running slow for clients on Linux

    - by Darshani
    We have two linux servers which have Apache Tomcat Installed. One is running the Database, the other is running with Java application. More than 100 users are connected to the servers. Server machines are quad core normal PC's which have 4 GB memory. It was running properly for the last 6 months but the application has recently started to run slowly . Suddenly the Java application is getting stuck & users cannot work for some time. There is no network issue. I am trying to identify the reason for this, whether it is a machine problem or the problem is in the Java application. Can any body help me with this?

    Read the article

  • How Can I test my website using selemium Grid?

    - by prakash.panjwani
    Hello sir, I want to use selenium grid for my web page testing. I have successfully installed the demo of selenium grid on my PC and it is running fine. Now I want to run the test for my web site,but I am not getting how can I do that. Can some body give some example so that I will do that.I am a newer with selenium. I do not know much about selenium and Ant. Please help me . (I have basic knowledge about java.) Thanks In Advance

    Read the article

  • Empty mails received from Plesk-driven server

    - by goreSplatter
    From my Plesk managed server I keep receiving emails addressed to the configured administrator (me). Nothing special there. These mails are sent from an empty sender with no body, no subject nor any other relevant headers. I have changed the server administrator's e-mail address to an alternate one which is then the recipient. The mails are sent at irregular intervals. With variations in the timestamp I get an email every 30 minutes. Then there's a break and two and a half hours later I get the same email. I already have turned of crond for more than a day to see if this is the source of the problem. On that server there is no "foreign" software running which would cause that behavior. I have no more guesses as to why this is happening. Any suggestions?

    Read the article

  • Thunderbird: filters don't match links

    - by Gregory MOUSSAT
    I use filters to remove some undesirable messages (in addition to the intergrated spam filter). This is great to avoid tons of boring people who want to sell me tons of boring stuff. My problem is, since years (so with every Thunderbird release I ever had, even the current one which is up to date) it is unable to filter links. For example I want to delete every messages containing a link to http://xxxxx.emv3.com/xxxxxx I never managed to remove those emails. I use a filter on the body, checking if it contains emv3 but this never match. Those emails are in HTML format, and the links are displayed as a text like "Visit our website" or so. If I write a HTML email with a link, my filter works. When this is a spam, this never works. When I save the email to a text file, I open it with notepad and I see several http://xxxxx.emv3.com/xxxx Any idea why this don't work ? And how can I do ?

    Read the article

  • Need to pull data from website after every 5 seconds using Vba

    - by Milton
    I need to pull data from www.dsebd.org after ever 5 seconds. this Vba code pull data but does not run automatically. Please help me. Sub ButtonCode() ' execute macros Call GetCotton ' submit macro to run again in 5 sec Application.OnTime Now + TimeValue("00:00:05"), "ButtonCode" End Sub Sub GetCotton() Dim xml As Object Dim html As Object Dim elemcollection As Object Dim result As String Dim t As Long, r As Long, c As Long, ActRw As Long Set xml = CreateObject("MSXML2.XMLHTTP.6.0") With xml .Open "GET", "http://www.dsebd.org/dseX_share.php", False .send End With result = xml.responseText Set html = CreateObject("htmlfile") html.body.innerHTML = result Set elemcollection = html.getElementsByTagName("table") For t = 0 To elemcollection.Length - 1 For r = 0 To elemcollection(t).Rows.Length - 1 For c = 0 To elemcollection(t).Rows(r).Cells.Length - 1 ThisWorkbook.Sheets("Sheet1").Cells(ActRw + r + 1, c + 1) = elemcollection(t).Rows(r).Cells(c).innerText Next c Next r ActRw = ActRw + elemcollection(t).Rows.Length + 1 Next t End Sub

    Read the article

  • Is there a "pattern" or a group that defines *rc files in *nix environments?

    - by Somebody still uses you MS-DOS
    I'm starting to use command line a little more, and I see there are a lot of ways to configure some config files in my $HOME. This is good, since you can customize it the way you really like. Unfortunately, for begginners, having too many options is a little confusing. For example, I created .bash_alias for some alias I'm using. I didn't even know this option existed, I'm used to simply edit .bashrc. Do exist a pattern, a "good practice", envisioning flexibility and modularity in terms of rc files structure? Do exist a standardization group for this, or every body just creates it's own configuration setup?

    Read the article

  • Shell script only executes partially when run with CRON

    - by binaryorganic
    I've written a shell script that does the following: Retrieve mail from a POP3 account (using GetMail) Save a copy of that email to S3 (using AWS CLI) Email me the filesize of the email The script runs fine manually, and technically runs from CRON, but it only seems to be sending the email. The getmail and S3 bits don't seem to run. Everything I've read seems to hammer home the message that I need to be careful about relative paths and the like when using CRON, but I think I'm using absolute paths everywhere I need to be, so I'm stumped as to what the issue could be. My Shell Script is here: #!/bin/bash # Run GetMail getmail -r /PATH/TO/EMAIL/getmail.email # Save to S3 aws s3 cp /PATH/TO/SCRIPT/email-backup.mbox s3://XXXXXXXXXX/email-backup.mbox # Send Confirmation Email SUBJECT="EMAIL SUBJECT" EMAIL="[email protected]" # Get current filesize FILENAME=/PATH/TO/SCRIPT/email-backup.mbox FILESIZE=$(stat -c%s "$FILENAME") # Email Content EMAILMESSAGE="/tmp/emailmessage.txt" echo "EMAIL BODY" >$EMAILMESSAGE echo "" >>$EMAILMESSAGE echo "Current File Size: $FILESIZE bytes" >>$EMAILMESSAGE # Send the Mail /bin/mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE

    Read the article

  • Is there a "pattern" or a group that defines *rcs files in *nix environments?

    - by Somebody still uses you MS-DOS
    I'm starting to use command line a little more, and I see there are a lot of ways to configure some config files in my $HOME. This is good, since you can customize it the way you really like. Unfortunately, for begginners, having too many options is a little confusing. For example, I created .bash_alias for some alias I'm using. I didn't even know this option existed, I'm used to simply edit .bashrc. Do exist a pattern, a "good practice", envisioning flexibility and modularity in terms of rc files structure? Do exist a standardization group for this, or every body just creates it's own configuration setup?

    Read the article

  • Can anyone recommend how to fix sore "sides" from overuse of computers? (some kind of RSI)

    - by MGOwen
    I have to use computers for 9+ hours per day (no suggestions about 'use your computer less!' please). I get various kinds of RSI: a little soreness in the hands and wrists, but that's not a big deal compared my main problem: Pain in the sides of my body, under my arms and down the sides of my torso. Driving worsens it. Exercise doesn't seem to help (maybe I need a special exercise). It could be posture related, but I haven't found a way to fix that. Has anyone else experienced this? I find lots of people complaining about more typical kinds of RSI, but not like mine. I am hoping someone with experience can recommend an exercise, treatment, or adjustment in how I use my computer.

    Read the article

  • Why does Chrome show overlapping text?

    - by dog44wgm
    In Chrome, news articles at: http://www.theprovince.com with a leading photo and caption show the caption text overlapped with the body text. I have an image but as a new user here I'm not allowed to upload it. It happens at that site almost always, here's an example from today: http://www.theprovince.com/sports/Canucks+Blackhawks+collision+Titanic+proportions/5721421/story.html It rarely happens elsewhere. The same link works fine in Internet Explorer so I'm guessing it's a Chrome issue. It's been like this for many months, I read the site almost everyday. I click on "Print this Article" to get a proper look at it, but it's annoying, hope someone has the answer. Thanks in advance.

    Read the article

  • Why do Floatbox popups stop other animations when finished closing?

    - by isherwood
    I'm trying to essentially run a callback function when a Floatbox popup is closed via a hyperlink inside the popup. I want the page to scroll to the top and my login box to fade in. I'm using the following code: function showLogin() { jQuery('#header_no_theme_login_popup', parent.document.body).show(); window.parent.window.scrollTo(0,0); window.parent.fb.end(); } This works fine, but if I try to use jQuery fadeIn, the fade effect is truncated when the Floatbox popup finishes closing, leaving it with partial opacity. jQuery scrollTo doesn't seem to want to work at all. Thanks much.

    Read the article

  • Netflix, jQuery, JSONP, and OData

    - by Stephen Walther
    At the last MIX conference, Netflix announced that they are exposing their catalog of movie information using the OData protocol. This is great news! This means that you can take advantage of all of the advanced OData querying features against a live database of Netflix movies. In this blog entry, I’ll demonstrate how you can use Netflix, jQuery, JSONP, and OData to create a simple movie lookup form. The form enables you to enter a movie title, or part of a movie title, and display a list of matching movies. For example, Figure 1 illustrates the movies displayed when you enter the value robot into the lookup form.   Using the Netflix OData Catalog API You can learn about the Netflix OData Catalog API at the following website: http://developer.netflix.com/docs/oData_Catalog The nice thing about this website is that it provides plenty of samples. It also has a good general reference for OData. For example, the website includes a list of OData filter operators and functions. The Netflix Catalog API exposes 4 top-level resources: Titles – A database of Movie information including interesting movie properties such as synopsis, BoxArt, and Cast. People – A database of people information including interesting information such as Awards, TitlesDirected, and TitlesActedIn. Languages – Enables you to get title information in different languages. Genres – Enables you to get title information for specific movie genres. OData is REST based. This means that you can perform queries by putting together the right URL. For example, if you want to get a list of the movies that were released after 2010 and that had an average rating greater than 4 then you can enter the following URL in the address bar of your browser: http://odata.netflix.com/Catalog/Titles?$filter=ReleaseYear gt 2010&AverageRating gt 4 Entering this URL returns the movies in Figure 2. Creating the Movie Lookup Form The complete code for the Movie Lookup form is contained in Listing 1. Listing 1 – MovieLookup.htm <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Netflix with jQuery</title> <style type="text/css"> #movieTemplateContainer div { width:400px; padding: 10px; margin: 10px; border: black solid 1px; } </style> <script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.js" type="text/javascript"></script> <script src="App_Scripts/Microtemplates.js" type="text/javascript"></script> </head> <body> <label>Search Movies:</label> <input id="movieName" size="50" /> <button id="btnLookup">Lookup</button> <div id="movieTemplateContainer"></div> <script id="movieTemplate" type="text/html"> <div> <img src="<%=BoxArtSmallUrl %>" /> <strong><%=Name%></strong> <p> <%=Synopsis %> </p> </div> </script> <script type="text/javascript"> $("#btnLookup").click(function () { // Build OData query var movieName = $("#movieName").val(); var query = "http://odata.netflix.com/Catalog" // netflix base url + "/Titles" // top-level resource + "?$filter=substringof('" + escape(movieName) + "',Name)" // filter by movie name + "&$callback=callback" // jsonp request + "&$format=json"; // json request // Make JSONP call to Netflix $.ajax({ dataType: "jsonp", url: query, jsonpCallback: "callback", success: callback }); }); function callback(result) { // unwrap result var movies = result["d"]["results"]; // show movies in template var showMovie = tmpl("movieTemplate"); var html = ""; for (var i = 0; i < movies.length; i++) { // flatten movie movies[i].BoxArtSmallUrl = movies[i].BoxArt.SmallUrl; // render with template html += showMovie(movies[i]); } $("#movieTemplateContainer").html(html); } </script> </body> </html> The HTML page in Listing 1 includes two JavaScript libraries: <script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.js" type="text/javascript"></script> <script src="App_Scripts/Microtemplates.js" type="text/javascript"></script> The first script tag retrieves jQuery from the Microsoft Ajax CDN. You can learn more about the Microsoft Ajax CDN by visiting the following website: http://www.asp.net/ajaxLibrary/cdn.ashx The second script tag is used to reference Resig’s micro-templating library. Because I want to use a template to display each movie, I need this library: http://ejohn.org/blog/javascript-micro-templating/ When you enter a value into the Search Movies input field and click the button, the following JavaScript code is executed: // Build OData query var movieName = $("#movieName").val(); var query = "http://odata.netflix.com/Catalog" // netflix base url + "/Titles" // top-level resource + "?$filter=substringof('" + escape(movieName) + "',Name)" // filter by movie name + "&$callback=callback" // jsonp request + "&$format=json"; // json request // Make JSONP call to Netflix $.ajax({ dataType: "jsonp", url: query, jsonpCallback: "callback", success: callback }); This code Is used to build a query that will be executed against the Netflix Catalog API. For example, if you enter the search phrase King Kong then the following URL is created: http://odata.netflix.com/Catalog/Titles?$filter=substringof(‘King%20Kong’,Name)&$callback=callback&$format=json This query includes the following parameters: $filter – You assign a filter expression to this parameter to filter the movie results. $callback – You assign the name of a JavaScript callback method to this parameter. OData calls this method to return the movie results. $format – you assign either the value json or xml to this parameter to specify how the format of the movie results. Notice that all of the OData parameters -- $filter, $callback, $format -- start with a dollar sign $. The Movie Lookup form uses JSONP to retrieve data across the Internet. Because WCF Data Services supports JSONP, and Netflix uses WCF Data Services to expose movies using the OData protocol, you can use JSONP when interacting with the Netflix Catalog API. To learn more about using JSONP with OData, see Pablo Castro’s blog: http://blogs.msdn.com/pablo/archive/2009/02/25/adding-support-for-jsonp-and-url-controlled-format-to-ado-net-data-services.aspx The actual JSONP call is performed by calling the $.ajax() method. When this call successfully completes, the JavaScript callback() method is called. The callback() method looks like this: function callback(result) { // unwrap result var movies = result["d"]["results"]; // show movies in template var showMovie = tmpl("movieTemplate"); var html = ""; for (var i = 0; i < movies.length; i++) { // flatten movie movies[i].BoxArtSmallUrl = movies[i].BoxArt.SmallUrl; // render with template html += showMovie(movies[i]); } $("#movieTemplateContainer").html(html); } The movie results from Netflix are passed to the callback method. The callback method takes advantage of Resig’s micro-templating library to display each of the movie results. A template used to display each movie is passed to the tmpl() method. The movie template looks like this: <script id="movieTemplate" type="text/html"> <div> <img src="<%=BoxArtSmallUrl %>" /> <strong><%=Name%></strong> <p> <%=Synopsis %> </p> </div> </script>   This template looks like a server-side ASP.NET template. However, the template is rendered in the client (browser) instead of the server. Summary The goal of this blog entry was to demonstrate how well jQuery works with OData. We managed to use a number of interesting open-source libraries and open protocols while building the Movie Lookup form including jQuery, JSONP, JSON, and OData.

    Read the article

  • Parallelism in .NET – Part 3, Imperative Data Parallelism: Early Termination

    - by Reed
    Although simple data parallelism allows us to easily parallelize many of our iteration statements, there are cases that it does not handle well.  In my previous discussion, I focused on data parallelism with no shared state, and where every element is being processed exactly the same. Unfortunately, there are many common cases where this does not happen.  If we are dealing with a loop that requires early termination, extra care is required when parallelizing. Often, while processing in a loop, once a certain condition is met, it is no longer necessary to continue processing.  This may be a matter of finding a specific element within the collection, or reaching some error case.  The important distinction here is that, it is often impossible to know until runtime, what set of elements needs to be processed. In my initial discussion of data parallelism, I mentioned that this technique is a candidate when you can decompose the problem based on the data involved, and you wish to apply a single operation concurrently on all of the elements of a collection.  This covers many of the potential cases, but sometimes, after processing some of the elements, we need to stop processing. As an example, lets go back to our previous Parallel.ForEach example with contacting a customer.  However, this time, we’ll change the requirements slightly.  In this case, we’ll add an extra condition – if the store is unable to email the customer, we will exit gracefully.  The thinking here, of course, is that if the store is currently unable to email, the next time this operation runs, it will handle the same situation, so we can just skip our processing entirely.  The original, serial case, with this extra condition, might look something like the following: foreach(var customer in customers) { // Run some process that takes some time... DateTime lastContact = theStore.GetLastContact(customer); TimeSpan timeSinceContact = DateTime.Now - lastContact; // If it's been more than two weeks, send an email, and update... if (timeSinceContact.Days > 14) { // Exit gracefully if we fail to email, since this // entire process can be repeated later without issue. if (theStore.EmailCustomer(customer) == false) break; customer.LastEmailContact = DateTime.Now; } } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Here, we’re processing our loop, but at any point, if we fail to send our email successfully, we just abandon this process, and assume that it will get handled correctly the next time our routine is run.  If we try to parallelize this using Parallel.ForEach, as we did previously, we’ll run into an error almost immediately: the break statement we’re using is only valid when enclosed within an iteration statement, such as foreach.  When we switch to Parallel.ForEach, we’re no longer within an iteration statement – we’re a delegate running in a method. This needs to be handled slightly differently when parallelized.  Instead of using the break statement, we need to utilize a new class in the Task Parallel Library: ParallelLoopState.  The ParallelLoopState class is intended to allow concurrently running loop bodies a way to interact with each other, and provides us with a way to break out of a loop.  In order to use this, we will use a different overload of Parallel.ForEach which takes an IEnumerable<T> and an Action<T, ParallelLoopState> instead of an Action<T>.  Using this, we can parallelize the above operation by doing: Parallel.ForEach(customers, (customer, parallelLoopState) => { // Run some process that takes some time... DateTime lastContact = theStore.GetLastContact(customer); TimeSpan timeSinceContact = DateTime.Now - lastContact; // If it's been more than two weeks, send an email, and update... if (timeSinceContact.Days > 14) { // Exit gracefully if we fail to email, since this // entire process can be repeated later without issue. if (theStore.EmailCustomer(customer) == false) parallelLoopState.Break(); else customer.LastEmailContact = DateTime.Now; } }); There are a couple of important points here.  First, we didn’t actually instantiate the ParallelLoopState instance.  It was provided directly to us via the Parallel class.  All we needed to do was change our lambda expression to reflect that we want to use the loop state, and the Parallel class creates an instance for our use.  We also needed to change our logic slightly when we call Break().  Since Break() doesn’t stop the program flow within our block, we needed to add an else case to only set the property in customer when we succeeded.  This same technique can be used to break out of a Parallel.For loop. That being said, there is a huge difference between using ParallelLoopState to cause early termination and to use break in a standard iteration statement.  When dealing with a loop serially, break will immediately terminate the processing within the closest enclosing loop statement.  Calling ParallelLoopState.Break(), however, has a very different behavior. The issue is that, now, we’re no longer processing one element at a time.  If we break in one of our threads, there are other threads that will likely still be executing.  This leads to an important observation about termination of parallel code: Early termination in parallel routines is not immediate.  Code will continue to run after you request a termination. This may seem problematic at first, but it is something you just need to keep in mind while designing your routine.  ParallelLoopState.Break() should be thought of as a request.  We are telling the runtime that no elements that were in the collection past the element we’re currently processing need to be processed, and leaving it up to the runtime to decide how to handle this as gracefully as possible.  Although this may seem problematic at first, it is a good thing.  If the runtime tried to immediately stop processing, many of our elements would be partially processed.  It would be like putting a return statement in a random location throughout our loop body – which could have horrific consequences to our code’s maintainability. In order to understand and effectively write parallel routines, we, as developers, need a subtle, but profound shift in our thinking.  We can no longer think in terms of sequential processes, but rather need to think in terms of requests to the system that may be handled differently than we’d first expect.  This is more natural to developers who have dealt with asynchronous models previously, but is an important distinction when moving to concurrent programming models. As an example, I’ll discuss the Break() method.  ParallelLoopState.Break() functions in a way that may be unexpected at first.  When you call Break() from a loop body, the runtime will continue to process all elements of the collection that were found prior to the element that was being processed when the Break() method was called.  This is done to keep the behavior of the Break() method as close to the behavior of the break statement as possible. We can see the behavior in this simple code: var collection = Enumerable.Range(0, 20); var pResult = Parallel.ForEach(collection, (element, state) => { if (element > 10) { Console.WriteLine("Breaking on {0}", element); state.Break(); } Console.WriteLine(element); }); If we run this, we get a result that may seem unexpected at first: 0 2 1 5 6 3 4 10 Breaking on 11 11 Breaking on 12 12 9 Breaking on 13 13 7 8 Breaking on 15 15 What is occurring here is that we loop until we find the first element where the element is greater than 10.  In this case, this was found, the first time, when one of our threads reached element 11.  It requested that the loop stop by calling Break() at this point.  However, the loop continued processing until all of the elements less than 11 were completed, then terminated.  This means that it will guarantee that elements 9, 7, and 8 are completed before it stops processing.  You can see our other threads that were running each tried to break as well, but since Break() was called on the element with a value of 11, it decides which elements (0-10) must be processed. If this behavior is not desirable, there is another option.  Instead of calling ParallelLoopState.Break(), you can call ParallelLoopState.Stop().  The Stop() method requests that the runtime terminate as soon as possible , without guaranteeing that any other elements are processed.  Stop() will not stop the processing within an element, so elements already being processed will continue to be processed.  It will prevent new elements, even ones found earlier in the collection, from being processed.  Also, when Stop() is called, the ParallelLoopState’s IsStopped property will return true.  This lets longer running processes poll for this value, and return after performing any necessary cleanup. The basic rule of thumb for choosing between Break() and Stop() is the following. Use ParallelLoopState.Stop() when possible, since it terminates more quickly.  This is particularly useful in situations where you are searching for an element or a condition in the collection.  Once you’ve found it, you do not need to do any other processing, so Stop() is more appropriate. Use ParallelLoopState.Break() if you need to more closely match the behavior of the C# break statement. Both methods behave differently than our C# break statement.  Unfortunately, when parallelizing a routine, more thought and care needs to be put into every aspect of your routine than you may otherwise expect.  This is due to my second observation: Parallelizing a routine will almost always change its behavior. This sounds crazy at first, but it’s a concept that’s so simple its easy to forget.  We’re purposely telling the system to process more than one thing at the same time, which means that the sequence in which things get processed is no longer deterministic.  It is easy to change the behavior of your routine in very subtle ways by introducing parallelism.  Often, the changes are not avoidable, even if they don’t have any adverse side effects.  This leads to my final observation for this post: Parallelization is something that should be handled with care and forethought, added by design, and not just introduced casually.

    Read the article

  • Microsoft guarantees the performance of SQL Server

    - by simonsabin
    I have recently been informed that Microsoft will be guaranteeing the performance of SQL Server. Yes thats right Microsoft will guarantee that you will get better performance out of SQL Server that any other competitor system. However on the flip side there are also saying that end users also have to guarantee the performance of SQL Server if they want to use the next release of SQL Server targeted for 2011 or 2012. It appears that a recent recruit Mark Smith from Newcastle, England will be heading a new team that will be making sure you are running SQL Server on adequate hardware and making sure you are developing your applications according to best practices. The Performance Enforcement Team (SQLPET) will be a global group headed by mark that will oversee two other groups the existing Customer Advisory Team (SQLCAT) and another new team the Design and Operation Group (SQLDOG). Mark informed me that the team was originally thought out during Yukon and was going to be an independent body that went round to customers making sure they didn’t suffer performance problems. However it was felt that they needed to wait a few releases until SQL Server was really there. The original Yukon Independent Performance Enhancement Team (YIPET) has now become the SQL Performance Enforcement Team (SQLPET). When challenged about the change from enhancement to enforcement Mark was unwilling to comment. An anonymous source suggested that "..Microsoft is sick of the bad press SQL Server gets for performance when the performance problems are normally down to people developing applications badly and using inadequate hardware..." Its true that it is very easy to install and run SQL, unlike other RDMS systems and the flip side is that its also easy to get into performance problems due to under specified hardware and bad design. Its not yet confirmed if this enforcement will apply to all SKUs or just the high end ones. I would personally welcome some level of architectural and hardware advice service that clients would be able to turn to, in order to justify getting the appropriate hardware at the start of a project and not 1 year in when its often too late.

    Read the article

< Previous Page | 174 175 176 177 178 179 180 181 182 183 184 185  | Next Page >