text:
Q: Making groups from 2 different datasets in ggboxplot using R I currently have been making box plots to represent my data to show the difference between RATE for 2 different treatments, CALC_ACT = Yes or No, but have only been using one dataset at a time.
I currently have two different datasets that I want to compare but don't know how to put them in the one boxplot.
I have shown below how I am using ggboxplot to represent a single dataset (PatientData).
What I would like is for that dataset to be grouped together and then the same data from my second dataset (PatientData2) to be on the plot next to it with the label of the dataset underneath each section.
Hopefully this makes sense... any tips?
PatientData <- data.frame(PATIENT_ID = c(1,1,2,2,3,3,4,4), CALC_ACT = c("No","Yes","No","Yes","No","Yes","No","Yes"), RATE = c(1,0.1,0.5,0.6,0.8,1,0.5,0.4))
PatientData2 <- data.frame(PATIENT_ID = c(5,5,6,6,7,7,8,8), CALC_ACT = c("No","Yes","No","Yes","No","Yes","No","Yes"), RATE = c(.4,1,0.5,0.6,0.3,0.8,0.6,0.4))

ggboxplot(PatientData, x = "CALC_ACT", y = "RATE",
          color = "CALC_ACT", palette = c("#00AFBB", "#E7B800"),
          order = c("No", "Yes"),
          ylab = "Rate", xlab = "Calcium")

A: You can combine the two datasets and plot the boxplot.
library(tidyverse)

bind_rows(lst(PatientData, PatientData2), .id = 'Dataset') %>%
  unite('CALC_ACT', Dataset, CALC_ACT) %>%
  ggplot(aes(CALC_ACT,RATE, color = CALC_ACT)) + geom_boxplot()

A: If I understand you correctly, I believe this is the solution:
library(tidyverse)
#install.packages("ggpubr")
library(ggpubr)

PatientData <- data.frame(
  PATIENT_ID = c(1,1,2,2,3,3,4,4),
  CALC_ACT = c("No","Yes","No","Yes","No","Yes","No","Yes"),
  RATE = c(1,0.1,0.5,0.6,0.8,1,0.5,0.4)
)
PatientData2 <- data.frame(
  PATIENT_ID = c(5,5,6,6,7,7,8,8),
  CALC_ACT = c("No","Yes","No","Yes","No","Yes","No","Yes"),
  RATE = c(.4,1,0.5,0.6,0.3,0.8,0.6,0.4)
)

combined <- bind_rows(list(PatientData = PatientData,
                           PatientData2 = PatientData2),
                      .id = "Source")

ggboxplot(combined, x = "CALC_ACT", y = "RATE",
          facet.by = "Source", color = "CALC_ACT",
          palette = c("#00AFBB", "#E7B800"),
          order = c("No", "Yes"),
          ylab = "Rate", xlab = "Calcium",
          strip.position = "bottom")


text:
Q: jQuery / Dynatree: How to use Json or ul/li together with IFrame sample I'm a newbie with dynatree, but happy that i've found this supercool plugin.
On the dynatree site, I've found an example how to use it with IFrames
http://wwwendt.de/tech/dynatree/doc/sample-iframe.html
I was able to adapt the IFrame example successfully. But i'm a bit
stuck here, because I'd like to load the tree either via UL/LI or
better, with Jason/Ajax. my problem now is, that I dont understand how
to provide ther url/links with LI or Jason, so that clicking an entry still opens the linked site in the iframe. Also don't know how I have to format parents/children/subchildren in Json..
Would anybody be so kind to give a sample with iframe and jason/ajax
or iframe with ul/li?

