[viewBag] title = "Home" url = "/" layout = "default" is_hidden = 0 navigation_hidden = 0 sections[0][show_options] = 1 sections[0][fullScreen] = 1 sections[0][noMargin] = 0 sections[0][cssClasses] = "bg-gradient-to-r from-blue-100 via-blue-50 to-blue-100 text-blue-900 py-6" sections[0][content][0][content] = "This is just simple text with some css classes. Demonstrate 1 column section w/ 1 simple text block and 1 image block." sections[0][content][0][textSize] = "text-lg" sections[0][content][0][textAlign] = "text-center" sections[0][content][0][_group] = "text" sections[0][content][1][image_mode] = 0 sections[0][content][1][image_alt] = "WinterCMS, best free CMS plateforme" sections[0][content][1][image] = "" sections[0][content][1][image_url] = "https://wintercms.com/storage/app/media/wordmark-svg.png" sections[0][content][1][image_css] = "max-w-lg mx-auto my-10" sections[0][content][1][_group] = "image" sections[0][_group] = "section" sections[1][show_options] = 0 sections[1][fullScreen] = 0 sections[1][noMargin] = 0 sections[1][cssClasses] = "" sections[1][left][0][content] = "
This section shows a \"2 columns section\" on large screens that fold on small screen in 1 column w/ 2 rows.
This block is an HTML block, where text can be formated.
Display an image from the media manager or from remote URL.
" sections[1][left][0][_group] = "html" sections[1][right][0][image_mode] = 0 sections[1][right][0][image_alt] = "" sections[1][right][0][image] = "" sections[1][right][0][image_url] = "themes/blocks/assets/images/blocks.jpg" sections[1][right][0][image_css] = "" sections[1][right][0][_group] = "image" sections[1][_group] = "section-double" sections[2][show_options] = 0 sections[2][fullScreen] = 0 sections[2][noMargin] = 0 sections[2][cssClasses] = "" sections[2][left][0][image_mode] = 0 sections[2][left][0][image_alt] = "" sections[2][left][0][image] = "" sections[2][left][0][image_url] = "themes/blocks/assets/images/blocks-menus.png" sections[2][left][0][image_css] = "" sections[2][left][0][_group] = "image" sections[2][right][0][content] = "This section also displays 2 columns, but when the left block is an image block, then on small screens the order gets inverted to nicely alternate image and content blocks.
" sections[2][right][0][_group] = "html" sections[2][_group] = "section-double" sections[3][gridSizeMin] = "grid-cols-1" sections[3][gridSizeMax] = "grid-cols-4" sections[3][gridFlow] = "grid-flow-row" sections[3][placeItems] = "place-items-center" sections[3][show_options] = 1 sections[3][fullScreen] = 1 sections[3][noMargin] = 0 sections[3][cssClasses] = "bg-gradient-to-r from-blue-100 via-blue-50 to-blue-100 text-indigo-900 py-6" sections[3][content][0][iconName] = "speed" sections[3][content][0][title] = "Speed" sections[3][content][0][cssClasses] = "bg-gradient-to-b from-blue-100 to-white text-green-500" sections[3][content][0][description] = "Smart system design, caching and other optimizations ensure that your projects perform well under pressure." sections[3][content][0][_group] = "card" sections[3][content][1][iconName] = "thumb_up" sections[3][content][1][title] = "Simplicity" sections[3][content][1][cssClasses] = "bg-gradient-to-b from-blue-200 to-white" sections[3][content][1][description] = "Build intricate websites with little more than HTML, CSS and JavaScript through a beautiful, user-friendly Backend panel." sections[3][content][1][_group] = "card" sections[3][content][2][iconName] = "timeline" sections[3][content][2][title] = "Stability" sections[3][content][2][cssClasses] = "bg-gradient-to-b from-blue-300 to-white text-green-500" sections[3][content][2][description] = "Careful iterations with backwards-compatibility in focus give you peace of mind that your website will function for years." sections[3][content][2][_group] = "card" sections[3][content][3][iconName] = "verified_user" sections[3][content][3][title] = "Security" sections[3][content][3][cssClasses] = "bg-gradient-to-b from-blue-400 to-white" sections[3][content][3][description] = "With full source code access and transparency, Winter CMS is carefully monitored. Security issues are promptly addressed." sections[3][content][3][_group] = "card" sections[3][_group] = "section-grid" sections[4][show_options] = 0 sections[4][fullScreen] = 0 sections[4][noMargin] = 0 sections[4][cssClasses] = "" sections[4][content][0][content] = "Hello World!
I'm the content of the home page.
Below this line, all is done with page variables definitions from Static Pages plugin for Winter CMS.


