Planet FoxPro

April 27, 2015

Alex Feldstein

Photo of the Day


Tri-color heron in breeding colors
Wakodahatchee wetlands

by Alex Feldstein (noreply@blogger.com) at April 27, 2015 05:00 AM

April 26, 2015

Alex Feldstein

April 25, 2015

Alex Feldstein

April 24, 2015

Alex Feldstein

April 23, 2015

FoxCentral News

West Wind Web Connection 5.72 released

 West Wind Technologies has released version 5.72 of its FoxPro Web Application framework today. Web Connection makes it easy to build Web applications and services using the familar Visual FoxPro environment for development, testing and debugging. Version 5.72 adds a number of new debugging and tracing features to make it easier to debug startup problems. There are also a number of enhancements around JSON generation and parsing that drastically improve performance. Finally improvements in the wwRestProcess class improve creation of HTTP Services and REST APIs that make it easier to build rich client side and mobile applications using FoxPro as a server backend. Web Connection is free to try and this is a free upgrade to registered users of version 5.50 and later.

by West Wind Technologies at April 23, 2015 09:12 AM

Alex Feldstein

April 22, 2015

Alex Feldstein

April 21, 2015

FoxProWiki

EspartaPalma

Editor comments: Update info
I am Esparta Palma, a VFP Developer since 1997, I've programmed with VFP 5.0 to 9.0 (with Codebook as my framework). I used to program with N - Tier Applications, Client Server, my preferred topics are SQL-Queries and Data Modeling. I'm programming with ASP.NET using C#.

In 2014 I moved with my family to California to work for a startup. Now I'm a RoR programmer and also on my spare time I do stuffs with Python.

Wiki Member since June 23, 2002
Sys Op of Portal Fox since October 2002.

¸,ø¤º° Â°ÂºÂ¤ø¬¸¸¬ø¤º° Â°ÂºÂ¤ø¬¸¸¬ø¤º° Â°ÂºÂ¤ø¬¸¸¬ø¤º° Â°Âº
Espartaco Palma
Sys Op Portal Fox ( www.PortalFox.com )
https://github.com/esparta
http://www.esparta.co/blog <- Personal
San Francisco Bay Area, California, USA.

April 21, 2015 07:09 PM

Alex Feldstein

April 20, 2015

Rick Strahl's FoxPro and Web Connection Web Log

Single File Image Uploads with plUpload and Web Connection

I get a lot of questions about uploading files in regards to Web Connection. Uploading is a thorny problem especially if you need to upload multiple files or if you want to use asynchronous uploads using AJAX rather than submitting files through standard <input type=”file”> elements which suffer from many problems. Using asynchronous upload components allow getting around the 16 meg string limit in FoxPro and Web Connection and they allow you to do the uploads in the background while you can display progress information and keep your UI otherwise active.

Web Connection has had support for plUpload for some time now. There’s a plUpload server handler that allows you to use the plUpload Queue component which is a visual UI component that’s provided by the plUpload library. Web Connection provides a generic plUploadHandler class that can be used on the server side to capture uploaded files.

The examples show how to do this using the plUpload Queue component which is bulky UI control. Here’s what the full UI that you can drop on any form looks like:

You can check out this example and the following single file upload example on the Web Connection Samples page:

http://west-wind.com/wconnect/webcontrols/plUploadSample.htm

Single File Uploads

The full component is useful for batch uploads, but sometimes you don’t want or need this rather bulky UI to handle file uploads. For example I recently needed to add image uploads to the West Wind Message Board and in order to do this I really wanted a much simpler UI that simply triggers the image upload from a button:

ImageUpload

There’s a simple button that when clicked allows you to pick a single file (although you can also have it pick multiples) and then immediately starts uploading the image to the server. When done the image URL returned is then embedded into the user’s message at the current cursor position.

Let’s see how we can do this using the simpler plUpload base API.

Using the base plUpload API

plUpload includes a number of different upload components but behind it all sits a base uploader API which doesn’t have any UI components associated with it. For my image uploader I don’t want any extraneous UI – I only want to upload the file and provide some basic progress information.

To do this we can use the core plUpload API. Here’s how this works.

Let’s start with the Add Image Dialog HTML which displays the modal dialog above:

<div id="InsertImageDialog" class="dialog" style="display: none; min-width: 320px; width: 80%"> <div class="dialog-header">Insert Image</div> <div class="dialog-content"> <label>Web Image Url: <small>(external source ie.Flickr,Imgur, DropBox etc.)</small></label> <input type="url" id="txtImageLink" style="width: 98%" /> <button type="button" id="btnImageSelection" class="bigbutton" style="margin-top: 5px;">Insert Web Image</button> <div id="container" style="margin-top: 30px;"> <label>Upload an Image:</label> <button id="btnUploadFile" onclick="return false;" class="bigbutton">Select file to Upload</button> </div> </div> </div>

Next we need to add the relevant plUpload script to the page.

<script src="scripts/plUpload/plupload.full.min.js"></script>    

Then we need to configure the plUpload Javascript code which can live in a script tag on the bottom of the page or as is the case here inside of a page level JavaScript file.

var uploader = new plupload.Uploader({ browse_button: 'btnUploadFile', // you can pass in id...
url: "ImageUpload.wwt",




runtimes: 'html5,flash,html4',
container: document.getElementById('container'), // ... or DOM Element itself url: "ImageUpload.wwt", chunk_size: '64kb', // Resize (downsize really) images on clientside if we can resize: { width: 1024, height: 768, quality: 85 }, filters: { max_file_size: '4mb', mime_types: [ { title: "Image files", extensions: "jpg,gif,png" } ] }, // Flash settings flash_swf_url: 'scripts/plupload/js/Moxie.swf', init: { PostInit: function () { }, FilesAdded: function (up, files) { // start uploading - we only accept one file uploader.start(); }, UploadProgress: function (up, file) { showStatus("Upload Progress: " + file.percent + "% complete",3000); }, Error: function (up, err) { showStatus("Upload failed: " + err.code + ": " + err.message); },

FileUploaded: function(up, file, response) { uploader.removeFile(file); var imageUrl = response.response; if (imageUrl) { markupSelection("<<img src=\"" + imageUrl + "\" />>"); $("#InsertImageDialog").modalDialog("hide"); } }, UploadComplete: function(up, files) { } } }); uploader.init();

The plUpload script code is pretty descriptive so not much explanation is needed. The most important propertie here is the browse_button property which is an id pointing at a button or link that when clicked triggers the image upload and the url property which points at the server target URL that will response to the plUpload file chunks that are sent to the server.

The interesting stuff happens in the event handlers.

Since I’m only dealing with a single file selection, I can use the FilesAdded event to immediately start the file upload under program control. This event fires whenever you select one or more files, and if you use a single button it makes sense to just kick off the upload without further user confirmation.

For progress and error information I use the ww.jquery.js showStatus()  function which is a quick and easy way to display status information on a status bar on the bottom of the form.

