Daily Archives

Articles indexed Wednesday June 16 2010

Page 34/119 | < Previous Page | 30 31 32 33 34 35 36 37 38 39 40 41  | Next Page >

  • How I understood monads, part 1/2: sleepless and self-loathing in Seattle

    - by Bertrand Le Roy
    For some time now, I had been noticing some interest for monads, mostly in the form of unintelligible (to me) blog posts and comments saying “oh, yeah, that’s a monad” about random stuff as if it were absolutely obvious and if I didn’t know what they were talking about, I was probably an uneducated idiot, ignorant about the simplest and most fundamental concepts of functional programming. Fair enough, I am pretty much exactly that. Being the kind of guy who can spend eight years in college just to understand a few interesting concepts about the universe, I had to check it out and try to understand monads so that I too can say “oh, yeah, that’s a monad”. Man, was I hit hard in the face with the limitations of my own abstract thinking abilities. All the articles I could find about the subject seemed to be vaguely understandable at first but very quickly overloaded the very few concept slots I have available in my brain. They also seemed to be consistently using arcane notation that I was entirely unfamiliar with. It finally all clicked together one Friday afternoon during the team’s beer symposium when Louis was patient enough to break it down for me in a language I could understand (C#). I don’t know if being intoxicated helped. Feel free to read this with or without a drink in hand. So here it is in a nutshell: a monad allows you to manipulate stuff in interesting ways. Oh, OK, you might say. Yeah. Exactly. Let’s start with a trivial case: public static class Trivial { public static TResult Execute<T, TResult>( this T argument, Func<T, TResult> operation) { return operation(argument); } } This is not a monad. I removed most concepts here to start with something very simple. There is only one concept here: the idea of executing an operation on an object. This is of course trivial and it would actually be simpler to just apply that operation directly on the object. But please bear with me, this is our first baby step. Here’s how you use that thing: "some string" .Execute(s => s + " processed by trivial proto-monad.") .Execute(s => s + " And it's chainable!"); What we’re doing here is analogous to having an assembly chain in a factory: you can feed it raw material (the string here) and a number of machines that each implement a step in the manufacturing process and you can start building stuff. The Trivial class here represents the empty assembly chain, the conveyor belt if you will, but it doesn’t care what kind of raw material gets in, what gets out or what each machine is doing. It is pure process. A real monad will need a couple of additional concepts. Let’s say the conveyor belt needs the material to be processed to be contained in standardized boxes, just so that it can safely and efficiently be transported from machine to machine or so that tracking information can be attached to it. Each machine knows how to treat raw material or partly processed material, but it doesn’t know how to treat the boxes so the conveyor belt will have to extract the material from the box before feeding it into each machine, and it will have to box it back afterwards. This conveyor belt with boxes is essentially what a monad is. It has one method to box stuff, one to extract stuff from its box and one to feed stuff into a machine. So let’s reformulate the previous example but this time with the boxes, which will do nothing for the moment except containing stuff. public class Identity<T> { public Identity(T value) { Value = value; } public T Value { get; private set;} public static Identity<T> Unit(T value) { return new Identity<T>(value); } public static Identity<U> Bind<U>( Identity<T> argument, Func<T, Identity<U>> operation) { return operation(argument.Value); } } Now this is a true to the definition Monad, including the weird naming of the methods. It is the simplest monad, called the identity monad and of course it does nothing useful. Here’s how you use it: Identity<string>.Bind( Identity<string>.Unit("some string"), s => Identity<string>.Unit( s + " was processed by identity monad.")).Value That of course is seriously ugly. Note that the operation is responsible for re-boxing its result. That is a part of strict monads that I don’t quite get and I’ll take the liberty to lift that strange constraint in the next examples. To make this more readable and easier to use, let’s build a few extension methods: public static class IdentityExtensions { public static Identity<T> ToIdentity<T>(this T value) { return new Identity<T>(value); } public static Identity<U> Bind<T, U>( this Identity<T> argument, Func<T, U> operation) { return operation(argument.Value).ToIdentity(); } } With those, we can rewrite our code as follows: "some string".ToIdentity() .Bind(s => s + " was processed by monad extensions.") .Bind(s => s + " And it's chainable...") .Value; This is considerably simpler but still retains the qualities of a monad. But it is still pointless. Let’s look at a more useful example, the state monad, which is basically a monad where the boxes have a label. It’s useful to perform operations on arbitrary objects that have been enriched with an attached state object. public class Stateful<TValue, TState> { public Stateful(TValue value, TState state) { Value = value; State = state; } public TValue Value { get; private set; } public TState State { get; set; } } public static class StateExtensions { public static Stateful<TValue, TState> ToStateful<TValue, TState>( this TValue value, TState state) { return new Stateful<TValue, TState>(value, state); } public static Stateful<TResult, TState> Execute<TValue, TState, TResult>( this Stateful<TValue, TState> argument, Func<TValue, TResult> operation) { return operation(argument.Value) .ToStateful(argument.State); } } You can get a stateful version of any object by calling the ToStateful extension method, passing the state object in. You can then execute ordinary operations on the values while retaining the state: var statefulInt = 3.ToStateful("This is the state"); var processedStatefulInt = statefulInt .Execute(i => ++i) .Execute(i => i * 10) .Execute(i => i + 2); Console.WriteLine("Value: {0}; state: {1}", processedStatefulInt.Value, processedStatefulInt.State); This monad differs from the identity by enriching the boxes. There is another way to give value to the monad, which is to enrich the processing. An example of that is the writer monad, which can be typically used to log the operations that are being performed by the monad. Of course, the richest monads enrich both the boxes and the processing. That’s all for today. I hope with this you won’t have to go through the same process that I did to understand monads and that you haven’t gone into concept overload like I did. Next time, we’ll examine some examples that you already know but we will shine the monadic light, hopefully illuminating them in a whole new way. Realizing that this pattern is actually in many places but mostly unnoticed is what will enable the truly casual “oh, yes, that’s a monad” comments. Here’s the code for this article: http://weblogs.asp.net/blogs/bleroy/Samples/Monads.zip The Wikipedia article on monads: http://en.wikipedia.org/wiki/Monads_in_functional_programming This article was invaluable for me in understanding how to express the canonical monads in C# (interesting Linq stuff in there): http://blogs.msdn.com/b/wesdyer/archive/2008/01/11/the-marvels-of-monads.aspx

    Read the article

  • How Orchard works

    - by Latest Microsoft Blogs
    I just finished writing a long documentation topic on the Orchard project wiki that aims at being a good starting point for developers who want to understand the architecture, structure and general philosophy behind the Orchard CMS. It is not required Read More......(read more)

    Read the article

  • Make windows XP ask for password

    - by daramarak
    We have software that have some features that are so sensitive that we want to verify the identity of the user. Instead of using a own user/password scheme we would really like to either test the password against the user password in XP, or even make Windows self reauthenticate the user so we can make sure that it is an authorized person that accesses the function. Or software is only running on windows XP embedded. I do not know if this is possible at all, does windows have any such features?

    Read the article

  • OpenCL maintenant disponible en version 1.1 : rajoute, entre autre, une meilleure interopérabilité a

    Le Khronos Group a publié, hier, la première mise à jour de leurs spécifications concernant OpenCL. Après 18 mois, voici les principaux changements au menu : -une amélioration de la parallélisation; -un wrapper pour le C++; -certaines fonctionnalités optionnelles sont désormais standardisées; Plus d'informations sur : http://www.khronos.org/news/press/re...uting-standard Que pensez-vous de ces changements? De quelles manières l'utilisez-vous?...

    Read the article

  • the problem of redirecting stdout in c#

    - by Mher
    Could you please explain why the shell redirection doesn't work with System.Diagnostics.Process class? I am trying to redirect the output streams to file with the following snippet: Process p = new Process(); p.StartInfo = new ProcessStartInfo(); p.StartInfo.FileName = "java.exe"; p.StartInfo.Arguments = @"> c:\Temp\test.log 2>&1"; p.StartInfo.UseShellExecute = true; p.Start(); The similar code works without problems with Python. Reading the output streams programmatically doesn't seem a preferable solution in my case because there will be a bunch of processes launched by my application.

    Read the article

  • check properties of two objects for changes

    - by k-hoffmann
    Hi, i have to develop a mechanism to check two object properties for changes. All properties which are needed to check are marked with an attribute. Atm i - read all properties from acutal object via linq - read the corresponding property from old object - fill an own object with the two properties (old and new value) In Code the call to the workerclass looks like this public void CreateHistoryMap(BaseEntity actual, BaseEntity old) { CreateHistoryMap(actualEntity, oldEntity) .ForEach(mapEntry => CreateHistoryEntry(mapEntry), mapEntry => IfChangesDetected(mapEntry)); } CreateHistoryMap builds up the HistoryMapEntry which contains the two properties. CreateHistoryEntry build up the object which is saved to database, the IfChangesDetected check the object for changes. I have to handle own special application types to generate history values to database (like concatinating list values and so on). My problem is now, that i have to read the values of the properties twice - for change detection - and for the concreate CreateHistoryEntry How can i eliminate this problem or how can i implement the change tracking scenario with the nice c# 3.5 features? Thanks a lot.

    Read the article

  • PHP strpos preg_match

    - by usurper
    Hi, I want to copy a substring of a string using PHP. The regex for the first pattern is /\d\|\d\w0:/ The regex for the second pattern is: /\d\w\w\d+:\s-\s:/ Is it possible combining preg_match with strpos to get the exact positions from start to end and then copy it with substr( $string, $firstPos,$secPos ) ?

    Read the article

  • Drupal: How to make a fieldset dependent using CTools

    - by far
    Hello, I am using Ctools Dependency to make a fieldset hideable. This is part of my code: $form['profile-status'] = array( '#type' => 'radios', '#title' => '', '#options' => array( 'new' => t('Create a new profile.'), 'select' => t('Use an existing profile.'), ), ); $form['select'] = array( '#type' => 'select', '#title' => t('Select a profile'), '#options' => $options, '#process' => array('ctools_dependent_process'), '#dependency' => array('radio:profile-status' => array('select')), ); $form['profile-properties'] = array( '#type' => 'fieldset', '#title' => t('View the profile'), '#process' => array('ctools_dependent_process'), '#dependency' => array('radio:profile-status' => array('select')), '#input' => true, ); In snippet above, There are two elements, one select and one fieldset. Both have #process and #dependency parameters and both point to one field for dependent value. Problem is elements like select or textfield can be hidden easily but it does not work for fieldset. In this support request page, CTools creator has mentioned that '#input' = true is a work around. As you see I added it to code, but it does not work as well. Do you have any suggestion?

    Read the article

  • ORB forwards to a wrong location

    - by dave-keiture
    I have an orbd started at a virtual host (with the IP A), with some remote object registered. Box that hosts virual boxes has IP B. When client tries to connect to the ORB at A to acquire the NamingContext, ORB replies with a LocationForward message poiniting to host B and port 1049 (like if another ORB would be started at that host). NamingContext is returned successfully, but obviously I'm not able to acqure the objects, registered at the NamingContext (at ORB hosted at A) by the name. Could anyone please explain what's happening? How can I access the orb hosted at A remotely? Thanks in advance.

    Read the article

  • LINQ problem on remote machine

    - by HaMMeR
    I am using LINQ expressions in my code like this var obj = Collection.Single(collection = (collection.ShortName.Equals("AAA"))); The problem is that this line works fine for me, no problems. But when I upload the same executable to some remote machine with same 32 bit Windows XP. The code execution is just stopping at this line of source. Can anyone help me.

    Read the article

  • calling jQuery function from Flash

    - by Cris
    Hi, i have a problem only with IE: if i try to invoke a JS function from Flash using ExternalInterface i cannot get result if Flash is embedded inside a JQuery dialog; when i make the same thing from a normal html page it runs. How can i invoke ExternalInterface.call to run a function even if flash is inside a dialog? Thanks in advance C.

    Read the article

  • Question about Domain Forwarding [beginner]

    - by Jack W-H
    Hello folks Just a quick beginner's question here. I have a webapp located at domainxyz.com, and it generates short URLs for long posts automatically - so rather than visit domainxyz.com/reallylongpostnamehere I can just type domainxyz.com/a5c and be taken there automatically. However, I've bought a shorter domain name - short.com - and I want to be able to visit short.com/a5c and be redirected (or forwarded) to domainxyz.com/a5c. Or short.com/7f0 -- domainxyz.com/7f0. This way, although it seems a tad illogical it saves me setting up another hosting account on short.com to deal with the URL shortening. Is this possible? I realise you can forward domains, but, can you forward domains AND forward the URL segments? Thanks! Jack

    Read the article

  • Zend remove anchor text in url redirect

    - by user351785
    I have a form that is using an anchor name as it's action so that when the form is submitted it is it goes straight back to the form (for example 'www.domain.com/page#contact-form). The idea is if there are any errors then it'll go straight to the form (that's near the bottom of the page) so you can see the errors and continue filling in the form. If the form is valid, I want it to redirect to another page (for example www.domain.com/another-page). The problem is that the redirect url still has the anchor text in the url (in the above example it is www.domain.com/another-page#contact-form). I am using $this->_helper->redirector->goToRouteAndExit(array(), 'another-page', true); to goto the another-page route. I have tried setting the url specifically but that doesn't fix it either. How do I redirect to another page and remove that anchor text from the url?

    Read the article

  • Drupal: cusomizing modules question

    - by Patrick
    hi, I've a question about how to customize drupal modules avoiding hacks. Let's say I've downloaded Lightbox2 module and I want to change the javascript file to display differently my lightbox. At the moment I'm modifying the Lightbox2 module, so I cannot update it anymore, so I know it is not the best practice. I was wondering if I can customize the javascript file of this module with a hook, and how. Thanks

    Read the article

  • Search images using c# in local images folder

    - by np
    We have a images folder which has about a million images in it. We need to write a program which would fetch the image based upon a keyword that is entered by the user. We need to match the file names while searching to find the right image. Looking for any suggestions. Thanks N

    Read the article

  • comparing strings in PostgreSQL

    - by binaryLV
    Hello! Is there any way in PostgreSQL to convert UTF-8 characters to "similar" ASCII characters? String glažškunu rukiši would have to be converted to glazskunu rukisi. UTF-8 text is not in some specific language, it might be in Latvian, Russian, English, Italian or any other language. This is needed for using in where clause, so it might be just "comparing strings" rather than "converting strings". I tried using convert, but it does not give desired results (e.g., select convert('A', 'utf8', 'sql_ascii') gives \304\200, not A). Database is created with: ENCODING = 'UTF8' LC_COLLATE = 'Latvian_Latvia.1257' LC_CTYPE = 'Latvian_Latvia.1257' These params may be changed, if necessary.

    Read the article

  • How to bind "OnDataBound" event of "DropDownList" in declarative syntax to a static method in some o

    - by Puneet Dudeja
    How to bind "OnDataBound" event of "DropDownList" in declarative syntax to a static method in some other class ? e.g <asp:DropDownList runat="server" id="d1" OnDataBound="SomeOtherClassThanThisPage.StaticMethod"></asp:DropDownList> This will give the error, "Page does not contain a definition for SomeOtherClassThanThisPage. Is this possible to do it like this or it be done in the Code Behind only ?

    Read the article

< Previous Page | 30 31 32 33 34 35 36 37 38 39 40 41  | Next Page >