FreeBSD 4.6
An Anonymous Coward writes "FreeBSD 4.6 is out! The announcement is out, and so are the release notes.
Have fun, and thanks to the FreeBSD team!" The announcement has all the mirror information, etc.
← Back to Stories (view on slashdot.org)
cool
[ed. note: in the following text, former FreeBSD developer Mike Smith gives his reasons for abandoning FreeBSD]
When I stood for election to the FreeBSD core team nearly tw years ago, many of you will recall that it was after a long series of debates during which I maintained that too much organisation, too mny rules and too much formality would be a bad thing for the project.
Today, as I read the latest discussions on the future of the FreeBSD project, I see the same problem; a few new faces and many of the old going over the same tired arguments and suggesting variations on the same worthless schemes. Frankly I'm sick of it.
FreeBSD used to be fun. It used to be about doing things the right way. It used to be something that you could sink your teeth into when the mundane chores of programming for a living got you down. It was something cool and exciting; a way to spend your spare time on an endeavour you loved that was at the same time wholesome and worthwhile.
It's not anymore. It's about bylaws and committees and reports and milestones, telling others what to do and doing what you're told. It's about who can rant the longest or shout the loudest or mislead the most people into a bloc in order to legitimise doing what they think is best. Individuals notwithstanding, the project as a whole has lost track of where it's going, and has instead become obsessed with process and mechanics.
So I'm leaving core. I don't want to feel like I should be "doing something" about a project that has lost interest in having something done for it. I don't have the energy to fight what has clearly become a losing battle; I have a life to live and a job to keep, and I won't achieve any of the goals I personally consider worthwhile if I remain obligated to care for the project.
Discussion
I'm sure that I've offended some people already; I'm sure that by the time I'm done here, I'll have offended more. If you feel a need to play to the crowd in your replies rather than make a sincere effort to address the problems I'm discussing here, please do us the courtesy of playing your politics openly.
From a technical perspective, the project faces a set of challenges that significantly outstrips our ability to deliver. Some of the resources that we need to address these challenges are tied up in the fruitless metadiscussions that have raged since we made the mistake of electing officers. Others have left in disgust, or been driven out by the culture of abuse and distraction that has grown up since then. More may well remain available to recruitment, but while the project is busy infighting our chances for successful outreach are sorely diminished.
There's no simple solution to this. For the project to move forward, one or the other of the warring philosophies must win out; either the project returns to its laid-back roots and gets on with the work, or it transforms into a super-organised engineering project and executes a brilliant plan to deliver what, ultimately, we all know we want.
Whatever path is chosen, whatever balance is struck, the choosing and the striking are the important parts. The current indecision and endless conflict are incompatible with any sort of progress.
Trying to dissect the above is far beyond the scope of any parting shot, no matter how distended. All I can really ask of you all is to let go of the minutiae for a moment and take a look at the big picture. What is the ultimate goal here? How can we get there with as little overhead as possible? How would you like to be treated by your fellow travellers?
Shouts
To the Slashdot "BSD is dying" crowd - big deal. Death is part of the cycle; take a look at your soft, pallid bodies and consider that right this very moment, parts of you are dying. See? It's not so bad.
To the bulk of the FreeBSD committerbase and the developer community at large - keep your eyes on the real goals. It's when you get distracted by the politickers that they sideline you. The tireless work that you perform keeping the system clean and building is what provides the platform for the obsessives and the prima donnas to have their moments in the sun. In the end, we need you all; in order to go forwards we must first avoid going backwards.
To the paranoid conspiracy theorists - yes, I work for Apple too. No, my resignation wasn't on Steve's direct orders, or in any way related to work I'm doing, may do, may not do, or indeed what was in the tea I had at lunchtime today. It's about real problems that the project faces, real problems that the project has brought upon itself. You can't escape them by inventing excuses about outside influence, the problem stems from within.
To the politically obsessed - give it a break, if you can. No, the project isn't a lemonade stand anymore, but it's not a world-spanning corporate juggernaut either and some of the more grandiose visions going around are in need of a solid dose of reality. Keep it simple, stupid.
To the grandstanders, the prima donnas, and anyone that thinks that they can hold the project to ransom for their own agenda - give it a break, if you can. When the current core were elected, we took a conscious stand against vigorous sanctions, and some of you have exploited that. A new core is going to have to decide whether to repeat this mistake or get tough. I hope they learn from our errors.
Future
I started work on FreeBSD because it was fun. If I'm going to continue, it has to be fun again. There are things I still feel obligated to do, and with any luck I'll find the time to meet those obligations.
However I don't feel an obligation to get involved in the political mess the project is in right now. I tried, I burnt out. I don't feel that my efforts were worthwhile. So I won't be standing for election, I won't be shouting from the sidelines, and I probably won't vote in the next round of ballots.
You could say I'm packing up my toys. I'm not going home just yet, but I'm not going to play unless you can work out how to make the project somewhere fun to be again.
= Mike
--
to all replying to the "*BSD is DYING post":
YOU ARE REPLYING TO AN ANCIENT TROLL.
get a life
Yet another crippling bombshell hit the beleaguered *BSD community when recently IDC confirmed that *BSD accounts for less than a fraction of 1 percent of all servers. Coming on the heels of the latest Netcraft survey which plainly states that *BSD has lost more market share, this news serves to reinforce what we've known all along. *BSD is collapsing in complete disarray, as fittingly exemplified by failing dead last in the recent Sys Admin comprehensive networking test.
You don't need to be a Kreskin to predict *BSD's future. The hand writing is on the wall: *BSD faces a bleak future. In fact there won't be any future at all for *BSD because *BSD is dying. Things are looking very bad for *BSD. As many of us are already aware, *BSD continues to lose market share. Red ink flows like a river of blood. FreeBSD is the most endangered of them all, having lost 93% of its core developers.
Let's keep to the facts and look at the numbers.
OpenBSD leader Theo states that there are 7000 users of OpenBSD. How many users of NetBSD are there? Let's see. The number of OpenBSD versus NetBSD posts on Usenet is roughly in ratio of 5 to 1. Therefore there are about 7000/5 = 1400 NetBSD users. BSD/OS posts on Usenet are about half of the volume of NetBSD posts. Therefore there are about 700 users of BSD/OS. A recent article put FreeBSD at about 80 percent of the *BSD market. Therefore there are (7000+1400+700)*4 = 36400 FreeBSD users. This is consistent with the number of FreeBSD Usenet posts.
Due to the troubles of Walnut Creek, abysmal sales and so on, FreeBSD went out of business and was taken over by BSDI who sell another troubled OS. Now BSDI is also dead, its corpse turned over to yet another charnel house.
All major surveys show that *BSD has steadily declined in market share. *BSD is very sick and its long term survival prospects are very dim. If *BSD is to survive at all it will be among OS hobbyist dabblers. *BSD continues to decay. Nothing short of a miracle could save it at this point in time. For all practical purposes, *BSD is dead.
Fact: *BSD is dying
sad but true
With all the recent advances linux has made, why would I possibly want to use such a doomed OS? It seems clear that BSD wont exist in 2 years from now. I'll be sad to see it go but all these releases really are just attempts to try to reanimate a corpse. Let it go.
Leave the trolling the user base that read the HOWTO. Trolling is an art form, you're just making stick figures with finger paint.
Saying Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders.
that BSD* is dead though. Just like BeOS.
Ohh well.
GNU/Linux is the wave of the future and the operating system of young communists everywhere. You wont see GPL software inside Microsoft Windows (proprietary = EVIL) releases! Use GNu/Linux now and join the revolution!
...its fingernails and hair are still growing in the coffin, that's all.
pr0n - keeping monitor glass spotless since 1981.
The now DEAD Bsd Daemon is wanted for its history of Penguin rape If you see him please shove his head up here Remember that goatse.cx runs on linux, not DeadBSD
Thank you for your cooperation.
C# Sourcecode for Slashdot Troll Bot!!!
. Collections;y stem.Windows.Forms;e m.Data.OleDb;s ;namespaceSlash man{m {[DllI mport("winmm.dll")]u nd(Stringlpszname,lon ghModule,longdwFlags);privateboolmanualMode=false; t Tr ollOnly=false;t estringlatestSto ryDisplay="";t ringlatestTime= "";= 1;r ivat eDateTimenextCheck=System.DateTime.Now+System.Time Span.FromSeconds(6);. Labellabel1;privateSys tem.Windows.Forms.LinkLabellinkURL;m .Windows.Forms.LabellabelTime;private System.Windows.Forms.ButtonbuttonCheck;o oltrying=false;privateSystem.Timers.Timer theTimer;N extCheck;pr ivatestringmainURL="http:privatestringreplyURL="ht tp:privateSystem.Data.DataTabletrollTable;t eSystem.Data.DataSettrollSet;privateSystem.D ata.DataTablecontextTable;t aSetcontextSet;privateSystem . indows.Forms.ButtonbtnPost;= false;privateintpreinctroll=0 ; BR>privatestringdirBase="";privateSystem.Window s.Fo rms.ButtonbtnOptions;s .ContextMenutrayMenu;pr ivateSystem.Windows.Forms.MenuItemmenuItem1;v ateSystem.Windows.Forms.MenuItemmenuItem2;priv ateSystem.Windows.Forms.MenuItemmenuItem3;c tedSystem.Windows.Forms.NotifyIcontIcon;priv ateSystem.ComponentModel.IContainercomponents;r ivateOleDbConnectiondbConn;privateOleDbDataAdapt erdbTrollsAdapter;a bellbResult;privateO leDbDataAdapterdbContextAdapter;{ InitializeComponent();
r ridevoidDispose(booldisposing){if(dis posing){( );}r mDesignergeneratedcodeprivatevoid InitializeComponent(){. ComponentModel.Container ();System.Resources.ResourceManagerresources=newSy stem.Resources.ResourceManager(typeof(MainFrm));
this.linkURL=newSystem.Windows.Forms.LinkLabel();t his.label1=newSystem.Windows.Forms.Label();. labelTime=newSystem.Windows.Forms.Label();thi s.labelNextCheck=newSystem.Windows.Forms.Label(); ) ; this.theTimer=newSystem.Timers.Timer();O ptions=newSystem.Windows.Forms.Button();t his.btnPost=newSystem.Windows.Forms.Button();i s.tIcon=newSystem.Windows.Forms.NotifyIcon(this . omponents);this.trayMenu=newSystem.Windows.Forms.C ontextMenu();o rms.MenuItem(); this.menuItem3=newSystem.Windows.Forms.MenuItem(); ( ); this.lbResult=newSystem.Windows.Forms.Label();( System.ComponentModel.ISupportInitialize)(this.t heTimer)).BeginInit();this.SuspendLayout();. linkURL.Location=newSystem.Drawing.Point(16,4 8);this.linkURL.Name="linkURL";e =newSystem.Drawing.Size(432,23);t his.linkURL.TabIndex=0;+ =newSystem.Windows.Forms. LinkLabelLinkClickedEventHandler(this.linkURL_Link Clicked);this.label1.Location=newSystem.Drawing.Po int(16,16);1 .Size=newSyst em.Drawing.Size(80,23);h is.label1.Text="LastCheck : ;t (10 4,16);this.labelTime.Name="labelTime";l Time.Size=newSystem.Drawing.Size(128,23) ; his.labelTime.TabIndex=2;0 :00";this.labelNextCheck.Lo cation=newSystem.Drawing.Point(240,16);e lNextCheck.Name="labelNextCheck";this.lab elNextCheck.Size=newSystem.Drawing.Size(208,23);
this.labelNextCheck.TabIndex=3;this.labelNextCheck . ext="NextCheckin0Seconds";t ion=newSystem.Drawing.Point( 376,120);this.buttonCheck.Name="buttonCheck";i s.buttonCheck.TabIndex=4;this.buttonCheck.Text= "CheckNow";e ntHandler(thi s.buttonCheck_Click);this.theTimer.Enabled=true;
this.theTimer.Interval=1000;this.theTimer.Synchron izingObject=this;e m.Timers.ElapsedEve ntHandler(this.OnFireTimer);this.btnOptions.Locati on=newSystem.Drawing.Point(200,120);i ons.Name="btnOptions";this.btnOptions. TabIndex=5;b tnOptions.Cli ck+=newSystem.EventHandler(this.btnOptions_Click); 8 8, 120);this.btnPost.Name="btnPost";a bIndex=7;this.btnPost.Text="PostNow ";i s.bt nPost_Click);this.tIcon.ContextMenu=this.trayMenu; s .G etObject("tIcon.Icon")));this.tIcon.Text="SlashMan ";k +=ne wSystem.EventHandler(this.DblClickTrayIcon);s .trayMenu.MenuItems.AddRange(newSystem.Windows . orms.MenuItem[]{this.menuItem1,h is.menuItem2});t his.menuItem1.Ind ex=0;m 1.Click +=newSystem.EventHandler(this.menuItem1_Click);
t his.menuItem3.Index=1;this.menuItem3.Text="-";h is.menuItem2.Index=2;this.menuItem2.Text="Exit";
this.menuItem2.Click+=newSystem.EventHandler(this. menuItem2_Click);this.lbResult.Location=newSystem. Drawing.Point(16,80);l t";this.lbResult.Size=n ewSystem.Drawing.Size(432,23);I ndex=8;this.lbResult.Text="LastR esult:None";a wing.Size(5,13 );this.ClientSize=newSystem.Drawing.Size(472,149); C on trol[]{this.lbResult,n s,a belTime,this.label1,S ystem.Drawing.Icon)(re sources.GetObject("$this.Icon")));B ox=false;this.Name="MainFrm";= System.Windows.Forms.FormStartP osition.CenterScreen;this.Text="SlashMan";S izeChanged+=newSystem.EventHandler(this.Size Chang);((System.ComponentModel.ISupportInitialize) (this.theTimer)).EndInit();l se);}#endregionp lication.Run(newMainFrm());}privatevoidReadDB() {e ntP rocess().MainModule.FileName;b string(0,dirBase.LastIndexOf("\ \"));System.IO.Directory.CreateDirectory(dirBase); ; Da taSource="+dirBase+"\\Slashman.mdb";dbConn=newOleD bConnection(mdbFile);t aAdapter();OleDbCommand dbInsert=newOleDbCommand("INSERTINTOtrolls(ID,Subj ect,Body)Values(?,?,?)",dbConn);t ers.Add("ID",OleDbType.Numeric,0," ID");dbInsert.Parameters.Add("Subject",OleDbType.V arChar,255,"Subject");B ody",OleDbType.Char,6553 5,"Body");OleDbCommanddbUpdate=newOleDbCommand("UP DATEtrollsSETSubject=?,Body=?WHEREID=?",dbConn);
dbUpdate.Parameters.Add("Subject",OleDbType.VarCha r,255,"Subject");dbUpdate.Parameters.Add("Body",Ol eDbType.Char,65535,"Body");A dd("ID",OleDbType.Numeric,0," ID");OleDbCommanddbDel=newOleDbCommand("DELETEFROM trollsWHEREID=?",dbConn);e wOleDbParameter("ID",OleDbT ype.Numeric,0,"ID"));dbTrollsAdapter.InsertCommand =dbInsert;e ;dbTrollsAda pter.DeleteCommand=dbDel;C ommand=newOleDbCommand("SEL ECT*FROMtrolls",dbConn);dbContextAdapter=newOleDbD ataAdapter();O leDbCommand("SE LECT*FROMContext",dbConn);dbConn.Open();t =newSystem.Data.DataSet("trollset");trollT able=newDataTable("trolls");l (trollTable);trollSet.Tables.A dd(trollTable);t em.Windows.Forms. MessageBox.Show("Thetrollsdatabaseismissingorempty . );m issi ngorempty.");}contextSet=newSystem.Data.DataSet("c ontextset");) ;dbContextAdap ter.Fill(contextTable);n textTable);this.Visible=t rue;
privateboolSendMail(stringfrom,stringto,stringsubj ect,stringbody){try{t heMail=newSystem.Web.M ail.MailMessage();theMail.From="your@email.com";
theMail.To=to;theMail.Subject=subject;o dy=body;theMail.BodyFormat=System.Web.Ma il.MailFormat.Text;p Server="your.server.c om";System.Web.Mail.SmtpMail.Send(theMail);r ntrue;}catch(Exceptione){e ssageBox.Show(e.Message);re turnfalse;}l Time.Text=latestTime;this.linkURL.Text=l atestStoryDisplay;}t ringfrom,stringtagBeg in,stringtagEnd){intbegin=from.IndexOf(tagBegin); o t found");stringretstr=from.Substring(begin+tagBegin . ength);) thrownewS ystem.Exception("tagEndnotfound");S ubstring(0,end);}privatestringStripT ags(stringfrom){e xOf("");g in);b egin)+ 1);t ringGetHref(stringfrom){stringtagHref="AH REF=\"";H ref);f failed( 1).");begin+=tagHref.Length;" \"",begin);if(end0)thrownewSys tem.Exception("GetHreffailed(2).");t ring(begin,end-begin);if(!ret.StartsW ith("http:"))ret="http:"+ret;s tringDoHttpPost(stringinURI,Sys tem.Collections.Specialized.NameValueCollectionval ues){l ient(); byte[]resp=cli.UploadValues(inURI,values);n System.Text.Encoding.ASCII.GetString(resp);} privatestringDoHttpGet(stringinURI){H ttpWebRequestreq=(System.Net.HttpWebRe quest)System.Net.WebRequest.Create(inURI);req.Cook ieContainer=newSystem.Net.CookieContainer();. CookieContainer.Add(newSystem.Net.Cookie("user ",SlashCfg.userCookie,"/","slashdot.org"));System. Net.WebResponseresp=req.GetResponse();. StreamReadersr=newSystem.IO.StreamReader (resp.GetResponseStream(),System.Text.Encoding.ASC II);returnsr.ReadToEnd();}s tringtheData){theData=theDat a.Replace("Your Rights Online: Where Are You Publishing?",latestStory);c e("191",selTroll.ToString()) ; heData=theData.Replace("193",trollTable.Rows.Count . oString());}{ tIcon.Text=sta t;e ();}t string body){subj="";t estStory,latestU RL);w System . xception("AbortedEntry");t .thebody;e m.Exception ("AbortedEntry");}privatevoidGetTrollData(outstrin gsubj,outstringbody){n t;subj="";o ntextTable.Rows.Count;i++){if(latestSto ry.IndexOf(contextTable.Rows[i]["IfContain"].ToStr ing())=0){t "];subj=trol lTable.Rows[idx-1]["Subject"].ToString();r ollTable.Rows[idx-1]["Body"].ToString();bre ak;}x tTrollOnly){thrownewSystem.Exception("Noc ontexttrollexistsforthispost.");}a shCfg.curTrollIndex;if(SlashCfg.cur Troll==0){c urTrollIndex =trollTable.Rows.Count)SlashCfg.curTrollIndex=1;
selTroll=SlashCfg.curTrollIndex;}else{S lashCfg.curTroll;}if(selTroll=trollTable . ows.Count){d trollisgreate rthanthenumberoftrollsinthetable.");}subj=trollTab le.Rows[selTroll]["Subject"].ToString();o llTable.Rows[selTroll]["Body"].ToString(); }if(SlashCfg.appendPostfix){a ppendPosttext;}PrePro(refsubj) ; BR>PrePro(refbody);}privatevoidPostComment(){b j,outxtheBody);System.Windo ws.Forms.MessageBox.Show(xtheBody,xtheSubj);u rn;*/n ualMode)PlaySound(Application.StartupPath+"\ \alert.wav",0,1);try{" ;if(!manualMode){B ody);}UpdateStatus( "Readingcommentspage...");G et(latestURL);stringtagSID=" INPUTTYPE=\"HIDDEN\"NAME=\"sid\"VALUE=\"";g tagCID="INPUTTYPE=\"HIDDEN\"NAME=\"cid\"VALU E=\"";stringtagPID="INPUTTYPE=\"HIDDEN\"NAME=\"pid \"VALUE=\"";A ME=\"formkey\" VALUE=\"";stringtagEND="\"";T ext(pageText,tagSID,tagEND);st ringCID=GetTaggedText(pageText,tagCID,tagEND);t ringPID=GetTaggedText(pageText,tagPID,tagEND);st ringreplyPage=replyURL+"?";D +"&";replyPage+="pid="+PI D+"& ";y &mod e=flat&commentsort=0&threshold=-1";( "RequestingReplyPage...");pageText=Do HttpGet(replyPage);a gSID,tagEND);PID=GetT aggedText(pageText,tagPID,tagEND);T aggedText(pageText,tagKEY,tagEND);Sy stem.Collections.Specialized.NameValueCollectionnv s=newSystem.Collections.Specialized.NameValueColle ction();
nvs.Add("mode","flat");nvs.Add("startat","");s .Add("threshold","-1");nvs.Add("commentsort","0 ");; " up asswd",SlashCfg.password);) ;nvs.Add("posttype","1");r ollData(outtheSubj,outtheBo dy);}
System.Threading.Thread.Sleep(21000);}nvs.Add("pos tersubj",theSubj);d y);pageText=DoHttpPo st(replyURL,nvs);t ype:--";stringtagPo stResult="FACE=\"arial,helvetica\"SIZE=\"4\"COLOR= \"#FFFFFF\"B";g PostResult=GetTa ggedText(pageText,tagPostResult,tagPostResultEnd); ; if ((!isOK)&&(PostResult=="PostComment")){R esult=GetTaggedText(pageText,tagErrorResu lt,".");}catch{}o stResult[0 ]32)||(P ostResult[0]127)))PostResult=PostResult.Substring( 1);}if(isOK){t agEND);lbResult . ext="PostedComment";R esult.Text="ERROR:"+PostResult;}isposting=false ; ; }UpdateStatus("PostComplete.");}e ad(){if(trying)return;e =@"FACE=""arial,helvetic a""SIZE=""4""COLOR=""#FFFFFF""B";E nd="/B";stringtagUrl="PB(/B";R eadMore.../B";UpdateStatus("Che ckingNow...");a gestr=DoHttpGet(mainURL);latestStory=Strip Tags(GetTaggedText(pagestr,tagTitle,tagTitleEnd)); f (G etTaggedText(pagestr,tagUrl,tagUrlEnd));R L+="&threshold=-1";latestTime=System.D ateT ime.Now.ToString();e stStory!=last Story)){ PlayAlert();p tione){if(e.Message.IndexOf("(40 4)")0){P ost=true; }; S tory=latestStory;nextCheck=DateTime.Now.AddSe conds(SlashCfg.checkIntervalMin+rand.Next(SlashCfg . heckIntervalMax-SlashCfg.checkIntervalMin));}s e{nextCheck=DateTime.Now.AddSeconds(5);}o rm();trying=false;}( objectsender,System.E ventArgse){TryRead();}j ectsender,System.Timers. ElapsedEventArgse){if(trying)return;g )return;if(DateTime.NownextCheck){d ateStatus("NextCheckin"+(int)((nextC heck-DateTime.Now).TotalSeconds)+"Seconds.");}r ivatevoidNavigateLink(){try{System.Diagnostics.P rocess.Start(latestURL);}y Alert()e nder,Syst em.Windows.Forms.LinkLabelLinkClickedEventArgse){ e n der,System.EventArgse){a testURL=="ERROR")||(lates tURL.Length==0)){System.Windows.Forms.MessageBox.S how("Mustgetthepostfirst!(PressCheckNow)","Error", System.Windows.Forms.MessageBoxButtons.OK,System.W indows.Forms.MessageBoxIcon.Stop);
PostComment();}catch{}}i ck(objectsender,System.Ev entArgse){Slashman.OptionsFrmopts=newSlashman.Opti onsFrm();a log(this);d ate(trollTab le);l e.RejectChanges();}}s ible=true;e m.Windows.Fo rms.FormWindowState.Normal;}{ this.Visible=false;}o bjectsender,System.Eve ntArgse){ShowMe();}b jectsender,System.Eve ntArgse){this.Close();}e ctsender,System.EventArgs e){if(this.WindowState==System.Windows.Forms.FormW indowState.Minimized){b lClickTrayIcon(objectsender,System.Ev entArgse){ShowMe();}
Published under the TPL (Trolling Public License)
usingSystem;
usingSystem.Drawing;
usingSystem
usingSystem.ComponentModel;
usingS
usingSystem.Data;
usingSyst
usingSystem.Runtime.InteropService
publicclassMainFrm:System.Windows.Forms.For
publicstaticexternlongPlaySo
privateboolcontextTroll=false;privateboolcontex
privatestringlatestStory="";priva
privatestringlatestURL="";privates
privatestringlastStory="";privateintselTroll
privateSystem.Randomrand=newSystem.Random();p
privateSystem.Windows.Forms
privateSyste
privateb
privateSystem.Windows.Forms.Labellabel
priva
privateSystem.Data.Da
privateboolisposting
privateSystem.Windows.Form
pri
prote
p
privateSystem.Windows.Forms.L
publicMainFrm()
SlashCfg.SetDefaults();ReadDB();}
protectedove
if(components!=null){components.Dispose
}base.Dispose(disposing);}
#regionWindowsFo
this.components=newSystem
this
this.buttonCheck=newSystem.Windows.Forms.Button(
this.btn
th
this.menuItem1=newSystem.Windows.F
this.menuItem2=newSystem.Windows.Forms.MenuItem
(
this
this.linkURL.Siz
this.linkURL.LinkClicked
this.label1.Name="label1";this.label
this.label1.TabIndex=1;t
this.labelTime.Location=newSystem.Drawing.Poin
this.labe
this.labelTime.Text="0
this.lab
this.buttonCheck.Loca
th
this.buttonCheck.Click+=newSystem.Ev
this.theTimer.Elapsed+=newSyst
this.btnOpt
this.btnOptions.Text="Options";this.
this.btnPost.Location=newSystem.Drawing.Point(2
this.btnPost.T
this.btnPost.Click+=newSystem.EventHandler(th
this.tIcon.Icon=((System.Drawing.Icon)(resource
this.tIcon.Visible=true;this.tIcon.DoubleClic
thi
this.menuItem3,t
this.menuItem1.DefaultItem=true;
this.menuItem1.Text="Open...";this.menuIte
t
this.lbResult.Name="lbResu
this.lbResult.Tab
this.AutoScaleBaseSize=newSystem.Dr
this.Controls.AddRange(newSystem.Windows.Forms.
this.btnPost,this.btnOptio
this.buttonCheck,this.labelNextCheck,
this.l
this.linkURL});this.Icon=((
this.Maximize
this.StartPosition
this.
this.ResumeLayout(fa
[STAThread]staticvoidMain(){
Ap
try{dirBase=System.Diagnostics.Process.GetCurr
dirBase=dirBase.Su
stringmdbFile="Provider=Microsoft.Jet.OLEDB.4.0
dbTrollsAdapter=newOleDbDa
dbInsert.Parame
dbInsert.Parameters.Add("
dbUpdate.Parameters.
dbDel.Parameters.Add(n
dbTrollsAdapter.UpdateCommand=dbUpdat
dbTrollsAdapter.Select
dbContextAdapter.SelectCommand=new
trollSe
dbTrollsAdapter.Fil
if(trollTable.Rows.Count==0){Sys
thrownewSystem.Exception("Thetrollsdatabaseis
contextTable=newDataTable("Context"
contextSet.Tables.Add(co
this.Update();}finally{
dbConn.Close();}}
System.Web.Mail.MailMessage
theMail.B
System.Web.Mail.SmtpMail.Smt
retu
System.Windows.Forms.M
}privatevoidUpdateForm(){
this.labe
privatestringGetTaggedText(s
if(begin==-1)thrownewSystem.Exception("tagBeginn
intend=retstr.IndexOf(tagEnd);if(end==-1
returnretstr.
stringret=from;intbegin=ret.Ind
while(begin=0){intend=ret.IndexOf("",be
if(end==-1)break;ret=ret.Remove(begin,(end-
begin=ret.IndexOf("");}returnret;}
privates
stringret=from;intbegin=ret.IndexOf(tag
if(begin0)thrownewSystem.Exception("GetHre
intend=ret.IndexOf(
ret=ret.Subs
returnret;}private
System.Net.WebClientcli=newSystem.Net.WebC
retur
System.Net.
req
System.IO
privatevoidPrePro(ref
theData=theData.Repla
privatevoidUpdateStatus(stringstat)
labelNextCheck.Text=stat;labelNextCheck.Updat
privatevoidPromptTrollData(outstringsubj,ou
body="";GetTrollgt=newGetTroll(la
gt.ShowDialog(this);if(!gt.accepted)throwne
subj=gt.thesubj;body=g
if((subj=="")||(body==""))thrownewSyst
inti=contextTable.Rows.Cou
body="";if(contextTroll){
for(i=0;ic
intidx=(int)contextTable.Rows[i]["Pos
body=t
}}if(i==contextTable.Rows.Count){
if(conte
preinctroll=Sl
SlashCfg.curTrollIndex++;if(SlashCfg.
selTroll=
thrownewSystem.Exception("Theselecte
body=tr
body+="P"+SlashCfg.
/ *stringxtheSubj,xtheBody;
GetTrollData(outxtheSu
ret
if(isposting)return;isposting=true;
if(ma
stringtheSubj="",theBody="
GetTrollData(outtheSubj,outthe
stringpageText=DoHttp
strin
stringtagKEY="INPUTTYPE=\"HIDDEN\"N
stringSID=GetTagged
s
replyPage+="sid="+SI
replyPage+="cid="+CID+"&";replyPage+="op=Repl
UpdateStatus
SID=GetTaggedText(pageText,t
stringKEY=Get
nvs.Add("sid",SID);nvs.Add("pid",PID);
nv
nvs.Add("formkey",KEY);nvs.Add("rlogin","1")
nvs.Add("unickname",SlashCfg.username);nvs.Add(
nvs.Add("op","Submit"
if(manualMode){PromptT
else{UpdateStatus("Waiting20seconds...");
nvs.Add("postercomment",theBo
stringtagErrorResult="!--Error
stringtagPostResultEnd="/B";strin
boolisOK=(pageText.IndexOf(tagErrorResult)==-1)
try{Post
while((PostResult.Length0)&&((P
CID=GetTaggedText(pageText,tagCID,
stringlink="http:}else{
lb
catch(System.Exception){isposting=false;
throw
privatevoidTryR
trying=true;stringtagTitl
stringtagTitle
stringtagUrlEnd="B
boolretryPost=false;try{
stringp
latestStoryDisplay=latestStory;latestURL=GetHre
latestU
if((lastStory.Length0)&&(lat
PostComment();}}
catch(System.Exce
SlashCfg.curTrollIndex=preinctroll;retry
latestStoryDisplay=e.Message;latestURL="ERROR"
latestTime="ERROR";}if(retryPost==false){
last
el
UpdateF
privatevoidbuttonCheck_Click
privatevoidOnFireTimer(ob
if(ispostin
TryRead();}Up
p
catch{}}privatevoidPla
{}privatevoidlinkURL_LinkClicked(objects
NavigateLink();}privatevoidbtnPost_Click(objects
if((latestURL==null)||(l
return;}try{
privatevoidbtnOptions_Cl
opts.trollTable=trollTable;opts.ShowDi
if(opts.pressedOK){dbTrollsAdapter.Up
trollTable.AcceptChanges();}else{
trollTab
privatevoidShowMe(){this.Vi
this.Activate();this.WindowState=Syst
privatevoidHideMe()
privatevoidmenuItem1_Click(
privatevoidmenuItem2_Click(o
privatevoidSizeChang(obj
HideMe();}}
privatevoidD
}}
Yet another crippling bombshell hit the beleaguered Dirty GNU Hippie community when last month IDC confirmed that Rancid Smelling GNU Hippies account for less than a fraction of 1 percent of all humans. Coming on the heels of the latest Netcraft survey which plainly states that Natty haired greasy GNU Hippie have lost more market share, this news serves to reinforce what we've known all along. Reeking Linux Hippies are collapsing in complete disarray, as further exemplified by failing dead last [sysadminmag.com] in the recent Sys Admin comprehensive /usr/bin/sh test.
You don't need to be a Kreskin [amdest.com] to predict the future of the Stinking sweaty Linux hippie. The hand writing is on the wall: Foul-stenched GNU hippies with swampy armpits face a bleak future. In fact there won't be any future at all for them because they are dying. Things are looking very bad for Hairy-backed GNU hippie. As many of us are already aware, they continue to lose market share. Red ink flows like a river of blood.
Let's keep to the facts and look at the numbers.
Troll leader Anonymous Coward states that there are 7000 goatse.cx trolls. How many ascii art trolls are there? Let's see. The number of goatse.cx versus ascii art posts on Usenet is roughly in ratio of 5 to 1. Therefore there are about 7000/5 = 1400 ascii art trolls. Pimply-faced GNU hippies posts on $lashdot are about half of the volume of ascii art posts. Therefore there are about 700 Cock-Gobbling GNU Hippies. A recent article put "first post" at about 80 percent of the troll market. Therefore there are (7000+1400+700)*4 = 36400 "first post" trolls. This is consistent with the number of first posts.
All major surveys show that Putrid smelling greasy GNU hippies have steadily declined in market share. $lashdot is very sick and its long term survival prospects are very dim. If Grubby Smelly Linux Hippies are to survive at all it will be among troll hobbyist dabblers. $lashdot continues to decay. Nothing short of a miracle could save it at this point in time. For all practical purposes, Dirty GNU Hippies are dead.
Yet another crippling bombshell hit the beleaguered Dirty GNU Hippie community when last month IDC confirmed that Rancid Smelling GNU Hippies account for less than a fraction of 1 percent of all humans. Coming on the heels of the latest Netcraft survey which plainly states that Natty haired greasy GNU Hippie have lost more market share, this news serves to reinforce what we've known all along. Reeking Linux Hippies are collapsing in complete disarray, as further exemplified by failing dead last [sysadminmag.com] in the recent Sys Admin comprehensive /usr/bin/sh test.
You don't need to be a Kreskin [amdest.com] to predict the future of the Stinking sweaty Linux hippie. The hand writing is on the wall: Foul-stenched GNU hippies with swampy armpits face a bleak future. In fact there won't be any future at all for them because they are dying. Things are looking very bad for Hairy-backed GNU hippie. As many of us are already aware, they continue to lose market share. Red ink flows like a river of blood.
Let's keep to the facts and look at the numbers.
Troll leader Anonymouse Coward states that there are 7000 goatse.cx trolls. How many ascii art trolls are there? Let's see. The number of goatse.cx versus ascii art posts on Usenet is roughly in ratio of 5 to 1. Therefore there are about 7000/5 = 1400 ascii art trolls. Pimply-faced GNU hippies posts on $lashdot are about half of the volume of ascii art posts. Therefore there are about 700 Cock-Gobbling GNU Hippies. A recent article put "first post" at about 80 percent of the troll market. Therefore there are (7000+1400+700)*4 = 36400 "first post" trolls. This is consistent with the number of first posts.
All major surveys show that Putrid smelling greasy GNU hippies have steadily declined in market share. $lashdot is very sick and its long term survival prospects are very dim. If Grubby Smelly Linux Hippies are to survive at all it will be among troll hobbyist dabblers. $lashdot continues to decay. Nothing short of a miracle could save it at this point in time. For all practical purposes, Dirty GNU Hippies are dead.
Fact:: $lashdot is fucking stupid
Fact: usenet is dying. Usenet posts indicate that usenet is for the most part only frequented by pornographers, middle aged perverts, aol users, and illiterate linux zealots with no life and no future.
ATOP there was 44 posts moderated to 0 or less and only 18 posts at one or more. In conclusion when there are more trolls than proper comments then an article is +r0113d!
The most common articles to be trolled usually are.
BSD articles
KDE/Gnome articles
vi / emac articles
and kernel releases
Now mod this down as -1 troll too!
#!/usr/bin/tclsh ./slashdot_post.tcl body_filename.txt "Your subject line here" When done, it will output an html receipt with the story id, the comment id, and the new comment id (or "Preview") in the filename. ./slashdot_post.tcl inputfilename.txt \"This is my subject line\""; exit }
## Slashdot poster by christfokkar@yahoo.com 2002.04.24 version 1.0 Bug reports / feature requests welcome
## REQUIREMENTS You need tclsh (TCL language) 8.3 or higher. Should be installed on most unix systems. If not, go to http://dev.scriptics.com. Make sure the first line in the file #!/usr/bin/tclsh points to your tcl interpreter.
## INSTRUCTIONS You need to edit this script each time and set 6 vars. Then you specify the Body and the Subject on the command line. 1. Set the authorization info. Remember, there are three ways to post: logged in, logged in/anonymous, and logged out. You can leave your auth info in here and simply toggle the anon and rlogin flags. 2. Set the sid and pid of the comment you wish to reply to. Use pid 0 for a new comment 3. Set posttype, and decide whether you want to preview or submit 4. Execute
### AUTH CONFIG - SET ONCE
set unickname trollaxor
set upasswd i_am_in_jail
### COMMENT CONFIG - SET EACH TIME
set rlogin 1 #login
set anon 1 #post anonymously (must be logged in)
set sid 31620 #story id (article) - get this from slashdot
set pid 0 #comment id - get this from slashdot - set 0 for New Reply
set posttype 1 #posttype 1=text 2=html 3=extrans 4=code
set submit 0 #set 0 to Preview
### check version
package require http 2.3
regexp {8\.?} [info tclversion] match_one
if {![info exists match_one]} { puts "FATAL: You must be running Tcl >= 8.3 You are running [info tclversion]"; exit }
### get comment text from file
if {$argc == 2 } {
set inputfile [lindex $argv 0]
set postersubj [lindex $argv 1]
} else { puts "USAGE:
if {[catch {set fp [open $inputfile r]} catch_error ]} { puts "FATAL: Could not open inputfile $inputfile $catch_error"; exit }
set postercomment ""
while { ![eof $fp] } { set postercomment $postercomment\n[gets $fp] }
### set some vars
if {$anon && $rlogin} { set postanon "&postanon=1"; set anontext "logged in/anonymous" } else {
set postanon ""
if {$rlogin} { set anontext "logging in" } else { set anontext "not logged in" } }
set typetext "???"
if {$posttype == 1 } { set typetext "Plain Text" }
if {$posttype == 2 } { set typetext HTML }
if {$posttype == 3 } { set typetext Extrans }
if {$posttype == 4 } { set typetext Code }
if {$submit} { set op Submit } else {set op Preview}
### get formkey
puts "You are posting as $unickname, $anontext, $op mode as $typetext"
puts "Getting formkey..."
http::config -useragent "Mozilla"
if {[catch {set token [http::geturl http://slashdot.org/comments.pl?sid=$sid&pid=$ pid&op=Reply]} catch_error]} { puts "FATAL: Unable to GET comments.pl $catch_error"; exit }
upvar #0 $token state
regexp {NAME="formkey" VALUE="([0-9a-zA-Z]+)">} $state(body) match_two formkey
if {![info exists formkey] || ![string compare $formkey ""] } { puts "FATAL: Unable to retrieve formkey";exit }
if {$submit} { puts "Got formkey. Waiting 20 seconds to Submit..."; after 20000 } else { puts "Got formkey, Previewing..." }
### post comment
if {$rlogin} {set auth &[http::formatQuery unickname $unickname upasswd $upasswd]} else {set auth ""}
set query $postanon$auth&[http::formatQuery op $op sid $sid pid $pid posttype $posttype rlogin $rlogin formkey $formkey postersubj $postersubj]&[http::formatQuery postercomment $postercomment]
if {$submit} { puts "Submitting now..." }
if {[catch {set token [http::geturl http://slashdot.org/comments.pl? -query $query]} catch_error ]} { puts "FATAL: unable to POST query. $catch_error";exit}
upvar #0 $token state
### write out results
if {$submit} { regexp "Comment Submitted" $state(body) match_three } else { regexp "<H2>Preview Comment</H2>" $state(body) match_three }
if {![info exists match_three] || ![string compare $match_three ""]} { set success "Rejected" } else { set success "Accepted" }
if {$submit && $success == "Accepted" } { regexp {cid=([0-9]+)\"} $state(body) match4 cid; set cidtext "as_[set cid]" } else { set cidtext "Preview" }
set filename "story_[set sid]_replyto_[set pid]_[set cidtext].html"
if {[catch {set fp [open $filename w]} catch_error]} { puts "ERROR: Unable to open output file. $catch_error" } else {
puts $fp $state(body)
close $fp
}
set error_message "(grep for error text failed)"
if {$success == "Rejected" } { regexp {[ \n]*(.+?)[ \n]*} $state(body) match_five error_message; puts "REJECTED: $error_message" }
puts "END. Your $op was [set success]. Output to disk as\n$filename"
helicopter crash
dead flesh stinking charred flesh
freebsd death
Jon Barrett uses FreeBSD, and it doesn't seem like it's dying to him. Maybe he doesn't notice because he's busy SPOOGING over how much Linux sucks.
It smells like something is dead.
Yes! Dying it is! And when it's dead, it will go to Hell! And meet the DEVIL! Eh...
I am a Computer Information Systems Professional at a major Fortune 500 corporation. Very recently the head of our IT department decided that we were going to switch every one of our networks over to Windows XP Professional. We had previously been running OpenBSD on all our quad processor Xeons. Some of them had had uptimes approaching a year! My personal favourite, Gerbil, had been running without a reboot for three years.
One day one of those Microsoft shills that you often read about on the Register came by for a visit. I grew very suspicious about what was going on when my boss and the Microsoft representative walked by my desk, and entered the server room. I could hear muffled voices through the closed door. The Microsoft representative was asking what we were running on our servers! My worst fears had come true. I sat at my desk for the rest of the day, silently awaiting the bad news. The news did not come until the next day. It was worse than I had feared. We were to be a Microsoft only shop from that day on! I could not believe it. The Microsoft representative had told my boss that the operating and support costs would actually go down. And my boss had fully bought into it, hook, line, and sinker.
Tough times hit our company in the last month, and we were forced to lay off a few of the less experienced IS/IT workers. One of them took this rather hard. As a last minute attempt at corporate sabotage, he decided to change all of the Computer Administrator passwords on a few of the XP Professional boxes sitting around in the server room. This caused absolute havoc, as Dell had failed to send along administrator passwords for the new boxes. Our company could not make use of these computers for three days. It took Dell that long to get us the administrator passwords. It is strictly because of Microsoft's poor implementation of a multi-user computing environment that our company lost three days of productivity.
Needless to say, I had our quad Xeons back running OpenBSD by the end of the week. Gerbil is back on its way to another glorious 3 years of uptime.
Why now?Why did *SD fail? Once you get past the fact that *BSD is fragmented between a myriad of incompatible kernels, there is the historical record of failure and of failed operating systems. *BSD experienced moderate success about 15 years ago in academic circles. Since then it has been in steady decline. We all know *BSD keeps losing market share but why? Is it the problematic personalities of many of the key players? Or is it larger than their troubled personalities?
The record is clear on one thing: no operating system has ever come back from the grave. Efforts to resuscitate *BSD are one step away from spiritualists wishing to communicate with the dead. As the situation grows more desperate for the adherents of this doomed OS, the sorrow takes hold. An unremitting gloom hangs like a death shroud over a once hopeful *BSD community. The hope is gone; a mournful nostalgia has settled in. Now is the end time for *BSD.
That IDC research is very compelling. Why has your post been modded down?!? +5; Informative!!!