--- layout: home #author_profile: true header: overlay_image: /images/headers/banner-planet.jpg overlay_filter: 0.5 caption: "Image credit: [**Tyler Young**](https://www.deviantart.com/tylercreatesworlds/gallery/)" use_math: true author_profile: true feature_row: - image_path: /images/headers/banner-planet_tn.jpg alt: "Blog" title: "Blog" excerpt: "Mostly about Math and Science" url: "/blog" btn_label: "Read More" btn_class: "btn--primary btn--small" # - image_path: /images/headers/banner-news3.jpg # alt: "news" # title: "News" # excerpt: "Selected Scientific News" # url: "news" # btn_label: "Under development" # btn_class: "btn--primary btn--small" - image_path: /images/headers/banner-marx-full_tn.jpg alt: "book reviews" title: "Book Reviews" excerpt: "Books I have read in French and English" url: "/books" btn_label: "Read More" btn_class: "btn--primary btn--small" ---
Welcome to my personal page. You will find a list of the latest blog entries here below. You can use the main navigation bar to access other contents.
I try to update this website as regularly as possible. You can follow me on twitter to get notified when new content is added.


Priest Yohanes:
Ah... you are walking a different path from my own. All i can give you are the teaching of Einhasad.


Chapter 16 Stickleback Manipulations
+++
16.1 Live fin clipping of stickleback
(created April 06, 2010 by M Currey)
16.1.1 Materials:
- MS-222 Anesthesia solution (see fish anesthesia and euthanasia SOP)
- Beakers of fish water
- Forceps and scissors
- Bucket of ice
- 1.5ml tubes
- Melafix (antifungal and antibacterial agent)
16.1.2 Procedure:
- To minimize fish’s exposure to MS-222, do all labeling of tubes and vials prior to fin clipping.
- Place fish in beaker containing MS-222 anesthesia dose (168 mg/L).
- Once the breathing of the fish slows take fish out of water and remove caudal fin with scissors and forceps.
- Note: To observe slowed breathing watch the operculum movement. This movement will slow and the fish will turn on it’s side.
- Place fin in labeled 1.5 ml tube on ice.
- Put fish into clean system water and move gently to force water over gills.
- Once fish is revived and swimming upright, put fish into container back on the aquaculture system and add Melafix according to manufacturers recommendations.
16.2 Live stickleback alizarin staining
(4/6/10 by M Currey, adapted from protocol by Bonnie Ullmann.)
16.2.1 Materials:
- MS-222 Anesthesia solution (see fish anesthesia and euthanasia SOP)
- Beakers of fish water
- Alizarin Red S (sodium alizarin sulfonate)
16.2.2 Solutions:
- Alizarin stock solution: 0.5g Alizarin red/100ml in sterile water (SIGMA cat# A5533 Alizarin Red S, certified).
For 1 Liter: - 10 ml 1M HEPES - 980ml Embryo medium (Zebrafish Book, Westerfield, et al). - Add 10 ml 0.5% Alizarin Stock in sterile water
For 50 ml (enough for 100mm diameter petri dish):
- 500 µl 1 M HEPES
- 49 ml Embryo medium
- Add 500 µl 0.5% Alizarin Stock in sterile water
16.2.3 Procedures:
- Stain 1-2 hours for larvae to overnight for adult fish in the dark. Rinse thoroughly with embryo medium. Can observe right away, but background continues to go down with time.
- Bone fluorescence will decrease over time, so plan on imaging the same day if possible.
- Keep fish in the dark as much as is reasonably convenient.
+++
16.3 Embryo Injections
(from: Zebrafish Book 4th addition chp 5)
CHAPTER 5 - CELLULAR METHODS (Source: E. Weinberg)
This is an easy method for holding embryos while injecting DNA, lineage tracer dyes, etc., without removing their chorions. The embryos are held in wedged-shaped troughs made with a plastic mold in 1.5% agarose. Each trough can hold approximately 35 embryos (with chorions). Embryos can be aligned by gently tamping them down with forceps. Agarose is useful because pipette tips generally will not break if they accidently touch the surface. As the pipette penetrates the chorion, the embryo is forced against the rear vertical wall of the trough. The exact positioning of the pipette tip within the embryo is achieved by slight movement of the pipette with a micromanipulator or by movement of the stage. If the pipette tip is thin and long enough, it can be withdrawn from the chorion without dragging the embryo out of the trough. A problem with thin pipettes, however, is that they lack the tensile strength to penetrate the chorion and bend when forced onto the chorion surface. Thicker pipettes do not easily slip out of the chorion, although the embryo can be held with forceps as the pipette is slowly withdrawn. Alternatively, a plastic cover can be used to impede the withdrawal of the embryo. The plastic cover fits snugly into the indentation in the agarose created by the plastic mold. The slits in the cover can be aligned with the somewhat narrower troughs in the agarose by sliding the cover from side to side. (The width of the cover is 2.0 mm less than that of the mold allowing one to achieve the desired position for injection.) The cover is 1.0 mm thick at the border, but only 0.7 mm thick between the openings so the embryos will slide off the pipette more readily.
16.3.1 Making the chambers:
- Pour approximately 20 ml of hot 1.5% agarose in embryo medium into a 100 x 15 Petri dish on a level surface. Wait until completely solidified.
- Add an additional 20 ml of the 1.5% agarose to the dish. Set the plastic mold (teeth down) into the liquid agarose overlay, tapping to eliminate any bubbles.
- After the agarose sets, add a small amount of medium, wrap the Petri dish in parafilm, and store in the refrigerator.
16.3.2 Injecting:
- Warm the Petri dish to the temperature you prefer for injection (embryos can tolerate 18°C for about 1 hour, and the slower division rate allows more time to inject at the 1 and 2 cell stage).
- Remove the plastic mold.
- Position the dish on a microscope stage and adjust the angle of the pipette so that you can aim directly into the trough.
- Transfer embryos into the troughs and set the plastic cover with slits into the depression in the agarose.
- Using forceps, align the embryos all in the same orientation. Add enough culture medium so that the level reaches the plastic edges of the slits. Gently tamp the embryos down into the trough.
- Using controls on the micromanipulator, force the pipette through the chorion and the yolk cell, entering the embryonic cell(s) from the yolk cell. (You might prefer to enter the embryonic cell directly; in this case, you would choose a different orientation of the embryo in the trough.)
- As the pipette goes through the yolk, move the Petri dish a bit so that the pipette is close to the plastic cover.
- Inject the desired volume of solution and then withdraw the pipette with a slow steady motion. The embryo will catch on the plastic cover and drop back into the trough.
- Transfer the embryos into a dish with embryo medium and maintain at 28.5°C for further development.
Top view and cross-section of the plastic slot maker (A) and plastic cover piece (B). All dimensions are in mm. An enlarged view of a cross-section of the teeth is shown in the lower part of panel (A). The area within the dotted lines, in the diagram of the cover piece in panel (B), is 0.7 mm thick whereas the border area outside the dotted lines is 1.0 mm thick. Schematic cross-sectional view of the injection set-up as an embryo is injected (a) and as the pipette is withdrawn (c), and top views of an actual embryo being injected (b) and as the pipette is withdrawn (d). Arrows in (a) and (c) indicate the direction of movement of the pipette. Arrows in (b) and (d) indicate the position of the vertical wall of the trough (the trough is difficult to see in the photograph because the agarose has low contrast; the two strong lines in each photograph are the edges of the slots).
16.4 Salinity Exposure
(created August 8, 2011 by Ann Petersen)
16.4.1 Materials:
- MS-222 Anesthesia solution (168 mg/L) (see fish anesthesia and euthanasia SOP)
- Glass containers of fish water of varying salinity ranging from 2 - 32 ppt
- Glass 1 gallon fish containers (not plastic due to endocrine disruptive properties)
- Instant Ocean saltwater mix at concentrations of
- 2ppt “Freshwater” environment (40g Instant Ocean/ 20L Nanopure H20)
- 15ppt “Brackish” environment (300g Instant Ocean/ 20L Nanopure H20)
- 30ppt “Ocean” environment (600g Instant Ocean/ 20L Nanopure H20)
- Stickleback fish feeding SOP supplies (artemia, dry flakes, etc.)
- Stickleback fish crossing and rearing SOP supplies.
16.4.2 Procedure:
- Follow stickleback crossing and rearing SOP to generate 100-200 fertilized embryos.
- Place petri dish with fertilized eggs and embryo medium (6ppt Instant Ocean) in common 20C incubatorfor 4 hours.
- After 4 hours, remove any embryos that are arrested or deformed. Using a transfer pipette, transfer the healthy embryos to a petri dish containing the experimental treatment, freshwater, brackish water, or ocean water.
- Return the embryos to the 20C incubator
- On a daily basis, check on development of embryos. Change water every day, making sure to replace with correct salinity treatment. Remove the dead or deformed.
- At 8 dpf, after the embryos have hatched, move them to a 1 gallon glass jar full of the appropriate salinity water.
- On 9dpf, feed each jar enough artemia so that it is consumed by the juveniles within 15-30 minutes.
- Feed and change water every other day. Do not overcrowd as outlined in stickleback SOP. Check on fish at least twice EVERY DAY, and use the care checklist to denote daily health check, feeding, and water change. Look for sick or stressed fish (low rate of opercular fluttering, bad color, floating upside down, etc.)
- Check water quality on two random tanks in each treatment once every two days before water has been changed. If ammonia and/or nitrite are detected then change water more frequently, check water quality daily, and denote this on checklist. Ideal ammonia and nitrite levels are 0 ppm.At designated time of interest up to 40 days post-fertilization, remove fish with a small clean net
- Place fish in beaker containing MS-222 euthanasia dose (300 mg/L).
- Wait for fish’s operculum to stop moving, wait 10 minutes and fix.
- Fix appropriately in liquid nitrogen, 4%PFA, or Bouin’s.
- If downstream application requires instantaneous, non stressed measurement of gene transcription, remove fish from water, rapidly blot, and sacrifice directly into liquid nitrogen or RNAlater.
16.5 Intraperitoneal colchicine injection into adult stickleback.
(created July 12, 2013 by Susie Bassham)
16.5.1 Purpose:
colchicine causes dividing cells to accumulate in metaphase. Cells harvested from spleen and/or kidney of euthanized, colchicine-injected fish will be used for preparing metaphase chromosome spreads on slides. These slides will be used in Fluorescent In Situ Hybridization (FISH) experiments to detect chromosome structural variations. Every effort will be made to maximize the number FISH experiments that can be carried out from the tissue of each fish sacrificed.
16.5.2 Materials:
• 168 mg/L MS-222 • Slit Sponge • Colchine in Cortland’s Salt Solution (see recipe below) • 35 G beveled steel needle • 300 mg/L MS-222
Cortland’s Salt Solution For 100 ml volume dissolve the following in distilled water:
- 725 mg NaCl (124.1 mM)
- 38 mg KCl (5.1 mM)
- 41 mg Na2HPO4
- (2.9 mM)
- 24 mg MgSO4∙7H2O (1.9 mM)
- 16 mg CaCL2∙2H2O (91.4 mM)
- 100 mg NaHCO3 (11.9 mM)
- 4 g Polyvinylpyrrolidone (PVP) (4%)
- 1,000 USP units of Heparin
Filter, sterilize and store at 4°C.
16.5.3 Procedure:
- Anesthetize adult stickleback in buffered 168 mg/L MS-222.
- Cradle anesthetized fish, ventral side up, in a slit sponge saturated with 168mg/L MS-222.
- Inject 10 µl of filter-sterilized 1% colchicine in Cortland’s salt solution into the peritoneal cavity using a 35G beveled steel needle inserted near the pelvic spines.
- Quickly return fish to fish water for recovery from anesthesia.
- 12-14 hours later, euthanize fish with 300 mg/mL MS-222 until opercular movement stops (See Euthanization SOP).
16.5.4 Citations:
Urton, J.R, McCann, S.R., and Peichel, C.L. (2011) Karyotype differentiation between two stickleback species (Gasterosteidae) Cytogenet Genome Res. 135(2): 150–159. doi: 10.1159/000331232
Kinkel, M. D., Eames, S. C., Philipson, L. H., Prince, V. E. Intraperitoneal Injection into Adult Zebrafish. J. Vis. Exp. (42), e2126, doi:10.3791/2126 (2010).
Perry, S.F., Davie, P.S., Daxboeck, C., Ellis, A.G., & Smith, D.G. (1984). Perfusion methods for the study of gill physiology. In W.S. Hoar & D.J. Randall (Eds.), Gills: Part B. Ion and water transfer (series title: Fish physiology, vol. 10). Orlando: Academic Press.
16.6 EdU labeling of young threespine stickleback
(10/22/2014 by Kristin Alligood)
16.6.1 Purpose:
This protocol allows for visualization of proliferating cells. EdU (5-ethynyl-2’-deoxyuridine) is a small molecule that is incorporated into DNA during active DNA synthesis. Detection is based on a “click reaction,” a copper-catalyzed covalent reaction between and azide and an alkyne. Kit purchased from Invitrogen: Click-iT EdU Alexa Fluor Imaging Kit
16.6.2 Materials:
(Not provided in kit) - Phosphate-buffered saline (PBS, pH 7.2-7.6) - 3% Bovine serum albumin (BSA) in PBS, pH 7.4 - Deionized water - Embryo Medium - 90 mm sterile petri dishes
16.6.3 Procedure:
EdU labeling and fixation:
- Incubate 9-11dpf larvae for 6-8 hours in 1mM EdU (5-ethynyl-2’-deoxyuridine) in embryo medium in 90mm disposable sterile petri dishes (standard)
- Euthanize larvae with MS-222 and fix overnight at 4C in 4% PFA (in PBS), (see embryo euthanasia and fixation protocol)
- Wash fixed fish in PBSTx (1% Triton X-100 in 1x PBS).
- Prepare embryos for fluorescent in situ hybridization for probe of choice (Col10a1)
EdU detection:
- Prepare a 1X Click-iT EdU buffer additive by diluting the 10X stock solution 1:10 in nanopure water. Always prepare this fresh and use the solution on the same day (this is the last component to add in the table).
- To make the 10X stock solution: Use Click-iT EdU buffer additive (Component F)— add 2mL of nano pure water to the bottle, then mix until fully dissolved. After the 10X solution is made, store the remaining stock solution in the -20 freezer.
- Prepare the 1X Click-iT reaction buffer. Prepare from Component D (10X solution).
- Dilute 1:10 with nanopure water
- Prepare the Click-iT reaction cocktail. Add reagents in the order listed: - Wash embryos 4 x 3 min was in 3% BSA in PBST - Incubate in reaction cocktail for 1 hr in dark - Wash with 3% BSA/PBS in dark - Mount on slide with vectashield (includes DAPI in medium)
16.7 Perchlorate Exposure
(8/1/11 by Ann Petersen)
16.7.1 Materials:
- MS-222 Anesthesia solution (see fish anesthesia and euthanasia SOP)
- 2 Glass containers of embryo medium (6ppt Instant Ocean), one with added 100ppm NaCLO4 (sodium perchlorate).
- Glass 1 gallon fish containers (not plastic due to endocrine disruptive properties) with loose fitting lids
- Stickleback fish feeding SOP supplies (artemia, dry flakes, etc.)
- Stickleback fish crossing and rearing SOP supplies.
16.7.2 Procedure:
- Follow stickleback crossing and rearing SOP to generate 100-200 fertilized embryos of both Boot Lake and Rabbit Slough populations.
- Place petri with fertilized eggs in embryo medium (6ppt Instant Ocean) and place in common 20C incubator in Pacific 324 for 4 hours.
- After 4 hours, pipette off any embryos that are arrested or are deformed. Using a transfer pipette, transfer the healthy embryos to a petri dish containing the experimental treatment or the control. Properly dispose of all perchlorate treated water into carboy marked “perchlorate water.” Wear gloves and closed toe shoes.
- Return to 20C incubator marked “perchlorate experiment” for the perchlorate treated embryos. Return controls to common use incubator.
- On a daily basis, check on development of embryos. Change waterevery day, making sure to replace with correct perchlorate treatment. Remove the dead or deformed embryos.
- At 8 dpf, after the embryos have hatched, move them to a 1 gallon glass jar full of the appropriate salinity water.
- On 9dpf, feed the juveniles in each jar enough artemia so that it is consumed within 15-30 minutes.
- Feed and change water every other day. Do not overcrowd as outlined in stickleback SOP. Check on fish at least twice EVERY DAY, and use the care checklist to denote daily health check, feeding, and water change. Look for sick or stressed fish (low rate of opercular fluttering, bad color, floating upside down, etc.)
- Check water quality on two random tanks in each treatment once every two days before water has been changed. If ammonia and/or nitrite are detected then change water more frequently, check water quality daily, and denote this on checklist. Ideal ammonia and nitrite levels are 0ppm.
- At designated time of interest up to 40 days post-fertilization, remove fish with a small clean net
- Place fish in beaker containing MS-222 euthanasia dose (300 mg/L).
- Wait for fish’s operculum to stop moving, wait 10 minutes and fix.
- Fix appropriately in liquid nitrogen, 4%PFA, or Bouin’s.
- If downstream application requires instantaneous, non stressed measurement of gene transcription, remove fish from water, rapidly blot, and sacrifice directly into liquid nitrogen or RNAlater.
16.8 Fish Blood Collection
(8/1/11 by Ann Petersen, modified from Canada Department of Fisheries and Oceans Animal-User Training Template)
16.8.1 Materials:
- MS-222 (tricaine-methanosulfanate)
- Gloves to be worn when handling fish, anaesthesia water, blood samples
- Disinfectant for cleaning after blood sample
- Scalpal or sharp knife for tail ablation
- Sterile needles or vacutainer needles from 14-30 gauge
- Syringe for collecting samples
- Hematocrit tubes
- Critoseal
- Sharps container for needles
- Whatman 903 Specimen collection paper
16.8.2 Human Safety Measures:
- Wear gloves at all times when handling blood collection equipment. While this will not prevent accidents, it may reduce the risk of contamination.
- Never attempt to re-sheath needles. Always discard them into a sharps container immediately after use.
- Never overfill the sharps container
- Place the sharps container in the area you are working to avoid transporting needles outside of your work area.
- Ensure the work area is clean.
- Wash hands after handling fish blood.
16.8.3 Procedure:
- Tail ablation
- Place fish in beaker containing MS-222 euthanasia dose (300 mg/L).
- Wait for fish to slow and become unresponsive to taps on the container to ensure it is fully euthanized
- Sever the caudal peduncle with a scalpel blade or sharp knife
- Fill a heparnized hematocrit tube/capillary tube with the blood as it flows from the caudal vein. Plug one end of the hematocrit tube with critoseal. Spin on microhematocrit centrifuge to separate plasma from red blood cells. Measure hematocrit volume %, Use a pipette or break the capillary to extract the plasma or packed cells as needed.
- Alternatively, collect a 25μL drop of blood at the tail and allow it to drop onto Whatman specimen collection filter paper for some endocrinological downstream applications. Blood spotted filter paper must be dried for 4 hours on the bench away from heat and light, and then may be stored at -20C in a sealed bag with desiccant packs.
- Dispose of fish soma and tail in fish morgue as outlined in Stickleback SOP.
- Clean and disinfect area where blood was collected.


Posted on September 6, 2011.
A while ago I wrote a post about switching back to Vim. Since then I’ve written two plugins for Vim, one of which has been officially “released”.
A couple of people have asked me if I’d write a guide to creating Vim plugins. I don’t feel confident enough to write an official “guide”, but I do have some advice for Vim plugin authors that might be useful.
Other People Who Know More Than I Do
Writing two decently-sized Vim plugins has given me some experience, but there are a lot of people that know far more than I do. There are two in particular that come to mind. I’d love for them to write some guides (or even books) about modern-day Vim scripting.
Tim Pope
The first is Tim Pope. He’s written a ton of Vim plugins like Pathogen, Surround, Repeat, Speeddating and Fugitive. Each of those is clear, focused and polished.
It would be awesome to read a guide on the ins and outs of Vim scripting by him.
Scrooloose
The other person that comes to mind is Scrooloose, author of NERDTree, NERDCommenter and Syntastic.
His plugins are large and full-featured but work incredibly well, considering how tricky and painful Vimscript is to work with. I’d love to read a guide on writing large-scale Vim plugins by him.
Be Pathogen-Compatible
It’s 2011. When writing your plugin, please make its source compatible with Pathogen. It’s very easy to do this — just set up your project’s files like this:
yourplugin/ doc/ yourplugin.txt plugin/ yourplugin.vim ... README LICENSE
This will let users use Pathogen (or Vundle) to install and use your plugin.
The days of “unzip and drag the files into the right directories” and the horror of Vimballs are over. Pathogen and Vundle are the right way to manage plugins, so let your users use them.
Please, For the Love of God, Use normal!
My first piece of actual scripting advice is something simple but important. If
you’re writing a Vim plugin and need to perform some actions, you might be tempted to
use normal
. Don’t.  If you use
plain old normal dd
and I’ve remapped dd
to do something else, the call will use
my mapping and probably not do what your plugin expects. Using normal!
ensures
that the call will do what you expect no matter what the user has mapped.
This is a single instance of a more general theme. Vim is very customizable and users
will do lots of crazy things in their .vimrc
files. If a key can be mapped or
a setting changed, you have to assume that some user of your plugin will have
mapped or changed it.
Mapping Keys the Right Way
Most plugins add key mappings to make them easier to use. Unfortunately this can be tricky to get right. You can never tell what keys your users have already mapped themselves, and shadowing someone’s favorite key mapping will break their muscle memory and annoy them to no end.
When to Map Keys
The first question to ask is whether your plugin needs to map keys itself at all.
My Gundo plugin has only one feature that needs to be mapped to a key in order to make it useful: the “toggle Gundo” action.
Gundo doesn’t map this key itself, because no matter what “default” mapping I pick someone will have already mapped it. Instead I added a section right in the README file that shows how a user can map the key themselves:
nnoremap <F5> :GundoToggle<CR>
By making users add this line to their .vimrc
themselves it shows them which key is
used to toggle Gundo (which they would have to know anyway) and also makes it obvious
how to change it to suit their taste.
imap and nmap are Pure Evil
Sometimes forcing the user to map their own keys won’t work. Perhaps your plugin has many mappings that would be tedious for a user to set up manually (like my Threesome plugin), or its mappings are mnemonic and wouldn’t really make sense if mapped to other keys.
I’ll talk more about how to deal with this in a moment, but the most important thing
to remember when mapping your own keys is that you must always, always,
always use the noremap
forms of the various map
commands.
If you map a key with nmap
and the user has remapped a key that your mapping uses,
your mapped key will almost certainly not do what you want. Using nnoremap
will
ignore user mappings and do what you expect.
This is the same principle as normal
and normal!
: never trust your users’ configurations.
Let Me Configure Mappings
If you feel that your plugin must map some keys, please make those mappings configurable in some way.
There are a number of ways to do this. The easiest way is to provide a configuration option that disables all mappings. The user can them remap the keys as they see fit. For example:
if !exists('g:yourplugin_map_keys') let g:yourplugin_map_keys = 1 endif if g:yourplugin_map_keys nnoremap <leader>d :call <sid>YourPluginDelete()<CR> endif
Normal users will get the mappings automatically set up for them, and power users can remap the keys to whatever they wish to avoid shadowing their own mappings.
If your plugin’s mappings all start with a common prefix (like <leader>
or
<localleader>
) you have another option: allow users to configure this prefix. This
is the approach I’ve used in Threesome. It works like this:
if !exists('g:yourplugin_map_prefix') let g:yourplugin_map_prefix = '<leader>' endif execute "nnoremap" g:yourplugin_map_prefix."d" ":call <sid>YourPluginDelete()<CR>"
The execute
command lets you build the mapping string dynamically so your users can
change the mapping prefix.
There is a third option for solving this problem: the hasmapto()
Vim function.
Some plugins will use this to map a command to a key unless the user has already
mapped that command to something else. I don’t personally like this option because
it feels less clear to me, but I know other people feel differently so I wanted to mention it.
Localize Mappings and Settings
The next step in being a good Vim plugin author is to try to minimize the effects of your key mappings and setting changes. Some plugins will need to have global effects but others will not.
For example: if you’re writing a plugin for working with Python files it should only take effect for Python buffers, not all buffers.
Localizing Mappings
Key binding are easy to localize to single buffers. All of the noremap
commands
can take an extra <buffer>
argument that will localize the mapping to the current buffer.
" Remaps <leader>z globally nnoremap <leader>z :YourPluginFoo<cr> " Remaps <leader>z only in the current buffer nnoremap <buffer> <leader>z :YourPluginFoo<cr>
However, the problem is that you need to run this command in every buffer you want
the mapping active. To do this your plugin can use an autocommand
. Here’s a full
example, using this concept plus the previously mentioned configuration options:
if !exists('g:yourplugin_map_keys') let g:yourplugin_map_keys = 1 endif if !exists('g:yourplugin_map_prefix') let g:yourplugin_map_prefix = '<leader>' endif if g:yourplugin_map_keys execute "autocommand FileType python" "nnoremap <buffer>" g:yourplugin_map_prefix."d" ":call <sid>YourPluginDelete()<CR>" endif
Now your plugin will define a key mapping only for Python buffers, and your users can disable or customize this mapping as they see fit.
This mapping command is quite ugly. Unfortunately that’s the price of using Vimscript and trying to make a plugin that will work for many users. Later I’ll talk about one possible solution to this ugliness.
Localizing Settings
Just as you should make mappings local to buffers when appropriate, you should do the
same with settings like foldmethod
, foldmarker
and shiftwidth
. Not all
settings can be set locally in a buffer. You can read :help <settingname>
to see
if it’s possible.
You can use setlocal
instead of set
to localize settings to individual buffers.
Like with mappings you’ll need to use an autocommand to run the setlocal
command
every time the users opens a new buffer.
Autoload is Your Friend
If your plugin is something that users will be using all the time you can skip this section.
If you’re writing something that will only be used in specific cases, you can help
your users by using Vim’s autoload
functionality to delay loading its code until
the user actually tries to use it.
The way autoload
works is fairly simple. Normally you would bind a key to call one of your
plugin’s functions with something like this:
nnoremap <leader>z :call YourPluginFunction()<CR>
You can use autoloading by prepending yourplugin#
to the name of the function:
nnoremap <leader>z :call yourplugin#YourPluginFunction()<CR>
When this mapping is run, Vim will do the following:
- Check to see if
YourPluginFunction
is already defined. If so, call it. - Otherwise, look in
~/.vim/autoload/
for a file namedyourplugin.vim
. - If it exists, parse and load the file (which presumably defines
YourPluginFunction
somewhere inside of it). - Call the function.
This means that instead of putting all of your plugin’s code in
plugin/yourplugin.vim
you can put just the key mapping code there and pull the rest
out into autoload/yourplugin.vim
.
If your plugin has a decent amount of code this can reduce the startup time of Vim by a significant amount.
Check out the full documentation of autoload
by running :help autoload
to learn much more.
Backwards Compatibility is a Big Deal
Once you’ve written your Vim plugin and released it into the wild, you have to maintain it. Users will find bugs and ask for new features.
Part of being a responsible developer of any kind, including a Vim plugin author, is maintaining backwards compatibility, especially for tools that users will use every day and burn into their muscle memory. Users rely on tools to work, and tools that break backwards compatibility will quickly lose users’ trust.
Maintaining backwards compatibility will cause your plugin’s code to get crufty in spots, but it’s the price of maintaining your users’ happiness.
What Matters for Backards Compatibility?
For a Vim plugin the most important part of staying backwards compatible is ensuring that key mappings, customized or not, continue to do what users expect.
If your plugin maps key X
to do Y
, then pressing X
should always do Y
, even
if you change how Y
is called by renaming Y
to Z
. This may mean changing Y
into a wrapper function which simply calls Z
.
There are many other aspects of backwards compatibility that you will have to consider, depending on the purpose of your plugin. The rule of thumb you should follow is: if a user uses this plugin on a daily basis and has its usage burned into their muscle memory, updating the plugin should not make them relearn anything.
Use Semantic Versioning So I Can Stay Sane
A fast, simple, easy way to document your plugin’s state is to use [semantic versioning][].
Semantic versioning is simply the idea that instead of picking arbitrary version numbers for releases of your project, you use version numbers that describe the backwards-compatible state in a meaningful way.
In a nutshell, these rules describe how you should select version numbers for new releases:
- Version numbers have three components:
major.minor.bugfix
. For example:1.2.4
or2.13.0
. - Versions with a major version of 0 (e.g.
0.2.3
) make no guarantees about backwards compatibility. You are free to break anything you want. It’s only after you release1.0.0
that you begin making promises. - If a release introduces backwards-incompatible changes, increment the major version number.
- If a release is backwards-compatible, but adds new features, increment the minor version number.
- If a release simply fixes bugs, refactors code, or improves performance, increment the bugfix version number.
This simple scheme makes it easy for users to tell (in a broad sense) what has changed when they update your project.
If only the bugfix number has changed they can update without fear and continue on without worrying about changes unless they’re curious.
If the minor version number has changed they might want to look at the changelog to see what new features they may want to take advantage of, but if they’re busy they can simply update and move on.
If the major version number has changed it’s a major red flag, and they’ll want to read the changelog carefully to see what is different.
Some people don’t like semantic versioning for the following reason:
If I have to increment the major version number every time I make backwards-incompatible changes, I’ll quickly be at ugly versions like 24.1.2!
To this I say: “Yes, but if that happens you’re doing things wrong in the first place.”
Keep your project in “beta” (i.e. version 0.*.*
) for as long as you need to
experiment freely. Take your time and make sure you’ve gotten things (mostly)
right. Once you release 1.0.0
it’s time to start being responsible and caring
about backwards compatibility.
Breaking functionality all the time harms your users by reducing their productivity and frustrating them. Yes, it means adding some cruft to your code over time, but it’s the price of not being evil.
Document Everything
A critical part of releasing a Vim plugin to the world is writing documentation for it. Vim has fantastic documentation itself, so your plugins should follow in its footsteps and provide thorough docs.
Pick Some Requirements and Stick to Them
The most important part of your documentation is telling users what they need to have in order to use your plugin. Vim runs on nearly every system imaginable and can be compiled in many different ways, so being specific about your plugin’s requirements will save users a lot of trial and error.
- Does your plugin only work with Vim version X.Y or later?
- Does it require Python/Ruby/etc support compiled in? Which version?
- Does it not work on Windows?
- Does it rely on an external tool?
If the answer to any of those questions is “yes”, you must mention it in the documentation.
Write a README
The first step to documenting your plugin is to write a README file for the repository. You can also use the text of this file as the description if you upload your plugin to the vim website, or the content of your plugin’s website if you create one for it.
Some examples of things to include in your README are:
- An overview of what the plugin does.
- Screenshots, if possible.
- Requirements.
- Installation instructions.
- Common configuration options that many users will want to know.
- Links to:
- A canonical web address to find the plugin.
- The bug tracker for the plugin.
- The source code or repository of the plugin.
Create a Simple Website
This isn’t strictly necessary, but having a simple website for your plugin is an extra touch that makes it seem more polished.
It also gives you a canonical URL that people can visit to get the latest information about your plugin.
I’ve made simple sites for both of my plugins: Gundo and Threesome. Feel free to use them as an example or even take their code and use it for your own plugin sites if you like.
Write a Vim Help Document
The bulk of your plugin’s documentation should be in the form of a Vim help document.
Users are used to using Vim’s :help
and they’ll expect to be able to use it to
learn about your plugin.
Creating a help document is as easy as creating a doc/yourplugin.txt
file in your
project. It will be indexed automatically by pathogen#helptags()
so your users
will have the docs at their fingertips.
Two easy ways to learn the syntax of help files are by reading :help help-writing
and using an existing plugin’s help file as an example.
Take your time and craft a beautiful help file you can be proud of. Don’t be afraid
to add a bit of personality to your docs to break the dryness. The syntastic help
file is a great example (especially the About
section).
Things to include in your documentation:
- A brief overview of the plugin.
- A more in-depth description of how the plugin is used.
- Every single key mapping the plugin creates.
- Ways to extend the plugin, if applicable.
- All configuration variables (including their default values!).
- The plugin’s changelog.
- The plugin’s license.
- Links to the plugin’s repository and bug tracker.
In a nutshell: your help file should contain anything a user would ever need to know about your plugin.
Keep a Changelog
The last part of documenting your project is keeping a changelog. You can skip this
while your project is still in “beta” (i.e. less than version 1.0.0
) but once you
officially release a real version you need to keep your users informed about what has
changed between releases.
I like to include this log in the README, the plugin’s website, and the documentation to make it as easy as possible for users to see what’s changed.
Try to keep the language of the changelog at a high enough level for your users to understand without knowing anything about the implementation of your plugin. Things like “added feature X” and “fixed bug Y” are great, while things like “refactored the inner workings of utility function Z” are best left in commit messages.
Making Vimscript Palatable
The worst part about writing Vim plugins is, without a doubt, dealing with Vimscript. It’s an esoteric language that’s grown organically over the years seemingly without any strong design direction.
Features are added to Vim, then Vimscript features are added to control those features, then hacky workarounds are added for flexibility.
 Is " foo
a comment? Sometimes.
Much of the time you’ll spend writing your first plugin will be learning how to do things in Vimscript. The help documentation on all of its features is thorough, but it can be hard to find what you’re looking for if you don’t know the exact name. Looking through other plugins is often very helpful in pointing you toward what you need.
There are a couple of ways to ease the pain of Vimscript, and I’ll briefly talk about two of them here.
Wrap. Everything.
The first piece of advice I have is this: if you want to make your plugins readable and maintainable then you need to wrap up functionality even more than you would in other languages.
For example, my Gundo plugin has a few utility functions that look like this:
function! s:GundoGoToWindowForBufferName(name)"{{{ if bufwinnr(bufnr(a:name)) != -1 exe bufwinnr(bufnr(a:name)) . "wincmd w" return 1 else return 0 endif endfunction"}}}
This function will go to the window for the given buffer name and gracefully handle
the case where the buffer/window does not exist. It’s verbose but much more readable
than the alternative of using that if
statement in every place I need to switch windows.
As you write your plugin you’ll “grow” a number of these utility functions. Any time you duplicate code you should think about creating one, but you should also do so any time you write a particularly hairy line of Vimscript. Pulling complex lines out into named functions will save you a lot of reviewing and rethinking down the line.
Scripting Vim with Other Languages
Another option for making Vimscript less painful is to simply not use it much at all. Vim includes support for creating plugins in a number of other languages like Python and Ruby. Many plugin authors choose to move nearly all of their code into another language, using a small Vimscript “wrapper” to expose it to the user.
I decided to try this approach with Threesome after seeing it used in the vim-orgmode plugin to great effect. Overall I consider it to be a good idea, with a few caveats.
First, using another language will requires your plugin’s users to use a version of Vim compiled with support for that version. In this day and age it’s usually not a problem, but if you want your plugin to run everywhere then it’s not an option.
Using another language adds overhead. You need to not only learn Vimscript but also the interface between Vim and the language. For small plugins this can add more complexity to the project than it saves, but for larger plugins it can pay for itself. It’s up to you to decide whether it’s worth it.
Finally, using another language does not entirely insulate you from the eccentricities of Vimscript. You still need to learn how to do most things in Vimscript — using another language simply lets you wrap most of this up more neatly than you otherwise could.
Unit Testing Will Make You Drink
Unit testing (and other types of testing) is becoming more and more popular today. In particular the Python and Ruby communities seem to be getting more and more excited about it as time goes on.
Unfortunately, unit testing Vim plugins lies somewhere between “painful” and “garden-weaseling your face” on the difficulty scale.
I tried adding some unit tests to Gundo, but even after looking at a number of frameworks I was spending hours simply trying to get my tests to function.
I didn’t even bother trying to add tests to Threesome because for every hour I would have spent fighting Vim to create tests I could have cleaned up the code and fixed bugs instead.
I’ll gladly change my opinion on the subject if someone writes a unit testing framework for Vim that’s as easy to use as Cram. In fact, I’ll even buy the author a $100 bottle of scotch (or whatever they prefer).
Until that happens I personally don’t think it’s worth your time to unit test Vim plugins. Spend your extra hours reading documentation, testing things manually with a variety of settings, and thinking hard about your code instead.
TL;DR
Writing Vim plugins is tricky. Vimscript is a rabbit hole of sadness and despair, and trying to please all your users while maintaining backwards compatibility is a monumental task.
With that said, creating something that people use every day to help them make beautiful software projects is extremely rewarding. Even if your plugin doesn’t get many users, being able to use a tool you wrote is very satisfying.
So if you’ve got an idea for a plugin that would make Vim better just sit down, learn about Vimscript, create it, and release it so we can all benefit.
If you have any questions or comments feel free to hit me up on
Twitter. You might also enjoy following @dotvimrc where I try to
tweet random, bite-sized lines you might like to put in your .vimrc
file.


