Outside a peaceful town in central Maine, a monster is waiting. Cujo is a two-hundred-pound Saint Bernard, the best friend Brett Camber has ever had. One day Cujo chases a rabbit into a bolt-hole - a cave inhabited by sick bats.
not so long ago, a monster came to the small town of Castle Rock, Maine. He killed a waitress named Alma Frechette in 1970; a woman named Pauline Toothaker and a junior high school student named Cheryl Moody in 1971; a pretty girl named Carol Dunbarger in 1974; a teacher named Etta Ringold in the fall of 1975; finally, a grade-schooler name Mary Kate Hendrasen in the early winter of that same year.


Suppose that you wished to pursue the goal of annotating a set of closely related genomes using KBase tools. Further, suppose that your genomes were from the genus Geobacter, and that your goal involved studying the pan-genome and constructing metabolic models to clarify differences between strains. How might you proceed?


Ingredients
- 1 9-inch deep dish frozen pie crust
- 1 tablespoon butter
- 1/2 cup thinly sliced shallots
- 4 large eggs
- 1-1/4 cups heavy cream
- Pinch ground nutmeg
- 3/4 teaspoon salt
- 1/8 teaspoon cayenne pepper
- 1 cup grated Gruyère
- 1 10-ounce package frozen chopped spinach, defrosted and wrung free of water
Directions
Preheat oven to 400 degrees. Remove pie crust from freezer and thaw until just soft enough to easily prick with a fork, about 10 minutes. Prick bottom and sides all over with a fork. Bake on center rack until fully cooked and lightly golden, between 10-15 minutes depending on the brand. (Keep an eye on it…if it puffs up while cooking, gently prick it with a fork so it will deflate.) Set aside and turn oven down to 325 degrees.
Heat butter in a small sauté pan over medium-low heat. Cook shallots until soft and translucent, about 8 minutes. Do not brown. Set aside to cool.
In a medium bowl, whisk together eggs, heavy cream, nutmeg, salt and cayenne pepper.
Place cooked pie shell on a baking sheet (this makes it easy to move in and out of oven). Spread shallots over bottom of cooked crust, then sprinkle grated Gruyere over top. Scatter spinach evenly over cheese (breaking up clumps as best you can), then pour egg mixture over top. Bake at 325 degrees for 50-55 minutes until custard is set and top is lightly golden. Serve hot or warm.
Notes
I usually defrost the frozen spinach quickly by placing it in a fine mesh strainer and running hot water over it. I then gather the spinach into a ball and squeeze it dry. It takes a few minutes of squeezing and re-squeezing to get all the water out. Be patient…you need the spinach completely dry, otherwise your quiche will be watery.


reddimental
Reddit sentiment analysis
Sentiment
Sentiment vs points
Most positive posts
Most negative posts


The Watering Hole
{{ avatar }}
{{ name }}
Logout
FAQ
About
Message
volume_down
volume_up
Announcement
volume_down
Small group
volume_mute
One-on-one


Development
This document explains you how to get started with developing harbor-sync. It shows you how to install the prerequisites and how to build, test and run the controller.
Get the code
$ git clone https://github.com/moolen/harbor-sync.git ~/dev/harbor-sync
$ cd ~/dev/harbor-sync
Installing the test environment
Prerequisites:
- Vagrant must be installed
- Minikube must be installed
- Kubebuilder must be installed
Use the provided Vagrantfile
to spin up a harbor instance.
$ vagrant up
Right now you need to click your way through harbor to create the projects for testing.
Once the installation is done harbor tells you the ip address for this installation (e.g. http://172.28.128.XXX.xip.io.
).
If it is not yet running ssh into the machine and try to start the containers with docker-compose:
$ vagrant ssh
vagrant@harbor:~$ sudo docker-compose -f harbor/docker-compose.yml up -d
Tell the manager to access this deployment using environment variables:
$ export HARBOR_API_ENDPOINT=http://172.28.128.XXX.xip.io.
$ export HARBOR_USERNAME="admin"
$ export HARBOR_PASSWORD="Harbor12345"
Next, deploy the CRD and run the controller:
$ make generate # gen crds & manifests
$ make install # install crds
$ make run
Developing
Now you’re set to do your changes. Please keep in mind:
if you add a feature, please add documentation about the usage and write tests that cover at least the happy path
run
make e2e
to run e2e tests
Commit Messages
This projects follows the Conventional Commits specification.
Documentation
The documentation is hosted via GitHub pages. They are part of the repository and are located in the docs
folder. If you change the documentation please regenerate the static site using make docs
and include those changes in the PR too. You may find it useful to preview the compiled docs. Run make docs-live
to view them in your browser.
Reconciliation loop
This is pretty straight-forward:
- find harbor projects that match the configured regular expression
- reconcile robot accounts: i.e. (re-)create them if they do not exist, are disabled, expired or we do not manage the token
- find namespaces using a
mapping
config- for each namespace: create a secret with type
dockerconfigjson
with the specified name.
- for each namespace: create a secret with type
The reconciliation loop is triggered from essentially three sources:
* Control Plane: whenever a SyncConfig is created/updated/deleted
* Harbor Polling: whenever the state in harbor changes (project or robota account is created, updated, deleted)
* time-based using the configured force-sync-interval
: forces reconciliation in a fixed interval to cover cases like namespace creation or robot account expiration


