ThetaDev
Hi, its ThetaDev! I love spending my time doing interesting software and electronics projects. On this site I showcase some of them.
This is version 0.1.1
Carrot cake biscuit icing pudding danish topping powder. Croissant sugar plum pudding halvah chocolate. Cotton candy tart cake bonbon tart. Shortbread jelly fruitcake icing pastry. Dragée dessert cupcake cake sesame snaps toffee pie.  Carrot cake carrot cake muffin bonbon sesame snaps brownie. Bonbon candy macaroon fruitcake candy canes. Cake pudding danish liquorice cupcake jelly-o ice cream. Liquorice lollipop danish tootsie roll toffee. Gingerbread chocolate candy canes donut lemon drops apple pie danish bear claw. Caramels cake jelly jelly sweet chocolate bar gingerbread icing. Cake soufflé lollipop pudding marshmallow candy canes tootsie roll danish.
Carrot cake biscuit icing pudding danish topping powder. Croissant sugar plum pudding halvah chocolate. Cotton candy tart cake bonbon tart. Shortbread jelly fruitcake icing pastry. Dragée dessert cupcake cake sesame snaps toffee pie.  Carrot cake carrot cake muffin bonbon sesame snaps brownie. Bonbon candy macaroon fruitcake candy canes. Cake pudding danish liquorice cupcake jelly-o ice cream. Liquorice lollipop danish tootsie roll toffee. Gingerbread chocolate candy canes donut lemon drops apple pie danish bear claw. Caramels cake jelly jelly sweet chocolate bar gingerbread icing. Cake soufflé lollipop pudding marshmallow candy canes tootsie roll danish.
Carrot cake biscuit icing pudding danish topping powder. Croissant sugar plum pudding halvah chocolate. Cotton candy tart cake bonbon tart. Shortbread jelly fruitcake icing pastry. Dragée dessert cupcake cake sesame snaps toffee pie.  Carrot cake carrot cake muffin bonbon sesame snaps brownie. Bonbon candy macaroon fruitcake candy canes. Cake pudding danish liquorice cupcake jelly-o ice cream. Liquorice lollipop danish tootsie roll toffee. Gingerbread chocolate candy canes donut lemon drops apple pie danish bear claw. Caramels cake jelly jelly sweet chocolate bar gingerbread icing. Cake soufflé lollipop pudding marshmallow candy canes tootsie roll danish.
Carrot cake biscuit icing pudding danish topping powder. Croissant sugar plum pudding halvah chocolate. Cotton candy tart cake bonbon tart. Shortbread jelly fruitcake icing pastry. Dragée dessert cupcake cake sesame snaps toffee pie.  Carrot cake carrot cake muffin bonbon sesame snaps brownie. Bonbon candy macaroon fruitcake candy canes. Cake pudding danish liquorice cupcake jelly-o ice cream. Liquorice lollipop danish tootsie roll toffee. Gingerbread chocolate candy canes donut lemon drops apple pie danish bear claw. Caramels cake jelly jelly sweet chocolate bar gingerbread icing. Cake soufflé lollipop pudding marshmallow candy canes tootsie roll danish.
Carrot cake biscuit icing pudding danish topping powder. Croissant sugar plum pudding halvah chocolate. Cotton candy tart cake bonbon tart. Shortbread jelly fruitcake icing pastry. Dragée dessert cupcake cake sesame snaps toffee pie.  Carrot cake carrot cake muffin bonbon sesame snaps brownie. Bonbon candy macaroon fruitcake candy canes. Cake pudding danish liquorice cupcake jelly-o ice cream. Liquorice lollipop danish tootsie roll toffee. Gingerbread chocolate candy canes donut lemon drops apple pie danish bear claw. Caramels cake jelly jelly sweet chocolate bar gingerbread icing. Cake soufflé lollipop pudding marshmallow candy canes tootsie roll danish.
Carrot cake biscuit icing pudding danish topping powder. Croissant sugar plum pudding halvah chocolate. Cotton candy tart cake bonbon tart. Shortbread jelly fruitcake icing pastry. Dragée dessert cupcake cake sesame snaps toffee pie.  Carrot cake carrot cake muffin bonbon sesame snaps brownie. Bonbon candy macaroon fruitcake candy canes. Cake pudding danish liquorice cupcake jelly-o ice cream. Liquorice lollipop danish tootsie roll toffee. Gingerbread chocolate candy canes donut lemon drops apple pie danish bear claw. Caramels cake jelly jelly sweet chocolate bar gingerbread icing. Cake soufflé lollipop pudding marshmallow candy canes tootsie roll danish.
Carrot cake biscuit icing pudding danish topping powder. Croissant sugar plum pudding halvah chocolate. Cotton candy tart cake bonbon tart. Shortbread jelly fruitcake icing pastry. Dragée dessert cupcake cake sesame snaps toffee pie.  Carrot cake carrot cake muffin bonbon sesame snaps brownie. Bonbon candy macaroon fruitcake candy canes. Cake pudding danish liquorice cupcake jelly-o ice cream. Liquorice lollipop danish tootsie roll toffee. Gingerbread chocolate candy canes donut lemon drops apple pie danish bear claw. Caramels cake jelly jelly sweet chocolate bar gingerbread icing. Cake soufflé lollipop pudding marshmallow candy canes tootsie roll danish.


G
O
A
T
S
I
N
T
R
E
E
S
DO NOT PRESS
Your score was
. Good job!
Help these cute skydiving goats get onto the tree branches.
Use
and
to move the goats left and right.
And whatever you do, please... for the love of goats,
DO NOT PRESS the
big red button.
Before you start, choose a cute goat friend to save below.
START
0
high score
0
points


ADVICE
Your advice will appear, here.


|
bootstrap-bash
|
Convenience functions to manage users and groups. More...
Functions | |
| bootstrap_user_add_login (int uid, string name, string comment, string password) | |
| Add a user account for a person who has login rights. More... | |
| bootstrap_user_add_system (int uid, string name, string comment, string home) | |
| Add a user account for a daemon which has no login rights. More... | |
| bootstrap_user_exists (string name) | |
| Check if user name exists. More... | |
| bootstrap_user_group_add (int gid, string name) | |
| Add a user group. More... | |
| bootstrap_user_group_exists (string name) | |
| Check if group name exists. More... | |
Convenience functions to manage users and groups.
| bootstrap_user_add_login | ( | int | uid, |
| string | name, | ||
| string | comment, | ||
| string | password | ||
| ) |
Add a user account for a person who has login rights.
| uid | Numerical user identifier |
| name | User name |
| comment | User's full name |
| password | Plain text password |
bootstrap_die
otherwise | bootstrap_user_add_system | ( | int | uid, |
| string | name, | ||
| string | comment, | ||
| string | home | ||
| ) |
Add a user account for a daemon which has no login rights.
| uid | Numerical user identifier |
| name | User name |
| comment | Short description of daemon |
| home | User login directory, will not be created if it is missing. |
bootstrap_die
otherwise | bootstrap_user_exists | ( | string | name | ) |
Check if user name exists.
| name | User name or uid |
| bootstrap_user_group_add | ( | int | gid, |
| string | name | ||
| ) |
Add a user group.
| gid | Numerical group identifier |
| name | Group name |
bootstrap_die
otherwise | bootstrap_user_group_exists | ( | string | name | ) |
Check if group name exists.
| name | Group name or gid |


----------------BOX CONFIG----------------
Click a movable box to highlight.
Use W, A, S and D to move the box.
Use delete key to remove the box.


Review in 2017 and Plans for 2018
Have Done in 2017:
At least solve 100 algorithm problems on leetcode during this year
Insist learning on Khan Academy
Learn JavaScript for web app design
Maintain GitHub project with Vim
Solving at least 1 math question per few days
Learning New Concept English 4th book
Know how to break through the school net
Master Linux System like Kali, Ubuntu
Master System Installation, including Android, Linux, Windows
Plan to do:
Use Javascript
Use Python3
Use Kotlin
Use Golang or C
Keep interests in Programming, be happy, don't mind other's judgment.


Toggle navigation
Home
Find A Tutor
Tutor Dictionary
Quick Find
Find By Name
Find By Campus
Find By Subject
How it Works
Quick Video
Introduction
Common Questions
Feedback
Course Catalog
About Us
Contact Us
Help Center
Q & A
Our Policy
Sign Up
User Profile
Settings
Logout
×
Make an Appointment
Subject
Mathmatics
Computer Science
Economics
Liberal Arts
N/A
Campus
Foggy Bottom
Mount Vernon Square
Virginia Tech Campus
Georgetown
Date and Time
Submit
Cancel
×
Warning:
You are welcome to
Call
us if you are looking for something unlisted!
Make an Appointment !
Home
Course Catalog
Find Your Favorite Course!


About Us
Code for Science & Society ("CSS") is a 501(c)(3) nonprofit organization. We empower communities to work together and build innovative technology for the public good.
We are building a global network of communities collaborating across industries to develop shared resources and solve common problems. We believe in the power of people working together to eliminate information silos and advance knowledge.
Centralized, private services limit information access, creativity, and free expression. We support communities creating innovative, open, and decentralized applications. We work with these groups to push existing boundaries while supporting inclusive models of community. We build foundational technology that allows data to flow across silos and institutions.
To advance our mission, we run three major programs. We develop open learning resources and facilitate collaborations and community-driven projects through our Collaborative Community program. In our Foundational Technology program we build open technology and shared resources to encourage the flow of ideas across domains. We nurture a network of innovative projects to enable communities learn from each other and develop future-facing solutions that empower people through a Sponsored Projects program.
Contact Us
E-mail hi@codeforscience.org


