[总结]How to Shoot Yourself In the Foot

读到如下一段文字:

Writing multithreaded programs requires very careful design. The potential for introducing timing faults, or faults caused by the unintentional sharing of variables in a multithreaded program is considerable. Alan Cox (the Linux guru who wrote the forward to this book) has commented that threads are also known as “how to shoot yourself in both feet at once.”

“how to shoot yourself in both feet at once.”????

如下为解释:

与foot有关的用语实在多不胜数,除了前文所提及的外,还有to shoot oneself in the foot,例:
Our marketing strategy is a total disaster. Not only have our sales fallen, but because of our latest set of adverts, the competition have gone up! We have virtually shot ourselves in the foot.(我们的市场推广计划彻底失败。不但销路下降,由于我们近期的广告,竞争对手地位还上升了,我们这次真是自讨苦吃了。)

To shoot oneself in the foot这比喻源自弓箭手和枪手。为安全起见,他们往往把手上的武器指向地,可是假如武器走火,还是会射伤自己的脚。To shoot oneself in the foot这用语就指『因计划失误而害了自己』。

原来如此啊!

事物越搞越复杂,本来复杂性是用来解决问题的,结果反而自己迷失在复杂性里,自己搬石头砸了自己的脚。

技术是为了提高人们的生活水平的,结果偏偏有人在技术中迷失了方向,为了技术而技术。

另外找了一篇网上关于此的文章,顺便贴出。

感谢一位朋友帮助找的资料。

There are numerous variants of this on the Web. The original version was published in the December 1991 issue of Developer's Insight. I have been unable to track that down, but what follows is the closest approximation I can recover. If you know the actual languages included in the original article, please email me.


How to Shoot Yourself In the Foot

Developer's Insight, December 1991 (approx version)

The proliferation of modern programming languages (all of which seem to have stolen countless features from one another) sometimes makes it difficult to remember what language you're currently using. This guide is offered as a public service to help programmers who find themselves in such dilemmas.

C
You shoot yourself in the foot.
C++
You accidently create a dozen instances of yourself and shoot them all in the foot. Providing emergency medical assistance is impossible since you can't tell which are bitwise copies and which are just pointing at others and saying "That's me, over there."
FORTRAN
You shoot yourself in each toe, iteratively, until you run out of toes, then you read in the next foot and repeat. If you run out of bullets, you continue anyway because you have no exception-handling facility.
Modula-2
After realizing that you can't actually accomplish anything in this language, you shoot yourself in the head.
COBOL
USEing a COLT 45 HANDGUN, AIM gun at LEG.FOOT, THEN place ARM.HAND.FINGER on HANDGUN.TRIGGER and SQUEEZE. THEN return HANDGUN to HOLSTER. CHECK whether shoelace needs to be retied.
Lisp
You shoot yourself in the appendage which holds the gun with which you shoot yourself in the appendage which holds the gun with which you shoot yourself in the appendage which holds...
BASIC
Shoot yourself in the foot with a water pistol. On big systems, continue until entire lower body is waterlogged.
Forth
Foot yourself in the shoot.
APL
You shoot yourself in the foot; then spend all day figuring out how to do it in fewer characters.
Pascal
The compiler won't let you shoot yourself in the foot.
Snobol
If you succeed, shoot yourself in the left foot. If you fail, shoot yourself in the right foot.
HyperTalk
Put the first bullet of the gun into foot left of leg of you. Answer the result.
Prolog
You tell your program you want to be shot in the foot. The program figures out how to do it, but the syntax doesn't allow it to explain.
370 JCL
You send your foot down to MIS with a 4000-page document explaining how you want it to be shot. Three years later, your foot comes back deep-fried.

Of course, it didn't end there; there are many extensions to this idea (some included below). What many fail to recognise, however (especially those that add more complicated options for C, or reorder the list) is the meta-joke. Given the first line, the list starts off looking like yet another insult to C. But after reading the whole list, and coming back to the beginning, it becomes clear this is actually a compliment to C!

