text:
The Remoting channels are objects in the System.Runtine.Remoting namespace that transport messages between applications across remoting boundaries such as application domains, processes and computers in the peer-to-peer manner. The channel is plug-in between the server and client side. From the abstract point of view, the channel represents a logical connectivity between two points. The point which listening inbound messages is called endpoint and it is a logical address of the remote object, knew as URI (uniform resource identifier). This connectivity is full transparent to the CLR and "understandable" for open protocol design pattern.
The Remoting namespace includes an implementation of two channels: http and tcp represented as standard channels. In this article I will show you how to build and use the custom channel using the System.Messaging namespace classes to implement the MSMQ channel for Remoting purpose. Before than we will go to its implementation details, let's start it with usage and configuration issue. I am assuming that you have a knowledge of the .Net Remoting.
Using the MSMQ custom remoting channel required to install MSMQChannelLib into the GAC. There are two classes in this library:
The Remoting object has no special requirements to handle the custom remoting channel. It's a full transparently without any knowledge who and how the messages are transferring. So, we can administratively switch the channel (endpoint) any time, based on the application environment.
The situation on the client side is slightly different. The sender needs to know an URI address (endpoint) of the Remoting object for its activation, see the following code snippet:
// activate a remote object Type interfaceType = typeof(IRemInterface); string objectUrl = @"msmq://./reqchannel/endpoint"; IRemInterface robj = (IRemInterface)Activator.GetObject(interfaceType, objectUrl);
This address can be either hard coded or retrieved from the config file. Using the config file is more flexible. That's all differences on the client side. Note that this issue is the same when the application is using two standard channels (http, tcp).
Each side of the connectivity has own custom properties to configure a channel end in the properly way.
Configuring the MSMQ Channel:
Based on the above, the server and client channels can be configured as is shown in the following pictures:
Server config file:
<configuration> <system.runtime.remoting> <application > <service> <wellknown mode="SingleCall" type="RemoteObject.RemObject, RemoteObject" objectUri="endpoint" /> </service> <channels> <channel type="RKiss.MSMQChannelLib.MSMQReceiver, MSMQChannelLib" listener=".\ReqChannel"/> </channels> </application> </system.runtime.remoting> </configuration>
The following picture shows another example of the server channel to configure two msmq channels listening on the local queue with the name ReqChannel. Their priority have a value 20. Each channel has own unique name such as msmq_1 rsp. msmq_2.
<configuration> <system.runtime.remoting> <application > <service> <wellknown mode="SingleCall" type="RemoteObject.RemObject, RemoteObject" objectUri="endpoint" /> </service> <channels> <channel ref="msmq" name="msmq_1" listener=".\ReqChannel" priority="20"/> <channel ref="msmq" name="msmq_2" listener=".\ReqChannel" priority="20"/> </channels> </application> <channels> <channel id="msmq" type="RKiss.MSMQChannelLib.MSMQReceiver, MSMQChannelLib"/> </channels> </system.runtime.remoting> </configuration>
Client config file:
The client channel is represented by the MSMQSender class located in the MSMQChannelLib asssembly. Its properties are: respond queue is ".\RspChannel" , administration queue is ".\RspChannel", outbound message and its return message are timed to be received within 30 seconds and the channel priority is 10.
<configuration> <system.runtime.remoting> <application > <client> <wellknown type="RemoteObject.RemObject, RemoteObject" url="msmq://./ReqChannel/endpoint" /> </client> <channels> <channel type="RKiss.MSMQChannelLib.MSMQSender, MSMQChannelLib" respond=".\RspChannel" admin=".\AdminChannel" timeout="30" priority="10"/> </channels> </application> </system.runtime.remoting> </configuration>
The MSMQ Remoting channel requires an existing queue on the sender and receiver sides. The administration queue on the sender side is an option. These two queues have to be transactional for the channel using on the Enterprise Network to guarantee delivering a message (one only) to the destination queue. There is a special situation - calling a remoting OneWay attributed method. In this case, there is no return message and the call has a fire&forget design pattern.
The Custom Remoting MSMQ channel concept is based on the MSMQ technology, where queues are accessible on the Enterprise Network from anywhere. The remoting channel using a message passing design pattern between a remote object and its consumer. It's based on the two parts: Sender and Receiver with an interface contract ICannelSender resp. IChannelReceiver from the System.Runtime.Remoting.Channels namespace. Implementation of these two interfaces allows plug-in a particular channel and passing a IMessage object through. Note that IMessage object contains a communication data sent between cooperating message sinks controlled by the Runtime.Remoting.Messaging namespace classes.
The IChannelSender interface allows to call a channel synchronously or asynchronously using the delegate design pattern. Let's look at more details for both options:
Synchronously Call:
The following picture shows an IMessage object flows through the MSMQ remoting channel in the sync manner.
Note that the Receiver can handle also one special case - calling the OneWay attributed remoting method. In this case, the return IMessage object reference is null and it is done immediately without processing the remote method body and also there is no respond message to the sender. However, the client knows (from the assembly metadata) that this message has to be handled asynchronously without any respond. It's very important to understand the behaviour of this attribute which has a fire&forget design pattern. The client in this case doesn't have any information about the remoting method processing such as an error exceptions.
Asynchronously Call:
The following picture shows an IMessage object flows through the MSMQ remoting channel in the async manner.
To process the IMessage object through channel in the asynchronously manner is decided by the client. The ISenderChannel supports an AsyncProcessMessage function which required two arguments: IMessage and IMessageSink objects. As you can see the Sender is divided into two isolated parts and the Receiver is identically to the above Sync Call design.
updating an AsyncResult shared object state by the IMessage object state (Return Message)
setting an AsyncResult.ManualResetEvent object to notify a client that the result of the async call can be retrieved using the EndInvoke function.
The MSMQ Custom Remoting Channel implementation using the System.Messaging namespace classes to communicate with the MSMQ, System.Runtime.Remoting namespace classes to integrated channel into the remoting mechanism and System.Runtime.Serialization namespace classes to serialize/de-serialize messages through the channel. All implementation is built by managed code and package into one assembly named as MSMQChannelLib.
The MSMQChannelLib contains a functionality of the MSMQ remoting channel for server and client side. Its assembly is required to be installed into the GAC at the server and client side. Before using the MSMQ remoting channel, the channel has to be registered either programmatically or administratively. Note that there is no requirement to register a server channel in prior to client channel registration, that's the feature of the loosely coupled connectivity of the MSMQ. However, the MSMQ remoting channel requires in prior of the registration that the Request respectively Respond queue is existed.
As I mentioned earlier this assembly contains two major classes. The following are some details how they been implemented:
This is a derived class from the IChannelSender interface from the System.Runtime.Remoting.Channels namespace. Its implementation is divided into the following parts:
The class has several constructors to config the sender channel programmatically and one constructor for administratively configuration using the config file, here is its code snippet:
public MSMQSender(IDictionary properties, IServerChannelSinkProvider serverSinkProvider) { string pathRQ = DEFAULT_RESPONDCHANNEL; string pathAQ = null; int timeout = DEFAULT_TIMEOUTINSEC; string channelName = DEFAULT_CHANNELNAME; int channelPriority = DEFAULT_CHANNELPRIORITY; // administratively setup the config values (xxx.exe.config file) if(properties.Contains("name")) channelName = properties["name"].ToString(); if(properties.Contains("priority")) channelPriority = Convert.ToInt32(properties["priority"]); if(properties.Contains("respond")) pathRQ = properties["respond"].ToString(); if(properties.Contains("admin")) pathAQ = properties["admin"].ToString(); if(properties.Contains("timeout")) timeout = Convert.ToInt32(properties["timeout"]); Init(channelName, pathRQ, pathAQ, timeout, channelPriority); Trace.WriteLine(string.Format("Client-config: name={0}, respQ={1}, adminQ={2}, timeout={3}, priority={4}", m_ChannelName, pathRQ, pathAQ, timeout, m_ChannelPriority)); }
This constructor is invoked by the following function to pass all custom channel properties specified in the config file via the IDictionary interface:
That's all of the configuration process for remoting channel. It's very straightforward and easy implementation.
This is an implementation of the IChannelSender interface contract. When consumer of the remote object calling the Activator class, as it is shown in the following code snippet,
the call is forward to the following function of the MSMQSender class
// IChannelSender (activation) public virtual IMessageSink CreateMessageSink(String url, Object data, out string objectURI) { objectURI = null; string[] s = url.Split(new Char[]{'/'}); if(s.Length < PATH_MINNUMOFFIELDS || m_ChannelName + ":" != s[0]) return null; // this is not correct channel string outpath = ""; for(int ii = 2; ii < s.Length-1; ii++) { outpath += s[ii]; outpath += "\\"; } outpath = outpath.TrimEnd(new Char[]{'\\'}); objectURI = s[s.Length-1]; MSMQMessageSink msgsink = new MSMQMessageSink(this, objectURI, outpath); Trace.WriteLine(string.Format("Client-CreateMessageSink: url = {0}, sink = {1}", url, msgsink.GetHashCode())); return msgsink; }
to check if the specified url can be handled by this channel. If the channel name is not matching with the url field address, the null is returned. The walking process is repeated through all registered channels until a successful match is found, otherwise the error exception is thrown. In the successful case, the MSMQMessageSink class is instated and its reference is returned to the caller.
The MSMQMessageSink is derived class from the IMessageSink and IDictionary interfaces. When a method call is made on the proxy, the remoting infrastructure passing IMessage object to this class using one of the following ways:
1. SyncProcessMessage
// IMessageSink (MethodCall) public virtual IMessage SyncProcessMessage(IMessage msgReq) { IMessage msgRsp = null; Message outMsg = null; MessageQueueTransaction mqtx = new MessageQueueTransaction(); try { msgReq.Properties[OBJECTURI] = m_ObjectUri; // work around! // send a remoting message mqtx.Begin(); outMsg = new Message(msgReq, new BinaryMessageFormatter()); // create a message outMsg.ResponseQueue = m_parent.ResponseQueue; // response queue outMsg.TimeToBeReceived = m_parent.ResponseTimeOut; // timeout to pick-up a message outMsg.AcknowledgeType = AcknowledgeTypes.NegativeReceive; // notify negative receive on the client/server side outMsg.AdministrationQueue = m_parent.AdminQueue; // admin queue for a time-expired messages string label = msgReq.Properties["__TypeName"] + "." + msgReq.Properties["__MethodName"]; m_OutQueue.Send(outMsg, label, mqtx); // transactional message mqtx.Commit(); Trace.WriteLine(string.Format("Client-Sync:PRE-CALL, msgId={0}", outMsg.Id)); // Wait for a Return Message Thread.Sleep(0); msgRsp = ReceiveReturnMessage(outMsg.Id); Trace.WriteLine(string.Format("Client-Sync:POST-CALL, msgId={0}", outMsg.Id)); } catch (MessageQueueException ex) { Trace.WriteLine(string.Format("Client:SyncProcessMessage error = {0}, msgId = {1}", ex.Message, outMsg.Id)); } catch(Exception ex) { Trace.WriteLine(string.Format("Client:SyncProcessMessage error = {0}, msgId = {1}", ex.Message, outMsg.Id)); } finally { if(mqtx.Status == MessageQueueTransactionStatus.Pending) { mqtx.Abort(); Trace.WriteLine(string.Format("Client:SyncProcessMessage Aborted, msgId = {0}", outMsg.Id)); } m_OutQueue.Close(); } return msgRsp; }
This is a synchronously invoking a remote method with a waiting for its return message within a specified time. As you can see the above code snippet, the outbound message is created and configured for its respond from the endpoint and then sent to the transactional queue. After this, the helper function ReceiveReturnMessage is called to wait for a message with a specified correlation id on the Respond queue. This function returning a reference to IMessage object, which it is returned back to the remoting infrastructure as a ReturnMessage. Note that caller is blocked during the process of the waiting for the respond message.
If the client wants to be pre-emptive with the remoting object, the process of the invoking a remote method needs to be implemented by BeginInvoke/EndInvoke design technique. In this case the following method is called:
2. AsyncProcessMessage
This function has a fire&forget design pattern implemented in two ways: either sending an outbound message without waiting for its respond (OneWay option) or delegating this call to the worker thread. In the both situation, the call is immediately return back to the remoting infrastructure. The following code snippet shows that:
public virtual IMessageCtrl AsyncProcessMessage(IMessage msgReq, IMessageSink replySink) { IMessageCtrl imc = null; if(replySink == null) // OneWayAttribute { MessageQueueTransaction mqtx = new MessageQueueTransaction(); try { mqtx.Begin(); msgReq.Properties[OBJECTURI] = m_ObjectUri; // work around! string label = msgReq.Properties["__TypeName"] + "." + msgReq.Properties["__MethodName"]; m_OutQueue.Send(msgReq, label, mqtx); // transacional message mqtx.Commit(); Trace.WriteLine("Client-[OneWay]Async:CALL"); } catch(Exception ex) { Trace.WriteLine(string.Format("Client:AsyncProcessMessage error = {0}", ex.Message)); } finally { if(mqtx.Status == MessageQueueTransactionStatus.Pending) { mqtx.Abort(); } m_OutQueue.Close(); } } else { // spawn thread (delegate work) delegateAsyncWorker daw = new delegateAsyncWorker(handlerAsyncWorker); daw.BeginInvoke(msgReq, replySink, null, null); } return imc; }
and here is a background process of the asynchronously call. This thread actually call remote method synchronously and after that it is using a replySink to update AsyncResult object state included setting its ManualResetEvent object. After this work the worker thread is going to be terminated itself.
// handler of the AsyncProcessMessage worker private void handlerAsyncWorker(IMessage msgReq, IMessageSink replySink) { AsyncResult ar = replySink.NextSink as AsyncResult; // call Remote Method and wait for its Return Value IMessage msgRsp = SyncProcessMessage(msgReq); // update AsyncResult state (_replyMsg, IsCompleted, waitstate, etc.) replySink.SyncProcessMessage(msgRsp); }
This is a derived class from the IChannelReceiver interface from the System.Runtime.Remoting.Channels namespace. The class has several constructors to config the receiver channel programmatically and one constructor for administratively configuration using the config file. Their design implementation is similarly to the MSMQSender.
The implementation of the MSMQReceiver class is simpler than MSMQSender. The listener run an endless loop in the background thread which is blocked by m_InQueue.Receive() function. When message arrived into the queue, this function will retrieve this message and delegate it to the worker thread in the fire&forget fashion using the BeginInvoke design pattern. The above is shown in the following code snippet:
// Listener private void Run() { try { Thread.CurrentThread.IsBackground = true; while(true) { // Wait for a client's call Message msg = m_InQueue.Receive(); // local queue! delegateDispatchMessage ddm = new delegateDispatchMessage(DispatchMessage); ddm.BeginInvoke(msg, null, null); } } catch(Exception ex) { Trace.WriteLine(string.Format("RemoteObject-MSMQListener error = {0}", ex.Message)); } }
The actually work is done in the following background worker thread:
// Listener worker public override void DispatchMessage(Message msg) { //Message msg = null; MessageQueueTransaction mqtx = new MessageQueueTransaction(); try { // message from the client IMessage msgReq = msg.Body as IMessage; msgReq.Properties["__Uri"] = msgReq.Properties[OBJECTURI]; // work around!!! Trace.WriteLine(string.Format("RemoteObject:PRE-CALL, msgId={0}", msg.Id)); // Dispatch message to the remoting object IMessage msgRsp = ChannelServices.SyncDispatchMessage(msgReq); if(msgRsp != null) { // update this msg with the return value and send it back to the caller mqtx.Begin(); msg.BodyStream.Close(); // clean-up msg.Body = msgRsp; // serialize IMessage msg.CorrelationId = msg.Id; // cookie msg.ResponseQueue.Send(msg, "RET: " + msg.Label, mqtx); // send message mqtx.Commit(); msg.ResponseQueue.Close(); Trace.WriteLine(string.Format("RemoteObject:POST-CALL, msgId={0}", msg.CorrelationId)); } else Trace.WriteLine(string.Format("RemoteObject-[OneWay]: msgId = {0}", msg.Id)); // dump MessageId } catch(MessageQueueException ex) { Trace.WriteLine(string.Format("RemoteObject error = {0}, msgId = {1}", ex.Message, msg.Id)); } catch(Exception ex) { Trace.WriteLine(string.Format("RemoteObject error = {0}, msgId = {1}", ex.Message, msg.Id)); } finally { if(mqtx.Status == MessageQueueTransactionStatus.Pending) { mqtx.Abort(); } } }// DispatchMessage
The primary goal of the above function is to dispatch an arrived IMessage object to the remoting infrastructure in the synchronously manner. The "dispatcher" will return back a return message represented by IMessage object. If the return value is null than nothing to do and thread will be exited, that's the situation of the OneWay attributed remote method. In the other hand, the IMessage object is serialized into the message body and send it back to the Respond queue. Note that setting a message CorrelationId by its Id is very important for the Sender side - this is a callback cookie, which the Sender waiting for it.
Testing the MSMQ Remoting Channel (MSMQChannelLib) can be done replacing your current channel by the MSMQ channel or using the included package of the following assembly:
The Remoting object is very simply class using the Interface contract to make a loosely coupled client/server design.
using RemoteInterface; // interface abstract definition namespace RemoteObject { public class RemObject : MarshalByRefObject, IRemInterface { public RemObject() { } public string SayHello(string msg) { Console.WriteLine("RemObject.SayHello({0})", msg); return "Hello" + " " + msg; } [OneWay] public void OneWay(string msg) { //Thread.Sleep(3000); Console.WriteLine("RemObject.OneWay({0})", msg); } } }
also you must create manually the following MSMQ queues:
Note that this test can be run also using only one machine as a server and client.
After all the above checks, start the server host program and then client program. The client program will ask you to write a number of the test loops, just write 10 and press Enter. You will see all remoting processes how fast running on the server and client console programs. Note that client is running test for each remote method synchronously and asynchronously. After all these test loops, press Enter and the client console will display a test result. It should by 100 for both of them.
You can play more test such as open more server host programs or more client programs and also you can change a channel configuration in the their config files.
In this article has been described how to design, implement and plug-in the MSMQ into the remoting infrastructure. Beside the standard remoting channel such as http and tcp, the MSMQ remoting channel allows to call a remoting object in the loosely coupled design pattern, which is very important in the mobile application. Design and implementation of the Custom Remoting channel using .Net Framework classes is simple and straightforward for any kind of physical channel such can be as serial RS232, USB, X25, modem, etc.
This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.
A list of licenses authors might use can be found here
public virtual IMessage SyncProcessMessage(IMessage msgReq) { ...... Message outMsg=null; outMsg = new Message(msgReq, new BinaryMessageFormatter()); m_OutQueue.Send(outMsg, label, mqtx); ...... }
while(true) { // Wait for client's call Message msg = m_InQueue.Receive();// local queue! delegateDispatchMessage ddm = new delegateDispatchMessage(DispatchMessage); ddm.BeginInvoke(msg, null, null); }
public virtual IMessage SyncProcessMessage(IMessage msgReq) { ...... Message outMsg=null; outMsg = new Message("hello", new BinaryMessageFormatter()); m_OutQueue.Send(outMsg, label, mqtx); ...... }
public virtual IMessage SyncProcessMessage(IMessage msgReq) { Message ms = new Message(); new BinaryMessageFormatter().Write(ms, msgReq); ms.BodyStream.Seek(0, SeekOrigin.Begin); object objA=new BinaryMessageFormatter().Read(ms); }
General News Suggestion Question Bug Answer Joke Praise Rant Admin
Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.


text:
Completely transform your living or restaurant space with this vintage style chair. Adding colorful chairs can rev up any setting. The versatility of this chair easily conforms in different environments. Chairs are lightweight and easily stack for storing. A cross brace underneath the seat adds extra stability and features plastic caps that prevent the finish from scratching when stacked. The frame is designed for all-weather use making it a great option for indoor and outdoor settings. For longevity, care should be taken to protect from long periods of wet weather. The legs have protective floor glides that prevent damage to flooring. So whether you're using this chair for your kitchen, patio or bistro, it is sure to liven up your decor. [CH-31270-BK-GG]
Product Features:
Material & Color:
Warranty: 5 Year Limited (non moving metal parts) 2 yr Parts
Product Dimensions:
Shipping Dimensions:

subset: commoncrawl


text:
Profitable Plumbing
$ Make more money on your very next job $
Are you working 50, 60 or more hours a week? Are you making the money you or your company deserves? Would you like to make more money on every job AND create happier, more loyal customers?
Send it to me now!
Increase your Profits on every job!Learn how to service your customers more completely on every jobLearn how to serve them by selling and installing high profit products they wantDozens of PROFIT BOOSTING ideas and products you can begin using on your very next job!Stop "leaving money on the table"Learn how to spot profit boosting opportunies.Ask the right questionsGet high-end repeat customersTarget HIGH PROFIT businessWritten for every plumber.


text:
Specifies the algorithm for data encryption.
The only padding type that is allowed with Derby is NoPadding.
If no encryption algorithm is specified, the default value is DES/CBC/NoPadding.
For information about data encryption, see "Encrypting databases on disk" in the Derby Developer's Guide.
The encryptionAlgorithm attribute must be combined with the bootPassword=key attribute and the dataEncryption=true attribute. You have the option of also specifying the encryptionProvider=providerName attribute to specify the encryption provider of the algorithm.
For an existing database for which authentication and SQL authorization are both enabled, only the database owner can perform encryption or reencryption. Please see "Enabling user authentication" and "Setting the SQL standard authorization mode" in the Derby Developer's Guide for more information.
-- encrypt a new database jdbc:derby:encryptedDB;create=true;dataEncryption=true; encryptionProvider=com.sun.crypto.provider.SunJCE; encryptionAlgorithm=DESede/CBC/NoPadding; bootPassword=cLo4u922sc23aPe -- configure an existing database for encryption jdbc:derby:salesdb;dataEncryption=true; encryptionProvider=com.sun.crypto.provider.SunJCE; encryptionAlgorithm=DESede/CBC/NoPadding; bootPassword=cLo4u922sc23aPe


text:
TOM KRISHER, AP Auto Writer
DETROIT (AP) — General Motors revealed in court filings late Tuesday that it will soon ask a federal bankruptcy judge to shield the company from legal claims for conduct that occurred before its 2009 bankruptcy.
The automaker's strategy is in a motion filed in a Corpus Christi, Texas, federal court case, and in other cases across the nation that involve the defective ignition switches that have led GM to recall 2.6 million small cars.
The motion asks U.S. District Judge Nelva Gonzales Ramos to delay action on the lawsuit until the bankruptcy court rules and other federal courts decide if the case should be combined with other lawsuits. But GM says it's not asking to halt action on a motion to force GM to tell customers not to drive their cars that are being recalled.
GM has said at least 13 deaths have been linked to the switch problem. The switch can unexpectedly slip out of the "run" position, shutting down the engine, knocking out power-assisted steering and power brakes, and disabling the air bags. GM admits knowing about the problem for at least a decade, but it didn't start recalling the cars, including Chevrolet Cobalts and Saturn Ions, until February.
The company's motion says GM will ask the bankruptcy court in New York to enforce an order made during the 2009 bankruptcy case that split GM into a new company and an old company. Claims from before the bankruptcy would go to "Old GM," called Motors Liquidation Co., while claims after the bankruptcy would go to the new General Motors Co.
"Just like the other 'ignition switch actions' that other plaintiffs have filed in the wake of public reports regarding the outstanding recall, this case relates to a vehicle designed, manufactured, originally sold and advertised by Old GM," the company's motion says.
GM's motion says more than 30 cases have been filed against the company since February.
With the motion, GM is trying to limit its legal liability in the cases while at the same time it considers compensation for families of crash victims. GM has hired Kenneth Feinberg — who handled the fund for the victims of 9/11, the Boston Marathon bombing and the BP oil spill — to explore ways to compensate victims. No decision has been made.
Attorney Robert Hilliard filed the Texas lawsuit on behalf of Charles and Grace Silvas. It claims they are stuck with a defective 2006 Chevrolet Cobalt and seeks repairs, compensation for loss of value and alternative transportation.
Hilliard called GM's motion to send the case to the bankruptcy court a "long shot" and accused GM CEO Mary Barra of directing lawyers to hide behind the bankruptcy. He said he expects a ruling soon on the request for an order for GM to tell owners to keep the recalled cars off the road.
GM has said owners can continue safely using the cars if precautions are taken.


text:
Torture defenders are back on the offensive publishing a book by ex-CIA leaders rebutting a Senate report that denounced the brutal tactics as illegal, inhumane and ineffective. Now, in a memo to President Obama, other U.S. intelligence veterans are siding with the Senate findings and repudiating the torture apologists.
MEMORANDUM FOR: The President
FROM: Veteran Intelligence Professionals for Sanity (VIPS)
SUBJECT: Veteran Intelligence Professionals Challenge CIA's "Rebuttal" on Torture
Former CIA leaders responsible for allowing torture to become part of the 21st Century legacy of the CIA are trying to rehabilitate their tarnished reputations with the release of a new book, Rebuttal: The CIA Responds to the Senate Intelligence Committee's Study of Its Detention and Interrogation Program. They are pushing the lie that the only allegations against them are from a partisan report issued by Democrats from the Senate Intelligence Committee.
President George W. Bush and Vice President Dick Cheney receive an Oval Office briefing from CIA Director George Tenet. Also present is Chief of Staff Andy Card (on right). (White House photo)
We recall the answer of General John Kimmons, the former Deputy Director of Operations for the Joint Chiefs of Staff, who was asked if good intelligence could be obtained from abusive practices. He replied: "I am absolutely convinced the answer to your first question is no. No good intelligence is going to come from abusive practices. I think history tells us that. I think the empirical evidence of the last five years, hard years, tell us that."
But the allegation that the CIA leaders were negligent and guilty was not the work of an isolated group of partisan Democrat Senators. The Senate Intelligence report on torture enjoyed bipartisan support. Senator John McCain, for example, whose own encounter with torture in North Vietnamese prisons scarred him physically and emotionally, embraced and endorsed the work of Senator Feinstein. It was only a small group of intransigent Republicans, led by Saxby Chambliss, who obstructed the work of the Senate Intel Committee.
Indeed, some of us witnessed firsthand during the administration of President George W. Bush that the Senate Select Committee on Intelligence and the House Permanent Select Committee on Intelligence were virtually paralyzed from conducting any meaningful oversight of the CIA and the U.S. Intelligence Community by the Republican members of these committees. Instead, they pursued the clear objective of protecting the Bush administration from any criticism for engaging in torture during the "War on Terror."
It is curious that our former colleagues stridently denounce the work of the Senate Intelligence Committee but are mute with respect to an equally damning report from the CIA's own inspector general, John Helgerson, in 2004.
Helgerson's report, "Counterterrorism Detention and Interrogation Activities (September 2001-October 2003)," was published on May 7, 2004, and classified Top Secret. That report alone is damning of the CIA leadership and it is important to remind all about the specifics of those conclusions. According to the CIA's own Inspector General:
–The Agency's detention and interrogation of terrorists has provided intelligence that has enabled the identification and apprehension of other terrorists and warned of terrorist plots planned in the United States and around the world. . . . The effectiveness of particular interrogation techniques in eliciting information that might not otherwise have been obtained cannot be so easily measured however.
–In addition, some Agency officials are aware of interrogation activities that were outside or beyond the scope of the written DOJ opinion. Officers are concerned that future public revelation of the CTC Program is inevitable and will seriously damage Agency officers' personal reputations, as well as the reputation and effectiveness of the Agency itself.
–By distinction the Agency-especially in the early months of the Program-failed to provide adequate staffing, guidance, and support to those involved with the detention and interrogation of detainees . . .
–The Agency failed to issue in a timely manner comprehensive written guidelines for detention and interrogation activities. . . .Such written guidance as does exist . . . is inadequate.
–During the interrogation of two detainees, the waterboard was used in a manner inconsistent with the written DOJ legal opinion of 1 August 2002.
–Agency officers report that reliance on analytical assessments that were unsupported by credible intelligence may have resulted in the application of EITs without justification.
The CIA's Inspector General makes it very clear that there was a failure by the CIA leaders, who include Director of Central Intelligence George Tenet, Deputy Director of Central Intelligence John McLaughlin, Counter Terrorism Center Chief Cofer Black, Counter Terrorism Center Chief Jose Rodriguez and the Director Directorate of Operations James L. Pavitt. Lack of proper guidance and oversight created fertile soil for subsequent abuses and these men were guilty of failing to properly do their jobs.
We do not have to rely solely on the report of the CIA's Inspector General. In addition, the Report by the Senate Armed Services Committee on Detainee Treatment reached the same conclusions about the origins, evils, harm to U.S. policy and intelligence collection of "enhanced interrogation," a euphemism for "torture" first used by Nazi Germany during World War II.
Indeed, all independent analyses of the enhanced interrogation program have concluded it constituted torture, was ineffective, and contrary to all American laws, ideals, and intelligence practices. We also have the testimony and record of Ali Soufan, an Arabic-speaking FBI Agent, who was involved with several interrogations before torture was used and who achieved substantive results without violating international law.
The sworn testimony of FBI Agent Ali Soufan, who is the only U.S. Government employee to testify under oath on these matters, completely contradicts the authors of Rebuttal:
"In the middle of my interrogation of the high-ranking terrorist Abu Zubaydah at a black-site prison 12 years ago, my intelligence work wasn't just cut short for so-called enhanced interrogation techniques to begin. After I left the black site, those who took over left, too – for 47 days. For personal time and to 'confer with headquarters'.
"For nearly the entire summer of 2002, Abu Zubaydah was kept in isolation. That was valuable lost time, and that doesn't square with claims about the 'ticking bomb scenarios' that were the basis for America's enhanced interrogation program, or with the commitment to getting life-saving, actionable intelligence from valuable detainees. The techniques were justified by those who said Zubaydah 'stopped all cooperation' around the time my fellow FBI agent and I left. If Zubaydah was in isolation the whole time, that's not really a surprise.
"One of the hardest things we struggled to make sense of, back then, was why U.S. officials were authorizing harsh techniques when our interrogations were working and their harsh techniques weren't. The answer, as the long-awaited Senate Intelligence Committee Report now makes clear, is that the architects of the program were taking credit for our success, from the unmasking of Khalid Sheikh Mohammed as the mastermind of 9/11 to the uncovering of the 'dirty bomber' Jose Padilla. The claims made by government officials for years about the efficacy of 'enhanced interrogation', in secret memos and in public, are false. 'Enhanced interrogation' doesn't work."
The former CIA officers who have collaborated on this latest attempt to whitewash the historical record that they embraced and facilitated torture by Americans, are counting on the laziness of the press and the American public. As long as no one takes time to actually read the extensively footnoted and documented report by the Senate Intelligence Committee, then it is easy to buy into the fantasy that the CIA officers are simply victims of a political vendetta.
These officers are also counting on a segment of the American people – repeatedly identified in polling results – that continues to believe torture works. Such people have no proof that it works (because there is none that it works consistently and effectively), they simply believe it instinctively or because of people such as this book's authors' arguments to that effect.
That is why it is so important that the truth be told and this book and its arguments be debunked. Americans must learn the realities of torture – that it rarely if ever works, that it dehumanizes the torturer as well as the tortured, that it increases the numbers and hostility of our opponents while providing no benefit, and that it seriously diminishes America's reputation in the world and thus its power. Torture is wrong and the men who wrote this book are wrong.
The book, Rebuttal, is a new incarnation of the lie extolling the efficacy of torture. In the immediate aftermath of the attacks on Sept. 11, 2001, a time of perceived crisis and palpable fear, the leaders of the CIA decided to ignore international and domestic law. They chose to discard the moral foundations of our Republic and, using the same justifications that authoritarian regimes have employed for attacking enemies, and embarked willingly on a course of action that embraced practices that in earlier times the United States had condemned and punished as a violation of U.S. laws and fundamental human rights.
As former intelligence officers, we are compelled by conscience to denounce the actions and words of our former colleagues. In their minds they have found a way to rationalize and justify torture. We say there is no excuse; there is no justification. The heart of good intelligence work — whether collection or analysis — is based in the pursuit of truth, not the fabrication of a lie.
It is to this end that we reiterate that no threat, no matter how grave, should serve to justify inhuman behavior and immoral conduct or torture conducted by Americans.
For the Steering Group, Veteran Intelligence Professionals for Sanity (VIPS)
Fulton Armstrong, National Intelligence Officer for Latin America (ret.)
William Binney, former Technical Director, World Geopolitical & Military Analysis, NSA; co-founder, SIGINT Automation Research Center (ret.)
Tony Camerino, former Air Force and Air Force Reserves, a senior interrogator in Iraq and author of How to Break a Terrorist under pseudonym Matthew Alexander
Glenn L. Carle, Deputy National Intelligence Officer for Transnational Threats, CIA (ret.)
Thomas Drake, former Senior Executive, NSA
Daniel Ellsberg, former State Department and Defense Department Official (VIPS Associate)
Philip Giraldi, CIA, Operations Officer (ret.)
Matthew Hoh, former Capt., USMC, Iraq & Foreign Service Officer, Afghanistan (associate VIPS)
Larry C Johnson, CIA & State Department (ret.)
Michael S. Kearns, Captain, USAF Intelligence Agency (Retired), ex Master SERE Instructor
John Kiriakou, Former CIA Counterterrorism Officer
Karen Kwiatkowski, Lt. Col., US Air Force (ret.)
Edward Loomis, NSA, Cryptologic Computer Scientist (ret.)
David MacMichael, National Intelligence Council (ret.)
James Marcinkowski, Attorney, former CIA Operations Officer
Ray McGovern, former US Army infantry/intelligence officer & CIA analyst (ret.)
Elizabeth Murray, Deputy National Intelligence Officer for Middle East,CIA (ret.)
Todd Pierce, MAJ, US Army Judge Advocate (ret.)
Scott Ritter, former Maj., USMC, former UN Weapon Inspector, Iraq
Diane Roark, former professional staff, House Permanent Select Committee on Intelligence
Coleen Rowley, Division Counsel & Special Agent, FBI (ret.)
Ali Soufan, former FBI Special Agent
Robert David Steele, former CIA Operations Officer
Greg Thielmann, U.S. Foreign Service Officer (ret.) and former Senate Intelligence Committee
Peter Van Buren, U.S. Department of State, Foreign Service Officer (ret.) (associate VIPS)
Lawrence Wilkerson, Colonel (USA, ret.), Distinguished Visiting Professor, College of William and Mary
Valerie Plame Wilson, CIA Operations Officer (ret.)
Ann Wright, U.S. Army Reserve Colonel (ret) and former U.S. Diplomat


text:
Laws That Protect You
Federal and state fair housing laws were put into effect to create an even playing field for homebuyers in all areas of a real estate transaction. These laws prohibit discrimination based on race, color, religion, sex, disability, familial status, and national origin.
Civil Rights Act of 1866
The federal Civil Rights Act of 1866 prohibits all racial discrimination in the sale or rental of property.
Civil Rights Act of 1968 and 1988 Amendment
In leasing or selling residential property, the Civil Rights Act of 1968 expands the definition of discrimination to include not only race, but also national origin, color, and religion. The Fair Housing Amendments Act of 1988 further broadens the definition to include age, sex, and handicapped status.
Fair Housing Act
The federal Fair Housing Act of 1988 and Title VIII of the Civil Rights Act of 1968 constitute the Fair Housing Act. The Act makes fair housing a national policy throughout the U.S. It prohibits discrimination in the sale, lease, or rental of housing, or making housing otherwise unavailable because of race, color, religion, sex, disability, familial status, or national origin.
Americans with Disabilities Act
Title III of the federal Americans with Disabilities Act prohibits discrimination against persons with disabilities in commercial facilities and places of public accommodation.
Equal Credit Opportunity Act
The federal Equal Credit Opportunity Act makes it unlawful to discriminate against anyone on a credit application due to race, color, religion, national origin, sex, marital status, age or because all or part of an applicant's income comes from any public assistance program.
Know Your Rights and Responsibilities
Homesellers, prospective homebuyers, real estate agents, mortgage brokers, and loan officers all have rights and responsibilities under the law.
Sellers' Responsibilities
As a home seller or landlord, you are obligated not to discriminate in the sale, rental, or financing of your property on the basis of race, color, religion, sex, disability, familial status, or national origin. Also, you cannot do so through your licensed broker or salesperson, who is also bound by anti-discrimination laws. You may not set any discriminatory terms or conditions in a purchase contract or a lease. Additionally, you may not deny that housing is available or advertise a property's availability only to persons of a certain race, color, religion, sex, disability, familial status, or national origin.
Real Estate Professionals' Responsibilities
Real Estate agents, mortgage brokers, and loan officers in a real estate transaction may not discriminate on the basis of race, color, religion, sex, disability, familial status, or national origin. Equally as important, they may not follow such instructions from a home seller or landlord.
What To Do if You Feel the Law Has Been Violated
Discrimination complaints about housing may be filed with the nearest office of the U.S. Dept. of Housing and Urban Development (HUD) or by calling HUD's telephone numbers, (202)708-1112 (Voice) or (202)708-1455 (TTY). Or contact HUD on the Internet at http://www.hud.gov/fhe/fheo.html.


text:
Created by Koji Igarashi, who devised the long-running series, Castlevania: Portrait of Ruin gives the player control of two different characters. The pair – vampire hunter Jonathan Morris and Charlotte Orlean, a young girl with magical abilities – must work to thwart a plan to resurrect Dracula's Castle and unleash a reign of evil upon the unsuspecting world, all within a new World War II setting.
The new setting captures the chaos and suffering the era, with thousands of lost souls wandering the world in search of salvation. Desperate to escape the limbo within their exist, the misguided spirits seek to rebuild Dracula's Castle from its ruins, and are lead by a pair of evil Vampire sisters out to resurrect their master's home for their own nefarious plans. Thrown together, Jonathan and Charlotte must combine their unusual skill sets to defeat the plans and restore harmony.
Retaining the same 2D platform realms for which the series is famed, Castlevania: Portrait of Ruin uses a side-on view to oversee the scrolling stages. Players can switch freely between Jonathan and Charlotte as they progress through the levels, using their skills when appropriate. In addition to Jonathan's weapon expertise and Charlotte's spell-casting, both characters can utilise all-new 'Summon' attacks to raise demons to assist them against the Vampire sisters' army. Similarly, more conventional weapons can also be found on route, and saved for use against the hardier monsters that await in the shadows.
Featuring all-new locations and a cast of over 100 different adversaries, Castlevania: Portrait of Ruin marks a welcome return to the DS for the series. Igarashi's Castlevania: Dawn of Sorrow has already enjoyed massive success for the format, and his new epic is certain to wow Nintendo users when it is released on December 5, 2006.


text: You do not have permission to edit this page, for the following reasons: The action you have requested is limited to users in one of the groups: Users, Administrators, editor, reviewer. Wiki has restricted the ability to create new pages. You can go back and edit an existing page, or log in or create an account.


text:
The Vaponic is a reliable and well thought-out portable vaporizer… Check out our video section! Its patented double airstream vaporizing system based on heat convection and conduction will allow you to inhale cooled, strong and tasty vapor from your herbal blends or tobacco. There's no direct contact between the flame and the air you inhale. This and the fact that only safe materials of superior quality are used (Borosilicate 3.3. glass, stainless steel and medical silicone caoutchouc) keeps the vapor as clean and healthy as possible. The Vaponic is proudly made in Europe and under strict quality control. You'll be surprised by it's efficiency and easy handling. Vaporizing is a healthy alternative to smoking by avoiding combustion.
The compounds of the tobacco are heated up to the point where they start boiling and turn into vapor. This happens below combustion temperature, the plant will not burn and you won't inhale smoke. The vapor you inhale is pure and only contains the plants substances. You avoid exposing yourself to toxic combustion by-products as tar and other carcinogens.
The Vaponic has a two-year warranty on the glass pieces, the rubber pieces and the marker shaped case.


text:
Friday 24 April 2009
God is in the Details
At number 37 Rue de la Victoire, a teal-blue refurbished cruise liner sits waiting for passengers and a chance to set sail again. Created in 1958 by the architects Jean Balladur and Benjamin Lebeigle, this lightweight, elegantly curved creation was a revolution when it arrived in the city. This was the first entirely moduble building in Paris with no internal structural posts. Built around a steel skeleton, with a flexible skin of glass and steel stretched across the frame, it was nevertheless inside that the difference could truly be appreciated. The Caisse Centrale de Réassurance, who moved into the structure, were able to appropriate the space as they wished, throwing up temporary non-supporting dividing walls wherever they were needed.
Reflected in the glass façade of this building is the far more imposing structure of the Grande Synagogue de Paris. Built between 1867 and 1874 by the architect Alfred-Philibert Aldrophe in Romanesque/Byzantine style, this is a building that had a slightly more troubled beginning. As part of Haussmann's 19th century regeneration of Paris, it was planned that the city's 20,000 strong Jewish community would have a building of their own to be proud of. Paid for by both the city of Paris and the Rothschild family, it was to have its entrance on the new, wider Rue de Chateaudun, but the Empress Eugénie judged it to be inappropriate to place a Jewish place of worship between the Trinité and Notre Dame de Lorette churches. The original plan was therefore turned around 180°, and the entrance was finally situated on the quiet Rue de la Victoire backstreet.
A common expression in Paris at the time of the Synagogue's construction was "triste comme la Victoire" (as sad as la Victoire), emphasising the quiet and unfashionable aspect of this district. It was also to brighten up this area that Balladur and Lebeigle chose an unusual and colourful shiplike structure for their creation. Balladur had been taught by Sartre at the Lycée Condorcet and was influenced by both Le Corbusier and the German king of minimal, Mies Van Der Rohe. The theories of both architects found their way into this construction. From Van Der Rohe, the skin and bones, the lightness and the clarity. From Le Corbusier, the usage of his modulor system. All of the measurements in this building, from the staircase in the entrance to the balconies on the higher levels were calculated according to Le Corbusier's theory. This openness and minimalism is certainly not reflected in the heavy stone temple opposite.
Across the façade of the building is an inscription in Hebrew taken from Genesis; "This is none other than the house of God; this is the gate of heaven". Missing is the phrase which comes just before this which reads 'how dreadful (awe inspiring) is this place'. The Grande Synagogue de Paris has become the centre of the Jewish faith in Paris, but its impenitrability has also turned it into a kind of fortress. It is the second biggest such structure in Europe, with space for over 5,000 people, but whilst the outside is solid and well protected, the insides are supposedly light and simply decorated. Unfortunately, although it is possible to visit the building today, you will need an official invitation to enter if you are not a member of the local Jewish community. It is not clear whether this is to protect the integrity of the building and the strict rules of the faith or simply for more mundane security reasons, although the permenant police guards around the building point towards the latter.
Turning back towards number 37, the rather sad, empty state of this building is due to the vagaries of fashion rather than questions of security. Following a recent renovation it is in as perfect condition today as it was when inaugurated 50 years ago, but it is now struggling to find new residents. Such buildings have become commonplace, and what was innovative has slowly become charmingly retro. It is though still a remarkable building, with stacked balconies on the higher levels leading up towards a rooftop terrace that gives wonderful views across the city as well as the impression of standing on the bow of a ship.
When describing his buildings, Van Der Rohe said that God was in the details. For Le Corbusier, the details were natural and mathematical. Following Da Vinci's Vitruvian Man theories, he stated that buildings should have a "range of harmonious measurements to suit the human scale". But what about the human mind? Balladur may have looked across at the Synagogue opposite his building when it was finished and remembered that Sartre had only become his teacher because the wartime Vichy government had made it impossible for his school to continue employing the Jewish teacher he replaced. When we look carefully today at his building we can see that many details are reflected in the windows. Some of them are tiny, and some unimaginably large.
8 comments:
- martha said...
The Balladur is SO beautiful. It's tragic that intelligent tennants can't b fund to take on a cherish such a wonderful building. The synagogue...Is. It looks like so many other synagogues I've seen in NYC and Berlin. for that matter the Berlin one is more attractive.
Very thought-provoking post. - 25 April 2009 at 11:22
- Cergie said...
Aha ! Le modulor fait 1m83, comme mon plus jeune fils ! Ma fille voit le couvent de la Tourette depuis la fenêtre de sa chambre à l'Arbesle près de Lyon, et bien sûr nous avons visité : le module se sent, dans les hauteurs, la taille des cellules, le rythme des façades, ce n'est pas désagréable, cela donne une harmonie générale. Et la construction est aérienne. Cependant le soleil lui réussit mieux que la grisaille de l'hiver.
Tu parles de 2 immeubles que tout oppose. Cela me fait penser (tes photos) ce que je t'ai sans doute déjà dit : l'invisibilité est peut-être l'art de réfléchir de renvoyer l'image de l'autre ou du ciel. Tes deux immeubles se renvoient l'un l'autre surtout l'un plus que l'autre....
Tu parles de structure légère... Pour avoir travaillé dans un immeuble très haut (l'immeuble Prouvé à Nancy) bâti sur ce type, je te dis que cela fait peur : quelle résistance / feu ? Les établissements de type Pailleron particulièrement dangereux sont la preuve qu'il y a un problème à ce niveau là. - 25 April 2009 at 15:46
- Starman said...
I really like both these buildings. Perhaps when the economy turns around, something will be made of them, although that may be awhile since predictions indicate that Europe hasn't really gotten to their main depressive stage as yet.
- 25 April 2009 at 19:27
- Squirrel said...
I have to admit to liking both buildings , as Starman said, & hopefully...
- 26 April 2009 at 03:31
- Squirrel said...
I truly love the first and last photos--the traffic light and contrastiness of the first shot--magnifique!
- 26 April 2009 at 03:33
- PeterParis said...
Not many - me included - would have come to look so closely on the 1958 building! But, you were right in doing so; especially knowing (or learning) that it dates from 50 years ago makes it quite remarkable!
- 27 April 2009 at 11:33
- May said...
I believe you have it wrong saying there is no steel structure inside. In the plan, it looks like there are a few far-apart steel posts. So, there would be no load-bearing WALLS, which allows for movable partitions. It's already pretty good! Before him, August Perret had been the first to use concrete posts that allowed the flexibility of no load-bearing walls (apartment building on rue Franklin, 1904), and Mies' Crown Hall has the steel structure on the outside (the roof), where you truly have no posts inside. Then you got Beaubourg where every single function is outside, so the inside is totally free. Thanks for the awesome pictures.
- 18 September 2009 at 17:10
- Liaudet David said...
Oui évidement ce très bel immeuble est bien différent de la Grande Motte.
l'oeuvre de Monsieur Balladur dans cette ville y est pourtant remarquable d'un point de vue formel et urbain.
J'aime finalement cette vision utopiste devenu réalité.
la réalité qui d'ailleurs ne l'épargne pas puisqu'aujourd'hui il semble que cette ville souffre manifestement d'un vrai regard sur son origine et son esthétique.
Mais oui cet immeuble est beau et bien curieusement implanté. Il est toujours surprenant de le voir arrivé. - 16 November 2009 at 17:51


text:
Push to Punish Pakistan Diminishes
Democrats and Republicans alike Wednesday warned against knee-jerk calls for an end to aid to Pakistan, reminding angry colleagues that the troubled government remains an essential partner in the war on terrorism.
Since it was announced Sunday evening that U.S. special operations forces had killed Osama bin Laden in a suburb of the Pakistani capital Islamabad, the public outcry against the country has grown. Lawmakers have already scheduled hearings into whether government officials — many of whom lived within miles of bin Laden for the past five years — knew the wanted terrorist was living there, and members of both parties have demanded an end to the more than $1 billion in aid Pakistan receives yearly.
But on Wednesday, several key lawmakers in both parties warned that it is too soon to retaliate.
"There's suspicions that some of the people in the government knew he was there," Congressional Pakistan Caucus Co-Chairman Dan Burton said. "Some probably did."
Nevertheless, the Indiana Republican doesn't favor swift reprisal.
"I really believe we've got to take a breath, take a look at the United States' interests in the long term [and] take a look at the big picture," he said. "And I just don't think we can make that decision yet."
House Armed Services Chairman Buck McKeon said, "I think people who have been married 30 years still have some problems, but they don't get divorced."
The California Republican, who met with Pakistan's defense minister Wednesday, said it's important that what is said in private between two countries remain private, but he said that publicly it is important to work things out.
"People need to keep their eyes on the ultimate goal to defeat the Taliban and the war on terrorism," McKeon said.
Democrats also warned against rash reactions.
"People either knew, were working with bin Laden, or they were extremely incompetent," Rep. Dutch Ruppersberger said. "I hope they were incompetent."
Ruppersberger, ranking member of the House Intelligence Committee, argued that "just like we needed Turkey to go into Iraq," Pakistan remains the primary supply route for U.S. forces in Afghanistan. Any move the U.S. makes to cut funding to Pakistan could put that strategic asset in jeopardy.
On a more political level, the Maryland Democrat also argued the current crisis in the U.S.-Pakistan relationship could prove to be an opportunity "to reset our relationship with Pakistan, which has been deteriorating for several months now."
U.S. officials should use the situation to bluntly warn Pakistani officials that "we give you money. We helped you with your floods. There comes a time when you need to do more, to step up."
Sen. Claire McCaskill said that while there is "a lot of hot air around here about how to get to the bottom of it," Members need to be cautious given Pakistan's strategic importance.
"We have to be really careful here. We have to go through Pakistan to supply our troops. We have to keep our eye on the ball here. They have nuclear capability. They are in a very dangerous part of the world," the Missouri Democrat said.
"We have thousands of men and women at risk in Afghanistan right now. So I just think that we need to be very calm and deliberative about how we examine the whole situation with our relationship with Pakistan," she added.
Pakistan was also taking steps to shore up its relations with the U.S. on Wednesday, tasking veteran lobbyist Mark Siegel with mending fences and rebutting claims that top officials knew bin Laden was in the country.
"I'm answering a lot of questions trying to disabuse people of speculation," said Siegel, who heads a seven-member team at Locke Lord Strategies that works on the Pakistan portfolio.
Siegel, who reports to the Pakistani ambassador to the United States, acknowledged that recent events have increased tensions between the countries.
"Obviously there is a crisis of relations," he said, noting that Ambassador Husain Haqqani has also been meeting with Members to reassure them.
He said the Pakistani government is conducting investigations regarding intelligence shortcomings to make sure such lapses don't happen again.
Siegel would not say specifically whom he was meeting with on Capitol Hill but said it was with staffers and members of relevant committees.
Over the years, Siegel and his firm have been aggressive advocates for U.S. aid to Pakistan, meeting with and sending emails to staff and Members, according to Foreign Agents Registration Act filings with the Justice Department. He has met with Senate staff over the years. Between November 2009 and August 2010, the firm was paid $992,000 by the Pakistani government for its services, the filings show.
Alex Knott contributed to this report.


text:
Alliott Partellas Kiliaris Ltd established in 1994 and is an expanding firm of accountants, auditors, tax consultants an... See more about
Arsen Theofanidis LLC occupies one of the leading positions among law firms for Russian-speaking clients. The company's ... See more about
A & C CHRISTOFI LTD is a fast-growing professional services company based in Limassol, Cyprus. The company is a memb... See more about
A.G. Erotocritou LLC has firmly established itself as a βtop tierβ leading law firm in Cyprus, having cultivated an ... See more about
AF has a strong foundation of audit experience providing audit services for companies across various industries. We tail... See more about
Our firm, Agisilaos Demetriou & Co Ltd, has been established since April 1980, and since then we have been giving ap... See more about Agisilaos E. Demetriou F.C.A
AMG Mylonas & Associates LLC is an independent boutique business law firm based in Limassol, Cyprus. Our law practic... See more about
Andersen Business Audit Services Limited is one of Cyprusβ most respected audit firms, providing services of the highe... See more about
See more about
Andreas Demetriades & Co LLC is one of the largest Law Firms situated in the District of Paphos, Cyprus and it was e... See more about
Best Links
We use cookies that help us deliver our services. By using our services, you agree to our use of cookies.


text:
There is more to our carbon headsets than their striking good looks. From top to bottom, Box One™ Carbon Headsets was designed to perform. Each unit features a custom CNC-machined aluminum compression cap in the shape of the Box logo with cut-outs to reduce weight. At the center of the compression cap is an anodized aluminum bolt that threads into a gold anodized aluminum expander plug. This expander eliminates the need for a star nut and works with all 1-1/8-inch steerer tubes—even carbon fiber steerer tubes.
The bearing cover is crafted from carbon fiber, which not only adds style but helps shave weight.
At the heart of the headset are two super-smooth, titanium-nitride coated, sealed, 45×45 bearings. The titanium coating results in a low friction coefficient, increased corrosion resistance, and smoother rolling bearings.
A split crown race makes installation and removal from forks super easy.
- Durable Titanium-Nitride Coated Sealed Bearings
- Lightweight Non-Structural Carbon Components
- Reusable Expander Wedge
- Bearing Angle: 45° x 45°
- Compression Cap: CNC-Machined
- Bearing Cover: Carbon Fiber
- Expansion Plug: Aluminum
- Compression Cap: Aluminum
- Finish: TiN Bearings
- Weight 94 g / 3.3 oz
Part Numbers
Option | UPC | MPN |
Black / IS42/28.6 | 639266090939 | BX-HS14GC118-BK |


text:
Sunday, January 29
Weekend Moments: Taking it easy...
13 comments:
- Sonja said...
OH my gosh! I'm so jealous! I've been dreaming of getting to see the northern lights! Looks like such a fun and relaxing weekend!!!!!
- January 29, 2012 at 10:21 PM
- Anita said...
Northern Lights! Oh my godddd, it's so pretty :)
http://xtheperfectmess.blogspot.com - January 30, 2012 at 1:17 AM
I'm still amazed of how outdoorsy are you up north :)
Food looks amazing! - January 30, 2012 at 3:40 AM
beautiful photos. I've never seen northern lights when I was in Canada in winter. one day!!!!
- January 30, 2012 at 6:03 AM
- Ashleigh said...
This sounds absolutley lovely. The burrito's look amazing and even as cold as it is, it's still sooo beautiful outside! I totally want to kite surf!
- January 30, 2012 at 11:27 AM
- Tiffany Kadani said...
New neighbors! Yay! I wonder what the heck they're doing all the way up there. Looks like a perfect dinner party.
- January 30, 2012 at 11:37 AM
- Lemanie said...
I'm suddenly obsessed with the Northern Lights lately! You are so lucky you get to see them!!!! Down in southern NY we get a red tint to the night sky but to see the real colors moving around...it's gotta be so cool!!! =)
- January 30, 2012 at 12:34 PM
- House of Milk said...
WOW! Can I trade my weekend for your weekend please? Amazing photos. Everything looks so lovely.
- January 30, 2012 at 2:57 PM
- Pinecone Camp said...
Your weekend looks pretty flipping magical. Holy aurora borealis! So beautiful.
- January 30, 2012 at 5:40 PM
- Punctuation Mark said...
great landscape!
- January 30, 2012 at 7:36 PM
- Erin said...
Sounds like a fantastic weekend. You guys are really making the most of your far North experience! Beautiful pictures, too!
- January 30, 2012 at 10:37 PM
- Sal {Daniel and I} said...
Wow! I would love to see the northern lights one day - what a delight it must be to see them frequently!
Sal x - February 3, 2012 at 8:51 PM
I agree with you Sonja that entire experience is a dream for me, a dream I truly hope comes true some day soon (including the husband)
- September 24, 2012 at 8:53 PM


text:
Introduction to wireless networking
Wireless networking on Linux is usually pretty straightforward. There are three ways of configuring wifi: graphical clients, text-mode interfaces, and command-line interfaces.
The easiest way is to use a graphical client once a desktop environment is installed. Most graphical clients, such as NetworkManager, are pretty self-explanatory. They offer a handy point-and-click interface that gets users on a network in just a few seconds.
NetworkManager offers text-mode or command-line interface utilities in addition to the main graphical interface. Emerge the net-misc/networkmanager package with the
USE flag enabled. The nmtui utility is particularly useful for folks who do not use a X or Wayland based desktop environment, but still desire an easy-to-use tool that does not require hand-editing configuration files.Wireless can also be configured from the command line by editing a few configuration files. This takes a bit more time to setup, but it also requires the fewest packages to download and install. Since the graphical clients are mostly self-explanatory (with helpful screen shots at their home pages), we'll focus on the command line alternatives.
There are three tools that support command-line driven wireless configurations: net-wireless/iw, net-wireless/wireless-tools, and net-wireless/wpa_supplicant. Of these three, net-wireless/wpa_supplicant is the preferred one. The important thing to remember is that wireless networks are configured on a global basis and not an interface basis.
The net-wireless/iw software, the successor of net-wireless/wireless-tools, supports nearly all cards and drivers, but it cannot connect to WPA-only Access Points. If the networks only offer WEP encryption or are completely open, then net-wireless/iw beats the other package over simplicity.
Some wireless cards are deactivated by default. To activate them, please consult the hardware documentation. Some of these cards can be unblocked using the rfkill application. If that is the case, use rfkill list to see the available cards and rfkill unblock INDEX to activate the wireless functionality. If not, then the wireless card might need to be unlocked through a button, switch or special key combination on the laptop.
WPA supplicant
The WPA supplicant project provides a package that allows users to connect to WPA enabled access points.
root #
emerge --ask net-wireless/wpa_supplicant
It is necessary to have CONFIG_PACKET enabled in the kernel for wpa_supplicant to work. To see if it is enabled on the current kernel, try:
root #
zgrep CONFIG_PACKET /proc/config.gz
root #
grep CONFIG_PACKET /usr/src/linux/.config
Depending on the USE flags, wpa_supplicant can install a graphical interface written in Qt5, which will integrate nicely with KDE. To get it, enable
for the net-wireless/wpa_supplicant package.Next, configure /etc/conf.d/net so that the wpa_supplicant module is preferred over wireless-tools (if both are installed, wireless-tools is the default).
# Prefer wpa_supplicant over wireless-tools
When using the host-ap driver it is necessary to put the card in Managed mode before it can be used with wpa_supplicant correctly. This can be achieved by setting
iwconfig_eth0="mode managed"
in /etc/conf.d/net.Next configure wpa_supplicant itself (which is a bit more tricky depending on how secure the Access Points are). The below example is taken and simplified from /usr/share/doc/wpa_supplicant-<version>/wpa_supplicant.conf.gz which ships with wpa_supplicant.
# The below line not be changed otherwise wpa_supplicant refuses to work
# Ensure that only root can read the WPA configuration
# Let wpa_supplicant take care of scanning and AP selection
# Simple case: WPA-PSK, PSK as an ASCII passphrase, allow all valid ciphers
psk="very secret passphrase"
# The higher the priority the sooner we are matched
# Same as previous, but request SSID-specific scanning (for APs that reject
# broadcast SSID)
ssid="second ssid"
psk="very secret passphrase"
# Only WPA-PSK is used. Any valid cipher combination is accepted
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
# Plaintext connection (no WPA, no IEEE 802.1X)
# Shared WEP key connection (no WPA, no IEEE 802.1X)
# Keys in quotes are ASCII keys
# Keys specified without quotes are hex keys
# Shared WEP key connection (no WPA, no IEEE 802.1X) using Shared Key
# IEEE 802.11 authentication
# IBSS/ad-hoc network with WPA-None/TKIP
ssid="test adhoc"
psk="secret passphrase"
Wireless tools
Initial setup and managed mode
The wireless tools project provides a generic way to configure basic wireless interfaces up to the WEP security level. While WEP is a weak security method it's still prevalent in the world.
Wireless tools configuration is controlled by a few main variables. The sample configuration file below should describe all that is needed. One thing to bear in mind is that no configuration means "connect to the strongest unencrypted Access Point" - wireless tools will always try and connect the system to something.
root #
emerge --ask net-wireless/wireless-tools
Although net-wireless/iw is the current tool for the wireless stack, net-misc/netifrc before version 0.6.0 does not work with the new commands. net-wireless/wireless-tools must be used with netifrc with earlier versions. For more information consult the variable name documentation.
# Prefer iwconfig over wpa_supplicant
# Configure WEP keys for Access Points called ESSID1 and ESSID2
# You may configure up to 4 WEP keys, but only 1 can be active at
# any time so we supply a default index of [1] to set key [1] and then
# again afterwards to change the active key to [1]
# We do this incase you define other ESSID's to use WEP keys other than 1
# Prefixing the key with s: means it's an ASCII key, otherwise a HEX key
# enc open specified open security (most secure)
# enc restricted specified restricted security (least secure)
key_ESSID1="[1] s:yourkeyhere key [1] enc open"
key_ESSID2="[1] aaaa-bbbb-cccc-dd key [1] enc restricted"
# The below only work when we scan for available Access Points
# Sometimes more than one Access Point is visible so we need to
# define a preferred order to connect in
preferred_aps="'ESSID1' 'ESSID2'"
Fine-tune AP selection
It is possible to add some extra options to fine-tune the AP selection, but these are not required.
One way is to configure the system so it only connects to preferred APs. By default if everything configured has failed and wireless-tools can connect to an unencrypted Access Point then it will. This can be controlled by the associate_order variable. Here's a table of values and how they control this.
Value | Description |
any | Default behavior. |
preferredonly | Only connect to visible APs in the preferred list. |
forcepreferred | Forceably connect to APs in the preferred order if they are not found in a scan. |
forcepreferredonly | Do not scan for APs - instead just try to connect to each one in order. |
forceany | Same as forcepreferred + connect to any other available AP. |
There is also the blacklist_aps and unique_ap selection. blacklist_aps works in a similar way to preferred_aps. unique_ap is a yes or no value that says if a second wireless interface can connect to the same Access Point as the first interface.
# Sometimes you never want to connect to certain access points
blacklist_aps="'ESSID3' 'ESSID4'"
# If you have more than one wireless card, you can say if you want
# to allow each card to associate with the same Access Point or not
# Values are "yes" and "no"
# Default is "yes"
Ad-hoc and master modes
To set the system up as an ad-hoc node when it fails to connect to any Access Point in managed mode, use this as a fallback:
adhoc_essid_eth0="This Adhoc Node"
It is also possible to connect to ad-hoc networks, or to run the system in master mode so it becomes an access point itself.
# Set the mode - can be managed (default), ad-hoc or master
# Not all drivers support all modes
# Set the ESSID of the interface
# In managed mode, this forces the interface to try and connect to the
# specified ESSID and nothing else
essid_eth0="This Adhoc Node"
# We use channel 3 if you don't specify one
An important resource about channel selection is the BSD wavelan documentation found at the NetBSD documentation. There are 14 channels possible; We are told that channels 1-11 are legal for North America, channels 1-13 for most of Europe, channels 10-13 for France, and only channel 14 for Japan. If in doubt, please refer to the documentation that came with the card or access point. Make sure that the channel selected is the same channel the access point (or the other card in an ad-hoc network) is on. The default for cards sold in North America and most of Europe is 3; the default for cards sold in France is 11, and the default for cards sold in Japan is 14.
Troubleshooting wireless tools
There are some more variables that can help to get the wireless up and running due to driver or environment problems. Here's a table of other things that can be tried.
Variable name | Default value | Description |
iwconfig_eth0 | See the iwconfig man page for details on what to send iwconfig. | |
iwpriv_eth0 | See the iwpriv man page for details on what to send iwpriv. | |
sleep_scan_eth0 | 0 | The number of seconds to sleep before attempting to scan. This is needed when the driver/firmware needs more time to active before it can be used. |
sleep_associate_eth0 | 5 | The number of seconds to wait for the interface to associate with the Access Point before moving onto the next one. |
associate_test_eth0 | MAC | Some drivers do not reset the MAC address associated with an invalid one when they lose or attempt association. Some drivers do not reset the quality level when they lose or attempt association. Valid settings are MAC, quality and all. |
scan_mode_eth0 | Some drivers have to scan in ad-hoc mode, so if scanning fails try setting ad-hoc here. | |
iwpriv_scan_pre_eth0 | Sends some iwpriv commands to the interface before scanning. See the iwpriv man page for more details. | |
iwpriv_scan_post_eth0 | Sends some iwpriv commands to the interface after scanning. See the iwpriv man page for more details. |
Defining network configuration per ESSID
In this section, we show how to configure network settings based on the ESSID. For instance, with the wireless network with ESSID ESSID1 configure a static IP address while ESSID ESSID2 uses DHCP.
This works with both wpa_supplicant as well as wireless-tools
Please consult the variable name documentation.
config_ESSID1="192.168.0.3/24 brd 192.168.0.255"
routes_ESSID1="default via 192.168.0.1"
fallback_route_ESSID2="default via 192.168.3.1"
# We can define nameservers and other things too
# NOTE: DHCP will override these unless it's told not to
dns_servers_ESSID1="192.168.0.1 192.168.0.2"
dns_search_domains_ESSID1="search.this.domain search.that.domain"
# You override by the MAC address of the Access Point
# This handy if you goto different locations that have the same ESSID
dhcpcd_001122334455="-t 10"
dns_servers_001122334455="192.168.0.1 192.168.0.2"


text:
Running the Bitbucket Server installer
This page provides information about running the Bitbucket Server with search installer. For high-level information about installing and using Bitbucket Server see Getting started.
Installers are available for Linux, macOS and Windows operating systems.
The installer will:
- Install Bitbucket Server into a fresh directory, even if you have an earlier version of Bitbucket Server installed.
- Install a supported version of the Java JRE, which is only available to Bitbucket Server, if necessary.
- Install a bundled, local instance of Elasticsearch.
- Launch Bitbucket Server when it finishes.
Additional services provided by the installer, and described on this page, are:
You can also automate the Bitbucket Server Setup Wizard so that a Bitbucket Server instance can be completely provisioned automatically – see Automated setup for Bitbucket Server.
Running the installer
Download the Bitbucket Server installer from the Atlassian download site.
Run the installer, and follow the installation wizard.
Install Bitbucket Server as a service
On Linux and Windows systems, the installer can install Bitbucket Server as a service (although not when upgrading an existing instance of Bitbucket Server).
A service account named 'atlbitbucket' will be created.
Linux の場合
- The 'atlbitbucket' account will be a locked account (it cannot be used to log in to the system).
- The
script will be linked to run levels 2, 3, 4 and 5. If you wish to change this, you will need to configure it manually.
Windows の場合
The installer generates a password for the service account. As a Windows administrator, you can update the account password if you wish to own the account. You'll also need to update the log on credentials for the service.
The 'atlbitbucket' account will be configured with SeServiceLogonRight so that it can be used by the service. It will also be configured with
, andSeDenyRemoteInteractiveLogonRight
so that it cannot be used to log into the machine.For Windows services created using the Bitbucket Server installer, the Bitbucket Server home directory location (defined by the BITBUCKET_HOME variable) is configured as a Bitbucket Server Service JVM option.
To change this, go to Service Properties. In the service properties, go to the Java tab, and change
as in the below image.
Console and unattended mode
The Bitbucket Server installer has three modes:
- GUI mode: the default mode for the installer is to display a GUI installer.
- Console mode: if the installer is invoked with the
argument, the interaction with the user is performed in the terminal from which the installer was invoked. - Unattended mode: if the installer is invoked with the
argument, there is no interaction with the user and the installation is performed automatically with the default values.
Unattended mode also allows you to supply a response file with a -varfile
option, to supply answers for all questions that are used instead of the defaults. An example response file is:
// Should Bitbucket Server be installed as a Service? Must be ADMIN (default: true if the process is running with administrator rights, false otherwise). If false, the home and installation directories must be specified to point to directories owned by the user
// The ports Bitbucket Server should bind to (defaults: portChoice=default, httpPort=7990, serverPort=8006)
// Path to the Bitbucket Server HOME directory (default: /var/atlassian/application-data/bitbucket if the process is running with administrator rights, ~/atlassian/application-data/bitbucket otherwise)
// The target installation directory (default: /opt/atlassian/bitbucket/<VERSION> if the process is running with administrator rights, ~/atlassian/bitbucket/<VERSION> otherwise)
On Windows, you must tell CMD/PowerShell to wait for the install4j process to use console/unattended mode:
start /wait installer.exe -c
On macOS, mount the disk image, then run the Java stub in the installer using this command:
/Volumes/Bitbucket Server/Bitbucket Server\ X.X.X\Installer.app/Contents/MacOS/JavaApplicationStub -options
where X.X.X
is the version of Bitbucket Server, and -options
can include -c
or -q
, and -varfile
followed by the path to the response file.
For more information see the install4j documentation.


text:
Mercury has long been a mystery to scientists. Until recently, knowledge of the planet was limited to the grey, patchy landscape revealed by the Mariner 10 probe, NASA's first mission to Mercury in the mid-1970s.
Mariner 10's photographs showed little detail of how the surface was formed. Like Venus, Earth and Mars, it was clear that Merucy's rough crust reflected millions of years of aerial bombardment by comets and meteorites. Gaps in our understanding of the innermost planet have included some basic knowledge such as the planet's geology, how it was formed and evolved, and whether its interior was still active.
But now NASA's return mission, MESSENGER, is allowing scientists to confront the full complexity of Mercury's surface. Amid the countless craters caused by meteor collisions, the landscape has marks that were not made by such collisions. Using the increased resolution of MESSENGER's cameras, scientists have identified previously hidden volcanic activity, which changes what we know about the planet's formation, and even the history of our solar system.
The detailed pictures showed that Mercury seemed to have smooth, rimless depressions that were obviously not produced by meteor impacts. They were surrounded by bright, reddish material, believed to have been left by pyroclastic flows – indicating that the depressions were volcanic vents.
The presence of pyroclastic material – which is composed of volcanic ash – showed that the eruptions had been explosive. In some cases, the debris had been ejected more than 50km from the volcanic vents themselves. This is a remarkable distance, as it means that Mercury's volcanoes must have been much more powerful than previously thought.
The force of an eruption is determined by volatile gases beneath the planet's surface. Initially dissolved in magma, as they reach the surface, these gases rapidly swell and shred the magma into tiny shards called pyroclasts. This means that, in general, the more volatiles there are in the magma feeding an eruption, the more explosive it will be.
To shoot debris so far, the magma in Mercury's crust would need to have been brimming with volatile gases. The latest signs of volcanic deposits from MESSENGER suggest that nearly 1.5% of the parent magma may have been occupied by volatiles. For gases this is a large fraction, because as they rise towards the surface their volume increases dramatically.
Mercurial nature
Before its explosive nature surfaced, experts assumed that, having formed so close to the sun, Mercury would have been stripped of its volatile gases early on in its life. So future theories of Mercury's genesis must now take into account how the planet kept its fizz hidden. They will likely now invoke ideas of ancient collisions with volatile-rich "planetesimals" – balls of rock and dust that are thought to have formed the inner planets – which could have topped up Mercury's levels.
All of this puts a new spin on the first rock from the sun, and its place among the others. The crushing atmospheric pressure on Venus means that volatiles cannot easily escape from emerging magma, so exploding volcanoes can't exist. On Mars, most recent studies of volcanoes report that, just like on Earth, both explosive and effusive (less gassy, lava-producing) eruptions seem to have been prevalent in its past.
With the discovery of widespread explosive activity so fresh on Mercury, it is too soon to speculate on its overall volcanic character. Vast plains of lava have elsewhere been observed on its surface, showing that a great deal of non-explosive volcanism has also taken place there. But there are tentative signs that it might be exceptional amongst the volcanic planets: at least one of the vents uncovered by MESSENGER may have been entirely explosive, which could be a unique planetary feat.
The word "mercurial" – meaning volatile – reflects the character of the Roman messenger god which gave Mercury its name. As researchers continue to study its still-obscure surface, it will be interesting to see just how fitting the name might yet prove to be.


text:
- irc
- Description
- Author
- Requirements
- Documentation
- irc:connection
- irc:connection-raw-filter-set!
- irc:connect
- irc:disconnect
- irc:reconnect
- irc:connected?
- irc:quit
- irc:join
- irc:part
- irc:nick
- irc:say
- irc:notice
- irc:action
- irc:command
- irc:listen
- irc:message-sender
- irc:extended-data?
- irc:extended-data-tag
- irc:wait
- irc:process-message
- irc:run-message-loop
- irc:add-message-handler!
- irc:remove-message-handler!
- Example
- Changelog
- License
A simple IRC client library.
This extension provides basic support for the IRC client protocol (RFC 2812). Note that some basic knowledge of the protocol will be needed to use this library.
Error-replies from the server are signalled as composite conditions of kind (exn irc) with the properties code (the IRC error code) and reply (the actual message object received). If the connection is terminated by the server, a composite condition of the kinds (exn irc/eof) is signalled. Automatic reconnection on timeout or eof is supported and optional.
- irc:connection #!key user password server nick real-name port log-traffic ping-timeout reconnect reconnect-timeoutprocedure
Returns a connection object, where the following keyword arguments specify the connection parameters:
keyword argument type default user string nobody password string none server string none nick string some random symbol real-name string same as the user parameter port integer 6667 log-traffic port or #f #f reconnect-timeout milliseconds (integer) 3600000 reconnect boolean #f A server must be provided in any case.
The connection object can be queried using the following accessors:
- irc:connection? Xprocedure
Returns #t if X is a connection object, or #f otherwise.
- irc:connection-in CONNECTIONprocedure
- irc:connection-out CONNECTIONprocedure
- irc:connection-server CONNECTIONprocedure
- irc:connection-nick CONNECTIONprocedure
- irc:connection-user CONNECTIONprocedure
- irc:connection-real-name CONNECTIONprocedure
- irc:connection-port CONNECTIONprocedure
- irc:connection-channels CONNECTIONprocedure
- irc:connection-log-file CONNECTIONprocedure
- irc:connection-reconnect-timeout CONNECTIONprocedure
- irc:connection-password CONNECTIONprocedure
- irc:connection-reconnect? CONNECTIONprocedure
Accessors for values stored in a connection object. The in and out values are ports, port is an integer, channel is a string and all other values are strings.
- irc:connection-raw-filter-set! CONNECTION PROCprocedure
When set, then each line of received input will first be processed by the one argument procedure PROC, and the result be passed to the message deconstruction machinery instead. Use this facility to perform very low level pre-processing of input from the IRC server.
- irc:connect CONNECTIONprocedure
- irc:connect #!key KEYWORD ...procedure
Connects to an IRC server, with the parameters given in the connection object CONNECTION or via the parameters passed as keywords arguments (just like in the call to irc:connection). Returns the connection object. A connection can only be made to a single server at the same time.
- irc:disconnect CONNECTIONprocedure
Disconnects any currently active connection.
- irc:reconnect CONNECTIONprocedure
Disconnect and reconnect to CONNECTION, automatically re-joining all channels that we have currently joined.
- irc:connected? CONNECTIONprocedure
Returns #t if there exists an open connection for CONNECTION, or #f otherwise.
- irc:quit CONNECTION #!optional MESSAGEprocedure
Sends a QUIT message to the IRC server (optionally with the text MESSAGE) and closes the connection designated by the connection object CONNECTION.
- irc:join CONNECTION CHANNELprocedure
Sends JOIN messages for the given CHANNEL (a string).
- irc:part CONNECTION CHANNELprocedure
- irc:leave CONNECTION CHANNELprocedure
Leaves the channels given in the string CHANNEL by sending a PART message.
- irc:nick CONNECTION NICKprocedure
Changes the nickname to the one given in the string NICK.
- irc:say CONNECTION MESSAGE DESTINATION ...procedure
Sends the string MESSAGE via a PRIVMSG command to the given destinations, which should be strings designating either channels or nicknames. If no destinations are given, the message is sent to the last channel that has been joined. The message is split into multiple PRIVMSG operations, if it contains newline characters.
- irc:notice CONNECTION MESSAGE DESTINATION ...procedure
Similar to irc:say but uses a NOTICE command instead.
- irc:action CONNECTION MESSAGE DESTINATION ...procedure
Similar to irc:say but Sends an "action" instead of a normal message.
- irc:command CONNECTION STRINGprocedure
Sends an arbitrary IRC command to the server.
- irc:listen CONNECTIONprocedure
If data is available for reading, then the incoming message is parsed and a "message" object is returned. If no data is currently available, #f is returned.
The message object can be queried with the following procedures:
- irc:message? Xprocedure
Returns #t if X is a message object, or #f otherwise.
- irc:message-prefix MESSAGEprocedure
- irc:message-command MESSAGEprocedure
- irc:message-timestamp MESSAGEprocedure
- irc:message-code MESSAGEprocedure
- irc:message-body MESSAGEprocedure
- irc:message-parameters MESSAGEprocedure
- irc:message-index MESSAGEprocedure
Return the components of a message object. The prefix is either a list of the form (SERVERNAME) or a list containing the message prefix of the form (NICK USER HOST) (all values are strings). The timestamp holds the current number of seconds (as returned by (current-seconds)) at the point when the message was parsed. The body contains the complete message string. The code is a numerical command-code for the message or #f. The parameters is a list of strings, containing message destination and message body. If the message contains extended information (mostly ACTIONs), then the last value in the list is an extended data object. The index is a numeric message index.
- irc:message-sender MESSAGEprocedure
- irc:message-receiver MESSAGEprocedure
Returns the sender and receiver of a message, respectively. The receiver may be a channel name or the nickname of another client.
- irc:extended-data? Xprocedure
Returns #t if X is an extended data object, or #f otherwise.
- irc:extended-data-tag EXTENDEDprocedure
- irc:extended-data-content EXTENDEDprocedure
Return the tag (symbol) and content (string) parts of an extended data object.
- irc:wait CONNECTIONprocedure
Waits until data is available from CONNECTION and returns the parsed message object.
- irc:process-message CONNECTION MESSAGE #!optional VERBOSEprocedure
Calls any registered message handlers that apply to MESSAGE. If the optional argument VERBOSE is given and true, then diagnostic output will be written to the port returned by (current-output-port).
- irc:run-message-loop CONNECTION #!key debug pong filterprocedure
Repeatedly calls irc:wait and irc:process-message. If the keyword argument debug is given and true, then each incoming message will be dumped to the port given by the value of (current-output-port). The keyword argument pong specifies whether automatic processing of PING messages should be done. If yes, then a message handler with the tag ping (a symbol) will be registered as with the following commands:
(irc:add-message-handler! con (lambda (msg) (irc:command con (string-append "PONG :" (car (irc:message-parameters msg)))) ) tag: 'ping command: "PING") )
The keyword argument filter can be used to specify a procedure that will be called for each icoming message object (the result will be used for further processing instead).
- irc:add-message-handler! CONNECTION PROC #!key command sender receiver body tag codeprocedure
Defines a message handler for the given CONNECTION that will invoke the one argument procedure PROC with the received message object when all of the regular expressions given for the keyword arguments match (uses string-search), and the code, which should be an exact integer (and is compared using eq?).
The keyword tag defines a message-handler tag, which can be used to remove the handler at a later time.
Note that if this procedure is called with two arguments (and no keyword args), then the message handler will be invoked for all incoming messages.
Message handlers are run in the order in which they are defined. A message handler should return #f if further handlers should be invoked for the same message, or true if other handlers should not be called.
The command, sender, receiver and body arguments may optionally be predicates instead of strings (which will be called with the respective part of the checked message) to allow more fine-grained matching.
- irc:remove-message-handler! CONNECTION TAGprocedure
Removes the message handler with the given tag.
A minimalistic bot that shows the current time, when asked:
(import irc (chicken time) (chicken time posix)) (define con (irc:connection server: "irc.libera.chat" nick: "PongoTwistleton") ) (define (bleep _) (irc:say con (seconds->string (current-seconds)) "#somechannel") ) (irc:connect con) (irc:join con "#somechannel") (irc:add-message-handler! con bleep command: "PRIVMSG" body: "time") (irc:run-message-loop con debug: #t)
- 1.9.9 Ported to CHICKEN 5
- 1.9.8 reading input did not apply the timeout-parameter correctly (fix contributed by Alex Charlton)
- 1.9.3 reconnecting on timeout
- 1.9.2 reconnect feature
- 1.9.1 handling of server-EOF
- 1.9 added logging and ping-timeout support
- 1.8 uses string-search for matching handlers; allows regexp objects
- 1.7 Ported to CHICKEN 4
- 1.6 Added irc:disconnect
- 1.5 Multimessage-support [Thanks to Andreas Scholta, again]
- 1.4 Fixed bug in irc:remove-message-handler! [Thanks to Andreas Scholta]
- 1.3 irc:join accepts only a single channel
- 1.2 Fixed a bug in processing of handler tags [Thanks to Vesa, again!]
- 1.1 Added irc:connection-raw-handler-set! and further options to irc:run-message-loop (in addition to PING handling) [Thanks to Vesa Kaihlavirta]
- 1.0
Copyright (c) 2000-2009, Felix L. Winkelmann All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICESLOSS OF USE, DATA, OR PROFITSOR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.