$def with (query)
$:{RENDER("common/stage_title.html", ["Edit Commission Prices", "Settings"])}
Create Classification
$if(query['class']):
Edit Classification
Remove Classification
Create Price
$if(query['price']):
Edit Price
Remove Price
Additional Information


Sorry, this promotion has expired. Please check back soon for more exciting fundraising opportunities.
Going Home in
10
Seconds!


Breaking change, your app controller file must remove these lines:
source "$LOBSTER_APP_ROOT/lib/lobster/dist/bootstrap.sh"
lobster_theme 'header'
source "$LOBSTER_APP_ROOT/lib/lobster/dist/router.sh"
And replace with this line:
source "$LOBSTER_APP_ROOT/lib/lobster/dist/lobster.sh"
Breaking change, any php files that previously did this:
require_once getenv('LOBSTER_ROOT') . '/bootstrap.php';
No must do this:
require_once getenv('LOBSTER_ROOT') . '/lobster.php';


This is a simple multi-process/multi-buildpack application that utilizes the staticfile, ruby, and binary buildpacks.


If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23, for example.
Now, find the sum of all the multiples of 3 or 5 below 1000.
Enter 2 numbers and the limit to find their sum of multiples
ANSWER: ____
Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be: 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.
ANSWER: ____
The prime factors of 13195 are 5, 7, 13 and 29.What is the largest prime factor of the number 1234567?
ANSWER: ____


Here you'll find some example content to show Aloha's possibilities regarding any kind of formatting.
Headline 1
Headline 2
Headline 3
Headline 4
Headline 5
Headline 6
Here we test, a link and other formattings such as
bold, italic or deleted text. You may also use formattings for maths 2
2 = 4 or chemical formulas like CO2.
Or you may edit tables as you do in office products.
| This | is | a | demo |
| table | with | an | |
| awesome | column | ||
| and | row | span | ! |
To describe code you would use fixed style pre
<script> // make content editable $('#content').aloha(); $('.top-text').aloha(); </script>
- List entry
- List entry
- List entry
- List entry
- List entry
- List entry
- List entry
- List entry
- List entry
- List entry
- List entry
- List entry
- List entry
- List entry
- List entry
- List entry
For better sematical understanding and WAI compatibility you can describe abbreviations like HTML and CSS.
powered by


