Squid Programming - squid

Does anybody know a good tutorial about Squid plug-in development?

There is one in the squid documentation. IIRC it's fairly straightforward - squid forks a process and passes data down a pipe to the process. A somewhat out-of-date but still relevant programmer's guide can be found Here.

Squid is nowadays a pretty modular and extensible platform, so it really depends on what you need to do. Most information can be found in the squid wiki (http://wiki.squid-cache.org)
There is the "helper" family of coprocesses-based extensions (http://wiki.squid-cache.org/Features/AddonHelpers)
redirector helpers (http://wiki.squid-cache.org/Features/Redirectors)
authentication helpers for Basic/NTLM/Digest/Negotiate/Kerberos etc
authorization helpers for LDAP/Active Directory/Session/...
In case you are interested in content modification there is ICAP for out-of-process adaptation and eCAP for in-process adaptation.
I'm sorry I can't post direct links; you'll find the data you need by looking for the relevant keywords in the squid wiki.

You might also find the Add-On Helpers for Request Manipulation topic useful.

You can visit http://www.squid-cache.org/Versions/v3/3.4/cfgman/ to understand the squid completely...
I think the latest version 3.5 has arrived but this webpage can be a solution to your current problem.

Related

Introducing testers to HTTP and Fiddler?

We really need to get our testers into using Fiddler to determin page size and site speed as part of their pre release testing process. I have sat with some of them to talk about fiddler but I'm looking for some easy to understand resources for learning Fiddler.
More importantly I think it might be ideal if I can find an easy to read resource that will explain the role of http in using the web what the difference between http and the browser is (maybe explanations of the http and upper layers but in a way a tester can understand).
Does anyone have any suggestions or resource links?
Our testers are mostly from the point and click UA testing school rather than the more dynamic end of things. All help greatly appreciated.
thanks,
b
A video well worth having them watch is PDC 2009 session on Fiddler by the Author of the product Eric Lawrence.
If you want your testers to do this then it would be better if you set up something like ShowSlow with Yslow and when they are working through the site it will automatically record the data for you. This will remove any potential issues for them forgetting to do this step.
If you want to automate the process you can use Selenium and YSlow. I did a talk last year at Google Test Automation Conference where I discussed the process of doing this. The talk can be found here
If you're only looking to ensure page size is reasonable then I don't believe that knowledge of HTTP is necessary. You're better of training them on yslow or google page speed. These tools provide a higher level view of why a page is loading slowly and what can be done to mitigate it. All they need to know about HTTP is that bigger pages and more requests = slower loading. That is true for all network protocols, though.
A good resource I started with was Whittaker's "How to Break Web Software: Functional and Security Testing of Web Aplications and Web Services". This provides a good introduction to performing Web testing "under the covers", so to speak.
While, more geared to debugging, this PDC presentation (
http://microsoftpdc.com/Sessions/CL25 ) may prove to be a nice intro to Fiddler for your QA folks.
No matter what tool you are introducing into your organization it's good to have some basic Software Roll out concepts in mind while doing this. There are a lot of resources out there describing software roll out plans and although most of them describe how to introduce software in organizations with hundreds or thousands of users there are things to learn even if we are 'only' talking about a dozen or testers or so.
Some ideas that I think might fit you are:
Evangelist
Talk to testers and try to find one or two people who are more interested and enthusiastic about the Fiddler idea then the rest of your team. Give him/her/them time (payed working hours) to learn more about tool and to do a presentation about it to the other tester. Make sure it's someone that the other testers know and respect.
Pilot
Do a pilot project ( who better to be in charge of this than your Evangelist/s ) as a proof of concept. The pilot project should be limited to a small part of a system and the test should be of the nature that you can throw away if it does not work out. The pilot could be time-boxed and there should be an evaluation with the whole team afterwords. This will give your organization some experience in Fiddler and learn to avoid the big beginner mistakes. And it will, hopefully, show the rest of the testing team that Fiddler (or what ever tool you choose) is pretty cool and get excited about it.
Training
Of course you should dedicate time to do training properly. Just saying "read this easy to read document then start testing" is probably not going give much to the testers. Buy books on Fiddler. Let your Evangelist have a 2-hour "getting up and running with Fiddler" tutorial.
Incremental Roll out
Instead of going for a Big-bang approach where you tell you tester to start using Fiddler to test everything you should start with only limited number of test for the first release. And then you make some more tests for the next release, and maintain the first once. After a few releases you'll have a whole heap of stable and good tests using Fiddler. This way it won't take to much time of the tester so they can still do their other testing.
Read More
There are plenty of articles about software roll out plans on the web that can help you with this.
Hope this helps
/Jonas

Understanding the Bittorrent Protocol

I am looking for some books, tutorial sites .
I want to understand how Bittorrent protocol works and later to implement my own tracker .
I don't have a big knowledge in network protocols so I am looking for a newbie stuff .
Have seen following posts but they didn't helped me with my issue :
A BitTorrent client completely written in C#?
Implementing Bittorrent Protocol
Looking for some good books/resources on understanding Bittorrent?
Thanks for help .
The BitTorrent specification is quite easy reading (relatively speaking):
http://www.bittorrent.org/beps/bep_0003.html
The wikipedia page is also surprisingly comprehensive:
http://en.wikipedia.org/wiki/BitTorrent_%28protocol%29
BitTornado has a tracker implementation and it's written in Python, which is easy to read. It's nice to start from something working and then you can try to understand the code based on the protocol. BitTornado is based on original version that Bram Cohen implemented. Tracker is implemented in BitTornado.BT1.track.py
There's a bunch of videos on utube, including:
Stanford Seminar - Bram Cohen

What are some recommended Common Lisp Web Servers options?

So far I've only tried Hunchentoot and heard about AllegroServe, ABCLweb, though I wouldn't know how they compare in performance. I was wondering, what is currently the best option for deploying a Common Lisp web app in a production environment?
There is a pretty decent listing at CLiki of web-related Common Lisp software.
Scanning the list, here's the web servers they have listed (links go to the CLiki description page) which seem to be reasonably complete servers:
AllegroServe
araneida
CoreServer
Hunchentoot
There are a couple of other options which are self-described as minimal or experimental, or implemented in CLISP rather than Common Lisp.
I am not a Lisp programmer, so I can't speak to the effectiveness of any of them, but from gathering this information, Hunchentoot seems to be the most popular currently.
CL-HTTP is a full-featured HTTP server with a history that goes back to the early days of the web. Here is a CL-HTTP primer.

Why is Peer-to-Peer programming a hard topic to obtain good research for?

After reading a bit more about how Gnutella and other P2P networks function, I wanted to start my own peer-to-peer system. I went in thinking that I would find plenty of tutorials and language-agnostic guidelines which could be applied, however I was met with a vague simplistic overview.
I could only find very small, precise P2P code which didn't do much more than use client/server architecture on all users, which wasn't really what I was looking for. I wanted something like Gnutella, but there doesn't seem to be any articles out in the open for joining the network.
RFC 4981, with its huge bibliography, could be a very good starting point.
I had to write a basic Gnutella client in C# using Web Services and I think the class notes on the P2P stuff are still available here and here.
You might have better success researching Bittorrent, I believe that the creator has written some papers, and it seems others are as well.
BitTyrant
Bittorent.org, see the developers section
I don't know what platform you are trying to use, but here is a decent article on the subject for .NET.
I've found the TheoryOrg Unofficial BitTorrent Specification to be the best online source for Bittorrent information. Also, the Monotorrent code is fairly simple and easy to understand. There's also a project called "GCT" which implements JGroups style P2P for LAN/Multicast environments, and its code is similarly easy to understand (if a bit buggy).
You can try to read Gnutella2 and try to implement messaging. For reading conceptual material you can read Distributed Systems by Andrew Tannenbaum.
You can have a look at JXTA. It's intention was to be a generic, platform agnostic p2p framework, in contrast to other p2p implementations which are usually for a very specific purpose (such as Gnutella).
Don't be fooled by it's Java appearance, there are binding available for C/C++/C#, but the core protocols are implemented in XML which should translate to any language.
You can also download a free book here.

HTTP Libraries for Emacs

I recently discovered the org-mode in emacs and it works very well for me. I also like www.RememberTheMilk.com. I would like to be able to sync my org-mode file and RTM list. I know that RTM has its API exposed as web services. I am currently looking for a HTTP library that I could use to write my script. I found a couple of links but I am still not entirely satisfied.
http://www.koders.com/lisp/fidB46CCCA8D57FBD093BAF6E08289CFB4DA7624B2B.aspx?s=TV+Raman
http://www.emacswiki.org/cgi-bin/wiki/http-post-simple.el
Any pointers in doing web service interactions with emacs would be very useful. Also please keep in mind that I'm not a seasoned emacs expert. I have broken the initial barriers of emacs and can find my way around elisp. So, be gentle. :-)
Emacs ships with url.el and url-http.el. Although http-get.el, http-post.el and http-cookies.el are in vogue today. Here's the GitHub link where you can get it from.
http://github.com/wfarr/dotfiles/tree/master/.elisp
Any other suggestions are also welcome.
If I were to work on this, I'd use Pymacs to interface Emacs to Python and then use the existing Python API kit for Remember the Milk. Why re-implement all the HTTP crud yourself?

Resources