A: First, I would suggest using the JavaScript object syntax rather than the UL/LI style, because it's more performant (drawback: the UL markup would be rendered, even if JavaScript is disabled).
The trick is, to simply add a custom attribute to the node data (in this example we may call it 'url') like so:
{title: "Google", url: "http://www.google.com"}
Then, in the activation handler, access this attribute like this: dtnode.data.url.
Excerpt from the sample page ( http://wwwendt.de/tech/dynatree/doc/sample-iframe.html ):
$("#tree").dynatree({
      onActivate: function(dtnode) {
        // Use our custom attribute to load the new target content:
        if( dtnode.data.url )
          $("[name=contentFrame]").attr("src", dtnode.data.url);
      },
      children: [
        {title: "Search engines", isFolder: true, expand: true,
          children: [
            {title: "Google", url: "http://www.google.com"},
            {title: "Yahoo", url: "http://yahoo.com"}
          ]
        },
        {title: "jQuery", isFolder: true, expand: true,
          children: [
            {title: "jQuery", url: "http://www.jquery.com"},
            {title: "jQuery UI", url: "http://ui.jquery.com"},
            {title: "API browser", url: "http://api.jquery.com"},
            {title: "dynatree", url: "http://code.google.com/p/dynatree/"}
          ]
        }
      ]
    });

If you want to use an Ajax request, to receive this data from a server in JSON format,
this sample - written in Python - may give a direction:
# Build node list as JSON formatted string:
res = "["
res += "{ 'title': 'Node 1', 'key': 'k1', 'isLazy': true, 'url': 'http://foo.com' },"
res += "{ 'title': 'Node 2', 'key': 'k2', 'isLazy': true, 'url': 'http://bar.com' }"
res += "]"

# Add support for the JSONP protocol:
# This means, if the request URL contains an argument '?callback=xxx',
# wrap the result as 'xxx(result)'
if "callback" in argDict:
    res = argDict["callback"] + "(" + res + ")"

# Make sure, content type is JSON:
start_response("200 OK", [("Content-Type", "application/json")])

# Return result (the square brackets are Python / WSGI specific):
return [ res ]

Note that in Ajax/JSON mode you don't have to return hierarchical structures. Instead, you may mark the nodes lazy, so another request is sent when the nodes are expanded for the first time.

A: I was finally able to got it running. Took me a bit to find out how to do the subfolders in json:
    [
       {
          "title":"Simple node",
          "key":"1"
       },
       {
          "title":"Folder 1 ",
          "isFolder":true,
          "url": "http://www.ggerri.com",
          "children":[
             {
                "title":"Simple node11",
                "children":[
                {
                    "title":"Simple node111",
                    "key":"3"
                }
                ]
             },
             {
                "title":"Simple node12",
                "url": "http://jquery.com"
             }
        ]
       },
       {
          "title":"Folder 2",
          "isFolder":true,
          "url": "http://www.ggerri.com",
          "children":[
....

redpajama_set_name: RedPajamaStackExchange


text:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using RimWorld;
using UnityEngine;
using Verse;
using Verse.AI;

namespace Ankh
{
    public class Buildings
    {
        public class Building_Zap : Building, IAttackTargetSearcher
        {
            public Thing Thing => this;

            public Verb CurrentEffectiveVerb => throw new NotImplementedException();

            public LocalTargetInfo LastAttackedTarget => throw new NotImplementedException();

            public int LastAttackTargetTick => throw new NotImplementedException();

            public override void TickRare()
            {
                List<IAttackTarget> potentialTargetsFor = this.Map.attackTargetsCache.GetPotentialTargetsFor(th: this);
                LocalTargetInfo target = GenClosest.ClosestThing_Global(center: this.Position, searchSet: potentialTargetsFor, maxDistance: 25.9f, validator: t => !((t as Pawn)?.Downed ?? false));

                if (target.IsValid && BehaviourInterpreter.staticVariables.zapCount > 0)
                {
                    this.Map.weatherManager.eventHandler.AddEvent(newEvent: new WeatherEvent_LightningStrike(map: this.Map, forcedStrikeLoc: target.Cell));
                    BehaviourInterpreter.staticVariables.zapCount--;
                }
            }

            public override void DrawExtraSelectionOverlays()
            {
                GenDraw.DrawRadiusRing(center: this.DrawPos.ToIntVec3(), radius: 25.9f);
                base.DrawExtraSelectionOverlays();
            }

            public override string GetInspectString()
            {
                StringBuilder sb = new StringBuilder(value: base.GetInspectString());
                sb.AppendLine(value: "Zap favors: " + BehaviourInterpreter.staticVariables.zapCount);
                return sb.ToString().Trim();
            }
        }
        public class Building_Therm : Building
        {
            public override IEnumerable<Gizmo> GetGizmos()
            {
                foreach (Gizmo g in base.GetGizmos())
                    yield return g;

                if (BehaviourInterpreter.staticVariables.thermCount > 0)
                {
                    Command_Action therm = new Command_Action()
                    {
                        defaultLabel = "Therm's Revelation",
                        defaultDesc = "Channel Therm's favor deep into the earth to uncover a steam geyser.",
                        icon = ContentFinder<Texture2D>.Get(itemPath: "Things/Building/Natural/SteamGeyser"),
                        activateSound = SoundDefOf.Click
                    };
                    therm.action = delegate
                    {
                        Find.Targeter.BeginTargeting(targetParams: new TargetingParameters()
                        {
                            validator = c =>
                            {
                                if (c.Cell.Fogged(map: Find.CurrentMap) || !c.IsValid || !c.Cell.InBounds(map: Find.CurrentMap)) return false;
                                List<IntVec3> cells = GenAdj.CellsOccupiedBy(center: c.Cell, rotation: Rot4.North, size: ThingDefOf.GeothermalGenerator.Size).ToList();

                                foreach (IntVec3 current in cells)
                                    if(current.InBounds(map: Find.CurrentMap))
                                        if (!current.Standable(map: Find.CurrentMap) || current.GetFirstThing(map: Find.CurrentMap, def: ThingDefOf.SteamGeyser) != null || !current.GetTerrain(map: Find.CurrentMap).affordances.Contains(item: TerrainAffordanceDefOf.Heavy))
                                            return false;
                                bool returns = Find.CurrentMap.reachability.CanReachColony(c: c.Cell);
                                if (returns)
                                    GenDraw.DrawFieldEdges(cells: cells);
                                return returns;
                            },
                            canTargetLocations = true
                        }, action: lti =>
                        {
                            Thing geyser = GenSpawn.Spawn(def: ThingDefOf.SteamGeyser, loc: lti.Cell, map: Find.CurrentMap);

                            foreach (IntVec3 current in GenAdj.CellsOccupiedBy(t: geyser))
                                if (current.IsValid && current.InBounds(map: Find.CurrentMap))
                                    foreach (Thing current2 in Find.CurrentMap.thingGrid.ThingsAt(c: current))
                                        if (current2 is Plant || current2 is Filth)
                                            current2.Destroy();

                            BehaviourInterpreter.staticVariables.thermCount--;
                            if (BehaviourInterpreter.staticVariables.thermCount > 0) BehaviourInterpreter.instance.WaitAndExecute(action: () => therm.action());
                        }, caster: null, actionWhenFinished: null, mouseAttachment: therm.icon);
                    };
                    yield return therm;

                    Command_Action extinguish = new Command_Action()
                    {
                        defaultLabel = "Therm's  Respite",
                        defaultDesc = "Channel Therm's favor into an inferno to calm the flames.",
                        icon = ContentFinder<Texture2D>.Get(itemPath: "UI_Therm"),
                        activateSound = SoundDefOf.Click
                    };
                    extinguish.action = delegate
                    {
                        Find.Targeter.BeginTargeting(targetParams: new TargetingParameters()
                        {
                            validator = c =>
                            {
                                if (c.Cell.Fogged(map: Find.CurrentMap) || !c.IsValid || !c.Cell.InBounds(map: Find.CurrentMap)) return false;
                                List<IntVec3> cells = GenAdj.CellsOccupiedBy(center: c.Cell, rotation: Rot4.North, size: new IntVec2(newX: 6,newZ: 6)).ToList();

                                bool returns = false;
                                foreach (IntVec3 current in cells)
                                    if (current.InBounds(map: Find.CurrentMap))
                                        if (current.GetFirstThing(map: Find.CurrentMap, def: ThingDefOf.Fire) != null)
                                            returns = true;
                                if (returns)
                                    GenDraw.DrawFieldEdges(cells: cells);
                                return returns;
                            },
                            canTargetLocations = true
                        }, action: c =>
                        {
                            foreach (IntVec3 current in GenAdj.CellsOccupiedBy(center: c.Cell, rotation: Rot4.North, size: new IntVec2(newX: 6,newZ: 6)))
                                if (current.IsValid && current.InBounds(map: Find.CurrentMap))
                                {
                                    Thing[] list = current.GetThingList(map: Find.CurrentMap).Where(predicate: t => t.def == ThingDefOf.Fire).ToArray();
                                    foreach(Thing current2 in list)
                                    {
                                        current2.Destroy();
                                        MoteMaker.ThrowMetaPuff(loc: current.ToVector3(), map: Find.CurrentMap);
                                    }
                                }

                            BehaviourInterpreter.staticVariables.thermCount--;
                            if (BehaviourInterpreter.staticVariables.thermCount > 0) BehaviourInterpreter.instance.WaitAndExecute(action: () => extinguish.action());  //LongEventHandler.QueueLongEvent(() => extinguish.action(), "", false, null);
                        }, caster: null, actionWhenFinished: null, mouseAttachment: extinguish.icon);
                    };

                    yield return extinguish;
                }
            }

            public override string GetInspectString()
            {
                StringBuilder sb = new StringBuilder(value: base.GetInspectString());
                sb.AppendLine(value: "Therm favors: " + BehaviourInterpreter.staticVariables.thermCount);
                return sb.ToString().Trim();
            }
        }
        public class Building_Peg : Building
        {
            public override IEnumerable<Gizmo> GetGizmos()
            {
                foreach (Gizmo g in base.GetGizmos())
                    yield return g;

                if (BehaviourInterpreter.staticVariables.pegCount > 0)
                {
                    Command_Action bomb = new Command_Action()
                    {
                        defaultLabel = "peg's wrath",
                        defaultDesc = "Peg favors you",
                        icon = ContentFinder<Texture2D>.Get(itemPath: "UI_peg"),
                        activateSound = SoundDefOf.Click
                    };
                    bomb.action = delegate
                    {
                        Find.Targeter.BeginTargeting(targetParams: new TargetingParameters()
                        {
                            validator = lti =>
                            {
                                if (lti.Cell.Fogged(map: Find.CurrentMap) || !lti.IsValid || !lti.Cell.InBounds(map: Find.CurrentMap) || Mathf.Sqrt(f: lti.Cell.DistanceToSquared(b: this.Position)) > 26f) return false;
                                int cells = GenRadial.NumCellsInRadius(radius: 3.9f);

                                bool returns = false;
                                for (int i = 0; i < cells; i++)
                                {
                                    IntVec3 current = lti.Cell + GenRadial.RadialPattern[i];
                                    if (current.InBounds(map: Find.CurrentMap))
                                        if (!current.GetThingList(map: Find.CurrentMap).NullOrEmpty())
                                            returns = true;
                                }
                                if (returns)
                                    GenDraw.DrawRadiusRing(center: lti.Cell, radius: 3.9f);
                                return returns;
                            },
                            canTargetPawns = true,
                            canTargetLocations = true
                        }, action: lti =>
                        {
                            GenExplosion.DoExplosion(center: lti.Cell, map: this.Map, radius: 3.9f, damType: DamageDefOf.Bomb, instigator: null);

                            BehaviourInterpreter.staticVariables.pegCount--;
                            if (BehaviourInterpreter.staticVariables.pegCount > 0)
                                BehaviourInterpreter.instance.WaitAndExecute(action: () => bomb.action());
                        }, caster: null, actionWhenFinished: null, mouseAttachment: bomb.icon);
                    };
                    yield return bomb;
                }
            }

            public override void DrawExtraSelectionOverlays()
            {
                GenDraw.DrawRadiusRing(center: this.DrawPos.ToIntVec3(), radius: 25.9f);
                base.DrawExtraSelectionOverlays();
            }

            public override string GetInspectString()
            {
                StringBuilder sb = new StringBuilder(value: base.GetInspectString());
                sb.AppendLine(value: "Peg favors: " + BehaviourInterpreter.staticVariables.pegCount);
                return sb.ToString().Trim();
            }
        }
        public class Building_Repo : Building
        {

            public override IEnumerable<Gizmo> GetGizmos()
            {
                foreach (Gizmo g in base.GetGizmos())
                    yield return g;

                if (BehaviourInterpreter.staticVariables.repoCount > 0)
                {
                    Command_Action restore = new Command_Action()
                    {
                        defaultLabel = "Repo's Restoration",
                        defaultDesc = "Channel Repo's favor into a colonists body.",
                        icon = ContentFinder<Texture2D>.Get(itemPath: "Things/Mote/FeedbackEquip"),
                        activateSound = SoundDefOf.Click
                    };
                    restore.action = delegate
                    {
                        Find.Targeter.BeginTargeting(targetParams: new TargetingParameters()
                        {
                            validator = c =>
                            {
                                if (c.Cell.Fogged(map: Find.CurrentMap) || !c.IsValid || !c.Cell.InBounds(map: Find.CurrentMap)) return false;
                                return (c.Cell.GetFirstPawn(map: c.Map)?.IsColonistPlayerControlled ?? false) && Mathf.Sqrt(f: c.Cell.DistanceToSquared(b: this.Position)) < 26f;
                            },
                            canTargetLocations = false,
                            canTargetPawns = true
                        }, action: lti =>
                        {
                            Pawn p = (Pawn) lti.Thing;

                            MethodInfo missing = typeof(HealthCardUtility).GetMethod(name: "VisibleHediffs", bindingAttr: BindingFlags.Static | BindingFlags.NonPublic) ?? throw new ArgumentNullException();
                            BodyPartRecord record = null;

                            if (((IEnumerable<Hediff>)missing.Invoke(obj: null, parameters: new object[] { p, false })).Where(
                                predicate: h => h.GetType() == typeof(Hediff_MissingPart)).TryRandomElement(result: out Hediff result))
                            {
                                record = result.Part;
                                p.health.RestorePart(part: record);
                            }
                            else if (p.health.hediffSet.hediffs.Where(predicate: h => h is Hediff_Injury || h.IsPermanent()).TryRandomElement(result: out result))
                            {
                                record = result.Part;
                                result.Heal(amount: result.Severity + 1);
                            }
                            else
                            {
                                while(record == null)
                                    record = p.health.hediffSet.GetRandomNotMissingPart(damDef: DamageDefOf.Bullet);
                            }

                            DefDatabase<RecipeDef>.AllDefsListForReading.Where(predicate: rd => (rd.addsHediff?.addedPartProps?.betterThanNatural ?? false) &&
                                (rd.appliedOnFixedBodyParts?.Select(selector: bdp => bdp.defName).Contains(value: record.def.defName) ?? false)).TryRandomElement(result: out RecipeDef recipe);

                            if (recipe == null)
                                return;

                            recipe.Worker.ApplyOnPawn(pawn: p, part: record, billDoer: null, ingredients: recipe.fixedIngredientFilter.AllowedThingDefs.Select(selector: td => ThingMaker.MakeThing(def: td, stuff: td.MadeFromStuff ? GenStuff.DefaultStuffFor(bd: td) : null)).ToList(), bill: null);

                            BehaviourInterpreter.staticVariables.repoCount--;
                            if (BehaviourInterpreter.staticVariables.repoCount > 0)
                                BehaviourInterpreter.instance.WaitAndExecute(action: () => restore.action());
                        }, caster: null, actionWhenFinished: null, mouseAttachment: restore.icon);
                    };
                    yield return restore;
                }
            }

            public override void DrawExtraSelectionOverlays()
            {
                GenDraw.DrawRadiusRing(center: this.DrawPos.ToIntVec3(), radius: 25.9f);
                base.DrawExtraSelectionOverlays();
            }

            public override string GetInspectString()
            {
                StringBuilder sb = new StringBuilder(value: base.GetInspectString());
                sb.AppendLine(value: "Repo favors: " + BehaviourInterpreter.staticVariables.repoCount);
                return sb.ToString().Trim();
            }
        }
        public class Building_Bob : Building
        {
            public override IEnumerable<Gizmo> GetGizmos()
            {
                foreach (Gizmo g in base.GetGizmos())
                    yield return g;

                if (BehaviourInterpreter.staticVariables.bobCount > 0)
                {
                    Command_Action build = new Command_Action()
                    {
                        defaultLabel = "Bob's Creation",
                        defaultDesc = "Channel Bob's favor.",
                        icon = ContentFinder<Texture2D>.Get(itemPath: "Things/Mote/FeedbackEquip"),
                        activateSound = SoundDefOf.Click
                    };
                    build.action = delegate
                    {
                        Find.Targeter.BeginTargeting(targetParams: new TargetingParameters()
                        {
                            validator = c =>
                            {
                                if (c.Cell.Fogged(map: Find.CurrentMap) || !c.IsValid || !c.Cell.InBounds(map: Find.CurrentMap) || !c.Cell.Standable(map: Find.CurrentMap)) return false;
                                return Mathf.Sqrt(f: c.Cell.DistanceToSquared(b: this.Position)) < 26f;
                            },
                            canTargetLocations = true
                        }, action: lti =>
                        {
                            Thing wall = ThingMaker.MakeThing(def: ThingDefOf.Wall, stuff: ThingDefOf.BlocksGranite);
                            GenSpawn.Spawn(newThing: wall, loc: lti.Cell, map: Find.CurrentMap);
                            wall.SetFaction(newFaction: Faction.OfPlayer);

                            BehaviourInterpreter.staticVariables.bobCount--;
                            if (BehaviourInterpreter.staticVariables.bobCount > 0)
                                BehaviourInterpreter.instance.WaitAndExecute(action: () => build.action());
                        }, caster: null, actionWhenFinished: null, mouseAttachment: build.icon);
                    };
                    yield return build;
                }
            }

            public override void DrawExtraSelectionOverlays()
            {
                GenDraw.DrawRadiusRing(center: this.DrawPos.ToIntVec3(), radius: 25.9f);
                base.DrawExtraSelectionOverlays();
            }

            public override string GetInspectString()
            {
                StringBuilder sb = new StringBuilder(value: base.GetInspectString());
                sb.AppendLine(value: "Bob favors: " + BehaviourInterpreter.staticVariables.bobCount);
                return sb.ToString().Trim();
            }
        }
        public class Building_Rootsy : Building
        {
            public override IEnumerable<Gizmo> GetGizmos()
            {
                foreach (Gizmo g in base.GetGizmos())
                    yield return g;

                if (BehaviourInterpreter.staticVariables.rootsyCount > 0)
                {
                    Command_Action grower = new Command_Action()
                    {
                        defaultLabel = "Rootsy's  Favor",
                        defaultDesc = "Channel Rootsy's favor.",
                        icon = ContentFinder<Texture2D>.Get(itemPath: "Things/Mote/Sow"),
                        activateSound = SoundDefOf.Click
                    };
                    grower.action = delegate
                    {
                        Find.Targeter.BeginTargeting(targetParams: new TargetingParameters()
                        {
                            validator = c =>
                            {
                                if (c.Cell.Fogged(map: Find.CurrentMap) || !c.IsValid || !c.Cell.InBounds(map: Find.CurrentMap)) return false;
                                List<IntVec3> cells = GenAdj.CellsOccupiedBy(center: c.Cell, rotation: Rot4.North, size: new IntVec2(newX: 5, newZ: 5)).ToList();

                                bool returns = false;
                                foreach (IntVec3 current in cells)
                                    if (current.InBounds(map: Find.CurrentMap))
                                        if (current.GetThingList(map: Find.CurrentMap).Any(predicate: t => t is Plant))
                                            returns = true;
                                if (returns)
                                    GenDraw.DrawFieldEdges(cells: cells);
                                return returns;
                            },
                            canTargetLocations = true
                        }, action: c =>
                        {
                            foreach (IntVec3 current in GenAdj.CellsOccupiedBy(center: c.Cell, rotation: Rot4.North, size: new IntVec2(newX: 6, newZ: 6)))
                                if (current.IsValid && current.InBounds(map: Find.CurrentMap))
                                {
                                    IEnumerable<Plant> list = current.GetThingList(map: Find.CurrentMap).Where(predicate: t => t is Plant).Cast<Plant>();
                                    foreach (Plant current2 in list)
                                    {
                                        current2.Growth = 1f;
                                        current2.Map.mapDrawer.MapMeshDirty(loc: current2.Position, dirtyFlags: MapMeshFlag.Things);
                                    }
                                    MoteMaker.ThrowMetaPuff(loc: current.ToVector3(), map: Find.CurrentMap);
                                }

                            BehaviourInterpreter.staticVariables.rootsyCount--;
                            if (BehaviourInterpreter.staticVariables.rootsyCount > 0)
                                BehaviourInterpreter.instance.WaitAndExecute(action: () => grower.action());  //LongEventHandler.QueueLongEvent(() => extinguish.action(), "", false, null);
                        }, caster: null, actionWhenFinished: null, mouseAttachment: grower.icon);
                    };

                    yield return grower;
                }
            }

            public override string GetInspectString()
            {
                StringBuilder sb = new StringBuilder(value: base.GetInspectString());
                sb.AppendLine(value: "Rootsy favors: " + BehaviourInterpreter.staticVariables.rootsyCount);
                return sb.ToString().Trim();
            }
        }
        public class Building_Humour : Building
        {
            public override IEnumerable<Gizmo> GetGizmos()
            {
                foreach (Gizmo g in base.GetGizmos())
                    yield return g;

                if (BehaviourInterpreter.staticVariables.humourCount > 0)
                {
                    Command_Action healer = new Command_Action()
                    {
                        defaultLabel = "Humour's heal",
                        defaultDesc = "Channel Humour's favor.",
                        icon = ContentFinder<Texture2D>.Get(itemPath: "UI/Icons/ColonistBar/MedicalRest"),
                        activateSound = SoundDefOf.Click
                    };
                    healer.action = delegate
                    {
                        Find.Targeter.BeginTargeting(targetParams: new TargetingParameters()
                        {
                            validator = c =>
                            {
                                if (c.Cell.Fogged(map: Find.CurrentMap) || !c.IsValid || !c.Cell.InBounds(map: Find.CurrentMap)) return false;
                                Pawn pawn = c.Cell.GetFirstPawn(map: c.Map);
                                return (pawn?.IsColonistPlayerControlled ?? false) && pawn.health.hediffSet.GetHediffs<Hediff_Injury>().Count(predicate: hi => !hi.IsPermanent()) > 0 && Mathf.Sqrt(f: c.Cell.DistanceToSquared(b: this.Position)) < 26f;
                            },
                            canTargetLocations = false,
                            canTargetPawns = true
                        }, action: lti =>
                        {
                            Pawn p = (Pawn) lti.Thing;

                            int i = 20;

                            List<Hediff_Injury> hediffs = p.health.hediffSet.GetHediffs<Hediff_Injury>().Where(predicate: hi => !hi.IsPermanent()).ToList();
                            while (i > 0 && hediffs.Count > 0)
                            {
                                Hediff_Injury hediff = hediffs.First();
                                float val = Mathf.Min(a: i, b: hediff.Severity);
                                i -= Mathf.RoundToInt(f: val);
                                hediff.Heal(amount: val);
                                hediffs.Remove(item: hediff);
                            }

                            BehaviourInterpreter.staticVariables.humourCount--;
                            if (BehaviourInterpreter.staticVariables.humourCount > 0)
                                BehaviourInterpreter.instance.WaitAndExecute(action: () => healer.action());  //LongEventHandler.QueueLongEvent(() => extinguish.action(), "", false, null);
                        }, caster: null, actionWhenFinished: null, mouseAttachment: healer.icon);
                    };

                    yield return healer;

                    Command_Action immunity = new Command_Action()
                    {
                        defaultLabel = "Humour's immunity boost",
                        defaultDesc = "Channel Humour's favor.",
                        icon = ContentFinder<Texture2D>.Get(itemPath: "UI/Icons/ColonistBar/MedicalRest"),
                        activateSound = SoundDefOf.Click
                    };
                    immunity.action = delegate
                    {
                        Find.Targeter.BeginTargeting(targetParams: new TargetingParameters()
                        {
                            validator = c =>
                            {
                                if (c.Cell.Fogged(map: Find.CurrentMap) || !c.IsValid || !c.Cell.InBounds(map: Find.CurrentMap)) return false;
                                Pawn pawn = c.Cell.GetFirstPawn(map: c.Map);
                                return (pawn?.IsColonistPlayerControlled ?? false) && pawn.health.hediffSet.hediffs.Any(predicate: hd => hd.TryGetComp<HediffComp_Immunizable>() != null) && Mathf.Sqrt(f: c.Cell.DistanceToSquared(b: this.Position)) < 26f;
                            },
                            canTargetLocations = false,
                            canTargetPawns = true
                        }, action: lti =>
                        {
                            Pawn p = (Pawn) lti.Thing;

                            Hediff hediff = p.health.hediffSet.hediffs.First(hd => hd.TryGetComp<HediffComp_Immunizable>() != null);

                            p.health.immunity.GetImmunityRecord(def: hediff.def).immunity += 0.10f;

                            BehaviourInterpreter.staticVariables.humourCount--;
                            if (BehaviourInterpreter.staticVariables.humourCount > 0)
                                BehaviourInterpreter.instance.WaitAndExecute(action: () => immunity.action());
                        }, caster: null, actionWhenFinished: null, mouseAttachment: immunity.icon);
                    };

                    yield return immunity;

                    if (BehaviourInterpreter.staticVariables.humourCount >= 10)
                    {
                        Command_Action revive = new Command_Action()
                        {
                            defaultLabel = "Humour's revive",
                            defaultDesc = "Channel Humour's favor.",
                            icon = ContentFinder<Texture2D>.Get(itemPath: "UI/Icons/ColonistBar/MedicalRest"),
                            activateSound = SoundDefOf.Click
                        };
                        revive.action = delegate
                        {
                            Find.Targeter.BeginTargeting(targetParams: new TargetingParameters()
                            {
                                validator = c =>
                                {
                                    if (c.Cell.Fogged(map: Find.CurrentMap) || !c.IsValid || !c.Cell.InBounds(map: Find.CurrentMap)) return false;
                                    return c.Cell.GetThingList(map: c.Map).Find(match: t => t is Corpse) is Corpse corpse && corpse.GetRotStage() == RotStage.Fresh && corpse.InnerPawn.IsColonist;
                                },
                                canTargetLocations = true
                            }, action: lti =>
                            {
                                Corpse corpse = (Corpse) lti.Cell.GetThingList(map: Find.CurrentMap).Find(match: t => t is Corpse);
                                ResurrectionUtility.Resurrect(pawn: corpse.InnerPawn);

                                BehaviourInterpreter.staticVariables.humourCount -= 10;
                                if (BehaviourInterpreter.staticVariables.humourCount > 10)
                                    BehaviourInterpreter.instance.WaitAndExecute(action: () => revive.action());
                            }, caster: null, actionWhenFinished: null, mouseAttachment: revive.icon);
                        };

                        yield return revive;
                    }
                }
            }

            public override void DrawExtraSelectionOverlays()
            {
                GenDraw.DrawRadiusRing(center: this.DrawPos.ToIntVec3(), radius: 25.9f);
                base.DrawExtraSelectionOverlays();
            }

            public override string GetInspectString()
            {
                StringBuilder sb = new StringBuilder(value: base.GetInspectString());
                sb.AppendLine(value: "Humour favors: " + BehaviourInterpreter.staticVariables.humourCount);
                return sb.ToString().Trim();
            }
        }
        public class Building_Dorf : Building
        {
            public override IEnumerable<Gizmo> GetGizmos()
            {
                foreach (Gizmo g in base.GetGizmos())
                    yield return g;

                if (BehaviourInterpreter.staticVariables.dorfCount > 0)
                {
                    Command_Action miner = new Command_Action()
                    {
                        defaultLabel = "Dorf's  Favor",
                        defaultDesc = "Channel Rootsy's favor.",
                        icon = ContentFinder<Texture2D>.Get(itemPath: "UI_dorf"),
                        activateSound = SoundDefOf.Click
                    };

                    miner.action = delegate
                    {
                        Find.Targeter.BeginTargeting(targetParams: new TargetingParameters()
                        {
                            validator = c =>
                            {
                                if (!c.IsValid || !c.Cell.InBounds(map: Find.CurrentMap)) return false;
                                List<IntVec3> cells = GenAdj.CellsOccupiedBy(center: c.Cell, rotation: Rot4.North, size: new IntVec2(newX: 3, newZ: 3)).ToList();

                                bool returns = false;
                                foreach (IntVec3 current in cells)
                                    if (current.InBounds(map: Find.CurrentMap))
                                        if (current.GetThingList(map: Find.CurrentMap).Any(predicate: t => t.def.mineable))
                                            returns = true;
                                if (returns)
                                    GenDraw.DrawFieldEdges(cells: cells);
                                return returns;
                            },
                            canTargetLocations = true
                        }, action: c =>
                        {
                            Pawn pawn = this.Map.mapPawns.FreeColonists.MaxBy(selector: p => p.GetStatValue(stat: StatDefOf.MiningYield));
                            foreach (IntVec3 current in GenAdj.CellsOccupiedBy(center: c.Cell, rotation: Rot4.North, size: new IntVec2(newX: 3, newZ: 3)))
                                if (current.IsValid && current.InBounds(map: Find.CurrentMap))
                                {
                                    IEnumerable<Mineable> list = current.GetThingList(map: Find.CurrentMap).Where(predicate: t => t is Mineable).Cast<Mineable>().ToList();
                                    int i = 20;
                                    while (list.Any() && i > 0)
                                    {
                                        i--;
                                        Mineable mineable = list.First();
                                        mineable.TakeDamage(dinfo: new DamageInfo(def: DamageDefOf.Mining, amount: mineable.HitPoints, armorPenetration: -1, angle: -1, instigator: pawn));
                                    }

                                    MoteMaker.ThrowMetaPuff(loc: current.ToVector3(), map: Find.CurrentMap);
                                }

                            BehaviourInterpreter.staticVariables.dorfCount--;
                            if (BehaviourInterpreter.staticVariables.dorfCount > 0)
                                BehaviourInterpreter.instance.WaitAndExecute(action: () => miner.action());
                        }, caster: null, actionWhenFinished: null, mouseAttachment: miner.icon);
                    };

                    yield return miner;
                }
            }

            public override string GetInspectString()
            {
                StringBuilder sb = new StringBuilder(value: base.GetInspectString());
                sb.AppendLine(value: "Dorf favors: " + BehaviourInterpreter.staticVariables.dorfCount);
                return sb.ToString().Trim();
            }
        }

        public class Building_Altar : Building
        {
            public override IEnumerable<FloatMenuOption> GetFloatMenuOptions(Pawn selPawn)
            {
                if(BehaviourInterpreter.instance.instanceVariableHolder.altarState <= 1)
                    yield return new FloatMenuOption(label: "Sacrifice " + selPawn.LabelCap, action: () => selPawn.jobs.TryTakeOrderedJob(job: new Job(def: AnkhDefOf.sacrificeToAltar, targetA: this)));
            }

            public override IEnumerable<Gizmo> GetGizmos()
            {
                Find.ReverseDesignatorDatabase.AllDesignators.Clear();
                BehaviourInterpreter.instance.WaitAndExecute(action: () => Find.ReverseDesignatorDatabase.Reinit());
                return new List<Gizmo>();
            }
        }
    }
}

redpajama_set_name: RedPajamaGithub


Ida has trained thousands of people in both the beauty industry as well as large corporations. Call us to see what our training can achieve for your business.
Wakeup Your Makeup teaches you how to get the most out of the beauty products you already own.
Ida has many years of motivational speaking experience and hosting large events. No occasion is too big or too small, if you need a professional MC.
We have some very exciting products in the works. Stay tuned for more news coming soon.
Have a look at some of our previous events, promotions and media coverage.
"Thank you so much for the fantastic workshop.It is wonderful to now have the 'inside insight' that you gave us!"


On our first morning in Death Valley we headed to Zabriskie Point. There is a special kind of energy about the place. In 1970 the Italian director Michelangelo Antonion shot a film here also called Zabrinski Point about the 1960's counterculture. This is a must see film and it has a 1st class sound track: Pink Floyd, The Youngbloods, The Kaleidoscope, Jerry Garcia, Patti Page, the Grateful Dead and the Rolling Stones and John Fahey.


text:
I Choose You For This Life Average 4.6 / 5 out of 134
이번 생은 너로 정했다
우주의시옷
Dropped, Isekai, Romance Fantasy
She possessed a character in an unfinished romance fantasy novel.
Twelve years of unrequited love, a fragile princess who is expected to die on her birthday, Sienna Stern!
She vowed to survive by overcoming the tragic narrative of the original story.
Then, one day, Sienna gets into an unexpected incident at the library where she was going to collect information.
It was a virtuous incident.
The supporting character in the original novel, Count Dandelion Mont, appeared in front of her.
"I'm about to go crazy at that man's beauty!"
With dreamlike visuals and loveliness that no one can imitate, Dandelion has become Sienna's favorite at first sight.
She is determined to make him her own. And so, she starts bombarding him with crazy love attacks.
Sienna is increasingly becoming a special person to Dandelion, who has lived a lonely life for a long time, due to her aggressive approach.
Soon, the two people quickly get close to each other and feel happiness through each other…
Her life plan changed in an instant by this big and precious Dandelion.
Can Sienna be happy with Dandelion as she wishes?
Chapter 44 - Coda (2) February 23, 2022
Chapter 42 - Walpurgis Night (5) February 9, 2022
Chapter 40 - Walpurgis Night (3) January 26, 2022
Chapter 37 - Unknown (3) January 5, 2022
Chapter 36 - Unknown (2) December 29, 2021
Chapter 34 - Danger, Danger (3) December 15, 2021
Chapter 33 - Danger, Danger (2) December 8, 2021
Chapter 31 - Spring Is Busy (6) November 22, 2021
Chapter 29 - Spring Is Busy (4) November 8, 2021
Chapter 27 - Spring Is Busy (2) October 25, 2021
Chapter 25 - Blooming (8) October 11, 2021
Chapter 24 - Blooming (7) October 4, 2021
Chapter 23 - Blooming (6) September 27, 2021
Chapter 21 September 14, 2021
Chapter 20 - Blooming (3) September 6, 2021
Chapter 19 - Blooming (2) August 30, 2021
Chapter 17 - Mahaken Da Pepeldomoon (2) August 17, 2021
Chapter 16 - Mahaken Da Pepeldomoon (1) August 2, 2021
Chapter 15 - Enemy Of The Enemy July 26, 2021
Chapter 14 - Give And Take (5) July 19, 2021
Chapter 12 - Give And Take (3) July 5, 2021
Chapter 11 - Give And Take (2) June 28, 2021
Chapter 9 - For Things That Go Too Far (7) June 14, 2021
Chapter 8 - For Things That Go Too Far (6) June 7, 2021
Chapter 7 - For Things That Go Too Far (5) May 24, 2021
Chapter 5 - For Things That Go Too Far (3) May 4, 2021
Chapter 4 - For Things That Go Too Far (2) April 26, 2021
Chapter 3 - For Things That Go Too Far April 19, 2021
Chapter 2 April 7, 2021
Saving You, Villain
My Husband Will Regret This
When The Count's Illegitimate Daughter Gets Married
Life As A Tower Maid: Locked Up With The Prince

redpajama_set_name: RedPajamaCommonCrawl


Ever since its inception in November 1996, Restorative Justice Week allows Canadians involved in a crime or conflict to learn more about restorative justice. This approach to justice focuses on providing everyone involved in a crime or conflict an active role in repairing the harm caused and moving towards healing and a sense of closure.
Victims are often given a chance to ask the offender questions, have the harm or loss acknowledged, and, in some cases, a say in how the matter can be addressed.
Offenders are also provided with an opportunity to see how their crime has affected their victims and learn the effects of their actions.
What is Restorative Justice Week?
This awareness week provides everyone with an opportunity to learn more about restorative justice, which is an approach to justice that emphasizes healing in victims (and their communities) and accountability of offenders.
A trained mediator helps bring together a victim and an offender so they have the opportunity to address what happened.
The meeting is meant to help a victim regain a sense of empowerment while the offender gains better insight and understanding of how the crime has impacted the victim.
Victim-offender mediation was first introduced in Canada in 1974, when two accused vandals were brought face-to-face with their victims.
Victims and community members are brought together to share a wider range of perspectives, better coordinate services and increase involvement of the victim and community. The purpose of the conference is to give advice on appropriate out-of-court measures, conditions for interim release, sentences, review of sentences and reintegration plans.
A healing circle is an Aboriginal restorative process that includes members of the community including the offender, elders, and the victim (if they choose to participate). In the circle, there's discussion about the offence and how it has affected the victim and the community—but there's also discussion about the underlying cause of the offence. For example, if alcohol or child abuse experiences contributed to the offence, this may be discussed in the healing circle.
A range of groups including community agencies, faith groups, Aboriginal communities, and government departments provide restorative programs.
During Restorative Justice Week, go to Correctional Services Canada's website to find out more about what restorative justice is and the various programs that are operating across the country.
This entry was posted in Access to Justice, Criminal law on November 19, 2015 by Legal Aid Ontario.


text:
PAGE 82a – February 2009
February 15, 2009 by Carl Arendt
H O T I D E A S F O R S M A L L R A I L R O A D S
The classic small-or-micro layout is a straight board around one foot (30cm) deep and 4 to 6 feet (120 to 180 cm) long. Here's a collection of interesting examples in HO or smaller scales. This is Part 1… watch for Part 2 soon!
Guy's Fizz-Bang Tram—Night-time fireworks for youngsters
Turtle Creek Industrial RR—N layout built in China
Marienbad—Period railroad & texture casting with wood glue
LLanast—N-scale version of classic Piano LIne
Mainlände—Medieval town and branch line terminal
Gotha—An Ethiopian railway station in 1923
Fuel Pad—A small showcase for models
LA Rat Hole District—Switching layout in downtown LA
Ulthwaite—Narrow gauge in the romantic English Lake District
Trackmobile Industry—Industrial switcher with Loco Lift cassettes
Ninove—Accurately modeled Belgian tram terminal
FUN FOR SMALL FRY AT THE FIREWORKS FACTORY
Wanting to provide a display other than Thomas the Tank Engine for youngsters at a train show, Gerry Bullock, from Essex, England, concocted this 48x16in (120x40cm) On30 layout, Guy's Fizz-Bang Tram. It presents a night-time scene in a "black box" with a proscenium (picture frame) front, placed on a low tabletop so short people can see it easily. Gerry describes it thusly:
"This layout, built in ¼in scale on Peco O-16.5 Track, is aimed at the Younger Generation. All that is required to operate it is a push on the RED Button. It depicts the American Noise-R-Us Fireworks factory situated at a town called Fawkesville in the American Midwest.
"In view of the inherent danger when manufacturing fireworks the City Fathers of Fawkesville insisted on the factory being built some miles from the town in a semi-desert area. However they did agree to Noise-R-Us building a tramway (trolley line) from Fawkesville out to the factory. This enabled the workforce to easily reach their place of work. You will see the tram leave its shed and proceed to the factory station and then head out to Fawkesville before returning with some workers ready for the next shift.
"A chip controls both the sequence and the turnout motor; the surprise for kids is that part way through the sequence the Bachmann autoreversing tram goes back into shed and immediately comes out again.
"As it is dusk the buildings are lit, and there are some lamps to light the workers' path to the factory and the Burger Bar. (You'll note that the Burger Bar is well used—the owner offers free tea or Coke to anyone buying a Big-Burger!) You can't miss the factory building, not only is it large it also has its own fireworks-display neon sign on the roof! You'll also see that it's a starlit night (and the stars twinkle…well, flash)."
The layout has proved immensely popular and not just with its intended audience! In the works currently is an LED starburst fireworks display that will climb the black backdrop and shower the scene with sparks.
The above photos were all taken with extra lighting in order to show the layout's construction and features. Gerry also made a short video of the scene operating in the dark, as it does at shows. For more photos of Guy's Fizz-Bang Tram, see Gerry'swebsite. To see the video, just click on the triangle below.
U.S. SHORTLINE FROM DANISH WEBSITE WITH U.K. DESIGN WAS BUILT IN CHINA!
David Hoovler, from Butler, Pennsylvania USA, introduced this amazingly international small layout as follows: "I thought you might be interested in hearing how a Briton's plan inspired by a Canadian portage layout wound up actually being built by an American living in China, based on a Pennsylvania prototype described on a Danish website!" The story began when David and his wife moved to Central China to teach English for three years…
He shipped himself a carton of N scale model railroad supplies, and began thinking about a layout in China. He had internet access there, and while studying this site became intrigued by Giles Barnabe's Micro Portage Layout in Scrapbook#44. He built an L-shaped version of the layout, measuring 133x105cm (52x41in). At that point he happened upon Carl Lundsten's railfanningwebsite, which describes the Turtle Creek Industrial Railroad, an 11-mile shortline in Pittsburgh not far from David's hometown (and not far from this site's editor's home). And he noticed that, with only a few changes, his layout could be operated very much like this little line!
The result was the Turtle Creek Industrial RR, shown in the photos as constructed in China. David describes it, "The plan had the interchange with Conrail (now NS) in Trafford at the far left, with a spur for a fictional team track and oil dealer. Moving right (north), the line passed under the Pennsylvania Turnpike, then over Turtle Creek on a scratchbuilt (plastic) concrete bridge complete with a PRR keystone. Then the line turned east, entered Murrysville with service to a lumber dealer, passed the line to the old Export coal mine, and continued to Export and the Durabond steel plant there.
"Unfortunately, the demands of teaching and living in another culture slowed progress on the layout, and construction stalled at the point shown in the photos, before any buildings were built and with Turtle Creek still dry. But [now that I'm back in the U.S.] I may resurrect the idea in the future—it's a compact plan with room for realistic scenery and operation."
MARIENBAD OFFERS OLD-TIME FLAVOR AND A NEW BUILDING TECHNIQUE
Marienbad is a modular, wall-mounted HO layout under construction by Sven van der Hart, from Utrecht in The Netherlands. Each module measures 60x35cm (24x15in), so the total layout is 3m (almost 10ft) long. This is Sven's first attempt at scratchbuilding scenery and structures, and he's finding it very enjoyable: "I've been building now for a year, and I notice that I'm still very motivated to work on it." There's more layout information on his website.
In the process, he's discovered an interesting technique for using wood glue (carpenter's glue) in aluminum foil molds to cast surface textures (several examples are illustrated in these photos, including the bricks on the station and the cobbles on the street). Sven calls it "glueprinting." Others might call it "surface casting with wood glue." Sven has a page of instructions online. [I'd be interested to hear about the experiences of anyone who tries the technique. —Carl.]
PIANO LINE PLAYS AGAIN… IN N SCALE THIS TIME
Having a "bit of spare wood" on hand measuring 36x6in (90x15cm), Alan Cox, from Swansea, Wales, decided to create an N-scale layout. He selected a classic track plan from the historical archives—The Piano Line, originally built in 1965 by the Rev. P.H. Heath. This plan was aamong the first to demonstrate the idea of bringing the main line onstage in the middle of the runaround loop (passing siding)… thus allowing very flexible operations in a very small space! (See Scrapbook #61a for more information.)
Alan's version, called Llanast (Welsh for "a mess"), follows the Heath plan closely. Alan built it using Peco Set Track sections straight from the scrap box. The layout is currently at the "shining up" stage of adding bits and pieces, improving on areas that he can now do better, and the like. The plan itself allows considerable movement of both passengers and freight.
PICTURESQUE MEDIEVAL RIVER PORT WILL FEATURE DB CONNECTION
Mainlände Stadtbahnhof is an HO layout project of Alexander Kaczmarek, from Berlin, Germany. Mainlände is a small, picturesque town with medieval walls and exposed-beam houses, on the banks of the River Main. The main railway line and station (Mainlände Bahnhof) are about 5 km away, so the Deutsche Bundesbahn (DB) built a branch line to the town and uses a short Schienenbusse (railbus) to carry passengers out to the main line trains.
The layout measures 165x35cm (65x14in). Traffic is organized in a two-track fiddle yard under the elevated street and buildings. We'll try to keep you posted as construction gets under way.
HERE'S GOTHA IN 1923 ETHIOPIA… ON THE LINE FROM ADDIS ABABA TO THE SEA
Gotha is a town roughly in the center of Ethiopia, on the Gotha Shet ("Gotha River" in Ethiopian). In this HOm model (1:87 scale on 12mm track) Gotha is a station on the CFFE (Chemin de Fer Franco-Ethiopien), the rail line between the capital of Addis Ababa and Djibouti on the Red Sea. The time is 1923, in the days of the Empress Zawditu. The model was built by Rainer Spohr(top left), from Kassel, Germany, and is an exotic railway to say the least!
Gotha Upon Gotha Shet is built on three modules, each 100x50cm (39x20in). With a fiddle yard attached at each end, the passing scene features trains stopping to take on water and wood (the steam engines all burn wood), freight trains are overtaken by passenger trains, and other trains conduct meets at the station.
But the most exciting part of this layout is the authentic scenery and railway equipment, including the colorful marketplace beside the station, the guards protecting the building, the iron bridge over the River Gotha, the ferryboat and cattle both crossing the water, and the special animal cars originally built for the Hamburg Zoo including pop-up cars for the giraffes and special cars for the apes. "There even was an accident," relates Rainer. "One waiter for the apes was careless, and thus the apes took their food—bananas—with them and went all over the place… lively, even to the rooftops of the freight repair shed!"
Rainer remarks with pleasure that several German friends, who lived and taught school in Addis Ababa for more than 10 years, recently viewed the layout and remarked, "That´s exactly how it looks down there in Ethiopia… !"
The hand drawn plan at the right shows the suppposed track arrangement at Gotha in 1923. The aerial photo beneath it showing the left-hand module will help you understand the arrangement. Gotha won third prize in a national model railway competition held two years ago by Eisenbahn Kurier magazine.
SIMPLE LINEAR LAYOUT SHOWS OFF ROLLING STOCK
Dave Carson, from Stowmarket, Suffolk, England, spent some of his recuperation after surgery in building this 36x7in (90x18cm) "working diorama," Fuel Pad. Two double-tracked sheds share a fueling point between them. Only one is used for stabling, however; the other shed hides the controller. Operation, though limited, affords an excellent opportunity to show off prized rolling stock in realistic surroundings.
SQUEEZING THE PROTOTYPE: THE LOS ANGELES 'RAT HOLE' DISTRICT
Frequent contributor MJ Idzerda, from London, Ontario, Canada, is coming to grips with the problem of deciding on a layout plan and actually starting construction. He's decided on a 6x1ft (180x30cm) HO shelf railroad (the kind he had as a boy), and wants if possible to build a direct copy of South Central Street near Alameda in Los Angeles—the Davies Warehouse Co. in the downtown Espee Rat Hole switching district, featured by Bob Smaus in Model Railroader magazine. Above and at right are MJ's full-sized mockups of a reasonable facsimile of this scene that will fit on a shelf. The tracks have a seductive "S" curve and form a natural-looking Inglenook switching pattern. Looks good!
But wait! As happens to so many of us, another thought struck MJ as he was preparing to put saw to wood… and the result was another classic switching pattern… a Tymesaver (below). What did he do? Read on!
In MJ's words: "The design files were reviewed, and plan v4.3 (based on a design from October 1993) was updated to fit. Voilà! Version 4.4 fits perfectly (above), has all the elements I want, and is essentially a timesaver! The cork is coming this week (today if time allows)!"
The cork arrived, MJ laid the track, and the results are shown at left. Next steps: operations and scenery! We'll keep you posted.
NARROW GAUGE IN THE ROMANTIC ENGLISH LAKE DISTRICT
Martin Hogg, from Mansfield, England, seems to emit layouts at frequent intervals! One of his latest creations is Ulthwaite, a small town in the northern part of the English Lake District, the land of Wordsworth and Coleridge. Martin has imagined a narrow gauge railway terminus serving the more mundane needs of the community, such as "coal, goods and sheep being transported, as well as a few passengers and some tourists/walkers. It also is a place for small engines pulling ore skips from up the valley to run around before continuing off down towards the interchange."
The board measures 48x8in (120x20cm) and is recycled from a previous layout. The rail line is OO9 (1:76 scale on 9mm gauge). Take a good look at the way Martin uses the photographic backscene… we seem to look down at the lake from a slightly elevated position (very common viewing angle in the Lake District), and the realism is almost uncanny (photo at bottom right shows this effect even more strongly). For more photos and information, see Martin's blog.
ANOTHER TRACKMOBILE LAYOUT… INGENIOUS USE OF A CD TURNTABLE!
During those long Scottish winter nights, Shortliner Jack Trollope, way up in the Highlands, has been thinking about still more ingenious ways to make use of the tiny HO Trackmobile model that was featured in our layout design competition earlier this year. Jack's latest cogitation is shown here… an unspecified industrial site using a Trackmobile to move cars (wagons and vans) around. Jack has used to good advantage Chad Wilkinson'sclever hidden-turntable idea to reverse the TM and make it appear to wheel around off the track (Chad introduced the idea in his contest entry.) Jack's layout description follows:
"The disc at the right is a CD (hidden inside/behind the building), used as a turntable to turn the Trackmobile, allowing it to link to both ends of cars without modification. One side is hidden inside the building (Pikestuff or similar) and the other appears to run behind it. Use of a double length Peco Loco Lift at left end as fiddle yard (see sketch) extends tracks and allows stock changes. The track top left could use the same system (or possibly just a standard single one) to allow stock to go 'deeper' into the plant." Double-length Loco Lift is described inScrapbook #80.
PRIZE-WINNING LAYOUT MODELS BELGIAN TRAM TERMINAL IN 1960'S
Roderik Vanderkelen, from Tollembeek, Belgium, built this tramline (trolley line) a few months ago as an entry in a mini-layout competition of Modelspoor magazine. He reports:
"Here are a few pictures of Ninove, the Nm scale (1:160 on 6.5mm gauge) entry which got me a third place. It depicts the endstation of the Belgian SNCV-tramlines Brussels-Ninove and Leerbeek-Ninove in 50s and 60s of the last century. All the buildings are copies of the originals. They are constructed in cardboard. The trams and wagons are also handmade from a lot of Märklin and Micro-trains Z scale pieces. I also include an old picture which shows the situation in the 1960s.
"More info (at the moment only in Dutch) can be found on this site."


From old wives' tales to well-meaning advice from friends, or home remedies and natural treatments that claim to be better than over-the-counter products. To truly banish those pesky blemishes, you'll need to distinguish the difference between the fact and fiction. That's where we come in. This week, we are going to clear up any tested truths.
The Reality – Teens aren't the only ones who break out. In fact, 40-55% of adults between the age of 20 to 40* suffer from adult acne. It's more common in women because of our hormones – although some guys get it as well! So, if you are one of us with acne it's super important that you follow a skincare regime that includes cleansing, treating and moisturising. The Proactiv+ 3 Step kit has everything you need to help manage adult acne, plus it has great skincare benefits too.
The Reality – This can work, but only as short-term fix. The ice freezes the blood vessels, making the pimple appear less red and less swollen. But it's just temporary, sorry girls! You don't want to over-ice as well, because it can inflame other conditions like rosacea. You are better off cleansing and moisturising (and popping a little concealer on).
The Reality – Absolutely false! There are two types of exfoliators - one uses beads to remove dead skin cells from the skin's surface whilst the other contains glycolic acid and salicylic acid to help dead skin cells to shed chemically. Like all Proactiv+ products, the Skin Smoothing Exfoliator does the duty to allow your skin to shine. It contains 2.5% benzoyl peroxide to clear away blemishes and help prevent future breakouts.
The Reality – Everyone is born with natural face oils and if you wash your face too often you may be making your acne worse. Over scrubbing can lead to irritation, even tiny scratches or micro-tears in the skin, which can lead to more infections and inflammation.
The Reality – Don't! We absolutely hate this myth. If toothpaste is made for teeth why would you be putting something like that on your delicate skin? Even though dental products are drying agents that contain benzoyl peroxide and salicylic acid, they are way too harsh for your skin.
If you have tried toothpaste on your spots, you may have noticed it worked temporarily, however acne spot treatments (that are designed to be used on the skin) like the Proactiv+ 3 step Kit are milder and much more soothing for your skin. Save the toothpaste for your teeth and save your skin!
We hope we have cleared up some of the rumours you have heard about acne. Next week we are going to talk about different exercises to destress your life!


Courtesy of Morgan Brown Real Estate, Inc, Morgan Brown.
Price Reduction – Priced to Sell *Lake View Property.* – Motivated Seller. Rare on the market. Spectacular Remodel a few years ago, Property has been kept in very good condition. Newer plumbing,doors, windows, electrical, fixtures, appliances, Plush carpet,granite counter tops, beautiful new wood cabinets, tile floors and tile showers. Designer paint inside and out.
Please, send me more information on this property: MLS# 190007415 – $639,000 – 1430 La Loma Dr., San Marcos, CA 92078.
I would like to schedule a showing appointment for this property: MLS# 190007415 – $639,000 – 1430 La Loma Dr., San Marcos, CA 92078.


text:
日本語版
The Rising Wasabi
Osaka Kindergarten Condemns Korean, Chinese Toddlers To Solitary Confinement, Forced Labor
A kindergarten in Osaka City has reportedly been handing out systematic punishments to toddlers of Korean and Chinese descent as a disciplinary measure for being born with foreign blood and being raised with "wicked ideas".
A prefectural government official questioned the Tsukamoto Kindergarten principal, Yasunori Kagoike, and his wife, who serves as deputy principal, in January after the local government was tipped off by a parent whose child had endured a total of 60 hours in solitary confinement and around 120 hours of hard labor since April last year.
Any child with Korean or Chinese descent has been segregated to the east division of the Tsukamoto Kindergarten in Yodogawa Ward (operated by Moritomo Gakuen – an educational entity) and tasked with an intensive 8-hour a day manual labor schedule.
Last year, foreign inmates posing as Japanese were forced to construct a 1:5 scale railway line stretching the length of the playground for transporting regular children in between classes and during the extended lunch break period.
Miniature railway constructed by child inmates to transport regular children across Tsukamoto Kindergarten
"I hate Koreans and Chinese – the problem is that children who have inherited the spirit of these people exist in our country with the looks of Japanese children," Yasunori Kagoike said in a letter to parents.
"My pure blood and beautiful skin complexion can only survive if these evil spirited reprobates are beaten into recognizing their own blood line."
Toddlers who resisted work or were caught with contraband were thrown into solitary confinement – sometimes for the entire remainder of the school day.
The worst offenders were forced to memorize Japan's Imperial Rescript on Education—an 1890 edict that was used to promote militaristic education before and during World War II.
"Mummy! Mummy!" one toddler reportedly said upon release after spending the whole afternoon locked up in a two-by-two-meter playpen.
Moritomo Gakuen has also recently come under public scrutiny over the purchase of a plot of land owned by the central government in Toyonaka, Osaka, for around only 10 per cent of the appraised amount. However, the public has been reassured that the plot is intended for a private elementary school with Prime Minister Shinzo Abe's wife Akie as its honorary principal.
Body image: Flickr/PaulStainthorp
TheRisingWasabi
Japan Celebrates Anniversary Of First Man Landing On The Gaikoku
Record 3,671 Articles Published In 2019 About Foreigners Visiting Japan
ATM User Taking Way Too Long
Subscribe to The Rising Wasabi mailing list
© The Rising Wasabi 2019


All birdstamps, also overprints and surcharges, are included in the statistics. Extinct and prehistoric bird species are included in the statistics.
There are 27000 stamps with birds on.
There are 3500 species of birds depicted on stamps.


Our skill-based course for PL/SQL provides you an opportunity to learn PL/SQL programming along with the skills required to strive and thrive in the competitive IT industry.
We offer a scenario-based online course complete with whiteboard videos, interactive quiz, programs, interview questions and best practices.
Our story-based learning will help you better comprehend the subject and its practical aspect in the world of computer programming.
PL/SQL programming course helps you strengthen your SQL code with 8 interactive sessions.
We begin with the basics of PL/SQL like meaning, features, environment and benefits. Then comes the essential lesson on structure of PL/SQL block, PL/SQL identifiers, delimiters, comments, executing statements and PL/SQL tables. We then write, compile, execute and test our first PL/SQL block.
We take next step forward with PL/SQL data types(Scalar, LOB, Composite, Reference), scalar types (Numeric, character, boolean, datetime), LOB subtypes, operators (arithmetic, relational, comparison, logical, string), operator precedence, constants, literals, variable declaration, Initialization, naming conventions, scope of variables - global and local, %TYPE attribute, displaying output, converting data types, using non-PL/SQL variables, substitution and host variables.
We write PL/SQL blocks with conditional statements like IF-THEN, IF-THEN-ELSE, IF-THEN-ELSEIF and CASE-ENDCASE and loops such as LOOP-END LOOP, WHILE and FOR loop. Learn how to use compound IF statements, nested loops and control statements like EXIT, EXIT WHEN, CONTINUE and GOTO. Additional lessons on searched case statement, labels, counter variables and choosing correct type of loop in your programs.
We take our PL/SQL learning to next level with named PL/SQL blocks. You will study PL/SQL subprograms, difference between anonymous blocks and subprograms, advantages of subprograms, subprogram types (procedures, functions), parts of named blocks(declarative, executable, exception handling), creating a procedure, executing procedure, passing parameters, types of parameters(IN, OUT, INOUT), drop procedure, creating function, calling function, recursive functions, drop function, difference between functions and procedures and PL/SQL built-in procedures and functions. Additional lessons on using Oracle iSQL*PLUS and NOCOPY parameter.
This session helps you write complex PL/SQL programs. Learn about the meaning and need of cursor, cursor types(explicit, implicit), declaring and opening a cursor, fetching cursor, closing cursor and cursor attributes - %NOTFOUND, %ROWCOUNT, %ISOPEN. We then have a lesson on PL/SQL records, types of records (Table based, cursor based, user-defined), defining records and accessing fields. An additional lesson on cursor FOR loop.
We take PL/SQL learning to next level with meaning and uses of triggers, creating triggers, types of triggers, levels of triggers, difference between triggers and stored procedures, executing triggers, dropping triggers, actions and events in triggers. Additional lessons on WHEN clause, OR REPLACE argument, triggers in simultaneous database operations, cascading triggers, order of trigger execution and maximum number of triggers that can be used in a table.
Create bug-free code with meaning of exception, types of exception (system defined, user defined), Difference between exception and error, list of system defined PL/SQL exceptions, trapping exceptions, raising exceptions with RAISE statement, user-defined exceptions, pre-defined exceptions, declaring PL/SQL exceptions, scope rules for PL/SQL exceptions. Additional lessons on error-trapping functions, propagating exceptions, defining custom error messages and using OTHERS clause.
Make the maintenance of PL/SQL code easy with packages. Study the meaning of packages, creating packages, components of package, developing a package, invoking package, altering package and removing package. A lesson on referring to the objects declared in a package. Difference between function, procedure and package.
Copyright 2017 - 2018 iPRIMED Education Solutions Pvt Ltd. All Rights Reserved.


The U.S. Bureau of Economic Analysis released preliminary State GDP figures for 2013 along with comprehensive revisions for data from 1997-2012, following the major National Income and Product Account revisions at the national level a year ago or so. What follows are our office's quick, high level look at State GDP growth.
First, here are what the revisions did to Oregon's nominal GDP (see correction note at end). Over the 1997-2012 period, the revisions added, on average, 3.9 percent to Oregon's total nominal GDP. In recent years, from 2009 to 2012, the revisions have been larger at 5.4 percent on average.
The primary reason for this — most likely — is what BEA has done with the revisions. Nationally, and now locally, BEA has started including items such as R&D expenditures and Intellectual Property Products as components of GDP. These categories, R&D in particular, are quite large here in Oregon given our very productive, and expanding high-technology firms. Specifically, BEA cites the following in their press release.
While the revisions adjusted the level of GDP across the country, it really didn't alter the pattern or rate of growth very much. In 2013, overall growth slowed across the country with the average state growing 1.8 percent in 2013, following 2.5 percent growth in 2012. The median state slowed as well, albeit not very much, from 1.9 percent to 1.8 percent. Oregon likewise followed this trends, with growth slowing from 4.0 percent in 2012 to 2.7 percent in 2013. Oregon is still growing faster than the average or median state, however our growth advantage slowed last year. Over the past 15 years or so, Oregon's state GDP typically grows 1-2 percentage points faster than the nation and the latest figures are largely consistent with this.
Oregon's growth ranking, realtive to the other states, is 14th for 2013. This is down from the Top 5 rankings the state experienced in recent years, however it is not out of the historical pattern during expansions.
The following table shows the growth rates in recent years by industry in Oregon. Much of our state GDP growth comes from our very productive manfuacturing sector — high-tech in particular — and as the growth rates within that sector have slowed, so too has the statewide total. It should be pointed out that slowing was expected given that it is not every year at a massive, capital-intensive expansion takes place, such as the recent (and on-going) Intel expansion.
Lastly, in terms of per capita real GDP changes since the start of the Great Recession, Oregon trails only North Dakota.
For more on why Oregon does well on state GDP, please see our previous posts on Historical Economic Performance and Manufacturing Employment and Output.
Correction: Original post had incorrectly calculated the Oregon revision amount. It had originally stated 8.3 percent for real GDP, however this also included a benchmark year change from 2005 to 2009, which had not been properly accounted for. The corrected figure of 3.4 percent for nominal GDP is more accurate and stated above.


text:
Q: Can't make folder_path = filedialog.askdirectory() global I don't know why but even if I declare the variable folder_path as global in the function, if I print it outside of it the value doesn't change....
This is the code
import cv2
import pytesseract
import os
import tkinter as tk
from tkinter import filedialog

pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files/Tesseract-OCR/tesseract.exe'

class images():
    def __init__(self,path):
        self.path = path
        self.cv = cv2.imread(self.path)

folder_path = 'if u see this after selecting a folder the global isnt working'
def browseButton():
    global folder_path
    folder_path = filedialog.askdirectory()

def newfunc():
    print(folder_path)

#-----------------------------------GUI---------------------------------------------------

window = tk.Tk()
window.geometry('600x400')
window.title('Text scanner')
window.resizable(False,False)

bg = tk.Canvas(window, bg="#ebba34", width='590', height='390')
intro_label = tk.Label(window,
text="Benvenuto nel Text Scanner, seleziona il percorso file dove hai inserito le immagini.",
font=("Helvetica", 9))
file_path_entry = tk.Entry()
file_path_button = tk.Button(cursor='hand2', text='Browse', command=browseButton)

bg.pack()
intro_label.place(x=68,y=20)
file_path_entry.place(x=17,y=50, width=513)
file_path_button.place(x=533,y=50,height=20, width=50)

#-----------------------------------MAIN LOOP-----------------------------------------
if __name__ == '__main__':
    window.mainloop()
newfunc()

Now I don't get anything in output until I close the program
However if I put the print inside the function it outputs the folder_path correctly but I need it outside of it to use it into another function (which I cannot combine with this one)

A: Your folder_path wont change as long as browseButton() is not executed, hence keeping it in the main block of the code wont change the path, instead you should keep it inside a function like you presumed.

However if I put the print inside the function it outputs the folder_path correctly but I need it outside of it to use it into another function (which I cannot combine with this one)

This in any situation is not needed, you can create a new function wherever you want and use folder_path inside of that. As long as browseButton() has been executed, folder_path will be assigned with the new value.
def new_func():
    print(folder_path) # New path will be printed

In other words, you are printing folder_path right after defining it as 'if u see this after selecting a folder the global isnt working', the function that changes its definition does not get a chance to get executed or change the value of the variable, hence you should move print(folder_path) inside other function that runs only AFTER browseButton() has been executed.


The Miner County Board of Commissioners met in regular session December 16, 2014 in the Miner County Courthouse. Members present: Roger Wentland, Alex Protsch, Don Bowman, Garrett Gassman and Voni Durant. Absent: none. Chairman Wentland called the meeting to order. The Pledge of Allegiance was recited. Motion by Protsch, seconded by Durant and carried to approve the agenda as amended.
The minutes of the December 2nd meeting were approved.
Commissioners acknowledged receipt of the following correspondence: East Dakota Water Development District October meeting minutes; and a request from SDSU Extension 4-H Field Operations Extension Associate Donna Bittiker to evaluate Miner County 4-H Youth Advisor Maria Feldhaus. Commissioners will complete an evaluation at the December 29th meeting.
Motion by Protsch and seconded by Bowman to adopt the following resolution.
THEREFORE BE IT RESOLVED that the appropriation be transferred from contingency to the following departments: Urban & Rural Development $216.30; Jail $8846.03; Community Action $.04; Juvenile Detention $2848.04. Voting aye: Protsch, Durant, Gassman, Bowman and Wentland. Voting nay: none. Resolution approved this 16th day of December 2014.
Motion by Gassman, seconded by Durant and carried to abate the taxes associated with the following tax deed property and to transfer ownership by quit claim deed to Canova Village.
Motion by Durant, seconded by Gassman and carried to enter into the contract with the SD Department of Health, Office of Family & Community Health Services for community health nurse services for 2015.
Highway Superintendent Ron Krempges joined the meeting. Bids were opened as advertised for a new unused 2014 or newer model skid steer loader. The following bids were received: Puthoff Repair S & S Inc. 2015 Gehl R260 $38,240; Lake Co. International, Inc. Gehl R260 $38,652.00; Sheehan Mack Sales & Equip., Inc. Volvo MC 115 C $36,900; Scott Supply New Holland L 228 $44,755; and Titan Machinery 2014 Case SV 250 $43,370. According to the bid specifications only 2 of the bids met or exceeded bid requirements-Puthoff Repair S & S, Inc., and Lake Co. International, Inc. Motion by Gassman, seconded by Durant and carried to award the bid to Puthoff Repair S & S, Inc. for a 2015 Gehl R260, $38240.00.
Krempges made a request to build another shed to house equipment that currently is parked outside. Discussion pursued to locating all the highway needs at one location. Costs will prohibit this expansion for the near future.
Krempges also made a request to send a notice deadline for removal of bales and obstructions from the road right of way and no farming the right-of-way in with all valuation notices. Commissioners will review the notice at the next commission meeting.
Brad Stangohr from Ulteig joined the meeting and presented a change order and a pay estimate from Robert Johnson Construction for the courthouse parking lot project. The change order is for repair to the sprinkler system that was not included in the bid documents. Motion by Durant, seconded by Gassman and carried to approve the change order ($950) and approve the pay request for $24,015.51.
Commissioners asked if it was possible to divert drainage from the roof to the drains located in the window wells temporarily to prevent ice buildup in the parking lot. Stangohr agreed that this could be accomplished.
The meeting adjourned until December 29th. Dated this 16th day of December, 2014.


Members of the 2018 Nasher Prize jury describe the process leading up to the selection of the 2018 Laureate.
Members of the 2018 Nasher Prize jury describe the process leading up to the selection of the 2018 Laureate at this panel moderated by Dallas Museum of Art Director Agustin Arteaga.
Follow the conversation on Twitter, follow #NasherPrize.


text:
Weird Research
Every once in a while, I like to take stock of all the weird stuff I research for upcoming books. It's amazing. Since the Jamie Brodie mysteries are reality-based, I want to be accurate for as many of the incidentals as possible (without getting sued). Here's a list of stuff I've looked up recently, all for upcoming books:
The chemical structures of heroin, cocaine, and Ritalin
Cocaine in 3D. By User:Benjah-bmm27 (Self-made with Accelrys DS Visualizer 1.5.) [Public domain], via Wikimedia Commons
If you were going to hide a body in Pacific Palisades, CA, where would you hide it?
What percentage of Cahuilla blood you have to have to become a member of the Agua Caliente Band of Cahuilla Indians (1/8, in case you're interested)
How composting toilets work
UCLA's academic calendar for 2017-18
Available conference space at UCLA
What other attractions are near the La Brea Tar Pits
How many copies the 50 Shades of Grey trilogy sold
What sorts of summer camps Cal Tech offers
How eminent domain works
What sports teams Santa Monica College has for men
The bylaws for the Board of Trustees of Santa Monica College
Interesting, right? I don't end up using everything I research – but I think I'm going to use everything on this list. How? Stay tuned. 😀
Avenged to Death now on Smashwords
Avenged to Death, Jamie Brodie Mystery #10, is now available through Smashwords! Here's the link: https://www.smashwords.com/books/view/639050
It should soon be available from all of the outlets that Smashwords distributes to.
A five-part series wherein I examine the pitfalls—both real and imagined—and difficulties—both encountered or merely anticipated—to being a gay author in the 21st Century, and attempt to discuss how said pitfalls and difficulties can be used to our advantage, thereby employing the old adage "Making lemons into lemonade." (And, in advance of the inevitable inquiry, allow me to retreat into the naivete allowed one of my advanced years and answer simply: "What's a Beyonce?")
Devouring Sebastian Venable
Me and Tennessee Williams
"Is that what you think? That Skipper and me did sodomy?"
— Brick, in Cat on a Hot Tin Roof
I am not a huge fan of Tennessee Williams. He, himself, described his work as dark and violent and professed hope psychiatry might help him to "write with serenity". Either therapy disappointed him, or he tried it after writing Sweet Bird of Youth. Ugh. I do, however, like Cat on A Hot Tin Roof. Unfortunately, I didn't find it until very late in my "association" with Williams. No, we met far too early…
I must have been older than twelve when it happened because I knew that the lady playing Elizabeth Taylor's mother was the same one who had provided the demonic voice in the Exorcist. So I was old enough to have seen the Exorcist (junior high?) but young enough to have no idea the guy playing the handsome doctor (Montgomery Clift) was gay. I'm pretty sure I wasn't all that familiar with the term gay. I had experimented with another boy. I know that happened no later than the beginning of junior high, because I remember him shunning me at school (he was a jock and I was a brain, so it wasn't necessarily the fooling around that led to the shunning, but I'm sure it didn't help).
I was already writing novels. Mostly trying to work out a sequel to Logan's Run, because, well, it needed one. Which puts this sometime before William F. Nolan beat me to it. And it had to be summer because, even then, I did my best work after the rest of the household had retired for the evening. And it was on the late late show. This was in the days when we got three nationally broadcast stations moderately well, and maybe two locals up in the UHF, the quality of at least one of which depended on the weather. Probably it was on one of the locals as our broadcast affiliates signed off earlier (Remember that? When you could turn on the tv and there was literally nothing on?).
There I was diligently filling page after page of my spiral notebook, some old movie playing in the background, when I gradually came to realize that something strange and unique was happening in the film. That film was Suddenly Last Summer.
In case you haven't seen it, the movie concerns the attempts of an old woman to have her niece lobotomized. Appears something went wrong on vacation, something involving the old woman's son's untimely death, and she doesn't want her niece, who was along on the vacation, spilling the beans.
I know where you think this story's going. You think there I was, the little future gay boy, slowly deciphering the clues that the deceased son was gay! Boy, you really haven't seen the movie. I think I was in my twenties before it ever occurred to be Sebastian Venable was queer. And probably, even at that point, it took someone telling me flat out. (Actually, I kid. I may have sussed out the truth about SV that night in my tweens, it just wasn't the strange and unique thing drawing my attention.)
That would be Katherine Hepburn. I'm sure I'd seen her before. We were a visual media family. Movies and tv shows played constantly when we were home (no sitting around taking turns reading for us, no family concertos; we talked, but mostly during the commercial breaks). But there was something about KH and that role, Violet Venable, which really struck a chord.
If you HAVE seen the movie, you probably remember the scene where she describes the time Sebastian saw God in the Galapagos. In case you haven't:
Side note: where can I get a winged skeleton statue for my conservatory?
Hepburn was nominated for an academy award for her performance in Suddenly Last Summer (as was Taylor—neither won). Watching the flick today there's no denying the histrionics of both the words and her reading of them. But I will argue that she somehow manages to refrain from quite going OVER the top—she just gets there, sinks in her teeth and hangs on for dear life. And keep in mind, my story is about watching that scene as a 12-ish future gay boy, feverishly scribbling away at a derivative sequel to someone else's intellectual property…In the middle of the night.
I credit Hepburn and SLS for finally retiring my attempts to continue the adventures of Logan and Jessica. I think it actually even put me off novels for a while and made me decide playwriting was where it's at. (OK, why is it playwriting but also playwright?) I do know that during high school I composed several plays that climaxed in overwrought confessionals voiced by either staggering spinsters or future gay boys ready to break out. (Half way through high school I accidentally picked up On Wings of Song by Thomas Disch and feel back in love with novels.)
And Hepburn and SLS (and Tennessee Williams—even though I often struggle to appreciate him—credit where credit's due) taught me the power of dialogue. Not how to make it sound natural; I really don't think that was Williams' gift. But how to make it sound completely unnatural and still work. How often will people you know in real life pontificate on the cruelty of nature and seeing the face of God? How many times will you find yourself embroiled in such potent family drama as getting your niece lobotomized to cover up the fact your queer son was eaten by street urchins? Hopefully never. (I should mention that Williams' sister was lobotomized. So, y'know, wow.)
That Williams had universal appeal is inarguable—both in the scope and longevity of his fame. So why do I struggle with him? Well, in a nutshell, he reads to me as so much self-flagellation. I know, I know, it was a different time—a time when the homosexual in America was under attack in ways he or she never truly had been before. In The Other Side of Silence, John Loughery describes the years between World War Two and Stonewall as especially dangerous for homosexuals. He doesn't specifically tag Stonewall as the point of change, and I have only done so for expediency (I figure most people reading this will have some idea of when and where and what "Stonewall" was). The book recounts some rather horrifying anecdotes, not just of witchhunts, but of a subset of people rendered nearly powerless to resist. But gay literature did exist that pushed back against the stereotypes and preconceptions of the time—some James Baldwin for instance (1962's Another Country rather than 1956's Giovanni's Room, even though the latter seems to have the sustained affection). Williams, on the other hand, always struck me as someone who sacrificed self-image (his own and that of his peers) to make a buck. (There's a link on my website where you can send your hate mail.)
Sebastian Venable is the prototype for the fifties' gay predator. And he doesn't just die. He's cannibalized. And, at the end of Sweet Bird of Youth, Chance (who, admittedly isn't identified as a homosexual, but does trade on his sexuality) isn't just killed, he's castrated and thrown on a pile of garbage (I may be conflating the play and the movie here, which end slightly differently). Cat on a Hot Tin Roof doesn't kill Brick, but Skipper's already paid in full before the play starts. As has Blanche's husband in Streetcar. Am I misreading his underlying theme.
Amazingly I've read most of Williams' work. I blame Christopher Bram, who's book, Eminent Outlaws is a favorite of mine. I've also read most of Gore Vidal's novels, and a healthy sampling of Truman Capote. I'm still working on my Baldwin, but, after The Sound and the Fury, gave up on Faulkner. I think Williams outshines them all in name recognition and the widespread continued appreciation (and performance) of his work.
I wish I appreciated him more, if for no other reason than the way he got me to consider dialogue. It's just not in my nature, I guess.
And Nature is cruel. Sebastian knew it all along.
Jon Wilson is the author of Cheap as Beasts, a current finalist for the Lambda Literary Award Best Gay Mystery of 2015. He's also written a follow-up volume, Every Unworthy Thing, as well as two westerns. He lives and works in Northern California, where he looks and sees the sand all alive, all alive. As the new-hatched sea turtles make their dash to the sea, while the birds hover and swoop to attack. And hover and swoop to attack.
The Pink Lemonade Blog Tour continues tomorrow at Jon Michaelson's Murder Blog, and, if you missed any previous entries, you can find them HERE (Part 1), HERE (Part 2), and HERE (Part 3).
I'm giving away a signed copy of both the Declan Colette books at the end of this blog tour. Just leave a semi-cogent comment (which, I suppose, means I'll have to allow "YOU SUCK!") to any of the five parts in the Pink Lemonade Blog Tour to enter (if you leave multiple comments or comment each day, you get entered for each comment)!
Tagged as gay mystery, guest post, jon wilson, noir
Guest Post Tomorrow: Jon Wilson
You all are in for a treat tomorrow. Jon Wilson, author of gay mysteries Cheap as Beasts and Every Unworthy Thing, is going to be here as part of his blog tour. I'm thrilled to be included!
Cheap as Beasts is nominated this year for a Lambda Literary Award in the Gay Mystery category. I've read the book, and the honor is WELL deserved. It's the first of a series (Every Unworthy Thing is #2) featuring gay private investigator Declan Colette. The action takes place just after World War II in San Francisco, and the book is the very definition of noir. If you like that sort of thing, I HIGHLY recommend the book.
Check back tomorrow to hear from Jon himself.
I'm being interviewed!
Today there's an interview with me, by Matthew Moore, on author Jon Michaelsen's blog. You can read the interview here. http://www.jonmichaelsen.net/?p=2631
Take a look, and learn more about how Jamie came to be!


text:
=begin
    Copyright 2010-2014 Tasos Laskos <tasos.laskos@gmail.com>

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
=end

class Arachni::Plugins::Default < Arachni::Plugin::Base

    def prepare
        @prepared = true
    end

    def run
        return if !@prepared
        @ran = true
    end

    def clean_up
        return if !@ran
        register_results( true )
    end

    def self.info
        {
            name:        'Default',
            description: %q{Some description},
            author:      'Tasos "Zapotek" Laskos <tasos.laskos@gmail.com>',
            version:     '0.1',
            options:     [
                Options::Int.new( 'int_opt', [false, 'An integer.', 4] )
            ]
        }
    end

end


B2BGateway provides cloud based, fully integrated EDI & API Connectivity Solutions for Exact Online users which removes the need to re-key data when exchanging electronic business documents with trading partners.
Eliminating the need to re-key data drastically reduces errors and labor costs.
Exact Online is a cloud based business software suite especially develop for Wholesale Distributors and Manufactrers.
Integrate order and inventory management with your accounting & CRM.
Keep your finger on the pulse with professional relationship management.
Share information with customers and suppliers easily.
Gain ultimate control over your inventory and cash flow.
For further infor,ation on B2BGateway's EDI for Exact Online please call sales at +1 401-491-9595 x5 (US), +353 61 708 533 (EU), +61 2 8003 7584 (AU).
We set out to design our EDI solutions with simplicity in mind, creating a service that is not only easy to use, but is arguably the most comprehensive solution Exact Online has seen to date.
What makes B2BGateway's EDI solutions different from our competitors is our ability to custom code your EDI setup. We know not all businesses are alike and from previous implementations, we have learned what our clients want and need in an EDI setup with Exact Online. If you have a special business need, we've probably seen it before and even if we haven't, we will work with you to get the solution you desire.