Java Makefile
|
The last few years integrated development environments (IDE) have become popular for software development. IDE's provides the developer with all the tools required for the development task such as file manager, version control system, modeling tools, editor, compiler, debugger, user interface builder, execution environment, profiler and performance analyzing tools. In particular the user interface builder part of IDE's has proved useful, and is the backbone of IDE's like VisualBasic, Delphi, VisualC++, VisualCafé to name a few.
In many cases however, it is far more efficient to do code development in a pure terminal oriented environment. This is done to avoid the vast overhead of the IDE itself, to achieve better control of the development process and to be able to choose development tools like editors and debuggers on an individual basis. For these reasons it is not uncommon to divide projects into UI modules and non-UI modules, and use IDE's only on the former.
Doing development in a pure environment requires a powerful make setup to be efficient. The makefile setup provided here is powerful yet simple. It was created to support large scale multi-platform development, but is equally well suited for the single source file project. Currently it supports Java, C, C++, Fortran but can easily be extended to any language or domain.
The makefiles in this document uses GnuMake syntax. GnuMake is the default make system on the Linux platform, it is available on all UNIX platforms, and a Microsoft Windows version can be downloaded from here. (Look for the file UnxUtils.zip. Download and unpack it, and make sure the wbin/ directory becomes part of your path.) The actual make command in GnuMake is sometimes called gnumake and sometime just make (as is the case on Linux). In this document the latter is used consistently.
Some directory is chosen to be the development root directory (denoted DEV_ROOT below), and underneath it should the following subdirectories be created:
$DEV_ROOT/src /obj /lib /docs /make /bin
The src/ directory holds source files (.java, .c++, .gif etc.) organized in units called packages. The directory structure should follow the Java convention of reversed domain name which ensures universally unique file identifiers. This is useful also for C/C++/Fortran based projects. For instance:
$DEV_ROOT/src/com/adobe/...
The content of one directory constitutes one package. A typical package setup might be:
$DEV_ROOT/src/com/adobe/illustrator/ui/window/ /illustrator/ui/dialogs/ /illustrator/ui/print/ /illustrator/ui/print/postscipt/ /illustrator/ui/print/pdf/ /acroread/editor/.../... /acroread/editor/.../... /...
For Java source, the package statement must always reflect the the name indicated by the directory of each source file.
The obj/ directory contains target files produced by the source files, and the directory structure will be identical to the one int the src tree. The sub structure will be automatically produced by make, but the obj directory itself must be created in advance.
The lib/ directory contains all libraries in use. This includes 3rd-party libraries (copied here manually), as well as libraries produced by make. For the latter, there will be one library per package (i.e. directory) within the source tree. Java source produce .jar libraries while C/C++/Fortran source produce .so libraries. The library is named according to the package location, so Java code in $DEV_ROOT/src/com/adobe/utils are put in $DEV_ROOT/lib/comadobeutil.jar and C code in $DEV_ROOT/src/no/geosoft/math/calculus are put in $DEV_ROOT/lib/nogeosoftmathcalculus.so and so on.
The docs/ directory will hold all output from automatic documentation tools like Javadoc or Doxygen. The entry point for the documentation depends on the tool, but for Javadoc it is the file $DEV_ROOT/docs/index.html.
The make/ directory will hold the main Makefile (shown below) and a script for producing package makefiles. It can optionally be used for holding make logs etc.
The bin/ directory is where make will put non-Java executables.
The following three environment variables has to be set prior to the use of the make system given below:
There are three different makefiles involved. The first two defines the project at hand and will differ for each project, while the third is generic and can be used as is:
The package makefiles should be called Makefile and should be
located within the src tree, one per package.
An example package makefile is shown below:
Source = \ ByteSwapper.java \ Ebcdic.java \ Formatter.java \ IntMap.java \ javacup.gif \ properties.txt \ RmiSource = Main = ByteSwapper include $(DEV_ROOT)/Makefile
The Source entry lists all the source files. .java files will be passed to the Java compiler, .c files to the C-compiler and so on. Other files (like the .gif and .txt above) will be copied unprocessed to the obj tree.
The RmiSource entry lists all Java source files that are to be processed by the rmi compiler. Note that these files must also be listed under the Source entry as they are also processed by javac.
The Main entry is optional and indicates which class contains the main() method. Leave open if none of them do. For a Java program there is only one main entry point, but it is common to include main() in other classes in order to test that specific class. The setup above makes it possible to run these test applications by issuing "make run" from the package level. See below.
The project makefile should be called Makefile and should be located at $DEV_ROOT. The project makefile lists all packages and jar archives that constitutes the project.
An example makefile for a typical Java project is shown below:
JavaPackages = \ no/geosoft/directory \ no/geosoft/user \ no/geosoft/database \ JavaLibraries = \ mysql-connector.jar \ JavaMainClass = \ no.geosoft.database.Main RunParameters = # Javadoc JavadocWindowTitle = 'Geotechnical Software Services - API Specification' JavadocDocTitle = 'GeoSoft API' JavadocHeader = 'GeoSoft API' JavadocFooter = 'Copyright © 2004 - Geotechnical Software Services geosoft.no' include $(DEV_ROOT)/make/Makefile
Packages = \ no/geosoft/directory \ no/geosoft/user \ no/geosoft/util \ IncludeDirs = \ /usr/include \ /usr/include/g++-2 \ /usr/X11R6/include \ LibraryDirs = \ /usr/lib \ /usr/X11R6/lib \ Libraries = \ mysql \ include $(DEV_ROOT)/make/Makefile
The JavaPackages entry lists all Java packages governed by this makefile. The Packages entry list all other packages.
The IncludeDirs list include directories referenced in C/C++/Fortran code. LibraryDirs and Libraries identifies .so libraries for C/C++/Fortran based linking, while JavaLibraries lists 3-rd party jars located in the $DEV_ROOT/lib directory.
The JavaMainClass and RunParameters are used for executing Java applications.
The Javadoc entries are optional and used for decoration of the produced Javadoc documentation.
The Main makefile is the heart and brain of the make setup, and should be located in the $DEV_ROOT/make directory and be called Makefile. It is not executed directly, but rather included by the project makefile. This makefile contains everything needed to build the project described in the project makefile and it is rather complex. However, it it is written once and for all, and can to a large extent be left alone as is. Remember; This is the only Makefile you will ever need.
The Main Makefile is shown below. Copy-paste it from the browser and use it for your own projects:
#--------------------------------------------------------------------------- # (C) 1999 - 2004 Jacob Dreyer - Geotechnical Software Services #<EMAIL_ADDRESS>- http://geosoft.no # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, # MA 02111-1307, USA. #--------------------------------------------------------------------------- #--------------------------------------------------------------------------- # # GnuMake crash course: # # target : depends # rule # # target - the parameter given to make. I.e. what to build # depends - file or other targets target depends on # rule - how to create target (note that rule is preceeded by a TAB char) # $(VAR) - environment variable or variable defined above # $@ - Current target # $* - Current target without extension # $< - Current dependency # #--------------------------------------------------------------------------- #--------------------------------------------------------------------------- # # Directories # #--------------------------------------------------------------------------- SourceDir = $(DEV_ROOT)/src TargetDir = $(DEV_ROOT)/obj LibDir = $(DEV_ROOT)/lib MakeDir = $(DEV_ROOT)/make BinDir = $(DEV_ROOT)/bin DocsDir = $(DEV_ROOT)/docs CurrentDir = $(CURDIR) ifdef Source Package = $(subst $(SourceDir)/,,$(CurrentDir)) PackageList = $(Package) PackageSourceDir = $(SourceDir)/$(Package) PackageTargetDir = $(TargetDir)/$(Package) JavaMainClass = $(subst /,.,$(Package)).$(Main) else PackageList = $(Packages) $(JavaPackages) endif PackageListLoop = $(patsubst %,$(SourceDir)/%/.loop,$(PackageList)) JRE = $(JAVA_HOME)/jre/lib/rt.jar ifdef IS_UNIX X = : else X = \; endif #--------------------------------------------------------------------------- # # Classification of files # #--------------------------------------------------------------------------- # Source JavaFiles = $(filter %.java, $(Source)) CppFiles = $(filter %.cc, $(Source)) CFiles = $(filter %.c, $(Source)) FortranFiles = $(filter %.f, $(Source)) CorbaFiles = $(filter %.idl, $(Source)) OtherSourceFiles = $(filter-out $(JavaFiles) $(CppFiles) $(CFiles) \ $(FortranFiles) $(CorbaFiles), \ $(Source)) ManifestFile = $(PackageSourceDir)/Manifest SourceFiles = $(JavaFiles:%.java= $(PackageSourceDir)/%.java)\ $(CppFiles:%.cc= $(PackageSourceDir)/%.cc)\ $(CFiles:%.c= $(PackageSourceDir)/%.c)\ $(FortranFiles:%.f= $(PackageSourceDir)/%.f) # Target JavaClassFiles = $(JavaFiles:%.java= $(PackageTargetDir)/%.class) JavaClassFilesRel = $(JavaFiles:%.java= $(Package)/%.class) RmiStubFiles = $(RmiSource:%.java= $(PackageTargetDir)/%_Stub.class) RmiSkeletonFiles = $(RmiSource:%.java= $(PackageTargetDir)/%_Skel.class) JniClassFiles = $(JniSource:%.java= $(PackageTargetDir)/%.class) JniHeaders = $(JniSource:%.java= $(PackageSourceDir)/%.h) ObjectFiles = $(CFiles:%.c= $(PackageTargetDir)/%.o)\ $(CppFiles:%.cc= $(PackageTargetDir)/%.o)\ $(FortranFiles:%.f= $(PackageTargetDir)/%.o) OtherTargetFiles = $(OtherSourceFiles:%=$(PackageTargetDir)/%) ThirdPartyJarsTmp = $(patsubst %,$(LibDir)/%,$(JavaLibraries)) ThirdPartyJars = $(subst $(Space),$(X),$(ThirdPartyJarsTmp)) ifneq "$(words $(JavaFiles))" "0" JavaPackageName = $(subst /,.,$(Package)) JarFile = $(LibDir)/$(subst /,,$(Package)).jar endif ifneq "$(words $(ObjectFiles))" "0" DependencyFile = $(PackageSourceDir)/Makedepend SharedLibrary = $(LibDir)/lib$(subst /,,$(Package)).so StaticLibrary = $(LibDir)/lib$(subst /,,$(Package)).a ifneq "$(Main)" "" Executable = $(BinDir)/$(Main) endif endif # # Misc # ClassPath = $(JRE)$(X)$(TargetDir)$(X)$(ThirdPartyJars) JavaPackageNames = $(subst /,.,$(JavaPackages)) IncludePath = -I$(SourceDir) $(IncludeDirs:%=-I%) LibDirs = -L$(LibDir) $(LibraryDirs:%=-L%) LocalLibs = $(subst /,,$(Packages)) LibList = $(LocalLibs:%=-l%) $(Libraries:%=-l%) #--------------------------------------------------------------------------- # # Tools & Options # #--------------------------------------------------------------------------- Print = @echo Copy = cp CCompiler = gcc CppCompiler = gcc Linker = gcc MakeDepend = makedepend MakeDir = mkdir -p Delete = rm -fr StaticArchiver = ar DynamicArchiver = gcc FortranCompiler = f77 JavaCompiler = $(JAVA_HOME)/bin/javac JavaArchiver = $(JAVA_HOME)/bin/jar JarSigner = $(JAVA_HOME)/bin/jarsigner JavadocGenerator = $(JAVA_HOME)/bin/javadoc JniCompiler = $(JAVA_HOME)/bin/javah RmiCompiler = $(JAVA_HOME)/bin/rmic JavaExecute = $(JAVA_HOME)/bin/java Purify = purify WordCount = wc List = cat MakeOptions = -k -s MakeDependOptions = StaticArchiverOptions = rc DynamicArchiverOptions = -shared JavaArchiverOptions = JniOptions = RmiOptions = -d $(TargetDir) -classpath $(ClassPath) \ -sourcepath $(SourceDir) FortranOptions = JavaCompilerOptions = -d $(TargetDir) -classpath $(ClassPath) \ -sourcepath $(SourceDir) -deprecation JavaRunOptions = -classpath $(ClassPath) PurifyOptions = JavadocOptions = -d $(DocsDir) \ -sourcepath $(SourceDir) \ -classpath $(ClassPath) \ -author \ -package \ -use \ -splitIndex \ -version \ -link file:$(JAVA_HOME)/docs/api \ -windowtitle $(JavadocWindowTitle) \ -doctitle $(JavadocDocTitle) \ -header $(JavadocHeader) \ -bottom $(JavadocFooter) WordCountOptions = --lines Empty = Space = $(Empty) $(Empty) #--------------------------------------------------------------------------- # # Rules # #--------------------------------------------------------------------------- default : build %.loop : @$(MAKE) $(MakeOptions) -C $(subst .loop,,$@) _$(MAKECMDGOALS)all # Create target directory $(PackageTargetDir) : $(MakeDir) $@ # .c -> .o $(PackageTargetDir)/%.o : $(PackageTargetDir) $(PackageSourceDir)/%.c $(Print) $@ @$(CCompiler) $(COptions) -c $(IncludePath) $< -o $@ %.o : $(PackageSourceDir)/%.c $(MAKE) $(MakeOptions) $(PackageTargetDir)/$@ # .cc -> .o $(PackageTargetDir)/%.o : $(PackageSourceDir)/%.cc $(Print) $@ $(CppCompiler) $(CppOptions) -c $(IncludePath) $< -o $@ %.o : $(PackageSourceDir)/%.cc $(MAKE) $(MakeOptions) $(PackageTargetDir)/$@ # .f -> .o $(PackageTargetDir)/%.o : $(PackageSourceDir)/%.f $(Print) $@ @$(FortranCompiler) $(FortranOptions) -c $< -o $@ %.o : $(PackageSourceDir)/%.f $(MAKE) $(MakeOptions) $(PackageTargetDir)/$@ # .java -> .class $(PackageTargetDir)/%.class : $(PackageSourceDir)/%.java $(Print) $@ @$(JavaCompiler) $(JavaCompilerOptions) $< %.class : $(PackageSourceDir)/%.java @$(MAKE) $(MakeOptions) $(PackageTargetDir)/$@ # .class -> .h $(PackageSourceDir)/%.h : $(PackageTargetDir)/%.class $(Print) $@ $(JniCompiler) $(JniOptions) $(JavaPackageName).$* %.h : %.class $(MAKE) $(MakeOptions) $(PackageSourceDir)/$@ # .o -> .a $(LibDir)/%.a : $(ObjectFiles) $(Print) $@ @$(StaticArchiver) $(StaticArchiverOptions) $@ $(ObjectFiles) %.a : $(ObjectFiles) $(MAKE) $(MakeOptions) $(LibDir)/$@ # .o -> .so $(LibDir)/%.so : $(ObjectFiles) $(Print) $@ $(DynamicArchiver) $(ObjectFiles) $(DynamicArchiverOptions) -o $@ %.so : $(ObjectFiles) $(MAKE) $(MakeOptions) $(LibDir)/$@ # .class -> .jar $(LibDir)/%.jar : $(JavaClassFiles) $(OtherTargetFiles) $(Print) $@ @cd $(TargetDir); $(JavaArchiver) -cf $@ \ $(JavaClassFilesRel) $(OtherTargetFiles) %.jar : $(JavaClassFiles) $(OtherTargetFiles) $(MAKE) $(MakeOptions) $(LibDir)/$@ # .class -> JavaDoc javadoc : $(Print) $(JavaPackageNames) > $(DEV_ROOT)/packages.tmp $(JavadocGenerator) $(JavadocOptions) @$(DEV_ROOT)/packages.tmp $(Delete) $(DEV_ROOT)/packages.tmp $(Print) Done JavaDoc. # .class -> _Stub.class $(PackageTargetDir)/%_Stub.class : $(PackageTargetDir)/%.class $(Print) $@ $(RmiCompiler) $(RmiOptions) $(JavaPackageName).$* %_Stub.class : %.class $(MAKE) $(MakeOptions) $(PackageTargetDir)/$@ # .class -> _Skel.class $(PackageTargetDir)/%_Skel.class : $(PackageTargetDir)/%.class $(Print) $@ $(RmiCompiler) $(RmiOptions) $(JavaPackageName).$* %_Skel.class : %.class $(MAKE) $(MakeOptions) $(PackageTargetDir)/$@ # Executable $(Executable) : $(ObjectFiles) $(Print) $@ $(Linker) $(LinkOptions) $(LibDirs) $(LibList) $(ObjectFiles) -o $@ # Anything else is just copied from source to target $(PackageTargetDir)/% : $(PackageSourceDir)/% $(Print) $@ $(Copy) $< $@ # make (or make build) build : $(PackageListLoop) $(Print) Done build. _all : _buildall _buildall : \ $(DependencyFile) \ $(PackageTargetDir) \ $(ObjectFiles) \ $(JavaClassFiles) \ $(RmiStubFiles) \ $(RmiSkeletonFiles) \ $(OtherTargetFiles) \ $(SharedLibrary) \ $(StaticLibrary) \ $(JarFile) \ $(Executable) # make clean clean : $(PackageListLoop) $(Print) Done clean. _cleanall : $(Delete) $(PackageTargetDir)/* \ $(JarFile) \ $(SharedLibrary) \ $(StaticLibrary) \ $(Executable) \ $(DependencyFile) # make depend depend : $(PackageListLoop) $(Print) Done dependencies. _dependall : $(DependencyFile) $(DependencyFile) : $(Print) $@ @cd $(PackageSourceDir); \ $(MakeDepend) $(MakeDependOptions) -f- -p$(PackageTargetDir)/ \ $(IncludePath) $(Source) > $(DependencyFile) # make lib lib : $(PackageListLoop) $(Print) Libraries built. _liball : $(JarFile) $(SharedLibrary) $(StaticLibrary) jar : $(JarFile) jarsign : $(JarFile) $(JarSigner) -keystore GeoSoftKeystore $(JarFile) myself # make statistics _statisticsall : @$(Print) $(SourceFiles) >> $(DEV_ROOT)/files.tmp statistics : $(PackageListLoop) @$(List) $(DEV_ROOT)/files.tmp | xargs $(WordCount) $(WordCountOptions) @$(Delete) $(DEV_ROOT)/files.tmp $(Print) Done statistics. # make pure $(Executable).pure : $(Purify) $(PurifyOptions) $(CppCompiler) $(LinkOptions) $(LibDirs) \ $(LibList) $(ObjectFiles) -o $@ pure : $(Executable).pure # Execute _runexe : $(Executable) $(RunParameters) _runjava : $(JavaExecute) $(JavaRunOptions) $(JavaMainClass) $(RunParameters) run : _runjava ifdef $(DependencyFile) -include $(DependencyFile) endif
Using the make system is quite simple. You will run it from either the package level or from the project level ($DEV_ROOT).
The following commands can be applied from the package level (i.e when
standing in a given package directory within the src tree):
make - Process all source files in the package
make clean - Remove all target files of the package
make SomeTarget - Produce a specific file
like Math.class or math.o. etc.
make run - Execute the Java class identified by Main
in the package Makefile.
The following commands can be applied from the project level (i.e while
standing in the $DEV_ROOT directory):
make - Process all source files in all packages
make clean - Remove all produced files in all packages
make lib - Create all libraries
make javadoc - Create documentation for entire project
make run - Run application
make depend - Create dependency information (non-Java)
make statistics - Produce LOC statistics for the entire project
A package makefile is nothing but a list of the files in the package
directory. It can easily be generated automatically and the following script do
just that. The script should be run while standing in the package directory.
#!/bin/csh -f #*************************************************************************** # # Makefile generator script # # (C) 2004 Jacob Dreyer - Geotechnical Software Services #<EMAIL_ADDRESS>- http://geosoft.no # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # #*************************************************************************** set file = Makefile rm -f $file touch $file printf "Source = \\\n" >> $file foreach SourceFile (ls *.c *.cc *.java *.f *.gif *.jpg`) printf "\t%s \\\n" ${SourceFile} >> $file end printf "\n" >> $file printf "RmiSource =\n\n" >> $file printf "Main =\n\n" >> $file printf "include %s" '$(DEV_ROOT)/Makefile >> $file
Note that the RmiSource and the Main tags cannot be set
automatically and, if required, these should be added after the script
has been run.
|
This page is maintained by<EMAIL_ADDRESS>|