LeaRning R in ChemistRy at Reed College
Chester Ismay and Danielle Cass
2017-06-08
Introduction
What is this?
In the HTML version of this book, you can also download the PDF version of the book by clicking on PDF button in the top toolbar of the page. HTML is the preferred format but the PDF format may be preferred for some readers. Links to the different GIFs directly found in the HTML version are provided in the PDF version.
This resource is designed to assist students in CHEM 101/102 in using RStudio and R Markdown to complete their labs. (A more general reference to the specifics of R, RStudio and R Markdown is available in a different free book here (Ismay 2016)). This resource will show you GIFs explaining how to do some common procedures you’ll need to do to complete labs. In addition, it will provide more details about the specifics of the different lab templates available in the chemistr
R package. Each chapter of this book will correspond to each of the different labs.
Lastly, if you are interested, you’ll find instructions on how to complete the labs using RStudio Desktop instead of the RStudio Server in the Appendix. The Appendix will also include descriptions of the code that is sitting “behind the scenes” in many of the functions created in the chemistr
package: chem_table
, chem_scatter
, chem_clustered.bar
, etc. These functions were written to ease a beginner into working with R. Those interested in customizing their lab reports further should look over the R code in the Appendix. Additionally, many of the needed packages are automatically loaded when the chemistr
package is loaded using library(chemistr)
. You’ll see how each of these packages is used in the Appendix.
If further clarification is needed on any other aspect of the book, please email me with a reference to the error/area where more guidance is necessary. More advanced users are encouraged to create a GitHub issue here. Pull requests on GitHub for typos or improvements are also welcome and you can easily do so by clicking on the Edit button near Search at the top of the HTML version of the book.
This book will evolve and be updated as needed based on feedback. You can always check the date at the end of the chapter to see when the book was last updated. It is recommended that you use Google Chrome as your browser since GIFs sometimes do not load automatically with other browsers.
Starting the labs
Logging in and initial screen
The RStudio Server provides a web-based way to run analyses in R. This means that you will only need an internet connection and a web browser to run your analyses. You can be running a Windows machine, a Mac, a Linux, or pretty much any other device that has access to the internet and a web browser. If you are interested in using the Reed College RStudio Server off campus, you’ll need to request access in the form here. The initial login page will not load for you unless you are connected to the VPN from off campus locations. After entering the link (http://rstudio-dev.reed.edu) into your browser, you’ll see a page that looks something like:
After logging in with your Reed College username (mine is cismay
, for example) and password, you should see a layout similar to what follows.
Creating and Sharing Projects using RStudio Server
A good habit to get into whenever you start a new project following a common theme (such as your CHEM 101 labs) with R code is to create a new RStudio project to go along with it. RStudio project files have the extension .Rproj
and store metadata that goes along with the documents you’ve saved and information about the R environment you are working in. More information about RStudio projects is available from RStudio, Inc. here.
You’ll be sharing your Chem 101 labs with your Danielle Cass (dcass
) and Chester Ismay (cismay
) using the RStudio Server. This will allow both of us to help you with errors you may be having in writing your lab report without having to email files back and forth. You’ll just need to email us with the name of the lab you are having troubles with and what you named your RStudio project and we’ll be able to go in and look over your R Markdown file. You can think of this as working somewhat like Google Docs in that both Danielle and I can provide feedback and walk-through your analyses.
To share the project with us, you should follow along with the example below. Instead of naming your RStudio project CHEM101_ChesterIsmay
as the GIF shows, you should name it CHEM101_YourName
where YourName
is replaced with your first and last names. Spaces can cause problems in file names so it is recommended that you avoid them. If you’ve already shared your project and you have spaces in the name, you’ll probably be OK, but try to avoid spaces in your file names going forward. Calling your project CHEM101_YourName
will allow Danielle and I to track down your project more easily than if everyone named their project initial
or something similar.
You’ll need to also add cismay
as someone you’d like to share the project with. You can do so by entering my username immediately after you have clicked Add to add Danielle or you can go back to Share Project and enter my name there just as you have with dcass
. If you see that your project is shared with both dcass
and cismay
, you have completed this stage successfully.
You’ll see at the beginning of each chapter corresponding to the labs how you can access the different R Markdown template files for each lab. These template files are built into the chemistr
package that I have already loaded on the Reed RStudio Server for you.1
Don’t overwrite the Rproj file!
Important Note: There is a BIG difference between an Rmd (R Markdown) file that will store the code for each of your labs and this Rproj (RStudio Project) file. DO NOT OVERWRITE the Rproj file with your Rmd file or any other file. If you do this, Danielle and I will not be able to assist you since the Rproj file stores important information about sharing projects. You’ll need to create a new project all over from the beginning and it’s much better for everyone to not overwrite this file. Please create a new folder for each lab and LEAVE THIS Rproj file ALONE.
Requesting help
It’s nearly impossible for Danielle and I to help you unless we know that you are having troubles. If you find yourself unable to complete a lab because of problems with RStudio and you’ve spent more than 30 minutes trying to figure it out, it is time for you to stop and ask for help. We encourage you to try to figure it out on your own as much as possible because this helps you learn, but if you are deeply entrenched in not getting R to work, that could be taking away from your learning of Chem 101/102 material.
We encourage you to reach out to both of us and carefully explain what is going wrong with your R Markdown file. Sending us an email saying “I can’t get it to work, please help.” is not insightful and won’t help you learn in the long-run. Be as descriptive as possible. Something like what follows is much preferred:
“I’m receiving an error on line 46 of my Light lab about not finding an object. I’ve tried Googling it and found a couple references about it including link1 and link2 but it’s not working for me.”
This tells us that you have tried to figure it out for yourself, but that you require our assistance. That is to be expected and you shouldn’t be discouraged if you don’t understand something about R Markdown immediately.
We are here to help and please don’t give up on this. Learning how to work with R even at the most basic of levels will help you long-term in keeping track of analyses and getting you on the path to reproducible research. This will help you in your academic careers and whatever you do after your academic career ends. If you need assistance, please email Danielle and Chester with your concise error specifying in which lab and what the name of your RStudio project is. We are happy to help you learn how to use R!
Additionally, it is extremely helpful for us if you can share a link to your RStudio Project in any emails requesting help. This link is available by going to your RStudio project in the top right corner of RStudio, clicking on it and then selecting Share Project, and then select Sharing as seen in the screenshots below.
The link is given in the Project URL. Please copy this entire link into the body of your emails to Danielle or I so that we can quickly look into your errors.
Book was last updated:
## [1] "By dcass on Thursday, June 08, 2017 02:23:09 PM PDT"
References
Ismay, Chester. 2016. Getting Used to R, RStudio, and R Markdown. http://ismayc.github.io/rbasics-book.
If you are completing the labs using RStudio Desktop, you’ll see instructions on how to install this package onto your computer in the Appendix. After installing the package, you’ll be able to use the R Markdown templates in much the same way students using the RStudio Server can. Note that if you are using the RStudio Desktop, you won’t have access to the Shared Projects feature and it will be more difficult for Danielle and I to help you.↩


Not that You have get familiar with the task. We would like to get your basic information below:
Gender
Male
Female
Age Group
18-25
25-30
35-45
45-55
above 55
Home Language
Residential Country:


We are, the BariChai.com team, took this initiative to lessen the hastle of finding desired house in a city like Dhaka where more than 10 million people lives. Using our website, House owners can advertise their houses and people can search houses according to their demand and choose from a large number of options. We hope our website will make your busy life a little bit easier.


| 1 | package fr.sii.ogham.template.thymeleaf.v2.buider; | |
| 2 | ||
| 3 | import org.thymeleaf.TemplateEngine; | |
| 4 | import org.thymeleaf.templateresolver.ITemplateResolver; | |
| 5 | ||
| 6 | import fr.sii.ogham.core.builder.context.BuildContext; | |
| 7 | import fr.sii.ogham.core.builder.context.DefaultBuildContext; | |
| 8 | import fr.sii.ogham.core.builder.env.EnvironmentBuilder; | |
| 9 | import fr.sii.ogham.core.template.detector.TemplateEngineDetector; | |
| 10 | import fr.sii.ogham.email.builder.EmailBuilder; | |
| 11 | import fr.sii.ogham.template.thymeleaf.common.adapter.FileResolverAdapter; | |
| 12 | import fr.sii.ogham.template.thymeleaf.common.adapter.FirstSupportingResolverAdapter; | |
| 13 | import fr.sii.ogham.template.thymeleaf.common.adapter.TemplateResolverAdapter; | |
| 14 | import fr.sii.ogham.template.thymeleaf.common.buider.AbstractThymeleafMultiContentBuilder; | |
| 15 | import fr.sii.ogham.template.thymeleaf.v2.ThymeLeafV2FirstSupportingTemplateResolver; | |
| 16 | import fr.sii.ogham.template.thymeleaf.v2.ThymeleafV2TemplateDetector; | |
| 17 | import fr.sii.ogham.template.thymeleaf.v2.adapter.FixClassPathResolverAdapter; | |
| 18 | import fr.sii.ogham.template.thymeleaf.v2.adapter.StringResolverAdapter; | |
| 19 | import fr.sii.ogham.template.thymeleaf.v2.adapter.ThymeleafV2TemplateOptionsApplier; | |
| 20 | ||
| 21 | /** | |
| 22 | * Configures parsing of templates using Thymeleaf. | |
| 23 | * | |
| 24 | * Specific resource resolution can be configured to use template prefix/suffix | |
| 25 | * paths: | |
| 26 | * | |
| 27 | *
 | |
| 28 | *  | |
| 29 | * .classpath() | |
| 30 | * .pathPrefix("email/") | |
| 31 | * .pathSuffix(".html") | |
| 32 | * .and() | |
| 33 | * .file() | |
| 34 | * .pathPrefix("/data/myapplication/templates/email") | |
| 35 | * .pathSuffix(".html") | |
| 36 | *  | |
| 37 | *
 | |
| 38 | * | |
| 39 | * You can customize default Thymeleaf {@link TemplateEngine}: | |
| 40 | * | |
| 41 | *
 | |
| 42 | *  | |
| 43 | * .engine() | |
| 44 | * .addDialect("foo", myDialect) | |
| 45 | * .addMessageResolver(myMessageResolver) | |
| 46 | *  | |
| 47 | *
 | |
| 48 | * | |
| 49 | * Or you can use a particular Thymeleaf {@link TemplateEngine}: | |
| 50 | * | |
| 51 | *
 | |
| 52 | *  | |
| 53 | * .engine(new MyTemplateEngine()) | |
| 54 | *  | |
| 55 | *
 | |
| 56 | * | |
| 57 | * | |
| 58 | * Email protocol supports several contents (main and alternative). The main | |
| 59 | * content is often an HTML email to display a beautiful email to users. The | |
| 60 | * alternative content is often a textual fallback (when email client can't | |
| 61 | * display HTML version like mobile phones that tries to display a summary of | |
| 62 | * the email). You can configure which file extensions are supported by | |
| 63 | * Thymeleaf to automatically load variants (HTML: main, TEXT: alternative): | |
| 64 | * | |
| 65 | *
 | |
| 66 | *  | |
| 67 | * .variant(EmailVariant.HTML, "html") | |
| 68 | * .variant(EmailVariant.TEXT, "txt") | |
| 69 | *  | |
| 70 | *
 | |
| 71 | * | |
| 72 | * Thanks to that configuration, you can send an email without specifying the | |
| 73 | * extension: | |
| 74 | * | |
| 75 | *
 | |
| 76 | *  | |
| 77 | * service.send(new Email() | |
| 78 | * .content(new MultiTemplateContent("email/sample", new SampleBean("foo", 42))) | |
| 79 | * .to("foo.bar@sii.fr")) | |
| 80 | *  | |
| 81 | *
 | |
| 82 | * | |
| 83 | * Ogham will then be able to detect which files exist and choose the right | |
| 84 | * behavior: | |
| 85 | *
 | |
| 86 | *
If you provide an ".html" file (either in classpath or on filesytem), the | |
| 87 | * HTML template is used as main content
 | |
| 88 | *
If you provide an ".txt" file (either in classpath or on filesytem), the | |
| 89 | * text template is used as main content
 | |
| 90 | *
If you provide both files, the HTML template is used as main content and | |
| 91 | * text template as alternative
 | |
| 92 | *
 | |
| 93 | * | |
| 94 | * | |
| 95 | * @author Aurélien Baudet | |
| 96 | * | |
| 97 | */ | |
| 98 | public class ThymeleafV2EmailBuilder extends AbstractThymeleafMultiContentBuilder<ThymeleafV2EmailBuilder, EmailBuilder, ThymeleafV2EngineConfigBuilder<ThymeleafV2EmailBuilder>> { | |
| 99 | /** | |
| 100 | * Default constructor when using Thymeleaf without all Ogham work. | |
| 101 | * | |
| 102 | * WARNING: use is only if you know what you are doing ! | |
| 103 | */ | |
| 104 | public ThymeleafV2EmailBuilder() { | |
| 105 | super(ThymeleafV2EmailBuilder.class, null, new DefaultBuildContext()); | |
| 106 | } | |
| 107 | ||
| 108 | /** | |
| 109 | * Initializes the builder with a parent builder. The parent builder is used | |
| 110 | * when calling {@link #and()} method. The {@link EnvironmentBuilder} is | |
| 111 | * used to evaluate properties when {@link #build()} method is called. | |
| 112 | * | |
| 113 | * @param parent | |
| 114 | * the parent builder | |
| 115 | * @param buildContext | |
| 116 | * for registering instances and property evaluation | |
| 117 | */ | |
| 118 | public ThymeleafV2EmailBuilder(EmailBuilder parent, BuildContext buildContext) { | |
| 119 | super(ThymeleafV2EmailBuilder.class, parent, buildContext); | |
| 120 | } | |
| 121 | ||
| 122 | @Override | |
| 123 | protected ITemplateResolver buildTemplateResolver(TemplateEngine builtEngine) { | |
| 124 |
1
1. buildTemplateResolver : replaced return value with null for fr/sii/ogham/template/thymeleaf/v2/buider/ThymeleafV2EmailBuilder::buildTemplateResolver → RUN_ERROR |
return buildContext.register(new ThymeLeafV2FirstSupportingTemplateResolver(buildResolver(), buildAdapters())); |
| 125 | } | |
| 126 | ||
| 127 | @Override | |
| 128 | protected TemplateEngineDetector createTemplateDetector() { | |
| 129 |
1
1. createTemplateDetector : replaced return value with null for fr/sii/ogham/template/thymeleaf/v2/buider/ThymeleafV2EmailBuilder::createTemplateDetector → NO_COVERAGE |
return buildContext.register(new ThymeleafV2TemplateDetector(buildResolver())); |
| 130 | } | |
| 131 | ||
| 132 | @Override | |
| 133 | protected ThymeleafV2EngineConfigBuilder<ThymeleafV2EmailBuilder> getThymeleafEngineConfigBuilder() { | |
| 134 |
1
1. getThymeleafEngineConfigBuilder : replaced return value with null for fr/sii/ogham/template/thymeleaf/v2/buider/ThymeleafV2EmailBuilder::getThymeleafEngineConfigBuilder → NO_COVERAGE |
return buildContext.register(new ThymeleafV2EngineConfigBuilder<>(myself, buildContext)); |
| 135 | } | |
| 136 | ||
| 137 | @Override | |
| 138 | protected FirstSupportingResolverAdapter buildAdapters() { | |
| 139 | FirstSupportingResolverAdapter adapter = buildContext.register(new FirstSupportingResolverAdapter()); | |
| 140 | for (TemplateResolverAdapter custom : customAdapters) { | |
| 141 |
1
1. buildAdapters : removed call to fr/sii/ogham/template/thymeleaf/common/adapter/FirstSupportingResolverAdapter::addAdapter → NO_COVERAGE |
adapter.addAdapter(custom); |
| 142 | } | |
| 143 | ThymeleafV2TemplateOptionsApplier applier = buildContext.register(new ThymeleafV2TemplateOptionsApplier()); | |
| 144 |
1
1. buildAdapters : removed call to fr/sii/ogham/template/thymeleaf/common/adapter/FirstSupportingResolverAdapter::addAdapter → RUN_ERROR |
adapter.addAdapter(buildContext.register(new FixClassPathResolverAdapter(applier))); |
| 145 |
1
1. buildAdapters : removed call to fr/sii/ogham/template/thymeleaf/common/adapter/FirstSupportingResolverAdapter::addAdapter → RUN_ERROR |
adapter.addAdapter(buildContext.register(new FileResolverAdapter(applier))); |
| 146 |
1
1. buildAdapters : removed call to fr/sii/ogham/template/thymeleaf/common/adapter/FirstSupportingResolverAdapter::addAdapter → RUN_ERROR |
adapter.addAdapter(buildContext.register(new StringResolverAdapter(applier))); |
| 147 |
1
1. buildAdapters : removed call to fr/sii/ogham/template/thymeleaf/common/adapter/FirstSupportingResolverAdapter::setOptions → RUN_ERROR |
adapter.setOptions(buildTemplateResolverOptions()); |
| 148 |
1
1. buildAdapters : replaced return value with null for fr/sii/ogham/template/thymeleaf/v2/buider/ThymeleafV2EmailBuilder::buildAdapters → RUN_ERROR |
return adapter; |
| 149 | } | |
| 150 | } | |
Mutations | ||
| 124 |
1.1 |
|
| 129 |
1.1 |
|
| 134 |
1.1 |
|
| 141 |
1.1 |
|
| 144 |
1.1 |
|
| 145 |
1.1 |
|
| 146 |
1.1 |
|
| 147 |
1.1 |
|
| 148 |
1.1 |


{% if message %}
{{ message }}
{% endif %}
{% block content %}
{% endblock %}
{% load static %}
{% if title_for_layout %}This system uses Postgres SQL as its DBMS. This system uses Postgres SQL as its DBMS. This system uses Postgres SQL as its DBMS.
The backend is powered by Django as a framework. The backend is powered by Django as a framework. The backend is powered by Django as a framework.
Its frontend GUI is Materialized. Its frontend GUI is Materialized. Its frontend GUI is Materialized. Its frontend GUI is Materialized. Its frontend GUI is Materialized.


Would you like to be X or O?
How do you want to play?
It was a draw..

You Won!!! :)


