SlideShare a Scribd company logo
1 of 74
Download to read offline
.NET @ apache.org

 ApacheCon NA - Vancouver BC
     November 2011 2:30p

       husted@apache.org
http://www.slideshare.net/ted.husted
.NET @ apache.org

Like it or not, many open source developers are moving to the
Microsoft .NET platform, and we're bringing our favorite tools
with us!

In this session, we look inside ASF projects that are creating
software for .NET and Mono, like Logging and Lucene.net -- to
show you how to create leading-edge ASP.NET applications
with ASF open source libraries, and how you can integrate with
other appications using Thrift, Chemistry/DotCMIS, QPid or
ActiveMQ.

We'll also look at integrating other .NET open source projects,
like Spring.NET, NVelocity, and JayRock, into your C#
application to create a complete open source .NET stack.
http://balanagaraj.wordpress.com/
Hello World - Log4Net
using System;
namespace log4net_console
{
  class Program
  {
    static void Main( string[] args )
    {
      log4net.Config. BasicConfigurator.Configure();
      log4net.ILog log = log4net.LogManager.GetLogger (typeof
(Program));
      log.Debug( "Hello World!" );
      log.Info( "I'm a simple log4net tutorial." );
      log.Warn( "... better be careful ..." );
      log.Error( "ruh-roh: an error occurred" );
      log.Fatal( "OMG we're dooooooomed!" );
      Console.ReadLine(); // so you can read the output
    }
  }
}
              http://www.beefycode.com/post/Log4Net-Tutorial-pt-1-Getting-Started.aspx
Web.config

<appender name="RollingLogFileAppender" type="
log4net.Appender.RollingFileAppender">
  <threshold value="All" />
  <file value="C:LogFile" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <datePattern value="'.'yyyyMMdd'.log.txt'" />
  <lockingModel type="log4net.Appender.
FileAppender+MinimalLock" />
  <layout type="log4net.Layout.PatternLayout">
  <conversionPattern
value="%date %-5level %logger - %message%newline" />
  </layout>
</appender>
Program.cs

using System;
namespace Tutorial2_BasicXmlConfiguration
{
  class Program
  {
    static void Main( string[] args )
    {
      log4net.Config. XmlConfigurator.Configure();
      log4net.ILog log = log4net.LogManager.GetLogger (typeof(Program));
      log.Info( "beginning loop" );
      for( int c = 0; c < 100; ++c )
      {
        log.DebugFormat( "iteration #{0}", c );
      }
        log.Info( "loop has completed" );
        Console.ReadLine();
      }
  }
}
// http://www.beefycode.com/post/Log4Net-Tutorial-pt-2-Basic-XML-Configuration.aspx
http://www.l4ndash.com/
Installation

ZIP Archive              NuGet
 ● Binary                 ● Log4Net
    β—‹ bin                ● Log4Net Rolling
    β—‹ doc                  Appender
 ● Source
    β—‹ examples
    β—‹ src
    β—‹ tests
Installation

ZIP Archive              NuGet
 ● Binary                 ● Log4Net
    β—‹ bin                ● Log4Net Rolling
    β—‹ doc                  Appender
 ● Source                 ● Twitter Appender
    β—‹ examples
    β—‹ src
    β—‹ tests
Log4net

● When to use it
   β—‹ You need to analyze the function or performance of an
     application
● What it does
   β—‹ Writes statements to a file either when certain lines are
     processed or when errors occur
● How it works
   β—‹ Log4net uses a flexible array of providers to capture
     and categorize logging statements
● Where does it fit in
   β—‹ Logging is a crosscutting concern that can occur at any
     application layer
Log4Net Resources


● Beefy Code Log4Net Tutorial (7 parts)
   β—‹ http://www.beefycode.com/post/Log4Net-Tutorial-pt-1-Getting-Started.aspx


● The Code Project Log4Net Tutorial
   β—‹ http://www.codeproject.com/KB/dotnet/Log4net_Tutorial.aspx


● Log4j Logging Mechanism (Kunal Dabir)
   β—‹ http://www.slideshare.net/kunal.dabir/log4j-logging-mechanism?src=related_normal&rel=1847004
http://lemonodor.com/archives/001361.html
http://www.slideshare.net/otisg/lucene-introduction
http://www.slideshare.net/otisg/lucene-introduction
Documents and Fields

// Documents and Fields
var fordFiesta = new Document();
fordFiesta.Add(new Field("Id", "1", Field.Store.YES, Field.Index.NOT_ANALYZED));
fordFiesta.Add(new Field("Make", "Ford", Field.Store.YES, Field.Index.ANALYZED));
fordFiesta.Add(new Field("Model", "Fiesta", Field.Store.YES, Field.Index.ANALYZED));
var fordFocus = new Document();
fordFocus.Add(new Field("Id", "2", Field.Store.YES, Field.Index.NOT_ANALYZED));
fordFocus.Add(new Field("Make", "Ford", Field.Store.YES, Field.Index.ANALYZED));
fordFocus.Add(new Field("Model", "Focus", Field.Store.YES, Field.Index.ANALYZED));

var vauxhallAstra = new Document();
vauxhallAstra.Add(new Field("Id", "3", Field.Store.YES, Field.Index.NOT_ANALYZED));
vauxhallAstra.Add(new Field("Make", "Vauxhall", Field.Store.YES, Field.Index.ANALYZED));
vauxhallAstra.Add(new Field("Model", "Astra", Field.Store.YES, Field.Index.ANALYZED));




                         http://www.d80.co.uk/post/2011/03/29/LuceneNet-Tutorial.aspx
Directories, Analyzers, and Writers

// Directory
string directoryLocation = Environment.CurrentDirectory + "LuceneIndex";
Directory directory = FSDirectory.Open(new DirectoryInfo(directoryLocation));

// Analyzer
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29);

// Writer
var writer = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
writer.AddDocument(fordFiesta);
writer.AddDocument(fordFocus);
writer.AddDocument(vauxhallAstra);
writer.Optimize();
writer.Close();
Console.WriteLine("Index stored at " + directoryLocation);
Parse, Query, and Search

// Read Index
IndexReader indexReader = IndexReader.Open(directory, true);
// Parse and Query Index
var queryParser = new QueryParser(Version.LUCENE_29, "Make", analyzer);
var query = queryParser.Parse("Ford");
Searcher indexSearch = new IndexSearcher(indexReader);
// Search Index and review Hits
TopDocs resultDocs = indexSearch.Search(query, indexReader.MaxDoc());
var hits = resultDocs.scoreDocs;
foreach (var hit in hits) {
    var documentFromSearcher = indexSearch.Doc(hit.doc);
    Console.WriteLine(documentFromSearcher.Get("Make") + " " +
     documentFromSearcher.Get("Model"));
}
Lucene.net

● When to use it
   β—‹ You need to search data in a flexible and powerful way
● What it does
   β—‹ Indexes data for retrieval from primary storage
● How it works
   β—‹ Lucene "tokenizes" strings into an inverted index
● Where does it fit in
   β—‹ Data access and Data storage layer
      β–  Searches are logical queries that access indexes
         stored as a secondary data source
