Given my “penchant” for using character names from French adventure narratives, I have decided to give Dbdb project the code name “Bragelonne” (the link is for… you know…). It is, after all, ten years since, you know… Which is all the more fitting (ironically) as I am about to give it up for adoption…
Month: June 2006
*Bow*
Woohoo, MyEclipse crew links to me from their tutorials page.
WIBNI…
-
-
A “Debugging Eliza” idea from BOBHYTAPb
Here is a bomb of an idea: A Debugging Eliza.
After a long and fruitless session of debugging a programmer reaches a certain dead end, where he has already glossed over the problem, has not found it, but noted subconsciously that that venue has been checked – or simply didn’t think about it. At this point he needs to talk to someone about this problem – a sort of a psychiatrist, which doesn’t even have to be human – it could be a slightly tweaked version of Eliza.
“What are you doing?”
“I am debugging Blah-Blah Industrial Application.”
“What was the last thing you tried?”
“I checked that the configuration file corresponds to the Blah-Blah…”
“And how is the Blah-Blah?”
“It’s perfectly fine.”
“And how does that make you feel?”
“It means the problem is somewhere else.”
“Where else could it be?”
etc.
Obviously, this is where a lot of problems are found — when you are asking someone for help, and in the process of explaining the problem realize your error.
-
A “Debugging Eliza” idea from BOBHYTAPb
- Eclipse, for all its cool pluggable architecture, lacks a basic thing — macros, which should be easy given the above. That is, a way to record (or write by hand, fine) a series of steps to instruct the Eclipse workbench to do something, and then play it back. Where’s AppleScript when you need it?
For example, instead of creating a walkthrough. Yes, part of the pain in this particular case can be solved by, for example, checking in dot-files into the source control, and then telling everyone to “Import existing projects into a workspace” after checking out the tree. But I can’t do that — there are dot-files of a “competing” approach checked into the repository, which suit some of us fine, but lack the things others want. but that’s in this particular example, and I cannot come up with another case right now, but trust me, they exist.
MyEclipse and a J2EE-blueprint-based tree
This tutorial moved to
http://www.hrum.org/people/debedb/pro/myeclipse-j2ee-blueprints.html
Finally, something at jSewer project
Two things, for now, at jSewer:
- VBS2Java (announced on GOLDParser mailing list) — Hi, Bob 🙂
- Victor le Nettoyeur
YODL
Once upon a time, BOBHYTAPb, Shmumer, others and yours truly thought
that a short-term LARP-like online game
could be interesting. (Nothing came of it, of course.) One of the
problems sited at the time was that computer games were lacking in
modeling of reality in general (duh!). In particular, the thought
went, the problem is with OOP itself. So YODL was conceived. (Did I
mention that nothing came out of it?) Shortly thereafter I discovered
Subject-Oriented
Programming articles… A while later, I found notes about YODL
which I reproduce here in their incoherent entirety without any hopes
that anyone cares, using this LJ as my personal repository of
stuff to refer to, maybe…
interface to other language/objects/functions?
1. Interceptable actions The most limiting feature of this scheme is the finality of allactions. In MUDs, one active object can intercept another object’s
action and veto it. Here, once an action is initiated it is performed
(see the caveat below). Other object can only react to it later
on. Example: in a MUD, you can place a closed chest and a guardian
over it. If you try to open the chest, the guardian stops you – have
to kill him first. In this scheme, if you are close enough to the
chest to open it – you open it, guardian or not. 2. Environment as a priviledged interceptor Broadcasting messages to those that are interested and are eligible
cf 1? 3. yodl abstract YODL is a mark-up language used to rapidly create new game worlds by placing objects in them.
Objects can be existing, taken from the library, as well as newly created (with the YODL as well!)
on the basis of other objects. YODL supports inheritance, with every object inheriting its properties
at least from some ideal object(s) (instances of which cannot be created) , or from other functional
objects. As is standard for such inheritances, properties can be overriden, added, erased. An object can be created by inheriting from two objects – thus compound objects (e..g, a rifle with
laser targeting can be created out of stock rifle and stock laser pointer). As much as it seems like a use of standard OO (object-oriented) approach, YODL presents important
innovation over traditional OO approach: We strive to make the worlds we create believable. To do that, ideally,the user must be able to do
with a given object what he can do to it in the real world. That is impossible under standard OO paradigm. In the OO paradigm, the designer must specify the behavior that each object is capable of. If a certain behaviour is not specified, the object cannot perform it. This is a great disadvantage. It is impossible to think of all the things it is possible to do with, for example, a cup. What if a user would like to try to hammer nails with it? YODL provides for that and other behavior by NOT providing specifically for a behavior in an
object. Instead, YODL allows designers to specify a set of actions generally available (hitting, throwing,
heating up an object~) Then the object acted upon executes that action upon itself, and the action,
based on the object’s properties, decides on the consequences. For example, consider a metal cup and
ceramic one. The designer did not specify if either cup can be hit. However, an action of being hit
is in the system, and if a cup is hit, based on its properties, the action will decide if the cup breaks
(ceramic) or bends (metal). In contrast to OO, this can be termed AO – action-oriented paradigm.
This is a misnomer, however, since YODL does not give preference to
actions (verbs) in favor of objects (nouns). Not getting into
linguistic debates, if we need both to better describe our world,
we will have both. Other concepts introduced in YODL are related. To go into details, we need to
provide full YODL specification, which we can’t right now. Of interest immediately, however,
are also the following concepts.
- Action inheritance – to ease the work of designers, actions can be inherited just as objects can be.
- Faces – actions that can be inflicted upon the object can be
calculated automatically, some being discarded (e.g., if an action of
-Y´break¡ cannot possibly be inflicted upon an object, it is
discarded).
Keyword unknown Actions { Hit (subject object) where Object has , is Subject has { } } Actor me { Knows hit } class chair implements matter { state = solid; // weight not here - automatically unknown } class Neanderthal knows wood { } class Bird knows wood interface matter{ property state : {solid, liquid, gas}; optional property weight; } interface wood implements matter { property hardness : 3; } class blade implements iron { property edge: .1; cut (matter m) { if (m.state=solid) { if ()~ } } Neanderthal N; Bird b; Wood w; Knife k; b.use(k.cut(w));
Some random links jotted in these notes:
- http://massassi.jedinights.com/articles/df/makeforc.htm
- http://www.inside3d.com/jk/cog12.shtml
- http://unreal.epicgames.com/UnrealScript.htm
- http://www.tecgraf.puc-rio.br/lua/
- http://www.intonet.com/press33.html
- http://www.gamasutra.com/features/19990820/game_ai_01.htm
- http://www.gamasutra.com/features/19990903/lincroft_01.htm
- http://www.gamasutra.com/features/20000223/askmm_01.htm
- http://www.gamasutra.com/features/19990611/java_01.htm
- http://www.gamasutra.com/features/20000414/lander_01.htm
- http://slashdot.org/article.pl?sid=02/01/11/161233&mode=nested
- ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-306.pdf
- ftp://publications.ai.mit.edu/ai-publications/1000-1499/AIM-1403.ps.Z
- http://www4.linkmag.de/bda/nat/link/special/interview_e.html
- http://www.duke.edu/~tlove/
- http://www.zenda.com/converse.htm
- http://web.mit.edu/cms/games/readings.html
- http://web.mit.edu/cms/games/opening.html
- http://web.mit.edu/cms/games/aesthetics.html
- http://www.gamasutra.com/features/19990709/thief_02.htm
- http://www.gamasutra.com/features/20000105/fireteam_01.htm
- http://www.gamasutra.com/features/19990514/trespasser_01.htm
- http://www.gamasutra.com/features/19991026/allegro_01.htm
- http://www.gamasutra.com/features/19991213/adolph_02.htm
- http://www.stlport.org/resources/StepanovUSA.html
RSS WIBNI
So, I broke down and got a paid account just so I could
syndicate (oh, and ).
Does this even work? We’ll see…
for example, occassional entries from stay
on top, rather than being beaten by frequent spewage from something
like /. (I won’t even link to that den of iniquity, but I read
it for the articles…)
Rant
The debate holy war on the topic of software engineering vs “real” engineering seems as endless as GWOT. I am too lazy to do an extensive
search, but I do remember one of the pithy definitions to claim the use of differential equations as a necessary condition…
But I thought I’d throw just one more difference into the mix. Software engineers — at least those that work in application development — have to use knowledge of other domains — those, for which software is written (e.g., finance, etc.) As far as I am concerned, these domains tend to be boring… I like technology for technology’s sake… Does that make me more of an engineer? Discuss… I wonder whether Michael Swaine weighed/will weigh in on it… P.S. Please…DISCLAIMER/DIGRESSION
I don’t really care, but “engineer” does sound cooler than “programmer”, which doesn’t have a sci-fi ring to it anymore, or “developer”, ’cause Donald Trump is also one — not that he isn’t cool…
configureWebserverDefinition.jacl
Per Web
server plug-in installation doc (step 19), we should copy the
configureweb_server_name.bat
script, generated by
the plugin installer, to the WAS_HOME/bin directory and run it
in order to map the installed applications to the Web server. This was giving us problems on Windows 2003, such as this:
What is happening is twofold. First, theConfiguration save is not complete, exception = com.ibm.ws.scripting.ScriptingException:
WASX7309W: No “save” was performed before the script “D:optWebSphereAppServerbinconfigureWebserverDefinition.jacl” exited; configuration changes will not be saved.
com.ibm.websphere.management.exception.ConfigServiceException:
WKSP0008E RepositoryException while checking the state of
cells/mycell/applications/application.ear/deployments/application/foo.jar/META-INF/ibm-ejb-jar-ext.xmi
in the master repository -com.ibm.ws.sm.workspace.WorkSpaceException:
WKSP0016E Error get digest for cells/mycell/applications/application.ear/deployments/application/foo.jar/META-INF/ibm-ejb-jar-ext.xmi.workspace_save – java.io.IOException: The system cannot find the specified file, either the filename is too long on Windows system or run out of file descriptor on UNIX platform. java.io.FileNotFoundException: D:optWebSphereAppServerprofilesAppSrv01wstempScript10afa2477bfworkspacecellsmycellapplicationsapplication.eardeploymentsapplicationfoo.jarMETA-INFibm-ejb-jar-ext.xmi.workspace_save (The handle is invalid.)
configureWebserverDefinition.jacl
does a save only at the end, which fails for all installed applications. To narrow the problem down, I put $AdminConfig reset
after foreach Application $ApplicationList {
, and moved the
block from the end of the script into theif {[catch {$AdminConfig save} result]} { puts "Configuration save is not complete, exception = $result" } else { puts "Configuration save is complete." }
else
clause of
I think saving this per-application is better, at least for narrowing the problematic apps down, but I suppose it’s a matter of preference… Now we see that all applications except for two are being updated. Without digging into what exactly is special about those two, it’s enough to go to the “Map modules to servers” in WAS console for any other app to see that the JACL script mapped all modules to the web server – including the EJB modules. Not only is that silly and useless, but also is causing “the filename is too long” thing. So we add another condition into theif {[catch {$AdminApp edit $Application [subst {-MapModulesToServers {$targetMapList } } ]} result]} { puts "Target mapping is not updated for the application $Application, exception = $result" } else { puts "Target mapping is updated for the application $Application" ...
configureWebserverDefinition.jacl
to only map Web modules to the web server, bychanging the block where we set
targetMapList
as follows:
The#-------------------------------------------------------------- # Check if web server is already defined as the target #-------------------------------------------------------------- set index [string first $newTarget $currentTargets] set targetMapList "$targetMapList { {$moduleName} $moduleUri $currentTargets }" if {($index < 0) } { set isWebModule [string first ".war,WEB-INF/web.xml" $moduleUri] if {( $isWebModule < 0)} { puts "$moduleUri is not a Web module, skipping..." } else { puts "Will map $moduleUri to $newTarget" set targetMapList "$targetMapList { {$moduleName} $moduleUri $currentTargets+$newTarget }" } }
configureWebserverDefinition.jacl
modified as above is atMisc
module of jSewer project on SourceForge.