The most important piece though is the FileUploaded event which is used to actually confirm the file upload and capture the generated filename that the server saved. The function receives the upload component, the individual file object and and HTTP response object. The main thing we’re interested in the response property of the response object which provides a fully qualified image URL that points at the image that the server saved. This value is captured, an <img> tag created and then pasted into the text control at the current cursor position.

Handling the Image plUpload on the Server Side

As mentioned earlier Web Connection includes a plUploadHandler class that makes it pretty straight forward to handle uploads. The class basically works in conjunction with a wwProcess class and handles the plUpload file transfer chunks and puts the files together on the server in small chunks. This makes it possible for example to post files larger than 16 megs to the server as well as the file is sent in small chunks that are progressively appended to a file on the server.

To implement the server side you’ll create two methods:

  • A standard wwProcess EndPoint Method
  • An OnUploadComplete Event that is fired when the upload is complete

The first is the actual endpoint method that is referenced by the plUpload component. If you look back on the JavaScript configuration you see that it points at ImageUpload.wwt which translates to the following method in my wwThreads Process class:

FUNCTION ImageUpload()
 
*** Make sure plUploadHandler is loaded
SET PROCEDURE TO plUploadHandler ADDITIVE 
 
LOCAL loUpload as plUploadHandler
loUpload = CREATEOBJECT("plUploadHandler")
 
*** Upload to temp folder
loUpload.cUploadPath = ADDBS(THIS.oConfig.cHtmlPagePath) + "temp"
IF(!IsDir(loUpload.cUploadPath))
    MD (loUpload.cUploadPath)
ENDIF    
 
BINDEVENT(loUpload,"OnUploadComplete",THIS,"OnImageUploadComplete",1)
 
*** Constrain the extensions allowed on the server
loUpload.cAllowedExtensions = "jpg,jpeg,png,gif"
 
*** Process the file or chunk
loUpload.ProcessRequest()
 
ENDFUNC

This code creates a plUploadHandler component and tells it to store files uploaded in a temp subfolder. This is a temporary folder where files are uploaded to and then discarded before getting copied to a permanent location.

We then need to map the OnUploadComplete event by mapping it to another function OnImageUploadComplete() that will do the post processing and moving of our file. Finally we can specify the file extensions that are allowed for the image and then we’re ready to Process the current request with loUpload.ProcessRequest().

This method is called multiple times for each file uploaded. Files are uploaded in chunks so a 2meg file is broken into many smaller chunks that are sent and processed one at a time. When a file is completed the OnImageUploadComplete event is fired. Here’s what that looks like:

FUNCTION OnImageUploadComplete(lcFilename, loUpload)
LOCAL lcUrl, lcFile
 
lcUrl = this.ResolveUrl("~/temp/" + lcFileName)
 
*** Resize the image
lcFile = ADDBS(loUpload.cUploadPath) + lcFileName
 
*** Delete expired files - only for 10 minutes
DeleteFiles(ADDBS(JUSTPATH(lcFile)) + "*.*",600)
 
lcNewFile =  SYS(2015) + "." + JUSTEXT(lcFile)
lcNewPath = this.cHtmlPagePath + "PostImages\" + TRANSFORM(YEAR(DATETIME())) + "\"
IF !ISDIR(lcNewPath)
    MD (lcNewPath)
ENDIF
 
lcFileName = lcNewPath + lcNewFile
*ResizeImage(lcFile,lcFileName,1024,768)
COPY FILE (lcFile) TO (lcFileName)
DELETE FILE (lcFile)
 
lcUrl = this.ResolveUrl("~/PostImages/" + + TRANSFORM(YEAR(DATETIME())) + "/" + lcNewFile)
lcUrl = "http://" + Request.GetServerName() + lcUrl
 
*** Write out the response for the client (if any)
*** In this case the URL to the uploaded image
loUpload.WriteCompletionResponse(lcUrl)
 
ENDFUNC

The handler is passed the original file name (just the filename without a path) and the loUpload component.

For the message board I want to capture the file uploaded, rename it with a random name and then move it a more permanent folder – in this case PostImages/YEAR/. Once the file has been copied the original uploaded file in the temp folder can be deleted.

Finally the OnImageUploadComplete() method has to return the new URL to the client so that the client can link to the image. If you recall in the JavaScript we were sent a response object with a response property. The response property holds whatever we write out into the WriteCompletionResponse(). The most useful thing here almost always is the full URL to the resource that was uploaded if the client allows using that resource in some way. In the client application the URL is used to embed an image link into the user’s message text.

Quite a bit of Code, but easy to do

What’s described above is the entire process involved, which is not entirely trivial. There are a fair amount of moving parts in this code both on the client and on the server, but between plUpload and Web Connection’s plUploadHandler the actual code you have to write is pretty minimal. Most of what you see above is boiler-plate code that you can cut and paste into place and then only customize the actual result handlers when uploads are complete both on the server and client. Although it’s a fair bit of code overall the non boiler-plate code is minimal.

by Rick Strahl at April 20, 2015 08:31 PM

Beth Massi - Sharing the goodness

After Hours @ Build in San Francisco–April 29th

Hey-ya folks in the Bay Area! Our team is speaking at a free community event on April 29th that I’m pretty excited about. We’ll have plenty of experts from the .NET, ASP.NET and Managed Languages teams there as well as the .NET Foundation and GitHub so please come to learn and mingle!

Check it the invite:


The .NET Foundation has partnered with the Microsoft Developer Evangelism team to bring to you After Hours at Build – a special event on April 29th designed for developers, startups, and technology leaders. Come join us to hear the latest news and innovations from Build 2015 during an exclusive evening at San Francisco's stylish Terra Gallery. 

Get the inside scoop from the .NET product teams, GitHub, and .NET Foundation on the innovations in .NET and the journey into open source. We'll also show you what's new and what we're building, including ASP.NET 5, C# 6, .NET compiler platform (Roslyn), and how we're taking .NET cross-platform in the open on GitHub.

REGISTER HERE: http://aka.ms/afterhours

WEDNESDAY, APRIL 29, 2015 | 6:00PM - 11:00PM

Terra Gallery - Directions
511 Harrison Street, San Francisco, CA 94105 | 415.896.1234
*Must be 21 years of age, with identification, to attend

AGENDA
6:00PM - 6:45PM - Registration
6:45PM - 7:00PM - Welcome & Announcements
   Featuring Matt Thompson (General Manager, US DX, Microsoft)
7:00PM - 8:00PM - Keynote
   Featuring Scott Hanselman (Principal Program Manager, .NET Product Group, Microsoft) & Phil Haack (GitHub) as well as other experts from the .NET, Managed Languages, and ASP.NET teams.
8:15PM - 8:30PM - Closing Remarks & Event Drawing
  Featuring Martin Woodward (Executive Director, .NET Foundation)
8:30PM - 11:00PM - After Hours at Build Reception