Provides a simple interface for working with Custom Cloudformation Resource events. Source: Cloudformation/response.js, line 8


Guide to DeepLabCut installation on Windows 10
1. Nvidia Driver installation
First off you should check the properties of your gpu. On a Windows 10 computer, one way to find out is by right-clicking on the desktop area and choosing Display Settings. In the Display Settings box, select Advanced Display Settings and then choose the Display Adapter properties option. On the Adapter tab in the box, you should see the brand of the graphics card and its memory amount listed. You can also get to the same Properties box from the Windows 10 Start menu — select Settings, then System to get to Advanced Display Settings, and then Display Adapter Properties:
Here you input the properties of your GPU and it tells you the nvidia version you should install:
For example: Here a GeForce GTX 1070 is listed. The latest version available is 445.87. The driver is backwards compatible so the latest version works fine with earlier versions of CUDA.
Now check which Nvidia version is already installed: Right click on desktop and choose Nvidia control panel:
Then click on system information
Find out the version under Display Tab - Details:
2. CUDA Toolkit installation
In order to get a package working you need a hierarchy of compatible versions installed. Now the compatibility tree as follows:
Tensorflow version has to be compatible with CUDA Toolkit’s version.
CUDA Toolkit version has to be compatible with Nvidia driver version.
Nvidia driver version has to be compatible with your gpu.
So it’s best to install the latest version of Nvidia compatible with your gpu and then see what Cuda versions you’re left with. The compatibilities are reported here:
See https://docs.nvidia.com/deploy/cuda-compatibility/index.html for more info.
Once you’ve decided on the CUDA Toolkit version, you go to the CUDA archive and download. But before proceeding with CUDA installation, CUDA Toolkit requires Visual Studio as a prerequisite. So, check if you have the right version of the VS compatible with your chosen version of CUDA Toolkit installed. In case your package is developed for a exclusive versions of CUDA toolkit you should take that into account while choosing the version. For example, in the case of Deeplabcut, there are only a few versions that are pre-tested to work for this package:
“In the Nature Neuroscience paper, we used TensorFlow 1.0 with CUDA (Cuda 8.0); in the Nature Protocols paper, we tested up through TensorFlow 1.14 with CUDA 10. Some other versions of TensorFlow have been tested (i.e. these versions have been tested 1.2, 1.4, 1.8 and 1.10-1.14, but might require different CUDA versions - CUDA 10.1+ is NOT supported)! Currently, TensorFlow 2.0 is not supported. Please check your driver/cuDNN/CUDA/TensorFlow versions” 1
2.1 Visual Studio installation
Visual studio is required for the installation of Nvidia CUDA Toolkit . If you attempt to download and install CUDA Toolkit for Windows without having first installed Visual Studio, you get the message shown:
At the time of writing, the Visual Studio Express Community Version 2017 is compatible with CUDA 10 version. However the latest version is 2019. You can get previous versions of Visual Studio for free by joining “Visual Studio Dev Essentials” and then searching for the version of Visual Studio you want.
Once you have downloaded Visual Studio Express, its installation is straightforward. During installation, Visual Studio prompts you to as whether you ‘want to continue without workloads’. I pressed ‘continue’ here, as I had no intention of using workloads at all. A PC reboot after installation of Visual Studio May be Required.
2.2 CUDA installation
After installing Visual Studio, move straight on to downloading and attempting to install CUDA Toolkit for Windows.You might get a message that Visual Studio was still operating and was preventing the installation of CUDA Toolkit. Rebooting your PC before attempting to install CUDA Toolkit again will solve this problem.
After installation you should add the path to the environment variables. Right-clicking on my Computer, going to the ‘Advanced system settings` page, then environment variables. Click on path, if the path to your CUDA version is not there, you should add it. For example here CUDA 9.0 was already there and the path for CUDA 10.0 was added at the bottom.
3. cuDNN installation
After finishing the CUDA Toolkit installation you have to install cuDNN on Windows 10 which is compatible with CUDA version. The table below shows the compatibolities for Linux operating system as an example:
The writers of the Deeplabcut package say that in case you download the conda environment for this package there is no need to separately install cuDNN. However I had to separately install it in Ubuntu despite using the aforementioned environment. Either way we cover it here in case you are not using the Anaconda distribution.
The NVIDIA CUDA Deep Neural Network library (cuDNN) is a GPU-accelerated library of primitives for deep neural networks. cuDNN provides highly tuned implementations for standard routines such as forward and backward convolution, pooling, normalization, and activation layers. cuDNN is part of the NVIDIA Deep Learning SDK. cuDNN download link : https://developer.nvidia.com/cudnn.
You have to create an account in order to download this. Then you will get to choose the version as shown below:
After downloading the installation file. You should unzip it and copy a few files as instructed below.
There are three files in the unzipped cuDNN folder subdirectories which are to be copied into the CUDA Toolkit directories. These are cudnn64_7.dll
, cudnn.h
and cudnn.lib
:
cudnn64_7.dll
cudnn64_7.dll
can be found in the following path within the downloaded cuDNN files:<downloadpath>\cudnn-9.0-windows10-x64-v<IP_ADDRESS>\cuda\bin\cudnn64_7.dllAssuming that you installed CUDA 9.0 (version 9.0 here is an example) to its default path, namely the following default path::
C:\Program Files\NVIDA GPU Computing Toolkit\CUDA\v9.0you can copy the
cudnn64_7.dll
file directly into the CUDA folder’s bin folder path:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin\Note
you don’t need to create any new subfolders.
cudnn.h
As with the
cudnn64_7.dll
file above, after downloading and unzipping the cuDNN folder, the header filecudnn64.h
can be found in the path:<downloadpath>\cudnn-9.0-windows10-x64-v<IP_ADDRESS>\cuda\ include\cudnn.hAgain, assuming that you installed CUDA 9.0 into the default path, copy
cudnn.h
directly into the CUDA folder with the following path (no new subfolders are necessary):C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include\cudnn.lib
The file
cudnn.lib
can be found in the downloaded cuDNN path:<downloadpath>\cudnn-9.0-windows10-x64-v<IP_ADDRESS>\cuda\lib\x64\cudnn.libCopy
cudnn.lib
directly into the CUDA folder with the following path:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64\
4. Tensorflow installation
You can download the deeplabcut conda environment as mentioned earlier if you have anaconda installed or want to install it through this link which has all the necessary packages in itself and you can skip the points below and proceed with your projects.
4.1 Create virtual environment
However, if you want your own customized env, create a virtual environment and install tensorflow-gpu inside the virtual env. Enter these commands in cmd (run as administrator) Needless to say that you should already have Python 3 and pip installed:
pip install virtualenv
cd my_project
virtualenv env # (env is supposed to be the name of your environment)
4.2 activate the environment
Then activate your env with the command below (replace the pathtowith the path to your env folder):
\pathto\env\Scripts\activate
4.3 install Tensorflow
Now you should install tensorflow:
pip install tensorflow-gpu==1.12 #(or any version you see fit)
4.4 check Tensorflow installation
Then to check if your gpu is being occupied run this in an ipython console:
import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
Look for a result like this:
Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0, compute capability: 6.1
Which shows your gpu has been correctly recognized.
Or if you want to be more thorough assign a calculation to it:
import tensorflow as tf with tf.device('/gpu:0'): a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a') b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b') c = tf.matmul(a, b) with tf.Session() as sess: print (sess.run(c))
If you have a gpu and can use it, you will see the result. Otherwise you will see an error with a long stacktrace. In the end you will have something like this:
Cannot assign a device to node 'MatMul': Could not satisfy explicit device specification '/device:GPU:0' because no devices matching that specification are registered in this process
5. Deeplabcut and wxpython installation
Then when you are assured of your installations. You need to install only deeplabcut and wxpython into your env. Make sure you install the right version of wxpython. At the time of writing version 4.1 doesn’t work but version 4.0.7 does:
pip install -U wxPython==4.0.7.post2
After installation import deeplabcut in ipython to make sure it is installed properly:
import deeplabcut
If you don’t have conda installed, it’s best to install jupyter notebook inside this env to be able to use the pre-written notebooks for this package:
pip install jupyter
See also
Take a look at the github page for Deeplabcut for further information: https://github.com/DeepLabCut/DeepLabCut/blob/master/docs/installation.md
The link below has the complete instructions for installation of tensorflow with CUDA and cuDNN however the link directs to the latest release of Cuda. Bearing that in mind, scroll through if points are not cleared up here.
If you encounter problems with gcc: Run the following command in cmd to see which version is installed if any:
gcc -v
If not, follow instructions here to install:
https://preshing.com/20141108/how-to-install-the-latest-gcc-on-windows/


|
Twitter Last.fm Android Application |
Github Last.fm |
Technical BlogInfrequently updated with my thoughts on computer science, software engineering, technology, etc. |
Elusive TruthA writing project chronicling my ongoing travels around the world in pursuit of the horizon. |
QuechuaAn online Quechua language resource, edited and compiled from my notes. Updated as I continue to explore this fascinating language. |
Piet CreatorA cross platform GUI IDE for the esoteric programming language Piet. |
|
Twitter Last.fm Android Application |
Github Last.fm |
binaryelysium.com · page layout by Sean Palmer
·header image by cloaks


MaTrEx
Exploring Specialized Skill Training in Virtual Reality
The project and it's findings were accepted as a poster for presentation at IndiaHCI'19.
Link for accepted worksIntroduction
Problem Statement
Today, 60% of the open skilled production positions in the manufacturing industry are unfulfilled. Despite automation, skilled workers will still be needed to apply problem-solving capabilities, perform analysis and manage production. One reason manufacturers are finding it difficult to fill positions, both skilled and unskilled, is the lack of trade school opportunities for young women and men.
The Solution
Through MaTrEx, short for Maintenance and Training through Extended Reality, we proposed the development of robust Virtual Reality training programs, offering a way for skilled professionals to train on-site technicians and to perform remote diagnostics over Virtual Reality, potentially in real-time. To achieve this, we make use of digital twins - a virtual model of a real machine with data collected through IoT devices. The professionals can use the immersive effect to explain the instrument’s working or help pinpoint the cause of a malfunction, thus making it a derivative of Assisted Reality powered by Digital Twins. The inception of the project took place during Accenture’s Hack The Reality Hackathon.
Team
- Prabhav Bhatnagar
- Vivek Raman
- Adhiraj Bhagawati
- Adhyan Mall
- Projjal Gupta
My Role
I was responsible for the UX design & development of the VR application. I also handled the the Multiplayer aspect with Photon (PUN 2), and communication between the application and IoT devices.
Tech Stack
- Unity3D
- OpenVR
- PhotonSDK
- Oculus VR and Windows MR Headsets
- Arduino
- Blender
Modules
We planned the solution in a modular fashion, the key modules being:
- Virtual Realy Environment
- The Networking Module
- The IoT module
- User Interface and Dashboard
How they all fit together
- The prototype comprises a room in Virtual Reality that is simple, spacious, and free of distractions.
- The room is shared by a trainer and N trainees. They can remotely join the room through the application.
- A “digital twin”, a 3D model resembling and connected to a machine in the real world, also exists in this room.
- As the trainer interacts with the digital twin, the trainees can observe and also interact with it.
- This can also facilitate ad-hoc remote maintenance by streaming diagnostic data in real-time using IoT.
- Each session can be recorded and replayed for re-training or reference.
Implementation
Virtual Reality Environment
We had to experiment a lot with the size of the VR environment and scale it to make sure it was comfortable for the actors and created a productive learning environment. We built the VR interactions on top of OpenVR for its multi-vendor support, meaning that in the multi-actor scenario, there would be no restriction on the hardware being used. One actor can use a top of the line Occulus Vive while the other can use a budget Windows MR and the application would comply.
The IoT module
For the prototype, since we lacked proper equipment, we made a functioning proof of concept by using a heat-sensor with an Arduino and establishing a connection with unity using MQTT protocol.
User Interface and Dashboard
We implemented a simple user interface and dashboard which would give actors the data in the VR environment in a graphical format.
Features
- Training of (multiple) on-site workers on potentially different sites by remote professionals. Training in VR provides an effective learning experience by training people in the most realistic way possible, without the situation actually happening in real life.
- The database of these sessions can be revisited in VR for future reference. One key advantage of VR is that the sharing of virtual content can lead to more robust replication and representative sampling. A database of standardized content will allow the training of on-site workers more efficiently.
- Ad-hoc maintenance where a remote profession can review the digital twin with real-time data and provide guidance to the on-site workers. These sessions can even be recorded for a particular model for future reference and maintenance.
- A Pooling session where multiple professions get access to the digital twin and each follows their approach which is simulated and the optimal solution is implemented. Since it’s multiplayer, multiple numbers of on-site workers can also work on the model or get trained to work with the necessary parts of the model.
Challenges
- We tested with the few VR headsets as we could get our hands on. We would like to stress test further how many people can feaseably learn in such a test environment.
- Considerable need for storage space for the projects and recording of VR sessions.
- Lack of actual machinery to test with a major constrant. We created a simulated proof of concept which should be feaseable to scale.
Results & Future Work
The experiment serves as a proof of concept that Virtual Reality can serve as a viable platform for demonstration training on the Industrial Scale.
Future plans include conducting more in-depth user testing and analyzing their experience juxtaposed against conventional training methods.
Additionally, the team would like to explore the effect of various kinds of input mappings on the learning experience along with the possibility of the addition of more tactile elements like haptic responses to make the environment more immersive.
Impact
One of the biggest implication of this project is the possibilty of XR as a Service (XAAS) paradigm. Being modular in nature, the solution can be scaled on an industrial scale. The solution can be modeled as a Service that the industries can subscribe to for continual support and packaged at multiple layers based on the generalized needs of the industry.
As an organization providing this solution, there will be continual returns for the services provided. As soon as one industry adopts it, it will trigger a trend in which every industry wanting a bite of the pie.


OFFICIAL: five more signings for Bekcham's Inter Miami
by BeSoccerDavid Beckham continues to expand his MLS club. Five more signings were announced at Inter Miami on Wednesday.
Inter Miami FC, the team led by David Beckham and debuting in 2020, chose five players from a list of more than 200 after they were released by their respective MLS teams (Major League Soccer): Ben Sweat, Alvas Powell, Lee Nguyen, Luis Argudo and Bryan Meredith.
Sweat comes from New York City FC, where he has played for the past three seasons; Powell comes from FC Cincinatti; Nguyen was a Los Angeles FC midfielder and Luis Argudo held the same position on Columbus Crew, while Meredith was a goalkeeper for Seattle Sounders.
"We're delighted with how we've completed this step. We're gaining momentum before the 2020 season," said Inter Miami Sports Director Paul McDonough.
Inter Miami's debut will be on March 14 against Los Angeles Galaxy, where former British footballer David Beckham played from 2007 to 2012.
The game will be played at Lockhart Stadium in Fort Lauderdale, about 40 kilometers north of Miami, which will be its temporary home until the construction of the final stadium in Miami.
The 44-year-old British began his relationship with Major League Soccer (MLS) in the United States when, as a player for Real Madrid, he announced that he was leaving the Spanish team to join LA Galaxy on the west coast of the United States in 2007.
Inter Miami will hold its first two seasons in this provisional venue, while the Miami Beckham United group, to which the British and Cuban-American businessmen Jorge and José Mas belong, seeks to build the definitive one in Miami.
Beckham and ihis partners have a 25,000-seat stadium in mind, along with a commercial complex and public parks on the grounds of a golf course east of Miami International Airport.
The idea, which was approved by voters in a 2018 plebiscite, now awaits approval of the terms of the contract by the Miami council, which will discuss the issue on Dec. 12.


LETHAL WEAPON II A film review by William December Starr Copyright 1989 William December Starr
In answer to someone's query ("Is LETHAL WEAPON II really as bad as that Starr guy says it is?"), a few people have more or less recommended it, the gist of their postings being that it was a lot like the first LETHAL WEAPON only more so, so if you liked the first one you'd like the second one.
Well, I sort of liked LETHAL WEAPON back when I rented and watched it about a year ago. It was kind of wahoo, but what the hell, the plot mostly held together and I liked the haunted, desperate, crazed and seriously depressed Riggs (Mel Gibson) and the contrast between him and the family man Murtaugh (Danny Glover).
So why didn't I like -- nay, why did I *detest* the sequel? Lots of reasons, most of which I won't go into here because (a) I want to keep this short and (b) in order to accurately categorize them I'd have to see the damn movie over again, and I'm not getting paid enough for this to do that. So, the bottom line ... by the numbers, I detested LETHAL WEAPON II because:
1. Of all the major events in the movie, virtually *none* of them could possibly have taken place in or near the City of Los Angeles, the State of California, the United States of America, or the planet Earth in or near the year AD 1989.
2. The creators, writers, producers etc. of this movie could not possibly *not* have known that the alleged story they were filming was completely incoherent, illogical, ridiculous, preposterous and a whole lot of other words too, yet they went ahead and shot it (not literally, alas), edited it, made thousands of copies of it, promoted it, distributed it and then -- and this is the part that's gotten me angry -- they foisted it off on me and conned me into paying them six dollars and investing two hours of my life under the mistaken impression that I was going to be cinematically told a *story*
3. The bottom line, and the reason I'm so ripped about this, is that the bastards *ripped me off*. The promised me a *movie*, a story told in moving pictures and sounds. . . but all they gave me was a collection of about a hundred and fifty thousand pieces of 35mm celluloid spliced together and wound up on a reel.
[And, Special Bonus Point #4, Free With This Flame. . .]
4.  The Lost Barbarian City of Glort-Splert, Part VII" flick that shows up in the city's lowest-grade theaters, plays for about a week and then goes straight into the video market, I wouldn't be so upset. But this cinematic abortion is raking in money hand over fist, professional critics who should know better are giving it thumbs up instead of reserving it a place on their Ten Worst Films of 1989 lists, and the bastards who made this film, and everyone else who's in the movie business for no reason other than the love of money, are learning the Golden Lesson of LETHAL WEAPON II:
--> Throw enough flash and glitter and slo-motion stuntwork and --> cardboard villains -- the scummier the better -- at the audience --> and they won't *care* whether it's garbage or not; they'll just --> *beg* you to take their money away.
And the film industry will move another step away from quality and innovation and another step towards recycled garbage and Lowest Common Denominator movies and. . . oh hell, you've already heard all this from people who really *care* about cinema, from Siskel and Ebert (on their good days) and from Harlan Ellison, who on his worst day can outwrite and outreview anyone in the business, and from lots of others, and none of it makes any difference when the Fakers and the Takers (as opposed to the Makers) crank up their magic publicity machines and start harvesting the money.
Look, if you want to see LETHAL WEAPON II, go see it. Just don't say I didn't warn you. -- William December Starr, Northeastern U. Class of '90 (Poly Sci/pre-law<EMAIL_ADDRESS>(If that doesn't work, try either<EMAIL_ADDRESS>or<EMAIL_ADDRESS>.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


JavaScript console.assert() Method
Press F12 on your keyboard to view the message in the console view.


What is the relationship between mindfulness and self awareness?
Mindfulness and self-awareness have been suggested to be essentially the same thing in this chapter. I can agree with this, thinking about my understanding of these concepts, or at the very least they are very related.
Try at least one of the self awareness practices from the chapter (Body Scan, Journaling). What was your experience of it? How did you feel?
Body scanning is a practice I am familiar with from Yoga. I often use this technique already when I’m having trouble sleeping, and find this helps, as mentioned in this chapter. For this reason, I tried the Journaling practice, as I haven’t tried this before. I think it was easy to write things down knowing it was for my eyes only, and I could be more honest with myself. It felt good to acknowledge how I was feeling, and I had a sense of empowerment and motivation with some of the negative things I wrote about. I felt motivated to change these, and avoid having to write about them in the future, especially when I didn’t need to feel that way about a particular thing, but I chose to have that type of reaction.
What did you take away from the "My Emotions are Not Me" section?
This seems like a simple concept, but is something a lot of people overlook. I like that this gives a logical sense to our emotions, and teaches us not to judge one another from our emotions. It also highlights how some people can appear to react differently to an event, when one person could really just have better control of their emotions, and so it’s hard to judge one another in this respect. I enjoyed the last point about how important this understanding is to change, which I really agree with.


CYO is a powerful markup language that is powered by Angular.js that requires no technical knowledge to use. It is ideal for forms, games and user experience.
CYO can be used to make...
CYO is not really a library. It's more like a new language build with interactivity in mind.
How does CYO benefit YOU?
CYO is used to add interactivity to any web page with zero programming required. Write interactive scenarios with intuitive markup instead, then add CSS to it.
CYO is a tool you can use to share your interactive stories on any modern device, including tablets and phones.
Write elaborate and exciting tales, full of interactivity, without learning any programming language.
CYO is a super lightweight library, that has only Angular.js as a dependency.
CYO is open source, and uses all the best Angular.js best practices. It can cut the time you spend developing simple forms in half.
You're interacting with CYO right now.
This interactive questionnaire was written with simple markup. No code was needed. See the full markup below!
We hope you start using CYO to speed up your designing and prototyping today!
We hope you include CYO in your projects from now on! Don't forget to star the repository.
We hope that CYO speeds up your storytelling process and lets you express the awesome stories you want to tell today!
<story>

CYO's Sale Pitch

<page>

CYO is not really a library. It's more like a new language build with interactivity in mind.

How does CYO benefit YOU?

<button choice designer>I'm a designer</button>
<button choice storyteller>I'm a storyteller</button>
<button choice developer>I'm a developer</button>
</page>
<page designer>

CYO is used to add interactivity to any web page with zero programming required. Write interactive scenarios with intuitive markup instead, then add CSS to it.

<event is-designer></event>
<button choice what-is>But what is CYO?</button>
</page>
<page storyteller>

CYO is a tool you can use to share your interactive stories on any modern device, including tablets and phones.

Write elaborate and exciting tales, full of interactivity, without learning any programming language.

<event is-storyteller></event>
<button choice what-is>But what is CYO?</button>
</page>
<page developer>

CYO is a super lightweight library, that has only Angular.js as a dependency.

CYO is open source, and uses all the best Angular.js best practices. It can cut the time you spend developing simple forms in half.

<event is-developer></event>
<button choice what-is>But what is CYO?</button>
</page>
<page what-is>

You're interacting with CYO right now.

This interactive questionnaire was written with simple markup. No code was needed. See the full markup below!

<condition is-designer>

We hope you start using CYO to speed up your designing and prototyping today!

</condition>
<condition is-developer>

We hope you include CYO in your projects from now on! Don't forget to star the repository.

</condition>
<condition is-storyteller>

We hope that CYO speeds up your storytelling process and lets you express the awesome stories you want to tell today!

</condition>
</page>
</story>
If you're technical, getting started is simple. Just require the "CYO" module in your app and you'll have access to all the directives.
If the last sentence made your head hurt, just copy the follow boilerplate into an empty HTML file, and it will work out of the box.
<doctype html>

<story>

CYO

</story>

This element contains all other CYO elements. Start each story with one of these.
This element will appear only if a choice with the same name as it is clicked.
These buttons will turn on a page. When you click one, the other choices on the page disappear.
This invisible element will reveal condition elements that appear later with the same name.
This element is hidden by default, but will appear if the matching condition is revealed.
This button will reset the story the contains it.
You're in a spooky forest.
"You'll never get out of here alive," says Smeemog, the grumpy dwarf.
"I'll show you who won't get out of here alive," you say, but deep down, you're worried he's right.
"We should wait here until we get rescued."
"Thought it might be snakes, or maybe a pit, but I never thought I'd be bored to death."
In the clearing of the forest, there are three rocks, a tree, and, in another tree, a preposterous-looking owl.
For a while you talk to the owl. It seems to ignore you. Suddenly, it cocks its head towards a hollow in an old tree.
You reach inside, and pull out a mysterious wooden flute.
"Hmm, now I've seen everything".
One thing about yourself that you know for sure - you hate owls/
"Hey! Owl! You're stupid-looking!"
The owl cocks its head at you bemusedly.

 It is a big owl indeed.
You are never seen again.
You walk up to the pile of rocks.
It's just a pile of rocks, you think.
You walk up to the tree. You reckon it to be mighty old. Maybe a bazillion years or more. You notice a strange carving on the tree.
The carving depicts a great monster, twenty feet tall or more.
"Pshh. A huge monster, have you ever heard anything so ridiculous, Smeemog? ... Smee?"
You turn around, but in fact Smeemog has been eaten by a giant monster.
The monster devours you as you beg for mercy.
"Let's get out of here," you say to the dwarf.
"Fool!" He shouts. "Fool!" But he follows anyways.
After a short time, you see a bridge and, on the other side, the exit of the woods.
As you are crossing, a fearsome troll climbs out from under the bridge.
"Who dare to cross me bridge?" he bellows.
You play the flute, and the troll disappears in a cloud of smoke.
"I'll get you, Owl!" he curses.
You and Smeemog escape the forest safely.
You win!
"It is we," you say.
"I care not who ye are! I demand yer bones as payment for trespassin'."
You're boned!
<story>

A Game

<page intro>

You're in a spooky forest.

"You'll never get out of here alive," says Smeemog, the grumpy dwarf.

"I'll show you who won't get out of here alive," you say, but deep down, you're worried he's right.

<button choice stay-put>Wait to get rescued</button>
<button choice look-around>We must explore this magic forest</button>
</page>
<page stay-put>

"We should wait here until we get rescued."

"Thought it might be snakes, or maybe a pit, but I never thought I'd be bored to death."

In the clearing of the forest, there are three rocks, a tree, and, in another tree, a preposterous-looking owl.

<button choice investigate-rocks>I ought to investigate these rocks</button>
<button choice check-tree-out>I want to check out this tree</button>
<button choice talk-to-owl>"Hey you! Owl! I'm talking to you."</button>
</page>
<page talk-to-owl>

For a while you talk to the owl. It seems to ignore you.  Owl!   You reckon it to be mighty old. Maybe a bazillion years or more. You notice a strange carving on the tree.

The carving depicts a great monster, twenty feet tall or more.

"Pshh. A huge monster, have you ever heard anything so ridiculous, Smeemog? ...  He shouts. "Fool!" But he follows anyways.

After a short time, you see a bridge and, on the other side, the exit of the woods.

As you are crossing, a fearsome troll climbs out from under the bridge.

"Who dare to cross me bridge?"  he curses.

You and Smeemog escape the forest safely.

You win!

<button restart>Play again?</button>
</page>
<page introduce>

"It is we," you say.

"I care not who ye are! I demand yer bones as payment for trespassin'."

You're boned!

<button restart>Play again?</button>
</page>
</story>
Thanks for using our product! Let us help you troubleshoot.
Are you using the latest version of our software?
Please update to the latest version of the software.
Do you have a dedicated graphics card?
Please disable "Use Hardware Acceleration" in Options > Graphics.
Please e-mail technical support with a description of your problem and we'll get back to you within 24 hours.
Thanks for using our product!
<story>
<page>

Troubleshooting

Thanks for using our product! Let us help you troubleshoot.

Are you using the latest version of our software?

<button choice using-new-software>I'm using the latest version.</button>
<button choice using-old-software>I'm not using the latest version of the software.</button>
</page>
<page using-old-software>

Please update to the latest version of the software.

<button choice problem-fixed>My problem has been solved.</button>
<button choice using-new-software>That didn't help.</button>
</page>
<page using-new-software>

Do you have a dedicated graphics card?

<button choice email-support>I have a dedicated graphics card.</button>
<button choice no-card>I don't have a dedicated graphics card.</button>
</page>
<page no-card>

Please disable "Use Hardware Acceleration" in Options > Graphics.

<button choice problem-fixed>My problem has been solved.</button>
<button choice email-support>That didn't help.</button>
</page>
<page email-support>

Please e-mail technical support with a description of your problem and we'll get back to you within 24 hours.

<button restart>Try Again?</button>
</page>
<page problem-fixed>

Thanks for using our product!

<button restart>Try Again?</button>
</page>
</story>
CYO is Developed by Azureda and is open-source and free. All CYO materials are copyrighted by the Must-Praise-Spaghetti-Monster license, which is self-explanatory.


|
| | |
Jacques Villon
[French Cubist Painter, 1875-1963]
|
|
|
|
Jacques Villon Works Online
Categorized & Annotated
Commercial Galleries: Galleries: We invite you to register and list your site (no charge for this service)
Original works by Jacques Villon available for purchase at art galleries worldwide
Paintings in Museums and Public Art Galleries Worldwide:
Art Institute of Chicago NEW!
Dallas Museum of Art, Texas NEW! (There is a "Download" link for zooming in on some works, but confusingly this may take a while to become active)
Fine Arts Museums of San Francisco NEW! Many works online
Guggenheim Museum, New York City Color Perspective, 1921
Metropolitan Museum of Art, New York City NEW!
Museum of Fine Arts, Boston NEW!
Museum of Modern Art, New York City Includes biographical information about the artist
National Gallery of Art, Washington D.C. NEW! Most but not all artists in the NGA database have works online
Peggy Guggenheim Collection, Venice NEW!
Rijksmuseum, Amsterdam NEW!
Akron Art Museum, Ohio NEW! (Click on the "View objects by this artist" link)
Art Gallery of New South Wales, Sydney, Australia
Ball State Museum of Art, Indiana Mirror of the Poets (Du Miroir des Poetes), ca.1960
Brooklyn Museum, New York City
Canton Museum of Art, Ohio Portrait Of Rimbaud
Carnegie Museum of Art, Pittsburgh, Pennsylvania The Cards (Les Cartes), 1903
Clay Center for the Arts & Sciences, Charleston, West Virginia
Cleveland Museum of Art, Ohio
Currier Gallery of Art, New Hampshire
Haggerty Museum of Art at Marquette University, Wisconsin Maternit� (Maternity), ca.1948
Harvard University Art Museums, Massachusetts Harvard have works in their collections, but unfortunately you have to type in the search yourself
Hirshhorn Museum and Sculpture Garden, Washington D.C. NEW!
Indianapolis Museum of Art, Indiana
Kunstmuseum Basel, Switzerland Alphabetically under "V"
Los Angeles County Museum of Art NEW!
Mildred Lane Kemper Art Museum, St. Louis, Missouri
Minneapolis Institute of Arts, Minnesota
Musee Jenisch, Vevey, Switzerland (in French) Notre-Dame-de-Vie, 1934
Musee Jenisch, Vevey, Switzerland (in French) Les Trois Ordres, Beaugency, 1939
Musées de Lorraine, France (in French) 2 works online
Museum of Modern Art, New York City - Provenance Research Project 4 works by Villon
Nasher Sculpture Center, Dallas, Texas
North Carolina Museum of Art, Raleigh
Philadelphia Museum of Art
Royal Museums of Fine Arts of Belgium Catalogue (in French) Femme vue de dos, 1930
San Diego Museum of Art, California NEW!
Jacques Villon at the Smithsonian Archives of American Art, Washington D.C. Photograph of the Duchamp brothers, Marcel Duchamp, Jacques Villon, and Raymond Duchamp-Villon
University of Iowa Museum of Art, Iowa City
Art Market: (e.g. records of past sales at auction; sites providing examples of the artist's signature)
Art Signature Dictionary NEW!
Christie's Past Sale Archive (database goes as far back as 1991; images go about as far back as 1999)
Sotheby's Sold Lot Archive (database goes as far back as 1998; images where permitted by copyright go about as far back as 2001)
Pictures from Image Archives:
Jacques Villon at The Athenaeum
World Visit Guide (formerly Insecula)
Ciudad de la Pintura (in Spanish)
El Poder de la Palabra (The Power of the Word) (in Spanish)
Additional Image Search Tools:
(SafeSearch set to "strict"; go to Advanced Search (Flickr/Google) or Preferences (Bing) to change)
Miscellaneous Sites:
Art of the First World War
Kubisme (Cubism) (in Dutch)
Los Angeles Police Department, Art Theft Detail La Mariee
Peter Nahum At The Leicester Galleries, London, UK Archive of past displayed works which are "sold" or "not for sale"
Articles and Reference Sites:
Encyclopedia Britannica complete article on Jacques Villon Note: The full version of the article is available only if you follow this link. If you bookmark the article and return later, or if you navigate directly to the Britannica website, you will see a 100-word preview only. Troubleshooting
Union List of Artist Names (Getty Museum) Reference sheet with basic information about the artist and pointers to other references.
Wikipedia, the "Open Content" Encyclopedia Biographical info
|
|
|
|
|


Surrey to get 314 new child care spaces
These will be at 13 places throughout the city, Surrey-Newton MLA Harry Bains announced Wednesday
by Tom ZytarukSurrey will get 314 new licensed child care spaces at 13 places throughout the city, Surrey-Newton MLA Harry Bains announced Wednesday.
“Families in Surrey have struggled far too long to find affordable, quality child care,” the NDP MLA said, while touring Newton’s Kidzville Learning Center, which will get funding for 56 of those new spaces.
“Through the Childcare BC New Spaces Fund we’re delivering much-needed relief to families by saving them money, and opening up opportunities to return to work,” Bains said.
According to a provincial government press release, child care providers can apply to this fund for new child care spaces “at any time throughout the year under a continuous application process.”
More more information, see www.gov.bc.ca/childcare.


The sources are hosted at https://github.com/wicklet/
.
Wicklet.git
, WickletSupport.git
and WickletRelease.git
.wicklet-release/src/main/resources/repository/*
to ~/.m2/repository/
. The wicklet-release/src/main/resources/patches/
directory has the patch files for building the customized
artifacts. Artifacts available from standard external repositories are not included. Either create a local
cache or access to external repositories, like maven central, is required for the dependencies.wicklet-release
project.wicklet-release
project.WickletGwtSiteTest/../opt/tomcat7/
with the manager
webapp and a proper tomcat-users.xml
. You can find a sample tomcat-users.xml
in wicklet-release/src/main/resources/tomcat7/conf/
. For selenium tests, you need a firefox profile with
javascript and cookies enabled at WickletGwtSiteTest/../opt/firefox/7x16slsr.default/
. Simply copy
a firefox profile from you home directory would probably work.wicklet-release/src/main/resources/tomcat7/webapps/wicklet-site.war
to a tomcat7 installation, with
http port at 8080 and https port at 8443, and access http://localhost:8080/wicklet-site/
with
firefox. The webapp contains the project documentation. Project documentation can also be found in the WickletGwtSite/src/main/webapp/wiki/
directory.WickletGwtSite/target/WickletGwtSite-<version>.war
as wicklet-site.war
.editor
with password editor
. To access the admin
page, login as admin
with password tomcat6
. Note that, the web server need write
access to the wicklet-site
webapp directory in order for comment, wiki edit and database update to
work.


When users see fewer tables, they will enjoy using your data model considerably more. For example, suppose you've imported dozens of tables from many data sources and now the visual appears disorderly. In this case, you need to ensure that, before you begin working on building reports, your data model and table structure are simplified.
A simple table structure will:
Be simple to navigate because of column and table properties that are specific and user-friendly.
Have merged or appended tables to simplify the tables within your data structure.
Have good-quality relationships between tables that make sense.
The following sections further explain how you might work with your tables to ensure a simple and readable table structure.
Assuming that you've already retrieved your data and cleaned it in Power Query, you can then go to the Model tab, where the data model is located. The following image shows how the relationship between the Order and Sales tables can be seen through the OrderDate column.
To manage these relationships, go to Manage Relationships on the ribbon, where the following window will appear.
In this view, you can create, edit, and delete relationships between tables and also autodetect relationships that already exist. When you load your data into Power BI, the Autodetect feature will help you establish relationships between columns that are named similarly. Relationships can be inactive or active. Only one active relationship can exist between tables, which is discussed in a future module.
While the Manage Relationships feature allows you to configure relationships between tables, you can also configure table and column properties to ensure organization in your table structure.
The Model view in Power BI desktop provides many options within the column properties that you can view or update. A simple method to get to this menu to update the tables and fields is by Ctrl+clicking or Shift+clicking items on this page.
Under the General tab, you can:
Edit the name and description of the column.
Add synonyms that can be used to identify the column when you are using the Q&A feature.
Add a column into a folder to further organize the table structure.
Hide or show the column.
Under the Formatting tab, you can:
Change the data type.
Format the date.
For instance, suppose that the dates in your column are formatted, as seen in the previous screenshot, in the form of "Wednesday, March 14, 2001". If you want to change the format so that the date was in the "mm/dd/yyyy" format, you would select the drop-down menu under All date time formats and then choose the appropriate date format, as shown in the following figure.
After selecting the appropriate date format, return to the Date column, where you should see that the format has indeed changed, as shown in the following figure.
Under the Advanced tab, you can:
Sort by a specific column.
Assign a specific category to the data.
Summarize the data.
Determine if the column or table contains null values.
Additionally, Power BI has a new functionality to update these properties on many tables and fields by Ctrl+clicking or Shift+clicking items.
These examples are only some of the many types of transformations that you can make to simplify the table structure. This step is important to take before you begin making your visuals so that you don't have to go back and forth when making formatting changes. This process of formatting and configuring tables can also be done in Power Query.


| Event Name: |
|
| Event Date: |
Format: |
| Paste Team List Here => |
|
| Number of Teams Per Pool: |
|
| Total Number of Pools: |
(0 = total teams / teams per pool) |
| Include Power Pools: |
|
| Number of Power Pools: |
|
| Teams per Power Pool: |
|
| Avoid Same Club in Same Pool: |
|
Dates, Times, & Locations: |
|
|


The BU Phonetic Keyboarding System
Albert Bickford
The BU Phonetic Keyboard provides access to a wide range of characters for Latin-based scripts in Unicode 4.1.0 (www.unicode.org), including:
- English, Spanish, French, German, and other major European languages
- nearly complete set of IPA and Americanist phonetic symbols, include obscure and obsolete symbols
- special characters commonly-used in typesetting
- arrows
- common mathematical, numeric, and currency symbols
PDF format documentation


import "log/syslog"
syslog 包提供一个简单的系统日志服务的接口。 It can send messages to the syslog daemon using UNIX domain sockets, UDP or TCP.
Only one call to Dial is necessary. On write failures, the syslog client will attempt to reconnect to the server and write again.
The syslog package is frozen and is not accepting new features. Some external packages provide more functionality. See:
https://godoc.org/?q=syslog
doc.go syslog.go syslog_unix.go
NewLogger creates a log.Logger whose output is written to the system log service with the specified priority. The logFlag argument is the flag set passed through to log.New to create the Logger.
The Priority is a combination of the syslog facility and severity. For example, LOG_ALERT | LOG_FTP sends an alert severity message from the FTP facility. The default severity is LOG_EMERG; the default facility is LOG_KERN.
const ( // From /usr/include/sys/syslog.h. // These are the same on Linux, BSD, and OS X. LOG_EMERG Priority = iota LOG_ALERT LOG_CRIT LOG_ERR LOG_WARNING LOG_NOTICE LOG_INFO LOG_DEBUG )
const ( // From /usr/include/sys/syslog.h. // These are the same up to LOG_FTP on Linux, BSD, and OS X. LOG_KERN Priority = iota << 3 LOG_USER LOG_MAIL LOG_DAEMON LOG_AUTH LOG_SYSLOG LOG_LPR LOG_NEWS LOG_UUCP LOG_CRON LOG_AUTHPRIV LOG_FTP LOG_LOCAL0 LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4 LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 )
type Writer struct {
// contains filtered or unexported fields
}
A Writer is a connection to a syslog server.
Dial establishes a connection to a log daemon by connecting to address raddr on the specified network. Each write to the returned writer sends a log message with the given facility, severity and tag. If network is empty, Dial will connect to the local syslog server. Otherwise, see the documentation for net.Dial for valid values of network and raddr.
New establishes a new connection to the system log daemon. Each write to the returned writer sends a log message with the given priority and prefix.
Alert logs a message with severity LOG_ALERT, ignoring the severity passed to New.
Close closes a connection to the syslog daemon.
Crit logs a message with severity LOG_CRIT, ignoring the severity passed to New.
Debug logs a message with severity LOG_DEBUG, ignoring the severity passed to New.
Emerg logs a message with severity LOG_EMERG, ignoring the severity passed to New.
Err logs a message with severity LOG_ERR, ignoring the severity passed to New.
Info logs a message with severity LOG_INFO, ignoring the severity passed to New.
Notice logs a message with severity LOG_NOTICE, ignoring the severity passed to New.
Warning logs a message with severity LOG_WARNING, ignoring the severity passed to New.
Write sends a log message to the syslog daemon.
☞ This package is not implemented on Windows. As the syslog package is frozen, Windows users are encouraged to use a package outside of the standard library. For background, see https://github.com/golang/go/blob/master/issue/1108.
☞ This package is not implemented on Plan 9.
☞ This package is not implemented on NaCl (Native Client).


ADD STUDENT DETAILS
STUDENT ID
STUDENT NAME
GENDER
MALE
FEMALE
DATE OF BIRTH
CITY
STATE
EMAIL
QUALIFICATION
STREAM
ADD STUDENT


Numbers 1:16
These were the renowned of the congregation, princes of the tribes of their fathers, heads of thousands in Israel.


ESP8266 Workshop
Bonus 1: Control
Group
-
1
2
3
4
5
6
7
8
9
10
B1
Buttons!
Ask the instructor for some buttons and try to add control to the device with them as well.
You might want to read about
switch debounce
before writing the code
If you're done - call an instructor to check and to get your points before continuing
Click to continue to another bonus task
Done


Computing CS 1A - COMPUTER PROGRAMMING AND ORGANIZATION
Offered: Fall
This course is open ONLY to 1st year entering CCS Computing Majors. All others are by permission of the instructor only.
This course is the first half of a two quarter sequence (CMPTGCS 1A, CMPTGCS 1B) designed to prepare students to take upper division courses in Computing, and participate in undergraduate research projects in Computing under the direction of CCS and College of Engineering Computing faculty.
In both quarters, the course is paired with CMPTGCS 1L, “Programming Lab”, where students undertake individual and group programming projects to build and reinforce their skills and knowledge.
1A provides students with the opportunity to build skills and knowledge in the following areas: problem solving and algorithm development, C and C++ programming, software development tools, programming language paradigms (structured, functional and object-oriented programming), basic UNIX utilities and tools, basic data structures including arrays and linked lists representations of lists, stacks, queues, and binary trees, binary and linear search, sorting techniques, iteration vs. recursion, basic running time analysis, and data representation.
In addition to basic skills in C and C++ (which is a fundamental preparation for upper division CS courses at UCSB), other programming languages such as Java, Scheme, Python, JavaScript and others may be explored either because of the principles they illustrate, or based on student interest.
Computing CS 1B - COMPUTER PROGRAMMING AND ORGANIZATION 2
Offered: Fall
This course is the second half of a two quarter sequence (CS1A/CS1B) designed to prepare students to take upper division courses in Computer Science, and participate in undergraduate research projects in Computer Science under the direction of CCS and College of Engineering Computer Science faculty. In both quarters, the course is paired with CS1L, “Programming Lab”, where students undertake individual and group programming projects to build and reinforce their skills and knowledge.
CS1B focuses on modern computer architectures from ground up. The goal is to develop a complete understanding of how hardware and software comes together, and how programming languages evolve as layered abstractions starting from logic gates. We cover the full spectrum of languages from instruction set architectures, to assembly, structured high-level, to object-oriented and scripting languages. We continue with language translation and foundational operating systems, and networking particularly as it relates to modern computer and communication architectures.
Although class space may be acquired via GOLD, final enrollment will be determined by the instructor. This course is required for all first-year CCS Computing students.
Computing CS 1L - COMPUTER PROGRAMMING LAB
Offered: Fall, Winter
This course is required for all freshmen (first-year) and lower division CCS Computing majors.
Students taking this course will have an opportunity to build a piece of software of their own design, guided by the instructor, and supported by the community of fellow students.
It is a hands-on project and assignment-based course where students will gain strong practical and technical skills in various programming languages including C, C++, and Java, UNIX/Linux: shell, tools, utilities and programming environments, user interfaces, and software engineering principles.
The course is open to all CCS students who need additional training and practical insight that is needed to take upper division Computing Courses.
This is a 4 units credit course. Units awarded will be based upon attendance, general homework assignments, and individual projects. Instruction and hands on lab work will be 100% in the classroom, where students are expected to work on their own laptop computers. If the student does not own a computer he/she should check with the instructor for alternative arrangements.
This course roughly corresponds to CMPSC 48 in the College of Engineering Computing curriculum.
Computing CS 2 - FOUNDATIONS OF COMPUTER SCIENCE
Offered: Fall
Mathematical foundations of computer science, including sets, relations, functions, logic, and combinatorics.


→ The Rise and Fall of PHP
Lauren Orsini with ReadWrite on the rise and fall of PHP:
Today, PHP is past its prime. According to job search engine Indeed.com, PHP job listings peaked around 2011 and have since plummeted nationally. PHP is especially confusing because of its awkward start. While Python and Ruby began as functional languages from the start, PHP was originally designed to automate the building of HTML templates, and grew into a functional language later. As it added functionality, it picked up a lot of what Moor called its “quirks and oddities.”
From 2005 to 2010, I was a full-blown LAMP (Linux, Apache, MySQL, PHP) developer. In those days, it was the profession to have; we all knew the deficiencies and oddities of PHP, but the industry was booming. We figured that since it had lingered this far, it had eclipsed any sort of obsolescence.
It seems we were wrong.
It’s interesting to look the well-curated communities devoted to exposing the peculiarities of PHP (such as PHP Sadness, PHP turtles, and PHPWTF). The passion with which the webdev community has documented PHP’s shortcomings tells me all I need to know: PHP is dying.
Farewell, old friend. You were crazy, to be sure, but I learned a lot because of you. I’ll remember you always.
→ Jared Sinclair’s New Job
Jared Sinclair on taking a full time development job:
I’m happy to say that, starting Monday, I will be joining Bloglovin as Lead iOS Engineer. They’re a smart and fun group of men and women. It will be an honor to be a part of them. I can’t speak publicly about what we’ll be doing together, but I’m excited about it.
Although I’m happy for Jared, this part made me sad:
Due to potential conflicts of interest between Unread and Bloglovin, I won’t be adding new features to either the iPhone or iPad version of Unread. This is by choice on my part. I like to pour myself into my work. I wouldn’t feel right doing it any other way.
I get it, but it’s still disappointing. I was in the middle of attempting to love Unread. Given that it will stay in its current state into perpetuity, that experiment has all but ended.
Link Mash (August 7, 2014)
The weekly Link Mash is a curated selection of tools, stories, and other links that I found during my travels on the web. All of my links can be found on my Pinboard; you can also find the Link Mash archives here.
Better Evernote Filing
You know how it goes: when you discover a cool “something” somewhere, you immediately begin to try to apply it to everything else.


Computer ports are interfaces between peripheral devices and the computer. They are mainly found at the back of the computer but are often also built into the front of the computer chassis for easy access.
A 9-pin port. Mice and external modems were connected to these ports. They are turquoise in color.
A 25-pin port used to connect printers, scanners, external hard disks, zip drives, etc to the computer. Burgundy in color, they are often called LPT ports (LPT1, LPT2, etc).
Used to connect a monitor to the computer system. There are two types:
This is a 15-pin port and is blue in color. It is an anlogue port and is being replaced by DVI port.
White in color. It is a digital port. This means that no conversion is necessary between the computer and the monitor and that means that images can be produced more quickly on the monitor.
Used to connect keyboards and mice to the computer. The keyboard port is purple and the mouse port is green in color.
Used to connect a modem to a telephone line. RJ11 is the technical term for the port.
Intended to replace serial, parallel and PS/2 ports with a single standard. 127 devices can be connected to a single USB port.
Hot Swappable - devices can be connected and disconnected while the computer is on.
(IEEE 1394) is an Apple technology. There are two versions available and a third is planned.
Used to connect to a network. Known as RJ45, it is larger than a modem port.
Used to input and output audio from a computer. Three mini jack ports but there maybe more.
Serial Advanced Technology Attachment, allows faster data transfer speeds than IDE.


NetEase Earnings: NTES Stock Drops 8% on Q3 Revenue Miss
NTES beat EPS estimates for the quarter
NetEase (NASDAQ:NTES) earnings for the Chinese tech company’s third quarter of 2019 have NTES stock on the move Wednesday. The company reported adjusted earnings per share of $5.12 on revenue of $2.05 billion. This compares to Wall Street’s estimates of $3.12 per share and revenue of $2.45 billion.
Let’s take a closer look at the most recent NetEase earnings report.
- Per-share earnings for the quarter are up 179.78% from the $1.18 reported during the same time last year.
- Revenue is 9.63% higher YoY than $1.87 billion.
- Operating income of $466.55 million is a %25.60 improvement from the $360.00 million reported in the third quarter of 2018.
- The NetEase earnings report also includes a net income of $466.55 million.
- This is an 83.91% increase over the company’s net income of $253.68 million in the same period of the year prior.
William Ding, Chief Executive Officer and Director of NetEase, says this about the Q3 NTES stock earnings.
“Online games remain the cornerstone of our business with steady growth from our existing titles and exciting new titles in China and globally. Our flagship title Fantasy Westward Journey Online reached new record high gross billings this quarter. We also advanced our international brand with more hit titles such as Knives Out, Identity V and Life-After in Japan.”
It’s worth noting that company leaders will be going over the NetEase earnings report in a conference call tonight. This will take place at 9:00 p.m. Eastern Time. Listeners cal dial in the old-fashioned way or through a webcast.
NTES stock closed out the day without much movement. The stock is currently down 7.93% in after-hours trading on Wednesday.
As of this writing, William White did not hold a position in any of the aforementioned securities.


The following people in your organization will need to provide an authorization for a security screening and financial integrity check. Authorizations can only be provided by the individual themselves.
You will need to provide an authorization for a security screening and financial integrity check.
Send authorization requests for each individual listed below


8 general-purpose 8-bit numeric registers R0-R7.
These registers only hold values between 0-255. After performing math on registers in the emulator, bitwise-AND the result with 0xFF (255) to keep the register values in that range.
PC
: Program Counter, address of the currently executing instruction
IR
: Instruction Register, contains a copy of the currently executing instruction
MAR
: Memory Address Register, holds the memory address we’re reading or writing
MDR
: Memory Data Register, holds the value to write or the value just read
FL
: Flags, see below
The flags register FL
holds the current flags status. These flags can change based on the operands given to the CMP
opcode.
The register is made up of 8 bits. If a particular bit is set, that flag is “true”.
FL
bits: 00000LGE
L
Less-than: during a CMP
, set to 1 if registerA is less than registerB, zero otherwise.
G
Greater-than: during a CMP
, set to 1 if registerA is greater than registerB, zero otherwise.
E
Equal: during a CMP
, set to 1 if registerA is equal to registerB, zero otherwise.
The LS-8 has 8-bit addressing, so can address 256 bytes of RAM total.
Memory map:
top of RAM
+-----------------------+
| FF I7 vector | Interrupt vector table
| FE I6 vector |
| FD I5 vector |
| FC I4 vector |
| FB I3 vector |
| FA I2 vector |
| F9 I1 vector |
| F8 I0 vector |
| F7 Reserved |
| F6 Reserved |
| F5 Reserved |
| F4 Key pressed | Holds the most recent key pressed on the keyboard
| F3 Start of Stack |
| F2 [more stack] | Stack grows down
| ... |
| 01 [more program] |
| 00 Program entry | Program loaded upward in memory starting at 0
+-----------------------+
bottom of RAM
The SP points at the value at the top of the stack (most recently pushed), or at address F4
if the stack is empty.
There are 8 interrupts, I0-I7.
When an interrupt occurs from an external source or from an INT
instruction, the appropriate bit in the IS register will be set.
Prior to instruction fetch, the following steps occur:
maskedInterrupts
.
maskedInterrupts
is checked, starting from 0 and going up to the 7th bit, one for each interrupt.
maskedInterrupts
.
If a bit is set:
PC
register is pushed on the stack.
FL
register is pushed on the stack.
While an interrupt is being serviced (between the handler being called and the IRET
), further interrupts are disabled.
See IRET
, below, for returning from an interrupt.
0xF4
.
When the LS-8 is booted, the following steps occur:
R0
-R6
are cleared to 0
.
R7
is set to 0xF4
.
PC
and FL
registers are cleared to 0
.
0
.
Subsequently, the program can be loaded into RAM starting at address 0x00
.
PC
is fetched from RAM, decoded, and executed.
PC
itself, the PC
is advanced to point to the subsequent instruction.
HLT
instruction, go to step 1.
Some instructions set the PC directly. These are:
In these cases, the PC
does not automatically advance to the next instruction, since it was set explicitly.
Meanings of the bits in the first byte of each instruction: AABCDDDD
AA
Number of operands for this opcode, 0-2
B
1 if this is an ALU operation
C
1 if this instruction sets the PC
DDDD
Instruction identifier
The number of operands AA
is useful to know because the total number of bytes in any instruction is the number of operands + 1 (for the opcode). This allows you to know how far to advance the PC
with each instruction.
It might also be useful to check the other bits in an emulator implementation, but there are other ways to code it that don’t do these checks.
Glossary:
register: takes a register number as an argument
iiiiiiii
: 8-bit immediate value
00000rrr
: Register number
00000aaa
: Register number
00000bbb
: Register number
Machine code values shown in both binary and hexadecimal.
This is an instruction handled by the ALU.
ADD registerA registerB
Add the value in two registers and store the result in registerA.
Machine code:
10100000 00000aaa 00000bbb
A0 0a 0b
This is an instruction handled by the ALU.
AND registerA registerB
Bitwise-AND the values in registerA and registerB, then store the result in registerA.
Machine code:
10101000 00000aaa 00000bbb
A8 0a 0b
CALL register
Calls a subroutine (function) at the address stored in the register.
CALL
is pushed onto the stack. This allows us to return to where we left off when the subroutine finishes executing.
Machine code:
01010000 00000rrr
50 0r
This is an instruction handled by the ALU.
CMP registerA registerB
Compare the values in two registers.
If they are equal, set the Equal E
flag to 1, otherwise set it to 0.
If registerA is less than registerB, set the Less-than L
flag to 1, otherwise set it to 0.
If registerA is greater than registerB, set the Greater-than G
flag to 1, otherwise set it to 0.
Machine code:
10100111 00000aaa 00000bbb
A7 0a 0b
This is an instruction handled by the ALU.
DEC register
Decrement (subtract 1 from) the value in the given register.
Machine code:
01100110 00000rrr
66 0r
This is an instruction handled by the ALU.
DIV registerA registerB
Divide the value in the first register by the value in the second, storing the result in registerA.
If the value in the second register is 0, the system should print an error message and halt.
Machine code:
10100011 00000aaa 00000bbb
A3 0a 0b
HLT
Halt the CPU (and exit the emulator).
Machine code:
00000001
01
This is an instruction handled by the ALU.
INC register
Increment (add 1 to) the value in the given register.
Machine code:
01100101 00000rrr
65 0r
INT register
Issue the interrupt number stored in the given register.
This will set the _n_th bit in the IS
register to the value in the given register.
Machine code:
01010010 00000rrr
52 0r
IRET
Return from an interrupt handler.
The following steps are executed:
FL
register is popped off the stack.
PC
.
Machine code:
00010011
13
JEQ register
If equal
flag is set (true), jump to the address stored in the given register.
Machine code:
01010101 00000rrr
55 0r
JGE register
If greater-than
flag or equal
flag is set (true), jump to the address stored in the given register.
01011010 00000rrr
5A 0r
JGT register
If greater-than
flag is set (true), jump to the address stored in the given register.
Machine code:
01010111 00000rrr
57 0r
JLE register
If less-than
flag or equal
flag is set (true), jump to the address stored in the given register.
01011001 00000rrr
59 0r
JLT register
If less-than
flag is set (true), jump to the address stored in the given register.
Machine code:
01011000 00000rrr
58 0r
JMP register
Jump to the address stored in the given register.
Set the PC
to the address stored in the given register.
Machine code:
01010100 00000rrr
54 0r
JNE register
If E
flag is clear (false, 0), jump to the address stored in the given register.
Machine code:
01010110 00000rrr
56 0r
LD registerA registerB
Loads registerA with the value at the memory address stored in registerB.
This opcode reads from memory.
Machine code:
10000011 00000aaa 00000bbb
83 0a 0b
LDI register immediate
Set the value of a register to an integer.
Machine code:
10000010 00000rrr iiiiiiii
82 0r ii
This is an instruction handled by the ALU.
MOD registerA registerB
Divide the value in the first register by the value in the second, storing the remainder of the result in registerA.
If the value in the second register is 0, the system should print an error message and halt.
Machine code:
10100100 00000aaa 00000bbb
A4 0a 0b
This is an instruction handled by the ALU.
MUL registerA registerB
Multiply the values in two registers together and store the result in registerA.
Machine code:
10100010 00000aaa 00000bbb
A2 0a 0b
NOP
No operation. Do nothing for this instruction.
Machine code:
00000000
00
This is an instruction handled by the ALU.
NOT register
Perform a bitwise-NOT on the value in a register, storing the result in the register.
Machine code:
01101001 00000rrr
69 0r
This is an instruction handled by the ALU.
OR registerA registerB
Perform a bitwise-OR between the values in registerA and registerB, storing the result in registerA.
Machine code:
10101010 00000aaa 00000bbb
AA 0a 0b
POP register
Pop the value at the top of the stack into the given register.
SP
to the given register.
SP
.
Machine code:
01000110 00000rrr
46 0r
PRA register
pseudo-instruction
Print alpha character value stored in the given register.
Print to the console the ASCII character corresponding to the value in the register.
Machine code:
01001000 00000rrr
48 0r
PRN register
pseudo-instruction
Print numeric value stored in the given register.
Print to the console the decimal integer value that is stored in the given register.
Machine code:
01000111 00000rrr
47 0r
PUSH register
Push the value in the given register on the stack.
SP
.
SP
.
Machine code:
01000101 00000rrr
45 0r
RET
Return from subroutine.
Pop the value from the top of the stack and store it in the PC
.
Machine Code:
00010001
11
This is an instruction handled by the ALU.
Shift the value in registerA left by the number of bits specified in registerB, filling the low bits with 0.
10101100 00000aaa 00000bbb
AC 0a 0b
This is an instruction handled by the ALU.
Shift the value in registerA right by the number of bits specified in registerB, filling the high bits with 0.
10101101 00000aaa 00000bbb
AD 0a 0b
ST registerA registerB
Store value in registerB in the address stored in registerA.
This opcode writes to memory.
Machine code:
10000100 00000aaa 00000bbb
84 0a 0b
This is an instruction handled by the ALU.
SUB registerA registerB
Subtract the value in the second register from the first, storing the result in registerA.
Machine code:
10100001 00000aaa 00000bbb
A1 0a 0b
This is an instruction handled by the ALU.
XOR registerA registerB
Perform a bitwise-XOR between the values in registerA and registerB, storing the result in registerA.
Machine code:
10101011 00000aaa 00000bbb
AB 0a 0b


Prayer at Shir Tikvah is a warm, participatory, and joyful experience, accessible no matter your background, how much or how little Hebrew you know, or whether you’re six or sixty-six. Music is a central component, an evocative blend of Hasidic, traditional, and contemporary melodies and words, intended to open our hearts and minds to prayer and contemplation. The spirit is contagious, and you will find yourself singing along, humming, or tapping your foot—or all three!
Whether in our beautiful sanctuary, outdoors, or in each other’s homes, prayer at Shir Tikvah builds our community from the inside out.


Comments
-
Greg Hurrell
See also ticket #1248, "Auto-save posts/articles etc being edited".
-
Greg Hurrell
Possibly useful examples:
-
Greg Hurrell
Another option to consider is storing stuff in a Git repo, which would give us some bonus behavior (logging, diffs) "for free", but would most likely be a little more IO intensive (forking out to
git
rather than accessing the database). -
Greg Hurrell
Another case which just bit me: session expired when window was left open for a long time. When I hit the submit button I got auto-redirected to the log-in page, and when I logged in I could no long use the back button to get back to the form (probably would have been fine if I had just clicked back rather than logging in).
So really need some kind of auto-save functionality for that.
-
Greg Hurrell
See also ticket #1935, which is about adding versioning to the snippets model.
-
Greg Hurrell
Easiest way to do this will be to have a
versions
table with a Yaml or JSON serialization of the versioned model (along with some meta info, such as related type, related id etc. -
Greg Hurrell
Envisioning an API something like this:
class Article < ActiveRecord::Base version :title, :redirect, :body end a = Article.first a.id #=> 1 a.version #=> 1 a.update_attribute(:body, 'more info!') a.version #=> 2 a.rollback a.body #=> 'original body' a.version #=> 1 a.reload a.version #=> 2 a.body #=> 'more info!' a.rollback! a.body #=> 'original body' a.version #=> 3 a.reload a.body #=> 'original body' a.rollback(3.minutes.ago) a.version #=> 1 a.reload a.version #=> 3 a.rollback!(3.minutes.ago) a.reload a.version #=> 4 Version #=> Version(id: integer, versioned_id: integer, versioned_type: string, version: integer, content: text) Version.last.content #=> { title: 'dat article', redirect: '', body: 'original body' }
-
Greg Hurrell
See also issue #2198.
Add a comment
Comments are now closed for this issue.