Helping your local favorites
reach you faster
Featured Items Near Reno, NY
Great Basin Co
location_on 1.3Km
Local Natural Bar Of Soap
Great Basin Co
location_on 1.3Km
Local Natural Bar Of Soap
$10.99
Great Basin Co
location_on 1.3Km
Local Natural Bar Of Soap
$10.99
Great Basin Co
location_on 1.3Km
Local Natural Bar Of Soap
$10.99
Great Basin Co
location_on 1.3Km
Local Natural Bar Of Soap
$10.99
Great Basin Co
location_on 1.3Km
Local Natural Bar Of Soap
$10.99
Great Basin Co
location_on 1.3Km
Local Natural Bar Of Soap
$10.99
Great Basin Co
location_on 1.3Km
Local Natural Bar Of Soap
$10.99
Featured Shops Near Reno, NY
Great Bags Vendor
location_on 1.3Km
Great Bags Vendor
location_on 1.3Km
Great Bags Vendor
location_on 1.3Km
Great Bags Vendor
location_on 1.3Km
Great Bags Vendor
location_on 1.3Km
Featured Local Stories
Why we choose bukit
While choosing our business
What is
What's it like using :
Anna Aston
Neque cupiditate assumenda in maiores repudiandae mollitia architecto.
Anna Aston
Neque cupiditate assumenda in maiores repudiandae mollitia architecto.
Maria Kate
Delectus impedit saepe officiis ab aliquam repellat, rem totam unde ducimus.