I have compiled the following lists from a variety of different sources on the Web, and from emailed suggestions; it includes contributions from Giles Constant, James Davis, Steve DiVerdi, Fritz Freiheit, Murray S. Kucherawy, Simon Mikkelsen, Doug Snell, Reynir Stefánsson, Wayne Throop, and Nick Wallis.


FORTRAN-77
You shoot yourself in each toe, iteratively, until you run out of toes, then you read in the next foot and repeat. If you run out of bullets, you continue anyway because you still can't do exception-processing.
Modula-2 (alternative)
You perform a shooting on what might be currently a foot with what might be currently a bullet shot by what might currently be a gun.
BASIC (compiled)
You shoot yourself in the foot with a BB using a SCUD missile launcher.
Visual Basic
You'll really only appear to have shot yourself in the foot, but you'll have so much fun doing it that you won't care.
Forth (alternative)
BULLET DUP3 * GUN LOAD FOOT AIM TRIGGER PULL BANG! EMIT DEAD IF DROP ROT THEN (This takes about five bytes of memory, executes in two to ten clock cycles on any processor and can be used to replace any existing function of the language as well as in any future words). (Welcome to bottom up programming - where you, too, can perform compiler pre-processing instead of writing code)
APL (alternative)
You hear a gunshot and there's a hole in your foot, but you don't remember enough linear algebra to understand what happened.
or
@#&^$%&%^ foot
Pascal (alternative)
Same as Modula-2 except that the bullet is not the right type for the gun and your hand is blown off.
Snobol (alternative)
You grab your foot with your hand, then rewrite your hand to be a bullet. The act of shooting the original foot then changes your hand/bullet into yet another foot (a left foot).
Prolog (alternative)
You attempt to shoot yourself in the foot, but the bullet, failing to find its mark, backtracks to the gun, which then explodes in your face.
or
No.
COMAL
You attempt to shoot yourself in the foot with a water pistol, but the bore is clogged, and the pressure build-up blows apart both the pistol and your hand.
or
draw_pistol
aim_at_foot(left)
pull_trigger
hop(swearing)
Scheme
As Lisp, but none of the other appendages are aware of this happening.
Algol
You shoot yourself in the foot with a musket. The musket is aesthetically fascinating and the wound baffles the adolescent medic in the emergency room.
Ada
If you are dumb enough to actually use this language, the United States Department of Defense will kidnap you, stand you up in front of a firing squad and tell the soldiers, "Shoot at the feet."
or
The Department of Defense shoots you in the foot after offering you a blindfold and a last cigarette.
or
After correctly packaging your foot, you attempt to concurrently load the gun, pull the trigger, scream and shoot yourself in the foot. When you try, however, you discover that your foot is of the wrong type.
or
After correctly packing your foot, you attempt to concurrently load the gun, pull the trigger, scream, and confidently aim at your foot knowing it is safe. However the cordite in the round does an Unchecked Conversion, fires and shoots you in the foot anyway.
Eiffel
You create a GUN object, two FOOT objects and a BULLET object. The GUN passes both the FOOT objects a reference to the BULLET. The FOOT objects increment their hole counts and forget about the BULLET. A little demon then drives a garbage truck over your feet and grabs the bullet (both of it) on the way.
Smalltalk
You spend so much time playing with the graphics and windowing system that your boss shoots you in the foot, takes away your workstation and makes you develop in COBOL on a character terminal.
or
You send the message shoot to gun, with selectors bullet and myFoot. A window pops up saying Gunpowder doesNotUnderstand: spark. After several fruitless hours spent browsing the methods for Trigger, FiringPin and IdealGas, you take the easy way out and create ShotFoot, a subclass of Foot with an additional instance variable bulletHole.
Object Oriented Pascal
You perform a shooting on what might currently be a foot with what might currently be a bullet fired from what might currently be a gun.
PL/I
You consume all available system resources, including all the offline bullets. The Data Processing & Payroll Department doubles its size, triples its budget, acquires four new mainframes and drops the original one on your foot.
Postscript
foot bullets 6 locate loadgun aim gun shoot showpage
or
It takes the bullet ten minutes to travel from the gun to your foot, by which time you're long since gone out to lunch. The text comes out great, though.
PERL
You stab yourself in the foot repeatedly with an incredibly large and very heavy Swiss Army knife.
or
You pick up the gun and begin to load it. The gun and your foot begin to grow to huge proportions and the world around you slows down, until the gun fires. It makes a tiny hole, which you don't feel.
Assembly Language
You crash the OS and overwrite the root disk. The system administrator arrives and shoots you in the foot. After a moment of contemplation, the administrator shoots himself in the foot and then hops around the room rabidly shooting at everyone in sight.
or
You try to shoot yourself in the foot only to discover you must first reinvent the gun, the bullet, and your foot. or
The bullet travels to your foot instantly, but it took you three weeks to load the round and aim the gun.
BCPL
You shoot yourself somewhere in the leg -- you can't get any finer resolution than that.
Concurrent Euclid
You shoot yourself in somebody else's foot.
Motif
You spend days writing a UIL description of your foot, the trajectory, the bullet and the intricate scrollwork on the ivory handles of the gun. When you finally get around to pulling the trigger, the gun jams.
Powerbuilder
While attempting to load the gun you discover that the LoadGun system function is buggy; as a work around you tape the bullet to the outside of the gun and unsuccessfully attempt to fire it with a nail. In frustration you club your foot with the butt of the gun and explain to your client that this approximates the functionality of shooting yourself in the foot and that the next version of Powerbuilder will fix it.
Standard ML
By the time you get your code to typecheck, you're using a shoot to foot yourself in the gun.
MUMPS
You shoot 583149 AK-47 teflon-tipped, hollow-point, armour-piercing bullets into even-numbered toes on odd-numbered feet of everyone in the building -- with one line of code. Three weeks later you shoot yourself in the head rather than try to modify that line.
Java
You locate the Gun class, but discover that the Bullet class is abstract, so you extend it and write the missing part of the implementation. Then you implement the ShootAble interface for your foot, and recompile the Foot class. The interface lets the bullet call the doDamage method on the Foot, so the Foot can damage itself in the most effective way. Now you run the program, and call the doShoot method on the instance of the Gun class. First the Gun creates an instance of Bullet, which calls the doFire method on the Gun. The Gun calls the hit(Bullet) method on the Foot, and the instance of Bullet is passed to the Foot. But this causes an IllegalHitByBullet exception to be thrown, and you die.

