Warning: session_start(): open(/var/lib/php/sessions/sess_0rvmn70a2suva2ngcev7neaarf, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
sbool showHelpOnStart;
static int spacing = 20;
static JFrame mainFrame;
static LL gridComponents;
static JComponent mainGrid;
static JCheckBoxMenuItem miShowLocations;
static SingleComponentPanel scpMainGrid;
static JFrame historyFrame, memoryFrame;
static Color lightBlue = colorFromHex("4169e1");
sS locationLetters = charRange('A', 'Z') + "[\\]^_`" + charRange('a', 'z') + charRange(123, 128);
sS smartyUnicode = basicUnicodeSmiley();
static int smartyFontSize = 40;
sS windowsFontID = #1400468;
sS historyHelp = unindent_mls([[
A percept is the stimulus or simultaneous combination of stimuli observed.
An action is the response or simultaneous combination of responses produced.
Binon # numbers refer to the binons in memory that represent the percepts, actions, expectations, and perceptual or action sequences.
P = Percept, E = Expectation, PP = Perceptual sequence A = Action, AA = Action sequence
Read the paper: "The Perception-Action Hierarchy and its Implementation Using Binons (Binary Neurons)" on the www.adaptroninc.com website for more information.
]]);
svoid rearrangeLetters {
int iLetter = 0;
for (int y = 0; y < state.gridRows; y++)
for (int x = 0; x < state.gridCols; x++) {
JCell cell = getCell(x, y);
if (cell.obstacle())
cell.letter = ' ';
else
cell.letter = locationLetters.charAt(iLetter++);
}
}
concept State {
float fontScale = 1.25f;
int gridRows = 8, gridCols = 8;
bool showLocations = true;
int smartyX, smartyY;
Rect selection = rect(1, 1, 1, 1);
Pt cursorDirection = pt(1, 0);
new BitSet obstacles;
void setSelection(Rect r) {
if (!cset_trueIfChanged(this, selection := r)) ret;
if (selection.h == 1 && selection.w > 1) _setField(cursorDirection := pt(1, 0));
else if (selection.w == 1 && selection.h > 1) _setField(cursorDirection := pt(0, 1));
repaint(mainGrid);
}
void clearSelectedArea {
fillSelection(false);
}
void invertSelection {
JCell cell1 = getCell(selection.x, selection.y);
fillSelection(!cell1.obstacle());
}
void fillSelection(bool b) {
for (Pt p : pointsInRect(selection))
getCell(p.x, p.y).setObstacle(b);
rearrangeLetters();
moveCursor();
}
void moveCursor {
setCursor(selection.x+cursorDirection.x, selection.y+cursorDirection.y);
}
void setCursor(int x, int y) {
setSelection(rect(mod(x, gridCols), mod(y, gridRows), 1, 1));
}
void moveCursor(int dx, int dy) {
_setField(cursorDirection := pt(dx, dy));
setCursor(selection.x+cursorDirection.x, selection.y+cursorDirection.y);
}
void placeSmarty {
getCell(selection.x, selection.y).setObstacle(false);
cset(this, smartyX := selection.x, smartyY := selection.y);
moveCursor();
}
}
static State state;
sclass JCell > JComponent {
int x, y;
char letter;
*(int *x, int *y) {}
public void paint(Graphics _g) {
Graphics2D g = cast _g;
int w = getWidth(), h = getHeight();
Color color = Color.white;
if (state.selection.contains(x, y)) color = lightBlue;
else if (obstacle()) color = Color.black;
fillRect(g, 0, 0, w, h, color);
if (state.showLocations && !obstacle()) {
temp tempSetFont(g, loadFont_cached(windowsFontID));
drawTextWithTopLeftCornerAt(g, str(letter), Pt(2, 0), Color.black);
}
if (state.smartyX == x && state.smartyY == y) {
temp tempSetFontSize(g, smartyFontSize);
drawCenteredText(g, smartyUnicode, 0, 0, w, h, Color.black);
}
}
int index() { ret y*state.gridCols+x; }
bool obstacle() { ret main contains(state.obstacles, index()); }
void setObstacle(bool b) {
setBit(state.obstacles, index(), b);
state.change();
}
{
addMouseListener(new MouseAdapter {
public void mousePressed(MouseEvent e) {
main requestFocus(mainGrid);
if (!isLeftButton(e)) ret;
state.setSelection(new Rect(x, y, 1, 1));
}
});
addMouseMotionListener(new MouseMotionAdapter {
public void mouseDragged(MouseEvent e) {
_print("Drag in " + x + "/" + y + ": " + e.getPoint());
Component dest = componentAtScreenLocationInWindow(mainFrame, e);
if (dest cast JCell) {
_print("Target: " + dest);
state.setSelection(rectFromPointsInclusiveSorted(x, y, dest.x, dest.y));
}
}
});
}
toString { ret x + "/" + y; }
}
static JCell getCell(int x, int y) {
ret gridComponents.get(y).get(x);
}
svoid makeMainGrid {
gridComponents = map(iotaZeroList(state.gridRows), y
-> map(iotaZeroList(state.gridCols), x
-> new JCell(x, y)));
mainGrid = setFocusable(setBackground(Color.black, hvgrid(gridComponents, 1)));
scpMainGrid.setComponent(mainGrid);
rearrangeLetters();
}
svoid setWorldSize(int size) {
state.obstacles.clear();
state.gridCols = state.gridRows = size;
state.selection = rect(1, 1);
state.smartyX = state.smartyY = 0;
state.change();
makeMainGrid();
}
p {
autoRestart(5.0);
db();
state = uniq(State);
jtattoo_mcWin();
state.fontScale = 1.5f;
swingFontScale(state.fontScale);
loadLibrary(windowsFontID);
mainFrame = showFrame("Smarty");
addMenu(mainFrame, "Worlds",
"New... (Ctrl+N)", r {},
"Retrieve... (Ctrl+R)", r {},
"Save... (Ctrl+S)", r {},
"---",
"Exit", rThread killVM);
registerCtrlKey(mainFrame, KeyEvent.VK_N, "New world", r { print("new") });
registerCtrlKey(mainFrame, KeyEvent.VK_R, "Retrieve world", r {});
registerCtrlKey(mainFrame, KeyEvent.VK_S, "Save world", r {});
addMenu(mainFrame, "View",
miShowLocations = jCheckBoxMenuItem("Locations (Ctrl+L)", state.showLocations, b -> {
cset(state, showLocations := b);
repaint(mainGrid);
}));
registerCtrlKey(mainFrame, KeyEvent.VK_L, "Locations", r {
cset(state, showLocations := !state.showLocations);
setChecked(miShowLocations, state.showLocations);
repaint(mainGrid);
});
JMenuBar menuBar = getMenuBar(mainFrame);
JMenuItem helpItem = jMenuItem("Help F1", rThread showHelp);
/*print(minSize := getMinimumSize(helpItem));
print(preferredSize := getPreferredSize(helpItem));*/
addMenuItem(menuBar, jPreferredWidthToMaxWidth(helpItem));
addAndRevalidate(menuBar, jHorizontalGlue()); // spacer
registerFunctionKey(mainFrame, 1, rThread showHelp);
registerKeyCode(mainFrame, KeyEvent.VK_SPACE, r { state.invertSelection() });
registerKeyCode(mainFrame, KeyEvent.VK_UP, r { state.moveCursor(0, -1) });
registerKeyCode(mainFrame, KeyEvent.VK_LEFT, r { state.moveCursor(-1, 0) });
registerKeyCode(mainFrame, KeyEvent.VK_DOWN, r { state.moveCursor(0, 1) });
registerKeyCode(mainFrame, KeyEvent.VK_RIGHT, r { state.moveCursor(1, 0) });
for (int key = KeyEvent.VK_A; key <= KeyEvent.VK_Z; key++)
registerKeyCode(mainFrame, key, r { state.placeSmarty() });
JSpinner worldSizeSpinner = jSpinner(state.gridCols, 1, 8);
onChange(worldSizeSpinner, r {
setWorldSize(intFromSpinner(worldSizeSpinner));
});
JComponent middleArea = westAndCenterWithMargin(spacing,
jvstackWithSpacing(spacing,
withTitle("World size (max=8)", worldSizeSpinner),
jbutton("Clear Selected Area", rThread { state.clearSelectedArea() }),
withTitle("Current world", jdisabledtextfield("empty")),
fontSizePlus(2, setForeground(Color.ORANGE, jCenteredLabel("Design or Select a body for Smarty"))),
jbutton("Design or Select Smarty's Body"),
withTitle("Current Smarty", jdisabledtextfield("Smarty0")),
),
jvgridWithSpacing(spacing,
withTitle("Sensors Values are", jTextArea()),
withTitle("Devices Values are", jTextArea())
)
);
JComponent controlArea = northCenterAndSouthWithMargin(spacing,
fontSizePlus(2, setForeground(Color.blue, jlabel("Design the World - Read the Help F1"))),
middleArea,
jCenteredSection("Run Smarty",
jflow(
jbutton("Go / Continue"),
jButton("See History", r showHistory),
jbutton("Reset"),
jbutton("EXIT", rThread killVM),
jbutton("See Memory", r showMemory)))
);
scpMainGrid = singleComponentPanel();
makeMainGrid();
setFrameContents(mainFrame, westAndCenterWithMargins(spacing,
jvstackWithSpacing(spacing, jFixedSize(500, scpMainGrid),
jhgridWithSpacing(spacing, jlabel("VisionD:"), jlabel("Wheels:"))
),
controlArea));
centerPackFrame(mainFrame);
if (showHelpOnStart) showHelp();
//hideConsole();
}
svoid showHelp() {
S text = loadSnippet(#1031105);
S heading = firstLine(text);
trim(dropFirstLine(text));
showFrame(heading, fontSizePlus(4, makeUneditableWithTextColor(Color.black, wordWrapTextArea(text))));
}
// run in Swing thread
svoid showHistory {
Font ttFont = typeWriterFont(12), helpFont = sansSerifFont(13);
if (historyFrame == null)
historyFrame = getFrame(showCenterFrame(scalePt(600, 350, swingFontScale()),
"Stimulus/Response, Percept/Action History",
withMargin(centerAndSouthWithMargin(spacing,
jvsplit(
jTextArea(),
westAndCenterWithMargin(spacing, setFont(ttFont, topAlignLabel(jMultiLineLabel(
linesLL("Step #", "Percept", "Binon #", "", "Expect", "Binon #",
"", "Action", "Binon #", "", "Action", "Binon #", "")))),
setFont(ttFont, jTextArea()))
),
centerAndEastWithMargin(
setFont(helpFont, jMultiLineLabel(historyHelp)),
jvstackWithSpacing(
jButton("See World", r showWorld),
jButton("See Memory", r showMemory))
)))));
else
frameToFront(historyFrame);
}
// run in Swing thread
svoid showMemory {
Font ttFont = typeWriterFont(12), helpFont = sansSerifFont(13);
if (memoryFrame == null)
memoryFrame = getFrame(showCenterFrame(scalePt(600, 350, swingFontScale()),
"Memory",
withMargin(centerAndSouthWithMargin(spacing,
// TODO
jvsplit(
jTextArea(),
westAndCenterWithMargin(spacing, setFont(ttFont, topAlignLabel(jMultiLineLabel(
linesLL("Step #", "Percept", "Binon #", "", "Expect", "Binon #",
"", "Action", "Binon #", "", "Action", "Binon #", "")))),
setFont(ttFont, jTextArea()))
),
centerAndEastWithMargin(
setFont(helpFont, jMultiLineLabel(historyHelp)),
jvstackWithSpacing(
jButton("See World", r showWorld),
jButton("See Memory", r showMemory))
)))));
else
frameToFront(memoryFrame);
}
svoid showWorld {
frameToFront(mainFrame);
}