Doors open at 6:00PM and the presentation will begin at 6:45PM. The first 100 registrants to arrive will receive limited edition door prizes! Enjoy lively presentations, delicious food and drinks, and lots of time to chat and sip with your peers. Space is limited, so register now: http://aka.ms/afterhours


Hope to see you there.

Enjoy!

by Beth Massi - Microsoft at April 20, 2015 04:36 PM

Alex Feldstein

April 19, 2015

Alex Feldstein

Shedding Some Light

Installing VFP 9 (all versions) on one computer

Back in March of 2008 I wrote a white paper to help Visual FoxPro developers install Visual FoxPro 9 Release to Manufacturing (RTM), Service Pack 1 (SP1), and Service Pack 2 (SP2) all on the same computer. At the time I hoped the readers found the information presented in the white paper a useful guide in getting the different versions of Visual FoxPro 9 installed and working on their development machine. The main reason I wrote it was to encourage developers who were hesitant to install Visual FoxPro 9 Service Pack 2 to get it installed and begin the testing process with their apps. The reputation of VFP 9 SP2 was not all that positive as there were some bugs that made it challenging when released.

Over the years I have updated the white paper to include the VFP 9 SP2 hotfixes, the Fox Community supported VFP 9 Help file on VFPX, highlight some issues with the Virtual Store when upgrading VFP 9 to the latest Service packs, and corrected some bad Web links along the way. Several people have contributed feedback and suggestions along the way.

In the past few months I have talked with several developers who are still running the original VFP 9 SP2 release, building apps, and deploying them without the VFP 9 SP2 hotfixes. I wanted to refer them to the white paper on the White Light Computing Web site, but I knew recently that the white paper became inaccurate. So I took some time this evening to update it and get it posted.

The reason for the update is that the VFP 9 SP2 hotfix downloads hosted on Microsoft’s Code Gallery Web site disappeared when Microsoft killed the Web site. All the hosted files were removed. The Fox Community jumped into action as soon as this became known and started a new project on VFPX to host this very important VFP 9 SP2 Hotfix download. Additionally, I reviewed the entire white paper, added download information for the VFP 9 Reporting Applications (also a VFPX project) to fix some user interface nits and an important hi-resolution monitor bug fix, fixed a couple bad links, and updated some figures and folder names to make it more current from the original writing in 2008. I also adding some marketing materials for the books I have written over the last 15 years.

This white paper has become more than a guide to set up different folders for the different VFP 9 versions. It also is current documentation on where to find all the core Visual FoxPro 9 download files.

I certainly hope some of you have found this white paper useful over the years (hard to believe it has been 7 years since I originally wrote it). If you have not had a chance to get the latest hotfixes for VFP 9, make sure you follow the links in this blog and go get them installed. I personally have seen the nasty reporting bug fixed in this build. With this bug fixed and all the improvements from VFPX over the years, I find VFP 9 SP2 very reliable and stable.

by Rick Schummer at April 19, 2015 04:10 AM

April 18, 2015

FoxCentral News

Chicago FUDG - April 2015

 Our April 2015 meeting starts at 5:30pm (CDT) on Monday the 20th at 1871 at the Merchandise Mart suite 1212. Our speaker for April is Rick Borup and his topic is: "Refactoring VFP Code: If it Ain't Broke, Fix it". He will also do an informal review of the version control software, Mercurial, and discuss a new VFPx utility that eases working with VFP files in Mercurial. More details at http://www.ChicagoFUDG.com

by Chicago FoxPro Users and Developers Group at April 18, 2015 08:03 PM

Alex Feldstein

Photo of the Day


Ford Trimotor and Boeing B-17 at Miami Executive Airport in February 2015

by Alex Feldstein (noreply@blogger.com) at April 18, 2015 10:16 AM

April 17, 2015

Alex Feldstein

April 16, 2015

Alex Feldstein

VisualFoxProWiki

UpcomingEvents

Editor comments: Chicago FUDG April Meeting
A place to list upcoming Visual FoxPro events like conferences, meetings, user groups, open training sessions...
Closest at the top please, and please remove past events.

April 16, 2015 04:03 AM

Craig Bailey

How Google reinforces, then manages to overcome consensus bias

From Aaron Wall at SEObook:

Consensus bias is set to an absurdly high level to block out competition, slow innovation, and make the search ecosystem easier to police. This acts as a tax on newer and lesser-known players and a subsidy toward larger players.

Eventually that subsidy would be a problem to Google if the algorithm was the only thing that matters, however if the entire result set itself can be displaced then that subsidy doesn’t really matter, as it can be retracted overnight.

Whenever Google has a competing offering ready, they put it up top even if they are embarrassed by it and 100% certain it is a vastly inferior option to other options in the marketplace.

The whole post is (as usual) an excellent read.

The post How Google reinforces, then manages to overcome consensus bias appeared first on Craig Bailey.

by Craig Bailey at April 16, 2015 03:19 AM

April 15, 2015

CULLY Technologies, LLC

Installing Brother Print Drivers on Linux Mint 17

I’ve had HP printers for the last several printers we’ve owned and their Linux support has been spot on. Basically Linux can “see” the printer directly and the print drivers have been one of the options listed from the CUPS print driver options.

I have grown unimpressed with HP as a company however and I’ve grown in appreciation of the Brother printers. We purchased a Brother MFC-J5620DW for a good price. The hardware is very nice from a cursory inspection and it installed quickly: toner, power, self-check, hook up to the network. Easy peasy.

I opened up my Linux laptop and went to add a printer. There it was in the list! Sweet. This is going to be quick. When I went to select the Brother Print Driver however, this model (or a similar model) wasn’t in the list. Hmmmm. I had it search the Internet for downloadable drivers and it didn’t find any. More hmmmm. I found one site that allowed for downloading drivers for Linux … but it must have been an old area of their website. It didn’t even have our model of printer.

Here’s what worked:

  1. Go to this page: Brother Product Search and type in your model number, and click “Search”. NOTE: the other option is “Linux (rpm)” for Redhat and Fedora fans!
  2. If your model is found, click the “Downloads” link. It detected my OS and automatically selected the “Linux” option. I chose the “Linux (deb)” installer. Click “Search”.
  3. Download the “LPR printer driver (deb package)”. Install this using the package manager. The file for my printer was 2.8MB.
  4. Download the “CUPSwrapper printer driver (deb package)” which is only 0.01 MB. I think I can handle that download. I had it automatically open the package manager and install the package.
  5. Go to “Printers” on your machine and go through the process to “Add” a printer. It was able to see the networked printer, and it found the drivers automagically. Set print mode to “Fast” (saves ink and time!) and then choose “Print Test Page”.

Works like a champ. I am very happy with my Brother printer. I hope this helps you out!

by kcully at April 15, 2015 07:43 PM

VisualFoxProWiki

VFP7RuntimeFiles

