Freesteel Blog » 2007 » September

Wednesday, September 26th, 2007 at 7:27 pm - - Machining 1 Comment »

There’s an annoying obsession with speed which is something to do with getting sales — it’s the one and only property of CAM software which users bother to perceive when shopping around.

I always thought that as long as the software generated toolpaths faster than the machine could run them, we’d be ahead. Remember, I began programming this stuff on 486s when it was the other way round, so that always seemed to be the benchmark.

Except it isn’t these days. Don’t people realize that unnecessarily speeding up the software decreases reliability by making the code far more complex, as well as taking time away from improving features? It’s no good telling programmers to make it as fast as they can, because that’s asking for a lifetime of work. No one is sure what the upper limit on speed is, and you could work for a month and make the software only 1% faster.

Sometimes you find that after a lot of work you’ve made it 10% slower because you made a guess that turned out wrong. Suppose the job is to steer an object through a maze. You can put more and more effort into the path planning so that it goes the shortest route, but at some stage it starts to take longer to get the perfect path than the time “lost” on a sub-optimal solution.

The fundamental function in CAM systems is the Dropcutter routine. Given the shape of the cutter, the set of triangles, and the XY coordinates of its axis, lower the cutter in Z until it makes contact with the first triangle.

For most strategies, most of the time is consumed in this function.

The trivial implementation is to loop through all the triangles, calculate the contact height between the tool and each triangle (if there is one), and pick the highest. This doesn’t work if the function is used a million times on a part that has a million triangles because then the inner loop is executed a trillion times.

An optimized implementation is to bucket the triangles: arrange a grid across the region of interest. Each cell in the grid contains the list of triangles which cross over it. Then if you search only through the cells which are in the shadow of the cutter at its XY position, you can narrow down the number of triangles you compare against considerably.

There are many optimizations to add to this. One thing to note is that there is a trade-off. If the gridcells are too wide then the triangle search are not narrowed very well (in the extreme case you have one gridcell and the situation is back as it was before). If you make the cells too small then you lose a lot of time scanning through thousands of cells, which soon becomes just as bad as scanning through the thousands of triangles in the first place.

The optimum width for the cell has to be found by experiment. I’ve tried to set projects for new programmers to run scripts to search for the optimum in a variety of situations, but it’s never caught on. The gridcell width has always been set at 20% of the cutter radius since I first set it in 1995, and has never been changed. The concept of rigorously working it out by running the algorithm thousands of times on different computers continuously and analyzing the results seems too hard to get across as something which is important.

A more optimized and memory intensive option is to offset the triangles by the cutter shape before posting them into the cells. This means that instead of scanning through all the cells in the shadow of the cutter (a circle around the XY position the radius of the shaft), you scan only in the cell that contains its centre point. Now there is no compromise with the efficiency. The smaller you make the cells, the more focussed is the scanning since the number of triangles that overlaps each cell is reduced towards the theoretical minimum. All you do is set the amount of memory you want to consume, and go for the limit.

Unfortunately, the geometry involved in considering the offsets of the triangulated surface is rather complex, which is why up till now I have only ever attempted it for the triangles. Now for the first time I am attempting to extend it to the edges and points of the triangulation.

An offset triangle is just a triangle. An offset edge (for a ballnosed cutter only) is a piece of a cylinder which, when you project it into the XY plane, is composed of two parallel lines and two halves of an ellipse. The blue and green parts on the shape above is what I am referring to. That surface overlaps exactly 11 cells of the red grid.

Luckily you can use the connectivity of the triangles to the edge to narrow it down significantly. For example, if two triangles connect to an edge downwards like butterfly wings it’s impossible for the ball to make contact with it and it can be disregarded. If the triangles are nearly coplanar, there’s a thin rectangle where cutter can touch it. Only when the two adjacent triangles bend downwards like a pitched roof can a wide area of contact be made. In this case it would be across 6 cells in the blue region.

