tag:blogger.com,1999:blog-14511296.comments2014-03-27T17:43:58.312+01:00thought-trackerlajoshttp://www.blogger.com/profile/10084204479295620888noreply@blogger.comBlogger17125tag:blogger.com,1999:blog-14511296.post-19856118130895238022012-01-28T14:55:18.020+01:002012-01-28T14:55:18.020+01:00Very interesting blog, thanksVery interesting blog, <a href="http://torrenttracker.co.cc/" rel="nofollow">thanks</a>risiojahttps://www.blogger.com/profile/14794821254750015344noreply@blogger.comtag:blogger.com,1999:blog-14511296.post-2515264410315847442010-11-26T07:39:50.172+01:002010-11-26T07:39:50.172+01:00Hello,
Probably it is too late to comment.But you...Hello,<br /><br />Probably it is too late to comment.But your solution has same issue similar to the decorator pattern as mentioned in the original post by Tom i.e you need to write Seperate memoizer for each of the new functions IFunc2, IFunc3 etc.I think that's why in Original post Tom went with Dynamic proxies.krishnanoreply@blogger.comtag:blogger.com,1999:blog-14511296.post-86088328733077320092009-08-02T18:53:38.048+02:002009-08-02T18:53:38.048+02:00CRE Express podcast about distributed version conr...CRE Express podcast about distributed version conrtol in german available at http://chaosradio.ccc.de/cre130.htmlandizottmannhttps://www.blogger.com/profile/02810063000422580081noreply@blogger.comtag:blogger.com,1999:blog-14511296.post-31749404565030689042009-07-26T20:04:03.521+02:002009-07-26T20:04:03.521+02:00Another good scenario for hg might be, when QA is ...Another good scenario for hg might be, when QA is to develop their system tests for a new or changed feature.AndiZonoreply@blogger.comtag:blogger.com,1999:blog-14511296.post-71928873205862143572009-02-20T23:51:00.000+01:002009-02-20T23:51:00.000+01:00Hello, Andrei.Indeed, I was wrong about (1). And a...Hello, Andrei.<BR/>Indeed, I was wrong about (1). And as for closures, I totally agree.ansthttps://www.blogger.com/profile/00093039241635962472noreply@blogger.comtag:blogger.com,1999:blog-14511296.post-49254544186141681322009-02-20T22:36:00.000+01:002009-02-20T22:36:00.000+01:00Hi anst,thank your for your comment. I'm glad ...Hi anst,<BR/><BR/>thank your for your comment. I'm glad that somebody reads those entries.<BR/><BR/>Regarding (1), I'll have to disagree with you: the dynamic proxy acts as a wrapper implementation, and neither my proposal nor Tom White's can optimize a naive recursive fib()<BR/>public class Fib implements IFib {<BR/>____public int apply(int n) {<BR/>________assert n > 0;<BR/>________if (n == 0) return 0;<BR/>________if (n == 1) return 1;<BR/>________return apply(n-1) + apply(n-2);<BR/>____}<BR/>}<BR/>The proxy can intercept only external calls, it has no access to the internal calls. (in ruby that could be easily solved, in java it is more difficult to instrument that)<BR/><BR/>Regarding (2) you & Tom White are perfectly right, nobody we'll refactor legacy code to funcs. Given an IoC container, that memoizer could be a very good solution, (caching strategies included)<BR/><BR/>I probably failed to stress the fact that I wish for more solutions to be more generic, to extract from these ObjectFactoryManagerHandler boiler-plate code higher-level abstractions. <BR/><BR/>With an advanced (Hindley–Milner) type inference (eg. F#/scala) and closures (or even better lambda expressions) algorithms could be expressed in a much more elegant manner, making a lot of boiler-plate-adapters obsolete.<BR/><BR/>I wish for these funcs<BR/>http://www.infoq.com/presentations/gafter-jvm-closures<BR/>(c# has them since 2.0)Andrei Pamulahttps://www.blogger.com/profile/16726342438441009325noreply@blogger.comtag:blogger.com,1999:blog-14511296.post-59381096676087914112009-02-20T10:52:00.000+01:002009-02-20T10:52:00.000+01:00I think Tom White's version has two advantages ove...I think Tom White's version has two advantages over what you're proposing.<BR/>1) From the "academic" point of view, it would be nice if a recursive function memoized its results all the way through to the trivial case upon a call (like you call fib(10) with a naive recursive fib() impl and have fib(9)..fib(1) all memoized). His approach does it, yours doesn't.<BR/>2) From the "enterprisey" point of view, the proxy solution allows to leave the legacy code almost untouched. What accepted an object of type 'SophisticatedObjectFactoryManager' (whatever that is and does) will remain untouched or say automatically refactored to accept 'ISophisticatedObjectFactoryManager', an interface; and the same with what is returned. Nobody will bother with introducing IFunc1 into any big real-world system and making their code a pile of 'f.apply(a)'.<BR/>P.S.: wrote it and noticed the post was from almost a year ago.ansthttps://www.blogger.com/profile/00093039241635962472noreply@blogger.comtag:blogger.com,1999:blog-14511296.post-23376935027490107892008-10-10T10:29:00.000+02:002008-10-10T10:29:00.000+02:00That's right :) "less code less maintenance"AydoThat's right :) "less code less maintenance"<BR/><BR/>AydoAydohttps://www.blogger.com/profile/13488296524309121120noreply@blogger.comtag:blogger.com,1999:blog-14511296.post-28848783452305414762008-08-19T19:05:00.000+02:002008-08-19T19:05:00.000+02:00A couple of points. I don't believe there was a ru...A couple of points. I don't believe there was a rule <I>against</I> using the built-in foldLeft or foldRight. As to the implementation of maximum on an empty list, it seems to me that throwing an error when calling maximum on an empty list is a perfectly reasonable thing to do, like calling head or reduceRight on an empty listGarrett Rowehttps://www.blogger.com/profile/06362501128519741915noreply@blogger.comtag:blogger.com,1999:blog-14511296.post-87654786146194135622008-01-17T12:53:00.000+01:002008-01-17T12:53:00.000+01:00i hope gobolinux becomes more populari hope gobolinux becomes more popularAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-14511296.post-51206992987528123412007-06-29T16:10:00.000+02:002007-06-29T16:10:00.000+02:00Wait a minute! Why on earth would you use the call...Wait a minute! Why on earth would you use the calls to the _service as an argument for your logger calls?<BR/>You don't want to DoSomethingElse when Debugging is not disabled?<BR/>That looks like a very flexible service to me ;-)<BR/>Anyway I agree with you: Every class that needs a logger should advertise that need. Preferably in its constructor. <BR/>Using a delegate to defer evaluation is a nice idea. <BR/>Instead of a macro you could use ConditionalAttribute from the System.Diagnostics namespace.Ralfhttps://www.blogger.com/profile/12069459854043020942noreply@blogger.comtag:blogger.com,1999:blog-14511296.post-89179403707732910442007-06-29T15:43:00.000+02:002007-06-29T15:43:00.000+02:00Yeah, sure! If the dimwits at JetBrains were worki...Yeah, sure! If the dimwits at JetBrains were working on a real live project with a real live architect they would have made R# mature enough to cope with the Big Ball of Mud you as a developer have to cope with. Ha, Ha!Ralfhttps://www.blogger.com/profile/12069459854043020942noreply@blogger.comtag:blogger.com,1999:blog-14511296.post-4571336710118051132007-06-19T14:34:00.000+02:002007-06-19T14:34:00.000+02:00Hi Robert, thanks for the contribution. It looks v...Hi Robert, <BR/>thanks for the contribution. It looks <B>very</B> clean.Andrei Pamulahttps://www.blogger.com/profile/16726342438441009325noreply@blogger.comtag:blogger.com,1999:blog-14511296.post-33775361753367225882007-06-15T20:43:00.000+02:002007-06-15T20:43:00.000+02:00Nice implementation. While I like the use of activ...Nice implementation. While I like the use of active patterns for a very simple implementation like this they probably add more overhead than they give benefit.<BR/><BR/>Also I think the #light which makes F# whitespace senative is great. Here's my effort:<BR/><BR/>#light<BR/><BR/>for x in [1 .. 20] do<BR/> match x with<BR/> | x when x % 15 = 0 -> printfn "fizzbuzz"<BR/> | x when x % 3 = 0 -> printfn "fizz"<BR/> | x when x % 5 = 0 -> printfn "buzz"<BR/> | x -> printfn "%i" xAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-14511296.post-1159328842536312512006-09-27T05:47:00.000+02:002006-09-27T05:47:00.000+02:00Thanks for reading, and thanks for the wiki links....Thanks for reading, and thanks for the wiki links. It just goes to show that I don't have a single original idea. ;-)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-14511296.post-1131373172153206422005-11-07T15:19:00.000+01:002005-11-07T15:19:00.000+01:00Take two on the same topic: Software and the Concu...Take two on the same topic: <A HREF="http://acmqueue.com/modules.php?name=Content&pa=showpage&pid=332" REL="nofollow">Software and the Concurrency Revolution</A>lajoshttps://www.blogger.com/profile/10084204479295620888noreply@blogger.comtag:blogger.com,1999:blog-14511296.post-1121420370632539622005-07-15T11:39:00.000+02:002005-07-15T11:39:00.000+02:00deprecated can be "tagged" with withannotations (C...deprecated can be "tagged" with with<BR/>annotations (C# Attributes)Andrei Pamulahttps://www.blogger.com/profile/16726342438441009325noreply@blogger.com