Editor comments: Updated location of runtime installers.
  • Check out Mike Stewart's Walkthrough: Creating a Visual FoxPro Application Setup Program Using InstallShield Express in the MSDN online
  • * For some Ready-to-go Runtime Installers see wOOdy's archive at Code.Msdn.Microsoft.com/FoxPro
  • For some Ready-to-go Runtime Installers see wOOdy's contribution at VFPX.org
    A minimal set of DLL's for VFP7 application
    DLL Name Register (order) Default Location Other Locations Comment
    msvcr70.dll No (1) WinSysDir WinSysDir, App Folder VC++ 7.0 Runtime library
    vfp7r.dll Yes (3) Common Files\Microsoft Shared\VFP App Folder, WinSysDir STDLL and EXE support
    vfp7t.dll Yes (3) --"-- --"-- MTDLL support
    The runtimes for the language(s) you support:
    vfp7renu.dll No The same as vfp7r.dll The same as vfp7r.dll English
    vfp7resn.dll --"-- --"-- --"-- Spanish
    vfp7rdeu.dll --"-- --"-- --"-- German
    vfp7rfra.dll --"-- --"-- --"-- French
    vfp7rrus.dll --"-- --"-- --"-- Russian
    vfp7rcsy.dll --"-- --"-- --"-- Czech
    vfp7rkor.dll --"-- --"-- --"-- Korean
    vfp7rchs.dll --"-- --"-- --"-- Chinese (PRC)
    vfp7rcht.dll --"-- --"-- --"-- Chinese (Taiwan)
    To provide compressed HTML help (CHM) within your apps:
    foxhhelp7.exe Yes
    Microsoft Shared\VFP WinSysDir foxhhelp7.exe /regserver
    foxhhelpps7.dll No --"-- --"--
    XMLTOCURSOR() function requires MSXML 3 :
    msxml3.dll Yes WinSysDir WinSysDir
    msxml3r.dll No --"-- --"-- Required by msxml3.dll
    msxml3a.dll --"-- --"-- --"-- --"--
  • April 15, 2015 05:30 PM

    VFP8RuntimeFiles

    Editor comments: Update to runtime installer download location
  • See also Mike Stewart's Walkthrough: Creating a Visual FoxPro Application Setup Program Using InstallShield Express in VFP8 help or in the MSDN online
  • See also http://www.alvechurchdata.co.uk/foxfiles.htm
  • * For some Ready-to-go Runtime Installers see wOOdy's archive at Code.Msdn.Microsoft.com/FoxPro
  • For some Ready-to-go Runtime Installers see wOOdy's contribution at VFPX.org
    A minimal set of DLL's for VFP8 application
    DLL Name Register
    (order)
    Default Location Other Locations Comment
    msvcr70.dll No (1) WinSysDir WinSysDir, App Folder VC++ 7.0 Runtime library
    gdiplus.dll No (1) Common Files\Microsoft Shared\VFP --"-- GDI+ support
    vfp8r.dll Yes (3) --"-- App Folder, WinSysDir STDLL and EXE support
    vfp8t.dll Yes (3) --"-- --"-- MTDLL support
    The runtimes for the language(s) you support:
    vfp8renu.dll No The same as vfp8r.dll The same as vfp8r.dll English
    vfp8resn.dll --"-- --"-- --"-- Spanish
    vfp8rdeu.dll --"-- --"-- --"-- German
    vfp8rfra.dll --"-- --"-- --"-- French
    vfp8rrus.dll --"-- --"-- --"-- Russian
    vfp8rcsy.dll --"-- --"-- --"-- Czech
    vfp8rkor.dll --"-- --"-- --"-- Korean
    vfp8rchs.dll --"-- --"-- --"-- Chinese (PRC)
    vfp8rcht.dll --"-- --"-- --"-- Chinese (Taiwan)
    To provide compressed HTML help (CHM) within your apps:
    foxhhelp8.exe Yes
    Microsoft Shared\VFP WinSysDir foxhhelp8.exe /regserver
    foxhhelpps8.dll No --"-- --"--
    XMLTOCURSOR() function requires MSXML 3 :
    msxml3.dll Yes WinSysDir WinSysDir
    msxml3r.dll No --"-- --"-- Required by msxml3.dll
    msxml3a.dll --"-- --"-- --"-- --"--
    XMLAdapter class requires MSXML 4 :
    msxml4.dll Yes WinSysDir WinSysDir
    msxml4r.dll No --"-- --"-- Required by msxml4.dll
  • April 15, 2015 05:28 PM

    Alex Feldstein

    April 14, 2015

    Alex Feldstein

    April 13, 2015

    Alex Feldstein

    April 12, 2015

    Alex Feldstein

    April 11, 2015

    Alex Feldstein

    April 10, 2015

    www.atoutfox.org - Contributions

    Fiabilisation des données (d'adresse) à l'heure du big data

    Session 15-21 des rencontres AToutFox 2015 à Roissy
    Enfin arrivé à l'uploader ...

    by François 37 at April 10, 2015 05:41 AM

    Alex Feldstein

    April 09, 2015

    Rick Strahl's Web Log

    ASP.NET MVC HttpVerbs.Delete/Put Routes not firing

    A few times in the last weeks I’ve run into a problem where I found that DELETE operations would not fire in ASP.NET MVC controllers. I’ve been building APIs mostly with Web API until recently, but started using MVC instead with current projects in light of vNext which essentially uses the MVC model for ‘APIs’. And I ran into trouble each time with PUT and DELETE verbs not firing.

    What’s the Problem?

    To demonstrate here’s a simple action method on an MVC controller that uses Attribute routing for a delete operation:

    [Route("albums/{id}")]
    [AcceptVerbs(HttpVerbs.Delete)]
    public ActionResult DeleteAlbum(int id)
    {
        var albumBus = new AlbumBusiness();
    
        if (!albumBus.Delete(id, saveChanges: true, useTransaction: true))
            throw new CallbackException("Couldn't delete album: " + albumBus.ErrorMessage);
    
        return Json(true, JsonRequestBehavior.AllowGet);
    }
    

    When this route is fired I’m getting a 404 error from IIS – it’s not finding the route. However, if I change the route to a HttpVerbs.Get it runs just fine.

    What the heck is happening here?

    Missing Verbs on ExtensionlessUrlHandler

    The main culprit is the ExtensionlessUrlHandler Http handler that’s responsible for handling MVC’s Controller and Attribute routing. The default entry for this handler is defined in ApplicationHost.config doesn’t include the DELETE or PUT verb.

    Here’s what’s in my ApplicationHost.config which determines the default handler settings:

    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." 
    verb="GET,HEAD,POST,DEBUG"
    type="System.Web.Handlers.TransferRequestHandler"
    preCondition="integratedMode,runtimeVersionv4.0"
    responseBufferLimit="0" />

    Note that PUT and DELETE are not among the supported verbs.

    To fix this you can add the following to your application’s web.config file:

     <configuration>
    <
    system.webServer> <handlers> <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*."
    verb="GET,HEAD,POST,DEBUG,PUT,DELETE,OPTIONS"
    type="System.Web.Handlers.TransferRequestHandler"
    preCondition="integratedMode,runtimeVersionv4.0" /> </handlers> </system.webServer> </configuration>

    And voila, PUT and DELETE now work. Yay!

    ASP.NET MVC doesn’t, Web API does

    It’s interesting to note that the problem above applies specifically to ASP.NET MVC projects. When you create a new MVC project there’s no custom handler registration made. So for MVC project or any project other than an API project you’ll have to manually add the handler – even if you add WebAPI features later.

    If you create an ASP.NET WebAPI project you do get the following in the default web.config created by the new project template:

    <system.webServer>
      <handlers>
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" 
    type="System.Web.Handlers.TransferRequestHandler
    "
    preCondition="integratedMode,runtimeVersionv4.0"
    /> </handlers> </system.webServer>

    For me this was probably the main reason for confusion – I expected it to ‘just work’ since I never had an issue with WebAPI. But clearly different default configuration settings are made for API vs MVC applications (so much for ‘One ASP.NET’).

    In a way I suppose this makes sense – if you’re not building API applications PUT and DELETE are unlikely to be something needed, but still it’s confusing to have things work sometimes and not others.

    Additional Issues: WebDav

    If you’re running an MVC application and you run into this issue, most likely the ExtensionlessUrlHandler is the culprit. However, if that does not resolve the issue, there are a few other things to check:

    If you have WebDav installed on your server/site, that causes a more restrictive URL/routing rules to be applied including removing the DELETE verb by default.

    <system.webServer> <security> <requestFiltering> <verbs applyToWebDAV="false"> <add verb="DELETE" allowed="true" />
    <add verb="PUT" allowed="true" /> </verbs> </requestFiltering> </security> </system.webServer>

    If you are using WebDav as part of your application or it’s defined at the server root, you can add additional verbs to the RequestFiltering section to explicitly allow the verbs you’re interested in through.

    Alternately if you want to disable WebDav in your specific application:

    <system.webServer>
      <modules runAllManagedModulesForAllRequests="false">
        <remove name="WebDAVModule" />
      </modules>
    </system.webServer>

    If you’re not using WebDav as part of your application (but it’s defined at the server root) you can just remove the module and the restrictions should actually go away.

    © Rick Strahl, West Wind Technologies, 2005-2015
    Posted in ASP.NET   IIS7  MVC  

    by Rick Strahl at April 09, 2015 11:23 PM

    Alex Feldstein

    Photo of the Day


    At the back of the Ft. Lauderdale airport by the South runway (the sloped one)

    by Alex Feldstein (noreply@blogger.com) at April 09, 2015 05:00 AM

    April 08, 2015

    www.atoutfox.org - Contributions

    PostgreSQL - Convertir du code client VFP en code serveur PostgreSQL

    Le matériel de la session des rencontres 2015 : des points d'entrée pour le développement de fonctions stockées PostgresSQL pour l'utilisation en VFP.

    by jcriv at April 08, 2015 05:41 AM

    etalonage des gris sur windows

    Voici une méthode simple pour balancer les couleurs et le gris d'un écran sur Windows

    Le programme que je vous soumets affiche un écran affichant un dégradé de gris sur 30 colonnes.... Du noir au blanc sur 30 colonnes.

    Qu'est-ce que cela permet de faire :

    exécuter le code que je vous soumets et constatez ce qui suit
    Le contraste
    regarder les colonnes blanches à droite, vous devez être capable de différencier les 2 dernières colonnes La luminosité
    regarder les colonnes de gauche, vous devez être capable de différencier les 2 premières colonnes de gauche Les couleurs
    si vous percevez une coloration dans le gris c'est que les couleurs de votre écran ne sont pas bien balancées
    La procédure est sensiblement la même sur la majorité des cartes video ... Seul les termes que je vais employer peuvent se différencier d'une carte NVidia d'une autre carte

    bref de nos jours nous avons un écran LCD ce qui veut dire numérique ce qui veux très peu d'ajustement de la part du manufacturier de votre écran....

    donc soit vous tapez "couleur" dans la zone de recherche du menu démarrer de Windows et vous vous instruisez ou vous accédez à vos paramêtres de votre carte video et on commence

    sur ma Nvidia j'ai commencé comme suivant:
    Éclat numérique ajusté 50% Teinte ajusté à 0 Gamma ajusté à 1 des lors si vous voyez une coloration dans le dégradé des gris vous pouvez jouer avec la teinte ajustez pour que le gris soit du gris ou choisir un des canaux de couleur et varié son intensité. Comme exemple vous percevez du orange dans le gris, il faudra en premier lieu jouer avec le rouge et en second avec le vert pour finir avec le bleu.... ça vient avec l'expérience.

    Il ne faut pas oublier que nous sommes présence d'une perception positive des couleurs ce qui veut dire Rouge-Vert-Bleu alors qu'en perception négative c'est Rouge-Jaune-Bleu

    Lorsque vous aurez réeussit à avoir un gris ressemblant à du gris et bien ne reste plus que le contraste-luminosité.

    je vous recommande de commencer par la luminosité en la variant, observez un faible détachement dans les noirs des 2 premieres colonnes de gauche. Le contraste va affecter les colones de blancs mais aussi affecter les colonnes de noirs de gauche. Il faut simplement faire varier et observer un faible détachement des blancs et ensuite vérifier s'il n'y a pas d'impression de blanc dans le noir des 2 premieres colonnes de gauche. Ce qui veut dire que si vous avez cette impression, dimunuer la luminosité et augumentté le contraste et vice versa l'inverse peut être la solution.... N'oubliez pas que c'est le noir qui est le plus difficile à ajuster

    Encore une fois de la patience, se documenter et s'amuser

    une petite formation intéressante pour commencer https://www.youtube.com/watch?v=wvhv7KZfcRk

    by eddymaue at April 08, 2015 05:41 AM

    Alex Feldstein

    April 07, 2015

    VisualFoxProWiki

    PhiladelphiaVFPUserGroup

    Editor comments: April meeting
    Starting in August 2008, we meet the second Tuesday of the month.

    A user group for Visual FoxPro developers in the greater Philadelphia area, including New Jersey, Delaware and the Lehigh Valley. We meet the second Tuesday of each month at 7 PM.

    Beginning with the April 2006 meeting, there is a $5 charge per meeting.

    Beginning with the July 2011 meeting, we will meet in room 158 at DeVry University, 1140 Virginia Drive, Fort Washington, PA. Beginning with the October, 2014 meeting, we're moving to room 104 at DeVry.

    Feel free to bring something to eat and arrive as early as 6:30.

     class= Check out our blog at vfpphilly.blogspot.com.
     class= We're on Twitter: @VFUGPhilly

    If you'd like to speak at our group or join our email list, send a message to tamar@tamargranor.com

    April 07, 2015 09:23 PM

    UpcomingEvents

    Editor comments: Philly April
    A place to list upcoming Visual FoxPro events like conferences, meetings, user groups, open training sessions...
    Closest at the top please, and please remove past events.

    April 07, 2015 09:21 PM

    FoxCentral News

    Philly VFUG meets April 14

    The Philadelphia VFP User Group meets Tuesday, April 14 at 7:00 PM in room 104, DeVry University, 1140 Virginia Drive, Fort Washington, PA. As usual, feel free to bring some dinner and come as early as 6:30 PM. This month, member Jim Connolly will speak on ?Document Management within Visual FoxPro.? Abstract: I created programs that will create an electronic filing system. The programs read the bar codes from the invoices and files them in electronic storage. This allows the end user to view the documents with a single click in the app. I will show the class how to setup the bar code reader and to accept individual scans for easy access. There are some recommended programs that will assist in the process. I will present them along with the Fox Pro program.

    by Philadelphia Visual FoxPro User Group at April 07, 2015 08:27 PM

    VFP Philly

    April 14: Jim Connolly--Document Management within Visual FoxPro



    Our next meeting will be Tuesday, April 14 at 7:00 PM. This month, member Jim Connolly will speak on “Document Management within Visual FoxPro.”

    Abstract: I created programs that will create an electronic filing system. The programs read the bar codes from the invoicesAnd files them in electronic storage. This allows the end user to view the documents with a single click in the app. I will show the class how to setup the bar code reader and to accept individual scans for easy access. There are some recommended programs that will assist in the process. I will present them along with the Fox Pro program.

    We need speakers for upcoming meetings. Please let Jim (JConnolly@jtca.com) know if you have something to share with the group.



    by Tamar E. Granor (noreply@blogger.com) at April 07, 2015 08:19 PM

    Alex Feldstein

    April 06, 2015

    Rick Strahl's Web Log

    Adding Files to the Windows MRU/Recent Document List

    If you have a Windows application that uses custom file extensions for documents, it might be nice to add the documents you open inside of the application to the Most Recently Used list of the application. For example in West Wind Web Surge I want to show the most recent documents so they show up like this from the task bar Jump List:

    MRUListTaskBar

    You can see the recent list above the actual start link with the most recently used Web Surge Url Sessions shown.

    If you have a custom extension registered for your application and the extension points at your application’s exe, the taskbar is automatically updated anytime you open a file with that extension from the Windows Shell. So if I’m in Explorer and I open this file:

    FileOpen

    This file is launched and automatically added the MRU list. Nothing else to do there.

    However, if I also want to do this from within the application when I open a file, I have to explicitly add the file to the MRU list. There are a couple of things required for this:

    • You need to create a registered file extension
    • You need to add documents to the recent documents collection through an API

    The former is crucial in order for any of what follows to work – you have to have a file association that links a specfic file extension to your installed application (the EXE that you are running). In fact that’s how the Explorer integration works when you double click on ‘known’ extension when it tracks the recently used files.

    I’ll come back to the file association at the end of this post. But first, let’s look at how you can use an API to programmatically add files to the MRU list.

    Using the ShAddToRecentDocs API

    Windows has a really simple API called ShAddToRecentDocs that makes its super easy to add files to the MRU list. It’s easy to access from most clients as it’s a simple string and flag based API.

    void SHAddToRecentDocs(
        UINT uFlags,
        _In_opt_  LPCVOID pv
        );

    In C# it’s easy to set this up with some PInvoke code (courtesy of PInvoke.NET):

    public static class MostRecentlyUsedList
    {
        /// <summary>
        /// Adds Recently Used Document to the MRU list in Windows.
        /// Item is added to the global MRU list as well as to the
        /// application specific shortcut that is associated with
        /// the application and shows up in the task bar icon MRU list.
        /// </summary>
        /// <param name="path">Full path of the file</param>
        public static void AddToRecentlyUsedDocs(string path)
        {
            SHAddToRecentDocs(ShellAddToRecentDocsFlags.Path, path);
        }
    
    
        private enum ShellAddToRecentDocsFlags
        {
            Pidl = 0x001,
            Path = 0x002,
        }
    
        [DllImport("shell32.dll", CharSet = CharSet.Ansi)]
        private static extern void
            SHAddToRecentDocs(ShellAddToRecentDocsFlags flag, string path);
    
    }

    You can now push this code into your application anytime a new file is opened:

    Requests = StressTester.ParseSessionFile(FileName);
    if (Requests == null)
        Requests = new List<HttpRequestData>();
    else
        MostRecentlyUsedList.AddToRecentlyUsedDocs(Path.GetFullPath(FileName));

    What’s nice about this API is that it manages the recently used file list for you by adding the new item to the top and making sure that if the file is already in the list that the old item is removed. In short – it manages the MRU list for you nicely.

    Reading the MRU List

    Since Windows manages the list for you, it would also be nice to read the list back so you can use it in your own application’s MRU list. For example in Web Surge I have a Recent Sessions list menu option:

    WebSurgeMru

    It sure would be nice if this list could be populated from the same MRU list that Windows already keeps.

    The good news is that the Windows Recent file list is stored as a bunch of .lnk files in %USERPROFILE%\Recent, so it’s easy to iterate over the list. Unfortunately the .lnk files are a binary format that are not easily readable directly. However, there are various shell extensions and some helpers in the Windows Scripting host that can help make sense of this.

    The following code uses directory iteration of the User’s Recent folder, and using Windows Scripting host to get the actual target filenames and return them as a list:

    /// <summary>
    /// Returns a list of the most recent files as stored by windows for the given 
    /// filespec. Specify the files spec as *.websurge where .websurge is the extension
    /// you'd like to retrieve. The length of the list will depend on your Windows
    /// settings for the maximum number of list items configured.
    /// </summary>
    /// <param name="fileSpec">A wildcard file spec: *.websurge for example</param>
    /// <returns>List of strings or an empty list if none exist</returns>
    public static List<string> GetMostRecentDocs(string fileSpec)
    {
        var recentFiles = new List<string>();
    
        var path = Environment.GetFolderPath(Environment.SpecialFolder.Recent);
    
        var di = new DirectoryInfo(path);
        var files = di.GetFiles(fileSpec + ".lnk")
            .OrderByDescending(fi => fi.LastWriteTimeUtc)
            .ToList();
        if (files.Count < 1)
            return recentFiles;
    
        dynamic script = ReflectionUtils.CreateComInstance("Wscript.Shell");
    
        foreach (var file in files)
        {
            dynamic sc = script.CreateShortcut(file.FullName);
            recentFiles.Add(sc.TargetPath);
            Marshal.FinalReleaseComObject(sc);
        }
        Marshal.FinalReleaseComObject(script);
    
        return recentFiles;
    }

    Note that I’m using dynamic COM interop here against the WScript.Shell host to avoid having to import an interop assembly. ReflectionUtils.CreateInstance is a helper function I use that’s part of the Westwind.Utilities library – the code is on GitHub so you can inline it or use the Westwind.Utilities NuGet package. I use dynamic to avoid having to import the COM types and I can easily just two members I’m interested in.

    Putting it all Together

    To put all this together I added this functionality to my configuration class.

    The class is used to serialize configuration data to disk. I use Westwind.ApplictionConfiguration and the AppConfiguration base class to handle the configuration serialization for me, but that’s really not all that relevant here. Suffice it to say the configuration is loaded when the class is instantiated and can be optionally written at any point to write out it’s internal state including the nested configuration subobjects.

    Previously I stored the configuration as part of the configuration which was written out to a JSON file. Since this is still a configuration feature I continue to include the RecentFilesProperty in this configuration as well as the LastFileName. But I can now automatically load the RecentList from the Windows MRU list and update it when a new LastFileName is assigned.

    Here’s what this looks like:

    public class WebSurgeConfiguration : AppConfiguration { public string AppName { get; set; } public StressTesterConfiguration StressTester { get; set; } public UrlCaptureConfiguration UrlCapture { get; set; } public WindowSettings WindowSettings { get; set; } public CheckForUpdates CheckForUpdates { get; set; }

     


    [JsonIgnore]
    public List<string> RecentFiles { get { if (_recentFileList == null) { try { _recentFileList = MostRecentlyUsedList.GetMostRecentDocs("*.websurge"); } catch { _recentFileList = new List<string>(); } } return _recentFileList; } } private List<string> _recentFileList; public string LastFileName { get { return _LastFileName; } set { _LastFileName = value; try { MostRecentlyUsedList.AddToRecentlyUsedDocs(value); // reload recent file list _recentFileList = MostRecentlyUsedList.GetMostRecentDocs("*.websurge"); } catch {} } } private string _LastFileName; }

    Note that I wrap these calls into try/catch blocks just in case there are some machine restrictions that disallow use of Windows Scripting Host, PInvoke calls or registry access (which is what Windows uses behind the scenes). Even if those calls fail the app doesn’t crash since this is just a convenience feature rather than a vital, critical feature.

    File Associations are Required!

    What I’ve described is a simple way to manage recent files, but keep in mind that this works reliably only if you actually have a mapped Windows extension that correlates with the application you are executing.

    To do that you need to create Windows File association in the registry which is typically done as part of an installation routine for an application. Here’s what this looks like in my Installer (I use a nice install tool called InstallMate I’ve been using for years).

    FileAssociation

    There are basically two top level keys under HKCR that have to be created:

    • The actual file extension mapping
    • The “File Type” association

    The reason for this split configuration is that you can potentially have multiple extensions pointing at the same file type.

    Here’s what the reg export looks like which is probably the easiest way to show the values:

    .websurge key (extension mapping)

    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\.websurge]
    @="westwind.websurge.requestfile"

    westwind.websurge.requestfile key (Shell file type definition)

    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\westwind.websurge.requestfile]
    
    [HKEY_CLASSES_ROOT\westwind.websurge.requestfile\DefaultIcon]
    @="C:\\Program Files\\West Wind WebSurge\\websurge.exe,0"
    
    [HKEY_CLASSES_ROOT\westwind.websurge.requestfile\shell]
    
    [HKEY_CLASSES_ROOT\westwind.websurge.requestfile\shell\open]
    
    [HKEY_CLASSES_ROOT\westwind.websurge.requestfile\shell\open\command]
    @="\"C:\\Program Files\\West Wind WebSurge\\WebSurge.exe\" \"%1\""
    
    

    The file extension simply has a key that points at the file definition. The file definition in turn includes the shell extension options that are used to display the icon and handle the shell open command which is executed when you click on a shortcut link.

    It’s easy enough to add this to an application as part of the installation routine – or even as part of first time startup code (assuming you have permissions to write to the HKCR key).

    Summary

    Using the Windows MRU list is pretty straight forward, as long as you have one or more registered file extensions that you are managing on internal MRU lists. You can easily add new items to the list and also easily retrieve the items back out. And you can let Windows worry about managing the list beyond that – sorting out dupes, keeping the list ordered properly etc. is taken care of. This way your application can use the same list that you see on a Windows Jump list without any extra code or management.

    I’ve written this up since I’ve used this sort of code in a few different apps but had it scattered about as part of application code – sitting down and writing this up forced me to isolate it out into something a little more reusable and add support for reading the values out as well as stuffing them in, so I can remember all of this in the future when I might need it again. Hopefully some of you will find this useful as well.

    If you want to see how this works in the actual running application I’ve described here you can take a look at West Wind WebSurge which is a small stresstesting/Url testing utility:

    © Rick Strahl, West Wind Technologies, 2005-2015
    Posted in Windows  C#  .NET  

    by Rick Strahl at April 06, 2015 07:46 PM

    Alex Feldstein

    Rahul Desai's Blog

    About the Australia datacenter

     

    You may request migration to the Australia datacenter upon datacenter availability (Q1 CY2015).

    If you’re an existing Microsoft Dynamics CRM Online customer with a billing address mapping to a new data center region, review the information in this topic to understand the move process.

    About the Australia datacenter

    by Rahul Desai at April 06, 2015 02:05 AM

    April 05, 2015

    Alex Feldstein

    April 04, 2015

    FoxProWiki

    GoogleMappingFromFoxpro

    I recently presented some code for using the Google Maps API from a Foxpro form. There is a pdf of the presentation along with source code at http://foxtrails.org/downloads/fox-geo

    April 04, 2015 02:59 PM

    Alex Feldstein

    April 03, 2015

    Beth Massi - Sharing the goodness

    Open Source Show and Tell– April 24th in San Francisco

    image

    I’m excited and honored that I’ve been asked by Keen.io to come speak at their Open Source Show and Tell event in San Francisco on April 24th. In their words…

    We love Open Source software and so do you. Come celebrate hacker culture with Keen IO, Rainforest QA, and Segment (<< in their brand new shiny office!). Open Source Show and Tell is an opportunity to share what you've been working on, learn about projects that your local community is supporting, and meet like minded people.

    The 4-hour free event consists of multiple speakers and 20-minute talks on all sorts of interesting open source topics and technologies. And of course, there’s social hour afterwards. I’ll be giving the closing keynote on the .NET team’s journey into open source – how we did it, why we did it, and what we’re building.

    CHECK OUT THE AGENDA AND SPEAKERS HERE

    REGISTER HERE

    Looking forward to it! Hope to see you there.

    by Beth Massi - Microsoft at April 03, 2015 03:16 PM

    Alex Feldstein

    April 02, 2015

    Rick Strahl's FoxPro and Web Connection Web Log

    Access-Control-Allow-Origin Header in West Wind Web Connection

    Over the last few weeks I’ve gotten a ton of questions for applications that need to support cross-site script access in relation to West Wind Web Connection. This typically a requirement for service applications that are accessed from mobile devices or other devices that don’t load the actual site content from the origin Web site. Typically this means you are building a HTTP or REST service that communicates with the client via JSON.

    Web Connection 5.70 and later has introduced a host of new features – including the powerful and easy to use wwRestProcess Process class – to make it super easy to create HTTP based JSON services, and it looks like quite a number of users are taking advantage of these new features to integrate their Web Connection backends with various mobile device applications.

    So not surprising that these requests for Access-Control-Allow-Origin header questions are coming up more frequently now. When you’re building mobile or distributed services that are called from multiple origin sites or devices you will have to address the CORS issues to enable the cross-domain Web service access.

    Luckily making that happen is pretty easy.

    What is CORS?

    By default Web browsers (and Web browser controls) allow access of data retrieved via AJAX/XHR requests only to come from the same origin server as the originating request. This means that if I’m running on http://west-wind.com/ all of my HTTP requests using XHR have to come from the same west-wind.com domain.

    The reason for this restrictive behavior is to prevent cross-site scripting attacks – if your site’s has user input that can be corrupted to include <script> tags that execute it’s possible for an attacker to potentially send sensitive information, like cookie data or anything else contained on a page to another server. The XHR restrictions are in place to supposedly prevent this.

    CORS is a simple protocol allows a way to get around this by a server specifying an Access-Control-Allow-Origin header on the server to specify which domains (or all domains) that are allowed access to the site.

    Setting the Access-Control-Allow-Origin Header in Web Connection

    It’s easy to set this header in Web Connection:

    Response.AppendHeader("Access-Control-Allow-Origin","*")

    on any request that happens. Here I’m allowing any source domain to access the site. You can also specify specific domains as a comma delimited list in the format of http://west-wind.com,http://weblog.west-wind.com for example.

    Alternately you can also add this globally for an entire process class by setting the value in the OnProcessInit() method:

    FUNCTION OnProcessInit
     
    Response.GzipCompression = .T.
    Request.lUtf8Encoding = .T.
     
    Response.AppendHeader("Access-Control-Allow-Origin","*")
     
    RETURN .T.

    Finally you can also use IIS to set this header globally for the entire site assuming your using IIS 7 or later:

    <configuration>
    <
    system.webServer> <httpProtocol> <customHeaders> <clear/> <add name="Access-Control-Allow-Origin" value="*" /> </customHeaders> </httpProtocol> </system.webServer> </configuration>

    And voila that’s all it should take to make your site able to serve remote requests from mobile devices or from pages served off a remote domain.

    Things that make you go Hmmm.

    Alas, I’ve never really understood the value of this CORS implementation. Cross site scripting is a big problem no doubt, but I don’t really see how CORS helps this if the *server* can specify the domain it wants to allow. If somebody is attacking your site and trying to steal information and they want to use XHR to post the data somewhere it’s trivial for the user to set up a server that adds the above header. Nothing’s been prevented at that point. This just seems like yet another useless security protocol that makes things a little bit more inconvenient for developers, but adds very little of security safeguards. Just like JSONP and hidden iFrames have been able to get around XHR cross-site limitations for years, CORS doesn’t really provide anything that prevents that.

    The point of CORS is more to let the server decide of whether it wants to serve content to the client, but CORS is often billed as cross site scripting prevention which it really isn’t.

    by Rick Strahl at April 02, 2015 11:44 AM

    www.atoutfox.org - Contributions

    THOR : étendez l'interface FoxPro

    Thor est un ensemble d'outils écrits par des membres de la communauté et intégrés à l'IDE FoxPro. La session présentait un certain nombre de ces outils.

    by jcriv at April 02, 2015 05:41 AM

    Alex Feldstein

    Sandstorm's Blog (Home of ssClasses)

    xBox - ssUltimate Subscribers

    What is New?

    Added ProgrammaticChange event.  Now we can perform, say a new SQL SELECT based on the class' Value or ExtraValue, as we select on the dropdown grid via either arrow keys or mouse click.   Or update related objects on the form based on this class, as we select.  This event is what gets fired when selecting via dropdown grid.

    Fixed bug on Enter key suddenly changing value onto a different one via updating _SearchKeys with what is selected on dropdown and moving SelStart position at the end as well.


    Fixed bug on the class retaining old _SearchKeys value even when we totally remove the previous entry via backspace or delete keys


    For a more thorough learning of this class, see other features and updates of the class up to the point of the shared version:  http://sandstorm36.blogspot.com.au/2015/02/xbox-with-popup-grid.html


    Unmentioned Trick

    One of the things I forgot to mention is that you can return combined field values as its single Value. I do that on my end like this:




    Now, when you want to use one of those multiple values it returned, then you can utilize GETWORDNUM().

    That capability is on both the shared and per Subscriber versions.

    by Jun Tangunan (noreply@blogger.com) at April 02, 2015 12:41 AM

    April 01, 2015

    www.atoutfox.org - Contributions

    Windows 10 et VisualFoxPro 9

    Le PDF contient les slides que j'ai projetées le 26 mars 2015.

    by Francis Faure at April 01, 2015 05:41 AM

    Design Patterns ou Patrons de conception (saison deux)

    Le visuel de la session sur les Patrons de conception. Avec l'exemple non traité, faute de temps, sur le patron de méthode.
    Plus quelques programmes illustratifs.

    by Marc Thivolle at April 01, 2015 05:41 AM

    Rick Strahl's Web Log

    Prettifying a JSON String in .NET

    Occasionally it's useful to prettify an existing JSON string that you've received from somewhere: An HTTP response you need to look at while debugging or a UI that needs to display JSON to the user. Here's a small tip that makes it easy to take a JSON string and prettify it using the JSON.NET library.

    by Rick Strahl at April 01, 2015 05:19 AM

    Alex Feldstein

    March 31, 2015

    Rahul Desai's Blog

    Insights for Microsoft Dynamics CRM – powered by InsideView

     

    Boost your sales close rates with information that will help you find, understand, and engage more qualified buyers. The Insights pane lives on your Microsoft Dynamics CRM accounts, contacts, leads, and opportunities forms, where it pulls in company, contact, and social data from thousands of constantly-updated sources.

    Insights for Microsoft Dynamics CRM – powered by InsideView

    by Rahul Desai at March 31, 2015 09:50 PM

    Calvin Hsia's WebLog

    Write native to managed interop code: reg free COM

    If you followed the steps of the last post ( Call C# code from your legacy C++ code ), then your C++ program simply started the CLR (Common Language Runtime), invoked a C# method that returned the length of the passed in string argument. Not very exciting...(read more)

    by CalvinH at March 31, 2015 05:24 PM

    Alex Feldstein

    Sometimes you find strange stuff in SoBe





    Audi found in Ocean Drive, Miami Beach. They went through a lot of work on this one.

    by Alex Feldstein (noreply@blogger.com) at March 31, 2015 09:53 AM