A crude implementation in a mere 600 lines of code (there are many special cases with this shape if you want to do it fast) takes 20% away from the execution time. I’m beginning to work on the vertex problem next. I’m leaving aside toroidal cutters for the moment. Tapered cutters are, for sure, are going to have to lump it. Life is too short.

Thursday, September 20th, 2007 at 1:41 pm - - Machining 3 Comments »

The world is fat and the resulting crumbling knees presents a business opportunity.

I’ve got a got a small piece of ray-tracing software feeding in to a project that Liverpool University are doing in the field of “Rapid Manufacture of Industrially Relevant Hierarchical Structures”, where Relevant is for Stryker Orthopaedics. This builds your implants using lasers and powdered metal to create a porous product which your bones can grow into.

I’ve watched this project happen over years, so it’s interesting to learn of the competition which is cutting its knee implants on a machine tool using Camworks software for Viasys Healthcare who then etches it. Viasys also sells TrabeculiteTM, a fully-engineered, porous, titanium structure. I thought these things were patented. Anyway, this means someone out there has written the same ray-tracing function as I have. It’s quite likely because it’s rather low-level. Shame it’s not all open source, or it would all be better.

Where else can I find a familiar-looking algorithm?

Teksoft is showcasing CAMWorks 2008 on stand G18, hall 6 at the EMO 2007 exhibition in Hannover… New toolpath strategies and controls have been implemented for 2-5 axis milling, turning and wire EDM to improve quality and decrease machining time. For example, significant enhancements in 3 axis milling include:

* Adaptive roughing strategy provides the ability to cut using the full depth of the tool and safely run your machine at optimum speed, which can reduce machining time up to 40% over conventional roughing with less wear.

In January, the CEO of Teksoft said:

We believe that the CAM developers need to get rid of the ‘not-invented-here’ philosophy and transition to a license the best-of-class technology and integrate it strategy.

In September in an article promoting the idea of modularity among developers of programming software the CEO said:

“I’d need around 400 people if I were to match all of the R&D engineers that I leverage into my products through these ISV [Independent Software Vendor] and third-party associations around the world… In the past, the strategy was to develop everything yourself… The downside of doing that is you can’t offer the best of class in everything. You typically have a technology that you excel at, and are mediocre at everything else. So the customer might get the best three-axis milling package available, but get a lousy lathe or EDM package with no sheetmetal capability. That kind of a solution no longer fits today’s market expectations…

“Rather than pretending that a couple of guys in the back room can come up with everything that we need, we buy our HSM algorithms from a third party that devotes 10–15 programmers to developing just the HSM modules.”

I suppose it’s satisfying to see the businessmen finally catching up to what I was thinking five years ago at the start of this adventure. While the CAD market had gone through this process in the late 1990’s with companies being proud to say they were using the Parasolid kernel or the ACIS kernel, the CAM market has largely chosen to keep everyone in the dark whilst a kind of consolidation has been going on in the background forced upon them against their will owing to a dire lack of suitable software developers.

Of course, when a couple of the few very capable software developers makes themselves available, it always helps to completely ignore them for years and deal only through hard-nosed businessmen whose diabolical business plans don’t leave enough room to buy lunch, because the mere creators of software are just too lowly to even give the time of day to. Companies do not make software. A small number of people at their desks make software. And they do a lot of other things as well, after having discovered that working for companies is a totally sh!t way to spend your life.

Wednesday, September 19th, 2007 at 11:06 am - - Machining 1 Comment »

My guess is that this is one of the most used lies in the world of business.
But sometimes it’s true, like yesterday when I called a company a second time to chase up an invoice that was well overdue. On my first phone call I was told that somebody would call back but never did; and on my second call a day later I was told that a “cheque is in the post”… I can’t help but see a connection here, or do you really believe the cheque would have been in the post without my insisting phone calls, after nearly 2 month since I sent the invoice?

Luckily I knew about the late payment legislation and how to word an invoice: If the money is not handed over after 30 days of your invoice date you can claim compensation for debt recovery as well as interest for every day the payment is late.