Interpreter Version 1.04
Enter the program you want to interpret below:hello
Output of the interpreter:
| Sample 1: | Integer literal | |
| Sample 2: | Variable | |
| Sample 3: | Primitive applications | |
| Sample 4: | Closure (constant function) | |
| Sample 5: | Closure (ident. function) | |
| Sample 6: | Closure (free variable) | |
| Sample 7: | Apply constant function | |
| Sample 8: | Apply ident. function | |
| Sample 9: | Apply function with free var. | |
| Sample 10: | Apply the square function | |
| Sample 11: | Higher-order fn: Apply twice | |
| Sample 12: | Higher-order fn: Compose |


{% extends "base.html" %} {% block title %}Maintenance{% endblock %} {% block content %}
Well, I'm doing something to the site. I can't guarantee that I'm making it better, but something's happening.


X
Click to open or drag&drop
Loop samples
35%
40%
45%
50%
55%
60%
Drum samples
Add sample
0.0 sec
Save
0.0 / 12 sec


Methods
Public Instance methods
Manually cache the content in the key determined by path. Example:
cache_page "I'm the cached content", "/lists/show"
[ show source ]
# File vendor/rails/actionpack/lib/action_controller/caching.rb, line 84 84: def cache_page(content, path) 85: return unless perform_caching 86: 87: benchmark "Cached page: #{page_cache_file(path)}" do 88: FileUtils.makedirs(File.dirname(page_cache_path(path))) 89: File.open(page_cache_path(path), "wb+") { |f| f.write(content) } 90: end 91: end
Caches the actions using the page-caching approach that’ll store the cache in a path within the page_cache_directory that matches the triggering url.
[ show source ]
# File vendor/rails/actionpack/lib/action_controller/caching.rb, line 95 95: def caches_page(*actions) 96: return unless perform_caching 97: actions.each do |action| 98: class_eval "after_filter { |c| c.cache_page if c.action_name == '#{action}' }" 99: end 100: end
Expires the page that was cached with the path as a key. Example:
expire_page "/lists/show"
[ show source ]
# File vendor/rails/actionpack/lib/action_controller/caching.rb, line 74 74: def expire_page(path) 75: return unless perform_caching 76: 77: benchmark "Expired page: #{page_cache_file(path)}" do 78: File.delete(page_cache_path(path)) if File.exists?(page_cache_path(path)) 79: end 80: end


