Search Results

Search found 3614 results on 145 pages for 'bao le'.

Page 63/145 | < Previous Page | 59 60 61 62 63 64 65 66 67 68 69 70  | Next Page >

  • Ramda : une bibliothèque pour faire de la programmation fonctionnelle avec JavaScript, open source, elle inclut la curryfication automatique

    Ramda : une bibliothèque pour faire de la programmation fonctionnelle avec JavaScript Disponible en open source, elle inclut la curryfication automatique Les langages fonctionnels auraient-ils le vent en poupe ? C'est peut être le cas et certains développeurs repensent leurs applications à l'image d'IMVU qui a réécrit une partie du back-end de son application en langage Haskell, d'autres encore penchent pour le développement de bibliothèques dédiées à la programmation fonctionnelle en se basant...

    Read the article

  • BlackBerry 10 : RIM prévoit lancer 4 modèles de smartphones et une tablette en 2013, la RoadMap du constructeur dévoilée

    BlackBerry 10 : RIM prévoit lancer 4 modèles de smartphones et une tablette en 2013 la RoadMap du constructeur dévoilée La dernière carte dont dispose probablement RIM pour sortir du gouffre dans lequel il se trouve est BlackBerry 10, l'OS sur lequel le constructeur canadien repose tous ses espoirs. Le site spécialisé BlackberryOS.com a obtenu des informations d'une RoadMap de RIM, qui prévoit lancer plusieurs dispositifs en 2013. [IMG]http://rdonfack.developpez.com/rim-roadmap2013.jpg[/IMG] Le constructeur canadien doit marquer un gros coup, et pour cela, la firme envisage de commercialiser au moins quatre nouveaux modèles de smartphones BlackBerry au cour...

    Read the article

  • Pas de BlackBerry 10 pour la tablette PlayBook contrairement aux promesses, BlackBerry affiche des résultats mitigés au premier trimestre 2013

    Pas de BlackBerry 10 pour la tablette PlayBook Contrairement aux promesses, BlackBerry affiche des résultats mitigés au premier trimestreSelon le point de vue, on dira que BlackBerry (ex-RIM) va mieux, ou qu'il va moins mal mais que ce n'est toujours pas cela.En affichant une perte de 84 millions de dollars, l'entreprise canadienne n'a en tout cas pas rassuré les analystes.Les résultats de ce premier trimestre étaient particulièrement attendus puisqu'ils traduisent, pour la première fois de manière concrète, l'accueil fait par le public au nouveau système BlackBerry 10.Problème, le constructeur n'a écoulé que 2.7 millions de Z10, malgré les campagnes de publicité et les opérations de co...

    Read the article

  • MemSQL : un SGBD résidant en mémoire, 30 fois plus rapide que les systèmes existants, développé par des anciens de Facebook

    MemSQL : un SGBD résidant en mémoire 30 fois plus rapide que les systèmes existants, développé par des anciens de Facebook Deux anciens développeurs de Facebook ont créé un nouveau gestionnaire de bases de données qui serait, selon ceux-ci, le plus rapide du monde. Baptisé MemSQL, le système s'appuie essentiellement sur le stockage des données en mémoire afin de réduire le temps de latence en évitant les lectures et écritures sur les disques durs. Cette caractéristique permet au SGBD d'après ses créateurs, d'être 30 fois plus rapide que les SGBD standards. Une vidéo de présentation a été publiée par ses auteurs, fournissant une démonstration des performances de MemSQL par rapport ...

    Read the article

  • CyanogenMod 11 M7 disponible et apporte Android 4.4.2, les Nightlies passent à Android 4.4.3 avant une sortie finale prévue pour juillet

    CyanogenMod 11 M7 disponible et apporte Android 4.4.2 les Nightlies passent à Android 4.4.3 avant une sortie finale prévue pour juilletEn 2008, un hacker fan de Linux au pseudonyme de JesusFreke, développa pour le HTC Dream les prémices d'un système d'exploitation mobile qui allait devenir par la suite une ROM non officielle (CyanogenMod) du populaire Android.CyanogenMod a au fil du temps gagné le coeur d'un nombre important d'utilisateurs d'Android, qui ont trouvé en l'OS le moyen de garder la...

    Read the article

  • Micro Focus intègre Visual COBOL à Visual Studio 2012 et lance la version 11 de Borland DevPartner, son débogueur optimisée pour l'EDI

    Micro Focus intègre Visual COBOL à Visual Studio 2012 Et lance la version 11 de Borland DevPartner optimisée pour l'EDI L'éditeur Micro Focus vient d'annoncer l'intégration de sa solution Visual Cobol au prochain EDI de Microsoft. Une nouveauté qui permet de réutiliser ou de réaffecter les applications COBOL dans d'autres langages et dans d'autres environnements de développement tels que C#, Visual Basic ou ASP.NET. Nouveauté intéressant, cette version permet le déploiement dans le Cloud et des capacités de travail collaboratif renforcées. « Visual Studio 2012 améliore le processus de développement en permettant aux équipes de travail...

    Read the article

  • Google met fin au support d'Internet Explorer 9 pour ses applications, suite à la sortie d'IE 11

    Google met fin au support d'Internet Explorer 9 pour ses applications suite à la sortie d'IE 11Google a annoncé qu'il ne prendra plus en charge le navigateur Internet Explorer 9 pour ses services Web et Cloud Google Apps.Dans un billet de blog, l'éditeur fait savoir qu'il mettra fin au support du navigateur pour Google Apps, suite à la publication de Windows 8.1 avec le nouveau Internet Explorer 11 le 17 octobre dernier.Les utilisateurs d'IE9 pourront rencontrer des problèmes de compatibilité avec...

    Read the article

  • La Maison-Blanche fait de l'open source et publie sa première application sur GitHub, We The People est sous Drupal et MongoDB

    La Maison-Blanche fait de l'open source Et publie sa première application sur GitHub, We The People est sous Drupal et MongoDB C'est une première. La Maison-Blanche vient de distribuer la première application open source créée par un gouvernement, disponible dans son dépôt GitHub officiel. Il s'agit d'une application permettant à tout citoyen de créer, voter et faire voter une pétition. C'est le code même qui propulse l'application « We The People » (nous le peuple) qu'on retrouve sur le site de la Maison-Blanche. C'est en fait la concrétisation d'un engagement pris par le président Barack Obama en septembre 2011 : « Parmi nos engagements, nous sommes en train de lancer un out...

    Read the article

  • Microsoft met à jour Windows App Studio, la plateforme de développement Web en ligne compte désormais 1,1 million d'utilisateurs

    Microsoft met à jour Windows App Studio La plateforme de développement Web en ligne compte désormais 1,1 million d'utilisateursWindows App Studio, la plateforme de développement en ligne de Microsoft évolue encore pour répondre aux besoins de ses utilisateurs.Microsoft vient d'annoncer le déploiement d'une nouvelle mise à jour qui ajoute des nouvelles fonctionnalités pour faciliter le déploiement d'applications Windows et Windows Phone sur le store.Désormais, après la création de votre application,...

    Read the article

  • Android : Google veut améliorer la qualité des applications pour tablettes, l'éditeur donne ses consignes pour cibler les écrans larges

    Google veut améliorer la qualité des applications Android pour tablettes l'éditeur donne ses consignes pour mieux cibler les écrans larges Contrairement à l'App Store d'Apple qui distingue clairement les applications pour iPhone de celles destinées à l'iPad, l'écosystème de Google permet la publication d'une seule application pouvant fonctionner à la fois sur tablettes et smartphones. L'essor d'Android dans le domaine du mobile étant plus considérable que sur le marché des tablettes, les développeurs créent des applications pour mobile avant d'y apporter quelques améliorations pour le support des tablettes. Conséquence : Google Play se retrouve avec des applications maladro...

    Read the article

  • Apple veut tripler la condamnation infligée à Samsung pour infraction « intentionnelle » de brevets sur ses smartphones sous Android

    Le procès débuté aux États-Unis il y a bientôt un mois entre Apple et Samsung s'est terminé cette nuit. Dans cette guerre des brevets opposant les deux géants de la téléphonie, ce ne sont pas moins de 100 pages d'instructions qu'ont dû examiner les 9 jurés du tribunal fédéral de Californie. Samsung a été condamné à verser plus d'1 milliard (1 049 343 540) de dollars à Apple pour avoir violé une multitude de brevets. Le tribunal a par ailleurs jugé que certaines violations ont été réalisées volontairement et en toute connaissance de cause par Samsung. Cette décision concerne d'une part les brevets du design des appareils mais également des brevets logiciels comme le rebond au scroll, ou encore le zoom à deux doigts. Ce jugement ouvre donc la voie à Apple pour at...

    Read the article

  • Les Bouches-du-Rhône sponsorisent des développeurs pour promouvoir l'open data : avez-vous proposé votre application ?

    Les Bouches-du-Rhône lancent une opération de sponsoring pour les développeurs d'applications et de sites web Afin de promouvoir l'open-data et la région, Developpez.com partenaire Depuis le mois d'avril, l'association Bouches-du-Rhône Tourisme a rejoint la démarche Open-data en ouvrant son portail et en libérant une centaine de jeux de données liées au tourisme dans le département. Toutes les informations détenues par l'association ont été rendues disponibles et exploitables par les développeurs, les scientifiques, les associations, les étudiants et les entreprises. Bref, par tout le monde. On y trouve par exemple...

    Read the article

  • Android : découverte d'une nouvelle vulnérabilité dans l'OS, les applications des constructeurs seraient la cause de plusieurs failles

    Android: une vulnérabilité permet à un hacker d'insérer un malware dans un fichier APK les applications des constructeurs seraient la cause de plusieurs faillesD'après des statistiques, Android est le système d'exploitation mobile le plus installé au monde. Une célébrité qui a fait de cette plateforme une cible de choix pour les hackers de tout genre.Cette fois-ci encore, le mécanisme de vérification de l'intégrité des fichiers APK de la plateforme mobile de Google est mise en cause. La nouvelle...

    Read the article

  • Pourquoi les entreprises passent-elles par des cabinets de recrutement lorsqu'elles ont besoin de développeurs ? Pour quels intérêts ?

    Pourquoi les boites ne publient pas des annonces détaillées des jobs de développeur qu'elles proposent au lieu de passer par des cabinets de recrutement ou même des SSII alors que le projet dure plus d'un an ?Je suis convaincu que dans 99% des cas c'est ridicule de passer par un cabinet de recrutement (déjà ça leur coûte au moins 1500 euros à payer quand le nouvel employé a terminé sa période d'essai) et que le principal effet en plus de la perte nette sur salaire (c'est 1500 euros de moins sur...

    Read the article

  • Les Bouches-du-Rhône lancent une opération de sponsoring de développeurs pour promouvoir l'open-data et la région

    Les Bouches-du-Rhône lancent une opération de sponsoring pour les développeurs d'applications et de sites web Afin de promouvoir l'open-data et la région, Developpez.com partenaire Depuis le mois d'avril, l'association Bouches-du-Rhône Tourisme a rejoint la démarche Open-data en ouvrant son portail et en libérant une centaine de jeux de données liées au tourisme dans le département. Toutes les informations détenues par l'association ont été rendues disponibles et exploitables par les développeurs, les scientifiques, les associations, les étudiants et les entreprises. Bref, par tout le monde. On y trouve par...

    Read the article

  • Hortis, principal sponsor du "DevDay for iPhone" du 9 juin à Genève vous offre 50% de réduction

    Le mercredi 09 Juin 2010 se tiendra à Genève le "DevDay for iPhone" Sachez que Trifork, Adrian Komesmaczewski et Hortis ont décidé de promouvoir la dernière semaine d'inscription au "DevDay for iPhone" de Genève en vous offrant 50% de réduction. Pour profiter de cette offre exceptionnelle, il vous suffit d'indiquer le code promotionnel finalprice sur le formulaire d'inscription en ligne http://www.developpez.com/redirect/97 Si vous comptez vous y inscrire, pensez à répondre à la question "Where did you hear about DevDay for iPhone ?" que vous l'avez connu grâce à Developpez.com.

    Read the article

  • JavaOne 2012 : Oracle présente la spécification JSR 353, l'API Java pour la manipulation avec souplesse du format JSON

    JavaOne 2012 : Oracle présente la spécification JSR 353 l'API Java pour rendre la manipulation des données JSON plus propre et cohérente JavaOne 2012 s'est achevé hier. L'événement Java le plus important de l'année a levé le voile sur un nombre impressionnant de nouveautés, innovations et ambitions pour l'écosystème Java. Oracle pendant ses sessions a présenté sa feuille de route pour le langage et les points sur lesquels l'entreprise travaille actuellement pour la prochaine version de Java, dont l'intégration des expressions lambda, du moteur JavaScript Nashorn, les annotations, la nouvelle API « date and time » et bien ...

    Read the article

  • Les tablettes vont-elles réussir leur percée en entreprise ? 38 % des professionnels prêts à remplacer leur notebook par un de ces appareils

    Les tablettes vont-elles réussir leur percée en entreprise ? 38% des professionnels serait prêt à remplacer leur notebook par l'un de ces appareils C'est un scénario que plusieurs experts envisagent depuis des mois, et c'est aussi une possibilité que Steve Ballmer réfute : les tablettes pourraient remplacer les ordinateurs et les netbooks. A moins d'être sourd et aveugle, tout le monde a constaté le succès phénoménal qu'ont rencontré ces appareils. La société de conseil ChangeWave s'est penchée sur la question, mais depuis le point de vue des professionnels. Elle a ainsi interrogé 1641 employés à propos de leur intérêt pour les tablettes, dans le cadre de leurs fonctions. Et les résultats sont clairs :...

    Read the article

  • Writing catch block with cleanup operations in Java ...

    - by kedarmhaswade
    I was not able to find any advise on catch blocks in Java that involve some cleanup operations which themselves could throw exceptions. The classic example is that of stream.close() which we usually call in the finally clause and if that throws an exception, we either ignore it by calling it in a try-catch block or declare it to be rethrown. But in general, how do I handle cases like: public void doIt() throws ApiException { //ApiException is my "higher level" exception try { doLower(); } catch(Exception le) { doCleanup(); //this throws exception too which I can't communicate to caller throw new ApiException(le); } } I could do: catch(Exception le) { try { doCleanup(); } catch(Exception e) { //ignore? //log? } throw new ApiException(le); //I must throw le } But that means I will have to do some log analysis to understand why cleanup failed. If I did: catch(Exception le) { try { doCleanup(); } catch(Exception e) { throw new ApiException(e); } It results in losing the le that got me here in the catch block in the fist place. What are some of the idioms people use here? Declare the lower level exceptions in throws clause? Ignore the exceptions during cleanup operation?

    Read the article

  • Displaying an image on a LED matrix with a Netduino

    - by Bertrand Le Roy
    In the previous post, we’ve been flipping bits manually on three ports of the Netduino to simulate the data, clock and latch pins that a shift register expected. We did all that in order to control one line of a LED matrix and create a simple Knight Rider effect. It was rightly pointed out in the comments that the Netduino has built-in knowledge of the sort of serial protocol that this shift register understands through a feature called SPI. That will of course make our code a whole lot simpler, but it will also make it a whole lot faster: writing to the Netduino ports is actually not that fast, whereas SPI is very, very fast. Unfortunately, the Netduino documentation for SPI is severely lacking. Instead, we’ve been reliably using the documentation for the Fez, another .NET microcontroller. To send data through SPI, we’ll just need  to move a few wires around and update the code. SPI uses pin D11 for writing, pin D12 for reading (which we won’t do) and pin D13 for the clock. The latch pin is a parameter that can be set by the user. This is very close to the wiring we had before (data on D11, clock on D12 and latch on D13). We just have to move the latch from D13 to D10, and the clock from D12 to D13. The code that controls the shift register has slimmed down considerably with that change. Here is the new version, which I invite you to compare with what we had before: public class ShiftRegister74HC595 { protected SPI Spi; public ShiftRegister74HC595(Cpu.Pin latchPin) : this(latchPin, SPI.SPI_module.SPI1) { } public ShiftRegister74HC595(Cpu.Pin latchPin, SPI.SPI_module spiModule) { var spiConfig = new SPI.Configuration( SPI_mod: spiModule, ChipSelect_Port: latchPin, ChipSelect_ActiveState: false, ChipSelect_SetupTime: 0, ChipSelect_HoldTime: 0, Clock_IdleState: false, Clock_Edge: true, Clock_RateKHz: 1000 ); Spi = new SPI(spiConfig); } public void Write(byte buffer) { Spi.Write(new[] {buffer}); } } All we have to do here is configure SPI. The write method couldn’t be any simpler. Everything is now handled in hardware by the Netduino. We set the frequency to 1MHz, which is largely sufficient for what we’ll be doing, but it could potentially go much higher. The shift register addresses the columns of the matrix. The rows are directly wired to ports D0 to D7 of the Netduino. The code writes to only one of those eight lines at a time, which will make it fast enough. The way an image is displayed is that we light the lines one after the other so fast that persistence of vision will give the illusion of a stable image: foreach (var bitmap in matrix.MatrixBitmap) { matrix.OnRow(row, bitmap, true); matrix.OnRow(row, bitmap, false); row++; } Now there is a twist here: we need to run this code as fast as possible in order to display the image with as little flicker as possible, but we’ll eventually have other things to do. In other words, we need the code driving the display to run in the background, except when we want to change what’s being displayed. Fortunately, the .NET Micro Framework supports multithreading. In our implementation, we’ve added an Initialize method that spins a new thread that is tied to the specific instance of the matrix it’s being called on. public LedMatrix Initialize() { DisplayThread = new Thread(() => DoDisplay(this)); DisplayThread.Start(); return this; } I quite like this way to spin a thread. As you may know, there is another, built-in way to contextualize a thread by passing an object into the Start method. For the method to work, the thread must have been constructed with a ParameterizedThreadStart delegate, which takes one parameter of type object. I like to use object as little as possible, so instead I’m constructing a closure with a Lambda, currying it with the current instance. This way, everything remains strongly-typed and there’s no casting to do. Note that this method would extend perfectly to several parameters. Of note as well is the return value of Initialize, a common technique to add some fluency to the API and enabling the matrix to be instantiated and initialized in a single line: using (var matrix = new LedMS88SR74HC595().Initialize()) The “using” in the previous line is because we have implemented IDisposable so that the matrix kills the thread and clears the display when the user code is done with it: public void Dispose() { Clear(); DisplayThread.Abort(); } Thanks to the multi-threaded version of the matrix driver class, we can treat the display as a simple bitmap with a very synchronous programming model: matrix.Set(someimage); while (button.Read()) { Thread.Sleep(10); } Here, the call into Set returns immediately and from the moment the bitmap is set, the background display thread will constantly continue refreshing no matter what happens in the main thread. That enables us to wait or read a button’s port on the main thread knowing that the current image will continue displaying unperturbed and without requiring manual refreshing. We’ve effectively hidden the implementation of the display behind a convenient, synchronous-looking API. Pretty neat, eh? Before I wrap up this post, I want to talk about one small caveat of using SPI rather than driving the shift register directly: when we got to the point where we could actually display images, we noticed that they were a mirror image of what we were sending in. Oh noes! Well, the reason for it is that SPI is sending the bits in a big-endian fashion, in other words backwards. Now sure you could fix that in software by writing some bit-level code to reverse the bits we’re sending in, but there is a far more efficient solution than that. We are doing hardware here, so we can simply reverse the order in which the outputs of the shift register are connected to the columns of the matrix. That’s switching 8 wires around once, as compared to doing bit operations every time we send a line to display. All right, so bringing it all together, here is the code we need to write to display two images in succession, separated by a press on the board’s button: var button = new InputPort(Pins.ONBOARD_SW1, false, Port.ResistorMode.Disabled); using (var matrix = new LedMS88SR74HC595().Initialize()) { // Oh, prototype is so sad! var sad = new byte[] { 0x66, 0x24, 0x00, 0x18, 0x00, 0x3C, 0x42, 0x81 }; DisplayAndWait(sad, matrix, button); // Let's make it smile! var smile = new byte[] { 0x42, 0x18, 0x18, 0x81, 0x7E, 0x3C, 0x18, 0x00 }; DisplayAndWait(smile, matrix, button); } And here is a video of the prototype running: The prototype in action I’ve added an artificial delay between the display of each row of the matrix to clearly show what’s otherwise happening very fast. This way, you can clearly see each of the two images being displayed line by line. Next time, we’ll do no hardware changes, focusing instead on building a nice programming model for the matrix, with sprites, text and hardware scrolling. Fun stuff. By the way, can any of my reader guess where we’re going with all that? The code for this prototype can be downloaded here: http://weblogs.asp.net/blogs/bleroy/Samples/NetduinoLedMatrixDriver.zip

    Read the article

  • Ubuntu not detecting second monitor

    - by Julian Le Saux
    I'm running Ubuntu 12.04 on a Lenovo x61s Thinkpad. As the screen's rather small and I want to do some video editing, I thought I'd plug in a monitor and use that. The monitor is Relisys JM777 (quite old). When I plug it into my other computer, which is running Windows 7, it immediately mirrors the display; but when plugged into the Lenovo the monitor screen remains blank. The graphics card on the Lenovo is a "VGA compatible controller" according to SysInfo. Anybody got any suggestions? I'm quite new to Linux, so simple explanations would be greatly appreciated. The contents of my Xorg.0.log file can be seen at http://paste.ubuntu.com/1009855/ .

    Read the article

  • FluentPath: a fluent wrapper around System.IO

    - by Bertrand Le Roy
    .NET is now more than eight years old, and some of its APIs got old with more grace than others. System.IO in particular has always been a little awkward. It’s mostly static method calls (Path.*, Directory.*, etc.) and some stateful classes (DirectoryInfo, FileInfo). In these APIs, paths are plain strings. Since .NET v1, lots of good things happened to C#: lambda expressions, extension methods, optional parameters to name just a few. Outside of .NET, other interesting things happened as well. For example, you might have heard about this JavaScript library that had some success introducing a fluent API to handle the hierarchical structure of the HTML DOM. You know? jQuery. Knowing all that, every time I need to use the stuff in System.IO, I cringe. So I thought I’d just build a more modern wrapper around it. I used a fluent API based on an essentially immutable Path type and an enumeration of such path objects. To achieve the fluent style, a healthy dose of lambda expressions is being used to act on the objects. Without further ado, here’s an example of what you can do with the new API. In that example, I’m using a Media Center extension that wants all video files to be in their own folder. For that, I need a small tool that creates directories for each video file and moves the files in there. Here’s the code for it: Path.Get(args[0]) .Select(p => p.Extension == ".avi" || p.Extension == ".m4v" || p.Extension == ".wmv" || p.Extension == ".mp4" || p.Extension == ".dvr-ms" || p.Extension == ".mpg" || p.Extension == ".mkv") .CreateDirectory(p => p.Parent .Combine(p.FileNameWithoutExtension)) .Previous() .Move(p => p.Parent .Combine(p.FileNameWithoutExtension) .Combine(p.FileName)); This code creates a Path object pointing at the path pointed to by the first command line argument of my executable. It then selects all video files. After that, it creates directories that have the same names as each of the files, but without their extension. The result of that operation is the set of created directories. We can now get back to the previous set using the Previous method, and finally we can move each of the files in the set to the corresponding freshly created directory, whose name is the combination of the parent directory and the filename without extension. The new fluent path library covers a fair part of what’s in System.IO in a single, convenient API. Check it out, I hope you’ll enjoy it. Suggestions are more than welcome. For example, should I make this its own project on CodePlex or is this informal style just OK? Anything missing that you’d like to see? Is there a specific example you’d like to see expressed with the new API? Bugs? The code can be downloaded from here (this is under a new BSD license): http://weblogs.asp.net/blogs/bleroy/Samples/FluentPath.zip

    Read the article

  • Unity3d Gravity script issues

    - by Joseph Le Brech
    I'm try this script out http://wiki.unity3d.com/index.php/Gravity and I'm having some issues with it (it seemed to work when I tried it with an old version of unity) the first issue is of collision, the objects (in my case spheres) will stick into each other rather than just touch. and the second is that when the objects collide one of the objects with continue it's trajectory. I'm thinking of rewriting the script from scratch unless someone can explain what's wrong with the script that i've got.

    Read the article

  • RSS feeds in Orchard

    - by Bertrand Le Roy
    When we added RSS to Orchard, we wanted to make it easy for any module to expose any contents as a feed. We also wanted the rendering of the feed to be handled by Orchard in order to minimize the amount of work from the module developer. A typical example of such feed exposition is of course blog feeds. We have an IFeedManager interface for which you can get the built-in implementation through dependency injection. Look at the BlogController constructor for an example: public BlogController( IOrchardServices services, IBlogService blogService, IBlogSlugConstraint blogSlugConstraint, IFeedManager feedManager, RouteCollection routeCollection) { If you look a little further in that same controller, in the Item action, you’ll see a call to the Register method of the feed manager: _feedManager.Register(blog); This in reality is a call into an extension method that is specialized for blogs, but we could have made the two calls to the actual generic Register directly in the action instead, that is just an implementation detail: feedManager.Register(blog.Name, "rss", new RouteValueDictionary { { "containerid", blog.Id } }); feedManager.Register(blog.Name + " - Comments", "rss", new RouteValueDictionary { { "commentedoncontainer", blog.Id } }); What those two effective calls are doing is to register two feeds: one for the blog itself and one for the comments on the blog. For each call, the name of the feed is provided, then we have the type of feed (“rss”) and some values to be injected into the generic RSS route that will be used later to route the feed to the right providers. This is all you have to do to expose a new feed. If you’re only interested in exposing feeds, you can stop right there. If on the other hand you want to know what happens after that under the hood, carry on. What happens after that is that the feedmanager will take care of formatting the link tag for the feed (see FeedManager.GetRegisteredLinks). The GetRegisteredLinks method itself will be called from a specialized filter, FeedFilter. FeedFilter is an MVC filter and the event we’re interested in hooking into is OnResultExecuting, which happens after the controller action has returned an ActionResult and just before MVC executes that action result. In other words, our feed registration has already been called but the view is not yet rendered. Here’s the code for OnResultExecuting: model.Zones.AddAction("head:after", html => html.ViewContext.Writer.Write( _feedManager.GetRegisteredLinks(html))); This is another piece of code whose execution is differed. It is saying that whenever comes time to render the “head” zone, this code should be called right after. The code itself is rendering the link tags. As a result of all that, here’s what can be found in an Orchard blog’s head section: <link rel="alternate" type="application/rss+xml"     title="Tales from the Evil Empire"     href="/rss?containerid=5" /> <link rel="alternate" type="application/rss+xml"     title="Tales from the Evil Empire - Comments"     href="/rss?commentedoncontainer=5" /> The generic action that these two feeds point to is Index on FeedController. That controller has three important dependencies: an IFeedBuilderProvider, an IFeedQueryProvider and an IFeedItemProvider. Different implementations of these interfaces can provide different formats of feeds, such as RSS and Atom. The Match method enables each of the competing providers to provide a priority for themselves based on arbitrary criteria that can be found on the FeedContext. This means that a provider can be selected based not only on the desired format, but also on the nature of the objects being exposed as a feed or on something even more arbitrary such as the destination device (you could imagine for example giving shorter text only excerpts of posts on mobile devices, and full HTML on desktop). The key here is extensibility and dynamic competition and collaboration from unknown and loosely coupled parts. You’ll find this pattern pretty much everywhere in the Orchard architecture. The RssFeedBuilder implementation of IFeedBuilderProvider is also a regular controller with a Process action that builds a RssResult, which is itself a thin ActionResult wrapper around an XDocument. Let’s get back to the FeedController’s Index action. After having called into each known feed builder to get its priority on the currently requested feed, it will select the one with the highest priority. The next thing it needs to do is to actually fetch the data for the feed. This again is a collaborative effort from a priori unknown providers, the implementations of IFeedQueryProvider. There are several implementations by default in Orchard, the choice of which is again done through a Match method. ContainerFeedQuery for example chimes in when a “containerid” parameter is found in the context (see URL in the link tag above): public FeedQueryMatch Match(FeedContext context) { var containerIdValue = context.ValueProvider.GetValue("containerid"); if (containerIdValue == null) return null; return new FeedQueryMatch { FeedQuery = this, Priority = -5 }; } The actual work is done in the Execute method, which finds the right container content item in the Orchard database and adds elements for each of them. In other words, the feed query provider knows how to retrieve the list of content items to add to the feed. The last step is to translate each of the content items into feed entries, which is done by implementations of IFeedItemBuilder. There is no Match method this time. Instead, all providers are called with the collection of items (or more accurately with the FeedContext, but this contains the list of items, which is what’s relevant in most cases). Each provider can then choose to pick those items that it knows how to treat and transform them into the format requested. This enables the construction of heterogeneous feeds that expose content items of various types into a single feed. That will be extremely important when you’ll want to expose a single feed for all your site. So here are feeds in Orchard in a nutshell. The main point here is that there is a fair number of components involved, with some complexity in implementation in order to allow for extreme flexibility, but the part that you use to expose a new feed is extremely simple and light: declare that you want your content exposed as a feed and you’re done. There are cases where you’ll have to dive in and provide new implementations for some or all of the interfaces involved, but that requirement will only arise as needed. For example, you might need to create a new feed item builder to include your custom content type but that effort will be extremely focused on the specialized task at hand. The rest of the system won’t need to change. So what do you think?

    Read the article

  • What happens to C# 4 optional parameters when compiling against 3.5?

    - by Bertrand Le Roy
    Here’s a method declaration that uses optional parameters: public Path Copy( Path destination, bool overwrite = false, bool recursive = false) Something you may not know is that Visual Studio 2010 will let you compile this against .NET 3.5, with no error or warning. You may be wondering (as I was) how it does that. Well, it takes the easy and rather obvious way of not trying to be too smart and just ignores the optional parameters. So if you’re compiling against 3.5 from Visual Studio 2010, the above code is equivalent to: public Path Copy( Path destination, bool overwrite, bool recursive) The parameters are not optional (no such thing in C# 3), and no overload gets magically created for you. If you’re building a library that is going to have both 3.5 and 4.0 versions, and you want 3.5 users to have reasonable overloads of your methods, you’ll have to provide those yourself, which means that providing a version with optional parameters for the benefit of 4.0 users is not going to provide that much value, except for the ability to provide named parameters out of order. I guess that’s not so bad… Providing all of the following overloads will compile against both 3.5 and 4.0: public Path Copy(Path destination)public Path Copy(Path destination, bool overwrite)public Path Copy( Path destination, bool overwrite = false, bool recursive = false)

    Read the article

< Previous Page | 59 60 61 62 63 64 65 66 67 68 69 70  | Next Page >