Funny that the company who owed the money probably know all this from writing their own invoices: They are charging their customers periodically for their products, and I bet you that any overdue payment is dealt with in a swift and efficient way, much more efficient than we are.

Finally the cheque arrived today, and my invoice for debt recovery and interest will go out today as well. I will keep you posted on the next cheque that should be in the post soon.

Wednesday, September 19th, 2007 at 9:18 am - - UN, Whipping 1 Comment »

Yesterday the 62nd session of the General Assembly opened. You can look up the webcast here. The schedule is A/61/1015. There’s going to be quite a bit of climate change on this one. It won’t all be drowned out by the skewed discussions on “terrorism”.

You’ll also notice that one ongoing event which has resulted in an estimated 1.2 million violent deaths and 2 million refugees has not made it onto the agenda. There are many things which the United Nations can do nothing about, but there are others which it can’t even talk about.

It’ll take a while for the documents to start flowing through to the site due to their extensive typesetting. There are still some meetings from session 61 missing, specifically meetings A/61/PV.105, A/61/PV.107 and A/61/PV.108, which haven’t shown up. I don’t know if the thematic meetings will ever get transcribed.

Friday, September 14th, 2007 at 12:58 am - - Whipping

I just went to a townhall debate on the motion Liverpool believes that traditional politics has failed. Against the motion was Lord Rodgers, a former secretary of state for transport and founder of the SDP, and a Labour Party local councilor who is a barrister and has stood as an MP in a seat to the north of here.

(He can’t stand for election in my constituency because it’s already held by a Labour MP in a safe seat, and she basically has tenure. There is no functioning democratic mechanism for removing her, short of dropping a bomb out of a helicopter — an action she thinks is perfectly reasonable against her political opponents, as long as they are blind and in a wheelchair.)

When it got to questions from the audience, it got a bit rowdy. The big issue was of the local council selling off a large slice of public park for a gigantic Tesco’s supermarket, keeping all the details commercially confidential, and doing everything in its power to ignore and deny local opinion.

Not being good at thinking aloud, I didn’t say anything useful. Here’s what I would have said:

We’ve been told that the “traditional” democratic procedures are perfectly all right, because we have the options to express our political opinions by (a) voting, or if that doesn’t work, by (b) joining a party and running for office, or if that doesn’t work, by (c) setting up our own party (he chuckled, slapping Lord Rodgers on the back).

Unfortunately, due to the electoral system and the location of my house, my vote doesn’t count for anything at all. I am also not a barrister with ten years of training in public speaking to make myself eligible for political office. And I also haven’t got 20 years of Parliamentary service, building up connections with enough people and able to break away and form my own party.

You, sir, have therefore recommended that I be content with these three options within the “traditional” process, which you know won’t work as certainly as you know that my applying for one of those Executive’s jobs printed in the Financial Times won’t work. That is immoral.

I am surprised I have not heard of a fourth option for these good people of Kirby who are going to lose their park to Tesco’s, which is: “If they don’t like it, they should not go shopping there when it’s built.”

The only things that have ever, ever worked to move politics forward have been strikes, riots, direct action, and civil disobedience. If the locals cared to put their minds to it, they could certainly break in and create enough mischief against all the machinery used for the destruction of their park over the course of the build to become part of the business calculation.

These extremely traditional methods get issues forced onto the agenda where concessions can be made. It has totally obvious that you cannot reason with your employer for a 40 hour week unless you are able to threaten a damaging enough strike. Otherwise he is not going to talk.

It would seem to me that the most important pillar of our current highly developed political process is a systematic mis-education of the public into the false belief that our current series of institutions (a) work and are self-correcting, and (b) are wholly responsible for all the gains we have made so far. They are not.

Our politicians are the last people we should trust to tell us whether the system is doing a good job. They have a conflict of interest. Yet they are always the ones the media turns to for comment.