FOOTOS -- A Guide to Modern Operating Systems extended the joke to operating systems, with Unix playing the role of C, of course. And this too has grown...


Unix
You shoot yourself in the foot
or
% ls
foot.c foot.h foot.o toe.c toe.o
% rm * .o
rm: .o: No such file or directory
% ls
%
370 JCL (alternative)
You shoot yourself in the head just thinking about it.
DOS JCL
You first find the building you're in in the phone book, then find your office number in the corporate phone book. Then you have to write this down, then describe, in cubits, your exact location, in relation to the door (right hand side thereof). Then you need to write down the location of the gun (loading it is a proprietary utility), then you load it, and the COBOL program, and run them, and, with luck, it may be run tonight.
VMS
$ MOUNT/DENSITY=.45/LABEL=BULLET/MESSAGE="BYE" BULLET::BULLET$GUN SYS$BULLET
$ SET GUN/LOAD/SAFETY=OFF/SIGHT=NONE/HAND=LEFT/CHAMBER=1/ACTION=AUTOMATIC/ 
  LOG/ALL/FULL SYS$GUN_3$DUA3:[000000]GUN.GNU
$ SHOOT/LOG/AUTO SYS$GUN SYS$SYSTEM:[FOOT]FOOT.FOOT 

%DCL-W-ACTIMAGE, error activating image GUN 
-CLI-E-IMGNAME, image file $3$DUA240:[GUN]GUN.EXE;1 
-IMGACT-F-NOTNATIVE, image is not an OpenVMS Alpha AXP image
or
%SYS-F-FTSHT, foot shot
(fifty lines of traceback omitted)
sh, csh, etc
You can't remember the syntax for anything, so you spend five hours reading manual pages, then your foot falls asleep. You shoot the computer and switch to C.
Apple System 7
Double click the gun icon and a window giving a selection for guns, target areas, plus balloon help with medical remedies, and assorted sound effects. Click "shoot" button and a small bomb appears with note "Error of Type 1 has occurred."
Windows 3.1
Double click the gun icon and wait. Eventually a window opens giving a selection for guns, target areas, plus balloon help with medical remedies, and assorted sound effects. Click "shoot" button and a small box appears with note "Unable to open Shoot.dll, check that path is correct."
Windows 95
Your gun is not compatible with this OS and you must buy an upgrade and install it before you can continue. Then you will be informed that you don't have enough memory.
CP/M
I remember when shooting yourself in the foot with a BB gun was a big deal.
DOS
You finally found the gun, but can't locate the file with the foot for the life of you.
MSDOS
You shoot yourself in the foot, but can unshoot yourself with add-on software.