This module walks through the process of building and pushing a Docker image of a small web application for later deployment. A Docker image is a deployable artifact that includes both application code and its dependencies. In this module, you’ll clone a repository from GitHub into your AWS Cloud9 workspace, build a Docker image from it, test it, and push it to the Amazon ECR repository created in the previous module.
The sample application is a simple web application for storing notable quotations. It’s written as a node.js application and uses the Express web framework and the AWS SDK. Quotations are stored in a simple DynamoDB table called quotes
.
The application has four endpoints:
| Endpoint | Description |
|---|---|
| PUT /quotes | Create a new quotation |
| GET /quotes/:quote_id | Show a specific quotation |
| GET /quotes | Show all quotations |
| GET / | Show status information |
Clone the sample application from the GitHub repo and build it using a tag of your repository from the repository URI you noted in the previous module.
✅ Step-by-step Instructions
Switch to the tab where you have your Cloud9 environment opened.
Clone the contents of the sample application to your environment by running git clone https://github.com/jpignata/fargate-workshop-app
in the Cloud9 terminal:
git clone https://github.com/jpignata/fargate-workshop-app
Admin:~/environment $ git clone https://github.com/jpignata/fargate-workshop-app
Cloning into 'fargate-workshop-app'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), done.
The fargate-workshop-app
directory will now appear in the environment explorer in the left-hand module. Expand it by clicking on it and open the files in the directory by double clicking on them.
Open the Dockerfile and inspect its contents. A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image.
FROM node:8.9.4 # Use node:8.9.4 as the base image
WORKDIR /app # Set the working directory for future commands
ENV PORT=80 # Set an environment variable in the container
EXPOSE 80 # Indicates that your container will listen on TCP 80
ADD index.js /app # Add index.js and package.json to
ADD package.json /app # the /app directory
RUN npm install --silent # Install dependencies into image
CMD ["node", "index.js"] # Set default command for containers run from
# this image
In the Cloud9 terminal, change your working directory to the newly cloned application directory by running: cd fargate-workshop-app
.
cd fargate-workshop-app
Build the Docker image and tag it using the repository URI you noted in the previous module. For example, if the repository URI were<PHONE_NUMBER>12.dkr.ecr.us-east-1.amazonaws.com/workshop
, then you’d run:
docker build --tag<PHONE_NUMBER>12.dkr.ecr.us-east-1.amazonaws.com/workshop .
Ensure that you change the image name to the repository URI you noted in the previous module. You’ll see Docker building the image by applying each directive of the above Dockerfile in realtime:
Admin:~/environment/fargate-workshop-app (master) $ docker build --tag<PHONE_NUMBER>12.dkr.ecr.us-east-1.amazonaws.com/workshop .