Tuesday, September 11th, 2007 at 10:57 pm - - UN, Whipping 3 Comments »

This article will be updated

This website needs contributions from programmers as well as from active users.

Users can find, read, and research pieces of information buried in these speeches and documents, and share them by blogging about them, or citing them from from wikipedia articles. For a selection of articles that have links to documents indexed by this site, click here.

More instructions to follow.

Programmers and web-designers should be able to recognize many deficiencies which they may have the time to correct. At this point I’ll welcome any help. Everything is backed up on knowledgeforge awaiting your perusal. Python source code for the website is available here and the scraper/parser is available here awaits your perusal. At present, for ease of development, it runs without a database.

Job 1 If you know about PDF files, a really useful job would be to insert hyperlinks into them wherever a reference to another UN document is present. For example, in this page of a document I have highlighted six references to other documents which should be hyper-linked. It would be useful to have a stand-alone module through which each document could be filtered that would massively improve the browsing experience whilst enabling the backtracking the links to find what future documents refer to this one.

At the limit, such a module would incorporate an OCR capabilities so that links could be inserted into the many older documents that have been photographically scanned.

Job 2 A wide field for research text mining. When heads of state visit New York to speak at the United Nations, they often mention historical events in order to illustrate their speech. Probably the most commonly mentioned event is 9/11, but there are many others. A consequence of any good text mining system should be to be able to identify which historical events are mentioned in each speech and flag them for future visualization. Perhaps there is a relationship between the location of the event, and the territory which the speaker represents.

Job 3 If you have a lot of money and influence to make things happen and want to contribute, please turn it into programming directly by paying/bribing a programmer to get something done. I am utterly hopeless at converting money into work (productive or not) so there is no point me having it.

Tuesday, September 11th, 2007 at 10:38 pm - - UN, Whipping 2 Comments »

Updates will be made to this article

Having done a lot of work for the UK Parliamentary parser in the service of my webpage (with Francis) and mySociety’s far more popular, the project was both obvious and familiar once I had seen that it was possible to download the Parliamentary documents from the United Nations website.

Unlike the UK Parliament, the source documents for the UN are in PDF form rather than HTML. This makes it far more difficult to extract the information from.

Almost all pre-1994 United Nations documents are bitmap scans embedded in a PDF file, while later ones contain character information which can be extracted using a piece of free software called PDFTOHTML.

The result is a file containing the pixel positioning of each word as it appears on the page, for example:

<text top="902" left="122" width="327" height="14" font="6"><b>The President </b><i>(interpretation from French)</i>: None</text>
<text top="920" left="90" width="358" height="14" font="1">the less, I should like to endorse strongly the practical</text>
<text top="938" left="90" width="358" height="14" font="1">suggestion made at previous sessions that each delegation</text>
<text top="956" left="90" width="358" height="14" font="1">designate someone to be present at the scheduled time. I</text>
<text top="974" left="90" width="358" height="14" font="1">sincerely hope that all delegations will cooperate in this</text>
<text top="992" left="90" width="42" height="14" font="1">regard.</text>
<text top="109" left="512" width="12" height="14" font="1">In</text>
<text top="109" left="543" width="60" height="14" font="1">paragraph</text>
<text top="109" left="621" width="19" height="14" font="1">11,</text>
<text top="109" left="659" width="18" height="14" font="1">the</text>
<text top="109" left="695" width="47" height="14" font="1">General</text>
<text top="109" left="761" width="67" height="14" font="1">Committee</text>
<text top="127" left="481" width="347" height="14" font="1">recommends to the General Assembly that delegations</text>
<text top="145" left="481" width="347" height="14" font="1">should be reminded of the utmost importance of</text>
<text top="163" left="481" width="71" height="14" font="1">punctuality.</text>
<text top="163" left="566" width="262" height="14" font="1">May I take it that the General Assembly</text>
<text top="181" left="481" width="194" height="14" font="1">approves that recommendation?</text>
<text top="218" left="512" width="111" height="14" font="5"><i>It was so decided.</i></text>