{% extends "layout-side-nav.html" %} {% import "_vars-newsroom.html" as vars with context %} {% set active_nav_id = 'press-resources' %} {% block title -%} Press resources {%- endblock %} {% block desc -%} Contact information and downloadable resources for members of the press. {%- endblock %} {% block content_main_modifiers -%} {{ super() }} content__flush-bottom {%- endblock %} {% block content_main %}
We are committed to engaging with the public and members of the media regularly with accurate and up-to-date information on our work. News media should use this information to reach our Office of Communications. For other questions, see Contact Us.
Our director is appointed by the president and confirmed by the Senate. He heads a bureau of more than 1,200 people working for American consumers. The CFPB works through six divisions, each headed by an associate director.
The CFPB logo was designed to symbolize vigilance, transparency, and a consumer focus. Consumers are the foundation and focus of our mission and our logo reflects that. A soft beam of light symbolizes our efforts to illuminate the financial landscape and foster transparency in the marketplace.


weight: {{baggage.weight}} kg
length: {{baggage.space[0]}} width: {{baggage.space[1]}} height: {{baggage.space[2]}}
from: {{baggage.from}}
accept request before(timezone of your browser): {{baggage.accesptBefore | date: 'medium'}}
to: {{baggage.to}}
arrive after(timezone of your browser): {{baggage.arriveAfter | date: 'medium'}}
weight: {{baggage.weight}} kg
length: {{baggage.space[0]}} width: {{baggage.space[1]}} height: {{baggage.space[2]}}
from: {{baggage.from}}
accept request before(timezone of your browser): {{baggage.accesptBefore | date: 'medium'}}
to: {{baggage.to}}
arrive after(timezone of your browser): {{baggage.arriveAfter | date: 'medium'}}


| configobj reference pages |
s=DUMP(c) s=DUMP(c,name) s=DUMP(c,name,level)
s=DUMP(c) dumps the contents of a configobj to a string. This function calls itself recursively for all nested sections.
s=DUMP(c,name) internal use only, specify the name of the current section that is written to the string.
s=DUMP(c,name,level) internal use only, specify level of current section that is written to the string.
| display | configobj | explore |


It seems we can't connect to the back-end. Make sure it's running and that you use a browser that supports websockets.


The best helper at the grocery store!
🏀 “The defining feature of Kansas’s run of dominance under head coach Bill Self is consistency. The Jayhawks win, and they win a lot…” – Kansas basketball: Jayhawks’ transfer additions show Bill Self’s ability to adjust - SI.com
Love having more time in the evenings to spend with this goober!!
🛩 “It’s not like the court thinks that mandatory drone registration is a bad idea, or that the FAA shouldn’t be in charge of it. It’s just that the law doesn’t currently allow the FAA to do what it did…” – Court Ruling: The FAA Can’t Make You Register Your Drone - IEEE Spectrum
🛩 “Cirrus said it has received EASA certification for its $2 million Vision jet and has made its first delivery in Europe…” – EBACE: Cirrus, Piper Models Now EASA-Certified - AVweb
🚗 “Within 13 years self-driving cars will dominate the roads, representing some 95% of all car miles driven, according to a new study released this week. And while 40% of the cars in 2030 will still be of the old, internal combustion variety, they’ll represent just 5% of the consumer miles driven…” – RethinkX: Self-Driving Electric Cars Will Dominate Roads by 2030 - IEEE Spectrum
🔬 “Every human thought starts with a signal traveling from one neuron to another in the brain. Yet we know relatively little about how these connections form…” – Researchers Grow Brain Cells on a Chip - IEEE Spectrum
🌎 “It was designed as an impregnable deep-freeze to protect the world’s most precious seeds from any global disaster and ensure humanity’s food supply forever. But the Global Seed Vault, buried in a mountain deep inside the Arctic circle, has been breached after global warming produced extraordinary temperatures over the winter, sending meltwater gushing into the entrance tunnel…” – Arctic stronghold of world’s seeds flooded after permafrost melts - The Guardian
Great morning at the farmers market with the family!!
💻 “There’s a cool command-line JSON processor called jq…” – Daring Fireball: jq
🛩 Garmin Intros Head-Up Display: avweb.com