Release 1.3.5 (Highlight: Social Sharing)
- Added a Tweet button to article synopsis
- Bug fixes: summaries with date, and numerical patterns are now better handled
Release 1.3.4 (Highlight: Ynet Zynopsis Support)
- YNET now supports article's summarization (Zynopsis)
- Better, more readable synopsis, and some bug fixes
- YNET hiding bug fixes
Release 1.3.3 (Highlight: Article's Automated Summarization)
- Automatic articles' summarization
- YNET terror articles hiding bug fixes
- YNET generic article hiding bug fixes


What is a disadvantage of linear probing?
You tend to get primary clustering
- It can lead to allocating a lot of extra memory
- You tend to get primary clustering
- You tend to get secondary clustering
- The algorithm is difficult to program
Clusters pile up into bigger clusters.
This is called primary clustering.


Moving LLVM Projects to GitHub¶
Table of Contents
- Introduction
- What This Proposal is Not About
- Why Git, and Why GitHub?
- Straw Man Migration Plan
- One or Multiple Repositories?
- Workflow Before/After
- References
Introduction¶
This is a proposal to move our current revision control system from our own hosted Subversion to GitHub. Below are the financial and technical arguments as to why we are proposing such a move and how people (and validation infrastructure) will continue to work with a Git-based LLVM.
There will be a survey pointing at this document which we’ll use to gauge the community’s reaction and, if we collectively decide to move, the time-frame. Be sure to make your view count.
Additionally, we will discuss this during a BoF at the next US LLVM Developer meeting (http://llvm.org/devmtg/2016-11/).
What This Proposal is Not About¶
Changing the development policy.
This proposal relates only to moving the hosting of our source-code repository from SVN hosted on our own servers to Git hosted on GitHub. We are not proposing using GitHub’s issue tracker, pull-requests, or code-review.
Contributors will continue to earn commit access on demand under the Developer Policy, except that that a GitHub account will be required instead of SVN username/password-hash.
Why Git, and Why GitHub?¶
Why Move At All?¶
This discussion began because we currently host our own Subversion server and Git mirror on a voluntary basis. The LLVM Foundation sponsors the server and provides limited support, but there is only so much it can do.
Volunteers are not sysadmins themselves, but compiler engineers that happen to know a thing or two about hosting servers. We also don’t have 24/7 support, and we sometimes wake up to see that continuous integration is broken because the SVN server is either down or unresponsive.
We should take advantage of one of the services out there (GitHub, GitLab, and BitBucket, among others) that offer better service (24/7 stability, disk space, Git server, code browsing, forking facilities, etc) for free.
Why Git?¶
Many new coders nowadays start with Git, and a lot of people have never used SVN, CVS, or anything else. Websites like GitHub have changed the landscape of open source contributions, reducing the cost of first contribution and fostering collaboration.
Git is also the version control many LLVM developers use. Despite the sources being stored in a SVN server, these developers are already using Git through the Git-SVN integration.
Git allows you to:
- Commit, squash, merge, and fork locally without touching the remote server.
- Maintain local branches, enabling multiple threads of development.
- Collaborate on these branches (e.g. through your own fork of llvm on GitHub).
- Inspect the repository history (blame, log, bisect) without Internet access.
- Maintain remote forks and branches on Git hosting services and integrate back to the main repository.
In addition, because Git seems to be replacing many OSS projects’ version control systems, there are many tools that are built over Git. Future tooling may support Git first (if not only).
Why GitHub?¶
GitHub, like GitLab and BitBucket, provides free code hosting for open source projects. Any of these could replace the code-hosting infrastructure that we have today.
These services also have a dedicated team to monitor, migrate, improve and distribute the contents of the repositories depending on region and load.
GitHub has one important advantage over GitLab and BitBucket: it offers read-write SVN access to the repository (https://github.com/blog/626-announcing-svn-support). This would enable people to continue working post-migration as though our code were still canonically in an SVN repository.
In addition, there are already multiple LLVM mirrors on GitHub, indicating that part of our community has already settled there.
On Managing Revision Numbers with Git¶
The current SVN repository hosts all the LLVM sub-projects alongside each other. A single revision number (e.g. r123456) thus identifies a consistent version of all LLVM sub-projects.
Git does not use sequential integer revision number but instead uses a hash to identify each commit. (Linus mentioned that the lack of such revision number is “the only real design mistake” in Git [TorvaldRevNum].)
The loss of a sequential integer revision number has been a sticking point in past discussions about Git:
- “The ‘branch’ I most care about is mainline, and losing the ability to say ‘fixed in r1234’ (with some sort of monotonically increasing number) would be a tragic loss.” [LattnerRevNum]
- “I like those results sorted by time and the chronology should be obvious, but timestamps are incredibly cumbersome and make it difficult to verify that a given checkout matches a given set of results.” [TrickRevNum]
- “There is still the major regression with unreadable version numbers. Given the amount of Bugzilla traffic with ‘Fixed in…’, that’s a non-trivial issue.” [JSonnRevNum]
- “Sequential IDs are important for LNT and llvmlab bisection tool.” [MatthewsRevNum].
However, Git can emulate this increasing revision number:
git rev-list --count <commit-hash>
. This identifier is unique only
within a single branch, but this means the tuple (num, branch-name) uniquely
identifies a commit.
We can thus use this revision number to ensure that e.g. clang -v reports a user-friendly revision number (e.g. master-12345 or 4.0-5321), addressing the objections raised above with respect to this aspect of Git.
What About Branches and Merges?¶
In contrast to SVN, Git makes branching easy. Git’s commit history is represented as a DAG, a departure from SVN’s linear history. However, we propose to mandate making merge commits illegal in our canonical Git repository.
Unfortunately, GitHub does not support server side hooks to enforce such a policy. We must rely on the community to avoid pushing merge commits.
GitHub offers a feature called Status Checks: a branch protected by status checks requires commits to be whitelisted before the push can happen. We could supply a pre-push hook on the client side that would run and check the history, before whitelisting the commit being pushed [statuschecks]. However this solution would be somewhat fragile (how do you update a script installed on every developer machine?) and prevents SVN access to the repository.
What About Commit Emails?¶
We will need a new bot to send emails for each commit. This proposal leaves the email format unchanged besides the commit URL.
Straw Man Migration Plan¶
Step #1 : Before The Move¶
- Update docs to mention the move, so people are aware of what is going on.
- Set up a read-only version of the GitHub project, mirroring our current SVN repository.
- Add the required bots to implement the commit emails, as well as the umbrella repository update (if the multirepo is selected) or the read-only Git views for the sub-projects (if the monorepo is selected).
Step #2 : Git Move¶
- Update the buildbots to pick up updates and commits from the GitHub repository. Not all bots have to migrate at this point, but it’ll help provide infrastructure testing.
- Update Phabricator to pick up commits from the GitHub repository.
- LNT and llvmlab have to be updated: they rely on unique monotonically increasing integer across branch [MatthewsRevNum].
- Instruct downstream integrators to pick up commits from the GitHub repository.
- Review and prepare an update for the LLVM documentation.
Until this point nothing has changed for developers, it will just boil down to a lot of work for buildbot and other infrastructure owners.
The migration will pause here until all dependencies have cleared, and all problems have been solved.
Step #3: Write Access Move¶
- Collect developers’ GitHub account information, and add them to the project.
- Switch the SVN repository to read-only and allow pushes to the GitHub repository.
- Update the documentation.
- Mirror Git to SVN.
Step #4 : Post Move¶
- Archive the SVN repository.
- Update links on the LLVM website pointing to viewvc/klaus/phab etc. to point to GitHub instead.
One or Multiple Repositories?¶
There are two major variants for how to structure our Git repository: The “multirepo” and the “monorepo”.
Multirepo Variant¶
This variant recommends moving each LLVM sub-project to a separate Git repository. This mimics the existing official read-only Git repositories (e.g., http://llvm.org/git/compiler-rt.git), and creates new canonical repositories for each sub-project.
This will allow the individual sub-projects to remain distinct: a developer interested only in compiler-rt can checkout only this repository, build it, and work in isolation of the other sub-projects.
A key need is to be able to check out multiple projects (i.e. lldb+clang+llvm or clang+llvm+libcxx for example) at a specific revision.
A tuple of revisions (one entry per repository) accurately describes the state across the sub-projects. For example, a given version of clang would be <LLVM-12345, clang-5432, libcxx-123, etc.>.
Umbrella Repository¶
To make this more convenient, a separate umbrella repository will be provided. This repository will be used for the sole purpose of understanding the sequence in which commits were pushed to the different repositories and to provide a single revision number.
This umbrella repository will be read-only and continuously updated to record the above tuple. The proposed form to record this is to use Git [submodules], possibly along with a set of scripts to help check out a specific revision of the LLVM distribution.
A regular LLVM developer does not need to interact with the umbrella repository – the individual repositories can be checked out independently – but you would need to use the umbrella repository to bisect multiple sub-projects at the same time, or to check-out old revisions of LLVM with another sub-project at a consistent state.
This umbrella repository will be updated automatically by a bot (running on notice from a webhook on every push, and periodically) on a per commit basis: a single commit in the umbrella repository would match a single commit in a sub-project.
Living Downstream¶
Downstream SVN users can use the read/write SVN bridges with the following caveats:
- Be prepared for a one-time change to the upstream revision numbers.
- The upstream sub-project revision numbers will no longer be in sync.
Downstream Git users can continue without any major changes, with the minor change of upstreaming using git push instead of git svn dcommit.
Git users also have the option of adopting an umbrella repository downstream. The tooling for the upstream umbrella can easily be reused for downstream needs, incorporating extra sub-projects and branching in parallel with sub-project branches.
Multirepo Preview¶
As a preview (disclaimer: this rough prototype, not polished and not representative of the final solution), you can look at the following:
- Repository: https://github.com/llvm-beanz/llvm-submodules
- Update bot: http://beanz-bot.com:8180/jenkins/job/submodule-update/
Concerns¶
- Because GitHub does not allow server-side hooks, and because there is no “push timestamp” in Git, the umbrella repository sequence isn’t totally exact: commits from different repositories pushed around the same time can appear in different orders. However, we don’t expect it to be the common case or to cause serious issues in practice.
- You can’t have a single cross-projects commit that would update both LLVM and other sub-projects (something that can be achieved now). It would be possible to establish a protocol whereby users add a special token to their commit messages that causes the umbrella repo’s updater bot to group all of them into a single revision.
- Another option is to group commits that were pushed closely enough together in the umbrella repository. This has the advantage of allowing cross-project commits, and is less sensitive to mis-ordering commits. However, this has the potential to group unrelated commits together, especially if the bot goes down and needs to catch up.
- This variant relies on heavier tooling. But the current prototype shows that it is not out-of-reach.
- Submodules don’t have a good reputation / are complicating the command line. However, in the proposed setup, a regular developer will seldom interact with submodules directly, and certainly never update them.
- Refactoring across projects is not friendly: taking some functions from clang to make it part of a utility in libSupport wouldn’t carry the history of the code in the llvm repo, preventing recursively applying git blame for instance. However, this is not very different than how most people are Interacting with the repository today, by splitting such change in multiple commits.
Monorepo Variant¶
This variant recommends moving all LLVM sub-projects to a single Git repository, similar to https://github.com/llvm-project/llvm-project. This would mimic an export of the current SVN repository, with each sub-project having its own top-level directory. Not all sub-projects are used for building toolchains. In practice, www/ and test-suite/ will probably stay out of the monorepo.
Putting all sub-projects in a single checkout makes cross-project refactoring naturally simple:
- New sub-projects can be trivially split out for better reuse and/or layering (e.g., to allow libSupport and/or LIT to be used by runtimes without adding a dependency on LLVM).
- Changing an API in LLVM and upgrading the sub-projects will always be done in a single commit, designing away a common source of temporary build breakage.
- Moving code across sub-project (during refactoring for instance) in a single commit enables accurate git blame when tracking code change history.
- Tooling based on git grep works natively across sub-projects, allowing to easier find refactoring opportunities across projects (for example reusing a datastructure initially in LLDB by moving it into libSupport).
- Having all the sources present encourages maintaining the other sub-projects when changing API.
Finally, the monorepo maintains the property of the existing SVN repository that the sub-projects move synchronously, and a single revision number (or commit hash) identifies the state of the development across all projects.
Building a single sub-project¶
Nobody will be forced to build unnecessary projects. The exact structure is TBD, but making it trivial to configure builds for a single sub-project (or a subset of sub-projects) is a hard requirement.
As an example, it could look like the following:
mkdir build && cd build
# Configure only LLVM (default)
cmake path/to/monorepo
# Configure LLVM and lld
cmake path/to/monorepo -DLLVM_ENABLE_PROJECTS=lld
# Configure LLVM and clang
cmake path/to/monorepo -DLLVM_ENABLE_PROJECTS=clang
Read/write sub-project mirrors¶
With the Monorepo, the existing single-subproject mirrors (e.g. http://llvm.org/git/compiler-rt.git) with git-svn read-write access would continue to be maintained: developers would continue to be able to use the existing single-subproject git repositories as they do today, with no changes to workflow. Everything (git fetch, git svn dcommit, etc.) could continue to work identically to how it works today. The monorepo can be set-up such that the SVN revision number matches the SVN revision in the GitHub SVN-bridge.
Living Downstream¶
Downstream SVN users can use the read/write SVN bridge. The SVN revision number can be preserved in the monorepo, minimizing the impact.
Downstream Git users can continue without any major changes, by using the git-svn mirrors on top of the SVN bridge.
Git users can also work upstream with monorepo even if their downstream fork has split repositories. They can apply patches in the appropriate subdirectories of the monorepo using, e.g., git am –directory=…, or plain diff and patch.
Alternatively, Git users can migrate their own fork to the monorepo. As a demonstration, we’ve migrated the “CHERI” fork to the monorepo in two ways:
- Using a script that rewrites history (including merges) so that it looks like the fork always lived in the monorepo [LebarCHERI]. The upside of this is when you check out an old revision, you get a copy of all llvm sub-projects at a consistent revision. (For instance, if it’s a clang fork, when you check out an old revision you’ll get a consistent version of llvm proper.) The downside is that this changes the fork’s commit hashes.
- Merging the fork into the monorepo [AminiCHERI]. This preserves the fork’s commit hashes, but when you check out an old commit you only get the one sub-project.
Monorepo Preview¶
As a preview (disclaimer: this rough prototype, not polished and not representative of the final solution), you can look at the following:
- Full Repository: https://github.com/joker-eph/llvm-project
- Single sub-project view with SVN write access to the full repo: https://github.com/joker-eph/compiler-rt
Concerns¶
- Using the monolithic repository may add overhead for those contributing to a standalone sub-project, particularly on runtimes like libcxx and compiler-rt that don’t rely on LLVM; currently, a fresh clone of libcxx is only 15MB (vs. 1GB for the monorepo), and the commit rate of LLVM may cause more frequent git push collisions when upstreaming. Affected contributors can continue to use the SVN bridge or the single-subproject Git mirrors with git-svn for read-write.
- Using the monolithic repository may add overhead for those integrating a standalone sub-project, even if they aren’t contributing to it, due to the same disk space concern as the point above. The availability of the sub-project Git mirror addresses this, even without SVN access.
- Preservation of the existing read/write SVN-based workflows relies on the GitHub SVN bridge, which is an extra dependency. Maintaining this locks us into GitHub and could restrict future workflow changes.
Multi/Mono Hybrid Variant¶
This variant recommends moving only the LLVM sub-projects that are rev-locked to LLVM into a monorepo (clang, lld, lldb, …), following the multirepo proposal for the rest. While neither variant recommends combining sub-projects like www/ and test-suite/ (which are completely standalone), this goes further and keeps sub-projects like libcxx and compiler-rt in their own distinct repositories.
Concerns¶
- This has most disadvantages of multirepo and monorepo, without bringing many of the advantages.
- Downstream have to upgrade to the monorepo structure, but only partially. So they will keep the infrastructure to integrate the other separate sub-projects.
- All projects that use LIT for testing are effectively rev-locked to LLVM. Furthermore, some runtimes (like compiler-rt) are rev-locked with Clang. It’s not clear where to draw the lines.
Workflow Before/After¶
This section goes through a few examples of workflows, intended to illustrate how end-users or developers would interact with the repository for various use-cases.
Checkout/Clone a Single Project, without Commit Access¶
Except the URL, nothing changes. The possibilities today are:
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
# or with Git
git clone http://llvm.org/git/llvm.git
After the move to GitHub, you would do either:
git clone https://github.com/llvm-project/llvm.git
# or using the GitHub svn native bridge
svn co https://github.com/llvm-project/llvm/trunk
The above works for both the monorepo and the multirepo, as we’ll maintain the existing read-only views of the individual sub-projects.
Checkout/Clone a Single Project, with Commit Access¶
Currently¶
# direct SVN checkout
svn co<EMAIL_ADDRESS>llvm
# or using the read-only Git view, with git-svn
git clone http://llvm.org/git/llvm.git
cd llvm
git svn init https://llvm.org/svn/llvm-project/llvm/trunk --username=<username>
git config svn-remote.svn.fetch :refs/remotes/origin/master
git svn rebase -l # -l avoids fetching ahead of the git mirror.

Multirepo Variant¶
With the multirepo variant, nothing changes but the URL, and commits can be performed using svn commit or git commit and git push:
git clone https://github.com/llvm/llvm.git llvm
# or using the GitHub svn native bridge
svn co https://github.com/llvm/llvm/trunk/ llvm
Monorepo Variant¶
With the monorepo variant, there are a few options, depending on your constraints. First, you could just clone the full repository:
git clone https://github.com/llvm/llvm-projects.git llvm
# or using the GitHub svn native bridge
svn co https://github.com/llvm/llvm-projects/trunk/ llvm
At this point you have every sub-project (llvm, clang, lld, lldb, …), which doesn’t imply you have to build all of them. You can still build only compiler-rt for instance. In this way it’s not different from someone who would check out all the projects with SVN today.
You can commit as normal using git commit and git push or svn commit, and read the history for a single project (git log libcxx for example).
Secondly, there are a few options to avoid checking out all the sources.
Using the GitHub SVN bridge
The GitHub SVN native bridge allows to checkout a subdirectory directly:
svn co https://github.com/llvm/llvm-projects/trunk/compiler-rt compiler-rt —username=…
This checks out only compiler-rt and provides commit access using “svn commit”, in the same way as it would do today.
Using a Subproject Git Nirror
You can use git-svn and one of the sub-project mirrors:
# Clone from the single read-only Git repo
git clone http://llvm.org/git/llvm.git
cd llvm
# Configure the SVN remote and initialize the svn metadata
$ git svn init https://github.com/joker-eph/llvm-project/trunk/llvm —username=...
git config svn-remote.svn.fetch :refs/remotes/origin/master
git svn rebase -l
In this case the repository contains only a single sub-project, and commits can be made using git svn dcommit, again exactly as we do today.
Using a Sparse Checkouts
You can hide the other directories using a Git sparse checkout:
git config core.sparseCheckout true
echo /compiler-rt > .git/info/sparse-checkout
git read-tree -mu HEAD
The data for all sub-projects is still in your .git directory, but in your checkout, you only see compiler-rt. Before you push, you’ll need to fetch and rebase (git pull –rebase) as usual.
Note that when you fetch you’ll likely pull in changes to sub-projects you don’t care about. If you are using spasre checkout, the files from other projects won’t appear on your disk. The only effect is that your commit hash changes.
You can check whether the changes in the last fetch are relevant to your commit by running:
git log<EMAIL_ADDRESS>-- libcxx
This command can be hidden in a script so that git llvmpush would perform all these steps, fail only if such a dependent change exists, and show immediately the change that prevented the push. An immediate repeat of the command would (almost) certainly result in a successful push. Note that today with SVN or git-svn, this step is not possible since the “rebase” implicitly happens while committing (unless a conflict occurs).
Checkout/Clone Multiple Projects, with Commit Access¶
Let’s look how to assemble llvm+clang+libcxx at a given revision.

Multirepo Variant¶
With the multirepo variant, the umbrella repository will be used. This is where the mapping from a single revision number to the individual repositories revisions is stored.:
git clone https://github.com/llvm-beanz/llvm-submodules
cd llvm-submodules
git checkout $REVISION
git submodule init
git submodule update clang llvm libcxx
# the list of sub-project is optional, `git submodule update` would get them all.
At this point the clang, llvm, and libcxx individual repositories are cloned and stored alongside each other. There are CMake flags to describe the directory structure; alternatively, you can just symlink clang to llvm/tools/clang, etc.
Another option is to checkout repositories based on the commit timestamp:
git checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`
Monorepo Variant¶
The repository contains natively the source for every sub-projects at the right revision, which makes this straightforward:
git clone https://github.com/llvm/llvm-projects.git llvm-projects
cd llvm-projects
git checkout $REVISION
As before, at this point clang, llvm, and libcxx are stored in directories alongside each other.
Commit an API Change in LLVM and Update the Sub-projects¶
Today this is possible, even though not common (at least not documented) for subversion users and for git-svn users. For example, few Git users try to update LLD or Clang in the same commit as they change an LLVM API.
The multirepo variant does not address this: one would have to commit and push separately in every individual repository. It would be possible to establish a protocol whereby users add a special token to their commit messages that causes the umbrella repo’s updater bot to group all of them into a single revision.
The monorepo variant handles this natively.
Branching/Stashing/Updating for Local Development or Experiments¶
Currently¶
SVN does not allow this use case, but developers that are currently using git-svn can do it. Let’s look in practice what it means when dealing with multiple sub-projects.
To update the repository to tip of trunk:
git pull
cd tools/clang
git pull
cd ../../projects/libcxx
git pull
To create a new branch:
git checkout -b MyBranch
cd tools/clang
git checkout -b MyBranch
cd ../../projects/libcxx
git checkout -b MyBranch
To switch branches:
git checkout AnotherBranch
cd tools/clang
git checkout AnotherBranch
cd ../../projects/libcxx
git checkout AnotherBranch
Multirepo Variant¶
The multirepo works the same as the current Git workflow: every command needs to be applied to each of the individual repositories. However, the umbrella repository makes this easy using git submodule foreach to replicate a command on all the individual repositories (or submodules in this case):
To create a new branch:
git submodule foreach git checkout -b MyBranch
To switch branches:
git submodule foreach git checkout AnotherBranch
Monorepo Variant¶
Regular Git commands are sufficient, because everything is in a single repository:
To update the repository to tip of trunk:
git pull
To create a new branch:
git checkout -b MyBranch
To switch branches:
git checkout AnotherBranch
Bisecting¶
Assuming a developer is looking for a bug in clang (or lld, or lldb, …).
Currently¶
SVN does not have builtin bisection support, but the single revision across sub-projects makes it possible to script around.
Using the existing Git read-only view of the repositories, it is possible to use the native Git bisection script over the llvm repository, and use some scripting to synchronize the clang repository to match the llvm revision.
Multirepo Variant¶
With the multi-repositories variant, the cross-repository synchronization is achieved using the umbrella repository. This repository contains only submodules for the other sub-projects. The native Git bisection can be used on the umbrella repository directly. A subtlety is that the bisect script itself needs to make sure the submodules are updated accordingly.
For example, to find which commit introduces a regression where clang-3.9 crashes but not clang-3.8 passes, one should be able to simply do:
git bisect start release_39 release_38
git bisect run ./bisect_script.sh
With the bisect_script.sh script being:
#!/bin/sh
cd $UMBRELLA_DIRECTORY
git submodule update llvm clang libcxx #....
cd $BUILD_DIR
ninja clang || exit 125 # an exit code of 125 asks "git bisect"
# to "skip" the current commit
./bin/clang some_crash_test.cpp
When the git bisect run command returns, the umbrella repository is set to the state where the regression is introduced. The commit diff in the umbrella indicate which submodule was updated, and the last commit in this sub-projects is the one that the bisect found.
Monorepo Variant¶
Bisecting on the monorepo is straightforward, and very similar to the above, except that the bisection script does not need to include the git submodule update step.

References¶
| [LattnerRevNum] | Chris Lattner, http://lists.llvm.org/pipermail/llvm-dev/2011-July/041739.html |
| [TrickRevNum] | Andrew Trick, http://lists.llvm.org/pipermail/llvm-dev/2011-July/041721.html |
| [JSonnRevNum] | Joerg Sonnenberg, http://lists.llvm.org/pipermail/llvm-dev/2011-July/041688.html |
| [TorvaldRevNum] | Linus Torvald, http://git.661346.n2.nabble.com/Git-commit-generation-numbers-td6584414.html |
| [MatthewsRevNum] | (1, 2) Chris Matthews, http://lists.llvm.org/pipermail/cfe-dev/2016-July/049886.html |
| [submodules] | Git submodules, https://git-scm.com/book/en/v2/Git-Tools-Submodules) |
| [statuschecks] | GitHub status-checks, https://help.github.com/articles/about-required-status-checks/ |
| [LebarCHERI] | Port CHERI to a single repository rewriting history, http://lists.llvm.org/pipermail/llvm-dev/2016-July/102787.html |
| [AminiCHERI] | Port CHERI to a single repository preserving history, http://lists.llvm.org/pipermail/llvm-dev/2016-July/102804.html |


Around the World in 80 Days
by Jules Verne
Chapter 7: Which Once More Demonstrates the Uselessness of Passports as Aids to Detectives
Additional Information
- Year Published: 1873
- Language: English
- Country of Origin: France
- Source: Verne, J. (1873) Around the World in 80 Days Paris, France: Routledge
-
Readability:
- Flesch–Kincaid Level: 8.0
- Word Count: 849
- Genre: Adventure
- Keywords: 19th century literature, adventure, french literature
- ✎ Cite This
Downloads
The detective passed down the quay, and rapidly made his way to the consul's office, where he was at once admitted to the presence of that official.
"Consul," said he, without preamble, "I have strong reasons for believing that my man is a passenger on the Mongolia." And he narrated what had just passed concerning the passport.
"Well, Mr. Fix," replied the consul, "I shall not be sorry to see the rascal's face; but perhaps he won't come here—that is, if he is the person you suppose him to be. A robber doesn't quite like to leave traces of his flight behind him; and, besides, he is not obliged to have his passport countersigned."
"If he is as shrewd as I think he is, consul, he will come."
"To have his passport visaed?"
"Yes. Passports are only good for annoying honest folks, and aiding in the flight of rogues. I assure you it will be quite the thing for him to do; but I hope you will not visa the passport."
"Why not? If the passport is genuine I have no right to refuse."
"Still, I must keep this man here until I can get a warrant to arrest him from London."
"Ah, that's your look–out. But I cannot—"
The consul did not finish his sentence, for as he spoke a knock was heard at the door, and two strangers entered, one of whom was the servant whom Fix had met on the quay. The other, who was his master, held out his passport with the request that the consul would do him the favour to visa it. The consul took the document and carefully read it, whilst Fix observed, or rather devoured, the stranger with his eyes from a corner of the room.
"You are Mr. Phileas Fogg?" said the consul, after reading the passport.
"I am."
"And this man is your servant?"
"He is: a Frenchman, named Passepartout."
"You are from London?"
"Yes."
"And you are going—"
"To Bombay."
"Very good, sir. You know that a visa is useless, and that no passport is required?"
"I know it, sir," replied Phileas Fogg; "but I wish to prove, by your visa, that I came by Suez."
"Very well, sir."
The consul proceeded to sign and date the passport, after which he added his official seal. Mr. Fogg paid the customary fee, coldly bowed, and went out, followed by his servant.
"Well?" queried the detective.
"Well, he looks and acts like a perfectly honest man," replied the consul.
"Possibly; but that is not the question. Do you think, consul, that this phlegmatic gentleman resembles, feature by feature, the robber whose description I have received?"
"I concede that; but then, you know, all descriptions—"
"I'll make certain of it," interrupted Fix. "The servant seems to me less mysterious than the master; besides, he's a Frenchman, and can't help talking. Excuse me for a little while, consul."
Fix started off in search of Passepartout.
Meanwhile Mr. Fogg, after leaving the consulate, repaired to the quay, gave some orders to Passepartout, went off to the Mongolia in a boat, and descended to his cabin. He took up his note–book, which contained the following memoranda:
"Left London, Wednesday, October 2nd, at 8.45 p.m. "Reached Paris, Thursday, October 3rd, at 7.20 a.m. "Left Paris, Thursday, at 8.40 a.m. "Reached Turin by Mont Cenis, Friday, October 4th, at 6.35 a.m. "Left Turin, Friday, at 7.20 a.m. "Arrived at Brindisi, Saturday, October 5th, at 4 p.m. "Sailed on the Mongolia, Saturday, at 5 p.m. "Reached Suez, Wednesday, October 9th, at 11 a.m. "Total of hours spent, 158+; or, in days, six days and a half."
These dates were inscribed in an itinerary divided into columns, indicating the month, the day of the month, and the day for the stipulated and actual arrivals at each principal point Paris, Brindisi, Suez, Bombay, Calcutta, Singapore, Hong Kong, Yokohama, San Francisco, New York, and London—from the 2nd of October to the 21st of December; and giving a space for setting down the gain made or the loss suffered on arrival at each locality. This methodical record thus contained an account of everything needed, and Mr. Fogg always knew whether he was behind–hand or in advance of his time. On this Friday, October 9th, he noted his arrival at Suez, and observed that he had as yet neither gained nor lost. He sat down quietly to breakfast in his cabin, never once thinking of inspecting the town, being one of those Englishmen who are wont to see foreign countries through the eyes of their domestics.


{% extends "tgrsite/email.html" %} {% load static %} {% block title %}Password Reset{% endblock %} {% block body %}
Someone has requested a password reset for the account registered with this email. If this was not you, you can ignore this email
If this was you, please follow this link to reset your password: {{ protocol}}://{{ domain }}{% url 'users:password_reset_confirm' uidb64=uid token=token %}


Register your spot and make sure you don't miss the Vanilla JS Conference. Sign up using the form below.


To delete an item from Resources:
Actions
menu next
to the resource item, choose Remove
. To delete several items
at a time, check the items to be removed, and then, above the list of
items, click Remove
.
Remove
.
Note: You can delete a folder containing items. To keep the folder's files, first move or copy its contents into another folder.


module
SpritesSmall animated objects that can move freely from the background(s).
In GBA's jargon they are called OBJs.
Files
- file btn_config_sprite_tiles.h
- file btn_config_sprites.h
- file btn_sprite_actions.h
- file btn_sprite_affine_mat_actions.h
- file btn_sprite_affine_mat_attributes.h
- file btn_sprite_affine_mat_attributes_hblank_effect_ptr.h
- file btn_sprite_affine_mat_pa_register_hblank_effect_ptr.h
- file btn_sprite_affine_mat_pb_register_hblank_effect_ptr.h
- file btn_sprite_affine_mat_pc_register_hblank_effect_ptr.h
- file btn_sprite_affine_mat_pd_register_hblank_effect_ptr.h
- file btn_sprite_affine_mat_ptr.h
- file btn_sprite_affine_mats.h
- file btn_sprite_affine_second_attributes.h
- file btn_sprite_affine_second_attributes_hblank_effect_ptr.h
- file btn_sprite_animate_actions.h
- file btn_sprite_builder.h
- file btn_sprite_double_size_mode.h
- file btn_sprite_first_attributes.h
- file btn_sprite_first_attributes_hblank_effect_ptr.h
- file btn_sprite_font.h
- file btn_sprite_item.h
- file btn_sprite_palette_actions.h
- file btn_sprite_palette_color_hblank_effect_ptr.h
- file btn_sprite_palette_item.h
- file btn_sprite_palette_ptr.h
- file btn_sprite_palettes.h
- file btn_sprite_palettes_actions.h
- file btn_sprite_position_hblank_effect_ptr.h
- file btn_sprite_ptr.h
- file btn_sprite_regular_second_attributes.h
- file btn_sprite_regular_second_attributes_hblank_effect_ptr.h
- file btn_sprite_shape_size.h
- file btn_sprite_text_generator.h
- file btn_sprite_third_attributes.h
- file btn_sprite_third_attributes_hblank_effect_ptr.h
- file btn_sprite_tiles.h
- file btn_sprite_tiles_item.h
- file btn_sprite_tiles_ptr.h
- file btn_sprites.h
- file btn_sprites_mosaic.h
- file btn_sprites_mosaic_actions.h
Namespaces
- namespace btn
- Main butano namespace.
- namespace btn::sprite_affine_mats
- Sprite affine transformation matrices related functions.
- namespace btn::sprite_palettes
- Sprite color palettes related functions.
- namespace btn::sprite_tiles
- Sprite tiles related functions.
- namespace btn::sprites
- Sprites related functions.
- namespace btn::sprites_mosaic
- Functions related with the mosaic applied to the sprites.
Classes
- class btn::sprite_visible_manager
- Manages if a sprite_
ptr must be committed to the GBA or not. - class btn::sprite_visible_toggle_action
- Toggles if a sprite_
ptr must be committed to the GBA or not when the action is updated a given number of times. - class btn::sprite_position_manager
- Manages the position of a sprite_
ptr. - class btn::sprite_move_by_action
- Modifies the position of a sprite_
ptr by a given delta. - class btn::sprite_move_to_action
- Modifies the position of a sprite_
ptr until it has a given state. - class btn::sprite_move_loop_action
- Modifies the position of a sprite_
ptr from a minimum to a maximum. When the position is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_move_toggle_action
- Changes the position of a sprite_
ptr when the action is updated a given number of times. - class btn::sprite_rotation_manager
- Manages the rotation angle of a sprite_
ptr. - class btn::sprite_rotate_by_action
- Modifies the rotation angle of a sprite_
ptr by delta_rotation_angle. When the rotation angle is over 360, it goes back to 0 and vice versa. - class btn::sprite_rotate_to_action
- Modifies the rotation angle of a sprite_
ptr until it has a given state. - class btn::sprite_rotate_loop_action
- Modifies the rotation angle of a sprite_
ptr from a minimum to a maximum. When the rotation angle is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_rotate_toggle_action
- Changes the rotation angle of a sprite_
ptr when the action is updated a given number of times. - class btn::sprite_horizontal_scale_manager
- Manages the horizontal scale of a sprite_
ptr. - class btn::sprite_horizontal_scale_to_action
- Modifies the horizontal scale of a sprite_
ptr until it has a given state. - class btn::sprite_horizontal_scale_loop_action
- Modifies the horizontal scale of a sprite_
ptr from a minimum to a maximum. When the horizontal scale is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_horizontal_scale_toggle_action
- Changes the horizontal scale of a sprite_
ptr when the action is updated a given number of times. - class btn::sprite_vertical_scale_manager
- Manages the vertical scale of a sprite_
ptr. - class btn::sprite_vertical_scale_to_action
- Modifies the vertical scale of a sprite_
ptr until it has a given state. - class btn::sprite_vertical_scale_loop_action
- Modifies the vertical scale of a sprite_
ptr from a minimum to a maximum. When the vertical scale is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_vertical_scale_toggle_action
- Changes the vertical scale of a sprite_
ptr when the action is updated a given number of times. - class btn::sprite_scale_manager
- Manages the scale of a sprite_
ptr. - class btn::sprite_scale_to_action
- Modifies the scale of a sprite_
ptr until it has a given state. - class btn::sprite_scale_loop_action
- Modifies the scale of a sprite_
ptr from a minimum to a maximum. When the scale is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_scale_toggle_action
- Changes the scale of a sprite_
ptr when the action is updated a given number of times. - class btn::sprite_horizontal_flip_manager
- Manages if a sprite_
ptr is flipped in its horizontal axis or not. - class btn::sprite_horizontal_flip_toggle_action
- Toggles if a sprite_
ptr must be flipped in the horizontal axis or not when the action is updated a given number of times. - class btn::sprite_vertical_flip_manager
- Manages if a sprite_
ptr is flipped in its vertical axis or not. - class btn::sprite_vertical_flip_toggle_action
- Toggles if a sprite_
ptr must be flipped in the vertical axis or not when the action is updated a given number of times. - class btn::sprite_mosaic_manager
- Manages if the mosaic effect must be applied to a sprite_
ptr or not. - class btn::sprite_mosaic_toggle_action
- Toggles if the mosaic effect must be applied to a sprite_
ptr or not when the action is updated a given number of times. - class btn::sprite_blending_manager
- Manages if blending must be applied to a sprite_
ptr or not. - class btn::sprite_blending_toggle_action
- Toggles if blending must be applied to a sprite_
ptr or not when the action is updated a given number of times. - class btn::sprite_window_manager
- Manages if a sprite_
ptr must be part of the silhouette of the sprite window or not. - class btn::sprite_window_toggle_action
- Toggles if a sprite_
ptr must be part of the silhouette of the sprite window or not when the action is updated a given number of times. - class btn::sprite_affine_mat_rotation_manager
- Manages the rotation angle of a sprite_
affine_ mat_ ptr. - class btn::sprite_affine_mat_rotate_by_action
- Modifies the rotation angle of a sprite_
affine_ mat_ ptr by delta_rotation_angle. When the rotation angle is over 360, it goes back to 0 and vice versa. - class btn::sprite_affine_mat_rotate_to_action
- Modifies the rotation angle of a sprite_
affine_ mat_ ptr until it has a given state. - class btn::sprite_affine_mat_rotate_loop_action
- Modifies the rotation angle of a sprite_
affine_ mat_ ptr from a minimum to a maximum. When the rotation angle is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_affine_mat_rotate_toggle_action
- Changes the rotation angle of a sprite_
affine_ mat_ ptr when the action is updated a given number of times. - class btn::sprite_affine_mat_horizontal_scale_manager
- Manages the horizontal scale of a sprite_
affine_ mat_ ptr. - class btn::sprite_affine_mat_horizontal_scale_to_action
- Modifies the horizontal scale of a sprite_
affine_ mat_ ptr until it has a given state. - class btn::sprite_affine_mat_horizontal_scale_loop_action
- Modifies the horizontal scale of a sprite_
affine_ mat_ ptr from a minimum to a maximum. When the horizontal scale is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_affine_mat_horizontal_scale_toggle_action
- Changes the horizontal scale of a sprite_
affine_ mat_ ptr when the action is updated a given number of times. - class btn::sprite_affine_mat_vertical_scale_manager
- Manages the vertical scale of a sprite_
affine_ mat_ ptr. - class btn::sprite_affine_mat_vertical_scale_to_action
- Modifies the vertical scale of a sprite_
affine_ mat_ ptr until it has a given state. - class btn::sprite_affine_mat_vertical_scale_loop_action
- Modifies the vertical scale of a sprite_
affine_ mat_ ptr from a minimum to a maximum. When the vertical scale is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_affine_mat_vertical_scale_toggle_action
- Changes the vertical scale of a sprite_
affine_ mat_ ptr when the action is updated a given number of times. - class btn::sprite_affine_mat_scale_manager
- Manages the scale of a sprite_
affine_ mat_ ptr. - class btn::sprite_affine_mat_scale_to_action
- Modifies the scale of a sprite_
affine_ mat_ ptr until it has a given state. - class btn::sprite_affine_mat_scale_loop_action
- Modifies the scale of a sprite_
affine_ mat_ ptr from a minimum to a maximum. When the scale is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_affine_mat_scale_toggle_action
- Changes the scale of a sprite_
affine_ mat_ ptr when the action is updated a given number of times. - class btn::sprite_affine_mat_horizontal_flip_manager
- Manages if a sprite_
affine_ mat_ ptr is flipped in its horizontal axis or not. - class btn::sprite_affine_mat_horizontal_flip_toggle_action
- Toggles if a sprite_
affine_ mat_ ptr must be flipped in the horizontal axis or not when the action is updated a given number of times. - class btn::sprite_affine_mat_vertical_flip_manager
- Manages if a sprite_
affine_ mat_ ptr is flipped in its vertical axis or not. - class btn::sprite_affine_mat_vertical_flip_toggle_action
- Toggles if a sprite_
affine_ mat_ ptr must be flipped in the vertical axis or not when the action is updated a given number of times. - class btn::sprite_affine_mat_attributes
- Contains the attributes which define a sprite affine transformation matrix (created with sprite_
affine_ mat_ ptr static constructors). - class btn::sprite_affine_mat_attributes_hblank_effect_ptr
- std::shared_ptr like smart pointer that retains shared ownership of a H-Blank effect which changes the attributes of a sprite_
affine_ mat_ ptr in each screen horizontal line. -
template<>struct btn::hash<sprite_affine_mat_attributes_hblank_effect_ptr>
- Hash support for sprite_
affine_ mat_ attributes_ hblank_ effect_ ptr. - class btn::sprite_affine_mat_pa_register_hblank_effect_ptr
- std::shared_ptr like smart pointer that retains shared ownership of a H-Blank effect which changes the attributes or the values to commit to the first GBA register of a sprite_
affine_ mat_ ptr in each screen horizontal line. - class btn::sprite_affine_mat_pb_register_hblank_effect_ptr
- std::shared_ptr like smart pointer that retains shared ownership of a H-Blank effect which changes the attributes or the values to commit to the second GBA register of a sprite_
affine_ mat_ ptr in each screen horizontal line. - class btn::sprite_affine_mat_pc_register_hblank_effect_ptr
- std::shared_ptr like smart pointer that retains shared ownership of a H-Blank effect which changes the attributes or the values to commit to the third GBA register of a sprite_
affine_ mat_ ptr in each screen horizontal line. - class btn::sprite_affine_mat_pd_register_hblank_effect_ptr
- std::shared_ptr like smart pointer that retains shared ownership of a H-Blank effect which changes the attributes or the values to commit to the fourth GBA register of a sprite_
affine_ mat_ ptr in each screen horizontal line. - class btn::sprite_affine_mat_ptr
- std::shared_ptr like smart pointer that retains shared ownership of a sprite affine transformation matrix.
-
template<>struct btn::hash<sprite_affine_mat_ptr>
- Hash support for sprite_
affine_ mat_ ptr. - class btn::sprite_affine_second_attributes
- Manages the attributes to commit to the second GBA register of an affine sprite (with an attached sprite_
affine_ mat_ ptr). - class btn::sprite_affine_second_attributes_hblank_effect_ptr
- std::shared_ptr like smart pointer that retains shared ownership of a H-Blank effect which changes the attributes to commit to the second GBA register of an affine sprite (with an attached sprite_
affine_ mat_ ptr) in each screen horizontal line. -
template<int MaxSize>class btn::sprite_animate_action
- Changes the tile set of a sprite_
ptr when the action is updated a given number of times. -
template<int MaxSize>class btn::sprite_cached_animate_action
- Changes the tile set of a sprite_
ptr when the action is updated a given number of times. - class btn::sprite_builder
- Creates sprite_
ptr objects with custom attributes. - class btn::sprite_first_attributes
- Manages the attributes to commit to the first GBA register of a sprite.
- class btn::sprite_first_attributes_hblank_effect_ptr
- std::shared_ptr like smart pointer that retains shared ownership of a H-Blank effect which changes the attributes to commit to the first GBA register of a sprite in each screen horizontal line.
- class btn::sprite_font
- Contains the required information to generate text sprites.
- class btn::sprite_item
- Contains the required information to generate sprites.
- class btn::sprite_palette_inverted_manager
- Manages if the colors of a sprite_
palette_ ptr must be inverted or not. - class btn::sprite_palette_inverted_toggle_action
- Toggles if the colors of a sprite_
palette_ ptr must be inverted or not when the action is updated a given number of times. - class btn::sprite_palette_grayscale_manager
- Manages the intensity of the grayscale effect applied to a sprite_
palette_ ptr. - class btn::sprite_palette_grayscale_to_action
- Modifies the intensity of the grayscale effect applied to a sprite_
palette_ ptr until it has a given state. - class btn::sprite_palette_grayscale_loop_action
- Modifies the intensity of the grayscale effect applied to a sprite_
palette_ ptr from a minimum to a maximum. When the intensity is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_palette_grayscale_toggle_action
- Changes the intensity of the grayscale effect applied to a sprite_
palette_ ptr when the action is updated a given number of times. - class btn::sprite_palette_fade_manager
- Manages the intensity of the fade effect applied to a sprite_
palette_ ptr. - class btn::sprite_palette_fade_to_action
- Modifies the intensity of the fade effect applied to a sprite_
palette_ ptr until it has a given state. - class btn::sprite_palette_fade_loop_action
- Modifies the intensity of the fade effect applied to a sprite_
palette_ ptr from a minimum to a maximum. When the intensity is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_palette_fade_toggle_action
- Changes the intensity of the fade effect applied to a sprite_
palette_ ptr when the action is updated a given number of times. - class btn::sprite_palette_rotate_manager
- Manages the number of colors to rotate to the right in a sprite_
palette_ ptr. - class btn::sprite_palette_rotate_by_action
- Modifies the number of colors to rotate to the right in a sprite_
palette_ ptr by delta_count when the action is updated a given number of times. When the property is over the given maximum, it goes back to the given minimum and vice versa. - class btn::sprite_palette_rotate_to_action
- Modifies the number of colors to rotate to the right in a sprite_
palette_ ptr until it has a given state. - class btn::sprite_palette_rotate_loop_action
- Modifies the number of colors to rotate to the right in a sprite_
palette_ ptr from a minimum to a maximum. When the number of colors to rotate to the right is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_palette_rotate_toggle_action
- Changes the number of colors to rotate to the right in a sprite_
palette_ ptr when the action is updated a given number of times. - class btn::sprite_palette_color_hblank_effect_ptr
- std::shared_ptr like smart pointer that retains shared ownership of a H-Blank effect which changes the color of a sprite color palette in each screen horizontal line.
- class btn::sprite_palette_item
- Contains the required information to generate sprite color palettes.
- class btn::sprite_palette_ptr
- std::shared_ptr like smart pointer that retains shared ownership of a sprite color palette.
-
template<>struct btn::hash<sprite_palette_ptr>
- Hash support for sprite_
palette_ ptr. - class btn::sprite_palettes_brightness_manager
- Manages the brightness of all sprite color palettes.
- class btn::sprite_palettes_brightness_to_action
- Modifies the brightness of all sprite color palettes until it has a given state.
- class btn::sprite_palettes_brightness_loop_action
- Modifies the brightness of all sprite color palettes from a minimum to a maximum. When the brightness is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::sprite_palettes_brightness_toggle_action
- Changes the brightness of all sprite color palettes when the action is updated a given number of times.
- class btn::sprite_palettes_contrast_manager
- Manages the contrast of all sprite color palettes.
- class btn::sprite_palettes_contrast_to_action
- Modifies the contrast of all sprite color palettes until it has a given state.
- class btn::sprite_palettes_contrast_loop_action
- Modifies the contrast of all sprite color palettes from a minimum to a maximum. When the contrast is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::sprite_palettes_contrast_toggle_action
- Changes the contrast of all sprite color palettes when the action is updated a given number of times.
- class btn::sprite_palettes_intensity_manager
- Manages the intensity of all sprite color palettes.
- class btn::sprite_palettes_intensity_to_action
- Modifies the intensity of all sprite color palettes until it has a given state.
- class btn::sprite_palettes_intensity_loop_action
- Modifies the intensity of all sprite color palettes from a minimum to a maximum. When the intensity is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::sprite_palettes_intensity_toggle_action
- Changes the intensity of all sprite color palettes when the action is updated a given number of times.
- class btn::sprite_palettes_inverted_manager
- Manages if the colors of all sprite color palettes must be inverted or not.
- class btn::sprite_palettes_inverted_toggle_action
- Toggles if the colors of all sprite color palettes must be inverted or not when the action is updated a given number of times.
- class btn::sprite_palettes_grayscale_manager
- Manages the intensity of the grayscale effect applied to all sprite color palettes.
- class btn::sprite_palettes_grayscale_to_action
- Modifies the intensity of the grayscale effect applied to all sprite color palettes until it has a given state.
- class btn::sprite_palettes_grayscale_loop_action
- Modifies the intensity of the grayscale effect applied to all sprite color palettes from a minimum to a maximum. When the intensity is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::sprite_palettes_grayscale_toggle_action
- Changes the intensity of the grayscale effect applied to all sprite color palettes when the action is updated a given number of times.
- class btn::sprite_palettes_fade_manager
- Manages the intensity of the fade effect applied to all sprite color palettes.
- class btn::sprite_palettes_fade_to_action
- Modifies the intensity of the fade effect applied to all sprite color palettes until it has a given state.
- class btn::sprite_palettes_fade_loop_action
- Modifies the intensity of the fade effect applied to all sprite color palettes from a minimum to a maximum. When the intensity is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::sprite_palettes_fade_toggle_action
- Changes the intensity of the fade effect applied to all sprite color palettes when the action is updated a given number of times.
- class btn::sprite_position_hblank_effect_ptr
- std::shared_ptr like smart pointer that retains shared ownership of a H-Blank effect which changes the position of a sprite in each screen horizontal line.
- class btn::sprite_ptr
- std::shared_ptr like smart pointer that retains shared ownership of a sprite.
-
template<>struct btn::hash<sprite_ptr>
- Hash support for sprite_
ptr. - class btn::sprite_regular_second_attributes
- Manages the attributes to commit to the second GBA register of a regular sprite (without an attached sprite_
affine_ mat_ ptr). - class btn::sprite_regular_second_attributes_hblank_effect_ptr
- std::shared_ptr like smart pointer that retains shared ownership of a H-Blank effect which changes the attributes to commit to the second GBA register of a regular sprite (without an attached sprite_
affine_ mat_ ptr) in each screen horizontal line. - class btn::sprite_shape_size
- Calculates sprite dimensions from its shape and size.
- class btn::sprite_text_generator
- Generates sprites containing text from a given sprite_
font. - class btn::sprite_third_attributes
- Manages the attributes to commit to the third GBA register of a sprite.
- class btn::sprite_third_attributes_hblank_effect_ptr
- std::shared_ptr like smart pointer that retains shared ownership of a H-Blank effect which changes the attributes to commit to the third GBA register of a sprite in each screen horizontal line.
- class btn::sprite_tiles_item
- Contains the required information to generate sprite tiles.
- class btn::sprite_tiles_ptr
- std::shared_ptr like smart pointer that retains shared ownership of the tiles of a sprite.
-
template<>struct btn::hash<sprite_tiles_ptr>
- Hash support for sprite_
tiles_ ptr. - class btn::sprites_mosaic_horizontal_stretch_manager
- Manages the horizontal stretch of the mosaic applied to the sprites.
- class btn::sprites_mosaic_horizontal_stretch_to_action
- Modifies the horizontal stretch of the mosaic applied to the sprites until it has a given state.
- class btn::sprites_mosaic_horizontal_stretch_loop_action
- Modifies the horizontal stretch of the mosaic applied to the sprites from a minimum to a maximum. When the horizontal stretch is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::sprites_mosaic_horizontal_stretch_toggle_action
- Changes the horizontal stretch of the mosaic applied to the sprites when the action is updated a given number of times.
- class btn::sprites_mosaic_vertical_stretch_manager
- Manages the vertical stretch of the mosaic applied to the sprites.
- class btn::sprites_mosaic_vertical_stretch_to_action
- Modifies the vertical stretch of the mosaic applied to the sprites until it has a given state.
- class btn::sprites_mosaic_vertical_stretch_loop_action
- Modifies the vertical stretch of the mosaic applied to the sprites from a minimum to a maximum. When the vertical stretch is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::sprites_mosaic_vertical_stretch_toggle_action
- Changes the vertical stretch of the mosaic applied to the sprites when the action is updated a given number of times.
- class btn::sprites_mosaic_stretch_manager
- Manages the stretch of the mosaic applied to the sprites.
- class btn::sprites_mosaic_stretch_to_action
- Modifies the stretch of the mosaic applied to the sprites until it has a given state.
- class btn::sprites_mosaic_stretch_loop_action
- Modifies the stretch of the mosaic applied to the sprites from a minimum to a maximum. When the stretch is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::sprites_mosaic_stretch_toggle_action
- Changes the stretch of the mosaic applied to the sprites when the action is updated a given number of times.
Enums
- enum class sprite_double_size_mode { AUTO, ENABLED, DISABLED }
- Specifies the area a sprite uses to be drawn when it has an attached sprite_
affine_ mat_ ptr. - enum class sprite_shape { SQUARE, WIDE, TALL }
- Valid sprite shapes enum.
- enum class sprite_size { SMALL, NORMAL, BIG, HUGE }
- Valid sprite sizes enum.
Functions
-
template<typename ... Args>auto create_sprite_animate_action_once(const sprite_ptr& sprite, int wait_updates, const sprite_tiles_item& tiles_item, Args ... graphics_indexes) -> auto
- Generates a sprite_
animate_ action which loops over the given sprite tile sets only once. -
template<typename ... Args>auto create_sprite_animate_action_once(sprite_ptr&& sprite, int wait_updates, const sprite_tiles_item& tiles_item, Args ... graphics_indexes) -> auto
- Generates a sprite_
animate_ action which loops over the given sprite tile sets only once. -
template<typename ... Args>auto create_sprite_animate_action_forever(const sprite_ptr& sprite, int wait_updates, const sprite_tiles_item& tiles_item, Args ... graphics_indexes) -> auto
- Generates a sprite_
animate_ action which loops over the given sprite tile sets forever. -
template<typename ... Args>auto create_sprite_animate_action_forever(sprite_ptr&& sprite, int wait_updates, const sprite_tiles_item& tiles_item, Args ... graphics_indexes) -> auto
- Generates a sprite_
animate_ action which loops over the given sprite tile sets forever. -
template<typename ... Args>auto create_sprite_cached_animate_action_once(const sprite_ptr& sprite, int wait_updates, const sprite_tiles_item& tiles_item, Args ... graphics_indexes) -> auto
- Generates a sprite_
cached_ animate_ action which loops over the given sprite tile sets only once. -
template<typename ... Args>auto create_sprite_cached_animate_action_once(sprite_ptr&& sprite, int wait_updates, const sprite_tiles_item& tiles_item, Args ... graphics_indexes) -> auto
- Generates a sprite_
cached_ animate_ action which loops over the given sprite tile sets only once. -
template<typename ... Args>auto create_sprite_cached_animate_action_forever(const sprite_ptr& sprite, int wait_updates, const sprite_tiles_item& tiles_item, Args ... graphics_indexes) -> auto
- Generates a sprite_
cached_ animate_ action which loops over the given sprite tile sets forever. -
template<typename ... Args>auto create_sprite_cached_animate_action_forever(sprite_ptr&& sprite, int wait_updates, const sprite_tiles_item& tiles_item, Args ... graphics_indexes) -> auto
- Generates a sprite_
cached_ animate_ action which loops over the given sprite tile sets forever.
Defines
- #define BTN_CFG_SPRITE_TILES_MAX_ITEMS
- #define BTN_CFG_SPRITE_TILES_LOG_ENABLED
- #define BTN_CFG_SPRITES_MAX_ITEMS
- #define BTN_CFG_SPRITES_MAX_SORT_LAYERS
Enum documentation
enum class sprite_double_size_mode
#include <btn_sprite_double_size_mode.h>
Specifies the area a sprite uses to be drawn when it has an attached sprite_
| Enumerators | |
|---|---|
| AUTO |
The sprite uses 2x the area specified by its shape and size only when its sprite_ |
| ENABLED |
The sprite always uses 2x the area specified by its shape and size. |
| DISABLED |
The sprite never uses more pixels than the area specified by its shape and size. |
enum class sprite_shape
#include <btn_sprite_shape_size.h>
Valid sprite shapes enum.
enum class sprite_size
#include <btn_sprite_shape_size.h>
Valid sprite sizes enum.
Function documentation
#include <btn_sprite_animate_actions.h>
template<typename ... Args>
auto create_sprite_animate_action_once(const sprite_ptr& sprite,
int wait_updates,
const sprite_tiles_item& tiles_item,
Args ... graphics_indexes)
Generates a sprite_
| Parameters | |
|---|---|
| sprite | sprite_ |
| wait_updates | Number of times the action must be updated before changing the tiles of the given sprite_ |
| tiles_item | It creates the new sprite tiles to use by the given sprite_ |
| graphics_indexes | Indexes of the tile sets to reference in tiles_item. |
| Returns | The requested sprite_ |
#include <btn_sprite_animate_actions.h>
template<typename ... Args>
auto create_sprite_animate_action_once(sprite_ptr&& sprite,
int wait_updates,
const sprite_tiles_item& tiles_item,
Args ... graphics_indexes)
Generates a sprite_
| Parameters | |
|---|---|
| sprite | sprite_ |
| wait_updates | Number of times the action must be updated before changing the tiles of the given sprite_ |
| tiles_item | It creates the new sprite tiles to use by the given sprite_ |
| graphics_indexes | Indexes of the tile sets to reference in tiles_item. |
| Returns | The requested sprite_ |
#include <btn_sprite_animate_actions.h>
template<typename ... Args>
auto create_sprite_animate_action_forever(const sprite_ptr& sprite,
int wait_updates,
const sprite_tiles_item& tiles_item,
Args ... graphics_indexes)
Generates a sprite_
| Parameters | |
|---|---|
| sprite | sprite_ |
| wait_updates | Number of times the action must be updated before changing the tiles of the given sprite_ |
| tiles_item | It creates the new sprite tiles to use by the given sprite_ |
| graphics_indexes | Indexes of the tile sets to reference in tiles_item. |
| Returns | The requested sprite_ |
#include <btn_sprite_animate_actions.h>
template<typename ... Args>
auto create_sprite_animate_action_forever(sprite_ptr&& sprite,
int wait_updates,
const sprite_tiles_item& tiles_item,
Args ... graphics_indexes)
Generates a sprite_
| Parameters | |
|---|---|
| sprite | sprite_ |
| wait_updates | Number of times the action must be updated before changing the tiles of the given sprite_ |
| tiles_item | It creates the new sprite tiles to use by the given sprite_ |
| graphics_indexes | Indexes of the tile sets to reference in tiles_item. |
| Returns | The requested sprite_ |
#include <btn_sprite_animate_actions.h>
template<typename ... Args>
auto create_sprite_cached_animate_action_once(const sprite_ptr& sprite,
int wait_updates,
const sprite_tiles_item& tiles_item,
Args ... graphics_indexes)
Generates a sprite_
| Parameters | |
|---|---|
| sprite | sprite_ |
| wait_updates | Number of times the action must be updated before changing the tiles of the given sprite_ |
| tiles_item | It creates the new sprite tiles to use by the given sprite_ |
| graphics_indexes | Indexes of the tile sets to reference in tiles_item. |
| Returns | The requested sprite_ |
#include <btn_sprite_animate_actions.h>
template<typename ... Args>
auto create_sprite_cached_animate_action_once(sprite_ptr&& sprite,
int wait_updates,
const sprite_tiles_item& tiles_item,
Args ... graphics_indexes)
Generates a sprite_
| Parameters | |
|---|---|
| sprite | sprite_ |
| wait_updates | Number of times the action must be updated before changing the tiles of the given sprite_ |
| tiles_item | It creates the new sprite tiles to use by the given sprite_ |
| graphics_indexes | Indexes of the tile sets to reference in tiles_item. |
| Returns | The requested sprite_ |
#include <btn_sprite_animate_actions.h>
template<typename ... Args>
auto create_sprite_cached_animate_action_forever(const sprite_ptr& sprite,
int wait_updates,
const sprite_tiles_item& tiles_item,
Args ... graphics_indexes)
Generates a sprite_
| Parameters | |
|---|---|
| sprite | sprite_ |
| wait_updates | Number of times the action must be updated before changing the tiles of the given sprite_ |
| tiles_item | It creates the new sprite tiles to use by the given sprite_ |
| graphics_indexes | Indexes of the tile sets to reference in tiles_item. |
| Returns | The requested sprite_ |
#include <btn_sprite_animate_actions.h>
template<typename ... Args>
auto create_sprite_cached_animate_action_forever(sprite_ptr&& sprite,
int wait_updates,
const sprite_tiles_item& tiles_item,
Args ... graphics_indexes)
Generates a sprite_
| Parameters | |
|---|---|
| sprite | sprite_ |
| wait_updates | Number of times the action must be updated before changing the tiles of the given sprite_ |
| tiles_item | It creates the new sprite tiles to use by the given sprite_ |
| graphics_indexes | Indexes of the tile sets to reference in tiles_item. |
| Returns | The requested sprite_ |
Define documentation
#define BTN_CFG_SPRITE_TILES_MAX_ITEMS
#include <btn_config_sprite_tiles.h>
Specifies the maximum number of sprite tile sets that can be created with btn::
#define BTN_CFG_SPRITE_TILES_LOG_ENABLED
#include <btn_config_sprite_tiles.h>
Specifies if the sprite tiles manager must be logged in detail or not.
Keep in mind that it is very slow, it is useful only for debugging.
#define BTN_CFG_SPRITES_MAX_ITEMS
#include <btn_config_sprites.h>
Specifies the maximum number of sprite items that can be created with btn::
A sprite item which is outside of the screen or hidden is not committed to the GBA, so there can be more than 128 sprite items.
#define BTN_CFG_SPRITES_MAX_SORT_LAYERS
#include <btn_config_sprites.h>
Specifies the maximum number of used sprite sort layers.
Sprites are grouped in layers depending of their background priority and z order, so to reduce memory usage and improve performance, please use as less unique z orders as possible.


module BatIMap:{
..}
type t 'a
type key=
int
let empty : eq::('a => 'a => bool) => t 'a
let singleton : eq::('a => 'a => bool) => int => 'a => t 'a
let is_empty : t 'a => bool
let add : int => 'a => t 'a => t 'a
add x y t
adds a binding from x
to y
in t
, returning a new map.let add_range : int => int => 'a => t 'a => t 'a
add lo hi y t
adds bindings to y
for all values in the range
lo,hi
, returning a new maplet find : int => t 'a => 'a
find x t
returns the y
that is bound to x
in t
.Not_found
if x
is unboundlet modify : int => ('a => 'a) => t 'a => t 'a
modify x f t
replaces the y
that is bound to x
in t
by f y
.Not_found
if x
is unboundlet modify_def : 'a => int => ('a => 'a) => t 'a => t 'a
modify_def dft x f t
does the same as modify x f t
but binds
x
to f dft
if x
was not bound.let modify_opt : int => (option 'a => option 'a) => t 'a => t 'a
modify_opt x f t
allows to modify the binding for x
in t
or absence thereof.let remove : int => t 'a => t 'a
let remove_range : int => int => t 'a => t 'a
let from : int => t 'a => t 'a
x,max_int
let after : int => t 'a => t 'a
x+1,max_int
let until : int => t 'a => t 'a
min_int, x
let before : int => t 'a => t 'a
min_int, x-1
let mem : int => t 'a => bool
let iter : (int => 'a => unit) => t 'a => unit
iter f t
calls f
on every bindinglet iter_range : (int => int => 'a => unit) => t 'a => unit
iter_range f t
calls f
on every contiguous range. For maps, contiguous ranges must map to the same y
let map : eq::('b => 'b => bool)? => ('a => 'b) => t 'a => t 'b
y
by the given function.
This will not create new ranges; the mapping function is only
applied to each contiguous range once. It is not applied to the
ranges in order. ~eq
defaults to (=).let mapi : eq::('b => 'b => bool)? => (int => 'a => 'b) => t 'a => t 'b
~eq
defaults to (=).let map_range : eq::('b => 'b => bool)? =>
(int => int => 'a => 'b) => t 'a => t 'b
y
using the given function.
This will not create new ranges, but will have access to the
lo,hi
of the current range. ~eq
defaults to (=).let fold : (int => 'b => 'a => 'a) => t 'b => 'a => 'a
fold f t x0
folds all the bindings of t
into x0
using f
to
merge.let fold_range : (int => int => 'b => 'a => 'a) => t 'b => 'a => 'a
fold_range f t x0
folds all the contiguous ranges of t
into
x0
using f
to merge. The order of foldings is unspecified.let set_to_map : eq::('a => 'a => bool)? => BatISet.t => 'a => t 'a
set_to_map s x
returns a map where every element of s
is bound
to x
.let domain : t 'a => BatISet.t
domain t
returns the set of ints that are bound in t
let map_to_set : ('a => bool) => t 'a => BatISet.t
map_to_set p t
returns the set of keys of t
where p
evaluates as truelet enum : t 'a => BatEnum.t (int, int, 'a)
enum t
returns an enumeration of the bindings in t
let of_enum : eq::('a => 'a => bool) => BatEnum.t (int, int, 'a) => t 'a
of_enum e
returns the set of given rangeslet fold2_range : (int => int => option 'a => option 'b => 'c => 'c) =>
t 'a => t 'b => 'c => 'c
fold2_range f t u x0
folds across each range that's defined in
either t
or u
or both, giving that range and the possible values
to f
to merge with x0
.
Example: let union_first = fold2_range (fun _lo _hi a b = match a,b with Some x,_ -> x | _,Some y -> y)
let union : ('a => 'a => 'a) => t 'a => t 'a => t 'a
let merge : eq::('c => 'c => bool)? =>
(int => int => option 'a => option 'b => option 'c) =>
t 'a => t 'b => t 'c
let forall2_range : (int => int => option 'a => option 'b => bool) =>
t 'a => t 'b => bool
let get_dec_eq : t 'a => 'a => 'a => bool
module Infix:{
..}
BatIMap


Infodemic Warriors
Dashboard
Analysis
Semantic search
Our Team
The team behind the project: Infodemic-Warriors
Our team is a perfect combination from different part of the world
Supriya Medapati
Organizer & Team manager
Naga Pakalapati
Data Scientist
Ripon Kumar Saha
Deep Learning Researcher
Jesus Rodriguez
Application Developer
Sarika Kondra
Data Scientist
NLP Design & Development
Aayush Patni
Software Engineer Intern
-
Bruce Hoffman
Director Product Manager
-
Karthik
Data Science Manager
-
Ready to Leave?
×
Select "Logout" below if you are ready to end your current session.


MEDERMA PM- dimethicone cream
Merz Pharmaceuticals, LLC
Disclaimer: Most OTC drugs are not reviewed and approved by FDA, however they may be marketed if they comply with applicable regulations and policies. FDA has not evaluated whether this product complies.
Active Ingredients
Dimethicone 2%
Use
- Temporarily protects and helps relieve chapped or cracked skin
Warnings
Stop use and ask a doctor if
- condition worsens
- symptoms last more than 7 days or clear up and occur again within a few days
Do not use on
- deep or puncture wounds
- animal bites
- serious burns
Keep out of reach of children. If swallowed, get medical help or contact a Poison Control Center right away.
Other Information
Store at room temperature.
Inactive Ingredients
Water, Cetearyl Alcohol, Glycerin, C12-15 Alkyl Benzoate, Dicaprylyl Carbonate, Pentylene Glycol, Cyclomethicone, Arachidyl Alcohol, Alcohol, Behenyl Alcohol, Arachidyl Glucoside, Allium Cepae (Onion) Bulb Extract, Copper Tripeptide-1, Aloe Barbadensis Leaf, Cetearyl Glucoside, Tocopherol Acetate, Hydroxyethyl Acrylate/Sodium Acryloyldimethyl Taurate Copolymer, Hydroxyethylcellulose, Hydrolyzed Soy Protein, Glycine, Panthenol, Hydrolyzed Collagen, PEG-400, Arginine HCL, Leucine, Lysine Hydrochloride, Alanine, Sodium Lactate, Aspartic Acid, Glucose, Glutamic Acid, Isopropyl Alcohol, Mannitol, Sorbitol, Tromethamine, Valine, Histidine Hydrochloride, Isoleucine, Phenylalanine, Tyrosine, Potassium Sorbate, Sodium Benzoate, Citric Acid, Sodium Hydroxide, Fragrance.
Questions or Comments?
For more information call 1-888-925-8989 or visit www.mederma.com
PRINCIPAL DISPLAY PANEL - 28g Tube Box
SKIN CARE FOR SCARS™
MEDERMA® PM
INTENSIVE OVERNIGHT SCAR CREAM
Formulated to work with
your skin's nighttime
regenerative activity
NEW
Net Wt. 1.0 oz. (28g)


Aggregated Order Book
Symbol:{{order_book.symbol}}
Buy
Sell
{{ qty | number : 0}}
{{ price }}
{{ price }}
{{ qty | number : 0}}
Symbol:{{order_book.symbol}}
Buy
Sell
{{ qty | number : 0}}
{{ price }}
{{ price }}
{{ qty | number : 0}}
Detail Order Book
Symbol:{{detail_order_book.symbol}}
Buy
Sell
{{ ord._clientName }}
{{ ord._leavesQty }}
{{ price }}
{{ price }}
{{ ord._clientName }}
{{ ord._leavesQty }}
Symbol:{{detail_order_book.symbol}}
Buy
Sell
{{ ord._clientName }}
{{ ord._leavesQty }}
{{ price }}
{{ price }}
{{ ord._clientName }}
{{ ord._leavesQty }}
Act as
ccy pair
price
qty
side
side
Submit!
TODO : support to input the order by clicking related orderbook
The order book is: {{order_book}}


Colorful Cupcakes
Keep Calm and Eat Cupcakes
Events
Let us help make your special event even more magical with our unique cupcakes,customizable to match your colors and event theme.
Order
Baby Showers, corporate events, weddings, birthday parties and more. Our cupcakes are perfect for any event or just because
About
Nullam tempus egestas efficitur. Sed quam dolor, vulputate sed mattis et, sodales quis orci. Ut arcu arcu, faucibus eu risus blandit.


Post-parsing
Adapter.php
CacheFile.php
Element.php
Form.php
FormBuilder.php
Input.php
InputCheckbox.php
InputChecked.php
InputFile.php
InputHidden.php
InputImage.php
InputPassword.php
InputRadio.php
InputReset.php
InputSubmit.php
InputText.php
IntegerRule.php
Label.php
Li.php
Link.php
LinkCss.php
LockedRule.php
MessageForRuleException.php
Model.php
Mysql.php
NoActionException.php
NoColumnInTableException.php
NoControllerException.php
NoRouteException.php
NoSchemaRelationshipDefinedException.php
NoSchemaRelationshipException.php
NoViewTypeException.php
OptionsParser.php
paths.php
RecordInvalidException.php
RecordNotFoundException.php
ResultFactory.php
ResultRow.php
ResultSet.php
Rule.php
run.php
Schema.php
SqlBuilder.php
Tag.php
Template.php
Textarea.php
A.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "A", use another DocBlock to document the file
Adapter.php
Warnings:
Warning on line 11 - DocBlock would be page-level, but precedes class "Adapter", use another DocBlock to document the file
CacheFile.php
Warnings:
Warning on line 10 - Unknown tag "@credit" used
Element.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "Element", use another DocBlock to document the file
Form.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "Form", use another DocBlock to document the file
FormBuilder.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "FormBuilder", use another DocBlock to document the file
Input.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "Input", use another DocBlock to document the file
InputCheckbox.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "InputCheckbox", use another DocBlock to document the file
InputChecked.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "InputChecked", use another DocBlock to document the file
InputFile.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "InputFile", use another DocBlock to document the file
InputHidden.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "InputHidden", use another DocBlock to document the file
InputImage.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "InputImage", use another DocBlock to document the file
InputPassword.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "InputPassword", use another DocBlock to document the file
InputRadio.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "InputRadio", use another DocBlock to document the file
InputReset.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "InputReset", use another DocBlock to document the file
InputSubmit.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "InputSubmit", use another DocBlock to document the file
InputText.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "InputText", use another DocBlock to document the file
IntegerRule.php
Warnings:
Warning on line 9 - DocBlock would be page-level, but precedes class "IntegerRule", use another DocBlock to document the file
Label.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "Label", use another DocBlock to document the file
Li.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "Li", use another DocBlock to document the file
Link.php
Warnings:
Warning on line 9 - DocBlock would be page-level, but precedes class "Link", use another DocBlock to document the file
LinkCss.php
Warnings:
Warning on line 6 - DocBlock would be page-level, but precedes class "LinkCss", use another DocBlock to document the file
LockedRule.php
Warnings:
Warning on line 9 - DocBlock would be page-level, but precedes class "LockedRule", use another DocBlock to document the file
MessageForRuleException.php
Warnings:
Warning on line 6 - DocBlock would be page-level, but precedes class "MessageForRuleException", use another DocBlock to document the file
Model.php
Warnings:
Warning on line 9 - DocBlock would be page-level, but precedes class "Model", use another DocBlock to document the file
Mysql.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "Mysql", use another DocBlock to document the file
NoActionException.php
Warnings:
Warning on line 6 - DocBlock would be page-level, but precedes class "NoActionException", use another DocBlock to document the file
NoColumnInTableException.php
Warnings:
Warning on line 6 - DocBlock would be page-level, but precedes class "NoColumnInTableException", use another DocBlock to document the file
NoControllerException.php
Warnings:
Warning on line 6 - DocBlock would be page-level, but precedes class "NoControllerException", use another DocBlock to document the file
NoRouteException.php
Warnings:
Warning on line 6 - DocBlock would be page-level, but precedes class "NoRouteException", use another DocBlock to document the file
NoSchemaRelationshipDefinedException.php
Warnings:
Warning on line 6 - DocBlock would be page-level, but precedes class "NoSchemaRelationshipDefinedException", use another DocBlock to document the file
NoSchemaRelationshipException.php
Warnings:
Warning on line 6 - DocBlock would be page-level, but precedes class "NoSchemaRelationshipException", use another DocBlock to document the file
NoViewTypeException.php
Warnings:
Warning on line 6 - DocBlock would be page-level, but precedes class "NoViewTypeException", use another DocBlock to document the file
OptionsParser.php
Warnings:
Warning on line 34 - Unknown tag "@nodoc" used
paths.php
Warnings:
Warning on line 17 - no @package tag was used in a DocBlock for file /mnt/hgfs/Projects/php/phrails/framework/paths.php
Errors:
Error on line 40 - autoload function's DocBlock has @package tag, illegal. ignoring tag "@package framework"
Error on line 55 - include_all_in_folder function's DocBlock has @package tag, illegal. ignoring tag "@package framework"
RecordInvalidException.php
Warnings:
Warning on line 6 - DocBlock would be page-level, but precedes class "RecordInvalidException", use another DocBlock to document the file
RecordNotFoundException.php
Warnings:
Warning on line 6 - DocBlock would be page-level, but precedes class "RecordNotFoundException", use another DocBlock to document the file
ResultFactory.php
Warnings:
Warning on line 10 - DocBlock would be page-level, but precedes class "ResultFactory", use another DocBlock to document the file
ResultRow.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "ResultRow", use another DocBlock to document the file
ResultSet.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "ResultSet", use another DocBlock to document the file
Rule.php
Warnings:
Warning on line 9 - DocBlock would be page-level, but precedes class "Rule", use another DocBlock to document the file
run.php
Warnings:
Warning on line 42 - File "/mnt/hgfs/Projects/php/phrails/framework/run.php" has no page-level DocBlock, use @package in the first DocBlock to create one
Schema.php
Warnings:
Warning on line 11 - DocBlock would be page-level, but precedes class "Schema", use another DocBlock to document the file
SqlBuilder.php
Warnings:
Warning on line 10 - DocBlock would be page-level, but precedes class "SqlBuilder", use another DocBlock to document the file
Tag.php
Warnings:
Warning on line 7 - DocBlock would be page-level, but precedes class "Tag", use another DocBlock to document the file
Errors:
Error on line 75 - DocBlock has multiple @return tags, illegal. ignoring additional tag "@return string "
Template.php
Warnings:
Warning on line 61 - Unknown tag "@refactor" used
Warning on line 154 - Unknown tag "@nodoc" used
Warning on line 169 - Unknown tag "@nodoc" used
Textarea.php
Warnings:
Warning on line 8 - DocBlock would be page-level, but precedes class "Textarea", use another DocBlock to document the file
Documentation generated on Wed, 10 Mar 2010 08:31:27 -0800 by phpDocumentor 1.4.3


Loads #
Load elements must have a id
property of type string.
Currently supported are load elements of type
of ['force', 'spring']
.
Force #
Forces are acting on nodes exclusively. The p
property references a node
by its id
.
The force value value
must be a positive number greater than zero interpreted as [N
]. Default is 1.
Initial force orientation can be set by w0
in [rad].
Force orientation can be static or dynamic. In the dynamic case the orientation is referred to the orientation of a constraint specified by wref
as a valid reference. w0
is interpreted as an offset to the referenced constraint then.
A drawing mode mode
as one of ['push', 'pull']
specifies, how the force arrow is rendered. Default is pull
.
Example : #
{
"gravity": true,
"nodes": [
{ "id": "A0", "x": 100, "y": 120, "base": true},
{ "id": "A", "x": 200, "y": 120 }
],
"constraints": [
{ "id": "a", "p1": "A0", "p2": "A", "len": {"type": "const"}}
] ,
"loads":[{
"id":"F1","type":"force","p":"A",
"value":30,"w0":1.5708,"mode":"push"
}]
}
Fig 9: Force
<mec-2 width="300" height="300" grid cartesian>
{
"gravity" : true ,
"nodes" : [
{ "id" : "A0" , "x" : 100 , "y" : 120 , "base" : true },
{ "id" : "A" , "x" : 200 , "y" : 120 }
],
"constraints" : [
{ "id" : "a" , "p1" : "A0" , "p2" : "A" , "len" : {"type" : "const" }}
] ,
"loads" :[{
"id" :"F1" ,"type" :"force" ,"p" :"A" ,
"value" :30 ,"w0" :1.5708 ,"mode" :"push"
}]
}
</mec-2 >
Springs #
Springs are acting between to nodes. They are required to have two valid references p1
and p2
, just like constraints.
The spring rate k
must be a positive number greater than zero interpreted as [N/cm
]. Default value is 1
.
Initial spring length of the unloaded spring can be set by len0
. If not specified, the initial distance between p1
and p2
is taken.
Example : #
{
"nodes": [
{ "id": "A0","x":200,"y": 200, "base": true },
{ "id": "B0","x":100,"y": 100, "base": true },
{ "id": "A","x": 200, "y": 100 }
],
"constraints": [
{
"id": "b","p1": "B0","p2": "A",
"len": { "type": "const" }
}
],
"loads": [{
"id": "a", "type" :"spring",
"p1": "A0", "p2": "A", "k": 20
}]
}
Fig 10.a: Springs
<mec-2 width="350" height="300" grid cartesian>
{
"nodes" : [
{ "id" : "A0" ,"x" :200 ,"y" : 200 , "base" : true },
{ "id" : "B0" ,"x" :100 ,"y" : 100 , "base" : true },
{ "id" : "A" ,"x" : 200 , "y" : 100 }
],
"constraints" : [
{
"id" : "b" ,"p1" : "B0" ,"p2" : "A" ,
"len" : { "type" : "const" }
}
],
"loads" : [{
"id" : "a" , "type" :"spring" ,
"p1" : "A0" , "p2" : "A" , "k" : 20
}]
}
</mec-2 >
{
"gravity":true,
"nodes": [
{ "id": "A0", "x": 175, "y": 50,"base": true },
{ "id": "B0", "x": 175, "y": 100,"base": true },
{ "id": "A", "x": 225, "y": 50 },
{ "id": "B", "x": 325, "y": 50 }
],
"constraints": [
{ "id": "a", "p1": "A0", "p2": "A", "len":{"type":"const"}},
{ "id": "b", "p1": "A", "p2": "B", "len": {"type": "const" },
"ori": { "type": "const", "ref": "a" } }
],
"loads": [
{
"id": "s", "type": "spring",
"p1": "B0","p2": "A","k": 78.695, "len0": 0
}
]
}
Fig 10.b: Springs
<mec-2 width="350" height="300" grid cartesian>
{
"gravity" :true ,
"nodes" : [
{ "id" : "A0" , "x" : 175 , "y" : 50 ,"base" : true },
{ "id" : "B0" , "x" : 175 , "y" : 100 ,"base" : true },
{ "id" : "A" , "x" : 225 , "y" : 50 },
{ "id" : "B" , "x" : 325 , "y" : 50 }
],
"constraints" : [
{ "id" : "a" , "p1" : "A0" , "p2" : "A" , "len" :{"type" :"const" }},
{ "id" : "b" , "p1" : "A" , "p2" : "B" , "len" : {"type" : "const" },
"ori" : { "type" : "const" , "ref" : "a" } }
],
"loads" : [
{
"id" : "s" , "type" : "spring" ,
"p1" : "B0" ,"p2" : "A" ,"k" : 78.695 , "len0" : 0
}
]
}
</mec-2 >


Click below to see my Linked In profile and my GitHub Account. Scroll down to see my profile.
After a long and wonderful career in Accounting and Real Estate, I made a decision to branch out and find a career that I can truly be passionate about. After speaking with a graduate from NSS, I found my drive and passion. I was looking for a career that would not only challenge me, but also be able to impact people in their every day lives. I CAN do something more.
After six long and hard working months, I will be graduating the end of March from Nashville Software School. With my new developed skills I hope to bring a positive vibe to my new work place and learn as much as I can on a day to day basis. I find the tech community in Nashville to be very nurturing and positive and can not wait to see what the future will hold. I am looking for a collaborative work environment.
Nashville Software School aka NSS is a full time, hands on, intensive training program on software development.
The first 3 months of the course curriculum covered GitHub, HTML, CSS, Javacript, Jquery, Handlebars, Angular, Phaser. The focus of the front end were group projects with a focus of working together to create a web application.
The last three months covered back end development with a focus on Node JS, Express, Ionic, Cordova, Sqlite, web scrapping, MEAN Stack (Mongo, Express, Angular, Node) and test driven development using Mocha and Chai.
My major personal accomplish during this time was being a part of the Global Game Jam. A 48 hour code jam to create a game using Unity. I was fortunate to be a part of an amazing team and had the opportunity to learn and expand my knowledge of gaming and a new platform. I am so proud to have been a part of the team and can't wait to attend next years event.
I have completed a six month boot camp on front end web development with a focus of Nodejs for the back end web development
Prelicensing courses for real estate
This is where I started my focus on accounting.
UD was an opportunity to learn general education courses.
Job Responsibilities included:
IT Administrator which included:
• Handling small virus, adware or computer issues
• Set up of networked equipment
• Maintain contracts
• Help coworkers with using Microsoft Office products which included some training
• Handling upgrades
• Managed subcontractor and employee needs
Managing 30+ companies accounting records which included:
• Maintain company books including G/L, A/P, A/R, bank statements and other reports
• Reconcile and balance accounts
• Record cash receipts
• Issue financial statements as and when required
Accounting for Commercial Property Management
Accounting for Residential Real Estate
Accounting for Commercial Real Estate
Maintaining Investor Database
Human Resources
Managing company cell phones and landlines
Managed printers and equipment
Managed postage machine
Major Accomplishments:
Implemented Accounting Software Program
Implemented Processes and Procedures
I was a licensed real estate agent for 10 years, but also worked full time as an Accountant. As difficult as regulations and negotiations can be through a real estate transaction, I always enjoy watching a buyer that has the look of excitement as we find the “ONE” house they have been looking for or a seller able to move on to the next chapter in their life.
Maintained all Accounts Payable records. Processed all payments for the Mason Location. ISO 9001 Point Person - Recorded all processes and procedures for the accounting department in compliance with ISO 9001 quality management systems.
• Maintain company books including G/L, A/P, A/R, payroll, bank statements and other reports
• Reconcile and balance accounts
• Manage employee payroll services
• Record cash receipts
• Issue financial statements as and when required
• Prepare all tax reports


The Projects page offers you a single Preset bar with default presets and the option of making your own presets to help you view the projects you want. The presets can be customised through the ‘Customise’ dropdown where you can choose to change the following
Project status
Project type (Application/Production)
Project dates (Open date, Queue date, Close date)
Column fields to be displayed in the result table.
The order in which the above fields are to be displayed in the result table.
Click on the Statuses you want to see, enter the relevant dates and project type you want to see from the Filters section. Choose the fields you want to see from the Fields section and rearrange them in the order you want to see them in the table by dragging and dropping them in the Reorder Table Fields section.
The new settings chosen can then be named and saved as a new preset using the ‘Save as Preset’ button whereupon it will appear in the 'User defined Presets' dropdown in the Presets bar. Once a preset is chosen on the Presets bar, clicking the ‘Load Table button will display the results table. If you feel that the preset you just created needs to be customised a bit more, you can overwrite the old settings with the new with the ‘Save as Preset’ button or even delete the preset if you feel it has served its purpose.
If you have already created your custom preset and want it to be just loaded every time you load the page, the ‘Load Table’ option in the ‘Settings’ menu is your answer. Setting this option to ‘On’ will load the result table with the preset chosen in the adjacent ‘Load Preset’ setting. If no preset was chosen, ‘Lab Ongoing’ will be used as the default preset.
By default, the search will only return results from the past two years from current date. If you need to view projects that were handled farther back in time, use the 'Consider all projects from the beginning of time' checkbox under Customise and to further finetune the date ranges between which the project was handled, use the date fields available below the checkbox.