Once this has been done, it takes a good many days of hacking work using the very effective text processing capabilities of Python and fixing many of the invisible typos to develop what is known as a scraper and parser which can process it into a structured form more like:

<div class="spoken" id="pg002-bk08">
<h3 class="speaker"> <span class="name">The President</span> <span class="language">French</span> </h3>
	<p id="pg002-bk08-pa01">None the less, I should like to endorse strongly the practical suggestion....</p>
	<p id="pg002-bk08-pa02">In paragraph 11, the General Committee recommends to the General Assembly that...</p>

<div class="italicline" id="pg002-bk09">
	<p id="pg002-bk09-pa01">It was so decided.</p>

This then is amenable to the website generating tools and can be used to generate many of the capabilities that we should expect from online information, such as searchability and automatic hyperlinks.

Unfortunately, the software behind the webpage is quite primitive. You can see the files which run it here

Ideally, a bureaucratic organization such as the United Nations would migrate away from paper and conduct its business using structured data without reference to the printed documents. Unfortunately, this us unlikely to happen any time soon.

Tuesday, September 11th, 2007 at 5:20 pm - - Machining

How do I get any work done? I don’t. I’ve been getting mightily pissed off with it, which is why everything is a distraction. If it wasn’t for this UN website, I’d be fixing every hole in every sock in my drawer just to avoid doing what I’m supposed. It’s like getting programmers’ block.

Things have settled down a bit. I have a large function to write to do with testing cutter interference with triangles, but it’s mostly a ten finger exercise. The structure of it is already given, so all I have to do is write the routines which tell whether a given edge intersects with a given cutter position without calculating how high in Z that cutter needs to be lifted in order to no longer intersect with it. The formulae are all different, but much simpler; all I have to do is fill in the blanks. This function is used in some of the linking routines, although obviously the lift-cutter function will give the answer just as well (the cutter intersects if and only if it gets lifted), although a little slower. However, having the lift-cutter value when it does intersect is useful for creating the shortest link paths.

That does remind me that someone will maybe want to know which side did the interaction so as to move the cutter sideways in the opposite direction by the right amount. But this won’t be found in the fast routine, because the function will quit as soon as anything is found in the way. Although maybe this doesn’t do a lot of good since if you do quit early after having found a collision, you now don’t have a valid cutter location, so you will need to know where to look next. Encouraging the scatter-gunning of a lot of points doesn’t seem to enable the right answer.

I don’t write the linking algorithms myself; it’s a fidgety job left for the boys at Cimco. I expect to see the horror of someone using this fast test-for-intersection routine to binary-search for cutter locations near the place they want because it’s too hard to find the right function.

A follow-up function will do the same for sweep volumes of the cutter so that you can tell immediately if a long segment of linking path does not collide with anything.

None of this actually achieves any new functionality; it’s all for speed and efficiency.

Pencil overthickness This was an idea I came up with years ago while writing Machining Strategist/Depocam. Could have been around 1997. One would have to review the old instruction manuals to pinpoint the date. To the best of my knowledge, I am the originator of this strategy. Although there is so little access by the programmers to the features of someone else’s CAM system that this feature might be rife everywhere, and each team has invented it independently.

As it doesn’t say in wikipedia yet, pencil milling is the the toolpath you get by connecting up all the cutter locations where the tool is in contact with the part twice. These are normally along grooves where there is a distinct corner or a concave surface whose radius is less than that of the cutter. It has been conventionally used to leave smooth fillets along these internal corners with by following them with a ball-nosed cutter of the appropriate size so you don’t need to program the fillets into the model. What you design in the CAD is not the same as what you eventually cut. It’s simplified. Your biscuit mould might be made with sheet metal sharp corners, but the cooked biscuits are attractively rounded at the edges due to the process of baking.

