glamoroustoolkit v1.0.2139

  • Glamorous Toolkit
    • About this book
    • Get started
    • A short history of Glamorous Toolkit
    • How to give feedback and contribute
    • About this version of Glamorous Toolkit
  • A tour of the environment
    • GT in 7' videos
      • Getting started with GT in 7'
      • Exploring the GitHub REST API in 7'
      • Inspecting objects with contextual views in 7'
      • Understanding Lepiter in 7'
      • How to find stuff in GT in 7'
      • Smalltalk Syntax in 7'
      • How to set up a GT GitHub repo in 7'
    • A single starting point for scripting, linking and documenting
    • Handling objects through contextual views
    • Managing code with Coder
    • Searching for code, documents and objects in general
    • Molding the environment
    • Basic shortcuts
    • Setting up the environment
  • Case studies of Moldable Development
    • Working with a REST API: the GitHub case study
    • Browsing the OpenAPI description of GitHub
    • Exploring GitHub through GraphQL
    • Exploring your Twitter data
    • Working with AT Protocol
    • Analyzing the Python import time output
    • Explaining Andrej Karpathy's tokenization explanation
    • Editing Rust sources through the Language Server Protocol
    • Editing Python sources through the Language Server Protocol
    • Inspecting Python objects with contextual views
      • Movies Collection demo in GT
      • Movies Collection demo in GemStone
    • Adding gtViews to the existing Python pandas DataFrame and Series class
    • Exploring the execution of a Python LampSort algorithm
    • Working with Python Bridge objects
    • Analyzing COBOL: the AWS CardDemo case study
    • Analyzing JavaScript React Native: the Zooniverse case study
    • Analyzing Ruby on Rails: the Whitehall case study
    • Analyzing feature toggles from a Python project: the Open edX case study
    • Analyzing Spring Boot RESTful web services
    • Visualizing yarn.lock files using JavaScript and Pharo
    • Working with the PostgreSQL relational database
    • Executable domain-driven design: the Ludo game case study
    • Executable domain-driven design: documenting a price model
    • Rewriting Rust code using the rewrite snippet
    • Transforming Delphi code into C# (at syntax level)
    • Using d3 to create views for local objects
    • Building an LLM assistant for editing blog posts
    • Adding the GT book to a LLM to answer questions about GT
    • Glamorous Toolkit as a case study
      • Quantifying the need for contextual tools
      • Explaining the squarified treemap algorithm
      • Explaining the text editor's selection mechanism
      • Scripting an elaborate user interface scenario
      • Optimizing the links in the book for first time readers
      • Testing user interactions: the Spotter case study
      • Detecting the correct positioning of a dropdown
      • Explaining the context menu and dropdown algorithm
      • Identifying an editor bug by inspecting wrapped Rust objects
    • PetitParser SPL case study
      • PetitParser SPL case study slideshow
      • SPL
      • Parsing SPL tokens
      • Debugging SPL grammar rules
      • Extracting a class from a PetitParser script
      • Testing a PetitParser class
      • Using PetitParser to build an AST
      • Implementing an SPL interpreter
      • SPL Facade
  • Tutorials
    • A tour through Pharo
      • Pharo architecture
      • A gentle introduction to Pharo Smalltalk
        • Smalltalk method syntax on a postcard
        • Understanding Smalltalk message syntax
        • Understanding Smalltalk method syntax
        • Understanding Pharo built-in data types
        • Understanding Smalltalk control structures
        • Working with collections in Pharo
        • Implementing a stack machine
      • A gentle introduction to classes and methods in Smalltalk
      • Introducing test examples and code cleaning
      • Understanding self and super
      • Understanding Smalltalk classes and metaclasses
      • Understanding reflection
        • What is Reflection?
        • What is Introspection?
          • Querying objects
          • Querying classes and methods
          • Querying the runtime
        • What is Intercession?
          • Compiling and performing code
          • Understanding object pointers
          • Overriding doesNotUnderstand:
          • Anonymous classes
          • Method wrappers
      • Smalltalk history
    • Querying Pharo code with GT filters
    • Rewriting Pharo code
    • Drawing graphs with Mondrian by example
    • Creating edges in Mondrian
    • Building treemaps
    • Example-driven development by example
    • Example-driven development tutorial: modeling prices
      • Warmup: understanding the Money classes
      • Modeling a Concrete Price
      • Modeling discounted prices
    • Memory Game
      • Implementing the Memory Game model
      • Implementing the Memory Game model logic
      • Building the Memory Game graphical elements with Bloc
      • Playing the Memory Game
      • Building the Memory Game graphics directly with the Sparta canvas
    • Working with text editors
      • Text editor basics
      • Enhancing text with basic text attributes
      • Working with text adornments
      • Handling text events
      • Creating longer text through concatenation or text streams
      • Constructing a text editor with styling
      • Controlling completion in a text editor
    • Ludo Game
      • Implementing a Ludo Game as a moldable development exercise
        • Smalltalk Introductory lecture
        • Ludo Exercise 5
        • Ludo Exercise 6
      • Creating the basic Ludo Board model
      • Adding simple list views for Ludo Players and Squares
      • Placing tokens on the Ludo Board
      • Creating the Ludo Board view
      • Implementing the Ludo Die in the Playground
      • Introducing rules to the Ludo Board Game
      • Adding a feedback region to the Ludo Board
      • Tracking the state of the Ludo game play
      • Testing the Ludo corner cases
      • Ludo Refactoring — merge Game and Board
      • Refactoring scenario with Ludo
      • Ludo Game with first-class moves
      • Fixing Ludo autoplay and storeStrings
    • Parsing with PetitParser2
    • Logging with Beacon
    • Traversing graphs with DeepTraverser
    • Loading and managing code configurations with Metacello
    • Querying SmaCC abstract syntax trees (ASTs)
    • Programatically generating accessors for a class
    • Profiling Glamorous Toolkit
      • Profiling the synchronous execution of stylers using message tally
      • Profiling the styling of a method using the virtual machine telemetry
      • Profiling the user interface for a method styling
  • Explanations
    • Moldable Development
      • Explainable software
      • Developers spend most of their time figuring systems out
      • The contextual nature of software and the importance of tools
      • Moldable Development roles: Facilitator and Stakeholder
        • Facilitator
        • Stakeholder
      • The Moldable Development Environment
      • Mapping Moldable Development
      • Example-driven
      • What is the difference between Moldable Development and ...
      • Moldable Development patterns
        • Explainable System
        • Tooling patterns
          • Moldable Tool
          • Contextual Playground
          • Contextual View
          • Contextual Search
          • Contextual Action
          • Composed Narrative
        • Modeling patterns
          • Moldable Object
          • Example Object
          • Moldable Data Wrapper
          • Moldable Collection Wrapper
        • Process patterns
          • Project Diary
          • Tooling Buildup
          • Blind Spot
          • Simple View
          • Throwaway Analysis Tool
    • Glamorous Toolkit and Pharo
      • A code size analysis
    • One rendering tree
      • Geometry, visual and layout bounds explained
      • How Mondrian relates to Bloc
  • Moldable Development exercises
    • Implementing a moldable Stack Machine
    • Exploring IMDB movie lists
    • Exploring a publications database
    • Implementing a Sudoku solver (open-ended)
  • How to ...
    • How to get started with Moldable Development
    • How to troubleshoot GT
      • What to do when GT hangs?
      • What to do when GT slows to a crawl?
      • How do I recover my work after a crash?
      • What to do if GT is becomes slow and unresponsive?
      • I can't load or commit to repos. What's wrong?
      • What can I do if my repository is detached and I cannot commit my changes?
      • What should I do if I get an error during Lepiter reload?
      • How do I add a Lepiter database to an existing repo?
      • How to guard against inifinte loops?
    • How to work with Lepiter
      • How to get started with Lepiter (FAQ)
        • How to create a Lepiter page?
        • Where are my pages stored?
        • How do I add new snippets?
        • How do I move snippets around within a Lepiter page?
        • How to format text in Lepiter pages?
        • How do I rename a Note?
        • How do I find my pages?
        • How do I move a page to a different database?
        • How do I search within a Lepiter page?
        • How do I create a Table of Contents for a Lepiter database?
        • How do I move a bunch of snippets from one page to another?
      • How to measure the size of the current knowledge base
      • How to visualize the current knowledge base
      • How to snippets for managing the default logical database
        • How to compute the local sync database status for the default database
        • How to reload the content of the default logical database
        • How to programatically register a new database to a logical database
        • How to load another properties file in the default logical database
        • How to replace the default logical database instance
      • How to fix Lepiter loading errors
    • How to get started with Coder (FAQ)
      • How to create a new class?
      • How to add a method to a class?
      • How to add a slot to a class?
      • How to change the package or subpackage of a class?
      • How to rename a class or method?
      • How to evaluate some code?
      • How to search for methods?
      • How to duplicate a class
    • How to close all open debugger windows
    • How to browse examples
    • How to work with GitHub
      • How to configure Git username and email address
      • How to deal with "Detached Working Copy" message
      • How to configure GitHub credentials
        • How to configure GitHub SSH key authentication
        • How to configure GitHub token authentication
        • How to make GitHub credentials persistent
      • How to set up a new GitHub repo
        • How to set up a baseline
        • How to create a GitLab project
      • How to set up a home section
      • Using Libgit-CLI as an alternative to Libgit2 FFI in Iceberg
      • How to contribute to Glamorous Toolkit through a GitHub pull request
      • Another way to contribute to Glamorous Toolkit through a GitHub pull request
      • How to produce signed and verified GitHub commits
      • How to use the Pure Git tool
    • How to ... graphics related
      • How to change the default fonts in GT
      • How to scale the UI
      • How to take a screenshot
      • How to set the extent of the current window
      • How to create a standalone app
      • How to show a picture from a URL
      • How to properly initialize context menus, dropdowns, and tooltips
      • How to set the default weight of a pane in Pager
      • How to open the Morphic World
    • How to parse and manipulate other languages
      • How to parse sources in different languages
      • How to translate an ANTLr parser into SmaCC
      • How to rewrite code in other languages
    • How to work with the file system
    • How to work with a remote code synced image
    • How to execute external commands
      • How to work with external child processes
      • How to stream output from an external child process to the UI
      • How to extract meta information using ExifTool
      • How to display MacOS native notifications
    • How to log Zinc events using Beacon
    • How to explore objects pinned in memory
    • How to get the default finalization registry
    • How to configure search filters in Spotter extensions
    • How to change the memory settings during a computation
    • How to snippets for Glamorous Toolkit development
      • How to update the content of all opened GtWorld instances
      • How to find where a database is stored on disk
      • How to measure the performance of delivering remote announcements
      • How to profile PharoLink remote calls
      • How to debug issues related to the code index
      • How to clone, load and release GlamorousToolkit from sources for development
        • How to clone GlamorousToolkit repositories for development
        • How to load Glamorous Toolkit code for development
        • How to create a Glamorous Toolkit release for development
      • How to create a new release for the GT Vm from a new release of the Pharo Vm
      • How to debug the examples command line runner in image
      • How to investigate performance of stylers in coder
      • How to programatically explore the matching done by the substrings filter
      • How is the interrupt logic using primary+. working
    • How to install Glamorous Toolkit
      • How to use gt-installer
      • How to build a development version of Glamorous Toolkit
      • How to install Glamorous Toolkit with Nix
      • How to use a startup script
    • How to view the startup and shutdown lists
    • How to parse Loader and Cloner logs
    • How to use an ICP callback in a web view
    • How to pages related to the virtual machine
      • How to get the operating system name
      • How to limit the old space size in the VM
    • How to configure the code editor
      • How to configure completion delay and Enter key
      • How to control the word navigation and selection
      • How to control the default folding of the hiding attribute
    • How to work with GenAI / LLM
      • How to setup LLM connections
      • How to enable the GenAI / LLM integration in Coder
      • How to setup an LLM provider
  • Components
    • Beacon
      • Logging VM messages using Beacon
        • Accessing VM log messages using Beacon
        • Printing VM log messages to the console
      • An example of moldable logging using Beacon
    • Coder
      • Programmatic code evaluation
    • Completer
    • Examples
      • Running checks as part of the development cycle
    • Famix
    • Filters
    • Futures, Promises & Streams
      • Futures
      • Promises
        • Promise then:, asyncThen:, and then:otherwise: usage
      • Running futures at user background priority
      • Streams
    • Debugger
      • Extending the debugger through moldable exceptions
        • How to implement a moldable exception
        • Configuring moldable exceptions
        • Examples of moldable exceptions
          • Examples of assertion failures comparing objects
        • Usages of moldable exceptions in Glamorous Toolkit
          • Zinc debugging extensions
    • DeepTraverser
    • Graphical stack
      • Driller
      • Sparta
      • Bloc
        • Bloc Elements
          • Bloc Visual Properties
            • Element Border
        • Layouts explained
        • Layout constraints
        • Layout resizers
      • Brick
        • Asynchronous widgets & futures
        • Widgets
          • Accordion
          • Text editor
            • Editor word classifiers
          • Lists
          • Button
            • Playing with label aptitudes for buttons
            • Learning how button model works
            • Building a custom button appearance
          • Breadcrumb
          • Checkbox
          • Dropdown
          • Pager
      • Scripter
        • Scripter creation
        • Scripter actions
    • gt4gemstone
      • GemStone / Gt4GemStone / GT Version Management
      • gt4gemstone server
        • gt4gemstone server installation
          • Downloading the gt4gemstone release
          • Directly installing GemStone and loading gt4gemstone for development
            • Directly loading gt4gemstone into a Rowan stone for development
          • Manually installing gt4gemstone into a GemStone extent
            • Loading GT server code into a Rowan stone
            • Loading GT server code into a non-Rowan stone
            • Exporting GT server code for loading in a non-Rowan stone
          • Configuring GemStone on MacOS
          • Checking the loaded gt4gemstone version inside a GemStone extent
      • Connecting to the Gemstone repository
        • Setting up the Gt4Gemstone connection
        • Managing the Gt4Gemstone server connection
        • Using Gt4Gemstone to inspect objects
      • GemStone code synchronisation
      • Geolife GPS trajectory dataset example
      • How to profile GemStone remote calls
      • Investigating GemStone operation performance
      • Working with the GemStone transcript
      • Working with GemStone features
      • How to pages related to GemStone
        • How to programatically evaluate code in GemStone
        • How to work with styled text in GemStone
        • How to reset the GemStone connectors in default registry
        • How to get the content of the current gem log file
        • How to get a class object starting from its name (asClass equivalent)
        • How to get methods from a class in GemStone by selector
        • How to work with temporary objects in a session
        • How to check if a GemStone session was created from Glamorous Toolkit
        • How to for gt4gemstone development
          • How to - snippets with multiple halts for resume in the GemStoneDebugger
          • How to - managing remote bindings in a GemStone snippets
      • gt4gemstone development
        • GemStone session registry and manager user interface
        • Debugging remote GemStone views
        • Improving the performance of the GemStone inspector
        • WireEncoding in GemStone
        • Porting GT code to GemStone
    • gt4llm
      • Chatting with an LLM in Ollama, Anthropic, Gemini, or OpenAI
      • Handling custom instructions using assistants
      • Adding tools to assistants
      • Working with images and LLMs
      • Managing LLM provider connections and setting the default
      • Working with MCP servers
        • Working with MCP tools
        • Working with MCP prompts
        • Working with MCP resources
        • Working with GT as an MCP server
      • gt4openai: working with OpenAI
        • Adding an OpenAI API key
        • Working with the OpenAI API client
        • OpenAI assistants
        • OpenAI providers
        • File search in the response provider
        • Embeddings in OpenAI
          • Generating embeddings
          • Using the embedding registry
        • Fine-tuning
          • Creating a fine-tuned model
          • Creating a dataset for fine-tuning
      • gt4ollama: working with Ollama
        • Working with the Ollama API client
        • Embeddings in Ollama
          • Generating embeddings using Ollama models
        • Using modelfiles
        • Using structured outputs
      • gt4anthropic: Working with Anthropic
        • Adding an Anthropic API key
        • Working with the Anthropic API client
      • gt4gemini: Working with Gemini
        • Adding a Gemini API key
        • Working with the Gemini API client
      • LLM utilities
        • Visualizing tokenization
    • gt4magritte
      • How to define a Magritte form field
      • How to build a Magritte form
    • Inspector
      • Inspector views
      • Inspector actions
    • Lepiter
      • Lepiter snippets
        • Text snippet
        • Pharo snippet
        • Example snippet
        • Element snippet
        • PharoLink snippet
        • JavaScript snippet
          • JavaScript debugger setup & example
        • Python snippet
          • Python Debugger Setup & Example
        • GraphQL snippet
        • Shell snippet
        • Wardley Map snippet
        • Rewrite snippet
      • Class comments as live documents
      • Multilanguage notebook
      • Extending Lepiter with dedicated snippets and annotations
        • How to implement a new snippet class
      • Announcements for changes in a Lepiter knowledgebase
    • Loader
      • Example of parsing a Cloner and Loading log for Glamorous Toolkit
    • Phlow
      • How to test phlow views
    • PetitParser
    • Presenter
    • Releaser
      • Profiling the execution of a release
        • Example of parsing a Releaser log for Glamorous Toolkit
    • Remote
      • JSLink
      • PharoLink
        • PharoLink - Start manual server and client
      • PythonBridge
        • Getting started with the Python Bridge
        • Basic usage of the Python Bridge
        • Python Bridge troubleshooting
        • Using an independent Python Bridge instance
        • Running the PythonBridge in another directory
        • Using an externally started, already running Python Bridge instance
        • Connecting to a remote Python Bridge instance
        • Using an alternative Python Bridge controller process
        • Python Bridge cleanup
        • Phlow for Python
        • Debugging remote Python views
        • PythonBridge contextual views for pandas DataFrame and Series
        • Working with Python source files
      • RemoteRunner
        • Remote Runner: start manual runner and workers
        • RemoteRunner: worker startup scripts
        • Remote Runner: checks, examples and tests
        • Remote Runner: Run multiple workers with one image
      • Inspecting remote objects using Remote Phlow
        • Using a simulation for inspecting objects
        • Specifications and Views in Remote Phlow
      • The LanguageLink protocol
    • SmaCC
      • SmaCC scopes
    • Spotter
      • Molding Spotter searches
      • Debugging exceptions in Spotter processors
      • Converting old Spotter searches to use new Spotter
    • Transcript
    • Visualizer
      • Mondrian
      • Treemap
      • Plotter
      • Connector
    • World
  • Technical Aspects
    • Architectural report
      • Architectural report for Glamorous Toolkit development
      • Managing dependencies constraint
      • Ensuring repositories have a Jenkins file
      • Ensuring repositories have a .gitattributes file
      • Pages containing missing references - allowed failures
    • Analysing the size of code-related entities
      • Analysing the size of the code index
    • Analysing the image size and its evolution
    • Exploring Undeclared Variables
    • Creating an analysis for senders of halt in GT packages
    • Exploring repositories used when loading GT
      • Managing forked projects in GT
    • Changes to the base Pharo image
      • Exploring extension methods to the base image
        • Overrides of the base image using #gtPharoPatch:
      • Patches/changes to the base Pharo Image
        • Issues related to patches to the base image
      • Changes in GT for supporting in Pharo 12
        • Changes regarding parsing of code with errors in Pharo 12
        • Changes regarding packages and package tags in Pharo 12
    • Exploring deprecated Glamorous Toolkit classes
    • Lepiter Iceberg Integration Model
      • Iceberg model and inner workings
    • Using Parallels to run GT on other platforms
  • Experimental Development
    • Strict Symbol Comparison
      • Strict Symbol Comparison with literals
      • Strict Symbol Comparison with variables
      • Strict Symbol Comparison in Collections
      • Strict Symbol Comparison in HashedCollections
      • Strict Symbol Comparison logging offline
      • Strict Symbol Comparison logging during development
      • Strict Symbol Comparison - Enabling
  • Glossary of Terms
    • AST
    • Bash
    • COBOL
    • Example
    • feenk
    • Java
    • JavaScript
    • JSON
    • GenAI
    • GitHub
    • Island parser
    • Language Server Protocol (LSP)
    • LLM
    • Markdown
    • Metacello
    • Metacello baseline
    • Message Tally
    • Nix
    • OpenAPI
    • OpenGL
    • pandas
    • Pharo
    • Powershell
    • Python
    • React
    • React Native
    • Reflection
    • Rust
    • Software Assessment
    • Smalltalk
    • Wardley Map
    • XML
    • x86_64

How to configure the code editor

There are several ways to configure the code editor.

How to configure completion delay and Enter key

How to control the word navigation and selection

How to control the default folding of the hiding attribute

Powered by Lepiter | Privacy Policy