Customizing CMS Components
Note: Spartacus 2.x is no longer maintained. Please upgrade to the latest version.
The Spartacus storefront is based on JavaScript, and accordingly, it is composed of a large number of fine-grained JavaScript components. However, there is a special kind of component to render CMS content. CMS components are dynamically added at runtime. The CMS component type, given by the back end, is mapped to an equivalent JS component. The mapping is provided in a configuration that can be customized. This allows you to configure a custom component to render a specific CMS component.
In addition, component-specific business logic can be customized. This requires an additional configuration where the custom service can be provided to the (default) component.
With this setup, CMS components can be customized in the following ways:
| Scenario | Approach | Example |
|---|---|---|
| Customize style | Add custom CSS rules (Out of scope for this doc) |
Customize component style for the LanguageSelector |
| Replace component | Configure a custom component | Provide a custom BannerComponent |
| Customize logic | Configure a custom service | Provide a custom SearchBoxComponentService |
Configuring Custom Components
There are two types of components that can be configured: angular components, and web components (for which we currently provide experimental support).
Custom Angular CMS Components
You can provide a CMS component configuration to the ConfigModule
, or directly to the B2cStorefrontModule
. The following configuration shows how to configure a custom Angular component for the CMS BannerComponent
:
ConfigModule.withConfig({
cmsComponents: {
BannerComponent: {
component: CustomBannerComponent;
}
}
});
Lazy-Loaded CMS Components (Code Splitting)
It is possible to use dynamic imports in CMS mapping to achieve lazy-loaded CMS components and code splitting.
The dynamic import should be defined as an arrow function, as shown in the following example:
ConfigModule.withConfig({
cmsComponents: {
BannerComponent: {
component: () =>
import('./lazy-banner/lazy-banner.component').then(
(m) => m.LazyBannerComponent
),
}
}
});
Note: Resolving chunks for code splitting is done at build time, and depends on how the code is imported. If there is at least one static import available in the main chunk, the code will be bundled statically, and separate chunks will not be generated.
Accessing CMS Data in CMS Components
The CMS data that is related to a component is provided to the component by the CmsComponentData
service during instantiation. The CmsComponentData
service contains the component uid
, and also data$
, which is an observable to the component payload. By making use of the Angular dependency injection (DI) system, components and component-specific services can use the CmsComponentData
.
Using Web Components as CMS Components (Experimental Support)
Warning: This feature is experimental. Some functionality may not work as expected, and the API may mature or change in the future.
Web components have a lot of benefits, and as soon as some of the fundamentals of Angular are ready for this, Spartacus will most likely begin to use them. Some preparation has already been made to allow for loading web components, but the current recommendation is to use Angular components.
To configure a web component as a CMS component, the configuration must consist of the path to the JS file (web component implementation) and its tag name, separated by a hash symbol (#
). The following is an example:
ConfigModule.withConfig({
cmsComponents: {
BannerComponent: {
component: 'path/to/banner/component/file.js#custom-banner'
}
}
});
If you prefer to load web component implementation script eagerly, you can manually include it in your index.html file using usual script
tag, and skip it from mapping configuration:
ConfigModule.withConfig({
cmsComponents: {
BannerComponent: {
component: '#custom-banner'
}
}
});
One JS file can contain more that one web component implementation, used as different CmsComponents.
This requires a separate build process to generate the JS chunk that holds the web component(s), which is out of scope for this documentation.
Accessing API and CMS Data
Web components do not have access to the application DI system, regardless of whether they are built in Angular or not. They are isolated from the core application and can only interact with inputs and outputs. Therefore, they cannot access CmsComponentData
, and would also suffer from not being able to reuse any of the services provided by Spartacus.
For these reasons, Spartacus uses the cxApi
input to provide web components with both component-related data, as well as a generic API to the core services of Spartacus.
Customizing Services
Spartacus CMS components that use (complex) business logic will delegate this to a service. This simplifies extensibility, and is also recommended for the following reasons:
- components only depend on a single service
- the service might have other dependencies
- a custom service can be provided for custom business logic
Component services are designed to be non-singleton services, scoped to the component, so that they have direct access to the CmsComponentData
provided in the component scope. This design does not work well with the Angular DI system, because the DI system does not provide a mechanism to override component services without changing the component.
However, to configure a custom component service, you can provide a service in a similar fashion. The configuration is done in-line with the component configuration. In the following example, the SearchComponent
is provided with a custom SearchBoxComponentService
:
ConfigModule.withConfig({
cmsComponents: {
SearchBoxComponent: {
providers: [
{
provide: SearchBoxComponentService,
useClass: CustomSearchBoxComponentService,
deps: [CmsComponentData, ProductSearchService, RoutingService]
}
];
}
}
});
Guarding Components
It’s often a case that some routes should be accessible only in certain conditions (i.e. Personal Details page should be opened only for signed-in user). For this purpose we can use Angular Route Guards to perform some logic before entering a route (i.e fetch data from backend or check if user is authenticated) and decide whether it can be opened or we should redirect to other page.
The pages’ content is often CMS-driven, so in Spartacus comes up with configuring guards per CMS component. Just after loading CMS components for a page from backend, all Guards of those components are executed. It allows for redirecting to other page if at least one guard decides so (i.e. due to missing authentication).
Note: When many components at the same page have the same guard (i.e. AuthGuard), it will be executed only once.
Below there’s an example how to configure guards for CMS component:
ConfigModule.withConfig({
cmsComponents: {
CheckoutProgress: {
component: CheckoutProgressComponent,
guards: [AuthGuard, CartNotEmptyGuard],
},
}
});
Controlling Server Side Rendering (SSR)
You might not want to render all CMS components in the server. The following are some examples of when not to render a CMS component in the server:
- a CMS component requires personalized input and should not, or cannot, be rendered without it
- a CMS component is not required for SSR output, and for performance reasons, it will be removed from the rendering process
- a CMS component interacts with external services (latency) and is not relevant for indexing and social sharing
While it is possible to add conditional logic in a component to render (parts of) the view in SSR, Spartacus offers a configuration for components to make this more generic, and to avoid any specific logic in components. The following is an example:
ConfigModule.withConfig({
cmsComponents: {
SearchBoxComponent: {
disableSSR: true
}
}
});
Placeholder Components
For Angular or web components that do not need any data from CMS (for example, login), you can use the CMS component of type CMSFlexComponent
as a placeholder. This CMS component contains the special flexType
attribute. Spartacus use the flexType
attribute in its CMS mapping instead of the original component type.
In the same manner, the uid
attribute of JspIncludeComponent
is used in the CMS mapping instead of the original component type.
Note: It is recommended to use CMSFlexComponent
instead of JspIncludeComponent
, because the uid
attribute in JspIncludeComponent
must be unique, which means you cannot have two instances of the same JspIncludeComponent
.
Handling Nested CMS Components
The CMS allows the creation of nested components inside so-called container components. An example of such component is the TabPanelContainer
that is used in the product details page to display the tabs. In this case, the container contains the different tab components.
Spartacus supports the dynamic rendering of nested components. This can be achieved by iterating over the list of child components and using the cxComponentWrapper
directive to dynamically load each component. The list of child components is returned by the component container in the components
field. Using the list of uids it’s possible to fetch their conent using the CmsService
’s getComponentData
method.
The following example demontrate how the tabs are rendered in the product details page:
// tab-paragraph-container.component.ts
/*...*/
constructor(
public componentData: CmsComponentData<CMSTabParagraphContainer>,
private cmsService: CmsService
) {}
components$: Observable<any[]> = this.componentData.data$.pipe(
switchMap(data =>
combineLatest(
data.components.split(' ').map(component =>
this.cmsService.getComponentData<any>(component).pipe(
map(tab => {
return {
...tab,
title: `CMSTabParagraphContainer.tabs.${tab.uid}`, //Custom mapping to pass additional data to the HTML. If not required the map can be omitted.
};
})
)
)
)
)
);
In container component HTML file

<ng-container *ngFor="let component of (components$ | async)">

<ng-template [cxComponentWrapper]="component"> </ng-template>

</ng-container>