Then along comes the modern day CAD systems with all their fancy-shmancy reliable filleting routines, and people start designing exactly what they want cut, including all those rounded grooves. Suddenly when you test the tool against them there are no longer any clear double contact point locations. They’ve added smooth ramps to the pavement curbs so you don’t notice the bump when your bike rolls off into the road.

The answer is to use overthickness. If you applied thickness to the cutters (add a value to all dimensions of the cutter to make it bigger), you could recover the pencil passes that had been obliterated by the presence of these stupid fillets that were set to the radius of the tool you wanted to cut with. Then if you projected these passes for the bigger cutter back to the surface, you’d get a result that was consistent with what the user wanted.

And therein lies the problem. Since I haven’t got a “project this toolshape in a slantwise direction to hit the surface” function, I’m having to do it by dropping the smaller cutter somewhere in between the contact points along the vertical axis. The results are terrible in this example no matter what I do. I’ve tried all variations of dropping the cutter at points that are not half-way between, at points that lie along the curve on the tooltip joining the two contact points, but nothing works.

I don’t think it worked consistently in Depocam either, but those were the old days before models started getting ridiculously wobbly and complicated, and features like this were known as advanced, so you were quite pleased if they worked at all for what you were doing.

So, I have to give up on this. The ultimate answer probably has to be these five-axis features, where the cutter is not lowered into contact along its axis, but is brought slantwise along arbitrary vectors. Then I will position the small cutter at the centre of the thickened cutter and project it at the fillet surface along a smoothly varying vector.

Which brings me back to the beginning. This will be a season of heavy finger-exercises slamming out the calculations for all these different geometric configurations. That and the other major complaint about the speed of the constant scallop routine under some circumstances has to be addressed. It’s all a nuisance.

Roll on those multicore processors now already. I’ve a lot of ideas for parallelizing the computations, and this will be a lot more interesting and fruitful in the long run than shuffling around stupid instruction sets or tuning parameters that no one is interested in.

Tuesday, September 11th, 2007 at 4:02 pm - - Whipping

A mere four days after I sent them the FOI request, I got a response. How’s that? When I was making requests to Bristol it was evident they had a special filing system that ensured that no response ever came back earlier than four hours within the statutory 20 working day time limit.

Sadly, they don’t have any information.

I am advised by the team within Becta who handles this area of work that it is still relatively early days with regards to the framework life cycle and a decision has yet to be taken on how and where to publish the information collected. However, specifically in relation to your request, Northgate Information Solutions have not to date reported any sales through the framework, and therefore we do not hold the information you have asked for.

So much for grist for that panel discussion. I still need a little bit of clarification.

Thank you for your prompt response. I hope not to take up too much of your time.

Can you confirm that the framework life cycle is three years, as said in the letter from last year?

Can you also confirm that the £8.9 million contract signed by Northgate last year for the supply of ICT equipment to Bristol City Council has nothing to do with this framework or any other contracts arranged by Becta?

Have any of the 16 suppliers begun filing quarterly management reports?

I have been attempting to discover the legal basis for that particular deal for over a year. It appears not to have gone through the EU procurement process, nor used a framework agreement. Meanwhile, they have refused point blank to provide any details of the contract. You should know that, of all the organizations I have dealt with, Becta has been the most helpful with regards to FOI requests. It would be ironic if, as a result of a culture of accountability, business was choosing to bypass it.

Tuesday, September 11th, 2007 at 11:17 am - - UN, Whipping 3 Comments »

With reference to which is a website and parsing system that has taken quite a bit of time to put together.

I have been told by colleagues that I am wasting my time. Instead I should be doing something to earn money. It’s a sad situation that when you invest a lot of effort into something that has the potential (though not the certainty) to improve the world, you barely get any encouragement. You have to keep justifying what you are doing. Even people who do say they support you don’t get very involved.

I have decided to outline some of the justifications for what I am doing below. These are not the reasons the project got started; I just did what I had the power to do. These ideas came much later. Hopefully people will think of other tangible uses in the future.

