約 5,592,106 件
https://w.atwiki.jp/bicky/pages/50.html
Images 解像度の小さいモニターでは大きい写真は左右が欠けると思われます。 なお、IE6 では表示に不具合? 中 1 2 3 4 5 12 14 15 大 6 7 8 11 13 16 17 18 縦 9 10 19
https://w.atwiki.jp/musiki/pages/29.html
Sending Orbs レーベル 2004年に設立された、オランダのエレクトロニカレーベル。運営にはKettelことReimer Eising、彼の兄弟Wouter Eising、そしてKristian PetersEachがいる。 またレーベルのアートワークは中国在住のJeroen Advocaatが担当している。 公式Webではレーベル作品に対する各メディアのレビューが公開されている。Sending Orbs | Reviews 所属ミュージシャン Blamstrain Funckarma Kettel Legiac Secede Yagya Links 公式Web My Space
https://w.atwiki.jp/uo_house/pages/41.html
[← スタッフ専用ページ に戻る] ここにはサイトの背景画像・ポイント画像をアップして下さい。 アップ後は、画像の下のタグを挿入すると一発です。 アイテム画像 (最終更新日:2009年10月03日) 各ページごとにアップせずに、共用するといいと思います。 :DEED image(deed_s.gif,page=images,width=30,height=29,inline) :デコツール image(deco-tool.gif,page=images,width=18,height=24,inline) :TAF染め画像へのリンク用 image(taf-dyes.gif,page=images,width=11,height=17,inline,http //www5.atwiki.jp/uo_house/pages/●.html) ※●の部分にはページ番号(数字)を入れる。尚、普通にリンクを張るときのようにページ名ではリンクできません。 :樽 image(barrel.gif,page=images,width=46,height=43,inline) :タブ image(tub.gif,page=images,width=46,height=33,inline) :ピッチャー image(pitcher_w.gif,page=images,width=33,height=17,inline) :家具タブ image(furniture-dye-tub.png,width=26,height=26,inline) [← スタッフ専用ページ に戻る]
https://w.atwiki.jp/chex/pages/319.html
Tips This page is a collection of fine materials and techniques those are not written in the lectures. From local minor tricks to practical major technologies, let s be adding more techniques that come up with. TipsRotation speed of during rotational movement Conditions of rotation jump Rotation jump utilizing Auto-Rotate Targ. The behavior of the rotation jump Offset move Simplified focused lock-on About the turning when firing Elevation defect of gun type arms Control of the surface-to-air lock-on by toroidal range designation Decrease in the stability when they're struck Shooting during overturning Attack on the ground types using anti-aircraft aerial mines Attack on the flying types using anti-ground aerial mines Forced termination of combat by out of fuel Option lasts as long as energy endures Stop firing during special moves involving firing Flying OKEs resisting high gravity Rotation speed of during rotational movement “Rotation speed is reduced while turn on the Auto-Rotate Targ, when you start to move in after one or more frames.” (It is displayed as "Forward + Clockwise" and the like in information) By performing Halt rotate chip after one or more frames from that state, It is possible to perform the rotational movement while maintaining the rotating speed of the original (Display becomes "Forward", etc.), let us remember the case of performing rotational movement. Incidentally, even when performing the rotational movement by Move chips and Rotate chips, rotation speed is reduced. Since there is no way to increase the rotation speed in this case, in the scene that can activate Auto-Rotate Targ., it would be better to use it as much as possible. Conditions of rotation jump You can perform the rotation jump when you executing Jump while rotating by Rotate chips. But… “Rotation jump does not occur if it is moving and Auto-Rotate Targ. is on.” When you perform the rotation jump, Halt moving or turn off the Auto-Rotate Targ. is necessary. Examples that conditions of rotation jump occur and do not occur are shown in the link. http //cosmo-ko.cocolog-nifty.com/blog/2011/03/post-2d14.html Note that there is a need to use the Rotate chip since rotation jump does not occur in the jump and Auto-Rotate. It is noted also that you cannot perform rotation jump if you execute Rotate during jump. If you do not design the program consciously, you cannot perform the rotation jump accurately. It is good to remember when you are designing legged OKEs. Rotation jump utilizing Auto-Rotate Targ. Rotation jump does not occur if Auto-Rotate Targ. is on. But in a state in which it is displayed as "Forward + Clockwise" and the like since Auto-Rotate Targ is on, it is possible to perform the rotation jump if you execute in the order of turn off Auto-Rotate Targ. → Jump. For example, rotation jump occurs without use of Rotate chip when you programmed in this way. Although it should be noted that the rotational speed becomes slow as previously described and fine adjustment does not work on the angle of rotation of jumping as described below, if you incorporate well, it is possible to implement a rotation jump with a small number of chips. The behavior of the rotation jump Depending on the angle of rotation that is specified before the jump, turning angle of the rotation jump is determined in one of several stages of the angle prescribed. (Two-stage seems to many, but not yet examined on all models) It is necessary to note that even if you specify the angle finely such as 60 degrees or 30 degrees, it is rotated at an angle prescribed in each body. However, if it was not rotated to the specified angle until the landing from a jump, the rotation is performed during the landing motion. Although the jump handled as normal if you execute Halt rotation after one or more frames of rotation jump, it rotate to the same angle as the rotation jump since rotational inertia is not canceled. Rotation jump consumes more fuel than a normal jump. Fuel efficiency is improved if you execute Halt rotation during rotation jump because fuel consumption also becomes the same as the normal jump. Offset move The move method of approaching the opponent while avoiding bullets by keep moving forward while capturing opponent diagonally forward. The technique is mainly used in vehicle type, but it is easy to leverage this in flying types or bodies perform melee. The easy way to perform the offset movement is, to set the direction of Auto-Rotate Targ. slightly diagonal than the right in front and just move (mainly forward). The case of moving forward, approaching an opponent sooner and easier to fire as orientation closer to the front but easier to be struck, it tends to be unlikely to be struck as orientation farther to the front but more difficult to fire and harder to approach the opponent. Tractable orientation is 10 ~ 30 deg. approximately, but it is preferable to adjust to such as proper distance and moving speed of the bodies to be used. Simplified focused lock-on Place friendly OKEs in tandem, lock on giving priority to opponent of front when the battle start, then it becomes the state that all the friendly is locking on the same opponent. On account of the formation, the head is likely to be exposed to crossfire and tends to interfere with the line of fire of the friendly. It is a valid technique when it is desired to realize focused lock-on with a small number of chips. About the turning when firing In a state of locking on the target, when performing the firing using the chips of Shoot Reticle, Firing Direction, or Select and Fire, phenomenon that the body is turning to firing direction occurs in some bodies and throwing of grenades. Bodies that occur are as follows. (The armaments that occur are in parentheses) Negroni (Weapon 1) Eggnog (Weapon 2) Norlander (Weapon 1) Moonlight (Weapon 2) Gravestone (Weapon 1 and 2) Fried (All weapons) Priest (All weapons) Mockingbird (All weapons) Bodies that the turning occurs in all weapons have narrow angle of fire. But because the turning occurs, hit can be expected when you perform the firing under conditions of wider angle of fire than its own. On the other hand, if you do not want to capture the front opponents such as orbiting near the wall, it is necessary to avoid occurring turning by using Firing Direction chip to fire in front. In the case of two-legged bodies, since to be able to capture the opponent in front of them even in the middle of a jump, it would be better to make active use. Elevation defect of gun type arms When gun type arms are fired toward depression and elevation angle of more than 63 degrees (straight up or down), bullets are fired to unnatural angle different from the direction of the arms. Therefore, gun type arms are not possible to aim the depression and elevation angle more than 63 degrees. However, only beam guns can be fired at the same elevation as they appear. When the shotgun shell was shot just below or just above, since the angle is limited to 63 degrees to each bullet, it scatters significantly. Submunitions of explosives and rockets are also limited to an angle of 63 degrees. Depression or elevation is different for each OKE. Not a few OKEs can be moved their gun barrel up to near 90 degrees but because of this phenomenon, called the elevation defect, cannot be shooting straight up or down when you use the arms except beam guns. For this specification, beam guns have advantageous performance of air-to-ground and ground-to-air among the gun type arms. Control of the surface-to-air lock-on by toroidal range designation Since many of ground types have limited elevation angle, it is very difficult to score a hit by the main armament on the flying opponents which are located just above. It is possible to specify a toroidal range, such as 50m ~ 800m to various determinations such as lock-on in EXA. By using this feature, it becomes possible to lock on another opponent while ignoring the flying types which are too close to attack. It will be a particularly important technique when using OKEs affected by the elevation defect. Decrease in the stability when they re struck OKEs become enormous stumble state when subjected to high damage (overturning motion occurs). Stability decreases significantly during overturning. Even when they re shot by beam gun at an additional, overturning motion continues. If it is able to continue to hit the opponents in that state, it s possible to keep overturning the opponents, put them to destruction eventually. In the case of OKEs that overturn opponents easily (such as equipping canon, approaching to place mines, be good at melee), additional attack operation when the opponents struck may be decisive factor of victory. Shooting during overturning Although it is not possible to take most of the actions during overturning, shooting spree can be executed.You can deal with mines near or missiles of additional attack by Sonic Blaster and can interfere with the pursuit of the opponents by spraying mines or missiles Attack on the ground types using anti-aircraft aerial mines Anti-aircraft aerial mine can be made to hit even on the ground types if fired at close range because the contact detection begins immediately after it is fired. (To hit the Kraken to ground type opponent that is performing charge is known as an effective tactic to counter the charge) Similarly, to hit the land mine on flying types is also not impossible. But this is not practical. Attack on the flying types using anti-ground aerial mines Anti-ground aerial mines have characteristics that they are hovering above 60 m raised from fired altitude. Therefore, when firing the anti-ground mines to a high altitude by a flying type or Special Move of Tripod, they can be reacted and attack to flying types fighting in 100m altitude. Forced termination of combat by out of fuel When the predetermined time has elapsed in a state that all surviving OKEs become incapacitated by out of fuel, the battle is terminated and the determination of win or loss is made by the Remaining OKEs or Durability Left % at that time. Needs attention that the battle is terminated even though can be re-act since it is equipped with Regeneration Armor. Option lasts as long as energy endures For options involving the consumption of energy for use, if the energy of the body becomes empty while option is activated, its use is interrupted. Options that can be performed without consuming the energy such as Self-Repair System and Self-Destruction System will not be interrupted. Stop firing during special moves involving firing If you execute Halt fire during special moves involving firing, it is possible to interrupt the firing and remain only motion of special moves. However, even though it continues to stop the firing, only one shot is fired. (There is a possible case to cancel first shot if you execute firing in advance and then perform special move in reload time) Flying OKEs resisting high gravity Flying type will crash immediately after the battle starts at High-Gravity Facility, but it is possible to avoid crashing in a state sticking to the ground by continuing to cancel some operations such as special moves. Note 1st high-gravity flight tournament
https://w.atwiki.jp/chex/pages/313.html
Direciton Order Direciton OrderSet Flying Altitude Activate Option Lock-On Auto-Rotate Targ. Change Sight Location Counter and Lock-On Cancel Lock-On Change Camera View. Alert Set Flying Altitude Order the OKE to keep its flying altitude. Invalid for OKEs other than flying-type OKE. Activate Option Order the OKE to activate its optional equipment. Can be activated at any time, no matter what OKE is doing. Lock-On Lock-on to the target OKE. Target lock will continue until a new target is set up. Auto-Rotate Targ. Auto-Rotate Targeting. Turn Auto-Rotate Targeting on or off. Change Sight Location Select where to aim to shoot the target. Target OKE when no weapon is specified or destroyed. Counter and Lock-On Lock-on using Counter value. Lock-on not available when can’t find OKE in search range. Cancel Lock-On Cancel lock-on. Change Camera View. Change the camera view. Alert Select the setting for alert sound and display.
https://w.atwiki.jp/uo00/pages/959.html
bag of sending 概要 画像: 日本語名 転送バッグ 外見: 俗称: 入手:ソレンクィーン クエスト 性能 バッグパック内のアイテムを銀行内に転送することが出来る。 解説・用途 転送バッグをWクリして転送したいアイテムをターゲットする。バックパック内でしか使用できないし、転送するアイテムも同バッグ内の物しか出来ない。 Cursed アイテム、コンテナ類は転送できない。 1チャージにつき一回転送できる。チャージの補充にはPowder of Translocation(転送の粉末)を使う。 累計100ch以上はチャージ出来ない。 関連アイテム Powder of Translocation(転送の粉末) 関連リンク コメント 名前
https://w.atwiki.jp/hitsville/pages/47.html
When You Praise(by Fred Hammond) (chorus 1) when you praise, when you praise, their should be a fire in your heart. hands up raised, when you praise, consuming every part beacause you know the GOD we serve will make his presence known,when you praise, when you praise. (x2) when we think of how wonderful and merciful and kind our GOD has been to us. then we know every glory hallelujah he deserves, when we praise (back to chorus 1) praise will bind, confuse and break the enemy. and cause his hands to be still. so we raise our hands in total victory we know we triumph in his will. (woman sings chorus 1) when we praise, when we praise, there should be a fire in your heart. hands up raised when you praise, consuming every part because you know (chorus) the GOD we serve will make his presence known. oh, when we praise, when we praise, when we praise. (fred sings chorus 1) let us praise, let us praise with fire in our heart hands up raised let us praise consuming every part because you know the GOD we serve will make his presence known. (fred) when we praise, when you praise say, when you praise and say there is none (there is none like you) when you praise, my sister when you praise my brother, when you lift up your hands and open up your mouth and say (our GOD is an awesome GOD yeah) when you, when we praise when you lift your hands, in the midst of your trouble when you praise, when you praise and say bless (bless the lord on my soul) say when you praise when they praise when the body of christ gets together and lifts up their voice is whats its called when we praise, when we praise and say there(there is none like you) my brother when you lift your voice in the midst of your trial and sing, yeah when you praise. and you say(our GOD is an awesome GOD yeah) when you praise, when we praise when you praise and say bless (bless the lord on my soul) on my soul, when you praise we praise his holy name, hey when you praise, (when we praise) you can put your hands in here tonight if you want to (continue to "liing word")
https://w.atwiki.jp/dslua/pages/34.html
フォルダ「simple blit, stylus and keys」 ソース img = Image.load("man.png", VRAM) x = 10 y = 10 while not Keys.newPress.Start do Controls.read() if Stylus.held then x = Stylus.X y = Stylus.Y end if Keys.held.Up then y = y + 2 end if Keys.held.Down then y = y - 2 end if Keys.held.Right then x = x + 2 end if Keys.held.Left then x = x - 2 end startDrawing() screen.blit(SCREEN_DOWN, x, y, img) screen.print(SCREEN_UP, 0, 0, "Use the stylus or + to move the man") screen.print(SCREEN_UP, 0, 8, "Press START to quit") screen.print(SCREEN_UP, 0, 184, "FPS "..NB_FPS) stopDrawing() end Image.destroy(img) img = nil x = nil y = nil 使用している画像 man.png 実行結果 フォルダ「sprite and keys」 ソース spr = Sprite.new("sprite.png", 24, 32, VRAM) spr addAnimation({0,1,2,1}, 300) -- Walk up spr addAnimation({3,4,5,4}, 300) -- Walk right spr addAnimation({6,7,8,7}, 300) -- Walk down spr addAnimation({9,10,11,10}, 300) -- Walk left x = 150 y = 80 direction = 1 while not Keys.newPress.Start do Controls.read() startDrawing() spr playAnimation(SCREEN_DOWN, x, y, direction) if Keys.held.Up then direction = 1 y = y - 1 end if Keys.held.Right then direction = 2 x = x + 1 end if Keys.held.Down then direction = 3 y = y + 1 end if Keys.held.Left then direction = 4 x = x - 1 end screen.print(SCREEN_UP, 0, 184, "FPS "..NB_FPS) screen.print(SCREEN_UP, 0, 0, "Press START to quit") stopDrawing() end spr destroy() spr = nil x = nil y = nil direction = nil 使用している画像 sprite.png 実行結果
https://w.atwiki.jp/takumi-memo/pages/56.html
Overview of the Tutorial このチュートリアルは、特定のコンテントのURLを書き直すためのConfluence Autoconvertの拡張をどのようにするかについて触れる。 次のコンポーネントを構成するプラグインを作成する。 A JavaScript file providing an Autoconvert handler. A plugin descriptor (XML file) to enable the plugin module in the Atlassian application. これらのコンポーネントは全て、単一のJAR Fileに含まれている。 Required Knowledge このチュートリアルを完全なものにするために, JavaScript developmentの基礎についての知識が必要である。 How to create an Atlassian plugin project using the Atlassian Plugin SDK. Step 1. Create the Plugin Project まずはプラグインプロジェクトを作成する。 group-id com.example.plugins.tutorial artifact-id autoconvert-dev-docs Step 2. Add Plugin Metadata to the POM プラグインなどの情報に関するmetadataを加えるために、POM fileを編集する。 1.Edit the pom.xml file in the root folder of your plugin. 2.Update the confluence.version element to at least Confluence 4.1 confluence.version 4.1 /confluence.version 3.Add your company or organisation name and your website to the organization element organization name Example Company /name url /url /organization 4.Update the description element description Changes link text on URLs pasted from developer.atlassian.com. /description 5.Save the file. Step 3. Add a Plugin Module to the Plugin Descriptor src/main/resources/atlassian-plugin.xmlのプラグイン・ディスクリプタにプラグイン・モジュールを追加する。 The extension point for Autoconvert is through JavaScript, so you ll need to add a JavaScript Web Resource Module. Your web resource module needs to specify the location of a js file that will create your autoconvert handler. The things that separate it from other Web Resource Modules are ■It should depend on the core autoconvert plugin so that it will always be loaded after it, and will not be loaded if that plugin is missing. ■It should be loaded whenever the editor is loaded, by specifying the editor context. Here s one I prepared earlier ? !-- Add this to your atlassian-plugin.xml -- web-resource key="autoconvert-dev-docs" name="Autoconvert developer.atlassian.com example handler" description Changes link text for URLs pasted from /description resource type="download" name="autoconvert-dev-docs.js" location="js/autoconvert-dev-docs.js"/ !-- This will ensure the resource is loaded after autoconvert, and only if autoconvert is enabled. -- dependency com.atlassian.confluence.plugins.confluence-paste autoconvert-core /dependency !-- Assuming the dependency above is met, this context means that whenever the editor is loaded, so is your autoconvert handler. -- context editor /context /web-resource Step 4. Write the Code for your Autoconvert Handler Create a js directory in src/main/resources and create a new file called autoconvert-dev-docs.js file in that directory. Note that this matches the location in the resource in the XML descriptor. The simplest possible Autoconvert handler looks like this ? (function(){ AJS.toInit(function($){ // Create a handler that does nothing but call the continuation done() var pasteHandler = function(uri, node, done){ done(); }; // Register the handler tinymce.plugins.Autoconvert.autoConvert.addHandler(pasteHandler); }); })(); Focus on the pasteHandler function. The arguments passed to it are ■uri - a uri object as produced by the parseUri library. ■node - a jquery object for the pasted anchor node. ■done - a continuation function for the pasteHandler to call when it s done. Call it with no arguments when you do not want to change the link, or pass it the replacement or modified node when you do have changes. It should always be called exactly once in all possible code paths. The continuation done may seem very complicated now, but it s helpful for asynchronous conversions, which we won t discuss in this tutorial. Take a look at a simple developer.atlassian.com ("DAC") address, such as https //developer.atlassian.com/display/CONFDEV/Confluence+Developer+Documentation. The parseUri library has a demo page at http //stevenlevithan.com/demo/parseuri/js/. If you paste https //developer.atlassian.com/display/CONFDEV/Confluence+Developer+Documentation into its Input field you will see various uri parts available from the uri object. In this case the following parts are important ■host should be "developer.atlassian.com" ■directory should start with "/display/" ■directory should then contain a space key and a page title ■anchor should be blank for now. Converting links to headings is out of scope for this tutorial. You can split the directory part easily enough using the built-in split function. Note that the directory starts with a slash and split will thus give an array of ["", "display", "CONFDEV", "Confluence+Developer+Documentation"] So start by writing a condition for when you want to do a conversion ? if (uri.host == "developer.atlassian.com" directoryParts.length == 4 directoryParts[0] == "" directoryParts[1] == "display" uri.anchor == "") { Then think about what you want to do when we find such a link. The existing URL is fine, you don t need to change anything about the destination, but you do want to change the text of the link. There are a few things you could change it to. You might want to include the spacekey (directoryParts[2]) or an identifier to say that it s on developer.atlassian.com. Eg ? But it s probably nicer most of the time to leave it out and just go with the page name. There s also some tidying we have to do. You need to decode any special characters in the path using the built-in decodeURIComponent function, and that still won t turn plus characters into spaces, so you have to do that too using replace ? var pageName = decodeURIComponent(directoryParts[3]).replace(/\+/g, " "); node.text(pageName); Then we have to tell the controlling code, via the continuation, that we do want to replace the node. ? done(node); Once the conversion is done, all the handlers will be retried, so the handler has to ensure it doesn t just keep matching forever. The easiest way to do that is add an extra check to the condition, that node.text() == uri.source. All together it looks like this ? (function(){ AJS.toInit(function($){ var pasteHandler = function(uri, node, done){ var directoryParts = uri.directory.split( / ), pageName; if (uri.host == "developer.atlassian.com" directoryParts.length == 4 directoryParts[0] == "" directoryParts[1] == "display" uri.anchor == "" node.text() == uri.source) { pageName = decodeURIComponent(directoryParts[3]).replace(/\+/g, " "); node.text(pageName); done(node); } else { done(); } }; tinymce.plugins.Autoconvert.autoConvert.addHandler(pasteHandler); }); })(); Step 5. Build, Install and Run the Plugin Follow these steps to build and install your plugin, so that you can test your code. If you have not already started the application, start it now ■Open a command window and go to the plugin root folder (where the pom.xml is located). ■Run atlas-run (or atlas-debug if you might want to launch the debugger in your IDE). From this point onwards, you can use FastDev to reinstall your plugin behind the scenes as you work. Use the FastDev servlet to trigger the reload 1.Make the changes to your plugin module. 2.Go to your browser and navigate to the FastDev servlet http //localhost 1990/confluence/plugins/servlet/fastdev. 3.Do a hard refresh of the page ■Shift+Reload in most browsers. ■Ctrl+Reload on Windows or in Internet Explorer. ■In Safari 5, you will need to hold down the Shift key while clicking the Reload icon in the Location bar. 4.Go back to step 1. As an alternative to FastDev, you can keep the application running in one command window and use the CLI (command line interface) in another window to dynamically re-install your plugin after each change. 1.Open a new command window and go to the plugin s root folder (where the pom.xml is located). 2.Run atlas-cli to start the CLI. 3.Wait until you see a message, Waiting for commands. 4.Run pi (plugin install) to compile, package and install the plugin. 5.Go back to your browser. The updated plugin will have been installed into the application, and you can test your changes. (You may need to refresh the browser page first.) 6.Make your changes in your IDE. 7.Go back to step 1. The full instructions are in the SDK guide. Step 6. Try it out. Try copying the URL of this page and pasting it into the editor. The text of the link should change so that it looks like Plugin Tutorial - Extending Autoconvert rather than just the URL. Step 7. Play! Write your own extensions. This is about the simplest autoconvert extension possible, but there are more things you can do. Just quickly, here are a few How-to examples Inserting an image If you want to change the link into an image ? var imageUrl = "the url of the image, maybe uri.source, or maybe a modified form of that". done($( img class="confluence-embedded-image confluence-external-resource" src=" + imageUrl + " data-image-src=" + imageUrl + "/ )[0]); Inserting a macro If you want to change the link into a Confluence macro (must be a 4.0+ style xhtml macro) ? Inserting arbitrary converted wiki content Sometimes the easiest way to write editor format html is to ask Confluence to produce it from wiki markup. ?
https://w.atwiki.jp/mopsprogramming/pages/173.html
There are some arguments against NEON OO Model on which Mops and Win32Forth are based. Most of those arguments stands on some implicit presuppositions that lead to the conclusionthat NEON OO Model is bad. I hate to participate in political debates disdaining something. But I will try here to defend NEON OO Model against tricky arguments. By the way, I never try to refute other OO models than that of Mops. Simply I want to free Mops OO Model from wrong images. An Object should be passed via parameter stack in Forth dialects? In Object Orientation Semantics, Object is a receiver of messages and an actor. It is not considered as a Data or Parameter or other thing to be passed to a procedure via parameter stack. Surely, an object is internally some data in Mops and Win32Forth, too. But the fact belongs to the implementation details. Implementation detail is another problem than the syntax and semantics of a language. If one says objects must be data so that they must be passed via parameter stack as parameters, the one is losing sight of OO semantics and sticking to the second class or pseudo OO, say, "Data Orientation". Of course, it is never wrong in itself for objects to be able to be passed as parameters. The objectID (normally pointer) of an object is surely a datum. But at the same time it could not be called a defect of the system if an object would not be passed as a parameter in normal message sending. So "selector object" syntax is never worse than "object selector" syntax from the view of OO semantics (human interpretation). Or rather "selector object" syntax is better in message sending appearance in my opinion because it distiguishes the actor (object) from parameters to be processed by it. The fact that Selector cannot be ticked hinders extensibility. By the way, why can Selector always be ticked? Tick pushes xt of the word ticked to data stack. Which xt? Selector is not a word in that its execution semantics is undefined without combining witha class or object. Surely, after defining a way of binding a selector can be ticked. That is, we can do in NEON Model AMETHOD SELECTOR [] ; AMETHOD But it is because by defining the selector as being late bound, looking for the appropriate method of a passed object through class linkage becomes a part of contents of SELECTOR s execution semantics.The opinion that a selecor should always be tickable is based on a presupposition thatselector always has its definite execution semantics.But the presupposition itself is false in NEON Model.In OO semantics of NEON Model it is object, not selector that looks for method in its class on gentting message. Normal selector in NEON model is a part of message but not a name of a procedure by itself. Still you need early bound method xt? If so you can do in PowerMops ref ACLASS AnObjRef no_subclasses \ ossia ObjPtr AnObjRef class_is ACLASS AMETHOD ( param1 param2 ... ^obj -- ? ) - AnObjRef SELECTOR AnObjRef ; AMETHOD Or you need faster late bound method xt using a methods table? If so you can do in PowerMops ref ACLASS AnObjRef AMETHOD ( param1 param2 ... ^obj -- ? ) - AnObjRef SELECTOR AnObjRef ; AMETHOD AnObjRef can be a temporary (that is, local) object when it is declared with "ref". Addition (8/3/06) An object could be seen as an actor or data+index to method. parameters selector object syntax shows the object as an actor and parameters+selector=message as Input to the object. That is, selector is a part of input to object.It is default OO syntax of NEON model, so we cannot reproduce the process or function from selector via tick. Why could we know from a part of the input, the process in which it will be thrown? On the other hand, Mops allows also to see an object as data+index to method.Index to method is a pointer to the class or to the method table in PowerMops.Other optional arrangements for method binding represent this consideration. Smalltalk-like late bind is slow. Yes, it is slow compared with early bind. Late bind is about 20 times slower than early bind in some bench mark code in PowerMops.But early bound method is very fast in PowerMops. Although it can not be generalized, early bound method of PowerMops on PPC seems to be about 5 times faster than equivalent non-OO code in GForth native on x86 machine in CPU clock base from some data. Anyway, PowerMops early bound method is really fast.Late bind is slower than _it_. On PowerPC, PowerMops late bound method is about 10 % faster than non-OO equivalent codein GForth 0.6.2. Damn slow? Definitely NO. In reality, iterative late binding (polymorphism) happens often on a heavy task in itself like "DRAW".In such a case over head concerning method binding is almost negligible. Besides. Who can say NEON Model is incompatible with a vtable like late bind?PowerMops class does build a methods table. It is not the matter of OO model.Again, an implementation detail!PowerMops doesn t require something like VIRTUAL declarations of methods, unlike C++.Quite handy. To tell the truth, PowerMops normal (wihout vtable) late binding implementation has a special search optimization (acceleration) mechanism. As the result, it becomes fast as it is.System implementer can and should elaborate one s implementation in order to make the system fit with the preference, unless the implementation details should be controlled by others. Conclusion An argument such that using such and such technique internally is bad will come typically from the view of language system implementers, not from that of users of the language. We could see the OO feature of a language as one of the tools to write application in the language. Implementation details could be left to the ingenuity of system implementers.Then we could concentrate the syntax-semantics relation of OO constructs.In this respect NEON model is not bad. If you have your own (favorite) Forth with OO extension different from NEON model,NEON model may look bad and ununderstandable. So what?From my experience Mops OO feature is very good for application programming.But if you don t understand and never have done programming in Mops, Mops code will look like unreadable. That would hold for any languages.The strength of OO syntax of PowerMops may be best realized when you are writing some application in PowerMops. -- Maybe not when you are trying to implement the OO model for your system. Theories concerning OO generally look like bound by (negatively or positively) the world view of Algol family (C, C++, Java). But Forth is flexible and extensible language, instead of inflexible and fixed language, like C.Why do we need to worry about OO theories build (aversively) on (procedural or sometimes even including hybrid type) Algol family languages?Java model may be good (the best? how about Objective-C? you stick to the (a bit old) industry and/or scholastic standard? It may be ok. But unfortunately we are free from such a credo.) OO construct in context of C. But its OO syntax and semantics look still in half way. "When an object is passed as a parameter to a procedure,the procedure checks the class and ..." This sounds like always-virtualized C++. But we really need it on Forth?Surely NEON model didn t look like (reversed) Java. But so what? Is it a bad signal in itself? In my opinion, the thought that an object is data is a quite low level idea.Even if such a thought is allowable, taking an object quite the same as other parameters is wrong according to the standard OO way of thinking. It might be better to push object IDs onto another stack than normal parameter stack in that such a thought, at least, is not confusing objects with data parameters.But once we suppose a special object stack to which objects are dynamically pushed at runtime, default late binding begins to look very natural in order to send messages consecutively to anonymous objects in the object stack. This thought seems to treat objects as a group of data.This grouping is realized as class-structures in Java or C++. Late binding loosens tight and narrow restrictions of class-as-type mechanism in Java or C++,and virtual method utilize this looser grouping. So late binding (sometimes identified with polymorphism) is seen as the true establishment of OO for Java or C++. In this philosophy, an instance (individual) is derived from its group (whole or class structure). Building the structure (set-subset grouping) is more important than individual objects. Objects (instances) are processed by something (method) according to the group they belongs to. Methods are the first class entities in this view, so each of them should have the independent meaning inspite of naming collisions.This is quite different from the philosophy of NEON model where the property of an individual object is more important than class structure, and the structure is a mere result of the similarity of properties among objects. Objects (instances) process some data as processors using their methods.Objects are the first class entities and methods are secondary (ancillary) to the object that knows them. Surely, PowerMops uses systemcall functions. Those are written in C++ so that a system object is a data -- low level object -- to be passed as a parameter to a function.But we know our OO model can cohabit with it because ours lives at higher level. In NEON OO model we don t need to stick to the lower level to keep low level accessibility because our moving to the higer level never sacrifice the lower level constructs. Such a cohabitation of low level and high level is Forth, I think. In my humble opinion, C++ or Java looks like taking a side road to OO. In Smalltalk or NEON model we think that an object has its ability (functionality) and propertiesand shares those with other objects by inheritance. While in C++ or Java all such things seem to be treated in view of accessibility. It is not, of course, illogical. But at the same time such accessibility definitions can be so much complicated thatan object cannot be recognizable as a semantically definite entity. I suspect that this growing tendency of the complication of rules to define wether to allow/prohibit accessing may cause, so to speak, concentration of abstract class structure and thought that an object is a mere data because such a complication is very likely to break the unity of an object as an actor. Of course, such way of thinking or programming habit comming from the C++ or Java situation is neither bad nor good in and by itself. My point is that different presuppositions will lead to different ways of thinking or programming habits. Terribly bad design fom one point of view may not be so bad from another point of view, vice versa. We should reflect on which presupposition we are putting in evaluating something. That s all. Mops default method binding is said to be Early Binding. But it is programming-default or a kind of standard, not interpreter and/or compiler default. Mops allows plural ways of message sending. But the way of binding is always explicit in code. Mops doesn t try to force programmers to take one certain way. It simply leaves many possibility to the programmers.It may be considered bad in the world of standard programming. But if they were true, Forth itself would be bad.Additionally we never confuse normal words with messages to invoke corresponding methodsin Mops code because they obey distinguishable syntax rules. Word and selector are different entities in NEON model, so they look different in Mops code. It is natural, I think. NEON OO model is said to be based on Smalltalk model.It is true that Smalltalk is too different from Forth since it is pure OO language. But we should be able to learn from Smalltalk (or other pure OO language) a natural and straightforward OO syntax-semantics correspondence, and think about its realization in Forth. From this point of view, NEON model has a excellent mesage sending appearance in my opinion. Moreover, advantages of NEON model are more in practical aspects of programming than in theoretical ones.This achivement is surely an evidence of Forth s tremendous expressive power since whole the OO construct has been written in Forth. Or you insist we should keep Forth pure? Well, but we never lose the pure Forth by adding OO constructs. Supplying NEON OO feature will never prevent us from programming in pure Forth.It is the strength of Forth we are referring to. You may need a simplicity. But there is no THE simplicity. Simple doesn t always mean short code.Fortunately, everything is already simple in Forth -- aren t you confused by your implicit suppositions?You may say "we should wipe it hour by hour and let no dust alight".But we will reply "it is always clean so where can the dust alight?"(Zen of Forth). Appendix a defect of some of Object-Method syntax (unfinished) My argument was(is) supposing PowerMops as a typical example of NEON OO model. And I treated only standard OO syntax of PowerMops. PowerMops has some OO related features that were not mentioned above.For example PowerMops allows also object-method(+class information) syntax for binding. We can select one way according to the situation. PowerMops class can have a method whose content may be different object-wise, and, when needed, can be changed dynamically. But this feature is achived by xt-variable functionality, which is already in standard Forth.That is, PowerMops solves this problem via instance variables, not inheritance. Since standard Forth already has the solution, NEON model doesn t need additional theoretically sophisticated late binding mechanism or other OO functionality to solve it. (I don t know what OO features Win32Forth has. But I think what features PowerMops has could be implemented in Win32Forth.) This article was written as a reaction agaist the claim "message-object syntax is bad or simply wrong". So, this article doesn t contain all features of PowerMops OO. I used an OO semantics to support message-object syntax. But I am not a Dogmatiker. I never insist that this semantics is one only theoretical foundation for PowerMops OO coding.I have never imagined that every PowerMops user should first be taken by this semantics to understand the OO code in PowerMops. My intention was simply that since one simple and understandable semantics can support message-object syntax, this syntax should have some reason. So I think that a claim "message-object syntax is bad or simply wrong" was shown to be baseless. I like PowerMops OO syntax by practical reason, not by dogmatical one. I have been thinking about philosophy to support PowerMops language including pure Forth part.But the motivation comes from experience of real coding on PowerMops.I have realized PowerMops is very powerful. Moreover PowerMops, which is optimizing native Forth compiler for PowerPC with OO feature based on NEON model, is wholly written in Mops.That means, PowerMops itself is an example software of NEON type OOP. And its syntax and semantics make communication with other programmers by codequite easy.I have been trying to undestand what in PowerMops language makes it so (in my opinion) great. I found Dogmatikers tend to hate NEON OO model, or even Forth ideas.Perhaps, because those ideas doesn t fit for their dogma.It is true, theory may help to simplfy the grammar of programming language. But excessive simplification could cause practical confusion. What I call practical reason to favour PowerMops, is the fact that what we are doing is clear from the code in PowerMops. Selectors have a bit different appearance from normal words.By that, we can easily realize whether certain part of the code is written in OO or in normal Forth. In all cases of OO coding, selector supposes object near by and may be followed by class name or certain token, which are context elements used to define appropriate method. (I tend to think such a combination of words as a "phrase", which is an extension of concept ‘word’.)The context is very local. It is consumed with one selector. (Well, now PowerMops has a syntax to extend the context in a case. But the ends of the context can be made clear in code.) Locality of information for interpretation of code is important factor for readble code. I realized that in some OO Forth using object-method syntax, object and method cannot be distinguished from normal Forth word in the names.And according to object-method synax theory, object (or class name) switches the contexts.Since we cannot see whether a word is an object or a normal forth word from its name,object can be said to cause implicit context change.Introducing implicit context change in a language is a really bad idea, I believe.OO system of such type will be, sooner or later, unable to live without some naming convention,such as, Begin Object name by a capital letter, etc.. But setting conventions will be too weak to avoid all possible problems coming from implicit context change. For example aFile dup may duplicate ‘aFile’ (File duplication when dup is a mothod of file). Or ‘aFile’ may do something and ‘dup’ duplicate a stack item. How could you know which is the case from this line?If you know aFile is an object and has a method ‘dup’, the definition of dup will be found in method implementation (definitioin). But the method operating code above doesn t contain the information. That is, introducing implicit context change may break the reliability of normal forth words in the meaning of the actions when reading code(especially when debugging the code other programmers wrote). In Reality, syntactical details are trivial. Implementing some features or flavors is also trivial in Forth based environment. Anything isn t very difficult to implement in Forth environment compared with some other languages. But I think confusing syntax should be avoided, even if that might be a result of exact mapping of OO to standard Forth syntax. Surely, good programmers could avoid all such troubles by some coding conventions or goood memory.Some may say, "I have no problem with that. So it is perfect."OK. I could believe it is true for you. But how about anyone other than you? Forth should be only for good programmers?But no one is born as a good programmer, andnot every person will begin programming as a good programmer. Such an elitism might kill the language. However I myself don t care about what floavors will be adopted as the future OO standard of Forth. Once the specification becomes clear, PowerMops surely can support it by an optional library. Top Page