Verify that your Docker image has been built with the correct tag by running docker images <repository URI>
in the Cloud9 terminal. For example:
docker images<PHONE_NUMBER>12.dkr.ecr.us-east-1.amazonaws.com/workshop
Admin:~/environment/fargate-workshop-app (master) $ docker images<PHONE_NUMBER>12.dkr.ecr.us-east-1.amazonaws.com/workshop
REPOSITORY TAG IMAGE ID CREATED SIZE
123456789012.dkr.ecr.us-east-1.amazonaws.com/workshop latest 7fca0f295425 35 seconds ago 714MB
Create a DynamoDB table called quotes
that has a primary key called ID
which is a string.
✅ Step-by-step Instructions
Go to the AWS Management Console, click Services then select DynamoDB under Database.
Click Create table.
Enter quotes
in Table name and ID
in Primary Key. Leave the data type dropdown set to String. Leave Use default settings checked.
⚠ The table and primary key names are case-sensitive so please ensure you’ve typed quotes
and ID
exactly as shown.
Click Create.
Run a Docker container in your Cloud9 environment and experiment with it using curl
and jq
to verify it is working.
✅ Step-by-step Instructions
Switch to the tab where you have your Cloud9 environment opened.
Install jq
for JSON pretty printing.
To aid in your testing, install jq
which is a command line JSON processor. Install it by running sudo yum install -y jq
in the Cloud9 terminal.
sudo yum install -y jq
Run the Docker container by running docker run
in the Cloud9 terminal using the Docker image we built in step 1:
docker run --detach --publish 80:80 --volume $HOME/.aws:/root/.aws \
123456789012.dkr.ecr.us-east-1.amazonaws.com/workshop
You’ll need to change the last parameter to the Docker image tag you specified in step 1. Let’s look at each part of the command to understand what it is doing:
| Argument | Description |
|---|---|
| –detach | Run the container in the background to allow us to use the terminal to run other commands. |
| –publish 80:80 | Expose the container port 80 on the host. This will allow us to connect to <IP_ADDRESS>:80 and that traffic will be forwarded to your application running in the container. |
| –volume $HOME/.aws:/root/.aws | Mount your AWS configuration onto the container. This gives your application access to your AWS credentials for use in testing. |
|<PHONE_NUMBER>12.dkr.ecr.us-east-1.amazonaws.com/workshop | The docker image to run. Replace this parameter with the tag you used in step 1. |
Test the application using curl
:
curl -Ss http://<IP_ADDRESS>/ | jq
If the application is running, you’ll see a JSON object with the hostname which will match the container ID you saw after running the previous step:
Admin:~/environment/fargate-workshop-app (master) $ curl -Ss http://<IP_ADDRESS>/ | jq
Next, hit the quotes index endpoint to list all quotes in the database.
curl -Ss http://<IP_ADDRESS>/quotes | jq
As we haven’t added any quotes yet, we’ll see an empty array:
Admin:~/environment/fargate-workshop-app (master) $ curl -Ss http://<IP_ADDRESS>/quotes | jq
Add a quote to the database:
curl -Ss http://<IP_ADDRESS>/quotes -X PUT -H "Content-Type: application/json" -d '{"Text":"There are no passengers on spaceship earth. We are all crew.","AttributedTo":"Marshall McLuhan"}'
This command sends the following JSON object to the quotes create endpoint:
Hit the quotes index endpoint to list all quotes in the database to verify the quote has been added:
curl -Ss http://<IP_ADDRESS>/quotes | jq
The output will resemble this, with a different UUID:
Admin:~/environment/fargate-workshop-app (master) $ curl -Ss http://<IP_ADDRESS>/quotes | jq
Log into your Amazon ECR registry and push the Docker image into its repository.
✅ Step-by-step Instructions
Switch to the tab where you have your Cloud9 environment opened.
Log into your Amazon ECR registry using the helper provided by the AWS CLI in the Cloud9 terminal:
$(aws ecr get-login --no-include-email)
Admin:~/environment/fargate-workshop-app (master) $ $(aws ecr get-login --no-include-email)
Login Succeeded
Push your Docker image. Ensure you change the image to the image tag you used in step 1:
docker push<PHONE_NUMBER>12.dkr.ecr.us-east-1.amazonaws.com/workshop
You’ll see the Docker image being pushed:
Admin:~/environment/fargate-workshop-app (master) $ docker push<PHONE_NUMBER>12.dkr.ecr.us-east-1.amazonaws.com/workshop
The push refers to a repository [123456789012.dkr.ecr.us-east-1.amazonaws.com/workshop]
e27327a08730: Pushing [=======================================> ] 29.72MB/37.67MB
966f0d7cf16c: Pushed
719df9cfe13b: Pushed
f9cc7569a18f: Pushed
092504c250f7: Pushing [==================================================>] 4.184MB
299e6ab856be: Waiting
50599c766115: Waiting
d4141af68ac4: Waiting
8fe6d5dcea45: Waiting
06b8d020c11b: Waiting
b9914afd042f: Waiting
4bcdffd70da2: Waiting
🔑 Docker images are deployable artifacts that include both application code and its dependencies bundled.
🛠 You built a sample application with four simple REST endpoint and pushed it to the Amazon ECR repository created in Create a Docker Image Repository.
🛠 You created a DynamoDB table named quotes
to store data for your sample application.
✅ Proceed to the next module, Create a Service, wherein you’ll configure a task definition and its IAM role, create a load balancer, and create a new ECS service for this Docker container.


*** User 2017-05-05 22:13:41.835 ***
22:13:41.835 [info] Disabling blocking sync...
*** User 2017-05-05 22:13:41.839 ***
22:13:41.839 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-1@MacBook-Pro-de-Anne-France'
*** User 2017-05-05 22:13:43.324 ***
22:13:43.323 [info] Enabling membership...
*** User 2017-05-05 22:13:43.325 ***
22:13:43.325 [info] Disabling blocking sync...
*** User 2017-05-05 22:13:43.330 ***
22:13:43.330 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-2@MacBook-Pro-de-Anne-France'
*** User 2017-05-05 22:13:44.801 ***
22:13:44.800 [info] Enabling membership...
*** User 2017-05-05 22:13:44.802 ***
22:13:44.802 [info] Disabling blocking sync...
*** User 2017-05-05 22:13:44.807 ***
22:13:44.806 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-3@MacBook-Pro-de-Anne-France'
*** User 2017-05-05 22:13:45.032 ***
Joining node: 'node-3@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 54856
*** User 2017-05-05 22:13:45.033 ***
Joining issued: 'node-3@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 54856
*** User 2017-05-05 22:13:45.033 ***
Joining node: 'node-2@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 54840
*** User 2017-05-05 22:13:45.034 ***
Joining issued: 'node-2@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 54840
*** User 2017-05-05 22:13:45.034 ***
Joining node: 'node-1@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 54827
*** User 2017-05-05 22:13:45.035 ***
Joining issued: 'node-1@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 54827
*** User 2017-05-05 22:13:45.097 ***
Waiting for join to complete with manager: partisan_default_peer_service_manager
*** User 2017-05-05 22:13:45.098 ***
Finished.
*** CT 2017-05-05 22:13:45.098 *** COVER INFO
Adding nodes to cover test: ['runner@MacBook-Pro-de-Anne-France']
*** CT 2017-05-05 22:13:45.107 *** COVER INFO
Successfully added nodes to cover test: []
*** User 2017-05-05 22:13:53.136 ***
Case finished: filter_test
*** User 2017-05-05 22:14:00.208 ***
22:14:00.207 [info] Application lasp exited with reason: stopped
*** User 2017-05-05 22:14:00.208 ***
22:14:00.208 [info] Application partisan exited with reason: stopped
=== Ended at 2017-05-05 22:14:00
=== successfully completed test case
=== Returned value: ok
Test run history
| Top level test index