And it has extended even further, to databases, and other computer-related things...


Access
You try to point the gun at your foot, but it shoots holes in all your Borland distribution diskettes instead.
Paradox
Not only can you shoot yourself in the foot, your users can too.
dBase
You squeeze the trigger, but the bullet moves so slowly that by the time your foot feels the pain, you've forgotten why you shot yourself anyway.
or
You buy a gun. Bullets are only available from another company and are promised to work so you buy them. Then you find out that the next version of the gun is the one scheduled to actually shoot bullets.
DBase IV, V1.0
You pull the trigger, but it turns out that the gun was a poorly designed hand grenade and the whole building blows up.
SQL
You cut your foot off, send it out to a service bureau and when it returns, it has a hole in it but will no longer fit the attachment at the end of your leg.
or
Insert into Foot
Select Bullet
From Gun.Hand
Where Chamber = 'LOADED'
And Trigger = 'PULLED'
Clipper
You grab a bullet, get ready to insert it in the gun so that you can shoot yourself in the foot and discover that the gun that the bullets fits has not yet been built, but should be arriving in the mail _REAL_SOON_NOW_.
Oracle
The menus for coding foot_shooting have not been implemented yet and you can't do foot shooting in SQL.
English
You put your foot in your mouth, then bite it off. (For those who don't know, English is a McDonnell Douglas/PICK query language which allegedly requires 110% of system resources to run happily.)
Revelation [an implementation of the PICK Operating System]
You'll be able to shoot yourself in the foot just as soon as you figure out what all these bullets are for.
FlagShip
Starting at the top of your head, you aim the gun at yourself repeatedly until, half an hour later, the gun is finally pointing at your foot and you pull the trigger. A new foot with a hole in it appears but you can't work out how to get rid of the old one and your gun doesn't work anymore.
FidoNet
You put your foot in your mouth, then echo it internationally.
PicoSpan [a UNIX-based computer conferencing system]
You can't shoot yourself in the foot because you're not a host.
or (host variation)
Whenever you shoot yourself in the foot, someone opens a topic in policy about it.
Internet
You put your foot in your mouth, shoot it, then spam the bullet so that everybody gets shot in the foot.
troff
rmtroff -ms -Hdrwp | lpr -Pwp2 & .*place bullet in footer .B .NR FT +3i .in 4 .bu Shoot! .br .sp .in -4 .br .bp NR HD -2i .*
Genetic Algorithms
You create 10,000 strings describing the best way to shoot yourself in the foot. By the time the program produces the optimal solution, humans have evolved wings and the problem is moot.
CSP (Communicating Sequential Processes)
You only fail to shoot everything that isn't your foot.

In July 2002 Jim Nidositko emailed me the following story, with contributions to the list

Last summer, I found myself analyzing the plague of problems afflicting a sorely neglected MS-SQL Server implementation. This process was made more interesting by the fact that this analysis was being performed with an eye toward moving the database over to Sybase. My previous database experiences involved Oracle and Ingres, so I found myself learning about both platforms at the same time.
In short order I uncovered the fact of their shared heritage (early versions of MS-SQL Server were licensed from Sybase). This became a strong platform for understanding the differences between these two systems. I found it particularly fascinating that MS made it blindingly easy to get the system up and running, but in doing so it pretty much assured that you would shoot yourself in the foot by allowing the user to avoid performing basic tasks that are essential to good database design. Sybase, in contrast, makes it stupefyingly difficult to get a system up and running, thereby reducing your likelihood of foot shooting (by making it nearly impossible to shoot anything), but the Sybase documentation is so abysmal that you're also more or less assured of soundly shooting yourself for the difficulty of finding the information that will prevent this from among the confusing and circuitous cross references. This melange of similarities and contrasts inspired me to author the following vignettes. (Keep in mind, we were specifically trying to avoid any foot shooting, so these bits each end with advice toward that end.)
MS-SQL Server
MS-SQL Server’s gun comes pre-loaded with an unlimited supply of Teflon coated bullets, and it only has two discernible features: the muzzle and the trigger. If that wasn't enough, MS-SQL Server also puts the gun in your hand, applies local anesthetic to the skin of your forefinger and stitches it to the gun's trigger. Meanwhile, another process has set up a spinal block to numb your lower body. It will then proceeded to surgically remove your foot, cryogenically freeze it for preservation, and attach it to the muzzle of the gun so that no matter where you aim, you will shoot your foot. In order to avoid shooting yourself in the foot, you need to unstitch your trigger finger, remove your foot from the muzzle of the gun, and have it surgically reattached. Then you probably want to get some crutches and go out to buy a book on SQL Server Performance Tuning.
Sybase
Sybase's gun requires assembly, and you need to go out and purchase your own clip and bullets to load the gun. Assembly is complicated by the fact that Sybase has hidden the gun behind a big stack of reference manuals, but it hasn't told you where that stack is. While you were off finding the gun, assembling it, buying bullets, etc., Sybase was also busy surgically removing your foot and cryogenically freezing it for preservation. Instead of attaching it to the muzzle of the gun, though, it packed your foot on dry ice and sent it UPS-Ground to an unnamed hookah bar somewhere in the middle east. In order to shoot your foot, you must modify your gun with a GPS system for targeting and hire some guy named "Indy" to find the hookah bar and wire the coordinates back to you. By this time, you've probably become so daunted at the tasks stand between you and shooting your foot that you hire a guy who's read all the books on Sybase to help you shoot your foot. If you're lucky, he'll be smart enough both to find your foot and to stop you from shooting it.

In May 2003 Kristof Elst emailed me his contribution to the list

I'm a highly frustrated Magic Software developer who would rather be back to coding tsql. So I made my own version.
Magic software
You spend 1 week looking up the correct syntax for GUN. When you find it, you realise that GUN will not let you shoot in your own foot. It will allow you to shoot almost anything but your foot. You then decide to build your own gun. You can't use the standard barrel since this will only allow for standard bullets, which will not fire if the barrel is pointed at your foot. After four weeks, you have created your own custom gun. It blows up in your hand without warning, because you failed to initialise the safety catch and it doesn't know whether the initial state is "0", 0, NULL, "ZERO", 0.0, 0,0, "0.0", or "0,00". You fix the problem with your remaining hand by nesting 12 safety catches, and then decide to build the gun without safety catch. You then shoot the management and retire to a happy life where you code in languages that will allow you to shoot your foot in under 10 days.


Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。 Quartz的优势: 1、Quartz是一个任务调度框架(库),它几乎可以集成到任何应用系统中。 2、Quartz是非常灵活的,它让您能够以最“自然”的方式来编写您的项目的代码,实现您所期望的行为 3、Quartz是非常轻量级的,只需要非常少的配置 —— 它实际上可以被跳出框架来使用,如果你的需求是一些相对基本的简单的需求的话。 4、Quartz具有容错机制,并且可以在重启服务的时候持久化(”记忆”)你的定时任务,你的任务也不会丢失。 5、可以通过Quartz,封装成自己的分布式任务调度,实现强大的功能,成为自己的产品。6、有很多的互联网公司也都在使用Quartz。比如美团 Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度。   课程说明:在我们的日常开发中,各种大型系统的开发少不了任务调度,简单的单机任务调度已经满足不了我们的系统需求,复杂的任务会让程序猿头疼, 所以急需一套专门的框架帮助我们去管理定时任务,并且可以在多台机器去执行我们的任务,还要可以管理我们的分布式定时任务。本课程从Quartz框架讲起,由浅到深,从使用到结构分析,再到源码分析,深入解析Quartz、Spring+Quartz,并且会讲解相关原理, 让大家充分的理解这个框架和框架的设计思想。由于互联网的复杂性,为了满足我们特定的需求,需要对Spring+Quartz进行二次开发,整个二次开发过程都会进行讲解。Spring被用在了越来越多的项目中, Quartz也被公认为是比较好用的定时器设置工具,学完这个课程后,不仅仅可以熟练掌握分布式定时任务,还可以深入理解大型框架的设计思想。
[入门数据分析的第一堂课]这是一门为数据分析小白量身打造的课程,你从网络或者公众号收集到很多关于数据分析的知识,但是它们零散不成体系,所以第一堂课首要目标是为你介绍:Ø  什么是数据分析-知其然才知其所以然Ø  为什么要学数据分析-有目标才有动力Ø  数据分析的学习路线-有方向走得更快Ø  数据分析的模型-分析之道,快速形成分析思路Ø  应用案例及场景-分析之术,掌握分析方法[哪些同学适合学习这门课程]想要转行做数据分析师的,零基础亦可工作中需要数据分析技能的,例如运营、产品等对数据分析感兴趣,想要更多了解的[你的收获]n  会为你介绍数据分析的基本情况,为你展现数据分析的全貌。让你清楚知道自己该如何在数据分析地图上行走n  会为你介绍数据分析的分析方法和模型。这部分是讲数据分析的道,只有学会底层逻辑,能够在面对问题时有自己的想法,才能够下一步采取行动n  会为你介绍数据分析的数据处理和常用分析方法。这篇是讲数据分析的术,先有道,后而用术来实现你的想法,得出最终的结论。n  会为你介绍数据分析的应用。学到这里,你对数据分析已经有了初步的认识,并通过一些案例为你展现真实的应用。[专享增值服务]1:一对一答疑         关于课程问题可以通过微信直接询问老师,获得老师的一对一答疑2:转行问题解答         在转行的过程中的相关问题都可以询问老师,可获得一对一咨询机会3:打包资料分享         15本数据分析相关的电子书,一次获得终身学习
shoot method”是指摄影中的一种拍摄技巧或方法,该方法旨在捕捉快速运动或动作的瞬间。它不仅适用于体育摄影,还可用于捕捉飞鸟、奔跑的动物或任何其他需要快速反应和准确时机的场景。 在使用shoot method时,摄影师需要具备以下几点技巧和准备: 1. 预拍规划:摄影师需要提前观察拍摄场景,了解物体的运动路径和速度。他们应该选择一个有利的拍摄角度,并对光线、背景等因素进行预先调整。 2. 快速对焦:为了捕捉动作的瞬间,摄影师需要熟悉相机的对焦系统,并能快速准确地对焦。使用连续对焦(AF-C)模式可以帮助保持被摄物体的清晰度,并确保动作序列中的每一帧都准确聚焦。 3. 快门速度:为了冻结快速运动,摄影师需要使用较高的快门速度。这可以通过增加ISO值、打开快门优先模式或使用快速快门固定位置来实现。 4. 连续拍摄:使用连续拍摄模式可以增加成功捕捉运动的几率。摄影师可以通过持续按下快门按钮来连续拍摄一系列照片,然后在后期选取最佳的那一帧。 5. 比例和构图:快速运动时,摄影师需要考虑动作的比例和合适的构图。他们可以通过调整焦距、选择适当的图像剪裁或使用高速连拍来实现。 通过掌握这些技巧,摄影师可以发挥shoot method的优势,捕捉到精彩的瞬间,并呈现出令人惊叹的视觉效果。无论是在体育赛事、自然生态还是其他活动中,shoot method都是一种有力的工具,帮助摄影师记录下运动中的精彩瞬间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值