The United Nations is not supposed to be a democratic institution. It is an organization that has a mission statement and is, presently, the only planetary institution that has the potential to mitigate the self-destructive forces that have emerged from the affairs of the human species. That mission statement, written in 1945, reads:

To save succeeding generations from the scourge of war, which twice in our lifetime has brought untold sorrow to mankind

To reaffirm faith in fundamental human rights, in the dignity and worth of the human person, in the equal rights of men and women and of nations large and small

To establish conditions under which justice and respect for the obligations arising from treaties and other sources of international law can be maintained

To promote social progress and better standards of life in larger freedom

Presently, the United Nations is staffed by the cream of the world’s diplomatic elite. These men and women know how tread lightly around the most powerful interests in society without causing offense, whilst sometimes persuading them to do the right thing.

Unfortunately this does not mean they achieve enough to guarantee survival.

If these men and women knew that there were people in the outside world, beyond their cosy culture of diplomacy, watching what they did, perhaps it would be easier for them to find their voices.

Example 1: In September 2003 the Security Council submitted its annual report for the period from August 2002 to July 2003 in document A/58/2. This was an important report, for it covered the period in which a permanent member of the Security Council bombed, invaded, and occupied a sovereign nation nowhere near its border in a manner seemingly inconsistent with the Charter of the United Nations. Prior to this action, there was a great deal of debate in the Security Council as well as significant disputes over whether the nation in question had actually breached its Security Council resolutions. However, lacking the diplomatic words to describe the events in a way that wouldn’t offend, the issue was barely covered (between page 19 and page 20). Furthermore, no procedure was put into place to get to the bottom of the dispute, and the issue has never since been brought up for discussion. Out of the entire General Assembly, only the Ambassador for Brazil noted (paragraph 3) the deficiency of this particular report.

Example 2: The General Assembly rule of procedure (listed under the section Maximization Utilization of time available) states that

“condolences addressed to a delegation on the death of a prominent person or in the event of a disaster should be expressed solely by the President of the General Assembly.”

As a result, it is possible to compile a list of such condolences since 1994. Included are many natural disasters and tragic incidents that have happened over this time period when the General Assembly happened to be in session. The list includes a handful of notable terrorist attacks. However, tragic events involving massive losses of innocent lives resulting from the firing of cruise missiles are omitted, presumably because the people in the Assembly knew that there is no way they could mention such “sensitive issues” diplomatically.

Example 3: There have been a topics, such as the Question of the Falkland Islands, the United States bombing of Libya in 1986, and the Israeli bombing of an Iraqi nuclear installation which have been persistently on the agenda, but are systematically postponed for decades. Rarely do any delegates note the embarrassing nature of this situation.

If people from outside the culture of politics and diplomacy watched what was going on and read the documents with their own eyes, perhaps it would not be so easy for the Security Council to file incomplete reports; perhaps people would be generally appalled by what massacres are not worthy of official condolence; perhaps the items on the Agenda would be seen as having so little relevance to the visible crises, that it would become more politically awkward to not to mention them than to mention them.

There are problems. There will always be problems. But there is major evil in hiding those problems and actively protecting the very sources of those problems.

The international diplomatic community, like any elite crowd, operates, exists and thrives on respect. No respect should be granted by the mere holding of office. It should be earned. Do the ambassadors for your country conduct their affairs in ways that make you proud to be a citizen, or are they shameful? Only you can decide.

People, everywhere, need to learn how to explore for themselves these vast troves of recent historical official documents. In and of themselves, they do not provide answers. What they do is bring up questions. When you find evidence that goes totally against the official narrative, you have to ask “What does this mean?” and “Why is this inconsistent with what I know?”

There are questions. Thousands of them. Almost all will be outside the scope of the managed political message of the day. If all of us developed the habit of digging around into every different corner imaginable and started asking real Questions, the powers that be won’t have had time to craft and prepare their sets of answers to fit with the official narrative.

Why knows. They might be left with no alternative but to tell the truth.