Lucene.net Resources


● Lucene.net Tutorial (Dan's Dev Blog)
   β—‹ http://www.d80.co.uk/post/2011/03/29/LuceneNet-Tutorial.aspx
   β—‹ http://www.d80.co.uk/post/2011/09/08/LuceneNet-Video-Tutorial.aspx


● Lucene Introduction
   β—‹ http://www.slideshare.net/otisg/lucene-introduction


● Simple Lucene - Lucene.net made easy
   β—‹ http://blogs.planetcloud.co.uk/mygreatdiscovery/post/SimpleLucene-e28093-Lucenenet-made-easy.asp
Lucene.net Resources


● Lucene.net Tutorial (Dan's Dev Blog)
   β—‹ http://www.d80.co.uk/post/2011/03/29/LuceneNet-Tutorial.aspx
   β—‹ http://www.d80.co.uk/post/2011/09/08/LuceneNet-Video-Tutorial.aspx


● Lucene Introduction
   β—‹ http://www.slideshare.net/otisg/lucene-introduction


● Simple Lucene - Lucene.net made easy
   β—‹ http://blogs.planetcloud.co.uk/mygreatdiscovery/post/SimpleLucene-e28093-Lucenenet-made-easy.asp
www.slideshare.net/talentica/building-scalable-and-language-independent-java-services-using-apache-thrift-6286467
http://thrift.apache.org/about/
www.slideshare.net/talentica/building-scalable-and-language-independent-java-services-using-apache-thrift-6286467
www.slideshare.net/talentica/building-scalable-and-language-independent-java-services-using-apache-thrift-6286467
time.thrift

# time.thrift namespace java tserver.gen
typedef i64 Timestamp
service TimeServer {
  Timestamp time()
}




               http://nbonvin.wordpress.com/2009/03/08/simple-thrift-tutorial/
Generate the code

thrift --gen java time.thrift
TimeServerImpl.java

package server;
import org.apache.thrift.TException;
import tserver.gen.*;

class TimeServerImpl implements TimeServer.Iface {
  @Override
  public long time() throws TException {
    long time = System.currentTimeMillis();
    System.out.println("time() called: " + time);
    return time;
  }
}
Server.java
package server;
import java.io.IOException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TBinaryProtocol.Factory;
import org.apache.thrift.server.TServer; import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.transport.TServerSocket; import org.apache.thrift.transport.TTransportException;
import tserver.gen.TimeServer;
public class Server {
 private void start() {
  try {
   TServerSocket serverTransport = new TServerSocket(7911);
   TimeServer.Processor processor = new TimeServer.Processor(new TimeServerImpl());
   Factory protFactory = new TBinaryProtocol.Factory(true, true);
   TServer server = new TThreadPoolServer(processor, serverTransport, protFactory);
   System.out.println("Starting server on port 7911 ...");
   server.serve();
   } catch (TTransportException e) { e.printStackTrace();
   } catch (IOException e) { e.printStackTrace();
  }
}
public static void main(String args[]) {
  Server srv = new Server(); srv.start(); }}
TimeClient.java
package client;
import java.net.SocketException;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport; import org.apache.thrift.transport.TTransportException;
import tserver.gen.TimeServer.Client;
public class TimeClient {
  private void start() {
  TTransport transport;
  try {
   transport = new TSocket("localhost", 7911);
   TProtocol protocol = new TBinaryProtocol(transport);
    Client client = new Client(protocol);
    transport.open();
    long time = client.time();
   System.out.println("Time from server:" + time);
   transport.close();
  } catch (SocketException e) { e.printStackTrace(); } catch (TTransportException e) {
    e.printStackTrace(); } catch (TException e) { e.printStackTrace();
  }
}
public static void main(String[] args) {
  TimeClient c = new TimeClient(); c.start(); } }
http://www.slideshare.net/jhammerb/20080611accel
Thrift

● When to use it
   β—‹ You need to invoke an action between co-located
     servers, especially on a different language platform.
● What it does
   β—‹ Transfers data to a procedure on the server using a
     flexible, lightweight, efficient protocol
● How it works
   β—‹ You define the data transfer object and service in a
     JSON-like syntax, and Thrift generates the code for
     client code and stub server code
● Where does it fit in
   β—‹ Data source layer
       β–  Alternative to SOAP, REST, or COM
Thrift Resources

● Apache Thrift (Prunicki)
    β—‹ http://jnb.ociweb.com/jnb/jnbJun2009.html


● Getting Started with Apache Thrift Tutorial (Rakowski)
    β—‹ http://www.thrift.pl/Thrift-tutorial-getting-started.html


● Simple Thrift Tutorial (Bovin)
    β—‹ http://nbonvin.wordpress.com/2009/03/08/simple-thrift-tutorial/
http://gazarenkov.blogspot.com/
http://www.slideshare.net/pie1120/the-point-of-the-content-interoperability-services-cmis-standard
http://www.slideshare.net/pie1120/the-point-of-the-content-interoperability-services-cmis-standard
http://www.slideshare.net/pie1120/the-point-of-the-content-interoperability-services-cmis-standard
Chemistry / DotCMIS

● When to use it
   β—‹ You need to connect CMIS repositories
● What it does
   β—‹ DotCMIS implements the CMIS client standard
● How it works
   β—‹ Exchanges data through web services or Atom.
● Where does it fit in
   β—‹ Data Access Layer
http://gti-ia.upv.es/sma/tools/magentix2/overview.php
Qpid API

● message
●
● connection
●
● session
●
● sender

● receiver
Qpid API

● message - standard fields, custom properties, and content.
●
● connection
●
● session
●
● sender

● receiver
Qpid API

● message - standard fields, custom properties, and content.
●
● connection - network connection to a remote endpoint.
●
● session
●
● sender

● receiver
Qpid API

● message - standard fields, custom properties, and content.
●
● connection - network connection to a remote endpoint.
●
● session - ordered messages based on a connection.
●
● sender

● receiver
Qpid API

● message - standard fields, custom properties, and content.
●
● connection - network connection to a remote endpoint.
●
● session - ordered messages based on a connection.
●
● sender - based on a session for a given target address.

● receiver
Qpid API

● message - standard fields, custom properties, and content.
●
● connection - network connection to a remote endpoint.
●
● session - ordered messages based on a connection.
●
● sender - based on a session for a given target address.

● receiver - based on a session for a given source address.
using System;
using Org.Apache.Qpid.Messaging;
namespace Org.Apache.Qpid.Messaging {
class Program {
 static void Main(string[] args) {
 String broker = args.Length > 0 ? args[0] : "localhost:5672";
 String address = args.Length > 1 ? args[1] : "amq.topic";
 Connection connection = null;
 try {
  connection = new Connection( broker);
  connection.Open();
  Session session = connection.CreateSession();
  Receiver receiver = session.CreateReceiver( address);
  Sender sender = session.CreateSender( address);
  sender.Send(new Message("Hello world !"));
  Message message = new Message();
  message = receiver. Fetch(DurationConstants.SECOND * 1);
  Console.WriteLine("{0}", message.GetContent());
  session. Acknowledge(); connection. Close();
  } catch (Exception e) {
     Console.WriteLine("Exception {0}.", e);
     if (connection != null) connection.Close();
}}}}




   docs.redhat.com/docs/en-US/Red_Hat_Enterprise_MRG/1.3/html-single/Programming_in_Apache_Qpid/index.html
Qpid

● When to use it
   β—‹ Various clients need to exchange information with an
     incompatible server.
● What it does
   β—‹ Places a sophisticated broker between system that can
     queue and/or transform messages.
● How it works
   β—‹ Qpid implements the AMPQ industry standard.
● Where does it fit in
   β—‹ Data access layer integration
Qpid Resources

● Message Orientated Middleware (Wikipedia)
     β—‹ http://en.wikipedia.org/wiki/Message-oriented_middleware


● Advanced Message Queuing Protocol (Wikipedia)
     β—‹ http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol


● Programming in Apache Qpid (Red Hat)
● http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_MRG/1.3/html-
  single/Programming_in_Apache_Qpid/index.html
ActiveMQ C# Client

● When to use it
   β—‹ You want to connect a C# client to a Java Messaging
     Server (among others)
● What it does
   β—‹ Sends and receives messages brokered by a server.
● How it works
   β—‹ Exposes a standard API and
     provides connectivity.
● Where does it fit in
   β—‹ Data Access Layer integration

● http://activemq.apache.org/
Spring.NET + JayRock + NVelocity

● When to use it
   β—‹ You would like an alternative to the default ASP.NET
     framework.
● What it does
   β—‹ With Postgres or MongoDB, forms a soup-to-nuts web
     application platform.
● How it works
   β—‹ Taken together the platform provides dependency
     injection, remote procedure calls, and dynamic,
     lightweight UI pages.
● Where does it fit in
   β—‹ All levels
Spring.net
<objects xmlns="http://www.springframework.net">
<object name="MyMovieLister"
 type="Spring.Examples.MovieFinder.MovieLister,
Spring.Examples.MovieFinder">
</object>
</objects>

public static void Main () {
 IApplicationContext ctx = ContextRegistry.GetContext();
 IMovieLister lister = (IMovieLister) ctx.GetObject ("MyMovieLister");
  Movie[] movies = lister.MoviesDirectedBy("Roberto Benigni");
}

public interface IMovieLister
  IList MoviesDirectedBy (string director);
}


                 http://www.springframework.net/doc-latest/reference/html/quickstarts.html
Jayrock

public class HelloWorld : JsonRpcHandler {
[ JsonRpcMethod("greetings") ]
public string Greetings() {
  return "Welcome to Jayrock!";
}}




                         http://jayrock.berlios.de/
Jayrock
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.
org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 <head>
  <title>Hello Jayrock</title>
  <script type="text/javascript" src="json.js"></script>
  <script type="text/javascript" src="helloworld.ashx?proxy"></script>
  <script type="text/javascript">
/* <![CDATA[ */

  window.onload = function() {
  var s = new HelloWorld();
  alert("sync:" + s.greetings());
  s.greetings(function(response) {
  alert("async:" + response.result)

}); } /* ]]> */
  </script>
  </head>
<body>
  <p>This page tests the HelloWorld service with Jayrock.</p>
</body>




                                           http://jayrock.berlios.de/
NVelocity

<HTML>
<BODY>
Hello $customer.Name!
<table>
#foreach( $mud in $mudsOnSpecial )
#if ( $customer.hasPurchased($mud) )
<tr> <td>
$flogger.getPromo( $mud )
</td> </tr>
#end
#end
</table>


               http://velocity.apache.org/engine/releases/velocity-1.5/user-guide.html
Spring.NET + Jayrock + NVelocity

● Spring.NET
   β—‹ http://www.springframework.net/


● Jayrock
   β—‹ http://www.castleproject.org/others/nvelocity/index.html


● NVelocity
   β—‹ http://www.castleproject.org/others/nvelocity/index.html
NPOI

● When to use it
   β—‹ When you need to read or write XLS, DOC, or PPT.
● What it does
   β—‹ Exposes an API that can called from a .NET application.
● How it works
   β—‹ The API reads and writes the file formats directly.
● Where does it fit in
   β—‹ Data access layer.

● http://npoi.codeplex.com/
http://na11.apachecon.com/talks/19459

          husted@apache.org
   http://www.slideshare.net/ted.husted

More Related Content

What's hot

Logstash family introduction
Logstash family introductionLogstash family introduction
Logstash family introductionOwen Wu
Β 
Reversing the dropbox client on windows
Reversing the dropbox client on windowsReversing the dropbox client on windows
Reversing the dropbox client on windowsextremecoders
Β 
groovy & grails - lecture 9
groovy & grails - lecture 9groovy & grails - lecture 9
groovy & grails - lecture 9Alexandre Masselot
Β 
GeeCon.cz - Integration Testing from the Trenches Rebooted
GeeCon.cz  - Integration Testing from the Trenches RebootedGeeCon.cz  - Integration Testing from the Trenches Rebooted
GeeCon.cz - Integration Testing from the Trenches RebootedNicolas FrΓ€nkel
Β 
Monitoring OSGi Applications with the Web Console - Carsten Ziegeler
Monitoring OSGi Applications with the Web Console - Carsten ZiegelerMonitoring OSGi Applications with the Web Console - Carsten Ziegeler
Monitoring OSGi Applications with the Web Console - Carsten Ziegelermfrancis
Β 
Getting Started With Aura
Getting Started With AuraGetting Started With Aura
Getting Started With AuraChris Tankersley
Β 
JournΓ©e DevOps : Des dashboards pour tous avec ElasticSearch, Logstash et Kibana
JournΓ©e DevOps : Des dashboards pour tous avec ElasticSearch, Logstash et KibanaJournΓ©e DevOps : Des dashboards pour tous avec ElasticSearch, Logstash et Kibana
JournΓ©e DevOps : Des dashboards pour tous avec ElasticSearch, Logstash et KibanaPublicis Sapient Engineering
Β 
Everything you wanted to know about writing async, concurrent http apps in java
Everything you wanted to know about writing async, concurrent http apps in java Everything you wanted to know about writing async, concurrent http apps in java
Everything you wanted to know about writing async, concurrent http apps in java Baruch Sadogursky
Β 
Big Data Day LA 2016/ Big Data Track - Fluentd and Embulk: Collect More Data,...
Big Data Day LA 2016/ Big Data Track - Fluentd and Embulk: Collect More Data,...Big Data Day LA 2016/ Big Data Track - Fluentd and Embulk: Collect More Data,...
Big Data Day LA 2016/ Big Data Track - Fluentd and Embulk: Collect More Data,...Data Con LA
Β 
Piwik elasticsearch kibana at OSC Tokyo 2016 Spring
Piwik elasticsearch kibana at OSC Tokyo 2016 SpringPiwik elasticsearch kibana at OSC Tokyo 2016 Spring
Piwik elasticsearch kibana at OSC Tokyo 2016 SpringTakashi Yamamoto
Β 
elk_stack_alexander_szalonnas
elk_stack_alexander_szalonnaselk_stack_alexander_szalonnas
elk_stack_alexander_szalonnasAlexander Szalonnas
Β 
SymfonyCon Berlin 2016 Jenkins Deployment Pipelines
SymfonyCon Berlin 2016 Jenkins Deployment PipelinesSymfonyCon Berlin 2016 Jenkins Deployment Pipelines
SymfonyCon Berlin 2016 Jenkins Deployment Pipelinescpsitgmbh
Β 
C# e Visual Basic Future: Async Made Simple (DEV304)
C# e Visual Basic Future: Async Made Simple (DEV304)C# e Visual Basic Future: Async Made Simple (DEV304)
C# e Visual Basic Future: Async Made Simple (DEV304)Giovanni Bassi
Β 
From nothing to Prometheus : one year after
From nothing to Prometheus : one year afterFrom nothing to Prometheus : one year after
From nothing to Prometheus : one year afterAntoine Leroyer
Β 
Iss letcure 7_8
Iss letcure 7_8Iss letcure 7_8
Iss letcure 7_8Ali Habeeb
Β 
Presentation: Everything you wanted to know about writing async, high-concurr...
Presentation: Everything you wanted to know about writing async, high-concurr...Presentation: Everything you wanted to know about writing async, high-concurr...
Presentation: Everything you wanted to know about writing async, high-concurr...Baruch Sadogursky
Β 

What's hot (20)

Logstash
LogstashLogstash
Logstash
Β 
Logstash family introduction
Logstash family introductionLogstash family introduction
Logstash family introduction
Β 
ELK stack at weibo.com
ELK stack at weibo.comELK stack at weibo.com
ELK stack at weibo.com
Β 
Reversing the dropbox client on windows
Reversing the dropbox client on windowsReversing the dropbox client on windows
Reversing the dropbox client on windows
Β 
groovy & grails - lecture 9
groovy & grails - lecture 9groovy & grails - lecture 9
groovy & grails - lecture 9
Β 
Node.js cluster
Node.js clusterNode.js cluster
Node.js cluster
Β 
GeeCon.cz - Integration Testing from the Trenches Rebooted
GeeCon.cz  - Integration Testing from the Trenches RebootedGeeCon.cz  - Integration Testing from the Trenches Rebooted
GeeCon.cz - Integration Testing from the Trenches Rebooted
Β 
Monitoring OSGi Applications with the Web Console - Carsten Ziegeler
Monitoring OSGi Applications with the Web Console - Carsten ZiegelerMonitoring OSGi Applications with the Web Console - Carsten Ziegeler
Monitoring OSGi Applications with the Web Console - Carsten Ziegeler
Β 
Getting Started With Aura
Getting Started With AuraGetting Started With Aura
Getting Started With Aura
Β 
JournΓ©e DevOps : Des dashboards pour tous avec ElasticSearch, Logstash et Kibana
JournΓ©e DevOps : Des dashboards pour tous avec ElasticSearch, Logstash et KibanaJournΓ©e DevOps : Des dashboards pour tous avec ElasticSearch, Logstash et Kibana
JournΓ©e DevOps : Des dashboards pour tous avec ElasticSearch, Logstash et Kibana
Β 
Everything you wanted to know about writing async, concurrent http apps in java
Everything you wanted to know about writing async, concurrent http apps in java Everything you wanted to know about writing async, concurrent http apps in java
Everything you wanted to know about writing async, concurrent http apps in java
Β 
{{more}} Kibana4
{{more}} Kibana4{{more}} Kibana4
{{more}} Kibana4
Β 
Big Data Day LA 2016/ Big Data Track - Fluentd and Embulk: Collect More Data,...
Big Data Day LA 2016/ Big Data Track - Fluentd and Embulk: Collect More Data,...Big Data Day LA 2016/ Big Data Track - Fluentd and Embulk: Collect More Data,...
Big Data Day LA 2016/ Big Data Track - Fluentd and Embulk: Collect More Data,...
Β 
Piwik elasticsearch kibana at OSC Tokyo 2016 Spring
Piwik elasticsearch kibana at OSC Tokyo 2016 SpringPiwik elasticsearch kibana at OSC Tokyo 2016 Spring
Piwik elasticsearch kibana at OSC Tokyo 2016 Spring
Β 
elk_stack_alexander_szalonnas
elk_stack_alexander_szalonnaselk_stack_alexander_szalonnas
elk_stack_alexander_szalonnas
Β 
SymfonyCon Berlin 2016 Jenkins Deployment Pipelines
SymfonyCon Berlin 2016 Jenkins Deployment PipelinesSymfonyCon Berlin 2016 Jenkins Deployment Pipelines
SymfonyCon Berlin 2016 Jenkins Deployment Pipelines
Β 
C# e Visual Basic Future: Async Made Simple (DEV304)
C# e Visual Basic Future: Async Made Simple (DEV304)C# e Visual Basic Future: Async Made Simple (DEV304)
C# e Visual Basic Future: Async Made Simple (DEV304)
Β 
From nothing to Prometheus : one year after
From nothing to Prometheus : one year afterFrom nothing to Prometheus : one year after
From nothing to Prometheus : one year after
Β 
Iss letcure 7_8
Iss letcure 7_8Iss letcure 7_8
Iss letcure 7_8
Β 
Presentation: Everything you wanted to know about writing async, high-concurr...
Presentation: Everything you wanted to know about writing async, high-concurr...Presentation: Everything you wanted to know about writing async, high-concurr...
Presentation: Everything you wanted to know about writing async, high-concurr...
Β 

Viewers also liked

Open Source Secret Sauce - Lugor Sep 2011
Open Source Secret Sauce - Lugor Sep 2011Open Source Secret Sauce - Lugor Sep 2011
Open Source Secret Sauce - Lugor Sep 2011Ted Husted
Β 
Ship It!
Ship It!Ship It!
Ship It!Ted Husted
Β 
The secret life_of_open_source
The secret life_of_open_sourceThe secret life_of_open_source
The secret life_of_open_sourceTed Husted
Β 
Cross browser testing
Cross browser testingCross browser testing
Cross browser testingSauce Labs
Β 
Desserts and sauces
Desserts and saucesDesserts and sauces
Desserts and sauceskellimccabe
Β 
Cblm lg gr. 10 tle commercial cooking (cookery)
Cblm lg gr. 10 tle commercial cooking (cookery)Cblm lg gr. 10 tle commercial cooking (cookery)
Cblm lg gr. 10 tle commercial cooking (cookery)JeRo Awanan
Β 
LM Cookery G9
LM Cookery G9LM Cookery G9
LM Cookery G9Cha Caunan
Β 

Viewers also liked (7)

Open Source Secret Sauce - Lugor Sep 2011
Open Source Secret Sauce - Lugor Sep 2011Open Source Secret Sauce - Lugor Sep 2011
Open Source Secret Sauce - Lugor Sep 2011
Β 
Ship It!
Ship It!Ship It!
Ship It!
Β 
The secret life_of_open_source
The secret life_of_open_sourceThe secret life_of_open_source
The secret life_of_open_source
Β 
Cross browser testing
Cross browser testingCross browser testing
Cross browser testing
Β 
Desserts and sauces
Desserts and saucesDesserts and sauces
Desserts and sauces
Β 
Cblm lg gr. 10 tle commercial cooking (cookery)
Cblm lg gr. 10 tle commercial cooking (cookery)Cblm lg gr. 10 tle commercial cooking (cookery)
Cblm lg gr. 10 tle commercial cooking (cookery)
Β 
LM Cookery G9
LM Cookery G9LM Cookery G9
LM Cookery G9
Β 

Similar to .NET @ apache.org

StorageQuery: federated querying on object stores, powered by Alluxio and Presto
StorageQuery: federated querying on object stores, powered by Alluxio and PrestoStorageQuery: federated querying on object stores, powered by Alluxio and Presto
StorageQuery: federated querying on object stores, powered by Alluxio and PrestoAlluxio, Inc.
Β 
EuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears TrainingEuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears TrainingAlessandro Molina
Β 
Collect distributed application logging using fluentd (EFK stack)
Collect distributed application logging using fluentd (EFK stack)Collect distributed application logging using fluentd (EFK stack)
Collect distributed application logging using fluentd (EFK stack)Marco Pas
Β 
Fullstack workshop
Fullstack workshopFullstack workshop
Fullstack workshopAssaf Gannon
Β 
Logging & Metrics with Docker
Logging & Metrics with DockerLogging & Metrics with Docker
Logging & Metrics with DockerStefan Zier
Β 
WebTalk - Implementing Web Services with a dedicated Java daemon
WebTalk - Implementing Web Services with a dedicated Java daemonWebTalk - Implementing Web Services with a dedicated Java daemon
WebTalk - Implementing Web Services with a dedicated Java daemonGeert Van Pamel
Β 
Lightweight web frameworks
Lightweight web frameworksLightweight web frameworks
Lightweight web frameworksJonathan Holloway
Β 
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...Pantheon
Β 
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using SwiftDiego Freniche Brito
Β 
Php 5.6 From the Inside Out
Php 5.6 From the Inside OutPhp 5.6 From the Inside Out
Php 5.6 From the Inside OutFerenc KovΓ‘cs
Β 
Akash rajguru project report sem v
Akash rajguru project report sem vAkash rajguru project report sem v
Akash rajguru project report sem vAkash Rajguru
Β 
AnwendungsfΓ€lle fΓΌr Elasticsearch JavaLand 2015
AnwendungsfΓ€lle fΓΌr Elasticsearch JavaLand 2015AnwendungsfΓ€lle fΓΌr Elasticsearch JavaLand 2015
AnwendungsfΓ€lle fΓΌr Elasticsearch JavaLand 2015Florian Hopf
Β 
Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek PROIDEA
Β 
Docker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic StackDocker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic StackJakub Hajek
Β 
GopherCon IL 2020 - Web Application Profiling 101
GopherCon IL 2020 - Web Application Profiling 101GopherCon IL 2020 - Web Application Profiling 101
GopherCon IL 2020 - Web Application Profiling 101yinonavraham
Β 
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years laterSymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years laterHaehnchen
Β 
How to save log4net into database
How to save log4net into databaseHow to save log4net into database
How to save log4net into databasecodeandyou forums
Β 
An introduction to Node.js application development
An introduction to Node.js application developmentAn introduction to Node.js application development
An introduction to Node.js application developmentshelloidhq
Β 

Similar to .NET @ apache.org (20)

StorageQuery: federated querying on object stores, powered by Alluxio and Presto
StorageQuery: federated querying on object stores, powered by Alluxio and PrestoStorageQuery: federated querying on object stores, powered by Alluxio and Presto
StorageQuery: federated querying on object stores, powered by Alluxio and Presto
Β 
EuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears TrainingEuroPython 2013 - Python3 TurboGears Training
EuroPython 2013 - Python3 TurboGears Training
Β 
Logging
LoggingLogging
Logging
Β 
Collect distributed application logging using fluentd (EFK stack)
Collect distributed application logging using fluentd (EFK stack)Collect distributed application logging using fluentd (EFK stack)
Collect distributed application logging using fluentd (EFK stack)
Β 
NodeJS
NodeJSNodeJS
NodeJS
Β 
Fullstack workshop
Fullstack workshopFullstack workshop
Fullstack workshop
Β 
Logging & Metrics with Docker
Logging & Metrics with DockerLogging & Metrics with Docker
Logging & Metrics with Docker
Β 
WebTalk - Implementing Web Services with a dedicated Java daemon
WebTalk - Implementing Web Services with a dedicated Java daemonWebTalk - Implementing Web Services with a dedicated Java daemon
WebTalk - Implementing Web Services with a dedicated Java daemon
Β 
Lightweight web frameworks
Lightweight web frameworksLightweight web frameworks
Lightweight web frameworks
Β 
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Β 
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
Β 
Php 5.6 From the Inside Out
Php 5.6 From the Inside OutPhp 5.6 From the Inside Out
Php 5.6 From the Inside Out
Β 
Akash rajguru project report sem v
Akash rajguru project report sem vAkash rajguru project report sem v
Akash rajguru project report sem v
Β 
AnwendungsfΓ€lle fΓΌr Elasticsearch JavaLand 2015
AnwendungsfΓ€lle fΓΌr Elasticsearch JavaLand 2015AnwendungsfΓ€lle fΓΌr Elasticsearch JavaLand 2015
AnwendungsfΓ€lle fΓΌr Elasticsearch JavaLand 2015
Β 
Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek
Β 
Docker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic StackDocker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic Stack
Β 
GopherCon IL 2020 - Web Application Profiling 101
GopherCon IL 2020 - Web Application Profiling 101GopherCon IL 2020 - Web Application Profiling 101
GopherCon IL 2020 - Web Application Profiling 101
Β 
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years laterSymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
Β 
How to save log4net into database
How to save log4net into databaseHow to save log4net into database
How to save log4net into database
Β 
An introduction to Node.js application development
An introduction to Node.js application developmentAn introduction to Node.js application development
An introduction to Node.js application development
Β 

More from Ted Husted

NU FaceBook 101 JCC 2010
NU  FaceBook 101 JCC 2010NU  FaceBook 101 JCC 2010
NU FaceBook 101 JCC 2010Ted Husted
Β 
Developing java Web Applications Using Google Apps RJUG 2011
Developing java Web Applications Using Google Apps RJUG 2011Developing java Web Applications Using Google Apps RJUG 2011
Developing java Web Applications Using Google Apps RJUG 2011Ted Husted
Β 
Open source secret_sauce_apache_con_2010
Open source secret_sauce_apache_con_2010Open source secret_sauce_apache_con_2010
Open source secret_sauce_apache_con_2010Ted Husted
Β 
Drupal kickstart-workshop
Drupal kickstart-workshopDrupal kickstart-workshop
Drupal kickstart-workshopTed Husted
Β 
Open source-secret-sauce-rit-2010
Open source-secret-sauce-rit-2010Open source-secret-sauce-rit-2010
Open source-secret-sauce-rit-2010Ted Husted
Β 
Agile Analysis with Use Cases: Balancing Utility with Simplicity
Agile Analysis with Use Cases: Balancing Utility with SimplicityAgile Analysis with Use Cases: Balancing Utility with Simplicity
Agile Analysis with Use Cases: Balancing Utility with SimplicityTed Husted
Β 
Testing Web Application Security
Testing Web Application SecurityTesting Web Application Security
Testing Web Application SecurityTed Husted
Β 
API Doc Smackdown
API Doc SmackdownAPI Doc Smackdown
API Doc SmackdownTed Husted
Β 
Testing The Testers
Testing The TestersTesting The Testers
Testing The TestersTed Husted
Β 
Testing Ajax Applications
Testing Ajax ApplicationsTesting Ajax Applications
Testing Ajax ApplicationsTed Husted
Β 
Testing Ajax Web Applications
Testing Ajax Web ApplicationsTesting Ajax Web Applications
Testing Ajax Web ApplicationsTed Husted
Β 
Testing Tools
Testing ToolsTesting Tools
Testing ToolsTed Husted
Β 
Coding Ajax
Coding AjaxCoding Ajax
Coding AjaxTed Husted
Β 
Coding Ajax
Coding AjaxCoding Ajax
Coding AjaxTed Husted
Β 
Retrofitting
RetrofittingRetrofitting
RetrofittingTed Husted
Β 
Open Source Secret Sauce
Open Source Secret SauceOpen Source Secret Sauce
Open Source Secret SauceTed Husted
Β 

More from Ted Husted (16)

NU FaceBook 101 JCC 2010
NU  FaceBook 101 JCC 2010NU  FaceBook 101 JCC 2010
NU FaceBook 101 JCC 2010
Β 
Developing java Web Applications Using Google Apps RJUG 2011
Developing java Web Applications Using Google Apps RJUG 2011Developing java Web Applications Using Google Apps RJUG 2011
Developing java Web Applications Using Google Apps RJUG 2011
Β 
Open source secret_sauce_apache_con_2010
Open source secret_sauce_apache_con_2010Open source secret_sauce_apache_con_2010
Open source secret_sauce_apache_con_2010
Β 
Drupal kickstart-workshop
Drupal kickstart-workshopDrupal kickstart-workshop
Drupal kickstart-workshop
Β 
Open source-secret-sauce-rit-2010
Open source-secret-sauce-rit-2010Open source-secret-sauce-rit-2010
Open source-secret-sauce-rit-2010
Β 
Agile Analysis with Use Cases: Balancing Utility with Simplicity
Agile Analysis with Use Cases: Balancing Utility with SimplicityAgile Analysis with Use Cases: Balancing Utility with Simplicity
Agile Analysis with Use Cases: Balancing Utility with Simplicity
Β 
Testing Web Application Security
Testing Web Application SecurityTesting Web Application Security
Testing Web Application Security
Β 
API Doc Smackdown
API Doc SmackdownAPI Doc Smackdown
API Doc Smackdown
Β 
Testing The Testers
Testing The TestersTesting The Testers
Testing The Testers
Β 
Testing Ajax Applications
Testing Ajax ApplicationsTesting Ajax Applications
Testing Ajax Applications
Β 
Testing Ajax Web Applications
Testing Ajax Web ApplicationsTesting Ajax Web Applications
Testing Ajax Web Applications
Β 
Testing Tools
Testing ToolsTesting Tools
Testing Tools
Β 
Coding Ajax
Coding AjaxCoding Ajax
Coding Ajax
Β 
Coding Ajax
Coding AjaxCoding Ajax
Coding Ajax
Β 
Retrofitting
RetrofittingRetrofitting
Retrofitting
Β 
Open Source Secret Sauce
Open Source Secret SauceOpen Source Secret Sauce
Open Source Secret Sauce
Β 

Recently uploaded

Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
Β 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
Β 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
Β 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
Β 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
Β 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
Β 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
Β 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
Β 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
Β 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
Β 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
Β 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
Β 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
Β 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
Β 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
Β 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
Β 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
Β 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
Β 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
Β 

Recently uploaded (20)

Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Β 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
Β 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
Β 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Β 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
Β 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
Β 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Β 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Β 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
Β 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
Β 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
Β 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
Β 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Β 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Β 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Β 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Β 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
Β 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
Β 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
Β 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
Β 

.NET @ apache.org

  • 1. .NET @ apache.org ApacheCon NA - Vancouver BC November 2011 2:30p husted@apache.org http://www.slideshare.net/ted.husted
  • 2. .NET @ apache.org Like it or not, many open source developers are moving to the Microsoft .NET platform, and we're bringing our favorite tools with us! In this session, we look inside ASF projects that are creating software for .NET and Mono, like Logging and Lucene.net -- to show you how to create leading-edge ASP.NET applications with ASF open source libraries, and how you can integrate with other appications using Thrift, Chemistry/DotCMIS, QPid or ActiveMQ. We'll also look at integrating other .NET open source projects, like Spring.NET, NVelocity, and JayRock, into your C# application to create a complete open source .NET stack.
  • 4.
  • 5.
  • 6.
  • 7. Hello World - Log4Net using System; namespace log4net_console { class Program { static void Main( string[] args ) { log4net.Config. BasicConfigurator.Configure(); log4net.ILog log = log4net.LogManager.GetLogger (typeof (Program)); log.Debug( "Hello World!" ); log.Info( "I'm a simple log4net tutorial." ); log.Warn( "... better be careful ..." ); log.Error( "ruh-roh: an error occurred" ); log.Fatal( "OMG we're dooooooomed!" ); Console.ReadLine(); // so you can read the output } } } http://www.beefycode.com/post/Log4Net-Tutorial-pt-1-Getting-Started.aspx
  • 8.
  • 9. Web.config <appender name="RollingLogFileAppender" type=" log4net.Appender.RollingFileAppender"> <threshold value="All" /> <file value="C:LogFile" /> <appendToFile value="true" /> <rollingStyle value="Date" /> <datePattern value="'.'yyyyMMdd'.log.txt'" /> <lockingModel type="log4net.Appender. FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %-5level %logger - %message%newline" /> </layout> </appender>
  • 10. Program.cs using System; namespace Tutorial2_BasicXmlConfiguration { class Program { static void Main( string[] args ) { log4net.Config. XmlConfigurator.Configure(); log4net.ILog log = log4net.LogManager.GetLogger (typeof(Program)); log.Info( "beginning loop" ); for( int c = 0; c < 100; ++c ) { log.DebugFormat( "iteration #{0}", c ); } log.Info( "loop has completed" ); Console.ReadLine(); } } } // http://www.beefycode.com/post/Log4Net-Tutorial-pt-2-Basic-XML-Configuration.aspx
  • 11.
  • 13. Installation ZIP Archive NuGet ● Binary ● Log4Net β—‹ bin ● Log4Net Rolling β—‹ doc Appender ● Source β—‹ examples β—‹ src β—‹ tests
  • 14. Installation ZIP Archive NuGet ● Binary ● Log4Net β—‹ bin ● Log4Net Rolling β—‹ doc Appender ● Source ● Twitter Appender β—‹ examples β—‹ src β—‹ tests
  • 15. Log4net ● When to use it β—‹ You need to analyze the function or performance of an application ● What it does β—‹ Writes statements to a file either when certain lines are processed or when errors occur ● How it works β—‹ Log4net uses a flexible array of providers to capture and categorize logging statements ● Where does it fit in β—‹ Logging is a crosscutting concern that can occur at any application layer
  • 16. Log4Net Resources ● Beefy Code Log4Net Tutorial (7 parts) β—‹ http://www.beefycode.com/post/Log4Net-Tutorial-pt-1-Getting-Started.aspx ● The Code Project Log4Net Tutorial β—‹ http://www.codeproject.com/KB/dotnet/Log4net_Tutorial.aspx ● Log4j Logging Mechanism (Kunal Dabir) β—‹ http://www.slideshare.net/kunal.dabir/log4j-logging-mechanism?src=related_normal&rel=1847004
  • 17.
  • 19.
  • 20.
  • 21.
  • 23.
  • 25. Documents and Fields // Documents and Fields var fordFiesta = new Document(); fordFiesta.Add(new Field("Id", "1", Field.Store.YES, Field.Index.NOT_ANALYZED)); fordFiesta.Add(new Field("Make", "Ford", Field.Store.YES, Field.Index.ANALYZED)); fordFiesta.Add(new Field("Model", "Fiesta", Field.Store.YES, Field.Index.ANALYZED)); var fordFocus = new Document(); fordFocus.Add(new Field("Id", "2", Field.Store.YES, Field.Index.NOT_ANALYZED)); fordFocus.Add(new Field("Make", "Ford", Field.Store.YES, Field.Index.ANALYZED)); fordFocus.Add(new Field("Model", "Focus", Field.Store.YES, Field.Index.ANALYZED)); var vauxhallAstra = new Document(); vauxhallAstra.Add(new Field("Id", "3", Field.Store.YES, Field.Index.NOT_ANALYZED)); vauxhallAstra.Add(new Field("Make", "Vauxhall", Field.Store.YES, Field.Index.ANALYZED)); vauxhallAstra.Add(new Field("Model", "Astra", Field.Store.YES, Field.Index.ANALYZED)); http://www.d80.co.uk/post/2011/03/29/LuceneNet-Tutorial.aspx
  • 26. Directories, Analyzers, and Writers // Directory string directoryLocation = Environment.CurrentDirectory + "LuceneIndex"; Directory directory = FSDirectory.Open(new DirectoryInfo(directoryLocation)); // Analyzer Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29); // Writer var writer = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.LIMITED); writer.AddDocument(fordFiesta); writer.AddDocument(fordFocus); writer.AddDocument(vauxhallAstra); writer.Optimize(); writer.Close(); Console.WriteLine("Index stored at " + directoryLocation);
  • 27. Parse, Query, and Search // Read Index IndexReader indexReader = IndexReader.Open(directory, true); // Parse and Query Index var queryParser = new QueryParser(Version.LUCENE_29, "Make", analyzer); var query = queryParser.Parse("Ford"); Searcher indexSearch = new IndexSearcher(indexReader); // Search Index and review Hits TopDocs resultDocs = indexSearch.Search(query, indexReader.MaxDoc()); var hits = resultDocs.scoreDocs; foreach (var hit in hits) { var documentFromSearcher = indexSearch.Doc(hit.doc); Console.WriteLine(documentFromSearcher.Get("Make") + " " + documentFromSearcher.Get("Model")); }
  • 28. Lucene.net ● When to use it β—‹ You need to search data in a flexible and powerful way ● What it does β—‹ Indexes data for retrieval from primary storage ● How it works β—‹ Lucene "tokenizes" strings into an inverted index ● Where does it fit in β—‹ Data access and Data storage layer β–  Searches are logical queries that access indexes stored as a secondary data source
  • 29. Lucene.net Resources ● Lucene.net Tutorial (Dan's Dev Blog) β—‹ http://www.d80.co.uk/post/2011/03/29/LuceneNet-Tutorial.aspx β—‹ http://www.d80.co.uk/post/2011/09/08/LuceneNet-Video-Tutorial.aspx ● Lucene Introduction β—‹ http://www.slideshare.net/otisg/lucene-introduction ● Simple Lucene - Lucene.net made easy β—‹ http://blogs.planetcloud.co.uk/mygreatdiscovery/post/SimpleLucene-e28093-Lucenenet-made-easy.asp
  • 30. Lucene.net Resources ● Lucene.net Tutorial (Dan's Dev Blog) β—‹ http://www.d80.co.uk/post/2011/03/29/LuceneNet-Tutorial.aspx β—‹ http://www.d80.co.uk/post/2011/09/08/LuceneNet-Video-Tutorial.aspx ● Lucene Introduction β—‹ http://www.slideshare.net/otisg/lucene-introduction ● Simple Lucene - Lucene.net made easy β—‹ http://blogs.planetcloud.co.uk/mygreatdiscovery/post/SimpleLucene-e28093-Lucenenet-made-easy.asp
  • 31.
  • 32.
  • 37. time.thrift # time.thrift namespace java tserver.gen typedef i64 Timestamp service TimeServer { Timestamp time() } http://nbonvin.wordpress.com/2009/03/08/simple-thrift-tutorial/
  • 38. Generate the code thrift --gen java time.thrift
  • 39. TimeServerImpl.java package server; import org.apache.thrift.TException; import tserver.gen.*; class TimeServerImpl implements TimeServer.Iface { @Override public long time() throws TException { long time = System.currentTimeMillis(); System.out.println("time() called: " + time); return time; } }
  • 40. Server.java package server; import java.io.IOException; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TBinaryProtocol.Factory; import org.apache.thrift.server.TServer; import org.apache.thrift.server.TThreadPoolServer; import org.apache.thrift.transport.TServerSocket; import org.apache.thrift.transport.TTransportException; import tserver.gen.TimeServer; public class Server { private void start() { try { TServerSocket serverTransport = new TServerSocket(7911); TimeServer.Processor processor = new TimeServer.Processor(new TimeServerImpl()); Factory protFactory = new TBinaryProtocol.Factory(true, true); TServer server = new TThreadPoolServer(processor, serverTransport, protFactory); System.out.println("Starting server on port 7911 ..."); server.serve(); } catch (TTransportException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String args[]) { Server srv = new Server(); srv.start(); }}
  • 41. TimeClient.java package client; import java.net.SocketException; import org.apache.thrift.TException; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransport; import org.apache.thrift.transport.TTransportException; import tserver.gen.TimeServer.Client; public class TimeClient { private void start() { TTransport transport; try { transport = new TSocket("localhost", 7911); TProtocol protocol = new TBinaryProtocol(transport); Client client = new Client(protocol); transport.open(); long time = client.time(); System.out.println("Time from server:" + time); transport.close(); } catch (SocketException e) { e.printStackTrace(); } catch (TTransportException e) { e.printStackTrace(); } catch (TException e) { e.printStackTrace(); } } public static void main(String[] args) { TimeClient c = new TimeClient(); c.start(); } }
  • 43. Thrift ● When to use it β—‹ You need to invoke an action between co-located servers, especially on a different language platform. ● What it does β—‹ Transfers data to a procedure on the server using a flexible, lightweight, efficient protocol ● How it works β—‹ You define the data transfer object and service in a JSON-like syntax, and Thrift generates the code for client code and stub server code ● Where does it fit in β—‹ Data source layer β–  Alternative to SOAP, REST, or COM
  • 44. Thrift Resources ● Apache Thrift (Prunicki) β—‹ http://jnb.ociweb.com/jnb/jnbJun2009.html ● Getting Started with Apache Thrift Tutorial (Rakowski) β—‹ http://www.thrift.pl/Thrift-tutorial-getting-started.html ● Simple Thrift Tutorial (Bovin) β—‹ http://nbonvin.wordpress.com/2009/03/08/simple-thrift-tutorial/
  • 45.
  • 48.
  • 51. Chemistry / DotCMIS ● When to use it β—‹ You need to connect CMIS repositories ● What it does β—‹ DotCMIS implements the CMIS client standard ● How it works β—‹ Exchanges data through web services or Atom. ● Where does it fit in β—‹ Data Access Layer
  • 52.
  • 53.
  • 55. Qpid API ● message ● ● connection ● ● session ● ● sender ● receiver
  • 56. Qpid API ● message - standard fields, custom properties, and content. ● ● connection ● ● session ● ● sender ● receiver
  • 57. Qpid API ● message - standard fields, custom properties, and content. ● ● connection - network connection to a remote endpoint. ● ● session ● ● sender ● receiver
  • 58. Qpid API ● message - standard fields, custom properties, and content. ● ● connection - network connection to a remote endpoint. ● ● session - ordered messages based on a connection. ● ● sender ● receiver
  • 59. Qpid API ● message - standard fields, custom properties, and content. ● ● connection - network connection to a remote endpoint. ● ● session - ordered messages based on a connection. ● ● sender - based on a session for a given target address. ● receiver
  • 60. Qpid API ● message - standard fields, custom properties, and content. ● ● connection - network connection to a remote endpoint. ● ● session - ordered messages based on a connection. ● ● sender - based on a session for a given target address. ● receiver - based on a session for a given source address.
  • 61. using System; using Org.Apache.Qpid.Messaging; namespace Org.Apache.Qpid.Messaging { class Program { static void Main(string[] args) { String broker = args.Length > 0 ? args[0] : "localhost:5672"; String address = args.Length > 1 ? args[1] : "amq.topic"; Connection connection = null; try { connection = new Connection( broker); connection.Open(); Session session = connection.CreateSession(); Receiver receiver = session.CreateReceiver( address); Sender sender = session.CreateSender( address); sender.Send(new Message("Hello world !")); Message message = new Message(); message = receiver. Fetch(DurationConstants.SECOND * 1); Console.WriteLine("{0}", message.GetContent()); session. Acknowledge(); connection. Close(); } catch (Exception e) { Console.WriteLine("Exception {0}.", e); if (connection != null) connection.Close(); }}}} docs.redhat.com/docs/en-US/Red_Hat_Enterprise_MRG/1.3/html-single/Programming_in_Apache_Qpid/index.html
  • 62. Qpid ● When to use it β—‹ Various clients need to exchange information with an incompatible server. ● What it does β—‹ Places a sophisticated broker between system that can queue and/or transform messages. ● How it works β—‹ Qpid implements the AMPQ industry standard. ● Where does it fit in β—‹ Data access layer integration
  • 63. Qpid Resources ● Message Orientated Middleware (Wikipedia) β—‹ http://en.wikipedia.org/wiki/Message-oriented_middleware ● Advanced Message Queuing Protocol (Wikipedia) β—‹ http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol ● Programming in Apache Qpid (Red Hat) ● http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_MRG/1.3/html- single/Programming_in_Apache_Qpid/index.html
  • 64. ActiveMQ C# Client ● When to use it β—‹ You want to connect a C# client to a Java Messaging Server (among others) ● What it does β—‹ Sends and receives messages brokered by a server. ● How it works β—‹ Exposes a standard API and provides connectivity. ● Where does it fit in β—‹ Data Access Layer integration ● http://activemq.apache.org/
  • 65.
  • 66. Spring.NET + JayRock + NVelocity ● When to use it β—‹ You would like an alternative to the default ASP.NET framework. ● What it does β—‹ With Postgres or MongoDB, forms a soup-to-nuts web application platform. ● How it works β—‹ Taken together the platform provides dependency injection, remote procedure calls, and dynamic, lightweight UI pages. ● Where does it fit in β—‹ All levels
  • 67. Spring.net <objects xmlns="http://www.springframework.net"> <object name="MyMovieLister" type="Spring.Examples.MovieFinder.MovieLister, Spring.Examples.MovieFinder"> </object> </objects> public static void Main () { IApplicationContext ctx = ContextRegistry.GetContext(); IMovieLister lister = (IMovieLister) ctx.GetObject ("MyMovieLister"); Movie[] movies = lister.MoviesDirectedBy("Roberto Benigni"); } public interface IMovieLister IList MoviesDirectedBy (string director); } http://www.springframework.net/doc-latest/reference/html/quickstarts.html
  • 68. Jayrock public class HelloWorld : JsonRpcHandler { [ JsonRpcMethod("greetings") ] public string Greetings() { return "Welcome to Jayrock!"; }} http://jayrock.berlios.de/
  • 69. Jayrock <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <title>Hello Jayrock</title> <script type="text/javascript" src="json.js"></script> <script type="text/javascript" src="helloworld.ashx?proxy"></script> <script type="text/javascript"> /* <![CDATA[ */ window.onload = function() { var s = new HelloWorld(); alert("sync:" + s.greetings()); s.greetings(function(response) { alert("async:" + response.result) }); } /* ]]> */ </script> </head> <body> <p>This page tests the HelloWorld service with Jayrock.</p> </body> http://jayrock.berlios.de/
  • 70. NVelocity <HTML> <BODY> Hello $customer.Name! <table> #foreach( $mud in $mudsOnSpecial ) #if ( $customer.hasPurchased($mud) ) <tr> <td> $flogger.getPromo( $mud ) </td> </tr> #end #end </table> http://velocity.apache.org/engine/releases/velocity-1.5/user-guide.html
  • 71. Spring.NET + Jayrock + NVelocity ● Spring.NET β—‹ http://www.springframework.net/ ● Jayrock β—‹ http://www.castleproject.org/others/nvelocity/index.html ● NVelocity β—‹ http://www.castleproject.org/others/nvelocity/index.html
  • 72.
  • 73. NPOI ● When to use it β—‹ When you need to read or write XLS, DOC, or PPT. ● What it does β—‹ Exposes an API that can called from a .NET application. ● How it works β—‹ The API reads and writes the file formats directly. ● Where does it fit in β—‹ Data access layer. ● http://npoi.codeplex.com/
  • 74. http://na11.apachecon.com/talks/19459 husted@apache.org http://www.slideshare.net/ted.husted