Q3DisplayGroup_CalcAndUseBoundingBox |
( TQ3Status ) Q3DisplayGroup_CalcAndUseBoundingBox ( TQ3GroupObject _Nonnull group, TQ3ComputeBounds computeBounds, TQ3ViewObject _Nonnull view );
Calculate and use a bounding box on the given group.
This function computes a bounding box that contains all the geometry
in the group. It then stores this box on the group, and sets the
kQ3DisplayGroupStateMaskUseBoundingBox
flag
on the group state, telling Quesa that the bounding box should be used
for culling.
The computed bounding box will be correct at the time of this call,
but if the group contents change, the bounding box is not automatically
updated. It is up to the application programmer to call this function
again or otherwise update the bounding box when the group changes.
This function must not be called within a submitting loop.
- group
- Group for which a bounding box is to be calculated.
- computeBounds
- Either
kQ3ComputeBoundsExact
(precise) orkQ3ComputeBoundsApproximate
(faster).- view
- View in which the group will ultimately be rendered.
Q3DisplayGroup_GetBoundingBox |
( TQ3Status ) Q3DisplayGroup_GetBoundingBox ( TQ3GroupObject _Nonnull group, TQ3BoundingBox * _Nonnull bBox );
Get the bounding box of a group.
This function retrieves the bounding box of a group, if one has
been set or calculated. If not, kQ3Failure is returned.
- group
- Group to inspect.
- bBox
- Address of bounding box to set with group's bounding box.
Q3DisplayGroup_GetState |
( TQ3Status ) Q3DisplayGroup_GetState ( TQ3GroupObject _Nonnull group, TQ3DisplayGroupState * _Nonnull state );
Get the state flags of a display group.
The display group state flags affect its behavior with regard to
rendering, picking, and computation of a bounding box or sphere.
kQ3DisplayGroupStateNone
: no flags are set.
kQ3DisplayGroupStateMaskIsDrawn
: if set, the group
is processed for rendering or picking; if clear, it is skipped.
kQ3DisplayGroupStateMaskIsInline
: if set, the group is processed
without pushing and popping the graphics state.
kQ3DisplayGroupStateMaskUseBoundingBox
: if set, the bounding box
of the group is used during rendering.
kQ3DisplayGroupStateMaskUseBoundingSphere
: if set, the bounding
sphere of the group is used during rendering.
kQ3DisplayGroupStateMaskIsPicked
: if set, the group is eligible
for picking.
kQ3DisplayGroupStateMaskIsWritten
: if set, the group is eligible
for writing to a file.
The default state has the IsDrawn, IsPicked, and IsWritten flags set;
other flags are clear.
- group
- Group to inspect.
- state
- Receives the group's state flags.
Q3DisplayGroup_GetType |
( TQ3ObjectType ) Q3DisplayGroup_GetType ( TQ3GroupObject _Nonnull group );
Get the specific type of a display group.
The result will be kQ3DisplayGroupTypeOrdered
for an ordered display
group, kQ3DisplayGroupTypeIOProxy
for an I/O Proxy group, and
kQ3GroupTypeDisplay
for a generic display group.
kQ3ObjectTypeInvalid
is returned if there is some error.
- group
- The group to query.
Q3DisplayGroup_New |
( TQ3GroupObject _Nullable ) Q3DisplayGroup_New (void);
Create a new display group.
A display group contains objects that are drawable: geometry, styles,
transforms, attributes and attribute sets, and other display groups.
A display group can be rendered by calling Q3DisplayGroup_Submit
within the rendering loop.
This function returns a newly created, empty display group object.
If some error occurs during creation, this returns nullptr.
See also Q3OrderedDisplayGroup_New
and Q3IOProxyDisplayGroup_New
.
Q3DisplayGroup_RemoveBoundingBox |
( TQ3Status ) Q3DisplayGroup_RemoveBoundingBox ( TQ3GroupObject _Nonnull group );
Remove the bounding box from a group.
If the given group had an assigned or calculated bounding box,
this function removes it and clears the kQ3DisplayGroupStateMaskUseBoundingBox
flag. If not, it does nothing (and returns kQ3Success
anyway).
- group
- Group to remove the bounding box of.
Q3DisplayGroup_SetAndUseBoundingBox |
( TQ3Status ) Q3DisplayGroup_SetAndUseBoundingBox ( TQ3GroupObject _Nonnull group, const TQ3BoundingBox * _Nonnull bBox );
Sets a bounding box for a display group.
This function assigns the given bounding box to the display group. It
also sets the kQ3DisplayGroupStateMaskUseBoundingBox
flag
on the group state, telling Quesa that the bounding box should be used
for culling.
- group
- Group on which to set a bounding box.
- bBox
- Bounding box to use (must be non-empty).
Q3DisplayGroup_SetState |
( TQ3Status ) Q3DisplayGroup_SetState ( TQ3GroupObject _Nonnull group, TQ3DisplayGroupState state );
Set the state flags of a display group.
The display group state flags affect its behavior with regard to
rendering, picking, and computation of a bounding box or sphere.
kQ3DisplayGroupStateNone
: no flags are set.
kQ3DisplayGroupStateMaskIsDrawn
: if set, the group
is processed for rendering or picking; if clear, it is skipped.
kQ3DisplayGroupStateMaskIsInline
: if set, the group is processed
without pushing and popping the graphics state.
kQ3DisplayGroupStateMaskUseBoundingBox
: if set, the bounding box
of the group is used during rendering.
kQ3DisplayGroupStateMaskUseBoundingSphere
: if set, the bounding
sphere of the group is used during rendering.
kQ3DisplayGroupStateMaskIsPicked
: if set, the group is eligible
for picking.
kQ3DisplayGroupStateMaskIsWritten
: if set, the group is eligible
for writing to a file.
The default state has the IsDrawn, IsPicked, and IsWritten flags set;
other flags are clear.
- group
- Group on which to adjust state flags.
- state
- Desired state flags.
Q3DisplayGroup_Submit |
( TQ3Status ) Q3DisplayGroup_Submit ( TQ3GroupObject _Nonnull group, TQ3ViewObject _Nonnull view );
Submit a display group.
This group is used within an appropriate submitting loop on a view
to render, pick, bound, or write the contents of the group.
Note: QD3D would also let you get away with submitting a group for
rendering by calling Q3Geometry_Submit. But this is not valid;
a group (even a display group) is not a type of geometry. Quesa
is less lenient in this regard, so you should collect your drawable
objects in a display group, and submit them with this function.
- group
- Display group to submit.
- view
- View (which must be in a submitting loop).
Q3Group_AddObject |
( TQ3GroupPosition _Nonnull ) Q3Group_AddObject ( TQ3GroupObject _Nonnull group, TQ3Object _Nonnull object );
Append an object to a group.
If the group is unordered (which really means unsorted), the
object is appended to the end of the group. If it is ordered
(i.e. sorted), it is appended to the end of the subset of
objects in the group of the same type as the given object
.
The group increments the object's reference count, so you can safely
dispose of your own reference if you no longer need it.
If for some reason the object cannot be appended, this function
returns nullptr.
- group
- Group to add an object to.
- object
- Object to be added.
object
in group
.
Q3Group_AddObjectAfter |
( TQ3GroupPosition _Nonnull ) Q3Group_AddObjectAfter ( TQ3GroupObject _Nonnull group, TQ3GroupPosition _Nonnull position, TQ3Object _Nonnull object );
Insert an object into a group after a specified position.
This function adds an object to a group, just after the object at the
specified position.
The group increments the object's reference count, so you can safely
dispose of your own reference if you no longer need it.
If for some reason the object cannot be appended, this function
returns nullptr.
- group
- Group to add an object to.
- position
- Position after which to add the object.
- object
- Object to be added.
object
in group
.
Q3Group_AddObjectAndDispose |
( TQ3GroupPosition _Nullable ) Q3Group_AddObjectAndDispose ( TQ3GroupObject _Nonnull theGroup, TQ3Object _Nullable * _Nonnull theObject );
Add an object to a group, and then dispose of it.
If theObject is not nullptr, invokes Q3Group_AddObject to add the object to
the group, disposes of the object, then clears the supplied pointer to
prevent stale references.
Equivalent to:
if (theObject != nullptr)
{
Q3Group_AddObject(theGroup, theObject);
Q3Object_Dispose(theObject);
theObject = nullptr;
}
This function is not available in QD3D.
- theGroup
- The group to add the object to.
- theObject
- The object to add (may be nullptr).
Q3Group_AddObjectBefore |
( TQ3GroupPosition _Nonnull ) Q3Group_AddObjectBefore ( TQ3GroupObject _Nonnull group, TQ3GroupPosition _Nonnull position, TQ3Object _Nonnull object );
Insert an object into a group before a specified position.
This function adds an object to a group, before the object at the
specified position.
The group increments the object's reference count, so you can safely
dispose of your own reference if you no longer need it.
If for some reason the object cannot be appended, this function
returns nullptr.
- group
- Group to add an object to.
- position
- Position before which to add the object.
- object
- Object to be added.
object
in group
.
Q3Group_CountObjects |
( TQ3Status ) Q3Group_CountObjects ( TQ3GroupObject _Nonnull group, TQ3Uns32 * _Nonnull nObjects );
Determine how many objects are in a group.
Note that subgroups (groups within the given group) count as
only one object each; this function does not recurse into them
to get the total number of objects in the hierarchy.
- group
- Group to inspect.
- nObjects
- Address of integer to receive the object count.
Q3Group_CountObjectsOfType |
( TQ3Status ) Q3Group_CountObjectsOfType ( TQ3GroupObject _Nonnull group, TQ3ObjectType isType, TQ3Uns32 * _Nonnull nObjects );
Determine how many objects of a certain type are in a group.
Note that subgroups (groups within the given group) count as
only one object each; this function does not recurse into them
to consider the entire hierarchy.
- group
- Group to inspect.
- isType
- Object type.
- nObjects
- Address of integer to receive the object count.
Q3Group_EmptyObjects |
( TQ3Status ) Q3Group_EmptyObjects ( TQ3GroupObject _Nonnull group );
Remove all object references from the group.
Call this function to dispose of all object references in the given
group. (The group itself is not disposed of.)
- group
- Group to empty.
Q3Group_EmptyObjectsOfType |
( TQ3Status ) Q3Group_EmptyObjectsOfType ( TQ3GroupObject _Nonnull group, TQ3ObjectType isType );
Remove all objects of a particular type from a group.
Call this function to dispose of all object references of a certain
type in the given group. (The group itself is not disposed of,
even if this call leaves it empty.)
- group
- Group to operate on.
- isType
- Type of objects to dispose.
Q3Group_GetFirstObjectPosition |
( TQ3Status ) Q3Group_GetFirstObjectPosition ( TQ3GroupObject _Nonnull group, TQ3Object _Nonnull object, TQ3GroupPosition _Nullable * _Nonnull position );
Get the first position of an object within a group.
An object may be referenced a group multiple times. Use this function
to find the first position of the first reference to the given object.
You could then use Q3Group_GetNextObjectPosition
to
iterate over all other references to the same object.
Note: unless you pass invalid parameters, the function result will be
kQ3Success. You must test whether the returned position is nullptr to know
whether you found a valid object position.
- group
- Group to inspect.
- object
- Desired object.
- position
- Receives first position of
object
ingroup
, or NULL if none.
Q3Group_GetFirstPosition |
( TQ3Status ) Q3Group_GetFirstPosition ( TQ3GroupObject _Nonnull group, TQ3GroupPosition _Nullable * _Nonnull position );
Get the first position in a group.
This can be used in conjunction with Q3Group_GetNextPosition
to iterate over all members of a group.
- group
- Group of interest.
- position
- Receives the position of the first object in
group
, or NULL if the group is empty.
Q3Group_GetFirstPositionOfType |
( TQ3Status ) Q3Group_GetFirstPositionOfType ( TQ3GroupObject _Nonnull group, TQ3ObjectType isType, TQ3GroupPosition _Nullable * _Nonnull position );
Get the position of the first object of a given type.
This can be used in conjunction with Q3Group_GetNextPositionOfType
to iterate over all group members of a certain type.
- group
- Group of interest.
- isType
- Desired object type.
- position
- Receives the position of the first object of that type, or NULL if none.
Q3Group_GetLastObjectPosition |
( TQ3Status ) Q3Group_GetLastObjectPosition ( TQ3GroupObject _Nonnull group, TQ3Object _Nonnull object, TQ3GroupPosition _Nullable * _Nonnull position );
Get the last position of an object within a group.
An object may be referenced a group multiple times. Use this function
to find the last position of the first reference to the given object.
You could then use Q3Group_GetPreviousObjectPosition
to
iterate backwards over all other references to the same object.
Note: unless you pass invalid parameters, the function result will be
kQ3Success. You must test whether the returned position is nullptr to know
whether you found a valid object position.
- group
- Group to inspect.
- object
- Desired object.
- position
- Receives last position of
object
ingroup
, or NULL if none.
Q3Group_GetLastPosition |
( TQ3Status ) Q3Group_GetLastPosition ( TQ3GroupObject _Nonnull group, TQ3GroupPosition _Nullable * _Nonnull position );
Get the last position in a group.
This can be used in conjunction with Q3Group_GetPreviousPosition
to iterate backwards over all members of a group.
- group
- Group of interest.
- position
- Receives the position of the last object in
group
, or NULL if the group is empty.
Q3Group_GetLastPositionOfType |
( TQ3Status ) Q3Group_GetLastPositionOfType ( TQ3GroupObject _Nonnull group, TQ3ObjectType isType, TQ3GroupPosition _Nullable *_Nonnull position );
Get the position of the last object of a given type.
This can be used in conjunction with Q3Group_GetPreviousPositionOfType
to iterate backwards over all group members of a certain type.
- group
- Group of interest.
- isType
- Desired object type.
- position
- Receives the position of the last object of that type, or NULL if none.
Q3Group_GetNextObjectPosition |
( TQ3Status ) Q3Group_GetNextObjectPosition ( TQ3GroupObject _Nonnull group, TQ3Object _Nonnull object, TQ3GroupPosition _Nullable * _Nonnull position );
Advance to the position of the next reference to a given object
within a group. If the given object does not occur again within
the group, *position
is set to nullptr.
Use this in conjunction with Q3Group_GetFirstObjectPosition
to iterate over all occurrences of an object within a group.
- group
- Group to inspect.
- object
- Desired object.
- position
- Position to advance to the next occurrence of
object
.
Q3Group_GetNextPosition |
( TQ3Status ) Q3Group_GetNextPosition ( TQ3GroupObject _Nonnull group, TQ3GroupPosition _Nullable * _Nonnull position );
Advance to the next position in a group.
This function updates position
to refer to the
next position in the group. If there are no further objects
in the group, *position
is set to nullptr.
- group
- Group of interest.
- position
- Address of position to advance.
Q3Group_GetNextPositionOfType |
( TQ3Status ) Q3Group_GetNextPositionOfType ( TQ3GroupObject _Nonnull group, TQ3ObjectType isType, TQ3GroupPosition _Nullable * _Nonnull position );
Advance to the position of the next object of a certain type.
This function updates position
to refer to the
next position in the group of an object of the given type.
If there are no further objects of that type
in the group, *position
is set to nullptr.
- group
- Group of interest.
- isType
- Desired object type.
- position
- Address of position to advance.
Q3Group_GetPositionObject |
( TQ3Status ) Q3Group_GetPositionObject ( TQ3GroupObject _Nonnull group, TQ3GroupPosition _Nonnull position, TQ3Object _Nullable * _Nonnull object );
Get the object located at a certain position in a group.
This function obtains a reference to the group member at a
specified position. Note that the reference count of the
object is incremented, so you must dispose of this reference
when you no longer need it.
Sets *object to nullptr if there is no object at the given position.
- group
- Group to inspect.
- position
- Position of desired object.
- object
- Receives a reference to the indicated object.
Q3Group_GetPreviousObjectPosition |
( TQ3Status ) Q3Group_GetPreviousObjectPosition ( TQ3GroupObject _Nonnull group, TQ3Object _Nonnull object, TQ3GroupPosition _Nullable * _Nonnull position );
Step back to the position of the previous reference to a given object
within a group. If there is no previous reference to that object within
the group, *position
is set to nullptr.
Use this in conjunction with Q3Group_GetLastObjectPosition
to iterate in reverse over all occurrences of an object within a group.
- group
- Group to inspect.
- object
- Desired object.
- position
- Position to step back to the previous occurrence of
object
.
Q3Group_GetPreviousPosition |
( TQ3Status ) Q3Group_GetPreviousPosition ( TQ3GroupObject _Nonnull group, TQ3GroupPosition _Nullable * _Nonnull position );
Step back to the previous position in a group.
This function updates position
to refer to the
previous position in the group. If the given position was
already on the first object in the group, *position
is set to nullptr.
- group
- Group of interest.
- position
- Address of position to step back.
Q3Group_GetPreviousPositionOfType |
( TQ3Status ) Q3Group_GetPreviousPositionOfType ( TQ3GroupObject _Nonnull group, TQ3ObjectType isType, TQ3GroupPosition _Nullable * _Nonnull position );
Step back to the position of the previous object of a certain type.
This function updates position
to refer to the
previous position in the group of an object of the given type.
If there are no previous objects of that type
in the group, *position
is set to nullptr.
- group
- Group of interest.
- isType
- Desired object type.
- position
- Address of position to step back.
Q3Group_GetType |
( TQ3ObjectType ) Q3Group_GetType ( TQ3GroupObject _Nonnull group );
Return the type of a group.
This function returns the group type, as an enum such as
kQ3GroupTypeDisplay, kQ3GroupTypeInfo, or kQ3GroupTypeLight.
(Returns kQ3ObjectTypeInvalid if the type cannot be determined.)
- group
- Group to inspect.
Q3Group_New |
( TQ3GroupObject _Nullable ) Q3Group_New (void);
Create a new generic group.
This function returns a newly created, empty Group object. If
some error occurs during creation, this returns nullptr.
Q3Group_RemovePosition |
( TQ3Object _Nonnull ) Q3Group_RemovePosition ( TQ3GroupObject _Nonnull group, TQ3GroupPosition _Nonnull position );
Remove an object from a group.
This function deletes an object reference from a group, returning it to
the caller. Note that if you don't need the object, you must dispose
of the returned reference; otherwise it will leak.
After this function successfully completes, position
is invalid.
- group
- Group to remove an object from.
- position
- Position of object to remove.
Q3Group_SetPositionObject |
( TQ3Status ) Q3Group_SetPositionObject ( TQ3GroupObject _Nonnull group, TQ3GroupPosition _Nonnull position, TQ3Object _Nonnull object );
Sets the object at a specified position in a group.
This function replaces a member of a group. The reference to
the object previously at the specified position is disposed of,
and a reference to the given object is stored in its place.
The group increments the object's reference count, so you can safely
dispose of your own reference if you no longer need it.
- group
- Group to replace an object in.
- position
- Position of object to replace.
- object
- Object to be stored.
Q3IOProxyDisplayGroup_New |
( TQ3GroupObject _Nullable ) Q3IOProxyDisplayGroup_New (void);
Create a new generic group.
An I/O proxy display group is a group that contains several alternate
representations of the same object, used for file input and output.
For example, if your object contains some advanced type of geometry
which some clients may not be able to support, you could use a
proxy display group to also provide simpler representations of the
model. You should put the alternate representations into the group
in order of preference; client applications will use the first entry
in the group which they can understand.
This function returns a newly created, empty Group object. If
some error occurs during creation, this returns nullptr.
Q3InfoGroup_New |
( TQ3GroupObject _Nullable ) Q3InfoGroup_New (void);
Create a new information group.
This function returns a newly created, empty information group
object. If some error occurs during creation, this returns nullptr.
Q3LightGroup_New |
( TQ3GroupObject _Nullable ) Q3LightGroup_New (void);
Create a new light group.
A light group is a group that contains only lights. These can then
be attached to a view by Q3View_SetLightGroup
.
This function returns a newly created, empty light group object. If
some error occurs during creation, this returns nullptr.
Q3OrderedDisplayGroup_New |
( TQ3GroupObject _Nullable ) Q3OrderedDisplayGroup_New (void);
Create a new ordered display group.
An ordered display group contains drawable objects (geometry,
transforms, attributes, etc.), and keeps them always sorted by
type. They are kept (and rendered) in this order:
1. transforms
2. styles
3. attribute sets
4. shaders
5. geometric objects
6. groups
7. unknown objects
This ordering ensures that transforms, styles, attributes, and
shaders are applied to all of the geometric objects, groups,
and unknown objects in the group.
This function returns a newly created, empty ordered display group.
If some error occurs during creation, this returns nullptr.
Q3XGroup_GetPositionPrivate |
( void * _Nullable ) Q3XGroup_GetPositionPrivate ( TQ3GroupObject _Nonnull group, TQ3GroupPosition _Nonnull position );
Get the private data stored in a group at the given position.
This function returns private data, in the form of an untyped
pointer, which is stored in a group at the given position.
- group
- Group to inspect.
- position
- Position of desired data.
TQ3DisplayGroupStateMasks |
typedef enum QUESA_ENUM_BASE(TQ3Uns32) { kQ3DisplayGroupStateNone = 0, kQ3DisplayGroupStateMaskIsDrawn = (1 << 0), kQ3DisplayGroupStateMaskIsInline = (1 << 1), kQ3DisplayGroupStateMaskUseBoundingBox = (1 << 2), kQ3DisplayGroupStateMaskUseBoundingSphere = (1 << 3), kQ3DisplayGroupStateMaskIsPicked = (1 << 4), kQ3DisplayGroupStateMaskIsWritten = (1 << 5), kQ3DisplayGroupStateMaskIsNotForBounding = (1 << 6), #endif // QUESA_ALLOW_QD3D_EXTENSIONS kQ3DisplayGroupStateMaskSize32 = 0xFFFFFFFF } TQ3DisplayGroupStateMasks;
Group traversal state.
A group's traversal state is set with Q3DisplayGroup_SetState, and
controls how the group is processed when submitted for rendering,
picking, bounding, or writing.
- kQ3DisplayGroupStateNone
- No value.
- kQ3DisplayGroupStateMaskIsDrawn
- The group will be submitted during rendering or picking.
- kQ3DisplayGroupStateMaskIsInline
- The group will be submited without pushing/popping the view state stack around the group contents.
- kQ3DisplayGroupStateMaskUseBoundingBox
- The bounding box is used for culling when rendering.
- kQ3DisplayGroupStateMaskUseBoundingSphere
- The bounding sphere is used for culling when rendering.
- kQ3DisplayGroupStateMaskIsPicked
- The group will be eligible for returning during picking.
- kQ3DisplayGroupStateMaskIsWritten
- The group will be submitted during writing.
- kQ3DisplayGroupStateMaskIsNotForBounding
- The group will not be submitted during bounding. (Not in QD3D.)
© 1999-2023 Quesa Developers (Last Updated 1/27/2023)


Bayou is entirely made with Game Maker 1. I started from zero to code the mecanics, shifting, camera and dialog.
The player have 3 differents spells to help him in his journey. He will acquiere this power all along the game. Evertime he got a new spell, the player will lost a part of he's maximum life. That mean everytime the player will be stronger, more he will have to be skilled.
This is a 1 year school project that we had to do in a team of 8. We decided to take as reference the old Zelda game. We were a multidisciplinary team, composed of game designer, Artist and music composer
At the beginning I participate in the first dicision about the game, like the core mecanics, the universe and the story. Then, I took the role of main programmer. I was in charge of coding the entire game, exept the monsters behavior. All along the project, I continue to gave my vision of the weaks/strongs points of the game about the Game Design experience. I also integrated all the work of the Artists and music composer.
Bayou is a demo of a 2D RPG game in the universe of Voodoo. Inspired by typical Game Design of old Zelda game, with a new mecanics. The most powerful the player will be, the less maximum life he have. Trapped in the swamp of the dead, the player will have to cross it to reach the Load who trapped him there. But he will have to face the servants of the Load and differents creatures lost in this swamp. The final goal of the player is to defeat the Loas himself.


Currently working at an edtech startup, Riiid.
Full-stack developer, system architect, researcher, and dreamer.
...
The page is moved to https://chanyou.page
My research and development interests lie in computer systems, human-computer-interaction, machine learning, and ubiquitous computing. :)
My Google Scholar is here
I have worked on the projects listed below.
[Google Play] iOS App is unavailable now
TRAIN is a fully scalable and highly available dataflow execution engine for serving AI services of Riiid.
Also, our team is developing FLATCAR (AI service bootstrapper for leveraging TRAIN) and RAILROAD (Error and statistics logging framework for TRAIN and FLATCAR)
FROG RAVEN is the first system for optimizing rendering rate in mobile games by leveraging human visual perception. The system reduces game app's rendering rate whenever the succeeding frame is predicted to be perceptually similar enough. As a result, it optimizes the power consumption of mobile games without any modification of codes or binaries like a black magic!
Accepted at MobiCom'17 and introduced at Microsoft Research Blog!
[1-min Video], [Demo Video 1] , [MSR Blog]
TalkBetter is a system for helping children with language delay. Language delay is a problem of children who do not acquire the expected level of language at their ages. It can become a lifelong risk factor if the children are not treated on right time. Through proper conversations between the children and their parents, language delay can be cured. The parents should be cautious in their conversation. TalkBetter helps parents to improve their conversation habit in daily parent-child-conversation. It intervenes in the conversations and points out the bad language habits of parents in real-time.
Accepted at CSCW'14, Best Paper Award!
SocioPhone is a platform for monitoring people's conversations to support the interaction-aware applications in daily life. The system monitors conversation of people and extracts the meta-linguistic contexts that provide useful information about conversations excluding semantics which causes privacy problems. For people to use the system in daily life, the system should be energy efficient and robust. To achieve the requirements, we developed the volume-topography-based method for conversation monitoring. The method leverages multiple phones in same conversation session and makes a 'volume-topography' to detect the turn-taking which is the building block of conversation.
Accepted at MobiSys'13, Best Demo Award at HotMobile'13
Carpool Network is a novel route-based carpool matching system.
Back in the day(2011), carpool matching services were region-based. They just matched the people who have similar destination and departure point. This approach made some burden for users. They needed to estimate the amount of detour distance when they are inviting or joining in a carpool. Also, it missed the opportunity to pick a passenger in the middle of a route. To remedy this, we developed the system, Carpool Network.
Video here
Barcodee(barcodee.io) is an application for searching product-related information including price comparison and Fukushima(radioactive) products alert(RadDog).
Azgag(azgag.com) selects and shows top issues in popular communities in Korea.
Click here to download