Survey Form
Thanks for taking part in this survey.
Enter your name
Enter your email
Age
Choose the country
India
China
Nigeria
Niger
Select your gender
Male
Female
Other
Select the vehicles you own
I have a bike
I have a car
Tell me about yoursef
Tell me about yourself
Submit


It is a long established fact that a reader will be
distracted by the readable content of
<EMAIL_ADDRESS><EMAIL_ADDRESS>The point of using Lorem Ipsum is that it has
a more-or-less normal distribution
795 Folsom Ave, an Francisco,
NY 20001
Many desktop publishing packages and web page
editors now use Lorem Ipsum as text
+<PHONE_NUMBER>
+<PHONE_NUMBER>


Important Dates
Start & End Dates
2015-2016: September 1 to May 26
Registration Dates
February 2, 2015: 12:00pm-2:00pm and 5:30-7:00pm
February 9, 16, & 23, 2015: 5:00-7:00pm
February 6, 13, 20, & 27, 2015: 12:00pm-2:00pm
Registration Cost is $30 and non-refundable (This will buy your school supplies.)
Please bring your child's birth certificate


What is R?
R is a language and environment for statistical computing and graphics. It is a GNU project which is similar to the S language and environment which was developed at Bell Laboratories (formerly AT&T, now Lucent Technologies) by John Chambers and colleagues...R provides a wide variety of statistical (linear and nonlinear modelling, classical statistical tests, time-series analysis, classification, clustering, ...) and graphical techniques, and is highly extensible.
Installing R
There are several examples workflows which use the R system. For these example to operate, R must be installed on the computer running the Kepler application. R can be freely downloaded from links on the R Project web site (http://www.r-project.org). Follow the instructions provided for installation. In addition, the R 'bin' directory must be added to the PATH variable on the host computer. A simple test to see if installation is correct is to open a command/terminal window and type the command 'R'. This should startup the R system and provide messages telling the user that R has been started.R ExampleWorkflows
There are several examples of using R in Kepler. Most use the RExpression actor which is described more fully in "docs/user/RExpressionActor.pdf". Most of the examples can be found in the 'workflows' subdirectory| Average Count Data by Species | This workflow accesses a table in the local filesystem and then averages count data by species. |
| EML Simple Plot | This example shows how to convert EML column data to arrays and then plot using R. This is an R version of the eml-simple-plot example. |
| Local File to
DataFrame Example |
This workflow shows how to read
a local table file into R and then process the information in the table. |
| Ecogrid Data Source to R DataFrame
(I) |
This example uses an EML2
Datasource as the source for an R DataFrame, passing the data as a file
name. |
| Ecogrid Data Source to R DataFrame (II) | This example uses an EML2 Datasource as the source for an R DataFrame, passing the data as a Kepler 'column record' token. |
| Sequence to Record Example |
This workflow shows how
sequences of values can be converted to arrays and then to a record,
creating a table which is passed to an RExpression actor. |
| Linear Regression
Example |
Here, the RExpression actor is
used to carry out a linear regression calculation and plot the results |
| EML Pairs Plot (from arrays) |
This workflow configures the
EML2 DataSource to supply arrays for each column. The arrays are
connected to RExpression. |
| Output from RExpression |
This example shows how the
RExpressions actor can output Kepler arrays |


--- date: 2015-01-12 13:00:02 author: Jen Gray title: "PhoneGap Day US 2014: PhoneGap Needs Design" format: html tags: - PhoneGap Day - Event - Community ---
A big thanks to everyone who was able to make it to PhoneGap Day US. We'll be posting more videos from the conference so check back on our blog or Youtube channel.
Our next session comes from Garth Braithwaite, Interaction Designer, Adobe.
How to incorporate great design in your PhoneGap apps.


A facet is an object which can be stored in a locale and retrieved from the locale based on its type. Facets encapsulate data about cultural and language dependencies. They also contain services (functions) that use the encapsulated data to help you internationalize your programs.
The C++ Standard Library defines a number of facet classes, which we call standard facets. These facets were reviewed in the previous chapter; they are present in every locale. You can derive your own facet classes from the standard facets, to modify their behavior. You can also create entirely new facet classes, to handle aspects of internationalization that the standard facets don't cover. Both of these processes are described later in this chapter.
In talking about facet classes, we need to distinguish between base facets and derived facets. A base facet is a class with the following properties:
It is derived from class std::locale::facet.
It contains a static data member named id, of type std::locale::id.
These properties make it possible to store the facet in a locale, and to retrieve it from the locale based on its type. A locale contains at most one facet of each base facet type.
A derived facet is a class that is derived from a base facet, but does not contain its own static std::locale::id member. Instead, it inherits this member from the base facet it derives from. Like any facet, a derived facet can be stored in a locale, but it occupies the same slot in the locale as its base facet, displacing any other facet that was in that slot. For example, the following skeletal code defines a mythical base facet and a facet derived from it, and shows some of the ways these mythical facets can be stored in and retrieved from locales:
class mythical: public std::locale::facet { //1 public: static std::locale::id id; ... // etc }; std::locale::id mythical::id; class mythical_byname: public mythical { //2 public: mythical_byname (char *name,/*etc*/); // Constructor ... // etc }; int main (void) { std::locale loc0(std::locale::classic()); //3 std::locale loc1(loc0,new mythical); //4 std::locale loc2(loc1,new mythical_byname("he_DO")); //5 const mythical& m2=std::use_facet<mythical>(loc2); //6 const mythical& m1=std::use_facet<mythical>(loc1); //7 const mythical& m0=std::use_facet<mythical>(loc0); //8 }
| //1 | An example of a base facet class, derived from std::locale::facet and containing a static std::locale::id member name id. |
| //2 | A derived facet class. |
| //3 | A copy of the classic locale. Like all locales, it contains many facets. The facets are kept in slots indexed by the set of possible base facet types. Thus there is one slot for the base facet type mythical. In the classic locale, this mythical slot is empty. |
| //4 | A copy of loc0, the classic locale, with its mythical slot now occupied by a newly-created mythical facet. |
| //5 | A copy of loc1, but with the mythical slot now occupied by a newly-created mythical_byname facet. |
| //6 | This returns a reference to the mythical_byname facet constructed in //5. However, note that you no longer know that it is a mythical_byname facet (short of using RTTI, which is cheating in this context). All you know is that it is a mythical facet, because it came from the mythical slot in the locale. (The std::use_facet function template is described in more detail later in this chapter.) |
| //7 | This returns a reference to the mythical facet constructed in step //4. |
| //8 | This causes a std::bad_cast exception to be thrown, because the mythical slot in loc0 is empty. |
The standard facets that come with the library are all defined as class templates. The first template parameter is always the character type the facet will operate on, which is usually char or wchar_t. Some of the facets have additional template parameters. As another example of the distinction between base facets and derived facets, here is a stripped-down version of the Standard facet template std::numpunct, which takes a single template parameter.
template <class charT> class numpunct: public std::locale::facet { public: static std::locale::id id; ... // etc }; template <class charT> class numpunct_byname: public numpunct<charT> { ... // etc };
Typically, these templates are instantiated on char and wchar_t, so the following are base facet types:
std::numpunct<char> std::numpunct<wchar_t>
and the following are derived facet types:
std::numpunct_byname<char> std::numpunct_byname<wchar_t>
If your application created its own character type my_char_t, then std::numpunct<my_char_t> would be a base facet type and std::numpunct_byname<my_char_t> would be a derived facet type.


Paul Krugman 은 Legends of the Fail 에서
유로의 탄생은 이데올로기 양편을 가로지르는 아이디어였다고 이야기함.
First things first: The attempt to create a common European currency was one of those ideas that cut across the usual ideological lines. It was cheered on by American right-wingers, who saw it as the next best thing to a revived gold standard, and by Britain’s left, which saw it as a big step toward a social-democratic Europe.
미국 우파 + 영국 좌파 | 영국 보수파 + 미국 리버럴 로 쪼개버렸기 때문에,
기존 대립각을 골때리게 관통.
But it was opposed by British conservatives, who also saw it as a step toward a social-democratic Europe. And it was questioned by American liberals, who worried — rightly, I’d say (but then I would, wouldn’t I?) — about what would happen if countries couldn’t use monetary and fiscal policy to fight recessions.
유로 사태를 정치적으로 이용하려는 세력들이 준동. 복지를 깐다던가. 정부의 재정정책을 깐다던가.
The euro crisis, then, says nothing about the sustainability of the welfare state. But does it make the case for belt-tightening in a depressed economy?
과분한 복지와는 아무런 상관이 없다고 이야기함.
Oh, and Canada, which has universal health care and much more generous aid to the poor than the United States, has weathered the crisis better than we have.
자국의 통화로 돈을 빌릴 수 있느냐 없느냐가 핵심. 일본은 계속 국채 발행하고 저금리로 국채에 대한 이자 부담을 최소화하고 있음.
First, if you look around the world you see that the big determining factor for interest rates isn’t the level of government debt but whether a government borrows in its own currency. Japan is much more deeply in debt than Italy, but the interest rate on long-term Japanese bonds is only about 1 percent to Italy’s 7 percent. Britain’s fiscal prospects look worse than Spain’s, but Britain can borrow at just a bit over 2 percent, while Spain is paying almost 6 percent.
스페인, 이탈리아는 자국 통화 표시 국채발행으로 자금 조달이 안되는 제3세계 국가의 처지로 전락. 국가 단위에서 유로 돈 찍어낼 권한도 없음.
What has happened, it turns out, is that by going on the euro, Spain and Italy in effect reduced themselves to the status of third-world countries that have to borrow in someone else’s currency, with all the loss of flexibility that implies. In particular, since euro-area countries can’t print money even in an emergency, they’re subject to funding disruptions in a way that nations that kept their own currencies aren’t — and the result is what you see right now. America, which borrows in dollars, doesn’t have that problem.


Here are suggestions based on your course history! (40 Results)
1010 Calculus I
Functions, limits, continuity, derivatives, implicit differentiation, related rates, maxima and minima, elementary transcendental functions, introduction to definite integral with applications to area and volumes of revolution.
1150 Honors Physics I
1140 Minds And Machines
This course is an introduction to the philosophy of mind and cognitive science. Students meet in small sections to have class discussions and debates about questions like: What are minds? Are minds physical or non-physical? Do we have free will? Does our reliance on technology turn us into cyborgs? How close are we to building an intelligent robot or machine? Do we want to? Students will learn how make a philosophical argument, and how to express them in writing or through an oral presentation. This course is communication intensive.
1200 Data Structures
Programming concepts: functions, parameter passing, pointers, arrays, strings, structs, classes, templates. Mathematical tools: sets, functions, and relations, order notation, complexity of algorithms, proof by induction. Data structures and their representations: data abstraction and internal representation, sequences, trees, binary search trees, associative structures. Algorithms: searching and sorting, generic algorithms, iterative and recursive algorithms. Methods of testing correctness and measuring performance.
1100 Physics I
The first semester of a two-semester sequence of interactive courses. Topics include linear and angular kinematics and dynamics, work and energy, momentum and collisions, forces and fields, gravitation, oscillatory motion, waves, sound and interference.
1200 Physics Ii
1200 Introductory Economics
Every society faces the question of choosing how to use its natural and human resources to produce goods and services and how to distribute these resources among its people. This course studies how these choices are made in markets. It also explains the determinants of total output, employment, and inflation. Attention may also be given to special topics such as the environment, trade, and population.
2010 Multivariable Calculus And Matrix Algebra
1010 Introduction To Biology
Introduction to biological systems. Discussion of problems associated with biological organization, scaling, and hierarchy. Major topics covered include evolution, genetics, molecular biology and biotechnology, and ecology. The course considers the biological components of various societal and individual problems. Taught in Web-based, interactive studio mode with emphasis on biological simulations, problem solving, and peer teaching methods.
2800 Introduction To Sports Psychology
An introduction to psychology as applied to sport; the topics covered include history of sport behavior, principles of learning and their application, anxiety and arousal, motivation, leadership, cohesion, audience effects, aggression, personality assessment, female athletes, youth in sport, coach behavior, and physical activity for all.
1100 Introduction To Engineering Analysis
An integrated development of linear algebra and statics emphasizing engineering applications and also incorporating computer exercises involving matrix techniques and calculations using available software packages.
2730 Social Psychology
This is a survey course covering theories, methods, and empirical research on personal and situational factors influencing social behavior. Topics covered include social perception, the construction of social reality, decision making, group influences on behavior, and attitudes. This is a communication-intensive course.
2200 Foundations Of Computer Science
This course introduces important mathematical and theoretical tools for computer science, including topics from set theory, combinatorics, and probability theory, and then proceeds to automata theory, the Turing Machine model of computation, and notions of computational complexity. The course will emphasize formal reasoning and proof techniques.
2600 Moral Development
An analysis of psychological research on how our common sense moral beliefs develop from early childhood through old age, and their application to daily problems. A major focus is on the conflict between themes of justice or individual rights and caring compassion and its relation to gender differences (the Kohlberg/Gilligan debate).
2140 Introduction To Logic
Introduction to first-order logic as a tool to be used in engineering, computer science, philosophy, etc., and as procedural knowledge helpful in puzzle-solving environments (e.g., standardized tests). A hands-on laboratory component is included.
1200 Basic Drawing
An introductory course in drawing designed to develop seeing ability and means of expressing visual ideas through graphic skills. The course consists of exercises in drawing from observation and studies from the history of art.
1400 Engineering Communications
This is an undergraduate introductory course covering basic concepts and skills in engineering communication. Topics include technical writing, project planning and proposal writing, data visualization, system modeling and simulation, engineering graphics and CAD, and effective uses of software tools.
1971 Democracy As Democratism
No description
4965 Rcos
No description
2400 Introduction To Differential Equations
First-order differential equations, second-order linear equations, eigenvalues and eigenvectors of matrices, systems of first-order equations, stability and qualitative properties of nonlinear autonomous systems in the plane, Fourier series, separation of variables for partial differential equations.
1100 Introduction To Management
This is a required first course for management majors and minors. In a case-based format, it emphasizes broad, basic principles of managerial functions and processes using an interdisciplinary approach to goal-oriented situations of private and public organizations. This is a communication-intensive course.
4330 Theoretical Mechanics
1110 Science, Technology, And Society
An introduction to the social, historical, and ethical influences on modern science and technology. Cases include development of the atomic bomb, mechanization of the workplace, Apollo space program, and others. Readings are drawn from history, fiction, and social sciences; films and documentary videos highlight questions about the application of scientific knowledge to human affairs. The class is designed to give students freedom to develop and express their own ideas. This is a communication-intensive course.
1040 Art For Interactive Media
This course combines an introduction to traditional visual arts and digital media and serves as a foundation for work in game design and interactive art. Using studio projects that incorporate physical media, digital imaging and computer code, students develop their formal vocabulary, observational skills, and their understanding of issues in visual and interactive arts.
1300 Engineering Processes
The use of basic machine tools such as lathes, milling machines, drill presses, band saws, and grinders, including micrometers, vernier calipers, and other devices of use in a machine shop or laboratory. Welding techniques and tool making are also considered.
1520 Sociology
A study of the principles and concepts of sociology and their application to the study of society and self. Students are introduced to the scope, materials, and methods of sociology. The issues and problems to be studied come from basic social institutions such as the family, science, and religion. Other topics may include love, crime, political economy, power, population growth, social class, and minority and ethnic relations. This is a communication-intensive course.
1940 Perception/ Action Research
No description
1030 Digital Filmmaking
This is a hands-on introduction to film making. Students study a selection of great films; and learn how to make movies using lightweight field production equipment. Throughout the course students produce a variety of short videos in different genres, and develop their critical capacity for analyzing cinema and other forms of motion picutre storytelling. The class ends with a mini film festival where everyone presents their work.
1110 Chemistry I With Advanced Lab
1100 Chemistry I
Principles of chemistry, with particular focus on atomic and molecular structure and bonding, periodicity, basic thermodynamic principles, introduction to acid-base chemistry and elementarychemical equilibrium, and introduction to organic chemistry. Students cannot get credit for both this course and CHEM 1110.
2120 Introduction To Cell And Molecular Biology
Structural and functional relationships of cells are discussed with regard to similarities among all living organisms. Introduction to cellular biochemistry, metabolism and energy flow, cellular and Mendelian genetics, and the chemical basis of heredity. The laboratory exercises illustrate current concepts in cellular and molecular biology.
1015 Introduction To Biology Laboratory
The goal of this laboratory course is to learn about biology through hands-on, project-based lab activities that engage students in actual biology experiments and procedures - learning biology by actually doing biology.
2500 Computer Organization
Introduction to computer organization, assembler language, and operating systems. Computer systems organization: processors, memory, I/O. Digital logic: gates, Boolean algebra, digital logic circuits, memory, buses. Microprogramming. Machine level: instruction formats, addressing modes, instruction types, flow of control. Operating systems: virtual memory, virtual I/O instructions, processes, interprocess communication. Numeric representation. Assembler language: the assembly process, macros, linking, loading. Advanced architectures: RISC architectures, parallel architectures.
2010 Managerial Economics
Applies the microeconomic theory of the firm to price, cost, and output decisions of business enterprises under different market structures. Regression analysis of demand and cost, linear programming of production and simulation analysis of risk, and capital budgeting are also presented.
1510 Introduction To Communication Theory
This course introduces students to basic topics in communication theory, including interpersonal, small group, organizational, and mass communication. Students will study a variety of theories related to these topics and will also study the cultural impact of new communication technologies and contemporary media systems.
2520 Introduction To Game Design
This course looks at the mathematics of game theory from a psychological perspective and serves as a primer in video game design. The psychology of players and designers are discussed, as well as the cognitive processes that people use when solving game-related puzzles. Additional topics include logic, human frailty, role playing, artificial intelligence, kinesics, theater, and human-computer interaction.
1200 Engineering Graphics And Cad
An introduction to the techniques for creating solid models of engineering designs. Topics include three-dimensional modeling of parts and assemblies, visualization, orthographic and isometric free-hand sketching, and computer-generated design documentation.
1110 Science, Technology, And Society
An introduction to the social, historical, and ethical influences on modern science and technology. Cases include development of the atomic bomb, mechanization of the workplace, Apollo space program, and others. Readings are drawn from history, fiction, and social sciences; films and documentary videos highlight questions about the application of scientific knowledge to human affairs. The class is designed to give students freedom to develop and express their own ideas. This is a communication-intensive course.
4050 Computability And Complexity
1961 How To Change The World
No description


Highlights from The Color Purple by Alice Walker
Highlights from this book
-
It all I can do not to cry. I make myself wood.  That’s how come I know trees fear man.

-
There’s no beginning or end to teaching and learning and working—it all runs together.
-
We know a roofleaf is not Jesus Christ, but in its own humble way, is it not God?
-
She say, Celie, tell the truth, have you ever found God in church? I never did.  Any God I ever felt in church I brought in with me. And I think all the other folks did too. They come to church to share God, not find God.
 You come into the world with God. But only them that search for it inside find it. And sometimes it just manifest itself even if you not looking, or don’t know what you looking for. Trouble do it for most folks, I think. Sorrow, lord.
-
My first step from the old white man was trees. Then air. Then birds. Then other people. But one day when I was sitting quiet and feeling like a motherless child, which I was, it come to me: that feeling of being part of everything, not separate at all. I knew that if I cut a tree, my arm would bleed. And I laughed and I cried and I run all around the house.
-
God love all them feelings. That’s some of the best stuff God did. And when you know God loves ’em you enjoys ’em a lot more. You can just relax, go with everything that’s going, and praise God by liking what you like...more than anything else, God love admiration.
 But any fool living in the world can see it always trying to please us back.
-
I just feel funny living in a square. If I was square, then I could take it better, she say.
-
She got a right to look over the world in whatever company she choose. Just cause I love her don’t take away none of her rights.
-
Here us is, I thought, two old fools left over from love, keeping each other company under the stars.
-
The only way to stop making somebody the serpent is for everybody to accept everybody else as a child of God, or one mother’s children, no matter what they look like or how they act.
-
It didn’t take long to realize I didn’t hardly know nothing.
-
I think us here to wonder, myself. To wonder. To ask. And that in wondering bout the big things and asking bout the big things, you learn about the little ones, almost by accident. But you never know nothing more about the big things than you start out with. The more I wonder, he say, the more I love.


XML学习笔记2读取元素属性和内容值 Supporting tagline
示例XML文件：
<?xml version="1.0" encoding="utf-8" ?>
<!-- This is list of employees -->
<employees>
<employee employeeid="1">
<firstname>Nancy</firstname>
<lastname>Davolio</lastname>
<homephone>(206) 555-9857</homephone>
<notes>
<![CDATA[includes a BA in psychology from Colorado State University in
1970. She also completed "The Art of the Cold Call." Nancy is a member of
Toastmasters International.]]>
</notes>
</employee>
<employee employeeid="2">
<firstname>Andrew</firstname>
<lastname>Fuller</lastname>
<homephone>(206) 555-9482</homephone>
<notes>
<![CDATA[Andrew received his BTS commercial in 1974 and a Ph.D. in
international marketing from the University of Dallas in 1981. He is fluent
in French and Italian and reads German. He joined the company as a sales
representative, was promoted to sales manager in January 1992 and to vice
president of sales in March 1993. Andrew is a member of the Sales
Management Roundtable, the Seattle Chamber of Commerce, and the Pacific
Rim Importers Association.]]>
</notes>
</employee>
<employee employeeid="3">
<firstname>Janet</firstname>
<lastname>Leverling</lastname>
<homephone>(206) 555-3412</homephone>
<notes>
<![CDATA[Janet has a BS degree in chemistry from Boston College (1984).
She has also completed a certificate program in food retailing management.
Janet was hired as a sales associate in 1991 and promoted to sales
representative in February 1992.]]>
</notes>
</employee>
</employees>
1、在XML文档的元素间移动(Moving Between Elements)
五个基本方法：
ReadSubTree()方法：读取当前节点的子节点并返回XMLReader实例的一个子树。当你解析一个较大的XML文件，但是只希望处理其中的少部分数据的时候，这个方法非常有效。
作用示意如下图：
ReadToDescendant()：
ReadToFollowing()
ReadToNextSibling()
blog comments powered by Disqus


×
OK
Welcome to the Login Page.
Please login below.
User
OR REGISTER HERE
Password
Password is CaSe 53n51T1v3


Shopper status is required.
Date is required.
Shopper name is required.
Shopper lastname is required.
Shopper phone is required.
Shopper email is required.
Shopper zipcode is required.
Shopper referral is required.


CLOUD ENGINEER | DEVOPS
Senior Engineer and DevOps with 5+ years of experience integrating cloud platforms
Lead the web, cloud integrations and configure Azure resources that communicate and send information to Google Cloud topics, which supports business capabilities, such as product configuration and inventory management
Increase the online channel sales by 20% through the creation of NodeJS and Java microservices in the cloud for the retail company LATAM Tottus, thereby supporting retail commercial capabilities such as Warehouse Management and Supplier Management
Build pipelines for the continuous integration and deployment of the retail company Falabella in order to accelerate the development process, achievement to reduce the delivery time by 50%
Analyze and design the cloud architecture for integration with the “Fazil” mobile application and the web platform that supports orders created by more than 80,000 users.
Improve the organizational efficiency and reduce personnel costs by USD 15 000 per year through the development of the backend NodeJS service and deployment of the first mobile application in the region for the attendance record of employees
Contribution to the return on investment of the project by 65% for the development with Java web services applications and deployments on AWS that supported the new applications of Digital Transformation project for the LATAM Telecom Entel.
Reduce personnel costs by USD 30 000 per year for the international bank BBVA to the automation of accounting and financial processes, by implementing a new solution with a JAVA web application to safeguard files from legacy systems.
Reduce personnel costs by USD 30 000 per year for the international bank BBVA to the automation of accounting and financial processes, by implementing a new solution with a JAVA web application to safeguard files from legacy systems.
Design and plan the mobile Android & IOS project App ULima, achieving to launch the application 2 months before the estimate, which benefited more than 20,000 students and teachers.


Forest of the Lost [ap58], forest, in Imperia, peasants: 137
Last updated Turn #127
Forest of the Lost [ap58], forest, in Imperia, peasants: 137
------------------------------------------------------------------------
11: Stack of nazgul [ik8z], nazgul, number: 5, went east.
12: Stack of nazgul [jt2f], nazgul, arrived from the east.
12: Stack of nazgul [fi1q], nazgul, number: 3, arrived from the east.
14: Stack of nazgul [jt2f], nazgul, went south.
14: Stack of nazgul [fi1q], nazgul, number: 3, went west.
19: Stack of nazgul [hb6r], nazgul, arrived from the west.
19: Stack of nazgul [is3t], nazgul, number: 2, arrived from the west.
19: It has begun to rain.
21: Stack of nazgul [hb6r], nazgul, went east.
21: Stack of nazgul [is3t], nazgul, number: 2, went east.
22: Stack of nazgul [jt2f], nazgul, arrived from the south.
24: Stack of nazgul [jt2f], nazgul, went west.
24: Stack of nazgul [gh5z], nazgul, number: 2, arrived from the east.
26: Stack of nazgul [gh5z], nazgul, number: 2, went west.
30: The population grows by one peasant.
Routes leaving Forest of the Lost:
North, to Ocean [ao58], The Inner Sea, 2 days
East, forest, to Forest of the Lost [ap59], 8 days
South, forest, to Forest of the Lost [aq58], 8 days
West, forest, to Forest of the Lost [ap57], 8 days
It is raining.
Seen here:
Stack of nazgul [dh4y], nazgul, number: 3
Stack of nazgul [dv5b], nazgul, number: 3


@* * Copyright 2021 HM Revenue & Customs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @import play.twirl.api.Html @this() @(id: String, questionText:String, questionScreenReaderText: String, questionCategory:String, answerValue:String = "", link:Option[Call] = None, linkScreenReader:String )(implicit messages: Messages)


User-defined types can be defined as either struct
s or class
es. The only difference is
in the default protection that applies to members defined before the first protection label:
Members defined after struct are public
; those defined after class are private
.
Protection labels control access to members of a class type: public
members are generally
accessible; private
members are accessible only to members of the class. Protection
labels can appear in any order and multiple times within a class.
Member functions: Types may define member functions as well as data. Member functions are implicitly called on behalf of a specific object. References to member data or functions from within a member function are implicitly bound to that object.
Member functions can be defined inside or outside the class definition. Defining a member function inside the class asks the implementation to expand calls to it inline, thus avoiding function call overhead. Outside the class, the name of the function must be qualified to indicate that it is from the class scope: class-name::member-name refers to the member member-name from the class class-name.
Member functions can be defined as const
by inserting the const
keyword after the
parameter list. Such members may not change the state of the object on which they are
invoked. Only const
member functions may be called for const
objects.
Constructors are special member functions that define how objects of the type are initialized. Constructors have the same name as the class and have no return value. A class can define multiple constructors as long as they differ in the number or types of their arguments. It is good practice for every constructor to ensure that every data member has a sensible value on exit from the constructor.
Constructor initializer list: A constructor initializer is a comma-separated list of member- name (value) pairs. Each member-name is initialized from the associated value. Data members that are not explicitly initialized are implicitly initialized.
The order in which members are initialized is determined by the order of declaration in the class, so care must be taken when using one class member to initialize another. It is safer practice to avoid such interdependence by assigning values to these members inside the constructor body and not initializing them in the constructor initializer.
9-0. Compile, execute, and test the programs in this chapter.
9-1. Reimplement the Student_info
class so that it calculates the final grade
when reading the
student's record, and stores that grade in the object. Reimplement the grade
function to use
this precomputed value.
9-2. If we define the name
function as a plain, nonconst
member function, what other functions
in our system must change and why?
9-3. Our grade
function was written to throw an exception if a user tried to calculate a grade for
a Student_info
object whose values had not yet been read. Users who care are expected
to catch this exception. Write a program that triggers the exception but does not catch it.
Write a program that catches the exception.
9-4. Rewrite your program from the previous exercise to use the valid
function, thereby avoiding
the exception altogether.
9-5. Write a class and associated functions to generate grades for students who take the course for pass/fail credit. Assume that only the midterm and final grades matter, and that a student passes with an average exam score greater than 60. The report should list the students in alphabetical order, and indicate P or F as the grade.
9-6. Rewrite the grading program for the pass/fail students so that the report shows all the students who passed, followed by all the students who failed.
9-7. The read_hw
function §4.1.3/57 solves a general problem (reading a sequence of values into
a vector
) even though its name suggests that it should be part of the implementation of
Student_info
. Of course, we could change its nameóbut suppose, instead, that you
wanted to integrate it with the rest of the Student_info
code, in order to clarify that it was
not intended for public access despite its apparent generality? How would you do so?


{{- partial "computed_track_fields.html" . -}} {{- $speed_rating := .Scratch.Get "speed_rating" -}} {{- $geometry_type := .Scratch.Get "geometry_type" -}}


ARDUINO-ADD-GROUPS(1) ARDUINO-ADD-GROUPS(1) NAME arduino-add-groups - permission fixer for Arduino development boards. SYNOPSIS arduino-add-groups DESCRIPTION This program takes no options and will add current user to the dialout group. SEE ALSO http://www.arduino.cc/ AUTHOR arduino-add-groups was written by mavit <mavit on github> This manual page was written by Scott Howard<EMAIL_ADDRESS>for the Debian project (and may be used by others). December 23, 2011 ARDUINO-ADD-GROUPS(1)