Gateway
BOT
24-Jan-19 12:54 PM
[dscrdeql] <Combat Wombat> with comedy we always knew they were acting.. with these people they aren't acting
[dscrdeql] <AndronicusBass-Founder> Chew some strong mint gum sometimes, that helped me. and this is some very smart one line joke style from a show i watched years ago, This particular yt link I watched a few times. I think circa early 2000's https://youtu.be/1NekkjiGRTY
Sketch comedy series featuring a range of different humour styles. Lee Mack, Jim Tavaré, Karen Taylor, Tim Vine, Ronni Ancona
[dscrdeql] <Combat Wombat> will check it out when i got some time
[dscrdeql] <AndronicusBass-Founder> It is comedy art
[dscrdeql] <Combat Wombat> 3 hours not gonna do it now lol
[dscrdeql] <Combat Wombat> too hot
[dscrdeql] <Combat Wombat> still 32 right now
[dscrdeql] <Combat Wombat> whats the temp where you are?
[dscrdeql] <AndronicusBass-Founder> Adelaide
[dscrdeql] <AndronicusBass-Founder> 34 I think
[dscrdeql] <Combat Wombat> farrrr out
[dscrdeql] <Combat Wombat> even worse then here
[dscrdeql] <AndronicusBass-Founder> same temp
[dscrdeql] <Combat Wombat> more humid in melbourne though
[dscrdeql] <Combat Wombat> terrible night for us aussies lol
[dscrdeql] <AndronicusBass-Founder> its dry heat here. I would hate for the same temp but in sydney, sub-tropical.
[dscrdeql] <AndronicusBass-Founder> humidity is torture
[dscrdeql] <AndronicusBass-Founder> I hope you get some sleep, Im off right now and so should you otherwise we could chat for hours.
[dscrdeql] <Combat Wombat> yeah gonna go watch an episode of vikings then try sleep
[dscrdeql] <AndronicusBass-Founder> Fk the dreams of green candles, dream of green ice blocks lol.
[dscrdeql] <Combat Wombat> lol
[dscrdeql] <Combat Wombat> oh i been having heaps of those at work
[dscrdeql] <Combat Wombat>
[dscrdeql] <AndronicusBass-Founder> Yeah!!!!!!